[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/js/dist/ -> editor.js (source)

   1  /******/ (function() { // webpackBootstrap
   2  /******/     var __webpack_modules__ = ({
   3  
   4  /***/ 6411:
   5  /***/ (function(module, exports) {
   6  
   7  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
   8      autosize 4.0.4
   9      license: MIT
  10      http://www.jacklmoore.com/autosize
  11  */
  12  (function (global, factory) {
  13      if (true) {
  14          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  15          __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  16          (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  17          __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  18      } else { var mod; }
  19  })(this, function (module, exports) {
  20      'use strict';
  21  
  22      var map = typeof Map === "function" ? new Map() : function () {
  23          var keys = [];
  24          var values = [];
  25  
  26          return {
  27              has: function has(key) {
  28                  return keys.indexOf(key) > -1;
  29              },
  30              get: function get(key) {
  31                  return values[keys.indexOf(key)];
  32              },
  33              set: function set(key, value) {
  34                  if (keys.indexOf(key) === -1) {
  35                      keys.push(key);
  36                      values.push(value);
  37                  }
  38              },
  39              delete: function _delete(key) {
  40                  var index = keys.indexOf(key);
  41                  if (index > -1) {
  42                      keys.splice(index, 1);
  43                      values.splice(index, 1);
  44                  }
  45              }
  46          };
  47      }();
  48  
  49      var createEvent = function createEvent(name) {
  50          return new Event(name, { bubbles: true });
  51      };
  52      try {
  53          new Event('test');
  54      } catch (e) {
  55          // IE does not support `new Event()`
  56          createEvent = function createEvent(name) {
  57              var evt = document.createEvent('Event');
  58              evt.initEvent(name, true, false);
  59              return evt;
  60          };
  61      }
  62  
  63  	function assign(ta) {
  64          if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
  65  
  66          var heightOffset = null;
  67          var clientWidth = null;
  68          var cachedHeight = null;
  69  
  70  		function init() {
  71              var style = window.getComputedStyle(ta, null);
  72  
  73              if (style.resize === 'vertical') {
  74                  ta.style.resize = 'none';
  75              } else if (style.resize === 'both') {
  76                  ta.style.resize = 'horizontal';
  77              }
  78  
  79              if (style.boxSizing === 'content-box') {
  80                  heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
  81              } else {
  82                  heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
  83              }
  84              // Fix when a textarea is not on document body and heightOffset is Not a Number
  85              if (isNaN(heightOffset)) {
  86                  heightOffset = 0;
  87              }
  88  
  89              update();
  90          }
  91  
  92  		function changeOverflow(value) {
  93              {
  94                  // Chrome/Safari-specific fix:
  95                  // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
  96                  // made available by removing the scrollbar. The following forces the necessary text reflow.
  97                  var width = ta.style.width;
  98                  ta.style.width = '0px';
  99                  // Force reflow:
 100                  /* jshint ignore:start */
 101                  ta.offsetWidth;
 102                  /* jshint ignore:end */
 103                  ta.style.width = width;
 104              }
 105  
 106              ta.style.overflowY = value;
 107          }
 108  
 109  		function getParentOverflows(el) {
 110              var arr = [];
 111  
 112              while (el && el.parentNode && el.parentNode instanceof Element) {
 113                  if (el.parentNode.scrollTop) {
 114                      arr.push({
 115                          node: el.parentNode,
 116                          scrollTop: el.parentNode.scrollTop
 117                      });
 118                  }
 119                  el = el.parentNode;
 120              }
 121  
 122              return arr;
 123          }
 124  
 125  		function resize() {
 126              if (ta.scrollHeight === 0) {
 127                  // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
 128                  return;
 129              }
 130  
 131              var overflows = getParentOverflows(ta);
 132              var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
 133  
 134              ta.style.height = '';
 135              ta.style.height = ta.scrollHeight + heightOffset + 'px';
 136  
 137              // used to check if an update is actually necessary on window.resize
 138              clientWidth = ta.clientWidth;
 139  
 140              // prevents scroll-position jumping
 141              overflows.forEach(function (el) {
 142                  el.node.scrollTop = el.scrollTop;
 143              });
 144  
 145              if (docTop) {
 146                  document.documentElement.scrollTop = docTop;
 147              }
 148          }
 149  
 150  		function update() {
 151              resize();
 152  
 153              var styleHeight = Math.round(parseFloat(ta.style.height));
 154              var computed = window.getComputedStyle(ta, null);
 155  
 156              // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
 157              var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
 158  
 159              // The actual height not matching the style height (set via the resize method) indicates that 
 160              // the max-height has been exceeded, in which case the overflow should be allowed.
 161              if (actualHeight < styleHeight) {
 162                  if (computed.overflowY === 'hidden') {
 163                      changeOverflow('scroll');
 164                      resize();
 165                      actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
 166                  }
 167              } else {
 168                  // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
 169                  if (computed.overflowY !== 'hidden') {
 170                      changeOverflow('hidden');
 171                      resize();
 172                      actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
 173                  }
 174              }
 175  
 176              if (cachedHeight !== actualHeight) {
 177                  cachedHeight = actualHeight;
 178                  var evt = createEvent('autosize:resized');
 179                  try {
 180                      ta.dispatchEvent(evt);
 181                  } catch (err) {
 182                      // Firefox will throw an error on dispatchEvent for a detached element
 183                      // https://bugzilla.mozilla.org/show_bug.cgi?id=889376
 184                  }
 185              }
 186          }
 187  
 188          var pageResize = function pageResize() {
 189              if (ta.clientWidth !== clientWidth) {
 190                  update();
 191              }
 192          };
 193  
 194          var destroy = function (style) {
 195              window.removeEventListener('resize', pageResize, false);
 196              ta.removeEventListener('input', update, false);
 197              ta.removeEventListener('keyup', update, false);
 198              ta.removeEventListener('autosize:destroy', destroy, false);
 199              ta.removeEventListener('autosize:update', update, false);
 200  
 201              Object.keys(style).forEach(function (key) {
 202                  ta.style[key] = style[key];
 203              });
 204  
 205              map.delete(ta);
 206          }.bind(ta, {
 207              height: ta.style.height,
 208              resize: ta.style.resize,
 209              overflowY: ta.style.overflowY,
 210              overflowX: ta.style.overflowX,
 211              wordWrap: ta.style.wordWrap
 212          });
 213  
 214          ta.addEventListener('autosize:destroy', destroy, false);
 215  
 216          // IE9 does not fire onpropertychange or oninput for deletions,
 217          // so binding to onkeyup to catch most of those events.
 218          // There is no way that I know of to detect something like 'cut' in IE9.
 219          if ('onpropertychange' in ta && 'oninput' in ta) {
 220              ta.addEventListener('keyup', update, false);
 221          }
 222  
 223          window.addEventListener('resize', pageResize, false);
 224          ta.addEventListener('input', update, false);
 225          ta.addEventListener('autosize:update', update, false);
 226          ta.style.overflowX = 'hidden';
 227          ta.style.wordWrap = 'break-word';
 228  
 229          map.set(ta, {
 230              destroy: destroy,
 231              update: update
 232          });
 233  
 234          init();
 235      }
 236  
 237  	function destroy(ta) {
 238          var methods = map.get(ta);
 239          if (methods) {
 240              methods.destroy();
 241          }
 242      }
 243  
 244  	function update(ta) {
 245          var methods = map.get(ta);
 246          if (methods) {
 247              methods.update();
 248          }
 249      }
 250  
 251      var autosize = null;
 252  
 253      // Do nothing in Node.js environment and IE8 (or lower)
 254      if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
 255          autosize = function autosize(el) {
 256              return el;
 257          };
 258          autosize.destroy = function (el) {
 259              return el;
 260          };
 261          autosize.update = function (el) {
 262              return el;
 263          };
 264      } else {
 265          autosize = function autosize(el, options) {
 266              if (el) {
 267                  Array.prototype.forEach.call(el.length ? el : [el], function (x) {
 268                      return assign(x, options);
 269                  });
 270              }
 271              return el;
 272          };
 273          autosize.destroy = function (el) {
 274              if (el) {
 275                  Array.prototype.forEach.call(el.length ? el : [el], destroy);
 276              }
 277              return el;
 278          };
 279          autosize.update = function (el) {
 280              if (el) {
 281                  Array.prototype.forEach.call(el.length ? el : [el], update);
 282              }
 283              return el;
 284          };
 285      }
 286  
 287      exports.default = autosize;
 288      module.exports = exports['default'];
 289  });
 290  
 291  /***/ }),
 292  
 293  /***/ 4403:
 294  /***/ (function(module, exports) {
 295  
 296  var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 297    Copyright (c) 2018 Jed Watson.
 298    Licensed under the MIT License (MIT), see
 299    http://jedwatson.github.io/classnames
 300  */
 301  /* global define */
 302  
 303  (function () {
 304      'use strict';
 305  
 306      var hasOwn = {}.hasOwnProperty;
 307  
 308  	function classNames() {
 309          var classes = [];
 310  
 311          for (var i = 0; i < arguments.length; i++) {
 312              var arg = arguments[i];
 313              if (!arg) continue;
 314  
 315              var argType = typeof arg;
 316  
 317              if (argType === 'string' || argType === 'number') {
 318                  classes.push(arg);
 319              } else if (Array.isArray(arg)) {
 320                  if (arg.length) {
 321                      var inner = classNames.apply(null, arg);
 322                      if (inner) {
 323                          classes.push(inner);
 324                      }
 325                  }
 326              } else if (argType === 'object') {
 327                  if (arg.toString === Object.prototype.toString) {
 328                      for (var key in arg) {
 329                          if (hasOwn.call(arg, key) && arg[key]) {
 330                              classes.push(key);
 331                          }
 332                      }
 333                  } else {
 334                      classes.push(arg.toString());
 335                  }
 336              }
 337          }
 338  
 339          return classes.join(' ');
 340      }
 341  
 342      if ( true && module.exports) {
 343          classNames.default = classNames;
 344          module.exports = classNames;
 345      } else if (true) {
 346          // register as 'classnames', consistent with npm package name
 347          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
 348              return classNames;
 349          }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
 350          __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 351      } else {}
 352  }());
 353  
 354  
 355  /***/ }),
 356  
 357  /***/ 4827:
 358  /***/ (function(module) {
 359  
 360  // This code has been refactored for 140 bytes
 361  // You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js
 362  var computedStyle = function (el, prop, getComputedStyle) {
 363    getComputedStyle = window.getComputedStyle;
 364  
 365    // In one fell swoop
 366    return (
 367      // If we have getComputedStyle
 368      getComputedStyle ?
 369        // Query it
 370        // TODO: From CSS-Query notes, we might need (node, null) for FF
 371        getComputedStyle(el) :
 372  
 373      // Otherwise, we are in IE and use currentStyle
 374        el.currentStyle
 375    )[
 376      // Switch to camelCase for CSSOM
 377      // DEV: Grabbed from jQuery
 378      // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
 379      // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
 380      prop.replace(/-(\w)/gi, function (word, letter) {
 381        return letter.toUpperCase();
 382      })
 383    ];
 384  };
 385  
 386  module.exports = computedStyle;
 387  
 388  
 389  /***/ }),
 390  
 391  /***/ 9894:
 392  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
 393  
 394  // Load in dependencies
 395  var computedStyle = __webpack_require__(4827);
 396  
 397  /**
 398   * Calculate the `line-height` of a given node
 399   * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
 400   * @returns {Number} `line-height` of the element in pixels
 401   */
 402  function lineHeight(node) {
 403    // Grab the line-height via style
 404    var lnHeightStr = computedStyle(node, 'line-height');
 405    var lnHeight = parseFloat(lnHeightStr, 10);
 406  
 407    // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
 408    if (lnHeightStr === lnHeight + '') {
 409      // Save the old lineHeight style and update the em unit to the element
 410      var _lnHeightStyle = node.style.lineHeight;
 411      node.style.lineHeight = lnHeightStr + 'em';
 412  
 413      // Calculate the em based height
 414      lnHeightStr = computedStyle(node, 'line-height');
 415      lnHeight = parseFloat(lnHeightStr, 10);
 416  
 417      // Revert the lineHeight style
 418      if (_lnHeightStyle) {
 419        node.style.lineHeight = _lnHeightStyle;
 420      } else {
 421        delete node.style.lineHeight;
 422      }
 423    }
 424  
 425    // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
 426    // DEV: `em` units are converted to `pt` in IE6
 427    // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
 428    if (lnHeightStr.indexOf('pt') !== -1) {
 429      lnHeight *= 4;
 430      lnHeight /= 3;
 431    // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
 432    } else if (lnHeightStr.indexOf('mm') !== -1) {
 433      lnHeight *= 96;
 434      lnHeight /= 25.4;
 435    // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
 436    } else if (lnHeightStr.indexOf('cm') !== -1) {
 437      lnHeight *= 96;
 438      lnHeight /= 2.54;
 439    // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
 440    } else if (lnHeightStr.indexOf('in') !== -1) {
 441      lnHeight *= 96;
 442    // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
 443    } else if (lnHeightStr.indexOf('pc') !== -1) {
 444      lnHeight *= 16;
 445    }
 446  
 447    // Continue our computation
 448    lnHeight = Math.round(lnHeight);
 449  
 450    // If the line-height is "normal", calculate by font-size
 451    if (lnHeightStr === 'normal') {
 452      // Create a temporary node
 453      var nodeName = node.nodeName;
 454      var _node = document.createElement(nodeName);
 455      _node.innerHTML = '&nbsp;';
 456  
 457      // If we have a text area, reset it to only 1 row
 458      // https://github.com/twolfson/line-height/issues/4
 459      if (nodeName.toUpperCase() === 'TEXTAREA') {
 460        _node.setAttribute('rows', '1');
 461      }
 462  
 463      // Set the font-size of the element
 464      var fontSizeStr = computedStyle(node, 'font-size');
 465      _node.style.fontSize = fontSizeStr;
 466  
 467      // Remove default padding/border which can affect offset height
 468      // https://github.com/twolfson/line-height/issues/4
 469      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
 470      _node.style.padding = '0px';
 471      _node.style.border = '0px';
 472  
 473      // Append it to the body
 474      var body = document.body;
 475      body.appendChild(_node);
 476  
 477      // Assume the line height of the element is the height
 478      var height = _node.offsetHeight;
 479      lnHeight = height;
 480  
 481      // Remove our child from the DOM
 482      body.removeChild(_node);
 483    }
 484  
 485    // Return the calculated height
 486    return lnHeight;
 487  }
 488  
 489  // Export lineHeight
 490  module.exports = lineHeight;
 491  
 492  
 493  /***/ }),
 494  
 495  /***/ 5372:
 496  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
 497  
 498  "use strict";
 499  /**
 500   * Copyright (c) 2013-present, Facebook, Inc.
 501   *
 502   * This source code is licensed under the MIT license found in the
 503   * LICENSE file in the root directory of this source tree.
 504   */
 505  
 506  
 507  
 508  var ReactPropTypesSecret = __webpack_require__(9567);
 509  
 510  function emptyFunction() {}
 511  function emptyFunctionWithReset() {}
 512  emptyFunctionWithReset.resetWarningCache = emptyFunction;
 513  
 514  module.exports = function() {
 515    function shim(props, propName, componentName, location, propFullName, secret) {
 516      if (secret === ReactPropTypesSecret) {
 517        // It is still safe when called from React.
 518        return;
 519      }
 520      var err = new Error(
 521        'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
 522        'Use PropTypes.checkPropTypes() to call them. ' +
 523        'Read more at http://fb.me/use-check-prop-types'
 524      );
 525      err.name = 'Invariant Violation';
 526      throw err;
 527    };
 528    shim.isRequired = shim;
 529    function getShim() {
 530      return shim;
 531    };
 532    // Important!
 533    // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
 534    var ReactPropTypes = {
 535      array: shim,
 536      bigint: shim,
 537      bool: shim,
 538      func: shim,
 539      number: shim,
 540      object: shim,
 541      string: shim,
 542      symbol: shim,
 543  
 544      any: shim,
 545      arrayOf: getShim,
 546      element: shim,
 547      elementType: shim,
 548      instanceOf: getShim,
 549      node: shim,
 550      objectOf: getShim,
 551      oneOf: getShim,
 552      oneOfType: getShim,
 553      shape: getShim,
 554      exact: getShim,
 555  
 556      checkPropTypes: emptyFunctionWithReset,
 557      resetWarningCache: emptyFunction
 558    };
 559  
 560    ReactPropTypes.PropTypes = ReactPropTypes;
 561  
 562    return ReactPropTypes;
 563  };
 564  
 565  
 566  /***/ }),
 567  
 568  /***/ 2652:
 569  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
 570  
 571  /**
 572   * Copyright (c) 2013-present, Facebook, Inc.
 573   *
 574   * This source code is licensed under the MIT license found in the
 575   * LICENSE file in the root directory of this source tree.
 576   */
 577  
 578  if (false) { var throwOnDirectAccess, ReactIs; } else {
 579    // By explicitly using `prop-types` you are opting into new production behavior.
 580    // http://fb.me/prop-types-in-prod
 581    module.exports = __webpack_require__(5372)();
 582  }
 583  
 584  
 585  /***/ }),
 586  
 587  /***/ 9567:
 588  /***/ (function(module) {
 589  
 590  "use strict";
 591  /**
 592   * Copyright (c) 2013-present, Facebook, Inc.
 593   *
 594   * This source code is licensed under the MIT license found in the
 595   * LICENSE file in the root directory of this source tree.
 596   */
 597  
 598  
 599  
 600  var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
 601  
 602  module.exports = ReactPropTypesSecret;
 603  
 604  
 605  /***/ }),
 606  
 607  /***/ 5438:
 608  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 609  
 610  "use strict";
 611  
 612  var __extends = (this && this.__extends) || (function () {
 613      var extendStatics = Object.setPrototypeOf ||
 614          ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 615          function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
 616      return function (d, b) {
 617          extendStatics(d, b);
 618          function __() { this.constructor = d; }
 619          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 620      };
 621  })();
 622  var __assign = (this && this.__assign) || Object.assign || function(t) {
 623      for (var s, i = 1, n = arguments.length; i < n; i++) {
 624          s = arguments[i];
 625          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
 626              t[p] = s[p];
 627      }
 628      return t;
 629  };
 630  var __rest = (this && this.__rest) || function (s, e) {
 631      var t = {};
 632      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
 633          t[p] = s[p];
 634      if (s != null && typeof Object.getOwnPropertySymbols === "function")
 635          for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
 636              t[p[i]] = s[p[i]];
 637      return t;
 638  };
 639  exports.__esModule = true;
 640  var React = __webpack_require__(9196);
 641  var PropTypes = __webpack_require__(2652);
 642  var autosize = __webpack_require__(6411);
 643  var _getLineHeight = __webpack_require__(9894);
 644  var getLineHeight = _getLineHeight;
 645  var RESIZED = "autosize:resized";
 646  /**
 647   * A light replacement for built-in textarea component
 648   * which automaticaly adjusts its height to match the content
 649   */
 650  var TextareaAutosizeClass = /** @class */ (function (_super) {
 651      __extends(TextareaAutosizeClass, _super);
 652      function TextareaAutosizeClass() {
 653          var _this = _super !== null && _super.apply(this, arguments) || this;
 654          _this.state = {
 655              lineHeight: null
 656          };
 657          _this.textarea = null;
 658          _this.onResize = function (e) {
 659              if (_this.props.onResize) {
 660                  _this.props.onResize(e);
 661              }
 662          };
 663          _this.updateLineHeight = function () {
 664              if (_this.textarea) {
 665                  _this.setState({
 666                      lineHeight: getLineHeight(_this.textarea)
 667                  });
 668              }
 669          };
 670          _this.onChange = function (e) {
 671              var onChange = _this.props.onChange;
 672              _this.currentValue = e.currentTarget.value;
 673              onChange && onChange(e);
 674          };
 675          return _this;
 676      }
 677      TextareaAutosizeClass.prototype.componentDidMount = function () {
 678          var _this = this;
 679          var _a = this.props, maxRows = _a.maxRows, async = _a.async;
 680          if (typeof maxRows === "number") {
 681              this.updateLineHeight();
 682          }
 683          if (typeof maxRows === "number" || async) {
 684              /*
 685                the defer is needed to:
 686                  - force "autosize" to activate the scrollbar when this.props.maxRows is passed
 687                  - support StyledComponents (see #71)
 688              */
 689              setTimeout(function () { return _this.textarea && autosize(_this.textarea); });
 690          }
 691          else {
 692              this.textarea && autosize(this.textarea);
 693          }
 694          if (this.textarea) {
 695              this.textarea.addEventListener(RESIZED, this.onResize);
 696          }
 697      };
 698      TextareaAutosizeClass.prototype.componentWillUnmount = function () {
 699          if (this.textarea) {
 700              this.textarea.removeEventListener(RESIZED, this.onResize);
 701              autosize.destroy(this.textarea);
 702          }
 703      };
 704      TextareaAutosizeClass.prototype.render = function () {
 705          var _this = this;
 706          var _a = this, _b = _a.props, onResize = _b.onResize, maxRows = _b.maxRows, onChange = _b.onChange, style = _b.style, innerRef = _b.innerRef, children = _b.children, props = __rest(_b, ["onResize", "maxRows", "onChange", "style", "innerRef", "children"]), lineHeight = _a.state.lineHeight;
 707          var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;
 708          return (React.createElement("textarea", __assign({}, props, { onChange: this.onChange, style: maxHeight ? __assign({}, style, { maxHeight: maxHeight }) : style, ref: function (element) {
 709                  _this.textarea = element;
 710                  if (typeof _this.props.innerRef === 'function') {
 711                      _this.props.innerRef(element);
 712                  }
 713                  else if (_this.props.innerRef) {
 714                      _this.props.innerRef.current = element;
 715                  }
 716              } }), children));
 717      };
 718      TextareaAutosizeClass.prototype.componentDidUpdate = function () {
 719          this.textarea && autosize.update(this.textarea);
 720      };
 721      TextareaAutosizeClass.defaultProps = {
 722          rows: 1,
 723          async: false
 724      };
 725      TextareaAutosizeClass.propTypes = {
 726          rows: PropTypes.number,
 727          maxRows: PropTypes.number,
 728          onResize: PropTypes.func,
 729          innerRef: PropTypes.any,
 730          async: PropTypes.bool
 731      };
 732      return TextareaAutosizeClass;
 733  }(React.Component));
 734  exports.TextareaAutosize = React.forwardRef(function (props, ref) {
 735      return React.createElement(TextareaAutosizeClass, __assign({}, props, { innerRef: ref }));
 736  });
 737  
 738  
 739  /***/ }),
 740  
 741  /***/ 773:
 742  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 743  
 744  "use strict";
 745  var __webpack_unused_export__;
 746  
 747  __webpack_unused_export__ = true;
 748  var TextareaAutosize_1 = __webpack_require__(5438);
 749  exports.Z = TextareaAutosize_1.TextareaAutosize;
 750  
 751  
 752  /***/ }),
 753  
 754  /***/ 9196:
 755  /***/ (function(module) {
 756  
 757  "use strict";
 758  module.exports = window["React"];
 759  
 760  /***/ })
 761  
 762  /******/     });
 763  /************************************************************************/
 764  /******/     // The module cache
 765  /******/     var __webpack_module_cache__ = {};
 766  /******/     
 767  /******/     // The require function
 768  /******/ 	function __webpack_require__(moduleId) {
 769  /******/         // Check if module is in cache
 770  /******/         var cachedModule = __webpack_module_cache__[moduleId];
 771  /******/         if (cachedModule !== undefined) {
 772  /******/             return cachedModule.exports;
 773  /******/         }
 774  /******/         // Create a new module (and put it into the cache)
 775  /******/         var module = __webpack_module_cache__[moduleId] = {
 776  /******/             // no module.id needed
 777  /******/             // no module.loaded needed
 778  /******/             exports: {}
 779  /******/         };
 780  /******/     
 781  /******/         // Execute the module function
 782  /******/         __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
 783  /******/     
 784  /******/         // Return the exports of the module
 785  /******/         return module.exports;
 786  /******/     }
 787  /******/     
 788  /************************************************************************/
 789  /******/     /* webpack/runtime/compat get default export */
 790  /******/     !function() {
 791  /******/         // getDefaultExport function for compatibility with non-harmony modules
 792  /******/         __webpack_require__.n = function(module) {
 793  /******/             var getter = module && module.__esModule ?
 794  /******/                 function() { return module['default']; } :
 795  /******/                 function() { return module; };
 796  /******/             __webpack_require__.d(getter, { a: getter });
 797  /******/             return getter;
 798  /******/         };
 799  /******/     }();
 800  /******/     
 801  /******/     /* webpack/runtime/define property getters */
 802  /******/     !function() {
 803  /******/         // define getter functions for harmony exports
 804  /******/         __webpack_require__.d = function(exports, definition) {
 805  /******/             for(var key in definition) {
 806  /******/                 if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
 807  /******/                     Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
 808  /******/                 }
 809  /******/             }
 810  /******/         };
 811  /******/     }();
 812  /******/     
 813  /******/     /* webpack/runtime/hasOwnProperty shorthand */
 814  /******/     !function() {
 815  /******/         __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
 816  /******/     }();
 817  /******/     
 818  /******/     /* webpack/runtime/make namespace object */
 819  /******/     !function() {
 820  /******/         // define __esModule on exports
 821  /******/         __webpack_require__.r = function(exports) {
 822  /******/             if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
 823  /******/                 Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
 824  /******/             }
 825  /******/             Object.defineProperty(exports, '__esModule', { value: true });
 826  /******/         };
 827  /******/     }();
 828  /******/     
 829  /************************************************************************/
 830  var __webpack_exports__ = {};
 831  // This entry need to be wrapped in an IIFE because it need to be in strict mode.
 832  !function() {
 833  "use strict";
 834  // ESM COMPAT FLAG
 835  __webpack_require__.r(__webpack_exports__);
 836  
 837  // EXPORTS
 838  __webpack_require__.d(__webpack_exports__, {
 839    "AlignmentToolbar": function() { return /* reexport */ AlignmentToolbar; },
 840    "Autocomplete": function() { return /* reexport */ Autocomplete; },
 841    "AutosaveMonitor": function() { return /* reexport */ autosave_monitor; },
 842    "BlockAlignmentToolbar": function() { return /* reexport */ BlockAlignmentToolbar; },
 843    "BlockControls": function() { return /* reexport */ BlockControls; },
 844    "BlockEdit": function() { return /* reexport */ BlockEdit; },
 845    "BlockEditorKeyboardShortcuts": function() { return /* reexport */ BlockEditorKeyboardShortcuts; },
 846    "BlockFormatControls": function() { return /* reexport */ BlockFormatControls; },
 847    "BlockIcon": function() { return /* reexport */ BlockIcon; },
 848    "BlockInspector": function() { return /* reexport */ BlockInspector; },
 849    "BlockList": function() { return /* reexport */ BlockList; },
 850    "BlockMover": function() { return /* reexport */ BlockMover; },
 851    "BlockNavigationDropdown": function() { return /* reexport */ BlockNavigationDropdown; },
 852    "BlockSelectionClearer": function() { return /* reexport */ BlockSelectionClearer; },
 853    "BlockSettingsMenu": function() { return /* reexport */ BlockSettingsMenu; },
 854    "BlockTitle": function() { return /* reexport */ BlockTitle; },
 855    "BlockToolbar": function() { return /* reexport */ BlockToolbar; },
 856    "ColorPalette": function() { return /* reexport */ ColorPalette; },
 857    "ContrastChecker": function() { return /* reexport */ ContrastChecker; },
 858    "CopyHandler": function() { return /* reexport */ CopyHandler; },
 859    "DefaultBlockAppender": function() { return /* reexport */ DefaultBlockAppender; },
 860    "DocumentOutline": function() { return /* reexport */ document_outline; },
 861    "DocumentOutlineCheck": function() { return /* reexport */ check; },
 862    "EditorHistoryRedo": function() { return /* reexport */ editor_history_redo; },
 863    "EditorHistoryUndo": function() { return /* reexport */ editor_history_undo; },
 864    "EditorKeyboardShortcutsRegister": function() { return /* reexport */ register_shortcuts; },
 865    "EditorNotices": function() { return /* reexport */ editor_notices; },
 866    "EditorProvider": function() { return /* reexport */ provider; },
 867    "EditorSnackbars": function() { return /* reexport */ EditorSnackbars; },
 868    "EntitiesSavedStates": function() { return /* reexport */ EntitiesSavedStates; },
 869    "ErrorBoundary": function() { return /* reexport */ error_boundary; },
 870    "FontSizePicker": function() { return /* reexport */ FontSizePicker; },
 871    "InnerBlocks": function() { return /* reexport */ InnerBlocks; },
 872    "Inserter": function() { return /* reexport */ Inserter; },
 873    "InspectorAdvancedControls": function() { return /* reexport */ InspectorAdvancedControls; },
 874    "InspectorControls": function() { return /* reexport */ InspectorControls; },
 875    "LocalAutosaveMonitor": function() { return /* reexport */ local_autosave_monitor; },
 876    "MediaPlaceholder": function() { return /* reexport */ MediaPlaceholder; },
 877    "MediaUpload": function() { return /* reexport */ MediaUpload; },
 878    "MediaUploadCheck": function() { return /* reexport */ MediaUploadCheck; },
 879    "MultiSelectScrollIntoView": function() { return /* reexport */ MultiSelectScrollIntoView; },
 880    "NavigableToolbar": function() { return /* reexport */ NavigableToolbar; },
 881    "ObserveTyping": function() { return /* reexport */ ObserveTyping; },
 882    "PageAttributesCheck": function() { return /* reexport */ page_attributes_check; },
 883    "PageAttributesOrder": function() { return /* reexport */ order; },
 884    "PageAttributesParent": function() { return /* reexport */ page_attributes_parent; },
 885    "PageTemplate": function() { return /* reexport */ post_template; },
 886    "PanelColorSettings": function() { return /* reexport */ PanelColorSettings; },
 887    "PlainText": function() { return /* reexport */ PlainText; },
 888    "PostAuthor": function() { return /* reexport */ post_author; },
 889    "PostAuthorCheck": function() { return /* reexport */ PostAuthorCheck; },
 890    "PostComments": function() { return /* reexport */ post_comments; },
 891    "PostExcerpt": function() { return /* reexport */ post_excerpt; },
 892    "PostExcerptCheck": function() { return /* reexport */ post_excerpt_check; },
 893    "PostFeaturedImage": function() { return /* reexport */ post_featured_image; },
 894    "PostFeaturedImageCheck": function() { return /* reexport */ post_featured_image_check; },
 895    "PostFormat": function() { return /* reexport */ PostFormat; },
 896    "PostFormatCheck": function() { return /* reexport */ post_format_check; },
 897    "PostLastRevision": function() { return /* reexport */ post_last_revision; },
 898    "PostLastRevisionCheck": function() { return /* reexport */ post_last_revision_check; },
 899    "PostLockedModal": function() { return /* reexport */ PostLockedModal; },
 900    "PostPendingStatus": function() { return /* reexport */ post_pending_status; },
 901    "PostPendingStatusCheck": function() { return /* reexport */ post_pending_status_check; },
 902    "PostPingbacks": function() { return /* reexport */ post_pingbacks; },
 903    "PostPreviewButton": function() { return /* reexport */ post_preview_button; },
 904    "PostPublishButton": function() { return /* reexport */ post_publish_button; },
 905    "PostPublishButtonLabel": function() { return /* reexport */ label; },
 906    "PostPublishPanel": function() { return /* reexport */ post_publish_panel; },
 907    "PostSavedState": function() { return /* reexport */ PostSavedState; },
 908    "PostSchedule": function() { return /* reexport */ PostSchedule; },
 909    "PostScheduleCheck": function() { return /* reexport */ post_schedule_check; },
 910    "PostScheduleLabel": function() { return /* reexport */ post_schedule_label; },
 911    "PostSlug": function() { return /* reexport */ post_slug; },
 912    "PostSlugCheck": function() { return /* reexport */ PostSlugCheck; },
 913    "PostSticky": function() { return /* reexport */ post_sticky; },
 914    "PostStickyCheck": function() { return /* reexport */ post_sticky_check; },
 915    "PostSwitchToDraftButton": function() { return /* reexport */ post_switch_to_draft_button; },
 916    "PostTaxonomies": function() { return /* reexport */ post_taxonomies; },
 917    "PostTaxonomiesCheck": function() { return /* reexport */ post_taxonomies_check; },
 918    "PostTaxonomiesFlatTermSelector": function() { return /* reexport */ flat_term_selector; },
 919    "PostTaxonomiesHierarchicalTermSelector": function() { return /* reexport */ hierarchical_term_selector; },
 920    "PostTextEditor": function() { return /* reexport */ PostTextEditor; },
 921    "PostTitle": function() { return /* reexport */ PostTitle; },
 922    "PostTrash": function() { return /* reexport */ PostTrash; },
 923    "PostTrashCheck": function() { return /* reexport */ post_trash_check; },
 924    "PostTypeSupportCheck": function() { return /* reexport */ post_type_support_check; },
 925    "PostVisibility": function() { return /* reexport */ post_visibility; },
 926    "PostVisibilityCheck": function() { return /* reexport */ post_visibility_check; },
 927    "PostVisibilityLabel": function() { return /* reexport */ post_visibility_label; },
 928    "RichText": function() { return /* reexport */ RichText; },
 929    "RichTextShortcut": function() { return /* reexport */ RichTextShortcut; },
 930    "RichTextToolbarButton": function() { return /* reexport */ RichTextToolbarButton; },
 931    "ServerSideRender": function() { return /* reexport */ (external_wp_serverSideRender_default()); },
 932    "SkipToSelectedBlock": function() { return /* reexport */ SkipToSelectedBlock; },
 933    "TableOfContents": function() { return /* reexport */ table_of_contents; },
 934    "TextEditorGlobalKeyboardShortcuts": function() { return /* reexport */ TextEditorGlobalKeyboardShortcuts; },
 935    "ThemeSupportCheck": function() { return /* reexport */ theme_support_check; },
 936    "URLInput": function() { return /* reexport */ URLInput; },
 937    "URLInputButton": function() { return /* reexport */ URLInputButton; },
 938    "URLPopover": function() { return /* reexport */ URLPopover; },
 939    "UnsavedChangesWarning": function() { return /* reexport */ UnsavedChangesWarning; },
 940    "VisualEditorGlobalKeyboardShortcuts": function() { return /* reexport */ visual_editor_shortcuts; },
 941    "Warning": function() { return /* reexport */ Warning; },
 942    "WordCount": function() { return /* reexport */ WordCount; },
 943    "WritingFlow": function() { return /* reexport */ WritingFlow; },
 944    "__unstableRichTextInputEvent": function() { return /* reexport */ __unstableRichTextInputEvent; },
 945    "cleanForSlug": function() { return /* reexport */ cleanForSlug; },
 946    "createCustomColorsHOC": function() { return /* reexport */ createCustomColorsHOC; },
 947    "getColorClassName": function() { return /* reexport */ getColorClassName; },
 948    "getColorObjectByAttributeValues": function() { return /* reexport */ getColorObjectByAttributeValues; },
 949    "getColorObjectByColorValue": function() { return /* reexport */ getColorObjectByColorValue; },
 950    "getFontSize": function() { return /* reexport */ getFontSize; },
 951    "getFontSizeClass": function() { return /* reexport */ getFontSizeClass; },
 952    "getTemplatePartIcon": function() { return /* reexport */ getTemplatePartIcon; },
 953    "mediaUpload": function() { return /* reexport */ mediaUpload; },
 954    "store": function() { return /* reexport */ store_store; },
 955    "storeConfig": function() { return /* reexport */ storeConfig; },
 956    "transformStyles": function() { return /* reexport */ external_wp_blockEditor_namespaceObject.transformStyles; },
 957    "userAutocompleter": function() { return /* reexport */ user; },
 958    "withColorContext": function() { return /* reexport */ withColorContext; },
 959    "withColors": function() { return /* reexport */ withColors; },
 960    "withFontSizes": function() { return /* reexport */ withFontSizes; }
 961  });
 962  
 963  // NAMESPACE OBJECT: ./node_modules/@wordpress/editor/build-module/store/selectors.js
 964  var selectors_namespaceObject = {};
 965  __webpack_require__.r(selectors_namespaceObject);
 966  __webpack_require__.d(selectors_namespaceObject, {
 967    "__experimentalGetDefaultTemplatePartAreas": function() { return __experimentalGetDefaultTemplatePartAreas; },
 968    "__experimentalGetDefaultTemplateType": function() { return __experimentalGetDefaultTemplateType; },
 969    "__experimentalGetDefaultTemplateTypes": function() { return __experimentalGetDefaultTemplateTypes; },
 970    "__experimentalGetTemplateInfo": function() { return __experimentalGetTemplateInfo; },
 971    "__unstableIsEditorReady": function() { return __unstableIsEditorReady; },
 972    "canInsertBlockType": function() { return canInsertBlockType; },
 973    "canUserUseUnfilteredHTML": function() { return canUserUseUnfilteredHTML; },
 974    "didPostSaveRequestFail": function() { return didPostSaveRequestFail; },
 975    "didPostSaveRequestSucceed": function() { return didPostSaveRequestSucceed; },
 976    "getActivePostLock": function() { return getActivePostLock; },
 977    "getAdjacentBlockClientId": function() { return getAdjacentBlockClientId; },
 978    "getAutosaveAttribute": function() { return getAutosaveAttribute; },
 979    "getBlock": function() { return getBlock; },
 980    "getBlockAttributes": function() { return getBlockAttributes; },
 981    "getBlockCount": function() { return getBlockCount; },
 982    "getBlockHierarchyRootClientId": function() { return getBlockHierarchyRootClientId; },
 983    "getBlockIndex": function() { return getBlockIndex; },
 984    "getBlockInsertionPoint": function() { return getBlockInsertionPoint; },
 985    "getBlockListSettings": function() { return getBlockListSettings; },
 986    "getBlockMode": function() { return getBlockMode; },
 987    "getBlockName": function() { return getBlockName; },
 988    "getBlockOrder": function() { return getBlockOrder; },
 989    "getBlockRootClientId": function() { return getBlockRootClientId; },
 990    "getBlockSelectionEnd": function() { return getBlockSelectionEnd; },
 991    "getBlockSelectionStart": function() { return getBlockSelectionStart; },
 992    "getBlocks": function() { return getBlocks; },
 993    "getBlocksByClientId": function() { return getBlocksByClientId; },
 994    "getClientIdsOfDescendants": function() { return getClientIdsOfDescendants; },
 995    "getClientIdsWithDescendants": function() { return getClientIdsWithDescendants; },
 996    "getCurrentPost": function() { return getCurrentPost; },
 997    "getCurrentPostAttribute": function() { return getCurrentPostAttribute; },
 998    "getCurrentPostId": function() { return getCurrentPostId; },
 999    "getCurrentPostLastRevisionId": function() { return getCurrentPostLastRevisionId; },
1000    "getCurrentPostRevisionsCount": function() { return getCurrentPostRevisionsCount; },
1001    "getCurrentPostType": function() { return getCurrentPostType; },
1002    "getEditedPostAttribute": function() { return getEditedPostAttribute; },
1003    "getEditedPostContent": function() { return getEditedPostContent; },
1004    "getEditedPostPreviewLink": function() { return getEditedPostPreviewLink; },
1005    "getEditedPostSlug": function() { return getEditedPostSlug; },
1006    "getEditedPostVisibility": function() { return getEditedPostVisibility; },
1007    "getEditorBlocks": function() { return getEditorBlocks; },
1008    "getEditorSelection": function() { return getEditorSelection; },
1009    "getEditorSelectionEnd": function() { return getEditorSelectionEnd; },
1010    "getEditorSelectionStart": function() { return getEditorSelectionStart; },
1011    "getEditorSettings": function() { return getEditorSettings; },
1012    "getFirstMultiSelectedBlockClientId": function() { return getFirstMultiSelectedBlockClientId; },
1013    "getGlobalBlockCount": function() { return getGlobalBlockCount; },
1014    "getInserterItems": function() { return getInserterItems; },
1015    "getLastMultiSelectedBlockClientId": function() { return getLastMultiSelectedBlockClientId; },
1016    "getMultiSelectedBlockClientIds": function() { return getMultiSelectedBlockClientIds; },
1017    "getMultiSelectedBlocks": function() { return getMultiSelectedBlocks; },
1018    "getMultiSelectedBlocksEndClientId": function() { return getMultiSelectedBlocksEndClientId; },
1019    "getMultiSelectedBlocksStartClientId": function() { return getMultiSelectedBlocksStartClientId; },
1020    "getNextBlockClientId": function() { return getNextBlockClientId; },
1021    "getPermalink": function() { return getPermalink; },
1022    "getPermalinkParts": function() { return getPermalinkParts; },
1023    "getPostEdits": function() { return getPostEdits; },
1024    "getPostLockUser": function() { return getPostLockUser; },
1025    "getPostTypeLabel": function() { return getPostTypeLabel; },
1026    "getPreviousBlockClientId": function() { return getPreviousBlockClientId; },
1027    "getSelectedBlock": function() { return getSelectedBlock; },
1028    "getSelectedBlockClientId": function() { return getSelectedBlockClientId; },
1029    "getSelectedBlockCount": function() { return getSelectedBlockCount; },
1030    "getSelectedBlocksInitialCaretPosition": function() { return getSelectedBlocksInitialCaretPosition; },
1031    "getStateBeforeOptimisticTransaction": function() { return getStateBeforeOptimisticTransaction; },
1032    "getSuggestedPostFormat": function() { return getSuggestedPostFormat; },
1033    "getTemplate": function() { return getTemplate; },
1034    "getTemplateLock": function() { return getTemplateLock; },
1035    "hasChangedContent": function() { return hasChangedContent; },
1036    "hasEditorRedo": function() { return hasEditorRedo; },
1037    "hasEditorUndo": function() { return hasEditorUndo; },
1038    "hasInserterItems": function() { return hasInserterItems; },
1039    "hasMultiSelection": function() { return hasMultiSelection; },
1040    "hasNonPostEntityChanges": function() { return hasNonPostEntityChanges; },
1041    "hasSelectedBlock": function() { return hasSelectedBlock; },
1042    "hasSelectedInnerBlock": function() { return hasSelectedInnerBlock; },
1043    "inSomeHistory": function() { return inSomeHistory; },
1044    "isAncestorMultiSelected": function() { return isAncestorMultiSelected; },
1045    "isAutosavingPost": function() { return isAutosavingPost; },
1046    "isBlockInsertionPointVisible": function() { return isBlockInsertionPointVisible; },
1047    "isBlockMultiSelected": function() { return isBlockMultiSelected; },
1048    "isBlockSelected": function() { return isBlockSelected; },
1049    "isBlockValid": function() { return isBlockValid; },
1050    "isBlockWithinSelection": function() { return isBlockWithinSelection; },
1051    "isCaretWithinFormattedText": function() { return isCaretWithinFormattedText; },
1052    "isCleanNewPost": function() { return isCleanNewPost; },
1053    "isCurrentPostPending": function() { return isCurrentPostPending; },
1054    "isCurrentPostPublished": function() { return isCurrentPostPublished; },
1055    "isCurrentPostScheduled": function() { return isCurrentPostScheduled; },
1056    "isEditedPostAutosaveable": function() { return isEditedPostAutosaveable; },
1057    "isEditedPostBeingScheduled": function() { return isEditedPostBeingScheduled; },
1058    "isEditedPostDateFloating": function() { return isEditedPostDateFloating; },
1059    "isEditedPostDirty": function() { return isEditedPostDirty; },
1060    "isEditedPostEmpty": function() { return isEditedPostEmpty; },
1061    "isEditedPostNew": function() { return isEditedPostNew; },
1062    "isEditedPostPublishable": function() { return isEditedPostPublishable; },
1063    "isEditedPostSaveable": function() { return isEditedPostSaveable; },
1064    "isFirstMultiSelectedBlock": function() { return isFirstMultiSelectedBlock; },
1065    "isMultiSelecting": function() { return isMultiSelecting; },
1066    "isPermalinkEditable": function() { return isPermalinkEditable; },
1067    "isPostAutosavingLocked": function() { return isPostAutosavingLocked; },
1068    "isPostLockTakeover": function() { return isPostLockTakeover; },
1069    "isPostLocked": function() { return isPostLocked; },
1070    "isPostSavingLocked": function() { return isPostSavingLocked; },
1071    "isPreviewingPost": function() { return isPreviewingPost; },
1072    "isPublishSidebarEnabled": function() { return isPublishSidebarEnabled; },
1073    "isPublishingPost": function() { return isPublishingPost; },
1074    "isSavingNonPostEntityChanges": function() { return isSavingNonPostEntityChanges; },
1075    "isSavingPost": function() { return isSavingPost; },
1076    "isSelectionEnabled": function() { return isSelectionEnabled; },
1077    "isTyping": function() { return isTyping; },
1078    "isValidTemplate": function() { return isValidTemplate; }
1079  });
1080  
1081  // NAMESPACE OBJECT: ./node_modules/@wordpress/editor/build-module/store/actions.js
1082  var actions_namespaceObject = {};
1083  __webpack_require__.r(actions_namespaceObject);
1084  __webpack_require__.d(actions_namespaceObject, {
1085    "__experimentalTearDownEditor": function() { return __experimentalTearDownEditor; },
1086    "autosave": function() { return autosave; },
1087    "clearSelectedBlock": function() { return clearSelectedBlock; },
1088    "createUndoLevel": function() { return createUndoLevel; },
1089    "disablePublishSidebar": function() { return disablePublishSidebar; },
1090    "editPost": function() { return editPost; },
1091    "enablePublishSidebar": function() { return enablePublishSidebar; },
1092    "enterFormattedText": function() { return enterFormattedText; },
1093    "exitFormattedText": function() { return exitFormattedText; },
1094    "hideInsertionPoint": function() { return hideInsertionPoint; },
1095    "insertBlock": function() { return insertBlock; },
1096    "insertBlocks": function() { return insertBlocks; },
1097    "insertDefaultBlock": function() { return insertDefaultBlock; },
1098    "lockPostAutosaving": function() { return lockPostAutosaving; },
1099    "lockPostSaving": function() { return lockPostSaving; },
1100    "mergeBlocks": function() { return mergeBlocks; },
1101    "moveBlockToPosition": function() { return moveBlockToPosition; },
1102    "moveBlocksDown": function() { return moveBlocksDown; },
1103    "moveBlocksUp": function() { return moveBlocksUp; },
1104    "multiSelect": function() { return multiSelect; },
1105    "receiveBlocks": function() { return receiveBlocks; },
1106    "redo": function() { return redo; },
1107    "refreshPost": function() { return refreshPost; },
1108    "removeBlock": function() { return removeBlock; },
1109    "removeBlocks": function() { return removeBlocks; },
1110    "replaceBlock": function() { return replaceBlock; },
1111    "replaceBlocks": function() { return replaceBlocks; },
1112    "resetBlocks": function() { return resetBlocks; },
1113    "resetEditorBlocks": function() { return resetEditorBlocks; },
1114    "resetPost": function() { return resetPost; },
1115    "savePost": function() { return savePost; },
1116    "selectBlock": function() { return selectBlock; },
1117    "setTemplateValidity": function() { return setTemplateValidity; },
1118    "setupEditor": function() { return setupEditor; },
1119    "setupEditorState": function() { return setupEditorState; },
1120    "showInsertionPoint": function() { return showInsertionPoint; },
1121    "startMultiSelect": function() { return startMultiSelect; },
1122    "startTyping": function() { return startTyping; },
1123    "stopMultiSelect": function() { return stopMultiSelect; },
1124    "stopTyping": function() { return stopTyping; },
1125    "synchronizeTemplate": function() { return synchronizeTemplate; },
1126    "toggleBlockMode": function() { return toggleBlockMode; },
1127    "toggleSelection": function() { return toggleSelection; },
1128    "trashPost": function() { return trashPost; },
1129    "undo": function() { return undo; },
1130    "unlockPostAutosaving": function() { return unlockPostAutosaving; },
1131    "unlockPostSaving": function() { return unlockPostSaving; },
1132    "updateBlock": function() { return updateBlock; },
1133    "updateBlockAttributes": function() { return updateBlockAttributes; },
1134    "updateBlockListSettings": function() { return updateBlockListSettings; },
1135    "updateEditorSettings": function() { return updateEditorSettings; },
1136    "updatePost": function() { return updatePost; },
1137    "updatePostLock": function() { return updatePostLock; }
1138  });
1139  
1140  ;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
1141  function _extends() {
1142    _extends = Object.assign || function (target) {
1143      for (var i = 1; i < arguments.length; i++) {
1144        var source = arguments[i];
1145  
1146        for (var key in source) {
1147          if (Object.prototype.hasOwnProperty.call(source, key)) {
1148            target[key] = source[key];
1149          }
1150        }
1151      }
1152  
1153      return target;
1154    };
1155  
1156    return _extends.apply(this, arguments);
1157  }
1158  ;// CONCATENATED MODULE: external ["wp","element"]
1159  var external_wp_element_namespaceObject = window["wp"]["element"];
1160  ;// CONCATENATED MODULE: external "lodash"
1161  var external_lodash_namespaceObject = window["lodash"];
1162  ;// CONCATENATED MODULE: external ["wp","blocks"]
1163  var external_wp_blocks_namespaceObject = window["wp"]["blocks"];
1164  ;// CONCATENATED MODULE: external ["wp","data"]
1165  var external_wp_data_namespaceObject = window["wp"]["data"];
1166  ;// CONCATENATED MODULE: external ["wp","coreData"]
1167  var external_wp_coreData_namespaceObject = window["wp"]["coreData"];
1168  ;// CONCATENATED MODULE: external ["wp","compose"]
1169  var external_wp_compose_namespaceObject = window["wp"]["compose"];
1170  ;// CONCATENATED MODULE: external ["wp","hooks"]
1171  var external_wp_hooks_namespaceObject = window["wp"]["hooks"];
1172  ;// CONCATENATED MODULE: external ["wp","blockEditor"]
1173  var external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"];
1174  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/defaults.js
1175  /**
1176   * WordPress dependencies
1177   */
1178  
1179  /**
1180   * The default post editor settings.
1181   *
1182   * @property {boolean|Array} allowedBlockTypes     Allowed block types
1183   * @property {boolean}       richEditingEnabled    Whether rich editing is enabled or not
1184   * @property {boolean}       codeEditingEnabled    Whether code editing is enabled or not
1185   * @property {boolean}       enableCustomFields    Whether the WordPress custom fields are enabled or not.
1186   *                                                 true  = the user has opted to show the Custom Fields panel at the bottom of the editor.
1187   *                                                 false = the user has opted to hide the Custom Fields panel at the bottom of the editor.
1188   *                                                 undefined = the current environment does not support Custom Fields, so the option toggle in Preferences -> Panels to enable the Custom Fields panel is not displayed.
1189   * @property {number}        autosaveInterval      How often in seconds the post will be auto-saved via the REST API.
1190   * @property {number}        localAutosaveInterval How often in seconds the post will be backed up to sessionStorage.
1191   * @property {Array?}        availableTemplates    The available post templates
1192   * @property {boolean}       disablePostFormats    Whether or not the post formats are disabled
1193   * @property {Array?}        allowedMimeTypes      List of allowed mime types and file extensions
1194   * @property {number}        maxUploadFileSize     Maximum upload file size
1195   * @property {boolean}       supportsLayout        Whether the editor supports layouts.
1196   */
1197  
1198  const EDITOR_SETTINGS_DEFAULTS = { ...external_wp_blockEditor_namespaceObject.SETTINGS_DEFAULTS,
1199    richEditingEnabled: true,
1200    codeEditingEnabled: true,
1201    enableCustomFields: undefined,
1202    supportsLayout: true
1203  };
1204  
1205  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/reducer.js
1206  /**
1207   * External dependencies
1208   */
1209  
1210  /**
1211   * WordPress dependencies
1212   */
1213  
1214  
1215  /**
1216   * Internal dependencies
1217   */
1218  
1219  
1220  /**
1221   * Returns a post attribute value, flattening nested rendered content using its
1222   * raw value in place of its original object form.
1223   *
1224   * @param {*} value Original value.
1225   *
1226   * @return {*} Raw value.
1227   */
1228  
1229  function getPostRawValue(value) {
1230    if (value && 'object' === typeof value && 'raw' in value) {
1231      return value.raw;
1232    }
1233  
1234    return value;
1235  }
1236  /**
1237   * Returns true if the two object arguments have the same keys, or false
1238   * otherwise.
1239   *
1240   * @param {Object} a First object.
1241   * @param {Object} b Second object.
1242   *
1243   * @return {boolean} Whether the two objects have the same keys.
1244   */
1245  
1246  function hasSameKeys(a, b) {
1247    return isEqual(keys(a), keys(b));
1248  }
1249  /**
1250   * Returns true if, given the currently dispatching action and the previously
1251   * dispatched action, the two actions are editing the same post property, or
1252   * false otherwise.
1253   *
1254   * @param {Object} action         Currently dispatching action.
1255   * @param {Object} previousAction Previously dispatched action.
1256   *
1257   * @return {boolean} Whether actions are updating the same post property.
1258   */
1259  
1260  function isUpdatingSamePostProperty(action, previousAction) {
1261    return action.type === 'EDIT_POST' && hasSameKeys(action.edits, previousAction.edits);
1262  }
1263  /**
1264   * Returns true if, given the currently dispatching action and the previously
1265   * dispatched action, the two actions are modifying the same property such that
1266   * undo history should be batched.
1267   *
1268   * @param {Object} action         Currently dispatching action.
1269   * @param {Object} previousAction Previously dispatched action.
1270   *
1271   * @return {boolean} Whether to overwrite present state.
1272   */
1273  
1274  function shouldOverwriteState(action, previousAction) {
1275    if (action.type === 'RESET_EDITOR_BLOCKS') {
1276      return !action.shouldCreateUndoLevel;
1277    }
1278  
1279    if (!previousAction || action.type !== previousAction.type) {
1280      return false;
1281    }
1282  
1283    return isUpdatingSamePostProperty(action, previousAction);
1284  }
1285  function postId() {
1286    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1287    let action = arguments.length > 1 ? arguments[1] : undefined;
1288  
1289    switch (action.type) {
1290      case 'SETUP_EDITOR_STATE':
1291        return action.post.id;
1292    }
1293  
1294    return state;
1295  }
1296  function postType() {
1297    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1298    let action = arguments.length > 1 ? arguments[1] : undefined;
1299  
1300    switch (action.type) {
1301      case 'SETUP_EDITOR_STATE':
1302        return action.post.type;
1303    }
1304  
1305    return state;
1306  }
1307  /**
1308   * Reducer returning whether the post blocks match the defined template or not.
1309   *
1310   * @param {Object} state  Current state.
1311   * @param {Object} action Dispatched action.
1312   *
1313   * @return {boolean} Updated state.
1314   */
1315  
1316  function template() {
1317    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
1318      isValid: true
1319    };
1320    let action = arguments.length > 1 ? arguments[1] : undefined;
1321  
1322    switch (action.type) {
1323      case 'SET_TEMPLATE_VALIDITY':
1324        return { ...state,
1325          isValid: action.isValid
1326        };
1327    }
1328  
1329    return state;
1330  }
1331  /**
1332   * Reducer returning current network request state (whether a request to
1333   * the WP REST API is in progress, successful, or failed).
1334   *
1335   * @param {Object} state  Current state.
1336   * @param {Object} action Dispatched action.
1337   *
1338   * @return {Object} Updated state.
1339   */
1340  
1341  function saving() {
1342    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1343    let action = arguments.length > 1 ? arguments[1] : undefined;
1344  
1345    switch (action.type) {
1346      case 'REQUEST_POST_UPDATE_START':
1347      case 'REQUEST_POST_UPDATE_FINISH':
1348        return {
1349          pending: action.type === 'REQUEST_POST_UPDATE_START',
1350          options: action.options || {}
1351        };
1352    }
1353  
1354    return state;
1355  }
1356  /**
1357   * Post Lock State.
1358   *
1359   * @typedef {Object} PostLockState
1360   *
1361   * @property {boolean}  isLocked       Whether the post is locked.
1362   * @property {?boolean} isTakeover     Whether the post editing has been taken over.
1363   * @property {?boolean} activePostLock Active post lock value.
1364   * @property {?Object}  user           User that took over the post.
1365   */
1366  
1367  /**
1368   * Reducer returning the post lock status.
1369   *
1370   * @param {PostLockState} state  Current state.
1371   * @param {Object}        action Dispatched action.
1372   *
1373   * @return {PostLockState} Updated state.
1374   */
1375  
1376  function postLock() {
1377    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
1378      isLocked: false
1379    };
1380    let action = arguments.length > 1 ? arguments[1] : undefined;
1381  
1382    switch (action.type) {
1383      case 'UPDATE_POST_LOCK':
1384        return action.lock;
1385    }
1386  
1387    return state;
1388  }
1389  /**
1390   * Post saving lock.
1391   *
1392   * When post saving is locked, the post cannot be published or updated.
1393   *
1394   * @param {PostLockState} state  Current state.
1395   * @param {Object}        action Dispatched action.
1396   *
1397   * @return {PostLockState} Updated state.
1398   */
1399  
1400  function postSavingLock() {
1401    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1402    let action = arguments.length > 1 ? arguments[1] : undefined;
1403  
1404    switch (action.type) {
1405      case 'LOCK_POST_SAVING':
1406        return { ...state,
1407          [action.lockName]: true
1408        };
1409  
1410      case 'UNLOCK_POST_SAVING':
1411        return (0,external_lodash_namespaceObject.omit)(state, action.lockName);
1412    }
1413  
1414    return state;
1415  }
1416  /**
1417   * Post autosaving lock.
1418   *
1419   * When post autosaving is locked, the post will not autosave.
1420   *
1421   * @param {PostLockState} state  Current state.
1422   * @param {Object}        action Dispatched action.
1423   *
1424   * @return {PostLockState} Updated state.
1425   */
1426  
1427  function postAutosavingLock() {
1428    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1429    let action = arguments.length > 1 ? arguments[1] : undefined;
1430  
1431    switch (action.type) {
1432      case 'LOCK_POST_AUTOSAVING':
1433        return { ...state,
1434          [action.lockName]: true
1435        };
1436  
1437      case 'UNLOCK_POST_AUTOSAVING':
1438        return (0,external_lodash_namespaceObject.omit)(state, action.lockName);
1439    }
1440  
1441    return state;
1442  }
1443  /**
1444   * Reducer returning whether the editor is ready to be rendered.
1445   * The editor is considered ready to be rendered once
1446   * the post object is loaded properly and the initial blocks parsed.
1447   *
1448   * @param {boolean} state
1449   * @param {Object}  action
1450   *
1451   * @return {boolean} Updated state.
1452   */
1453  
1454  function isReady() {
1455    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
1456    let action = arguments.length > 1 ? arguments[1] : undefined;
1457  
1458    switch (action.type) {
1459      case 'SETUP_EDITOR_STATE':
1460        return true;
1461  
1462      case 'TEAR_DOWN_EDITOR':
1463        return false;
1464    }
1465  
1466    return state;
1467  }
1468  /**
1469   * Reducer returning the post editor setting.
1470   *
1471   * @param {Object} state  Current state.
1472   * @param {Object} action Dispatched action.
1473   *
1474   * @return {Object} Updated state.
1475   */
1476  
1477  function editorSettings() {
1478    let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EDITOR_SETTINGS_DEFAULTS;
1479    let action = arguments.length > 1 ? arguments[1] : undefined;
1480  
1481    switch (action.type) {
1482      case 'UPDATE_EDITOR_SETTINGS':
1483        return { ...state,
1484          ...action.settings
1485        };
1486    }
1487  
1488    return state;
1489  }
1490  /* harmony default export */ var reducer = ((0,external_wp_data_namespaceObject.combineReducers)({
1491    postId,
1492    postType,
1493    saving,
1494    postLock,
1495    template,
1496    postSavingLock,
1497    isReady,
1498    editorSettings,
1499    postAutosavingLock
1500  }));
1501  
1502  ;// CONCATENATED MODULE: ./node_modules/rememo/es/rememo.js
1503  
1504  
1505  var LEAF_KEY, hasWeakMap;
1506  
1507  /**
1508   * Arbitrary value used as key for referencing cache object in WeakMap tree.
1509   *
1510   * @type {Object}
1511   */
1512  LEAF_KEY = {};
1513  
1514  /**
1515   * Whether environment supports WeakMap.
1516   *
1517   * @type {boolean}
1518   */
1519  hasWeakMap = typeof WeakMap !== 'undefined';
1520  
1521  /**
1522   * Returns the first argument as the sole entry in an array.
1523   *
1524   * @param {*} value Value to return.
1525   *
1526   * @return {Array} Value returned as entry in array.
1527   */
1528  function arrayOf( value ) {
1529      return [ value ];
1530  }
1531  
1532  /**
1533   * Returns true if the value passed is object-like, or false otherwise. A value
1534   * is object-like if it can support property assignment, e.g. object or array.
1535   *
1536   * @param {*} value Value to test.
1537   *
1538   * @return {boolean} Whether value is object-like.
1539   */
1540  function isObjectLike( value ) {
1541      return !! value && 'object' === typeof value;
1542  }
1543  
1544  /**
1545   * Creates and returns a new cache object.
1546   *
1547   * @return {Object} Cache object.
1548   */
1549  function createCache() {
1550      var cache = {
1551          clear: function() {
1552              cache.head = null;
1553          },
1554      };
1555  
1556      return cache;
1557  }
1558  
1559  /**
1560   * Returns true if entries within the two arrays are strictly equal by
1561   * reference from a starting index.
1562   *
1563   * @param {Array}  a         First array.
1564   * @param {Array}  b         Second array.
1565   * @param {number} fromIndex Index from which to start comparison.
1566   *
1567   * @return {boolean} Whether arrays are shallowly equal.
1568   */
1569  function isShallowEqual( a, b, fromIndex ) {
1570      var i;
1571  
1572      if ( a.length !== b.length ) {
1573          return false;
1574      }
1575  
1576      for ( i = fromIndex; i < a.length; i++ ) {
1577          if ( a[ i ] !== b[ i ] ) {
1578              return false;
1579          }
1580      }
1581  
1582      return true;
1583  }
1584  
1585  /**
1586   * Returns a memoized selector function. The getDependants function argument is
1587   * called before the memoized selector and is expected to return an immutable
1588   * reference or array of references on which the selector depends for computing
1589   * its own return value. The memoize cache is preserved only as long as those
1590   * dependant references remain the same. If getDependants returns a different
1591   * reference(s), the cache is cleared and the selector value regenerated.
1592   *
1593   * @param {Function} selector      Selector function.
1594   * @param {Function} getDependants Dependant getter returning an immutable
1595   *                                 reference or array of reference used in
1596   *                                 cache bust consideration.
1597   *
1598   * @return {Function} Memoized selector.
1599   */
1600  /* harmony default export */ function rememo(selector, getDependants ) {
1601      var rootCache, getCache;
1602  
1603      // Use object source as dependant if getter not provided
1604      if ( ! getDependants ) {
1605          getDependants = arrayOf;
1606      }
1607  
1608      /**
1609       * Returns the root cache. If WeakMap is supported, this is assigned to the
1610       * root WeakMap cache set, otherwise it is a shared instance of the default
1611       * cache object.
1612       *
1613       * @return {(WeakMap|Object)} Root cache object.
1614       */
1615  	function getRootCache() {
1616          return rootCache;
1617      }
1618  
1619      /**
1620       * Returns the cache for a given dependants array. When possible, a WeakMap
1621       * will be used to create a unique cache for each set of dependants. This
1622       * is feasible due to the nature of WeakMap in allowing garbage collection
1623       * to occur on entries where the key object is no longer referenced. Since
1624       * WeakMap requires the key to be an object, this is only possible when the
1625       * dependant is object-like. The root cache is created as a hierarchy where
1626       * each top-level key is the first entry in a dependants set, the value a
1627       * WeakMap where each key is the next dependant, and so on. This continues
1628       * so long as the dependants are object-like. If no dependants are object-
1629       * like, then the cache is shared across all invocations.
1630       *
1631       * @see isObjectLike
1632       *
1633       * @param {Array} dependants Selector dependants.
1634       *
1635       * @return {Object} Cache object.
1636       */
1637  	function getWeakMapCache( dependants ) {
1638          var caches = rootCache,
1639              isUniqueByDependants = true,
1640              i, dependant, map, cache;
1641  
1642          for ( i = 0; i < dependants.length; i++ ) {
1643              dependant = dependants[ i ];
1644  
1645              // Can only compose WeakMap from object-like key.
1646              if ( ! isObjectLike( dependant ) ) {
1647                  isUniqueByDependants = false;
1648                  break;
1649              }
1650  
1651              // Does current segment of cache already have a WeakMap?
1652              if ( caches.has( dependant ) ) {
1653                  // Traverse into nested WeakMap.
1654                  caches = caches.get( dependant );
1655              } else {
1656                  // Create, set, and traverse into a new one.
1657                  map = new WeakMap();
1658                  caches.set( dependant, map );
1659                  caches = map;
1660              }
1661          }
1662  
1663          // We use an arbitrary (but consistent) object as key for the last item
1664          // in the WeakMap to serve as our running cache.
1665          if ( ! caches.has( LEAF_KEY ) ) {
1666              cache = createCache();
1667              cache.isUniqueByDependants = isUniqueByDependants;
1668              caches.set( LEAF_KEY, cache );
1669          }
1670  
1671          return caches.get( LEAF_KEY );
1672      }
1673  
1674      // Assign cache handler by availability of WeakMap
1675      getCache = hasWeakMap ? getWeakMapCache : getRootCache;
1676  
1677      /**
1678       * Resets root memoization cache.
1679       */
1680  	function clear() {
1681          rootCache = hasWeakMap ? new WeakMap() : createCache();
1682      }
1683  
1684      // eslint-disable-next-line jsdoc/check-param-names
1685      /**
1686       * The augmented selector call, considering first whether dependants have
1687       * changed before passing it to underlying memoize function.
1688       *
1689       * @param {Object} source    Source object for derivation.
1690       * @param {...*}   extraArgs Additional arguments to pass to selector.
1691       *
1692       * @return {*} Selector result.
1693       */
1694  	function callSelector( /* source, ...extraArgs */ ) {
1695          var len = arguments.length,
1696              cache, node, i, args, dependants;
1697  
1698          // Create copy of arguments (avoid leaking deoptimization).
1699          args = new Array( len );
1700          for ( i = 0; i < len; i++ ) {
1701              args[ i ] = arguments[ i ];
1702          }
1703  
1704          dependants = getDependants.apply( null, args );
1705          cache = getCache( dependants );
1706  
1707          // If not guaranteed uniqueness by dependants (primitive type or lack
1708          // of WeakMap support), shallow compare against last dependants and, if
1709          // references have changed, destroy cache to recalculate result.
1710          if ( ! cache.isUniqueByDependants ) {
1711              if ( cache.lastDependants && ! isShallowEqual( dependants, cache.lastDependants, 0 ) ) {
1712                  cache.clear();
1713              }
1714  
1715              cache.lastDependants = dependants;
1716          }
1717  
1718          node = cache.head;
1719          while ( node ) {
1720              // Check whether node arguments match arguments
1721              if ( ! isShallowEqual( node.args, args, 1 ) ) {
1722                  node = node.next;
1723                  continue;
1724              }
1725  
1726              // At this point we can assume we've found a match
1727  
1728              // Surface matched node to head if not already
1729              if ( node !== cache.head ) {
1730                  // Adjust siblings to point to each other.
1731                  node.prev.next = node.next;
1732                  if ( node.next ) {
1733                      node.next.prev = node.prev;
1734                  }
1735  
1736                  node.next = cache.head;
1737                  node.prev = null;
1738                  cache.head.prev = node;
1739                  cache.head = node;
1740              }
1741  
1742              // Return immediately
1743              return node.val;
1744          }
1745  
1746          // No cached value found. Continue to insertion phase:
1747  
1748          node = {
1749              // Generate the result from original function
1750              val: selector.apply( null, args ),
1751          };
1752  
1753          // Avoid including the source object in the cache.
1754          args[ 0 ] = null;
1755          node.args = args;
1756  
1757          // Don't need to check whether node is already head, since it would
1758          // have been returned above already if it was
1759  
1760          // Shift existing head down list
1761          if ( cache.head ) {
1762              cache.head.prev = node;
1763              node.next = cache.head;
1764          }
1765  
1766          cache.head = node;
1767  
1768          return node.val;
1769      }
1770  
1771      callSelector.getDependants = getDependants;
1772      callSelector.clear = clear;
1773      clear();
1774  
1775      return callSelector;
1776  }
1777  
1778  ;// CONCATENATED MODULE: external ["wp","date"]
1779  var external_wp_date_namespaceObject = window["wp"]["date"];
1780  ;// CONCATENATED MODULE: external ["wp","url"]
1781  var external_wp_url_namespaceObject = window["wp"]["url"];
1782  ;// CONCATENATED MODULE: external ["wp","deprecated"]
1783  var external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
1784  var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
1785  ;// CONCATENATED MODULE: external ["wp","primitives"]
1786  var external_wp_primitives_namespaceObject = window["wp"]["primitives"];
1787  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/layout.js
1788  
1789  
1790  /**
1791   * WordPress dependencies
1792   */
1793  
1794  const layout = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
1795    xmlns: "http://www.w3.org/2000/svg",
1796    viewBox: "0 0 24 24"
1797  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
1798    d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"
1799  }));
1800  /* harmony default export */ var library_layout = (layout);
1801  
1802  ;// CONCATENATED MODULE: external ["wp","preferences"]
1803  var external_wp_preferences_namespaceObject = window["wp"]["preferences"];
1804  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/constants.js
1805  /**
1806   * Set of post properties for which edits should assume a merging behavior,
1807   * assuming an object value.
1808   *
1809   * @type {Set}
1810   */
1811  const EDIT_MERGE_PROPERTIES = new Set(['meta']);
1812  /**
1813   * Constant for the store module (or reducer) key.
1814   *
1815   * @type {string}
1816   */
1817  
1818  const STORE_NAME = 'core/editor';
1819  const SAVE_POST_NOTICE_ID = 'SAVE_POST_NOTICE_ID';
1820  const TRASH_POST_NOTICE_ID = 'TRASH_POST_NOTICE_ID';
1821  const PERMALINK_POSTNAME_REGEX = /%(?:postname|pagename)%/;
1822  const ONE_MINUTE_IN_MS = 60 * 1000;
1823  const AUTOSAVE_PROPERTIES = ['title', 'excerpt', 'content'];
1824  
1825  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/header.js
1826  
1827  
1828  /**
1829   * WordPress dependencies
1830   */
1831  
1832  const header = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
1833    xmlns: "http://www.w3.org/2000/svg",
1834    viewBox: "0 0 24 24"
1835  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
1836    d: "M18.5 10.5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"
1837  }));
1838  /* harmony default export */ var library_header = (header);
1839  
1840  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/footer.js
1841  
1842  
1843  /**
1844   * WordPress dependencies
1845   */
1846  
1847  const footer = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
1848    xmlns: "http://www.w3.org/2000/svg",
1849    viewBox: "0 0 24 24"
1850  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
1851    fillRule: "evenodd",
1852    d: "M18 5.5h-8v8h8.5V6a.5.5 0 00-.5-.5zm-9.5 8h-3V6a.5.5 0 01.5-.5h2.5v8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"
1853  }));
1854  /* harmony default export */ var library_footer = (footer);
1855  
1856  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sidebar.js
1857  
1858  
1859  /**
1860   * WordPress dependencies
1861   */
1862  
1863  const sidebar = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
1864    xmlns: "http://www.w3.org/2000/svg",
1865    viewBox: "0 0 24 24"
1866  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
1867    d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"
1868  }));
1869  /* harmony default export */ var library_sidebar = (sidebar);
1870  
1871  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/symbol-filled.js
1872  
1873  
1874  /**
1875   * WordPress dependencies
1876   */
1877  
1878  const symbolFilled = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
1879    xmlns: "http://www.w3.org/2000/svg",
1880    viewBox: "0 0 24 24"
1881  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
1882    d: "M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-17.6 1L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z"
1883  }));
1884  /* harmony default export */ var symbol_filled = (symbolFilled);
1885  
1886  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/get-template-part-icon.js
1887  /**
1888   * WordPress dependencies
1889   */
1890  
1891  /**
1892   * Helper function to retrieve the corresponding icon by name.
1893   *
1894   * @param {string} iconName The name of the icon.
1895   *
1896   * @return {Object} The corresponding icon.
1897   */
1898  
1899  function getTemplatePartIcon(iconName) {
1900    if ('header' === iconName) {
1901      return library_header;
1902    } else if ('footer' === iconName) {
1903      return library_footer;
1904    } else if ('sidebar' === iconName) {
1905      return library_sidebar;
1906    }
1907  
1908    return symbol_filled;
1909  }
1910  
1911  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/selectors.js
1912  /**
1913   * External dependencies
1914   */
1915  
1916  
1917  /**
1918   * WordPress dependencies
1919   */
1920  
1921  
1922  
1923  
1924  
1925  
1926  
1927  
1928  
1929  
1930  
1931  /**
1932   * Internal dependencies
1933   */
1934  
1935  
1936  
1937  
1938  /**
1939   * Shared reference to an empty object for cases where it is important to avoid
1940   * returning a new object reference on every invocation, as in a connected or
1941   * other pure component which performs `shouldComponentUpdate` check on props.
1942   * This should be used as a last resort, since the normalized data should be
1943   * maintained by the reducer result in state.
1944   */
1945  
1946  const EMPTY_OBJECT = {};
1947  /**
1948   * Shared reference to an empty array for cases where it is important to avoid
1949   * returning a new array reference on every invocation, as in a connected or
1950   * other pure component which performs `shouldComponentUpdate` check on props.
1951   * This should be used as a last resort, since the normalized data should be
1952   * maintained by the reducer result in state.
1953   */
1954  
1955  const EMPTY_ARRAY = [];
1956  /**
1957   * Returns true if any past editor history snapshots exist, or false otherwise.
1958   *
1959   * @param {Object} state Global application state.
1960   *
1961   * @return {boolean} Whether undo history exists.
1962   */
1963  
1964  const hasEditorUndo = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
1965    return select(external_wp_coreData_namespaceObject.store).hasUndo();
1966  });
1967  /**
1968   * Returns true if any future editor history snapshots exist, or false
1969   * otherwise.
1970   *
1971   * @param {Object} state Global application state.
1972   *
1973   * @return {boolean} Whether redo history exists.
1974   */
1975  
1976  const hasEditorRedo = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
1977    return select(external_wp_coreData_namespaceObject.store).hasRedo();
1978  });
1979  /**
1980   * Returns true if the currently edited post is yet to be saved, or false if
1981   * the post has been saved.
1982   *
1983   * @param {Object} state Global application state.
1984   *
1985   * @return {boolean} Whether the post is new.
1986   */
1987  
1988  function isEditedPostNew(state) {
1989    return getCurrentPost(state).status === 'auto-draft';
1990  }
1991  /**
1992   * Returns true if content includes unsaved changes, or false otherwise.
1993   *
1994   * @param {Object} state Editor state.
1995   *
1996   * @return {boolean} Whether content includes unsaved changes.
1997   */
1998  
1999  function hasChangedContent(state) {
2000    const edits = getPostEdits(state);
2001    return 'blocks' in edits || // `edits` is intended to contain only values which are different from
2002    // the saved post, so the mere presence of a property is an indicator
2003    // that the value is different than what is known to be saved. While
2004    // content in Visual mode is represented by the blocks state, in Text
2005    // mode it is tracked by `edits.content`.
2006    'content' in edits;
2007  }
2008  /**
2009   * Returns true if there are unsaved values for the current edit session, or
2010   * false if the editing state matches the saved or new post.
2011   *
2012   * @param {Object} state Global application state.
2013   *
2014   * @return {boolean} Whether unsaved values exist.
2015   */
2016  
2017  const isEditedPostDirty = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2018    // Edits should contain only fields which differ from the saved post (reset
2019    // at initial load and save complete). Thus, a non-empty edits state can be
2020    // inferred to contain unsaved values.
2021    const postType = getCurrentPostType(state);
2022    const postId = getCurrentPostId(state);
2023  
2024    if (select(external_wp_coreData_namespaceObject.store).hasEditsForEntityRecord('postType', postType, postId)) {
2025      return true;
2026    }
2027  
2028    return false;
2029  });
2030  /**
2031   * Returns true if there are unsaved edits for entities other than
2032   * the editor's post, and false otherwise.
2033   *
2034   * @param {Object} state Global application state.
2035   *
2036   * @return {boolean} Whether there are edits or not.
2037   */
2038  
2039  const hasNonPostEntityChanges = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2040    const dirtyEntityRecords = select(external_wp_coreData_namespaceObject.store).__experimentalGetDirtyEntityRecords();
2041  
2042    const {
2043      type,
2044      id
2045    } = getCurrentPost(state);
2046    return (0,external_lodash_namespaceObject.some)(dirtyEntityRecords, entityRecord => entityRecord.kind !== 'postType' || entityRecord.name !== type || entityRecord.key !== id);
2047  });
2048  /**
2049   * Returns true if there are no unsaved values for the current edit session and
2050   * if the currently edited post is new (has never been saved before).
2051   *
2052   * @param {Object} state Global application state.
2053   *
2054   * @return {boolean} Whether new post and unsaved values exist.
2055   */
2056  
2057  function isCleanNewPost(state) {
2058    return !isEditedPostDirty(state) && isEditedPostNew(state);
2059  }
2060  /**
2061   * Returns the post currently being edited in its last known saved state, not
2062   * including unsaved edits. Returns an object containing relevant default post
2063   * values if the post has not yet been saved.
2064   *
2065   * @param {Object} state Global application state.
2066   *
2067   * @return {Object} Post object.
2068   */
2069  
2070  const getCurrentPost = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2071    const postId = getCurrentPostId(state);
2072    const postType = getCurrentPostType(state);
2073    const post = select(external_wp_coreData_namespaceObject.store).getRawEntityRecord('postType', postType, postId);
2074  
2075    if (post) {
2076      return post;
2077    } // This exists for compatibility with the previous selector behavior
2078    // which would guarantee an object return based on the editor reducer's
2079    // default empty object state.
2080  
2081  
2082    return EMPTY_OBJECT;
2083  });
2084  /**
2085   * Returns the post type of the post currently being edited.
2086   *
2087   * @param {Object} state Global application state.
2088   *
2089   * @return {string} Post type.
2090   */
2091  
2092  function getCurrentPostType(state) {
2093    return state.postType;
2094  }
2095  /**
2096   * Returns the ID of the post currently being edited, or null if the post has
2097   * not yet been saved.
2098   *
2099   * @param {Object} state Global application state.
2100   *
2101   * @return {?number} ID of current post.
2102   */
2103  
2104  function getCurrentPostId(state) {
2105    return state.postId;
2106  }
2107  /**
2108   * Returns the number of revisions of the post currently being edited.
2109   *
2110   * @param {Object} state Global application state.
2111   *
2112   * @return {number} Number of revisions.
2113   */
2114  
2115  function getCurrentPostRevisionsCount(state) {
2116    return (0,external_lodash_namespaceObject.get)(getCurrentPost(state), ['_links', 'version-history', 0, 'count'], 0);
2117  }
2118  /**
2119   * Returns the last revision ID of the post currently being edited,
2120   * or null if the post has no revisions.
2121   *
2122   * @param {Object} state Global application state.
2123   *
2124   * @return {?number} ID of the last revision.
2125   */
2126  
2127  function getCurrentPostLastRevisionId(state) {
2128    return (0,external_lodash_namespaceObject.get)(getCurrentPost(state), ['_links', 'predecessor-version', 0, 'id'], null);
2129  }
2130  /**
2131   * Returns any post values which have been changed in the editor but not yet
2132   * been saved.
2133   *
2134   * @param {Object} state Global application state.
2135   *
2136   * @return {Object} Object of key value pairs comprising unsaved edits.
2137   */
2138  
2139  const getPostEdits = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2140    const postType = getCurrentPostType(state);
2141    const postId = getCurrentPostId(state);
2142    return select(external_wp_coreData_namespaceObject.store).getEntityRecordEdits('postType', postType, postId) || EMPTY_OBJECT;
2143  });
2144  /**
2145   * Returns an attribute value of the saved post.
2146   *
2147   * @param {Object} state         Global application state.
2148   * @param {string} attributeName Post attribute name.
2149   *
2150   * @return {*} Post attribute value.
2151   */
2152  
2153  function getCurrentPostAttribute(state, attributeName) {
2154    switch (attributeName) {
2155      case 'type':
2156        return getCurrentPostType(state);
2157  
2158      case 'id':
2159        return getCurrentPostId(state);
2160  
2161      default:
2162        const post = getCurrentPost(state);
2163  
2164        if (!post.hasOwnProperty(attributeName)) {
2165          break;
2166        }
2167  
2168        return getPostRawValue(post[attributeName]);
2169    }
2170  }
2171  /**
2172   * Returns a single attribute of the post being edited, preferring the unsaved
2173   * edit if one exists, but merging with the attribute value for the last known
2174   * saved state of the post (this is needed for some nested attributes like meta).
2175   *
2176   * @param {Object} state         Global application state.
2177   * @param {string} attributeName Post attribute name.
2178   *
2179   * @return {*} Post attribute value.
2180   */
2181  
2182  const getNestedEditedPostProperty = (state, attributeName) => {
2183    const edits = getPostEdits(state);
2184  
2185    if (!edits.hasOwnProperty(attributeName)) {
2186      return getCurrentPostAttribute(state, attributeName);
2187    }
2188  
2189    return { ...getCurrentPostAttribute(state, attributeName),
2190      ...edits[attributeName]
2191    };
2192  };
2193  /**
2194   * Returns a single attribute of the post being edited, preferring the unsaved
2195   * edit if one exists, but falling back to the attribute for the last known
2196   * saved state of the post.
2197   *
2198   * @param {Object} state         Global application state.
2199   * @param {string} attributeName Post attribute name.
2200   *
2201   * @return {*} Post attribute value.
2202   */
2203  
2204  
2205  function getEditedPostAttribute(state, attributeName) {
2206    // Special cases.
2207    switch (attributeName) {
2208      case 'content':
2209        return getEditedPostContent(state);
2210    } // Fall back to saved post value if not edited.
2211  
2212  
2213    const edits = getPostEdits(state);
2214  
2215    if (!edits.hasOwnProperty(attributeName)) {
2216      return getCurrentPostAttribute(state, attributeName);
2217    } // Merge properties are objects which contain only the patch edit in state,
2218    // and thus must be merged with the current post attribute.
2219  
2220  
2221    if (EDIT_MERGE_PROPERTIES.has(attributeName)) {
2222      return getNestedEditedPostProperty(state, attributeName);
2223    }
2224  
2225    return edits[attributeName];
2226  }
2227  /**
2228   * Returns an attribute value of the current autosave revision for a post, or
2229   * null if there is no autosave for the post.
2230   *
2231   * @deprecated since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector
2232   *                from the '@wordpress/core-data' package and access properties on the returned
2233   *                autosave object using getPostRawValue.
2234   *
2235   * @param {Object} state         Global application state.
2236   * @param {string} attributeName Autosave attribute name.
2237   *
2238   * @return {*} Autosave attribute value.
2239   */
2240  
2241  const getAutosaveAttribute = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, attributeName) => {
2242    if (!(0,external_lodash_namespaceObject.includes)(AUTOSAVE_PROPERTIES, attributeName) && attributeName !== 'preview_link') {
2243      return;
2244    }
2245  
2246    const postType = getCurrentPostType(state);
2247    const postId = getCurrentPostId(state);
2248    const currentUserId = (0,external_lodash_namespaceObject.get)(select(external_wp_coreData_namespaceObject.store).getCurrentUser(), ['id']);
2249    const autosave = select(external_wp_coreData_namespaceObject.store).getAutosave(postType, postId, currentUserId);
2250  
2251    if (autosave) {
2252      return getPostRawValue(autosave[attributeName]);
2253    }
2254  });
2255  /**
2256   * Returns the current visibility of the post being edited, preferring the
2257   * unsaved value if different than the saved post. The return value is one of
2258   * "private", "password", or "public".
2259   *
2260   * @param {Object} state Global application state.
2261   *
2262   * @return {string} Post visibility.
2263   */
2264  
2265  function getEditedPostVisibility(state) {
2266    const status = getEditedPostAttribute(state, 'status');
2267  
2268    if (status === 'private') {
2269      return 'private';
2270    }
2271  
2272    const password = getEditedPostAttribute(state, 'password');
2273  
2274    if (password) {
2275      return 'password';
2276    }
2277  
2278    return 'public';
2279  }
2280  /**
2281   * Returns true if post is pending review.
2282   *
2283   * @param {Object} state Global application state.
2284   *
2285   * @return {boolean} Whether current post is pending review.
2286   */
2287  
2288  function isCurrentPostPending(state) {
2289    return getCurrentPost(state).status === 'pending';
2290  }
2291  /**
2292   * Return true if the current post has already been published.
2293   *
2294   * @param {Object}  state       Global application state.
2295   * @param {Object?} currentPost Explicit current post for bypassing registry selector.
2296   *
2297   * @return {boolean} Whether the post has been published.
2298   */
2299  
2300  function isCurrentPostPublished(state, currentPost) {
2301    const post = currentPost || getCurrentPost(state);
2302    return ['publish', 'private'].indexOf(post.status) !== -1 || post.status === 'future' && !(0,external_wp_date_namespaceObject.isInTheFuture)(new Date(Number((0,external_wp_date_namespaceObject.getDate)(post.date)) - ONE_MINUTE_IN_MS));
2303  }
2304  /**
2305   * Returns true if post is already scheduled.
2306   *
2307   * @param {Object} state Global application state.
2308   *
2309   * @return {boolean} Whether current post is scheduled to be posted.
2310   */
2311  
2312  function isCurrentPostScheduled(state) {
2313    return getCurrentPost(state).status === 'future' && !isCurrentPostPublished(state);
2314  }
2315  /**
2316   * Return true if the post being edited can be published.
2317   *
2318   * @param {Object} state Global application state.
2319   *
2320   * @return {boolean} Whether the post can been published.
2321   */
2322  
2323  function isEditedPostPublishable(state) {
2324    const post = getCurrentPost(state); // TODO: Post being publishable should be superset of condition of post
2325    // being saveable. Currently this restriction is imposed at UI.
2326    //
2327    //  See: <PostPublishButton /> (`isButtonEnabled` assigned by `isSaveable`).
2328  
2329    return isEditedPostDirty(state) || ['publish', 'private', 'future'].indexOf(post.status) === -1;
2330  }
2331  /**
2332   * Returns true if the post can be saved, or false otherwise. A post must
2333   * contain a title, an excerpt, or non-empty content to be valid for save.
2334   *
2335   * @param {Object} state Global application state.
2336   *
2337   * @return {boolean} Whether the post can be saved.
2338   */
2339  
2340  function isEditedPostSaveable(state) {
2341    if (isSavingPost(state)) {
2342      return false;
2343    } // TODO: Post should not be saveable if not dirty. Cannot be added here at
2344    // this time since posts where meta boxes are present can be saved even if
2345    // the post is not dirty. Currently this restriction is imposed at UI, but
2346    // should be moved here.
2347    //
2348    //  See: `isEditedPostPublishable` (includes `isEditedPostDirty` condition)
2349    //  See: <PostSavedState /> (`forceIsDirty` prop)
2350    //  See: <PostPublishButton /> (`forceIsDirty` prop)
2351    //  See: https://github.com/WordPress/gutenberg/pull/4184.
2352  
2353  
2354    return !!getEditedPostAttribute(state, 'title') || !!getEditedPostAttribute(state, 'excerpt') || !isEditedPostEmpty(state) || external_wp_element_namespaceObject.Platform.OS === 'native';
2355  }
2356  /**
2357   * Returns true if the edited post has content. A post has content if it has at
2358   * least one saveable block or otherwise has a non-empty content property
2359   * assigned.
2360   *
2361   * @param {Object} state Global application state.
2362   *
2363   * @return {boolean} Whether post has content.
2364   */
2365  
2366  function isEditedPostEmpty(state) {
2367    // While the condition of truthy content string is sufficient to determine
2368    // emptiness, testing saveable blocks length is a trivial operation. Since
2369    // this function can be called frequently, optimize for the fast case as a
2370    // condition of the mere existence of blocks. Note that the value of edited
2371    // content takes precedent over block content, and must fall through to the
2372    // default logic.
2373    const blocks = getEditorBlocks(state);
2374  
2375    if (blocks.length) {
2376      // Pierce the abstraction of the serializer in knowing that blocks are
2377      // joined with with newlines such that even if every individual block
2378      // produces an empty save result, the serialized content is non-empty.
2379      if (blocks.length > 1) {
2380        return false;
2381      } // There are two conditions under which the optimization cannot be
2382      // assumed, and a fallthrough to getEditedPostContent must occur:
2383      //
2384      // 1. getBlocksForSerialization has special treatment in omitting a
2385      //    single unmodified default block.
2386      // 2. Comment delimiters are omitted for a freeform or unregistered
2387      //    block in its serialization. The freeform block specifically may
2388      //    produce an empty string in its saved output.
2389      //
2390      // For all other content, the single block is assumed to make a post
2391      // non-empty, if only by virtue of its own comment delimiters.
2392  
2393  
2394      const blockName = blocks[0].name;
2395  
2396      if (blockName !== (0,external_wp_blocks_namespaceObject.getDefaultBlockName)() && blockName !== (0,external_wp_blocks_namespaceObject.getFreeformContentHandlerName)()) {
2397        return false;
2398      }
2399    }
2400  
2401    return !getEditedPostContent(state);
2402  }
2403  /**
2404   * Returns true if the post can be autosaved, or false otherwise.
2405   *
2406   * @param {Object} state    Global application state.
2407   * @param {Object} autosave A raw autosave object from the REST API.
2408   *
2409   * @return {boolean} Whether the post can be autosaved.
2410   */
2411  
2412  const isEditedPostAutosaveable = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2413    // A post must contain a title, an excerpt, or non-empty content to be valid for autosaving.
2414    if (!isEditedPostSaveable(state)) {
2415      return false;
2416    } // A post is not autosavable when there is a post autosave lock.
2417  
2418  
2419    if (isPostAutosavingLocked(state)) {
2420      return false;
2421    }
2422  
2423    const postType = getCurrentPostType(state);
2424    const postId = getCurrentPostId(state);
2425    const hasFetchedAutosave = select(external_wp_coreData_namespaceObject.store).hasFetchedAutosaves(postType, postId);
2426    const currentUserId = (0,external_lodash_namespaceObject.get)(select(external_wp_coreData_namespaceObject.store).getCurrentUser(), ['id']); // Disable reason - this line causes the side-effect of fetching the autosave
2427    // via a resolver, moving below the return would result in the autosave never
2428    // being fetched.
2429    // eslint-disable-next-line @wordpress/no-unused-vars-before-return
2430  
2431    const autosave = select(external_wp_coreData_namespaceObject.store).getAutosave(postType, postId, currentUserId); // If any existing autosaves have not yet been fetched, this function is
2432    // unable to determine if the post is autosaveable, so return false.
2433  
2434    if (!hasFetchedAutosave) {
2435      return false;
2436    } // If we don't already have an autosave, the post is autosaveable.
2437  
2438  
2439    if (!autosave) {
2440      return true;
2441    } // To avoid an expensive content serialization, use the content dirtiness
2442    // flag in place of content field comparison against the known autosave.
2443    // This is not strictly accurate, and relies on a tolerance toward autosave
2444    // request failures for unnecessary saves.
2445  
2446  
2447    if (hasChangedContent(state)) {
2448      return true;
2449    } // If the title or excerpt has changed, the post is autosaveable.
2450  
2451  
2452    return ['title', 'excerpt'].some(field => getPostRawValue(autosave[field]) !== getEditedPostAttribute(state, field));
2453  });
2454  /**
2455   * Return true if the post being edited is being scheduled. Preferring the
2456   * unsaved status values.
2457   *
2458   * @param {Object} state Global application state.
2459   *
2460   * @return {boolean} Whether the post has been published.
2461   */
2462  
2463  function isEditedPostBeingScheduled(state) {
2464    const date = getEditedPostAttribute(state, 'date'); // Offset the date by one minute (network latency).
2465  
2466    const checkedDate = new Date(Number((0,external_wp_date_namespaceObject.getDate)(date)) - ONE_MINUTE_IN_MS);
2467    return (0,external_wp_date_namespaceObject.isInTheFuture)(checkedDate);
2468  }
2469  /**
2470   * Returns whether the current post should be considered to have a "floating"
2471   * date (i.e. that it would publish "Immediately" rather than at a set time).
2472   *
2473   * Unlike in the PHP backend, the REST API returns a full date string for posts
2474   * where the 0000-00-00T00:00:00 placeholder is present in the database. To
2475   * infer that a post is set to publish "Immediately" we check whether the date
2476   * and modified date are the same.
2477   *
2478   * @param {Object} state Editor state.
2479   *
2480   * @return {boolean} Whether the edited post has a floating date value.
2481   */
2482  
2483  function isEditedPostDateFloating(state) {
2484    const date = getEditedPostAttribute(state, 'date');
2485    const modified = getEditedPostAttribute(state, 'modified'); // This should be the status of the persisted post
2486    // It shouldn't use the "edited" status otherwise it breaks the
2487    // inferred post data floating status
2488    // See https://github.com/WordPress/gutenberg/issues/28083.
2489  
2490    const status = getCurrentPost(state).status;
2491  
2492    if (status === 'draft' || status === 'auto-draft' || status === 'pending') {
2493      return date === modified || date === null;
2494    }
2495  
2496    return false;
2497  }
2498  /**
2499   * Returns true if the post is currently being saved, or false otherwise.
2500   *
2501   * @param {Object} state Global application state.
2502   *
2503   * @return {boolean} Whether post is being saved.
2504   */
2505  
2506  const isSavingPost = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2507    const postType = getCurrentPostType(state);
2508    const postId = getCurrentPostId(state);
2509    return select(external_wp_coreData_namespaceObject.store).isSavingEntityRecord('postType', postType, postId);
2510  });
2511  /**
2512   * Returns true if non-post entities are currently being saved, or false otherwise.
2513   *
2514   * @param {Object} state Global application state.
2515   *
2516   * @return {boolean} Whether non-post entities are being saved.
2517   */
2518  
2519  const isSavingNonPostEntityChanges = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2520    const entitiesBeingSaved = select(external_wp_coreData_namespaceObject.store).__experimentalGetEntitiesBeingSaved();
2521  
2522    const {
2523      type,
2524      id
2525    } = getCurrentPost(state);
2526    return (0,external_lodash_namespaceObject.some)(entitiesBeingSaved, entityRecord => entityRecord.kind !== 'postType' || entityRecord.name !== type || entityRecord.key !== id);
2527  });
2528  /**
2529   * Returns true if a previous post save was attempted successfully, or false
2530   * otherwise.
2531   *
2532   * @param {Object} state Global application state.
2533   *
2534   * @return {boolean} Whether the post was saved successfully.
2535   */
2536  
2537  const didPostSaveRequestSucceed = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2538    const postType = getCurrentPostType(state);
2539    const postId = getCurrentPostId(state);
2540    return !select(external_wp_coreData_namespaceObject.store).getLastEntitySaveError('postType', postType, postId);
2541  });
2542  /**
2543   * Returns true if a previous post save was attempted but failed, or false
2544   * otherwise.
2545   *
2546   * @param {Object} state Global application state.
2547   *
2548   * @return {boolean} Whether the post save failed.
2549   */
2550  
2551  const didPostSaveRequestFail = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2552    const postType = getCurrentPostType(state);
2553    const postId = getCurrentPostId(state);
2554    return !!select(external_wp_coreData_namespaceObject.store).getLastEntitySaveError('postType', postType, postId);
2555  });
2556  /**
2557   * Returns true if the post is autosaving, or false otherwise.
2558   *
2559   * @param {Object} state Global application state.
2560   *
2561   * @return {boolean} Whether the post is autosaving.
2562   */
2563  
2564  function isAutosavingPost(state) {
2565    if (!isSavingPost(state)) {
2566      return false;
2567    }
2568  
2569    return !!(0,external_lodash_namespaceObject.get)(state.saving, ['options', 'isAutosave']);
2570  }
2571  /**
2572   * Returns true if the post is being previewed, or false otherwise.
2573   *
2574   * @param {Object} state Global application state.
2575   *
2576   * @return {boolean} Whether the post is being previewed.
2577   */
2578  
2579  function isPreviewingPost(state) {
2580    if (!isSavingPost(state)) {
2581      return false;
2582    }
2583  
2584    return !!(0,external_lodash_namespaceObject.get)(state.saving, ['options', 'isPreview']);
2585  }
2586  /**
2587   * Returns the post preview link
2588   *
2589   * @param {Object} state Global application state.
2590   *
2591   * @return {string?} Preview Link.
2592   */
2593  
2594  function getEditedPostPreviewLink(state) {
2595    if (state.saving.pending || isSavingPost(state)) {
2596      return;
2597    }
2598  
2599    let previewLink = getAutosaveAttribute(state, 'preview_link'); // Fix for issue: https://github.com/WordPress/gutenberg/issues/33616
2600    // If the post is draft, ignore the preview link from the autosave record,
2601    // because the preview could be a stale autosave if the post was switched from
2602    // published to draft.
2603    // See: https://github.com/WordPress/gutenberg/pull/37952.
2604  
2605    if (!previewLink || 'draft' === getCurrentPost(state).status) {
2606      previewLink = getEditedPostAttribute(state, 'link');
2607  
2608      if (previewLink) {
2609        previewLink = (0,external_wp_url_namespaceObject.addQueryArgs)(previewLink, {
2610          preview: true
2611        });
2612      }
2613    }
2614  
2615    const featuredImageId = getEditedPostAttribute(state, 'featured_media');
2616  
2617    if (previewLink && featuredImageId) {
2618      return (0,external_wp_url_namespaceObject.addQueryArgs)(previewLink, {
2619        _thumbnail_id: featuredImageId
2620      });
2621    }
2622  
2623    return previewLink;
2624  }
2625  /**
2626   * Returns a suggested post format for the current post, inferred only if there
2627   * is a single block within the post and it is of a type known to match a
2628   * default post format. Returns null if the format cannot be determined.
2629   *
2630   * @param {Object} state Global application state.
2631   *
2632   * @return {?string} Suggested post format.
2633   */
2634  
2635  function getSuggestedPostFormat(state) {
2636    const blocks = getEditorBlocks(state);
2637    if (blocks.length > 2) return null;
2638    let name; // If there is only one block in the content of the post grab its name
2639    // so we can derive a suitable post format from it.
2640  
2641    if (blocks.length === 1) {
2642      name = blocks[0].name; // Check for core/embed `video` and `audio` eligible suggestions.
2643  
2644      if (name === 'core/embed') {
2645        var _blocks$0$attributes;
2646  
2647        const provider = (_blocks$0$attributes = blocks[0].attributes) === null || _blocks$0$attributes === void 0 ? void 0 : _blocks$0$attributes.providerNameSlug;
2648  
2649        if (['youtube', 'vimeo'].includes(provider)) {
2650          name = 'core/video';
2651        } else if (['spotify', 'soundcloud'].includes(provider)) {
2652          name = 'core/audio';
2653        }
2654      }
2655    } // If there are two blocks in the content and the last one is a text blocks
2656    // grab the name of the first one to also suggest a post format from it.
2657  
2658  
2659    if (blocks.length === 2 && blocks[1].name === 'core/paragraph') {
2660      name = blocks[0].name;
2661    } // We only convert to default post formats in core.
2662  
2663  
2664    switch (name) {
2665      case 'core/image':
2666        return 'image';
2667  
2668      case 'core/quote':
2669      case 'core/pullquote':
2670        return 'quote';
2671  
2672      case 'core/gallery':
2673        return 'gallery';
2674  
2675      case 'core/video':
2676        return 'video';
2677  
2678      case 'core/audio':
2679        return 'audio';
2680  
2681      default:
2682        return null;
2683    }
2684  }
2685  /**
2686   * Returns the content of the post being edited.
2687   *
2688   * @param {Object} state Global application state.
2689   *
2690   * @return {string} Post content.
2691   */
2692  
2693  const getEditedPostContent = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
2694    const postId = getCurrentPostId(state);
2695    const postType = getCurrentPostType(state);
2696    const record = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', postType, postId);
2697  
2698    if (record) {
2699      if (typeof record.content === 'function') {
2700        return record.content(record);
2701      } else if (record.blocks) {
2702        return (0,external_wp_blocks_namespaceObject.__unstableSerializeAndClean)(record.blocks);
2703      } else if (record.content) {
2704        return record.content;
2705      }
2706    }
2707  
2708    return '';
2709  });
2710  /**
2711   * Returns true if the post is being published, or false otherwise.
2712   *
2713   * @param {Object} state Global application state.
2714   *
2715   * @return {boolean} Whether post is being published.
2716   */
2717  
2718  function isPublishingPost(state) {
2719    return isSavingPost(state) && !isCurrentPostPublished(state) && getEditedPostAttribute(state, 'status') === 'publish';
2720  }
2721  /**
2722   * Returns whether the permalink is editable or not.
2723   *
2724   * @param {Object} state Editor state.
2725   *
2726   * @return {boolean} Whether or not the permalink is editable.
2727   */
2728  
2729  function isPermalinkEditable(state) {
2730    const permalinkTemplate = getEditedPostAttribute(state, 'permalink_template');
2731    return PERMALINK_POSTNAME_REGEX.test(permalinkTemplate);
2732  }
2733  /**
2734   * Returns the permalink for the post.
2735   *
2736   * @param {Object} state Editor state.
2737   *
2738   * @return {?string} The permalink, or null if the post is not viewable.
2739   */
2740  
2741  function getPermalink(state) {
2742    const permalinkParts = getPermalinkParts(state);
2743  
2744    if (!permalinkParts) {
2745      return null;
2746    }
2747  
2748    const {
2749      prefix,
2750      postName,
2751      suffix
2752    } = permalinkParts;
2753  
2754    if (isPermalinkEditable(state)) {
2755      return prefix + postName + suffix;
2756    }
2757  
2758    return prefix;
2759  }
2760  /**
2761   * Returns the slug for the post being edited, preferring a manually edited
2762   * value if one exists, then a sanitized version of the current post title, and
2763   * finally the post ID.
2764   *
2765   * @param {Object} state Editor state.
2766   *
2767   * @return {string} The current slug to be displayed in the editor
2768   */
2769  
2770  function getEditedPostSlug(state) {
2771    return getEditedPostAttribute(state, 'slug') || (0,external_wp_url_namespaceObject.cleanForSlug)(getEditedPostAttribute(state, 'title')) || getCurrentPostId(state);
2772  }
2773  /**
2774   * Returns the permalink for a post, split into it's three parts: the prefix,
2775   * the postName, and the suffix.
2776   *
2777   * @param {Object} state Editor state.
2778   *
2779   * @return {Object} An object containing the prefix, postName, and suffix for
2780   *                  the permalink, or null if the post is not viewable.
2781   */
2782  
2783  function getPermalinkParts(state) {
2784    const permalinkTemplate = getEditedPostAttribute(state, 'permalink_template');
2785  
2786    if (!permalinkTemplate) {
2787      return null;
2788    }
2789  
2790    const postName = getEditedPostAttribute(state, 'slug') || getEditedPostAttribute(state, 'generated_slug');
2791    const [prefix, suffix] = permalinkTemplate.split(PERMALINK_POSTNAME_REGEX);
2792    return {
2793      prefix,
2794      postName,
2795      suffix
2796    };
2797  }
2798  /**
2799   * Returns whether the post is locked.
2800   *
2801   * @param {Object} state Global application state.
2802   *
2803   * @return {boolean} Is locked.
2804   */
2805  
2806  function isPostLocked(state) {
2807    return state.postLock.isLocked;
2808  }
2809  /**
2810   * Returns whether post saving is locked.
2811   *
2812   * @param {Object} state Global application state.
2813   *
2814   * @return {boolean} Is locked.
2815   */
2816  
2817  function isPostSavingLocked(state) {
2818    return Object.keys(state.postSavingLock).length > 0;
2819  }
2820  /**
2821   * Returns whether post autosaving is locked.
2822   *
2823   * @param {Object} state Global application state.
2824   *
2825   * @return {boolean} Is locked.
2826   */
2827  
2828  function isPostAutosavingLocked(state) {
2829    return Object.keys(state.postAutosavingLock).length > 0;
2830  }
2831  /**
2832   * Returns whether the edition of the post has been taken over.
2833   *
2834   * @param {Object} state Global application state.
2835   *
2836   * @return {boolean} Is post lock takeover.
2837   */
2838  
2839  function isPostLockTakeover(state) {
2840    return state.postLock.isTakeover;
2841  }
2842  /**
2843   * Returns details about the post lock user.
2844   *
2845   * @param {Object} state Global application state.
2846   *
2847   * @return {Object} A user object.
2848   */
2849  
2850  function getPostLockUser(state) {
2851    return state.postLock.user;
2852  }
2853  /**
2854   * Returns the active post lock.
2855   *
2856   * @param {Object} state Global application state.
2857   *
2858   * @return {Object} The lock object.
2859   */
2860  
2861  function getActivePostLock(state) {
2862    return state.postLock.activePostLock;
2863  }
2864  /**
2865   * Returns whether or not the user has the unfiltered_html capability.
2866   *
2867   * @param {Object} state Editor state.
2868   *
2869   * @return {boolean} Whether the user can or can't post unfiltered HTML.
2870   */
2871  
2872  function canUserUseUnfilteredHTML(state) {
2873    return (0,external_lodash_namespaceObject.has)(getCurrentPost(state), ['_links', 'wp:action-unfiltered-html']);
2874  }
2875  /**
2876   * Returns whether the pre-publish panel should be shown
2877   * or skipped when the user clicks the "publish" button.
2878   *
2879   * @return {boolean} Whether the pre-publish panel should be shown or not.
2880   */
2881  
2882  const isPublishSidebarEnabled = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => !!select(external_wp_preferences_namespaceObject.store).get('core/edit-post', 'isPublishSidebarEnabled'));
2883  /**
2884   * Return the current block list.
2885   *
2886   * @param {Object} state
2887   * @return {Array} Block list.
2888   */
2889  
2890  function getEditorBlocks(state) {
2891    return getEditedPostAttribute(state, 'blocks') || EMPTY_ARRAY;
2892  }
2893  /**
2894   * A block selection object.
2895   *
2896   * @typedef {Object} WPBlockSelection
2897   *
2898   * @property {string} clientId     A block client ID.
2899   * @property {string} attributeKey A block attribute key.
2900   * @property {number} offset       An attribute value offset, based on the rich
2901   *                                 text value. See `wp.richText.create`.
2902   */
2903  
2904  /**
2905   * Returns the current selection start.
2906   *
2907   * @param {Object} state
2908   * @return {WPBlockSelection} The selection start.
2909   *
2910   * @deprecated since Gutenberg 10.0.0.
2911   */
2912  
2913  function getEditorSelectionStart(state) {
2914    var _getEditedPostAttribu;
2915  
2916    external_wp_deprecated_default()("select('core/editor').getEditorSelectionStart", {
2917      since: '5.8',
2918      alternative: "select('core/editor').getEditorSelection"
2919    });
2920    return (_getEditedPostAttribu = getEditedPostAttribute(state, 'selection')) === null || _getEditedPostAttribu === void 0 ? void 0 : _getEditedPostAttribu.selectionStart;
2921  }
2922  /**
2923   * Returns the current selection end.
2924   *
2925   * @param {Object} state
2926   * @return {WPBlockSelection} The selection end.
2927   *
2928   * @deprecated since Gutenberg 10.0.0.
2929   */
2930  
2931  function getEditorSelectionEnd(state) {
2932    var _getEditedPostAttribu2;
2933  
2934    external_wp_deprecated_default()("select('core/editor').getEditorSelectionStart", {
2935      since: '5.8',
2936      alternative: "select('core/editor').getEditorSelection"
2937    });
2938    return (_getEditedPostAttribu2 = getEditedPostAttribute(state, 'selection')) === null || _getEditedPostAttribu2 === void 0 ? void 0 : _getEditedPostAttribu2.selectionEnd;
2939  }
2940  /**
2941   * Returns the current selection.
2942   *
2943   * @param {Object} state
2944   * @return {WPBlockSelection} The selection end.
2945   */
2946  
2947  function getEditorSelection(state) {
2948    return getEditedPostAttribute(state, 'selection');
2949  }
2950  /**
2951   * Is the editor ready
2952   *
2953   * @param {Object} state
2954   * @return {boolean} is Ready.
2955   */
2956  
2957  function __unstableIsEditorReady(state) {
2958    return state.isReady;
2959  }
2960  /**
2961   * Returns the post editor settings.
2962   *
2963   * @param {Object} state Editor state.
2964   *
2965   * @return {Object} The editor settings object.
2966   */
2967  
2968  function getEditorSettings(state) {
2969    return state.editorSettings;
2970  }
2971  /*
2972   * Backward compatibility
2973   */
2974  
2975  /**
2976   * Returns state object prior to a specified optimist transaction ID, or `null`
2977   * if the transaction corresponding to the given ID cannot be found.
2978   *
2979   * @deprecated since Gutenberg 9.7.0.
2980   */
2981  
2982  function getStateBeforeOptimisticTransaction() {
2983    external_wp_deprecated_default()("select('core/editor').getStateBeforeOptimisticTransaction", {
2984      since: '5.7',
2985      hint: 'No state history is kept on this store anymore'
2986    });
2987    return null;
2988  }
2989  /**
2990   * Returns true if an optimistic transaction is pending commit, for which the
2991   * before state satisfies the given predicate function.
2992   *
2993   * @deprecated since Gutenberg 9.7.0.
2994   */
2995  
2996  function inSomeHistory() {
2997    external_wp_deprecated_default()("select('core/editor').inSomeHistory", {
2998      since: '5.7',
2999      hint: 'No state history is kept on this store anymore'
3000    });
3001    return false;
3002  }
3003  
3004  function getBlockEditorSelector(name) {
3005    return (0,external_wp_data_namespaceObject.createRegistrySelector)(select => function (state) {
3006      external_wp_deprecated_default()("`wp.data.select( 'core/editor' )." + name + '`', {
3007        since: '5.3',
3008        alternative: "`wp.data.select( 'core/block-editor' )." + name + '`',
3009        version: '6.2'
3010      });
3011  
3012      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
3013        args[_key - 1] = arguments[_key];
3014      }
3015  
3016      return select(external_wp_blockEditor_namespaceObject.store)[name](...args);
3017    });
3018  }
3019  /**
3020   * @see getBlockName in core/block-editor store.
3021   */
3022  
3023  
3024  const getBlockName = getBlockEditorSelector('getBlockName');
3025  /**
3026   * @see isBlockValid in core/block-editor store.
3027   */
3028  
3029  const isBlockValid = getBlockEditorSelector('isBlockValid');
3030  /**
3031   * @see getBlockAttributes in core/block-editor store.
3032   */
3033  
3034  const getBlockAttributes = getBlockEditorSelector('getBlockAttributes');
3035  /**
3036   * @see getBlock in core/block-editor store.
3037   */
3038  
3039  const getBlock = getBlockEditorSelector('getBlock');
3040  /**
3041   * @see getBlocks in core/block-editor store.
3042   */
3043  
3044  const getBlocks = getBlockEditorSelector('getBlocks');
3045  /**
3046   * @see getClientIdsOfDescendants in core/block-editor store.
3047   */
3048  
3049  const getClientIdsOfDescendants = getBlockEditorSelector('getClientIdsOfDescendants');
3050  /**
3051   * @see getClientIdsWithDescendants in core/block-editor store.
3052   */
3053  
3054  const getClientIdsWithDescendants = getBlockEditorSelector('getClientIdsWithDescendants');
3055  /**
3056   * @see getGlobalBlockCount in core/block-editor store.
3057   */
3058  
3059  const getGlobalBlockCount = getBlockEditorSelector('getGlobalBlockCount');
3060  /**
3061   * @see getBlocksByClientId in core/block-editor store.
3062   */
3063  
3064  const getBlocksByClientId = getBlockEditorSelector('getBlocksByClientId');
3065  /**
3066   * @see getBlockCount in core/block-editor store.
3067   */
3068  
3069  const getBlockCount = getBlockEditorSelector('getBlockCount');
3070  /**
3071   * @see getBlockSelectionStart in core/block-editor store.
3072   */
3073  
3074  const getBlockSelectionStart = getBlockEditorSelector('getBlockSelectionStart');
3075  /**
3076   * @see getBlockSelectionEnd in core/block-editor store.
3077   */
3078  
3079  const getBlockSelectionEnd = getBlockEditorSelector('getBlockSelectionEnd');
3080  /**
3081   * @see getSelectedBlockCount in core/block-editor store.
3082   */
3083  
3084  const getSelectedBlockCount = getBlockEditorSelector('getSelectedBlockCount');
3085  /**
3086   * @see hasSelectedBlock in core/block-editor store.
3087   */
3088  
3089  const hasSelectedBlock = getBlockEditorSelector('hasSelectedBlock');
3090  /**
3091   * @see getSelectedBlockClientId in core/block-editor store.
3092   */
3093  
3094  const getSelectedBlockClientId = getBlockEditorSelector('getSelectedBlockClientId');
3095  /**
3096   * @see getSelectedBlock in core/block-editor store.
3097   */
3098  
3099  const getSelectedBlock = getBlockEditorSelector('getSelectedBlock');
3100  /**
3101   * @see getBlockRootClientId in core/block-editor store.
3102   */
3103  
3104  const getBlockRootClientId = getBlockEditorSelector('getBlockRootClientId');
3105  /**
3106   * @see getBlockHierarchyRootClientId in core/block-editor store.
3107   */
3108  
3109  const getBlockHierarchyRootClientId = getBlockEditorSelector('getBlockHierarchyRootClientId');
3110  /**
3111   * @see getAdjacentBlockClientId in core/block-editor store.
3112   */
3113  
3114  const getAdjacentBlockClientId = getBlockEditorSelector('getAdjacentBlockClientId');
3115  /**
3116   * @see getPreviousBlockClientId in core/block-editor store.
3117   */
3118  
3119  const getPreviousBlockClientId = getBlockEditorSelector('getPreviousBlockClientId');
3120  /**
3121   * @see getNextBlockClientId in core/block-editor store.
3122   */
3123  
3124  const getNextBlockClientId = getBlockEditorSelector('getNextBlockClientId');
3125  /**
3126   * @see getSelectedBlocksInitialCaretPosition in core/block-editor store.
3127   */
3128  
3129  const getSelectedBlocksInitialCaretPosition = getBlockEditorSelector('getSelectedBlocksInitialCaretPosition');
3130  /**
3131   * @see getMultiSelectedBlockClientIds in core/block-editor store.
3132   */
3133  
3134  const getMultiSelectedBlockClientIds = getBlockEditorSelector('getMultiSelectedBlockClientIds');
3135  /**
3136   * @see getMultiSelectedBlocks in core/block-editor store.
3137   */
3138  
3139  const getMultiSelectedBlocks = getBlockEditorSelector('getMultiSelectedBlocks');
3140  /**
3141   * @see getFirstMultiSelectedBlockClientId in core/block-editor store.
3142   */
3143  
3144  const getFirstMultiSelectedBlockClientId = getBlockEditorSelector('getFirstMultiSelectedBlockClientId');
3145  /**
3146   * @see getLastMultiSelectedBlockClientId in core/block-editor store.
3147   */
3148  
3149  const getLastMultiSelectedBlockClientId = getBlockEditorSelector('getLastMultiSelectedBlockClientId');
3150  /**
3151   * @see isFirstMultiSelectedBlock in core/block-editor store.
3152   */
3153  
3154  const isFirstMultiSelectedBlock = getBlockEditorSelector('isFirstMultiSelectedBlock');
3155  /**
3156   * @see isBlockMultiSelected in core/block-editor store.
3157   */
3158  
3159  const isBlockMultiSelected = getBlockEditorSelector('isBlockMultiSelected');
3160  /**
3161   * @see isAncestorMultiSelected in core/block-editor store.
3162   */
3163  
3164  const isAncestorMultiSelected = getBlockEditorSelector('isAncestorMultiSelected');
3165  /**
3166   * @see getMultiSelectedBlocksStartClientId in core/block-editor store.
3167   */
3168  
3169  const getMultiSelectedBlocksStartClientId = getBlockEditorSelector('getMultiSelectedBlocksStartClientId');
3170  /**
3171   * @see getMultiSelectedBlocksEndClientId in core/block-editor store.
3172   */
3173  
3174  const getMultiSelectedBlocksEndClientId = getBlockEditorSelector('getMultiSelectedBlocksEndClientId');
3175  /**
3176   * @see getBlockOrder in core/block-editor store.
3177   */
3178  
3179  const getBlockOrder = getBlockEditorSelector('getBlockOrder');
3180  /**
3181   * @see getBlockIndex in core/block-editor store.
3182   */
3183  
3184  const getBlockIndex = getBlockEditorSelector('getBlockIndex');
3185  /**
3186   * @see isBlockSelected in core/block-editor store.
3187   */
3188  
3189  const isBlockSelected = getBlockEditorSelector('isBlockSelected');
3190  /**
3191   * @see hasSelectedInnerBlock in core/block-editor store.
3192   */
3193  
3194  const hasSelectedInnerBlock = getBlockEditorSelector('hasSelectedInnerBlock');
3195  /**
3196   * @see isBlockWithinSelection in core/block-editor store.
3197   */
3198  
3199  const isBlockWithinSelection = getBlockEditorSelector('isBlockWithinSelection');
3200  /**
3201   * @see hasMultiSelection in core/block-editor store.
3202   */
3203  
3204  const hasMultiSelection = getBlockEditorSelector('hasMultiSelection');
3205  /**
3206   * @see isMultiSelecting in core/block-editor store.
3207   */
3208  
3209  const isMultiSelecting = getBlockEditorSelector('isMultiSelecting');
3210  /**
3211   * @see isSelectionEnabled in core/block-editor store.
3212   */
3213  
3214  const isSelectionEnabled = getBlockEditorSelector('isSelectionEnabled');
3215  /**
3216   * @see getBlockMode in core/block-editor store.
3217   */
3218  
3219  const getBlockMode = getBlockEditorSelector('getBlockMode');
3220  /**
3221   * @see isTyping in core/block-editor store.
3222   */
3223  
3224  const isTyping = getBlockEditorSelector('isTyping');
3225  /**
3226   * @see isCaretWithinFormattedText in core/block-editor store.
3227   */
3228  
3229  const isCaretWithinFormattedText = getBlockEditorSelector('isCaretWithinFormattedText');
3230  /**
3231   * @see getBlockInsertionPoint in core/block-editor store.
3232   */
3233  
3234  const getBlockInsertionPoint = getBlockEditorSelector('getBlockInsertionPoint');
3235  /**
3236   * @see isBlockInsertionPointVisible in core/block-editor store.
3237   */
3238  
3239  const isBlockInsertionPointVisible = getBlockEditorSelector('isBlockInsertionPointVisible');
3240  /**
3241   * @see isValidTemplate in core/block-editor store.
3242   */
3243  
3244  const isValidTemplate = getBlockEditorSelector('isValidTemplate');
3245  /**
3246   * @see getTemplate in core/block-editor store.
3247   */
3248  
3249  const getTemplate = getBlockEditorSelector('getTemplate');
3250  /**
3251   * @see getTemplateLock in core/block-editor store.
3252   */
3253  
3254  const getTemplateLock = getBlockEditorSelector('getTemplateLock');
3255  /**
3256   * @see canInsertBlockType in core/block-editor store.
3257   */
3258  
3259  const canInsertBlockType = getBlockEditorSelector('canInsertBlockType');
3260  /**
3261   * @see getInserterItems in core/block-editor store.
3262   */
3263  
3264  const getInserterItems = getBlockEditorSelector('getInserterItems');
3265  /**
3266   * @see hasInserterItems in core/block-editor store.
3267   */
3268  
3269  const hasInserterItems = getBlockEditorSelector('hasInserterItems');
3270  /**
3271   * @see getBlockListSettings in core/block-editor store.
3272   */
3273  
3274  const getBlockListSettings = getBlockEditorSelector('getBlockListSettings');
3275  /**
3276   * Returns the default template types.
3277   *
3278   * @param {Object} state Global application state.
3279   *
3280   * @return {Object} The template types.
3281   */
3282  
3283  function __experimentalGetDefaultTemplateTypes(state) {
3284    var _getEditorSettings;
3285  
3286    return (_getEditorSettings = getEditorSettings(state)) === null || _getEditorSettings === void 0 ? void 0 : _getEditorSettings.defaultTemplateTypes;
3287  }
3288  /**
3289   * Returns the default template part areas.
3290   *
3291   * @param {Object} state Global application state.
3292   *
3293   * @return {Array} The template part areas.
3294   */
3295  
3296  const __experimentalGetDefaultTemplatePartAreas = rememo(state => {
3297    var _getEditorSettings2;
3298  
3299    const areas = ((_getEditorSettings2 = getEditorSettings(state)) === null || _getEditorSettings2 === void 0 ? void 0 : _getEditorSettings2.defaultTemplatePartAreas) || [];
3300    return areas === null || areas === void 0 ? void 0 : areas.map(item => {
3301      return { ...item,
3302        icon: getTemplatePartIcon(item.icon)
3303      };
3304    });
3305  }, state => {
3306    var _getEditorSettings3;
3307  
3308    return [(_getEditorSettings3 = getEditorSettings(state)) === null || _getEditorSettings3 === void 0 ? void 0 : _getEditorSettings3.defaultTemplatePartAreas];
3309  });
3310  /**
3311   * Returns a default template type searched by slug.
3312   *
3313   * @param {Object} state Global application state.
3314   * @param {string} slug  The template type slug.
3315   *
3316   * @return {Object} The template type.
3317   */
3318  
3319  const __experimentalGetDefaultTemplateType = rememo((state, slug) => (0,external_lodash_namespaceObject.find)(__experimentalGetDefaultTemplateTypes(state), {
3320    slug
3321  }) || {}, (state, slug) => [__experimentalGetDefaultTemplateTypes(state), slug]);
3322  /**
3323   * Given a template entity, return information about it which is ready to be
3324   * rendered, such as the title, description, and icon.
3325   *
3326   * @param {Object} state    Global application state.
3327   * @param {Object} template The template for which we need information.
3328   * @return {Object} Information about the template, including title, description, and icon.
3329   */
3330  
3331  function __experimentalGetTemplateInfo(state, template) {
3332    var _experimentalGetDefa;
3333  
3334    if (!template) {
3335      return {};
3336    }
3337  
3338    const {
3339      excerpt,
3340      slug,
3341      title,
3342      area
3343    } = template;
3344  
3345    const {
3346      title: defaultTitle,
3347      description: defaultDescription
3348    } = __experimentalGetDefaultTemplateType(state, slug);
3349  
3350    const templateTitle = (0,external_lodash_namespaceObject.isString)(title) ? title : title === null || title === void 0 ? void 0 : title.rendered;
3351    const templateDescription = (0,external_lodash_namespaceObject.isString)(excerpt) ? excerpt : excerpt === null || excerpt === void 0 ? void 0 : excerpt.raw;
3352    const templateIcon = ((_experimentalGetDefa = __experimentalGetDefaultTemplatePartAreas(state).find(item => area === item.area)) === null || _experimentalGetDefa === void 0 ? void 0 : _experimentalGetDefa.icon) || library_layout;
3353    return {
3354      title: templateTitle && templateTitle !== slug ? templateTitle : defaultTitle || slug,
3355      description: templateDescription || defaultDescription,
3356      icon: templateIcon
3357    };
3358  }
3359  /**
3360   * Returns a post type label depending on the current post.
3361   *
3362   * @param {Object} state Global application state.
3363   *
3364   * @return {string|undefined} The post type label if available, otherwise undefined.
3365   */
3366  
3367  const getPostTypeLabel = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
3368    var _postType$labels;
3369  
3370    const currentPostType = getCurrentPostType(state);
3371    const postType = select(external_wp_coreData_namespaceObject.store).getPostType(currentPostType); // Disable reason: Post type labels object is shaped like this.
3372    // eslint-disable-next-line camelcase
3373  
3374    return postType === null || postType === void 0 ? void 0 : (_postType$labels = postType.labels) === null || _postType$labels === void 0 ? void 0 : _postType$labels.singular_name;
3375  });
3376  
3377  ;// CONCATENATED MODULE: external ["wp","apiFetch"]
3378  var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
3379  var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
3380  ;// CONCATENATED MODULE: external ["wp","notices"]
3381  var external_wp_notices_namespaceObject = window["wp"]["notices"];
3382  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/local-autosave.js
3383  /**
3384   * Function returning a sessionStorage key to set or retrieve a given post's
3385   * automatic session backup.
3386   *
3387   * Keys are crucially prefixed with 'wp-autosave-' so that wp-login.php's
3388   * `loggedout` handler can clear sessionStorage of any user-private content.
3389   *
3390   * @see https://github.com/WordPress/wordpress-develop/blob/6dad32d2aed47e6c0cf2aee8410645f6d7aba6bd/src/wp-login.php#L103
3391   *
3392   * @param {string}  postId    Post ID.
3393   * @param {boolean} isPostNew Whether post new.
3394   *
3395   * @return {string} sessionStorage key
3396   */
3397  function postKey(postId, isPostNew) {
3398    return `wp-autosave-block-editor-post-$isPostNew ? 'auto-draft' : postId}`;
3399  }
3400  
3401  function localAutosaveGet(postId, isPostNew) {
3402    return window.sessionStorage.getItem(postKey(postId, isPostNew));
3403  }
3404  function localAutosaveSet(postId, isPostNew, title, content, excerpt) {
3405    window.sessionStorage.setItem(postKey(postId, isPostNew), JSON.stringify({
3406      post_title: title,
3407      content,
3408      excerpt
3409    }));
3410  }
3411  function localAutosaveClear(postId, isPostNew) {
3412    window.sessionStorage.removeItem(postKey(postId, isPostNew));
3413  }
3414  
3415  ;// CONCATENATED MODULE: external ["wp","i18n"]
3416  var external_wp_i18n_namespaceObject = window["wp"]["i18n"];
3417  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/utils/notice-builder.js
3418  /**
3419   * WordPress dependencies
3420   */
3421  
3422  /**
3423   * Internal dependencies
3424   */
3425  
3426  
3427  /**
3428   * External dependencies
3429   */
3430  
3431  
3432  /**
3433   * Builds the arguments for a success notification dispatch.
3434   *
3435   * @param {Object} data Incoming data to build the arguments from.
3436   *
3437   * @return {Array} Arguments for dispatch. An empty array signals no
3438   *                 notification should be sent.
3439   */
3440  
3441  function getNotificationArgumentsForSaveSuccess(data) {
3442    const {
3443      previousPost,
3444      post,
3445      postType
3446    } = data; // Autosaves are neither shown a notice nor redirected.
3447  
3448    if ((0,external_lodash_namespaceObject.get)(data.options, ['isAutosave'])) {
3449      return [];
3450    } // No notice is shown after trashing a post
3451  
3452  
3453    if (post.status === 'trash' && previousPost.status !== 'trash') {
3454      return [];
3455    }
3456  
3457    const publishStatus = ['publish', 'private', 'future'];
3458    const isPublished = (0,external_lodash_namespaceObject.includes)(publishStatus, previousPost.status);
3459    const willPublish = (0,external_lodash_namespaceObject.includes)(publishStatus, post.status);
3460    let noticeMessage;
3461    let shouldShowLink = (0,external_lodash_namespaceObject.get)(postType, ['viewable'], false);
3462    let isDraft; // Always should a notice, which will be spoken for accessibility.
3463  
3464    if (!isPublished && !willPublish) {
3465      // If saving a non-published post, don't show notice.
3466      noticeMessage = (0,external_wp_i18n_namespaceObject.__)('Draft saved.');
3467      isDraft = true;
3468    } else if (isPublished && !willPublish) {
3469      // If undoing publish status, show specific notice.
3470      noticeMessage = postType.labels.item_reverted_to_draft;
3471      shouldShowLink = false;
3472    } else if (!isPublished && willPublish) {
3473      // If publishing or scheduling a post, show the corresponding
3474      // publish message.
3475      noticeMessage = {
3476        publish: postType.labels.item_published,
3477        private: postType.labels.item_published_privately,
3478        future: postType.labels.item_scheduled
3479      }[post.status];
3480    } else {
3481      // Generic fallback notice.
3482      noticeMessage = postType.labels.item_updated;
3483    }
3484  
3485    const actions = [];
3486  
3487    if (shouldShowLink) {
3488      actions.push({
3489        label: isDraft ? (0,external_wp_i18n_namespaceObject.__)('View Preview') : postType.labels.view_item,
3490        url: post.link
3491      });
3492    }
3493  
3494    return [noticeMessage, {
3495      id: SAVE_POST_NOTICE_ID,
3496      type: 'snackbar',
3497      actions
3498    }];
3499  }
3500  /**
3501   * Builds the fail notification arguments for dispatch.
3502   *
3503   * @param {Object} data Incoming data to build the arguments with.
3504   *
3505   * @return {Array} Arguments for dispatch. An empty array signals no
3506   *                 notification should be sent.
3507   */
3508  
3509  function getNotificationArgumentsForSaveFail(data) {
3510    const {
3511      post,
3512      edits,
3513      error
3514    } = data;
3515  
3516    if (error && 'rest_autosave_no_changes' === error.code) {
3517      // Autosave requested a new autosave, but there were no changes. This shouldn't
3518      // result in an error notice for the user.
3519      return [];
3520    }
3521  
3522    const publishStatus = ['publish', 'private', 'future'];
3523    const isPublished = publishStatus.indexOf(post.status) !== -1; // If the post was being published, we show the corresponding publish error message
3524    // Unless we publish an "updating failed" message.
3525  
3526    const messages = {
3527      publish: (0,external_wp_i18n_namespaceObject.__)('Publishing failed.'),
3528      private: (0,external_wp_i18n_namespaceObject.__)('Publishing failed.'),
3529      future: (0,external_wp_i18n_namespaceObject.__)('Scheduling failed.')
3530    };
3531    let noticeMessage = !isPublished && publishStatus.indexOf(edits.status) !== -1 ? messages[edits.status] : (0,external_wp_i18n_namespaceObject.__)('Updating failed.'); // Check if message string contains HTML. Notice text is currently only
3532    // supported as plaintext, and stripping the tags may muddle the meaning.
3533  
3534    if (error.message && !/<\/?[^>]*>/.test(error.message)) {
3535      noticeMessage = [noticeMessage, error.message].join(' ');
3536    }
3537  
3538    return [noticeMessage, {
3539      id: SAVE_POST_NOTICE_ID
3540    }];
3541  }
3542  /**
3543   * Builds the trash fail notification arguments for dispatch.
3544   *
3545   * @param {Object} data
3546   *
3547   * @return {Array} Arguments for dispatch.
3548   */
3549  
3550  function getNotificationArgumentsForTrashFail(data) {
3551    return [data.error.message && data.error.code !== 'unknown_error' ? data.error.message : (0,external_wp_i18n_namespaceObject.__)('Trashing failed'), {
3552      id: TRASH_POST_NOTICE_ID
3553    }];
3554  }
3555  
3556  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/actions.js
3557  /**
3558   * External dependencies
3559   */
3560  
3561  /**
3562   * WordPress dependencies
3563   */
3564  
3565  
3566  
3567  
3568  
3569  
3570  
3571  
3572  /**
3573   * Internal dependencies
3574   */
3575  
3576  
3577  
3578  
3579  /**
3580   * Returns an action generator used in signalling that editor has initialized with
3581   * the specified post object and editor settings.
3582   *
3583   * @param {Object} post     Post object.
3584   * @param {Object} edits    Initial edited attributes object.
3585   * @param {Array?} template Block Template.
3586   */
3587  
3588  const setupEditor = (post, edits, template) => _ref => {
3589    let {
3590      dispatch
3591    } = _ref;
3592    dispatch.setupEditorState(post); // Apply a template for new posts only, if exists.
3593  
3594    const isNewPost = post.status === 'auto-draft';
3595  
3596    if (isNewPost && template) {
3597      // In order to ensure maximum of a single parse during setup, edits are
3598      // included as part of editor setup action. Assume edited content as
3599      // canonical if provided, falling back to post.
3600      let content;
3601  
3602      if ((0,external_lodash_namespaceObject.has)(edits, ['content'])) {
3603        content = edits.content;
3604      } else {
3605        content = post.content.raw;
3606      }
3607  
3608      let blocks = (0,external_wp_blocks_namespaceObject.parse)(content);
3609      blocks = (0,external_wp_blocks_namespaceObject.synchronizeBlocksWithTemplate)(blocks, template);
3610      dispatch.resetEditorBlocks(blocks, {
3611        __unstableShouldCreateUndoLevel: false
3612      });
3613    }
3614  
3615    if (edits && Object.values(edits).some(_ref2 => {
3616      var _post$key$raw, _post$key;
3617  
3618      let [key, edit] = _ref2;
3619      return edit !== ((_post$key$raw = (_post$key = post[key]) === null || _post$key === void 0 ? void 0 : _post$key.raw) !== null && _post$key$raw !== void 0 ? _post$key$raw : post[key]);
3620    })) {
3621      dispatch.editPost(edits);
3622    }
3623  };
3624  /**
3625   * Returns an action object signalling that the editor is being destroyed and
3626   * that any necessary state or side-effect cleanup should occur.
3627   *
3628   * @return {Object} Action object.
3629   */
3630  
3631  function __experimentalTearDownEditor() {
3632    return {
3633      type: 'TEAR_DOWN_EDITOR'
3634    };
3635  }
3636  /**
3637   * Returns an action object used in signalling that the latest version of the
3638   * post has been received, either by initialization or save.
3639   *
3640   * @deprecated Since WordPress 6.0.
3641   */
3642  
3643  function resetPost() {
3644    external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).resetPost", {
3645      since: '6.0',
3646      version: '6.3',
3647      alternative: 'Initialize the editor with the setupEditorState action'
3648    });
3649    return {
3650      type: 'DO_NOTHING'
3651    };
3652  }
3653  /**
3654   * Returns an action object used in signalling that a patch of updates for the
3655   * latest version of the post have been received.
3656   *
3657   * @return {Object} Action object.
3658   * @deprecated since Gutenberg 9.7.0.
3659   */
3660  
3661  function updatePost() {
3662    external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).updatePost", {
3663      since: '5.7',
3664      alternative: 'Use the core entities store instead'
3665    });
3666    return {
3667      type: 'DO_NOTHING'
3668    };
3669  }
3670  /**
3671   * Returns an action object used to setup the editor state when first opening
3672   * an editor.
3673   *
3674   * @param {Object} post Post object.
3675   *
3676   * @return {Object} Action object.
3677   */
3678  
3679  function setupEditorState(post) {
3680    return {
3681      type: 'SETUP_EDITOR_STATE',
3682      post
3683    };
3684  }
3685  /**
3686   * Returns an action object used in signalling that attributes of the post have
3687   * been edited.
3688   *
3689   * @param {Object} edits   Post attributes to edit.
3690   * @param {Object} options Options for the edit.
3691   */
3692  
3693  const editPost = (edits, options) => _ref3 => {
3694    let {
3695      select,
3696      registry
3697    } = _ref3;
3698    const {
3699      id,
3700      type
3701    } = select.getCurrentPost();
3702    registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', type, id, edits, options);
3703  };
3704  /**
3705   * Action for saving the current post in the editor.
3706   *
3707   * @param {Object} options
3708   */
3709  
3710  const savePost = function () {
3711    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3712    return async _ref4 => {
3713      let {
3714        select,
3715        dispatch,
3716        registry
3717      } = _ref4;
3718  
3719      if (!select.isEditedPostSaveable()) {
3720        return;
3721      }
3722  
3723      const content = select.getEditedPostContent();
3724  
3725      if (!options.isAutosave) {
3726        dispatch.editPost({
3727          content
3728        }, {
3729          undoIgnore: true
3730        });
3731      }
3732  
3733      const previousRecord = select.getCurrentPost();
3734      const edits = {
3735        id: previousRecord.id,
3736        ...registry.select(external_wp_coreData_namespaceObject.store).getEntityRecordNonTransientEdits('postType', previousRecord.type, previousRecord.id),
3737        content
3738      };
3739      dispatch({
3740        type: 'REQUEST_POST_UPDATE_START',
3741        options
3742      });
3743      await registry.dispatch(external_wp_coreData_namespaceObject.store).saveEntityRecord('postType', previousRecord.type, edits, options);
3744      dispatch({
3745        type: 'REQUEST_POST_UPDATE_FINISH',
3746        options
3747      });
3748      const error = registry.select(external_wp_coreData_namespaceObject.store).getLastEntitySaveError('postType', previousRecord.type, previousRecord.id);
3749  
3750      if (error) {
3751        const args = getNotificationArgumentsForSaveFail({
3752          post: previousRecord,
3753          edits,
3754          error
3755        });
3756  
3757        if (args.length) {
3758          registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(...args);
3759        }
3760      } else {
3761        const updatedRecord = select.getCurrentPost();
3762        const args = getNotificationArgumentsForSaveSuccess({
3763          previousPost: previousRecord,
3764          post: updatedRecord,
3765          postType: await registry.resolveSelect(external_wp_coreData_namespaceObject.store).getPostType(updatedRecord.type),
3766          options
3767        });
3768  
3769        if (args.length) {
3770          registry.dispatch(external_wp_notices_namespaceObject.store).createSuccessNotice(...args);
3771        } // Make sure that any edits after saving create an undo level and are
3772        // considered for change detection.
3773  
3774  
3775        if (!options.isAutosave) {
3776          registry.dispatch(external_wp_blockEditor_namespaceObject.store).__unstableMarkLastChangeAsPersistent();
3777        }
3778      }
3779    };
3780  };
3781  /**
3782   * Action for refreshing the current post.
3783   *
3784   * @deprecated Since WordPress 6.0.
3785   */
3786  
3787  function refreshPost() {
3788    external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).refreshPost", {
3789      since: '6.0',
3790      version: '6.3',
3791      alternative: 'Use the core entities store instead'
3792    });
3793    return {
3794      type: 'DO_NOTHING'
3795    };
3796  }
3797  /**
3798   * Action for trashing the current post in the editor.
3799   */
3800  
3801  const trashPost = () => async _ref5 => {
3802    let {
3803      select,
3804      dispatch,
3805      registry
3806    } = _ref5;
3807    const postTypeSlug = select.getCurrentPostType();
3808    const postType = await registry.resolveSelect(external_wp_coreData_namespaceObject.store).getPostType(postTypeSlug);
3809    registry.dispatch(external_wp_notices_namespaceObject.store).removeNotice(TRASH_POST_NOTICE_ID);
3810  
3811    try {
3812      const post = select.getCurrentPost();
3813      await external_wp_apiFetch_default()({
3814        path: `/wp/v2/$postType.rest_base}/$post.id}`,
3815        method: 'DELETE'
3816      });
3817      await dispatch.savePost();
3818    } catch (error) {
3819      registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(...getNotificationArgumentsForTrashFail({
3820        error
3821      }));
3822    }
3823  };
3824  /**
3825   * Action that autosaves the current post.  This
3826   * includes server-side autosaving (default) and client-side (a.k.a. local)
3827   * autosaving (e.g. on the Web, the post might be committed to Session
3828   * Storage).
3829   *
3830   * @param {Object?} options Extra flags to identify the autosave.
3831   */
3832  
3833  const autosave = function () {
3834    let {
3835      local = false,
3836      ...options
3837    } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3838    return async _ref6 => {
3839      let {
3840        select,
3841        dispatch
3842      } = _ref6;
3843  
3844      if (local) {
3845        const post = select.getCurrentPost();
3846        const isPostNew = select.isEditedPostNew();
3847        const title = select.getEditedPostAttribute('title');
3848        const content = select.getEditedPostAttribute('content');
3849        const excerpt = select.getEditedPostAttribute('excerpt');
3850        localAutosaveSet(post.id, isPostNew, title, content, excerpt);
3851      } else {
3852        await dispatch.savePost({
3853          isAutosave: true,
3854          ...options
3855        });
3856      }
3857    };
3858  };
3859  /**
3860   * Action that restores last popped state in undo history.
3861   */
3862  
3863  const redo = () => _ref7 => {
3864    let {
3865      registry
3866    } = _ref7;
3867    registry.dispatch(external_wp_coreData_namespaceObject.store).redo();
3868  };
3869  /**
3870   * Action that pops a record from undo history and undoes the edit.
3871   */
3872  
3873  const undo = () => _ref8 => {
3874    let {
3875      registry
3876    } = _ref8;
3877    registry.dispatch(external_wp_coreData_namespaceObject.store).undo();
3878  };
3879  /**
3880   * Action that creates an undo history record.
3881   *
3882   * @deprecated Since WordPress 6.0
3883   */
3884  
3885  function createUndoLevel() {
3886    external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).createUndoLevel", {
3887      since: '6.0',
3888      version: '6.3',
3889      alternative: 'Use the core entities store instead'
3890    });
3891    return {
3892      type: 'DO_NOTHING'
3893    };
3894  }
3895  /**
3896   * Action that locks the editor.
3897   *
3898   * @param {Object} lock Details about the post lock status, user, and nonce.
3899   * @return {Object} Action object.
3900   */
3901  
3902  function updatePostLock(lock) {
3903    return {
3904      type: 'UPDATE_POST_LOCK',
3905      lock
3906    };
3907  }
3908  /**
3909   * Enable the publish sidebar.
3910   */
3911  
3912  const enablePublishSidebar = () => _ref9 => {
3913    let {
3914      registry
3915    } = _ref9;
3916    registry.dispatch(external_wp_preferences_namespaceObject.store).set('core/edit-post', 'isPublishSidebarEnabled', true);
3917  };
3918  /**
3919   * Disables the publish sidebar.
3920   */
3921  
3922  const disablePublishSidebar = () => _ref10 => {
3923    let {
3924      registry
3925    } = _ref10;
3926    registry.dispatch(external_wp_preferences_namespaceObject.store).set('core/edit-post', 'isPublishSidebarEnabled', false);
3927  };
3928  /**
3929   * Action that locks post saving.
3930   *
3931   * @param {string} lockName The lock name.
3932   *
3933   * @example
3934   * ```
3935   * const { subscribe } = wp.data;
3936   *
3937   * const initialPostStatus = wp.data.select( 'core/editor' ).getEditedPostAttribute( 'status' );
3938   *
3939   * // Only allow publishing posts that are set to a future date.
3940   * if ( 'publish' !== initialPostStatus ) {
3941   *
3942   *     // Track locking.
3943   *     let locked = false;
3944   *
3945   *     // Watch for the publish event.
3946   *     let unssubscribe = subscribe( () => {
3947   *         const currentPostStatus = wp.data.select( 'core/editor' ).getEditedPostAttribute( 'status' );
3948   *         if ( 'publish' !== currentPostStatus ) {
3949   *
3950   *             // Compare the post date to the current date, lock the post if the date isn't in the future.
3951   *             const postDate = new Date( wp.data.select( 'core/editor' ).getEditedPostAttribute( 'date' ) );
3952   *             const currentDate = new Date();
3953   *             if ( postDate.getTime() <= currentDate.getTime() ) {
3954   *                 if ( ! locked ) {
3955   *                     locked = true;
3956   *                     wp.data.dispatch( 'core/editor' ).lockPostSaving( 'futurelock' );
3957   *                 }
3958   *             } else {
3959   *                 if ( locked ) {
3960   *                     locked = false;
3961   *                     wp.data.dispatch( 'core/editor' ).unlockPostSaving( 'futurelock' );
3962   *                 }
3963   *             }
3964   *         }
3965   *     } );
3966   * }
3967   * ```
3968   *
3969   * @return {Object} Action object
3970   */
3971  
3972  function lockPostSaving(lockName) {
3973    return {
3974      type: 'LOCK_POST_SAVING',
3975      lockName
3976    };
3977  }
3978  /**
3979   * Action that unlocks post saving.
3980   *
3981   * @param {string} lockName The lock name.
3982   *
3983   * @example
3984   * ```
3985   * // Unlock post saving with the lock key `mylock`:
3986   * wp.data.dispatch( 'core/editor' ).unlockPostSaving( 'mylock' );
3987   * ```
3988   *
3989   * @return {Object} Action object
3990   */
3991  
3992  function unlockPostSaving(lockName) {
3993    return {
3994      type: 'UNLOCK_POST_SAVING',
3995      lockName
3996    };
3997  }
3998  /**
3999   * Action that locks post autosaving.
4000   *
4001   * @param {string} lockName The lock name.
4002   *
4003   * @example
4004   * ```
4005   * // Lock post autosaving with the lock key `mylock`:
4006   * wp.data.dispatch( 'core/editor' ).lockPostAutosaving( 'mylock' );
4007   * ```
4008   *
4009   * @return {Object} Action object
4010   */
4011  
4012  function lockPostAutosaving(lockName) {
4013    return {
4014      type: 'LOCK_POST_AUTOSAVING',
4015      lockName
4016    };
4017  }
4018  /**
4019   * Action that unlocks post autosaving.
4020   *
4021   * @param {string} lockName The lock name.
4022   *
4023   * @example
4024   * ```
4025   * // Unlock post saving with the lock key `mylock`:
4026   * wp.data.dispatch( 'core/editor' ).unlockPostAutosaving( 'mylock' );
4027   * ```
4028   *
4029   * @return {Object} Action object
4030   */
4031  
4032  function unlockPostAutosaving(lockName) {
4033    return {
4034      type: 'UNLOCK_POST_AUTOSAVING',
4035      lockName
4036    };
4037  }
4038  /**
4039   * Returns an action object used to signal that the blocks have been updated.
4040   *
4041   * @param {Array}   blocks  Block Array.
4042   * @param {?Object} options Optional options.
4043   */
4044  
4045  const resetEditorBlocks = function (blocks) {
4046    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
4047    return _ref11 => {
4048      let {
4049        select,
4050        dispatch,
4051        registry
4052      } = _ref11;
4053      const {
4054        __unstableShouldCreateUndoLevel,
4055        selection
4056      } = options;
4057      const edits = {
4058        blocks,
4059        selection
4060      };
4061  
4062      if (__unstableShouldCreateUndoLevel !== false) {
4063        const {
4064          id,
4065          type
4066        } = select.getCurrentPost();
4067        const noChange = registry.select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', type, id).blocks === edits.blocks;
4068  
4069        if (noChange) {
4070          registry.dispatch(external_wp_coreData_namespaceObject.store).__unstableCreateUndoLevel('postType', type, id);
4071  
4072          return;
4073        } // We create a new function here on every persistent edit
4074        // to make sure the edit makes the post dirty and creates
4075        // a new undo level.
4076  
4077  
4078        edits.content = _ref12 => {
4079          let {
4080            blocks: blocksForSerialization = []
4081          } = _ref12;
4082          return (0,external_wp_blocks_namespaceObject.__unstableSerializeAndClean)(blocksForSerialization);
4083        };
4084      }
4085  
4086      dispatch.editPost(edits);
4087    };
4088  };
4089  /*
4090   * Returns an action object used in signalling that the post editor settings have been updated.
4091   *
4092   * @param {Object} settings Updated settings
4093   *
4094   * @return {Object} Action object
4095   */
4096  
4097  function updateEditorSettings(settings) {
4098    return {
4099      type: 'UPDATE_EDITOR_SETTINGS',
4100      settings
4101    };
4102  }
4103  /**
4104   * Backward compatibility
4105   */
4106  
4107  const getBlockEditorAction = name => function () {
4108    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
4109      args[_key] = arguments[_key];
4110    }
4111  
4112    return _ref13 => {
4113      let {
4114        registry
4115      } = _ref13;
4116      external_wp_deprecated_default()("`wp.data.dispatch( 'core/editor' )." + name + '`', {
4117        since: '5.3',
4118        alternative: "`wp.data.dispatch( 'core/block-editor' )." + name + '`',
4119        version: '6.2'
4120      });
4121      registry.dispatch(external_wp_blockEditor_namespaceObject.store)[name](...args);
4122    };
4123  };
4124  /**
4125   * @see resetBlocks in core/block-editor store.
4126   */
4127  
4128  
4129  const resetBlocks = getBlockEditorAction('resetBlocks');
4130  /**
4131   * @see receiveBlocks in core/block-editor store.
4132   */
4133  
4134  const receiveBlocks = getBlockEditorAction('receiveBlocks');
4135  /**
4136   * @see updateBlock in core/block-editor store.
4137   */
4138  
4139  const updateBlock = getBlockEditorAction('updateBlock');
4140  /**
4141   * @see updateBlockAttributes in core/block-editor store.
4142   */
4143  
4144  const updateBlockAttributes = getBlockEditorAction('updateBlockAttributes');
4145  /**
4146   * @see selectBlock in core/block-editor store.
4147   */
4148  
4149  const selectBlock = getBlockEditorAction('selectBlock');
4150  /**
4151   * @see startMultiSelect in core/block-editor store.
4152   */
4153  
4154  const startMultiSelect = getBlockEditorAction('startMultiSelect');
4155  /**
4156   * @see stopMultiSelect in core/block-editor store.
4157   */
4158  
4159  const stopMultiSelect = getBlockEditorAction('stopMultiSelect');
4160  /**
4161   * @see multiSelect in core/block-editor store.
4162   */
4163  
4164  const multiSelect = getBlockEditorAction('multiSelect');
4165  /**
4166   * @see clearSelectedBlock in core/block-editor store.
4167   */
4168  
4169  const clearSelectedBlock = getBlockEditorAction('clearSelectedBlock');
4170  /**
4171   * @see toggleSelection in core/block-editor store.
4172   */
4173  
4174  const toggleSelection = getBlockEditorAction('toggleSelection');
4175  /**
4176   * @see replaceBlocks in core/block-editor store.
4177   */
4178  
4179  const replaceBlocks = getBlockEditorAction('replaceBlocks');
4180  /**
4181   * @see replaceBlock in core/block-editor store.
4182   */
4183  
4184  const replaceBlock = getBlockEditorAction('replaceBlock');
4185  /**
4186   * @see moveBlocksDown in core/block-editor store.
4187   */
4188  
4189  const moveBlocksDown = getBlockEditorAction('moveBlocksDown');
4190  /**
4191   * @see moveBlocksUp in core/block-editor store.
4192   */
4193  
4194  const moveBlocksUp = getBlockEditorAction('moveBlocksUp');
4195  /**
4196   * @see moveBlockToPosition in core/block-editor store.
4197   */
4198  
4199  const moveBlockToPosition = getBlockEditorAction('moveBlockToPosition');
4200  /**
4201   * @see insertBlock in core/block-editor store.
4202   */
4203  
4204  const insertBlock = getBlockEditorAction('insertBlock');
4205  /**
4206   * @see insertBlocks in core/block-editor store.
4207   */
4208  
4209  const insertBlocks = getBlockEditorAction('insertBlocks');
4210  /**
4211   * @see showInsertionPoint in core/block-editor store.
4212   */
4213  
4214  const showInsertionPoint = getBlockEditorAction('showInsertionPoint');
4215  /**
4216   * @see hideInsertionPoint in core/block-editor store.
4217   */
4218  
4219  const hideInsertionPoint = getBlockEditorAction('hideInsertionPoint');
4220  /**
4221   * @see setTemplateValidity in core/block-editor store.
4222   */
4223  
4224  const setTemplateValidity = getBlockEditorAction('setTemplateValidity');
4225  /**
4226   * @see synchronizeTemplate in core/block-editor store.
4227   */
4228  
4229  const synchronizeTemplate = getBlockEditorAction('synchronizeTemplate');
4230  /**
4231   * @see mergeBlocks in core/block-editor store.
4232   */
4233  
4234  const mergeBlocks = getBlockEditorAction('mergeBlocks');
4235  /**
4236   * @see removeBlocks in core/block-editor store.
4237   */
4238  
4239  const removeBlocks = getBlockEditorAction('removeBlocks');
4240  /**
4241   * @see removeBlock in core/block-editor store.
4242   */
4243  
4244  const removeBlock = getBlockEditorAction('removeBlock');
4245  /**
4246   * @see toggleBlockMode in core/block-editor store.
4247   */
4248  
4249  const toggleBlockMode = getBlockEditorAction('toggleBlockMode');
4250  /**
4251   * @see startTyping in core/block-editor store.
4252   */
4253  
4254  const startTyping = getBlockEditorAction('startTyping');
4255  /**
4256   * @see stopTyping in core/block-editor store.
4257   */
4258  
4259  const stopTyping = getBlockEditorAction('stopTyping');
4260  /**
4261   * @see enterFormattedText in core/block-editor store.
4262   */
4263  
4264  const enterFormattedText = getBlockEditorAction('enterFormattedText');
4265  /**
4266   * @see exitFormattedText in core/block-editor store.
4267   */
4268  
4269  const exitFormattedText = getBlockEditorAction('exitFormattedText');
4270  /**
4271   * @see insertDefaultBlock in core/block-editor store.
4272   */
4273  
4274  const insertDefaultBlock = getBlockEditorAction('insertDefaultBlock');
4275  /**
4276   * @see updateBlockListSettings in core/block-editor store.
4277   */
4278  
4279  const updateBlockListSettings = getBlockEditorAction('updateBlockListSettings');
4280  
4281  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/index.js
4282  /**
4283   * WordPress dependencies
4284   */
4285  
4286  /**
4287   * Internal dependencies
4288   */
4289  
4290  
4291  
4292  
4293  
4294  /**
4295   * Post editor data store configuration.
4296   *
4297   * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore
4298   *
4299   * @type {Object}
4300   */
4301  
4302  const storeConfig = {
4303    reducer: reducer,
4304    selectors: selectors_namespaceObject,
4305    actions: actions_namespaceObject
4306  };
4307  /**
4308   * Store definition for the editor namespace.
4309   *
4310   * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
4311   *
4312   * @type {Object}
4313   */
4314  
4315  const store_store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, { ...storeConfig
4316  });
4317  (0,external_wp_data_namespaceObject.register)(store_store);
4318  
4319  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/hooks/custom-sources-backwards-compatibility.js
4320  
4321  
4322  
4323  /**
4324   * External dependencies
4325   */
4326  
4327  /**
4328   * WordPress dependencies
4329   */
4330  
4331  
4332  
4333  
4334  
4335  
4336  
4337  /**
4338   * Internal dependencies
4339   */
4340  
4341  
4342  /** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */
4343  
4344  /** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */
4345  
4346  /**
4347   * Object whose keys are the names of block attributes, where each value
4348   * represents the meta key to which the block attribute is intended to save.
4349   *
4350   * @see https://developer.wordpress.org/reference/functions/register_meta/
4351   *
4352   * @typedef {Object<string,string>} WPMetaAttributeMapping
4353   */
4354  
4355  /**
4356   * Given a mapping of attribute names (meta source attributes) to their
4357   * associated meta key, returns a higher order component that overrides its
4358   * `attributes` and `setAttributes` props to sync any changes with the edited
4359   * post's meta keys.
4360   *
4361   * @param {WPMetaAttributeMapping} metaAttributes Meta attribute mapping.
4362   *
4363   * @return {WPHigherOrderComponent} Higher-order component.
4364   */
4365  
4366  const createWithMetaAttributeSource = metaAttributes => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(BlockEdit => _ref => {
4367    let {
4368      attributes,
4369      setAttributes,
4370      ...props
4371    } = _ref;
4372    const postType = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getCurrentPostType(), []);
4373    const [meta, setMeta] = (0,external_wp_coreData_namespaceObject.useEntityProp)('postType', postType, 'meta');
4374    const mergedAttributes = (0,external_wp_element_namespaceObject.useMemo)(() => ({ ...attributes,
4375      ...(0,external_lodash_namespaceObject.mapValues)(metaAttributes, metaKey => meta[metaKey])
4376    }), [attributes, meta]);
4377    return (0,external_wp_element_namespaceObject.createElement)(BlockEdit, _extends({
4378      attributes: mergedAttributes,
4379      setAttributes: nextAttributes => {
4380        const nextMeta = (0,external_lodash_namespaceObject.mapKeys)( // Filter to intersection of keys between the updated
4381        // attributes and those with an associated meta key.
4382        (0,external_lodash_namespaceObject.pickBy)(nextAttributes, (value, key) => metaAttributes[key]), // Rename the keys to the expected meta key name.
4383        (value, attributeKey) => metaAttributes[attributeKey]);
4384  
4385        if (!(0,external_lodash_namespaceObject.isEmpty)(nextMeta)) {
4386          setMeta(nextMeta);
4387        }
4388  
4389        setAttributes(nextAttributes);
4390      }
4391    }, props));
4392  }, 'withMetaAttributeSource');
4393  /**
4394   * Filters a registered block's settings to enhance a block's `edit` component
4395   * to upgrade meta-sourced attributes to use the post's meta entity property.
4396   *
4397   * @param {WPBlockSettings} settings Registered block settings.
4398   *
4399   * @return {WPBlockSettings} Filtered block settings.
4400   */
4401  
4402  
4403  function shimAttributeSource(settings) {
4404    /** @type {WPMetaAttributeMapping} */
4405    const metaAttributes = (0,external_lodash_namespaceObject.mapValues)((0,external_lodash_namespaceObject.pickBy)(settings.attributes, {
4406      source: 'meta'
4407    }), 'meta');
4408  
4409    if (!(0,external_lodash_namespaceObject.isEmpty)(metaAttributes)) {
4410      settings.edit = createWithMetaAttributeSource(metaAttributes)(settings.edit);
4411    }
4412  
4413    return settings;
4414  }
4415  
4416  (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/editor/custom-sources-backwards-compatibility/shim-attribute-source', shimAttributeSource); // The above filter will only capture blocks registered after the filter was
4417  // added. There may already be blocks registered by this point, and those must
4418  // be updated to apply the shim.
4419  //
4420  // The following implementation achieves this, albeit with a couple caveats:
4421  // - Only blocks registered on the global store will be modified.
4422  // - The block settings are directly mutated, since there is currently no
4423  //   mechanism to update an existing block registration. This is the reason for
4424  //   `getBlockType` separate from `getBlockTypes`, since the latter returns a
4425  //   _copy_ of the block registration (i.e. the mutation would not affect the
4426  //   actual registered block settings).
4427  //
4428  // `getBlockTypes` or `getBlockType` implementation could change in the future
4429  // in regards to creating settings clones, but the corresponding end-to-end
4430  // tests for meta blocks should cover against any potential regressions.
4431  //
4432  // In the future, we could support updating block settings, at which point this
4433  // implementation could use that mechanism instead.
4434  
4435  (0,external_wp_data_namespaceObject.select)(external_wp_blocks_namespaceObject.store).getBlockTypes().map(_ref2 => {
4436    let {
4437      name
4438    } = _ref2;
4439    return (0,external_wp_data_namespaceObject.select)(external_wp_blocks_namespaceObject.store).getBlockType(name);
4440  }).forEach(shimAttributeSource);
4441  
4442  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/autocompleters/user.js
4443  
4444  
4445  /**
4446   * WordPress dependencies
4447   */
4448  
4449  
4450  
4451  /** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */
4452  
4453  function getUserLabel(user) {
4454    const avatar = user.avatar_urls && user.avatar_urls[24] ? (0,external_wp_element_namespaceObject.createElement)("img", {
4455      className: "editor-autocompleters__user-avatar",
4456      alt: "",
4457      src: user.avatar_urls[24]
4458    }) : (0,external_wp_element_namespaceObject.createElement)("span", {
4459      className: "editor-autocompleters__no-avatar"
4460    });
4461    return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, avatar, (0,external_wp_element_namespaceObject.createElement)("span", {
4462      className: "editor-autocompleters__user-name"
4463    }, user.name), (0,external_wp_element_namespaceObject.createElement)("span", {
4464      className: "editor-autocompleters__user-slug"
4465    }, user.slug));
4466  }
4467  /**
4468   * A user mentions completer.
4469   *
4470   * @type {WPCompleter}
4471   */
4472  
4473  /* harmony default export */ var user = ({
4474    name: 'users',
4475    className: 'editor-autocompleters__user',
4476    triggerPrefix: '@',
4477  
4478    useItems(filterValue) {
4479      const users = (0,external_wp_data_namespaceObject.useSelect)(select => {
4480        const {
4481          getUsers
4482        } = select(external_wp_coreData_namespaceObject.store);
4483        return getUsers({
4484          context: 'view',
4485          search: encodeURIComponent(filterValue)
4486        });
4487      }, [filterValue]);
4488      const options = (0,external_wp_element_namespaceObject.useMemo)(() => users ? users.map(user => ({
4489        key: `user-$user.slug}`,
4490        value: user,
4491        label: getUserLabel(user)
4492      })) : [], [users]);
4493      return [options];
4494    },
4495  
4496    getOptionCompletion(user) {
4497      return `@$user.slug}`;
4498    }
4499  
4500  });
4501  
4502  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/hooks/default-autocompleters.js
4503  /**
4504   * External dependencies
4505   */
4506  
4507  /**
4508   * WordPress dependencies
4509   */
4510  
4511  
4512  /**
4513   * Internal dependencies
4514   */
4515  
4516  
4517  
4518  function setDefaultCompleters() {
4519    let completers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
4520    // Provide copies so filters may directly modify them.
4521    completers.push((0,external_lodash_namespaceObject.clone)(user));
4522    return completers;
4523  }
4524  
4525  (0,external_wp_hooks_namespaceObject.addFilter)('editor.Autocomplete.completers', 'editor/autocompleters/set-default-completers', setDefaultCompleters);
4526  
4527  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/hooks/index.js
4528  /**
4529   * Internal dependencies
4530   */
4531  
4532  
4533  
4534  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/autocompleters/index.js
4535  
4536  
4537  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/autosave-monitor/index.js
4538  /**
4539   * WordPress dependencies
4540   */
4541  
4542  
4543  
4544  
4545  /**
4546   * Internal dependencies
4547   */
4548  
4549  
4550  /**
4551   * AutosaveMonitor invokes `props.autosave()` within at most `interval` seconds after an unsaved change is detected.
4552   *
4553   * The logic is straightforward: a check is performed every `props.interval` seconds. If any changes are detected, `props.autosave()` is called.
4554   * The time between the change and the autosave varies but is no larger than `props.interval` seconds. Refer to the code below for more details, such as
4555   * the specific way of detecting changes.
4556   *
4557   * There are two caveats:
4558   * * If `props.isAutosaveable` happens to be false at a time of checking for changes, the check is retried every second.
4559   * * The timer may be disabled by setting `props.disableIntervalChecks` to `true`. In that mode, any change will immediately trigger `props.autosave()`.
4560   */
4561  
4562  class AutosaveMonitor extends external_wp_element_namespaceObject.Component {
4563    constructor(props) {
4564      super(props);
4565      this.needsAutosave = !!(props.isDirty && props.isAutosaveable);
4566    }
4567  
4568    componentDidMount() {
4569      if (!this.props.disableIntervalChecks) {
4570        this.setAutosaveTimer();
4571      }
4572    }
4573  
4574    componentDidUpdate(prevProps) {
4575      if (this.props.disableIntervalChecks) {
4576        if (this.props.editsReference !== prevProps.editsReference) {
4577          this.props.autosave();
4578        }
4579  
4580        return;
4581      }
4582  
4583      if (this.props.interval !== prevProps.interval) {
4584        clearTimeout(this.timerId);
4585        this.setAutosaveTimer();
4586      }
4587  
4588      if (!this.props.isDirty) {
4589        this.needsAutosave = false;
4590        return;
4591      }
4592  
4593      if (this.props.isAutosaving && !prevProps.isAutosaving) {
4594        this.needsAutosave = false;
4595        return;
4596      }
4597  
4598      if (this.props.editsReference !== prevProps.editsReference) {
4599        this.needsAutosave = true;
4600      }
4601    }
4602  
4603    componentWillUnmount() {
4604      clearTimeout(this.timerId);
4605    }
4606  
4607    setAutosaveTimer() {
4608      let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.interval * 1000;
4609      this.timerId = setTimeout(() => {
4610        this.autosaveTimerHandler();
4611      }, timeout);
4612    }
4613  
4614    autosaveTimerHandler() {
4615      if (!this.props.isAutosaveable) {
4616        this.setAutosaveTimer(1000);
4617        return;
4618      }
4619  
4620      if (this.needsAutosave) {
4621        this.needsAutosave = false;
4622        this.props.autosave();
4623      }
4624  
4625      this.setAutosaveTimer();
4626    }
4627  
4628    render() {
4629      return null;
4630    }
4631  
4632  }
4633  /* harmony default export */ var autosave_monitor = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, ownProps) => {
4634    const {
4635      getReferenceByDistinctEdits
4636    } = select(external_wp_coreData_namespaceObject.store);
4637    const {
4638      isEditedPostDirty,
4639      isEditedPostAutosaveable,
4640      isAutosavingPost,
4641      getEditorSettings
4642    } = select(store_store);
4643    const {
4644      interval = getEditorSettings().autosaveInterval
4645    } = ownProps;
4646    return {
4647      editsReference: getReferenceByDistinctEdits(),
4648      isDirty: isEditedPostDirty(),
4649      isAutosaveable: isEditedPostAutosaveable(),
4650      isAutosaving: isAutosavingPost(),
4651      interval
4652    };
4653  }), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, ownProps) => ({
4654    autosave() {
4655      const {
4656        autosave = dispatch(store_store).autosave
4657      } = ownProps;
4658      autosave();
4659    }
4660  
4661  }))])(AutosaveMonitor));
4662  
4663  ;// CONCATENATED MODULE: external ["wp","richText"]
4664  var external_wp_richText_namespaceObject = window["wp"]["richText"];
4665  // EXTERNAL MODULE: ./node_modules/classnames/index.js
4666  var classnames = __webpack_require__(4403);
4667  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
4668  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/document-outline/item.js
4669  
4670  
4671  /**
4672   * External dependencies
4673   */
4674  
4675  
4676  const TableOfContentsItem = _ref => {
4677    let {
4678      children,
4679      isValid,
4680      level,
4681      href,
4682      onSelect
4683    } = _ref;
4684    return (0,external_wp_element_namespaceObject.createElement)("li", {
4685      className: classnames_default()('document-outline__item', `is-$level.toLowerCase()}`, {
4686        'is-invalid': !isValid
4687      })
4688    }, (0,external_wp_element_namespaceObject.createElement)("a", {
4689      href: href,
4690      className: "document-outline__button",
4691      onClick: onSelect
4692    }, (0,external_wp_element_namespaceObject.createElement)("span", {
4693      className: "document-outline__emdash",
4694      "aria-hidden": "true"
4695    }), (0,external_wp_element_namespaceObject.createElement)("strong", {
4696      className: "document-outline__level"
4697    }, level), (0,external_wp_element_namespaceObject.createElement)("span", {
4698      className: "document-outline__item-content"
4699    }, children)));
4700  };
4701  
4702  /* harmony default export */ var document_outline_item = (TableOfContentsItem);
4703  
4704  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/document-outline/index.js
4705  
4706  
4707  /**
4708   * External dependencies
4709   */
4710  
4711  /**
4712   * WordPress dependencies
4713   */
4714  
4715  
4716  
4717  
4718  
4719  
4720  
4721  /**
4722   * Internal dependencies
4723   */
4724  
4725  
4726  
4727  /**
4728   * Module constants
4729   */
4730  
4731  const emptyHeadingContent = (0,external_wp_element_namespaceObject.createElement)("em", null, (0,external_wp_i18n_namespaceObject.__)('(Empty heading)'));
4732  const incorrectLevelContent = [(0,external_wp_element_namespaceObject.createElement)("br", {
4733    key: "incorrect-break"
4734  }), (0,external_wp_element_namespaceObject.createElement)("em", {
4735    key: "incorrect-message"
4736  }, (0,external_wp_i18n_namespaceObject.__)('(Incorrect heading level)'))];
4737  const singleH1Headings = [(0,external_wp_element_namespaceObject.createElement)("br", {
4738    key: "incorrect-break-h1"
4739  }), (0,external_wp_element_namespaceObject.createElement)("em", {
4740    key: "incorrect-message-h1"
4741  }, (0,external_wp_i18n_namespaceObject.__)('(Your theme may already use a H1 for the post title)'))];
4742  const multipleH1Headings = [(0,external_wp_element_namespaceObject.createElement)("br", {
4743    key: "incorrect-break-multiple-h1"
4744  }), (0,external_wp_element_namespaceObject.createElement)("em", {
4745    key: "incorrect-message-multiple-h1"
4746  }, (0,external_wp_i18n_namespaceObject.__)('(Multiple H1 headings are not recommended)'))];
4747  /**
4748   * Returns an array of heading blocks enhanced with the following properties:
4749   * level   - An integer with the heading level.
4750   * isEmpty - Flag indicating if the heading has no content.
4751   *
4752   * @param {?Array} blocks An array of blocks.
4753   *
4754   * @return {Array} An array of heading blocks enhanced with the properties described above.
4755   */
4756  
4757  const computeOutlineHeadings = function () {
4758    let blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
4759    return (0,external_lodash_namespaceObject.flatMap)(blocks, function () {
4760      let block = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4761  
4762      if (block.name === 'core/heading') {
4763        return { ...block,
4764          level: block.attributes.level,
4765          isEmpty: isEmptyHeading(block)
4766        };
4767      }
4768  
4769      return computeOutlineHeadings(block.innerBlocks);
4770    });
4771  };
4772  
4773  const isEmptyHeading = heading => !heading.attributes.content || heading.attributes.content.length === 0;
4774  
4775  const DocumentOutline = _ref => {
4776    let {
4777      blocks = [],
4778      title,
4779      onSelect,
4780      isTitleSupported,
4781      hasOutlineItemsDisabled
4782    } = _ref;
4783    const headings = computeOutlineHeadings(blocks);
4784  
4785    if (headings.length < 1) {
4786      return null;
4787    }
4788  
4789    let prevHeadingLevel = 1; // Not great but it's the simplest way to locate the title right now.
4790  
4791    const titleNode = document.querySelector('.editor-post-title__input');
4792    const hasTitle = isTitleSupported && title && titleNode;
4793    const countByLevel = (0,external_lodash_namespaceObject.countBy)(headings, 'level');
4794    const hasMultipleH1 = countByLevel[1] > 1;
4795    return (0,external_wp_element_namespaceObject.createElement)("div", {
4796      className: "document-outline"
4797    }, (0,external_wp_element_namespaceObject.createElement)("ul", null, hasTitle && (0,external_wp_element_namespaceObject.createElement)(document_outline_item, {
4798      level: (0,external_wp_i18n_namespaceObject.__)('Title'),
4799      isValid: true,
4800      onSelect: onSelect,
4801      href: `#$titleNode.id}`,
4802      isDisabled: hasOutlineItemsDisabled
4803    }, title), headings.map((item, index) => {
4804      // Headings remain the same, go up by one, or down by any amount.
4805      // Otherwise there are missing levels.
4806      const isIncorrectLevel = item.level > prevHeadingLevel + 1;
4807      const isValid = !item.isEmpty && !isIncorrectLevel && !!item.level && (item.level !== 1 || !hasMultipleH1 && !hasTitle);
4808      prevHeadingLevel = item.level;
4809      return (0,external_wp_element_namespaceObject.createElement)(document_outline_item, {
4810        key: index,
4811        level: `H$item.level}`,
4812        isValid: isValid,
4813        isDisabled: hasOutlineItemsDisabled,
4814        href: `#block-$item.clientId}`,
4815        onSelect: onSelect
4816      }, item.isEmpty ? emptyHeadingContent : (0,external_wp_richText_namespaceObject.getTextContent)((0,external_wp_richText_namespaceObject.create)({
4817        html: item.attributes.content
4818      })), isIncorrectLevel && incorrectLevelContent, item.level === 1 && hasMultipleH1 && multipleH1Headings, hasTitle && item.level === 1 && !hasMultipleH1 && singleH1Headings);
4819    })));
4820  };
4821  /* harmony default export */ var document_outline = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => {
4822    const {
4823      getBlocks
4824    } = select(external_wp_blockEditor_namespaceObject.store);
4825    const {
4826      getEditedPostAttribute
4827    } = select(store_store);
4828    const {
4829      getPostType
4830    } = select(external_wp_coreData_namespaceObject.store);
4831    const postType = getPostType(getEditedPostAttribute('type'));
4832    return {
4833      title: getEditedPostAttribute('title'),
4834      blocks: getBlocks(),
4835      isTitleSupported: (0,external_lodash_namespaceObject.get)(postType, ['supports', 'title'], false)
4836    };
4837  }))(DocumentOutline));
4838  
4839  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/document-outline/check.js
4840  /**
4841   * External dependencies
4842   */
4843  
4844  /**
4845   * WordPress dependencies
4846   */
4847  
4848  
4849  
4850  
4851  function DocumentOutlineCheck(_ref) {
4852    let {
4853      blocks,
4854      children
4855    } = _ref;
4856    const headings = (0,external_lodash_namespaceObject.filter)(blocks, block => block.name === 'core/heading');
4857  
4858    if (headings.length < 1) {
4859      return null;
4860    }
4861  
4862    return children;
4863  }
4864  
4865  /* harmony default export */ var check = ((0,external_wp_data_namespaceObject.withSelect)(select => ({
4866    blocks: select(external_wp_blockEditor_namespaceObject.store).getBlocks()
4867  }))(DocumentOutlineCheck));
4868  
4869  ;// CONCATENATED MODULE: external ["wp","keyboardShortcuts"]
4870  var external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"];
4871  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/save-shortcut.js
4872  /**
4873   * WordPress dependencies
4874   */
4875  
4876  
4877  
4878  /**
4879   * Internal dependencies
4880   */
4881  
4882  
4883  
4884  function SaveShortcut(_ref) {
4885    let {
4886      resetBlocksOnSave
4887    } = _ref;
4888    const {
4889      resetEditorBlocks,
4890      savePost
4891    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
4892    const {
4893      isEditedPostDirty,
4894      getPostEdits,
4895      isPostSavingLocked
4896    } = (0,external_wp_data_namespaceObject.useSelect)(store_store);
4897    (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/editor/save', event => {
4898      event.preventDefault();
4899      /**
4900       * Do not save the post if post saving is locked.
4901       */
4902  
4903      if (isPostSavingLocked()) {
4904        return;
4905      } // TODO: This should be handled in the `savePost` effect in
4906      // considering `isSaveable`. See note on `isEditedPostSaveable`
4907      // selector about dirtiness and meta-boxes.
4908      //
4909      // See: `isEditedPostSaveable`
4910  
4911  
4912      if (!isEditedPostDirty()) {
4913        return;
4914      } // The text editor requires that editor blocks are updated for a
4915      // save to work correctly. Usually this happens when the textarea
4916      // for the code editors blurs, but the shortcut can be used without
4917      // blurring the textarea.
4918  
4919  
4920      if (resetBlocksOnSave) {
4921        const postEdits = getPostEdits();
4922  
4923        if (postEdits.content && typeof postEdits.content === 'string') {
4924          const blocks = (0,external_wp_blocks_namespaceObject.parse)(postEdits.content);
4925          resetEditorBlocks(blocks);
4926        }
4927      }
4928  
4929      savePost();
4930    });
4931    return null;
4932  }
4933  
4934  /* harmony default export */ var save_shortcut = (SaveShortcut);
4935  
4936  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/visual-editor-shortcuts.js
4937  
4938  
4939  /**
4940   * WordPress dependencies
4941   */
4942  
4943  
4944  /**
4945   * Internal dependencies
4946   */
4947  
4948  
4949  
4950  
4951  function VisualEditorGlobalKeyboardShortcuts() {
4952    const {
4953      redo,
4954      undo
4955    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
4956    (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/editor/undo', event => {
4957      undo();
4958      event.preventDefault();
4959    });
4960    (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/editor/redo', event => {
4961      redo();
4962      event.preventDefault();
4963    });
4964    return (0,external_wp_element_namespaceObject.createElement)(save_shortcut, null);
4965  }
4966  
4967  /* harmony default export */ var visual_editor_shortcuts = (VisualEditorGlobalKeyboardShortcuts);
4968  
4969  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/text-editor-shortcuts.js
4970  
4971  
4972  /**
4973   * Internal dependencies
4974   */
4975  
4976  function TextEditorGlobalKeyboardShortcuts() {
4977    return (0,external_wp_element_namespaceObject.createElement)(save_shortcut, {
4978      resetBlocksOnSave: true
4979    });
4980  }
4981  
4982  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/register-shortcuts.js
4983  
4984  
4985  /**
4986   * WordPress dependencies
4987   */
4988  
4989  
4990  
4991  
4992  
4993  
4994  function EditorKeyboardShortcutsRegister() {
4995    // Registering the shortcuts.
4996    const {
4997      registerShortcut
4998    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store);
4999    (0,external_wp_element_namespaceObject.useEffect)(() => {
5000      registerShortcut({
5001        name: 'core/editor/save',
5002        category: 'global',
5003        description: (0,external_wp_i18n_namespaceObject.__)('Save your changes.'),
5004        keyCombination: {
5005          modifier: 'primary',
5006          character: 's'
5007        }
5008      });
5009      registerShortcut({
5010        name: 'core/editor/undo',
5011        category: 'global',
5012        description: (0,external_wp_i18n_namespaceObject.__)('Undo your last changes.'),
5013        keyCombination: {
5014          modifier: 'primary',
5015          character: 'z'
5016        }
5017      });
5018      registerShortcut({
5019        name: 'core/editor/redo',
5020        category: 'global',
5021        description: (0,external_wp_i18n_namespaceObject.__)('Redo your last undo.'),
5022        keyCombination: {
5023          modifier: 'primaryShift',
5024          character: 'z'
5025        }
5026      });
5027    }, [registerShortcut]);
5028    return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockEditorKeyboardShortcuts.Register, null);
5029  }
5030  
5031  /* harmony default export */ var register_shortcuts = (EditorKeyboardShortcutsRegister);
5032  
5033  ;// CONCATENATED MODULE: external ["wp","components"]
5034  var external_wp_components_namespaceObject = window["wp"]["components"];
5035  ;// CONCATENATED MODULE: external ["wp","keycodes"]
5036  var external_wp_keycodes_namespaceObject = window["wp"]["keycodes"];
5037  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/redo.js
5038  
5039  
5040  /**
5041   * WordPress dependencies
5042   */
5043  
5044  const redo_redo = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
5045    xmlns: "http://www.w3.org/2000/svg",
5046    viewBox: "0 0 24 24"
5047  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
5048    d: "M15.6 6.5l-1.1 1 2.9 3.3H8c-.9 0-1.7.3-2.3.9-1.4 1.5-1.4 4.2-1.4 5.6v.2h1.5v-.3c0-1.1 0-3.5 1-4.5.3-.3.7-.5 1.3-.5h9.2L14.5 15l1.1 1.1 4.6-4.6-4.6-5z"
5049  }));
5050  /* harmony default export */ var library_redo = (redo_redo);
5051  
5052  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/undo.js
5053  
5054  
5055  /**
5056   * WordPress dependencies
5057   */
5058  
5059  const undo_undo = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
5060    xmlns: "http://www.w3.org/2000/svg",
5061    viewBox: "0 0 24 24"
5062  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
5063    d: "M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z"
5064  }));
5065  /* harmony default export */ var library_undo = (undo_undo);
5066  
5067  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-history/redo.js
5068  
5069  
5070  
5071  /**
5072   * WordPress dependencies
5073   */
5074  
5075  
5076  
5077  
5078  
5079  
5080  /**
5081   * Internal dependencies
5082   */
5083  
5084  
5085  
5086  function EditorHistoryRedo(props, ref) {
5087    const hasRedo = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).hasEditorRedo(), []);
5088    const {
5089      redo
5090    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
5091    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({}, props, {
5092      ref: ref,
5093      icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_redo : library_undo
5094      /* translators: button label text should, if possible, be under 16 characters. */
5095      ,
5096      label: (0,external_wp_i18n_namespaceObject.__)('Redo'),
5097      shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primaryShift('z') // If there are no redo levels we don't want to actually disable this
5098      // button, because it will remove focus for keyboard users.
5099      // See: https://github.com/WordPress/gutenberg/issues/3486
5100      ,
5101      "aria-disabled": !hasRedo,
5102      onClick: hasRedo ? redo : undefined,
5103      className: "editor-history__redo"
5104    }));
5105  }
5106  
5107  /* harmony default export */ var editor_history_redo = ((0,external_wp_element_namespaceObject.forwardRef)(EditorHistoryRedo));
5108  
5109  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-history/undo.js
5110  
5111  
5112  
5113  /**
5114   * WordPress dependencies
5115   */
5116  
5117  
5118  
5119  
5120  
5121  
5122  /**
5123   * Internal dependencies
5124   */
5125  
5126  
5127  
5128  function EditorHistoryUndo(props, ref) {
5129    const hasUndo = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).hasEditorUndo(), []);
5130    const {
5131      undo
5132    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
5133    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({}, props, {
5134      ref: ref,
5135      icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_undo : library_redo
5136      /* translators: button label text should, if possible, be under 16 characters. */
5137      ,
5138      label: (0,external_wp_i18n_namespaceObject.__)('Undo'),
5139      shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('z') // If there are no undo levels we don't want to actually disable this
5140      // button, because it will remove focus for keyboard users.
5141      // See: https://github.com/WordPress/gutenberg/issues/3486
5142      ,
5143      "aria-disabled": !hasUndo,
5144      onClick: hasUndo ? undo : undefined,
5145      className: "editor-history__undo"
5146    }));
5147  }
5148  
5149  /* harmony default export */ var editor_history_undo = ((0,external_wp_element_namespaceObject.forwardRef)(EditorHistoryUndo));
5150  
5151  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/template-validation-notice/index.js
5152  
5153  
5154  /**
5155   * WordPress dependencies
5156   */
5157  
5158  
5159  
5160  
5161  
5162  
5163  function TemplateValidationNotice(_ref) {
5164    let {
5165      isValid,
5166      ...props
5167    } = _ref;
5168  
5169    if (isValid) {
5170      return null;
5171    }
5172  
5173    const confirmSynchronization = () => {
5174      if ( // eslint-disable-next-line no-alert
5175      window.confirm((0,external_wp_i18n_namespaceObject.__)('Resetting the template may result in loss of content, do you want to continue?'))) {
5176        props.synchronizeTemplate();
5177      }
5178    };
5179  
5180    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Notice, {
5181      className: "editor-template-validation-notice",
5182      isDismissible: false,
5183      status: "warning",
5184      actions: [{
5185        label: (0,external_wp_i18n_namespaceObject.__)('Keep it as is'),
5186        onClick: props.resetTemplateValidity
5187      }, {
5188        label: (0,external_wp_i18n_namespaceObject.__)('Reset the template'),
5189        onClick: confirmSynchronization
5190      }]
5191    }, (0,external_wp_i18n_namespaceObject.__)('The content of your post doesn’t match the template assigned to your post type.'));
5192  }
5193  
5194  /* harmony default export */ var template_validation_notice = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => ({
5195    isValid: select(external_wp_blockEditor_namespaceObject.store).isValidTemplate()
5196  })), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => {
5197    const {
5198      setTemplateValidity,
5199      synchronizeTemplate
5200    } = dispatch(external_wp_blockEditor_namespaceObject.store);
5201    return {
5202      resetTemplateValidity: () => setTemplateValidity(true),
5203      synchronizeTemplate
5204    };
5205  })])(TemplateValidationNotice));
5206  
5207  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-notices/index.js
5208  
5209  
5210  /**
5211   * External dependencies
5212   */
5213  
5214  /**
5215   * WordPress dependencies
5216   */
5217  
5218  
5219  
5220  
5221  
5222  /**
5223   * Internal dependencies
5224   */
5225  
5226  
5227  function EditorNotices(_ref) {
5228    let {
5229      notices,
5230      onRemove
5231    } = _ref;
5232    const dismissibleNotices = (0,external_lodash_namespaceObject.filter)(notices, {
5233      isDismissible: true,
5234      type: 'default'
5235    });
5236    const nonDismissibleNotices = (0,external_lodash_namespaceObject.filter)(notices, {
5237      isDismissible: false,
5238      type: 'default'
5239    });
5240    return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.NoticeList, {
5241      notices: nonDismissibleNotices,
5242      className: "components-editor-notices__pinned"
5243    }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.NoticeList, {
5244      notices: dismissibleNotices,
5245      className: "components-editor-notices__dismissible",
5246      onRemove: onRemove
5247    }, (0,external_wp_element_namespaceObject.createElement)(template_validation_notice, null)));
5248  }
5249  /* harmony default export */ var editor_notices = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => ({
5250    notices: select(external_wp_notices_namespaceObject.store).getNotices()
5251  })), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
5252    onRemove: dispatch(external_wp_notices_namespaceObject.store).removeNotice
5253  }))])(EditorNotices));
5254  
5255  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-snackbars/index.js
5256  
5257  
5258  /**
5259   * External dependencies
5260   */
5261  
5262  /**
5263   * WordPress dependencies
5264   */
5265  
5266  
5267  
5268  
5269  function EditorSnackbars() {
5270    const notices = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_notices_namespaceObject.store).getNotices(), []);
5271    const {
5272      removeNotice
5273    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
5274    const snackbarNotices = (0,external_lodash_namespaceObject.filter)(notices, {
5275      type: 'snackbar'
5276    });
5277    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SnackbarList, {
5278      notices: snackbarNotices,
5279      className: "components-editor-notices__snackbar",
5280      onRemove: removeNotice
5281    });
5282  }
5283  
5284  ;// CONCATENATED MODULE: external ["wp","htmlEntities"]
5285  var external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"];
5286  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/entities-saved-states/entity-record-item.js
5287  
5288  
5289  /**
5290   * WordPress dependencies
5291   */
5292  
5293  
5294  
5295  
5296  
5297  
5298  
5299  /**
5300   * Internal dependencies
5301   */
5302  
5303  
5304  function EntityRecordItem(_ref) {
5305    let {
5306      record,
5307      checked,
5308      onChange,
5309      closePanel
5310    } = _ref;
5311    const {
5312      name,
5313      kind,
5314      title,
5315      key
5316    } = record;
5317    const parentBlockId = (0,external_wp_data_namespaceObject.useSelect)(select => {
5318      var _blocks$;
5319  
5320      // Get entity's blocks.
5321      const {
5322        blocks = []
5323      } = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord(kind, name, key); // Get parents of the entity's first block.
5324  
5325      const parents = select(external_wp_blockEditor_namespaceObject.store).getBlockParents((_blocks$ = blocks[0]) === null || _blocks$ === void 0 ? void 0 : _blocks$.clientId); // Return closest parent block's clientId.
5326  
5327      return parents[parents.length - 1];
5328    }, []); // Handle templates that might use default descriptive titles.
5329  
5330    const entityRecordTitle = (0,external_wp_data_namespaceObject.useSelect)(select => {
5331      if ('postType' !== kind || 'wp_template' !== name) {
5332        return title;
5333      }
5334  
5335      const template = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord(kind, name, key);
5336      return select(store_store).__experimentalGetTemplateInfo(template).title;
5337    }, [name, kind, title, key]);
5338    const isSelected = (0,external_wp_data_namespaceObject.useSelect)(select => {
5339      const selectedBlockId = select(external_wp_blockEditor_namespaceObject.store).getSelectedBlockClientId();
5340      return selectedBlockId === parentBlockId;
5341    }, [parentBlockId]);
5342    const isSelectedText = isSelected ? (0,external_wp_i18n_namespaceObject.__)('Selected') : (0,external_wp_i18n_namespaceObject.__)('Select');
5343    const {
5344      selectBlock
5345    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
5346    const selectParentBlock = (0,external_wp_element_namespaceObject.useCallback)(() => selectBlock(parentBlockId), [parentBlockId]);
5347    const selectAndDismiss = (0,external_wp_element_namespaceObject.useCallback)(() => {
5348      selectBlock(parentBlockId);
5349      closePanel();
5350    }, [parentBlockId]);
5351    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelRow, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
5352      label: (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(entityRecordTitle) || (0,external_wp_i18n_namespaceObject.__)('Untitled')),
5353      checked: checked,
5354      onChange: onChange
5355    }), parentBlockId ? (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
5356      onClick: selectParentBlock,
5357      className: "entities-saved-states__find-entity",
5358      disabled: isSelected
5359    }, isSelectedText), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
5360      onClick: selectAndDismiss,
5361      className: "entities-saved-states__find-entity-small",
5362      disabled: isSelected
5363    }, isSelectedText)) : null);
5364  }
5365  
5366  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/entities-saved-states/entity-type-list.js
5367  
5368  
5369  /**
5370   * External dependencies
5371   */
5372  
5373  /**
5374   * WordPress dependencies
5375   */
5376  
5377  
5378  
5379  
5380  
5381  /**
5382   * Internal dependencies
5383   */
5384  
5385  
5386  
5387  function getEntityDescription(entity, count) {
5388    switch (entity) {
5389      case 'site':
5390        return 1 === count ? (0,external_wp_i18n_namespaceObject.__)('This change will affect your whole site.') : (0,external_wp_i18n_namespaceObject.__)('These changes will affect your whole site.');
5391  
5392      case 'wp_template':
5393        return (0,external_wp_i18n_namespaceObject.__)('This change will affect pages and posts that use this template.');
5394  
5395      case 'page':
5396      case 'post':
5397        return (0,external_wp_i18n_namespaceObject.__)('The following content has been modified.');
5398    }
5399  }
5400  
5401  function EntityTypeList(_ref) {
5402    let {
5403      list,
5404      unselectedEntities,
5405      setUnselectedEntities,
5406      closePanel
5407    } = _ref;
5408    const count = list.length;
5409    const firstRecord = list[0];
5410    const entityConfig = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getEntityConfig(firstRecord.kind, firstRecord.name), [firstRecord.kind, firstRecord.name]);
5411    const {
5412      name
5413    } = firstRecord;
5414    let entityLabel = entityConfig.label;
5415  
5416    if (name === 'wp_template_part') {
5417      entityLabel = 1 === count ? (0,external_wp_i18n_namespaceObject.__)('Template Part') : (0,external_wp_i18n_namespaceObject.__)('Template Parts');
5418    } // Set description based on type of entity.
5419  
5420  
5421    const description = getEntityDescription(name, count);
5422    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
5423      title: entityLabel,
5424      initialOpen: true
5425    }, description && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelRow, null, description), list.map(record => {
5426      return (0,external_wp_element_namespaceObject.createElement)(EntityRecordItem, {
5427        key: record.key || record.property,
5428        record: record,
5429        checked: !(0,external_lodash_namespaceObject.some)(unselectedEntities, elt => elt.kind === record.kind && elt.name === record.name && elt.key === record.key && elt.property === record.property),
5430        onChange: value => setUnselectedEntities(record, value),
5431        closePanel: closePanel
5432      });
5433    }));
5434  }
5435  
5436  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/entities-saved-states/index.js
5437  
5438  
5439  
5440  /**
5441   * External dependencies
5442   */
5443  
5444  /**
5445   * WordPress dependencies
5446   */
5447  
5448  
5449  
5450  
5451  
5452  
5453  
5454  
5455  
5456  /**
5457   * Internal dependencies
5458   */
5459  
5460  
5461  const TRANSLATED_SITE_PROPERTIES = {
5462    title: (0,external_wp_i18n_namespaceObject.__)('Title'),
5463    description: (0,external_wp_i18n_namespaceObject.__)('Tagline'),
5464    site_logo: (0,external_wp_i18n_namespaceObject.__)('Logo'),
5465    site_icon: (0,external_wp_i18n_namespaceObject.__)('Icon'),
5466    show_on_front: (0,external_wp_i18n_namespaceObject.__)('Show on front'),
5467    page_on_front: (0,external_wp_i18n_namespaceObject.__)('Page on front')
5468  };
5469  const PUBLISH_ON_SAVE_ENTITIES = [{
5470    kind: 'postType',
5471    name: 'wp_navigation'
5472  }];
5473  function EntitiesSavedStates(_ref) {
5474    let {
5475      close
5476    } = _ref;
5477    const saveButtonRef = (0,external_wp_element_namespaceObject.useRef)();
5478    const {
5479      dirtyEntityRecords
5480    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
5481      const dirtyRecords = select(external_wp_coreData_namespaceObject.store).__experimentalGetDirtyEntityRecords(); // Remove site object and decouple into its edited pieces.
5482  
5483  
5484      const dirtyRecordsWithoutSite = dirtyRecords.filter(record => !(record.kind === 'root' && record.name === 'site'));
5485      const siteEdits = select(external_wp_coreData_namespaceObject.store).getEntityRecordEdits('root', 'site');
5486      const siteEditsAsEntities = [];
5487  
5488      for (const property in siteEdits) {
5489        siteEditsAsEntities.push({
5490          kind: 'root',
5491          name: 'site',
5492          title: TRANSLATED_SITE_PROPERTIES[property] || property,
5493          property
5494        });
5495      }
5496  
5497      const dirtyRecordsWithSiteItems = [...dirtyRecordsWithoutSite, ...siteEditsAsEntities];
5498      return {
5499        dirtyEntityRecords: dirtyRecordsWithSiteItems
5500      };
5501    }, []);
5502    const {
5503      editEntityRecord,
5504      saveEditedEntityRecord,
5505      __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits
5506    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
5507    const {
5508      __unstableMarkLastChangeAsPersistent
5509    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
5510    const {
5511      createSuccessNotice,
5512      createErrorNotice
5513    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); // To group entities by type.
5514  
5515    const partitionedSavables = (0,external_lodash_namespaceObject.groupBy)(dirtyEntityRecords, 'name'); // Sort entity groups.
5516  
5517    const {
5518      site: siteSavables,
5519      wp_template: templateSavables,
5520      wp_template_part: templatePartSavables,
5521      ...contentSavables
5522    } = partitionedSavables;
5523    const sortedPartitionedSavables = [siteSavables, templateSavables, templatePartSavables, ...Object.values(contentSavables)].filter(Array.isArray); // Unchecked entities to be ignored by save function.
5524  
5525    const [unselectedEntities, _setUnselectedEntities] = (0,external_wp_element_namespaceObject.useState)([]);
5526  
5527    const setUnselectedEntities = (_ref2, checked) => {
5528      let {
5529        kind,
5530        name,
5531        key,
5532        property
5533      } = _ref2;
5534  
5535      if (checked) {
5536        _setUnselectedEntities(unselectedEntities.filter(elt => elt.kind !== kind || elt.name !== name || elt.key !== key || elt.property !== property));
5537      } else {
5538        _setUnselectedEntities([...unselectedEntities, {
5539          kind,
5540          name,
5541          key,
5542          property
5543        }]);
5544      }
5545    };
5546  
5547    const saveCheckedEntities = () => {
5548      const entitiesToSave = dirtyEntityRecords.filter(_ref3 => {
5549        let {
5550          kind,
5551          name,
5552          key,
5553          property
5554        } = _ref3;
5555        return !(0,external_lodash_namespaceObject.some)(unselectedEntities, elt => elt.kind === kind && elt.name === name && elt.key === key && elt.property === property);
5556      });
5557      close(entitiesToSave);
5558      const siteItemsToSave = [];
5559      const pendingSavedRecords = [];
5560      entitiesToSave.forEach(_ref4 => {
5561        let {
5562          kind,
5563          name,
5564          key,
5565          property
5566        } = _ref4;
5567  
5568        if ('root' === kind && 'site' === name) {
5569          siteItemsToSave.push(property);
5570        } else {
5571          if (PUBLISH_ON_SAVE_ENTITIES.some(typeToPublish => typeToPublish.kind === kind && typeToPublish.name === name)) {
5572            editEntityRecord(kind, name, key, {
5573              status: 'publish'
5574            });
5575          }
5576  
5577          pendingSavedRecords.push(saveEditedEntityRecord(kind, name, key));
5578        }
5579      });
5580  
5581      if (siteItemsToSave.length) {
5582        pendingSavedRecords.push(saveSpecifiedEntityEdits('root', 'site', undefined, siteItemsToSave));
5583      }
5584  
5585      __unstableMarkLastChangeAsPersistent();
5586  
5587      Promise.all(pendingSavedRecords).then(values => {
5588        if (values.some(value => typeof value === 'undefined')) {
5589          createErrorNotice((0,external_wp_i18n_namespaceObject.__)('Saving failed.'));
5590        } else {
5591          createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Site updated.'), {
5592            type: 'snackbar'
5593          });
5594        }
5595      }).catch(error => createErrorNotice(`${(0,external_wp_i18n_namespaceObject.__)('Saving failed.')} $error}`));
5596    }; // Explicitly define this with no argument passed.  Using `close` on
5597    // its own will use the event object in place of the expected saved entities.
5598  
5599  
5600    const dismissPanel = (0,external_wp_element_namespaceObject.useCallback)(() => close(), [close]);
5601    const [saveDialogRef, saveDialogProps] = (0,external_wp_compose_namespaceObject.__experimentalUseDialog)({
5602      onClose: () => dismissPanel()
5603    });
5604    return (0,external_wp_element_namespaceObject.createElement)("div", _extends({
5605      ref: saveDialogRef
5606    }, saveDialogProps, {
5607      className: "entities-saved-states__panel"
5608    }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, {
5609      className: "entities-saved-states__panel-header",
5610      gap: 2
5611    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, {
5612      isBlock: true,
5613      as: external_wp_components_namespaceObject.Button,
5614      ref: saveButtonRef,
5615      variant: "primary",
5616      disabled: dirtyEntityRecords.length - unselectedEntities.length === 0,
5617      onClick: saveCheckedEntities,
5618      className: "editor-entities-saved-states__save-button"
5619    }, (0,external_wp_i18n_namespaceObject.__)('Save')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, {
5620      isBlock: true,
5621      as: external_wp_components_namespaceObject.Button,
5622      variant: "secondary",
5623      onClick: dismissPanel
5624    }, (0,external_wp_i18n_namespaceObject.__)('Cancel'))), (0,external_wp_element_namespaceObject.createElement)("div", {
5625      className: "entities-saved-states__text-prompt"
5626    }, (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_i18n_namespaceObject.__)('Are you ready to save?')), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('The following changes have been made to your site, templates, and content.'))), sortedPartitionedSavables.map(list => {
5627      return (0,external_wp_element_namespaceObject.createElement)(EntityTypeList, {
5628        key: list[0].name,
5629        list: list,
5630        closePanel: dismissPanel,
5631        unselectedEntities: unselectedEntities,
5632        setUnselectedEntities: setUnselectedEntities
5633      });
5634    }));
5635  }
5636  
5637  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/error-boundary/index.js
5638  
5639  
5640  /**
5641   * WordPress dependencies
5642   */
5643  
5644  
5645  
5646  
5647  
5648  
5649  /**
5650   * Internal dependencies
5651   */
5652  
5653  
5654  
5655  function CopyButton(_ref) {
5656    let {
5657      text,
5658      children
5659    } = _ref;
5660    const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(text);
5661    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
5662      variant: "secondary",
5663      ref: ref
5664    }, children);
5665  }
5666  
5667  class ErrorBoundary extends external_wp_element_namespaceObject.Component {
5668    constructor() {
5669      super(...arguments);
5670      this.reboot = this.reboot.bind(this);
5671      this.getContent = this.getContent.bind(this);
5672      this.state = {
5673        error: null
5674      };
5675    }
5676  
5677    componentDidCatch(error) {
5678      this.setState({
5679        error
5680      });
5681    }
5682  
5683    reboot() {
5684      this.props.onError();
5685    }
5686  
5687    getContent() {
5688      try {
5689        // While `select` in a component is generally discouraged, it is
5690        // used here because it (a) reduces the chance of data loss in the
5691        // case of additional errors by performing a direct retrieval and
5692        // (b) avoids the performance cost associated with unnecessary
5693        // content serialization throughout the lifetime of a non-erroring
5694        // application.
5695        return (0,external_wp_data_namespaceObject.select)(store_store).getEditedPostContent();
5696      } catch (error) {}
5697    }
5698  
5699    render() {
5700      const {
5701        error
5702      } = this.state;
5703  
5704      if (!error) {
5705        return this.props.children;
5706      }
5707  
5708      return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.Warning, {
5709        className: "editor-error-boundary",
5710        actions: [(0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
5711          key: "recovery",
5712          onClick: this.reboot,
5713          variant: "secondary"
5714        }, (0,external_wp_i18n_namespaceObject.__)('Attempt Recovery')), (0,external_wp_element_namespaceObject.createElement)(CopyButton, {
5715          key: "copy-post",
5716          text: this.getContent
5717        }, (0,external_wp_i18n_namespaceObject.__)('Copy Post Text')), (0,external_wp_element_namespaceObject.createElement)(CopyButton, {
5718          key: "copy-error",
5719          text: error.stack
5720        }, (0,external_wp_i18n_namespaceObject.__)('Copy Error'))]
5721      }, (0,external_wp_i18n_namespaceObject.__)('The editor has encountered an unexpected error.'));
5722    }
5723  
5724  }
5725  
5726  /* harmony default export */ var error_boundary = (ErrorBoundary);
5727  
5728  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/local-autosave-monitor/index.js
5729  
5730  
5731  /**
5732   * External dependencies
5733   */
5734  
5735  /**
5736   * WordPress dependencies
5737   */
5738  
5739  
5740  
5741  
5742  
5743  
5744  
5745  /**
5746   * Internal dependencies
5747   */
5748  
5749  
5750  
5751  
5752  const requestIdleCallback = window.requestIdleCallback ? window.requestIdleCallback : window.requestAnimationFrame;
5753  /**
5754   * Function which returns true if the current environment supports browser
5755   * sessionStorage, or false otherwise. The result of this function is cached and
5756   * reused in subsequent invocations.
5757   */
5758  
5759  const hasSessionStorageSupport = (0,external_lodash_namespaceObject.once)(() => {
5760    try {
5761      // Private Browsing in Safari 10 and earlier will throw an error when
5762      // attempting to set into sessionStorage. The test here is intentional in
5763      // causing a thrown error as condition bailing from local autosave.
5764      window.sessionStorage.setItem('__wpEditorTestSessionStorage', '');
5765      window.sessionStorage.removeItem('__wpEditorTestSessionStorage');
5766      return true;
5767    } catch (error) {
5768      return false;
5769    }
5770  });
5771  /**
5772   * Custom hook which manages the creation of a notice prompting the user to
5773   * restore a local autosave, if one exists.
5774   */
5775  
5776  function useAutosaveNotice() {
5777    const {
5778      postId,
5779      isEditedPostNew,
5780      hasRemoteAutosave
5781    } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
5782      postId: select(store_store).getCurrentPostId(),
5783      isEditedPostNew: select(store_store).isEditedPostNew(),
5784      hasRemoteAutosave: !!select(store_store).getEditorSettings().autosave
5785    }), []);
5786    const {
5787      getEditedPostAttribute
5788    } = (0,external_wp_data_namespaceObject.useSelect)(store_store);
5789    const {
5790      createWarningNotice,
5791      removeNotice
5792    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
5793    const {
5794      editPost,
5795      resetEditorBlocks
5796    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
5797    (0,external_wp_element_namespaceObject.useEffect)(() => {
5798      let localAutosave = localAutosaveGet(postId, isEditedPostNew);
5799  
5800      if (!localAutosave) {
5801        return;
5802      }
5803  
5804      try {
5805        localAutosave = JSON.parse(localAutosave);
5806      } catch (error) {
5807        // Not usable if it can't be parsed.
5808        return;
5809      }
5810  
5811      const {
5812        post_title: title,
5813        content,
5814        excerpt
5815      } = localAutosave;
5816      const edits = {
5817        title,
5818        content,
5819        excerpt
5820      };
5821      {
5822        // Only display a notice if there is a difference between what has been
5823        // saved and that which is stored in sessionStorage.
5824        const hasDifference = Object.keys(edits).some(key => {
5825          return edits[key] !== getEditedPostAttribute(key);
5826        });
5827  
5828        if (!hasDifference) {
5829          // If there is no difference, it can be safely ejected from storage.
5830          localAutosaveClear(postId, isEditedPostNew);
5831          return;
5832        }
5833      }
5834  
5835      if (hasRemoteAutosave) {
5836        return;
5837      }
5838  
5839      const noticeId = (0,external_lodash_namespaceObject.uniqueId)('wpEditorAutosaveRestore');
5840      createWarningNotice((0,external_wp_i18n_namespaceObject.__)('The backup of this post in your browser is different from the version below.'), {
5841        id: noticeId,
5842        actions: [{
5843          label: (0,external_wp_i18n_namespaceObject.__)('Restore the backup'),
5844  
5845          onClick() {
5846            editPost((0,external_lodash_namespaceObject.omit)(edits, ['content']));
5847            resetEditorBlocks((0,external_wp_blocks_namespaceObject.parse)(edits.content));
5848            removeNotice(noticeId);
5849          }
5850  
5851        }]
5852      });
5853    }, [isEditedPostNew, postId]);
5854  }
5855  /**
5856   * Custom hook which ejects a local autosave after a successful save occurs.
5857   */
5858  
5859  
5860  function useAutosavePurge() {
5861    const {
5862      postId,
5863      isEditedPostNew,
5864      isDirty,
5865      isAutosaving,
5866      didError
5867    } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
5868      postId: select(store_store).getCurrentPostId(),
5869      isEditedPostNew: select(store_store).isEditedPostNew(),
5870      isDirty: select(store_store).isEditedPostDirty(),
5871      isAutosaving: select(store_store).isAutosavingPost(),
5872      didError: select(store_store).didPostSaveRequestFail()
5873    }), []);
5874    const lastIsDirty = (0,external_wp_element_namespaceObject.useRef)(isDirty);
5875    const lastIsAutosaving = (0,external_wp_element_namespaceObject.useRef)(isAutosaving);
5876    (0,external_wp_element_namespaceObject.useEffect)(() => {
5877      if (!didError && (lastIsAutosaving.current && !isAutosaving || lastIsDirty.current && !isDirty)) {
5878        localAutosaveClear(postId, isEditedPostNew);
5879      }
5880  
5881      lastIsDirty.current = isDirty;
5882      lastIsAutosaving.current = isAutosaving;
5883    }, [isDirty, isAutosaving, didError]); // Once the isEditedPostNew changes from true to false, let's clear the auto-draft autosave.
5884  
5885    const wasEditedPostNew = (0,external_wp_compose_namespaceObject.usePrevious)(isEditedPostNew);
5886    const prevPostId = (0,external_wp_compose_namespaceObject.usePrevious)(postId);
5887    (0,external_wp_element_namespaceObject.useEffect)(() => {
5888      if (prevPostId === postId && wasEditedPostNew && !isEditedPostNew) {
5889        localAutosaveClear(postId, true);
5890      }
5891    }, [isEditedPostNew, postId]);
5892  }
5893  
5894  function LocalAutosaveMonitor() {
5895    const {
5896      autosave
5897    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
5898    const deferredAutosave = (0,external_wp_element_namespaceObject.useCallback)(() => {
5899      requestIdleCallback(() => autosave({
5900        local: true
5901      }));
5902    }, []);
5903    useAutosaveNotice();
5904    useAutosavePurge();
5905    const {
5906      localAutosaveInterval
5907    } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
5908      localAutosaveInterval: select(store_store).getEditorSettings().localAutosaveInterval
5909    }), []);
5910    return (0,external_wp_element_namespaceObject.createElement)(autosave_monitor, {
5911      interval: localAutosaveInterval,
5912      autosave: deferredAutosave
5913    });
5914  }
5915  
5916  /* harmony default export */ var local_autosave_monitor = ((0,external_wp_compose_namespaceObject.ifCondition)(hasSessionStorageSupport)(LocalAutosaveMonitor));
5917  
5918  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/page-attributes/check.js
5919  /**
5920   * External dependencies
5921   */
5922  
5923  /**
5924   * WordPress dependencies
5925   */
5926  
5927  
5928  
5929  /**
5930   * Internal dependencies
5931   */
5932  
5933  
5934  function PageAttributesCheck(_ref) {
5935    let {
5936      children
5937    } = _ref;
5938    const postType = (0,external_wp_data_namespaceObject.useSelect)(select => {
5939      const {
5940        getEditedPostAttribute
5941      } = select(store_store);
5942      const {
5943        getPostType
5944      } = select(external_wp_coreData_namespaceObject.store);
5945      return getPostType(getEditedPostAttribute('type'));
5946    }, []);
5947    const supportsPageAttributes = (0,external_lodash_namespaceObject.get)(postType, ['supports', 'page-attributes'], false); // Only render fields if post type supports page attributes or available templates exist.
5948  
5949    if (!supportsPageAttributes) {
5950      return null;
5951    }
5952  
5953    return children;
5954  }
5955  /* harmony default export */ var page_attributes_check = (PageAttributesCheck);
5956  
5957  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-type-support-check/index.js
5958  /**
5959   * External dependencies
5960   */
5961  
5962  /**
5963   * WordPress dependencies
5964   */
5965  
5966  
5967  
5968  /**
5969   * Internal dependencies
5970   */
5971  
5972  
5973  /**
5974   * A component which renders its own children only if the current editor post
5975   * type supports one of the given `supportKeys` prop.
5976   *
5977   * @param {Object}            props             Props.
5978   * @param {string}            [props.postType]  Current post type.
5979   * @param {WPElement}         props.children    Children to be rendered if post
5980   *                                              type supports.
5981   * @param {(string|string[])} props.supportKeys String or string array of keys
5982   *                                              to test.
5983   *
5984   * @return {WPComponent} The component to be rendered.
5985   */
5986  
5987  function PostTypeSupportCheck(_ref) {
5988    let {
5989      postType,
5990      children,
5991      supportKeys
5992    } = _ref;
5993    let isSupported = true;
5994  
5995    if (postType) {
5996      isSupported = (0,external_lodash_namespaceObject.some)((0,external_lodash_namespaceObject.castArray)(supportKeys), key => !!postType.supports[key]);
5997    }
5998  
5999    if (!isSupported) {
6000      return null;
6001    }
6002  
6003    return children;
6004  }
6005  /* harmony default export */ var post_type_support_check = ((0,external_wp_data_namespaceObject.withSelect)(select => {
6006    const {
6007      getEditedPostAttribute
6008    } = select(store_store);
6009    const {
6010      getPostType
6011    } = select(external_wp_coreData_namespaceObject.store);
6012    return {
6013      postType: getPostType(getEditedPostAttribute('type'))
6014    };
6015  })(PostTypeSupportCheck));
6016  
6017  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/page-attributes/order.js
6018  
6019  
6020  /**
6021   * External dependencies
6022   */
6023  
6024  /**
6025   * WordPress dependencies
6026   */
6027  
6028  
6029  
6030  
6031  
6032  
6033  /**
6034   * Internal dependencies
6035   */
6036  
6037  
6038  
6039  const PageAttributesOrder = _ref => {
6040    let {
6041      onUpdateOrder,
6042      order = 0
6043    } = _ref;
6044    const [orderInput, setOrderInput] = (0,external_wp_element_namespaceObject.useState)(null);
6045  
6046    const setUpdatedOrder = value => {
6047      setOrderInput(value);
6048      const newOrder = Number(value);
6049  
6050      if (Number.isInteger(newOrder) && (0,external_lodash_namespaceObject.invoke)(value, ['trim']) !== '') {
6051        onUpdateOrder(Number(value));
6052      }
6053    };
6054  
6055    const value = orderInput === null ? order : orderInput;
6056    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, {
6057      className: "editor-page-attributes__order",
6058      type: "number",
6059      label: (0,external_wp_i18n_namespaceObject.__)('Order'),
6060      value: value,
6061      onChange: setUpdatedOrder,
6062      size: 6,
6063      onBlur: () => {
6064        setOrderInput(null);
6065      }
6066    });
6067  };
6068  
6069  function PageAttributesOrderWithChecks(props) {
6070    return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, {
6071      supportKeys: "page-attributes"
6072    }, (0,external_wp_element_namespaceObject.createElement)(PageAttributesOrder, props));
6073  }
6074  
6075  /* harmony default export */ var order = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
6076    return {
6077      order: select(store_store).getEditedPostAttribute('menu_order')
6078    };
6079  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
6080    onUpdateOrder(order) {
6081      dispatch(store_store).editPost({
6082        menu_order: order
6083      });
6084    }
6085  
6086  }))])(PageAttributesOrderWithChecks));
6087  
6088  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/terms.js
6089  /**
6090   * External dependencies
6091   */
6092  
6093  /**
6094   * Returns terms in a tree form.
6095   *
6096   * @param {Array} flatTerms Array of terms in flat format.
6097   *
6098   * @return {Array} Array of terms in tree format.
6099   */
6100  
6101  function buildTermsTree(flatTerms) {
6102    const flatTermsWithParentAndChildren = flatTerms.map(term => {
6103      return {
6104        children: [],
6105        parent: null,
6106        ...term
6107      };
6108    });
6109    const termsByParent = (0,external_lodash_namespaceObject.groupBy)(flatTermsWithParentAndChildren, 'parent');
6110  
6111    if (termsByParent.null && termsByParent.null.length) {
6112      return flatTermsWithParentAndChildren;
6113    }
6114  
6115    const fillWithChildren = terms => {
6116      return terms.map(term => {
6117        const children = termsByParent[term.id];
6118        return { ...term,
6119          children: children && children.length ? fillWithChildren(children) : []
6120        };
6121      });
6122    };
6123  
6124    return fillWithChildren(termsByParent['0'] || []);
6125  } // Lodash unescape function handles &#39; but not &#039; which may be return in some API requests.
6126  
6127  const unescapeString = arg => {
6128    return (0,external_lodash_namespaceObject.unescape)(arg.replace('&#039;', "'"));
6129  };
6130  /**
6131   * Returns a term object with name unescaped.
6132   * The unescape of the name property is done using lodash unescape function.
6133   *
6134   * @param {Object} term The term object to unescape.
6135   *
6136   * @return {Object} Term object with name property unescaped.
6137   */
6138  
6139  const unescapeTerm = term => {
6140    return { ...term,
6141      name: unescapeString(term.name)
6142    };
6143  };
6144  /**
6145   * Returns an array of term objects with names unescaped.
6146   * The unescape of each term is performed using the unescapeTerm function.
6147   *
6148   * @param {Object[]} terms Array of term objects to unescape.
6149   *
6150   * @return {Object[]} Array of term objects unescaped.
6151   */
6152  
6153  const unescapeTerms = terms => {
6154    return (0,external_lodash_namespaceObject.map)(terms, unescapeTerm);
6155  };
6156  
6157  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/page-attributes/parent.js
6158  
6159  
6160  /**
6161   * External dependencies
6162   */
6163  
6164  /**
6165   * WordPress dependencies
6166   */
6167  
6168  
6169  
6170  
6171  
6172  
6173  
6174  /**
6175   * Internal dependencies
6176   */
6177  
6178  
6179  
6180  
6181  function getTitle(post) {
6182    var _post$title;
6183  
6184    return post !== null && post !== void 0 && (_post$title = post.title) !== null && _post$title !== void 0 && _post$title.rendered ? (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(post.title.rendered) : `#$post.id} (${(0,external_wp_i18n_namespaceObject.__)('no title')})`;
6185  }
6186  
6187  const getItemPriority = (name, searchValue) => {
6188    const normalizedName = (0,external_lodash_namespaceObject.deburr)(name).toLowerCase();
6189    const normalizedSearch = (0,external_lodash_namespaceObject.deburr)(searchValue).toLowerCase();
6190  
6191    if (normalizedName === normalizedSearch) {
6192      return 0;
6193    }
6194  
6195    if (normalizedName.startsWith(normalizedSearch)) {
6196      return normalizedName.length;
6197    }
6198  
6199    return Infinity;
6200  };
6201  function PageAttributesParent() {
6202    const {
6203      editPost
6204    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
6205    const [fieldValue, setFieldValue] = (0,external_wp_element_namespaceObject.useState)(false);
6206    const {
6207      parentPost,
6208      parentPostId,
6209      items,
6210      postType
6211    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
6212      const {
6213        getPostType,
6214        getEntityRecords,
6215        getEntityRecord
6216      } = select(external_wp_coreData_namespaceObject.store);
6217      const {
6218        getCurrentPostId,
6219        getEditedPostAttribute
6220      } = select(store_store);
6221      const postTypeSlug = getEditedPostAttribute('type');
6222      const pageId = getEditedPostAttribute('parent');
6223      const pType = getPostType(postTypeSlug);
6224      const postId = getCurrentPostId();
6225      const isHierarchical = (0,external_lodash_namespaceObject.get)(pType, ['hierarchical'], false);
6226      const query = {
6227        per_page: 100,
6228        exclude: postId,
6229        parent_exclude: postId,
6230        orderby: 'menu_order',
6231        order: 'asc',
6232        _fields: 'id,title,parent'
6233      }; // Perform a search when the field is changed.
6234  
6235      if (!!fieldValue) {
6236        query.search = fieldValue;
6237      }
6238  
6239      return {
6240        parentPostId: pageId,
6241        parentPost: pageId ? getEntityRecord('postType', postTypeSlug, pageId) : null,
6242        items: isHierarchical ? getEntityRecords('postType', postTypeSlug, query) : [],
6243        postType: pType
6244      };
6245    }, [fieldValue]);
6246    const isHierarchical = (0,external_lodash_namespaceObject.get)(postType, ['hierarchical'], false);
6247    const parentPageLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'parent_item_colon']);
6248    const pageItems = items || [];
6249    const parentOptions = (0,external_wp_element_namespaceObject.useMemo)(() => {
6250      const getOptionsFromTree = function (tree) {
6251        let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
6252        const mappedNodes = tree.map(treeNode => [{
6253          value: treeNode.id,
6254          label: (0,external_lodash_namespaceObject.repeat)('— ', level) + (0,external_lodash_namespaceObject.unescape)(treeNode.name),
6255          rawName: treeNode.name
6256        }, ...getOptionsFromTree(treeNode.children || [], level + 1)]);
6257        const sortedNodes = mappedNodes.sort((_ref, _ref2) => {
6258          let [a] = _ref;
6259          let [b] = _ref2;
6260          const priorityA = getItemPriority(a.rawName, fieldValue);
6261          const priorityB = getItemPriority(b.rawName, fieldValue);
6262          return priorityA >= priorityB ? 1 : -1;
6263        });
6264        return (0,external_lodash_namespaceObject.flatten)(sortedNodes);
6265      };
6266  
6267      let tree = pageItems.map(item => ({
6268        id: item.id,
6269        parent: item.parent,
6270        name: getTitle(item)
6271      })); // Only build a hierarchical tree when not searching.
6272  
6273      if (!fieldValue) {
6274        tree = buildTermsTree(tree);
6275      }
6276  
6277      const opts = getOptionsFromTree(tree); // Ensure the current parent is in the options list.
6278  
6279      const optsHasParent = (0,external_lodash_namespaceObject.find)(opts, item => item.value === parentPostId);
6280  
6281      if (parentPost && !optsHasParent) {
6282        opts.unshift({
6283          value: parentPostId,
6284          label: getTitle(parentPost)
6285        });
6286      }
6287  
6288      return opts;
6289    }, [pageItems, fieldValue]);
6290  
6291    if (!isHierarchical || !parentPageLabel) {
6292      return null;
6293    }
6294    /**
6295     * Handle user input.
6296     *
6297     * @param {string} inputValue The current value of the input field.
6298     */
6299  
6300  
6301    const handleKeydown = inputValue => {
6302      setFieldValue(inputValue);
6303    };
6304    /**
6305     * Handle author selection.
6306     *
6307     * @param {Object} selectedPostId The selected Author.
6308     */
6309  
6310  
6311    const handleChange = selectedPostId => {
6312      editPost({
6313        parent: selectedPostId
6314      });
6315    };
6316  
6317    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ComboboxControl, {
6318      className: "editor-page-attributes__parent",
6319      label: parentPageLabel,
6320      value: parentPostId,
6321      options: parentOptions,
6322      onFilterValueChange: (0,external_lodash_namespaceObject.debounce)(handleKeydown, 300),
6323      onChange: handleChange
6324    });
6325  }
6326  /* harmony default export */ var page_attributes_parent = (PageAttributesParent);
6327  
6328  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-template/index.js
6329  
6330  
6331  /**
6332   * External dependencies
6333   */
6334  
6335  /**
6336   * WordPress dependencies
6337   */
6338  
6339  
6340  
6341  
6342  
6343  /**
6344   * Internal dependencies
6345   */
6346  
6347  
6348  function PostTemplate(_ref) {
6349    let {} = _ref;
6350    const {
6351      availableTemplates,
6352      selectedTemplate,
6353      isViewable
6354    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
6355      var _getPostType$viewable, _getPostType;
6356  
6357      const {
6358        getEditedPostAttribute,
6359        getEditorSettings,
6360        getCurrentPostType
6361      } = select(store_store);
6362      const {
6363        getPostType
6364      } = select(external_wp_coreData_namespaceObject.store);
6365      return {
6366        selectedTemplate: getEditedPostAttribute('template'),
6367        availableTemplates: getEditorSettings().availableTemplates,
6368        isViewable: (_getPostType$viewable = (_getPostType = getPostType(getCurrentPostType())) === null || _getPostType === void 0 ? void 0 : _getPostType.viewable) !== null && _getPostType$viewable !== void 0 ? _getPostType$viewable : false
6369      };
6370    }, []);
6371    const {
6372      editPost
6373    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
6374  
6375    if (!isViewable || (0,external_lodash_namespaceObject.isEmpty)(availableTemplates)) {
6376      return null;
6377    }
6378  
6379    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, {
6380      label: (0,external_wp_i18n_namespaceObject.__)('Template:'),
6381      value: selectedTemplate,
6382      onChange: templateSlug => {
6383        editPost({
6384          template: templateSlug || ''
6385        });
6386      },
6387      options: (0,external_lodash_namespaceObject.map)(availableTemplates, (templateName, templateSlug) => ({
6388        value: templateSlug,
6389        label: templateName
6390      }))
6391    });
6392  }
6393  /* harmony default export */ var post_template = (PostTemplate);
6394  
6395  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/constants.js
6396  const AUTHORS_QUERY = {
6397    who: 'authors',
6398    per_page: 50,
6399    _fields: 'id,name',
6400    context: 'view' // Allows non-admins to perform requests.
6401  
6402  };
6403  
6404  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/combobox.js
6405  
6406  
6407  /**
6408   * External dependencies
6409   */
6410  
6411  /**
6412   * WordPress dependencies
6413   */
6414  
6415  
6416  
6417  
6418  
6419  
6420  
6421  /**
6422   * Internal dependencies
6423   */
6424  
6425  
6426  
6427  
6428  function PostAuthorCombobox() {
6429    const [fieldValue, setFieldValue] = (0,external_wp_element_namespaceObject.useState)();
6430    const {
6431      authorId,
6432      isLoading,
6433      authors,
6434      postAuthor
6435    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
6436      const {
6437        getUser,
6438        getUsers,
6439        isResolving
6440      } = select(external_wp_coreData_namespaceObject.store);
6441      const {
6442        getEditedPostAttribute
6443      } = select(store_store);
6444      const author = getUser(getEditedPostAttribute('author'), {
6445        context: 'view'
6446      });
6447      const query = { ...AUTHORS_QUERY
6448      };
6449  
6450      if (fieldValue) {
6451        query.search = fieldValue;
6452      }
6453  
6454      return {
6455        authorId: getEditedPostAttribute('author'),
6456        postAuthor: author,
6457        authors: getUsers(query),
6458        isLoading: isResolving('core', 'getUsers', [query])
6459      };
6460    }, [fieldValue]);
6461    const {
6462      editPost
6463    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
6464    const authorOptions = (0,external_wp_element_namespaceObject.useMemo)(() => {
6465      const fetchedAuthors = (authors !== null && authors !== void 0 ? authors : []).map(author => {
6466        return {
6467          value: author.id,
6468          label: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(author.name)
6469        };
6470      }); // Ensure the current author is included in the dropdown list.
6471  
6472      const foundAuthor = fetchedAuthors.findIndex(_ref => {
6473        let {
6474          value
6475        } = _ref;
6476        return (postAuthor === null || postAuthor === void 0 ? void 0 : postAuthor.id) === value;
6477      });
6478  
6479      if (foundAuthor < 0 && postAuthor) {
6480        return [{
6481          value: postAuthor.id,
6482          label: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(postAuthor.name)
6483        }, ...fetchedAuthors];
6484      }
6485  
6486      return fetchedAuthors;
6487    }, [authors, postAuthor]);
6488    /**
6489     * Handle author selection.
6490     *
6491     * @param {number} postAuthorId The selected Author.
6492     */
6493  
6494    const handleSelect = postAuthorId => {
6495      if (!postAuthorId) {
6496        return;
6497      }
6498  
6499      editPost({
6500        author: postAuthorId
6501      });
6502    };
6503    /**
6504     * Handle user input.
6505     *
6506     * @param {string} inputValue The current value of the input field.
6507     */
6508  
6509  
6510    const handleKeydown = inputValue => {
6511      setFieldValue(inputValue);
6512    };
6513  
6514    if (!postAuthor) {
6515      return null;
6516    }
6517  
6518    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ComboboxControl, {
6519      label: (0,external_wp_i18n_namespaceObject.__)('Author'),
6520      options: authorOptions,
6521      value: authorId,
6522      onFilterValueChange: (0,external_lodash_namespaceObject.debounce)(handleKeydown, 300),
6523      onChange: handleSelect,
6524      isLoading: isLoading,
6525      allowReset: false
6526    });
6527  }
6528  
6529  /* harmony default export */ var combobox = (PostAuthorCombobox);
6530  
6531  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/select.js
6532  
6533  
6534  /**
6535   * WordPress dependencies
6536   */
6537  
6538  
6539  
6540  
6541  
6542  
6543  /**
6544   * Internal dependencies
6545   */
6546  
6547  
6548  
6549  
6550  function PostAuthorSelect() {
6551    const {
6552      editPost
6553    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
6554    const {
6555      postAuthor,
6556      authors
6557    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
6558      return {
6559        postAuthor: select(store_store).getEditedPostAttribute('author'),
6560        authors: select(external_wp_coreData_namespaceObject.store).getUsers(AUTHORS_QUERY)
6561      };
6562    }, []);
6563    const authorOptions = (0,external_wp_element_namespaceObject.useMemo)(() => {
6564      return (authors !== null && authors !== void 0 ? authors : []).map(author => {
6565        return {
6566          value: author.id,
6567          label: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(author.name)
6568        };
6569      });
6570    }, [authors]);
6571  
6572    const setAuthorId = value => {
6573      const author = Number(value);
6574      editPost({
6575        author
6576      });
6577    };
6578  
6579    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, {
6580      className: "post-author-selector",
6581      label: (0,external_wp_i18n_namespaceObject.__)('Author'),
6582      options: authorOptions,
6583      onChange: setAuthorId,
6584      value: postAuthor
6585    });
6586  }
6587  
6588  /* harmony default export */ var post_author_select = (PostAuthorSelect);
6589  
6590  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/index.js
6591  
6592  
6593  /**
6594   * WordPress dependencies
6595   */
6596  
6597  
6598  /**
6599   * Internal dependencies
6600   */
6601  
6602  
6603  
6604  
6605  const minimumUsersForCombobox = 25;
6606  
6607  function PostAuthor() {
6608    const showCombobox = (0,external_wp_data_namespaceObject.useSelect)(select => {
6609      const authors = select(external_wp_coreData_namespaceObject.store).getUsers(AUTHORS_QUERY);
6610      return (authors === null || authors === void 0 ? void 0 : authors.length) >= minimumUsersForCombobox;
6611    }, []);
6612  
6613    if (showCombobox) {
6614      return (0,external_wp_element_namespaceObject.createElement)(combobox, null);
6615    }
6616  
6617    return (0,external_wp_element_namespaceObject.createElement)(post_author_select, null);
6618  }
6619  
6620  /* harmony default export */ var post_author = (PostAuthor);
6621  
6622  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/check.js
6623  
6624  
6625  /**
6626   * External dependencies
6627   */
6628  
6629  /**
6630   * WordPress dependencies
6631   */
6632  
6633  
6634  
6635  /**
6636   * Internal dependencies
6637   */
6638  
6639  
6640  
6641  
6642  function PostAuthorCheck(_ref) {
6643    let {
6644      children
6645    } = _ref;
6646    const {
6647      hasAssignAuthorAction,
6648      hasAuthors
6649    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
6650      const post = select(store_store).getCurrentPost();
6651      const authors = select(external_wp_coreData_namespaceObject.store).getUsers(AUTHORS_QUERY);
6652      return {
6653        hasAssignAuthorAction: (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-assign-author'], false),
6654        hasAuthors: (authors === null || authors === void 0 ? void 0 : authors.length) >= 1
6655      };
6656    }, []);
6657  
6658    if (!hasAssignAuthorAction || !hasAuthors) {
6659      return null;
6660    }
6661  
6662    return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, {
6663      supportKeys: "author"
6664    }, children);
6665  }
6666  
6667  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-comments/index.js
6668  
6669  
6670  /**
6671   * WordPress dependencies
6672   */
6673  
6674  
6675  
6676  
6677  /**
6678   * Internal dependencies
6679   */
6680  
6681  
6682  
6683  function PostComments(_ref) {
6684    let {
6685      commentStatus = 'open',
6686      ...props
6687    } = _ref;
6688  
6689    const onToggleComments = () => props.editPost({
6690      comment_status: commentStatus === 'open' ? 'closed' : 'open'
6691    });
6692  
6693    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
6694      label: (0,external_wp_i18n_namespaceObject.__)('Allow comments'),
6695      checked: commentStatus === 'open',
6696      onChange: onToggleComments
6697    });
6698  }
6699  
6700  /* harmony default export */ var post_comments = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
6701    return {
6702      commentStatus: select(store_store).getEditedPostAttribute('comment_status')
6703    };
6704  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
6705    editPost: dispatch(store_store).editPost
6706  }))])(PostComments));
6707  
6708  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-excerpt/index.js
6709  
6710  
6711  /**
6712   * WordPress dependencies
6713   */
6714  
6715  
6716  
6717  
6718  /**
6719   * Internal dependencies
6720   */
6721  
6722  
6723  
6724  function PostExcerpt(_ref) {
6725    let {
6726      excerpt,
6727      onUpdateExcerpt
6728    } = _ref;
6729    return (0,external_wp_element_namespaceObject.createElement)("div", {
6730      className: "editor-post-excerpt"
6731    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextareaControl, {
6732      label: (0,external_wp_i18n_namespaceObject.__)('Write an excerpt (optional)'),
6733      className: "editor-post-excerpt__textarea",
6734      onChange: value => onUpdateExcerpt(value),
6735      value: excerpt
6736    }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, {
6737      href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/support/article/settings-sidebar/#excerpt')
6738    }, (0,external_wp_i18n_namespaceObject.__)('Learn more about manual excerpts')));
6739  }
6740  
6741  /* harmony default export */ var post_excerpt = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
6742    return {
6743      excerpt: select(store_store).getEditedPostAttribute('excerpt')
6744    };
6745  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
6746    onUpdateExcerpt(excerpt) {
6747      dispatch(store_store).editPost({
6748        excerpt
6749      });
6750    }
6751  
6752  }))])(PostExcerpt));
6753  
6754  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-excerpt/check.js
6755  
6756  
6757  
6758  /**
6759   * Internal dependencies
6760   */
6761  
6762  
6763  function PostExcerptCheck(props) {
6764    return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, _extends({}, props, {
6765      supportKeys: "excerpt"
6766    }));
6767  }
6768  
6769  /* harmony default export */ var post_excerpt_check = (PostExcerptCheck);
6770  
6771  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/theme-support-check/index.js
6772  /**
6773   * External dependencies
6774   */
6775  
6776  /**
6777   * WordPress dependencies
6778   */
6779  
6780  
6781  
6782  /**
6783   * Internal dependencies
6784   */
6785  
6786  
6787  function ThemeSupportCheck(_ref) {
6788    let {
6789      themeSupports,
6790      children,
6791      postType,
6792      supportKeys
6793    } = _ref;
6794    const isSupported = (0,external_lodash_namespaceObject.some)((0,external_lodash_namespaceObject.castArray)(supportKeys), key => {
6795      const supported = (0,external_lodash_namespaceObject.get)(themeSupports, [key], false); // 'post-thumbnails' can be boolean or an array of post types.
6796      // In the latter case, we need to verify `postType` exists
6797      // within `supported`. If `postType` isn't passed, then the check
6798      // should fail.
6799  
6800      if ('post-thumbnails' === key && (0,external_lodash_namespaceObject.isArray)(supported)) {
6801        return (0,external_lodash_namespaceObject.includes)(supported, postType);
6802      }
6803  
6804      return supported;
6805    });
6806  
6807    if (!isSupported) {
6808      return null;
6809    }
6810  
6811    return children;
6812  }
6813  /* harmony default export */ var theme_support_check = ((0,external_wp_data_namespaceObject.withSelect)(select => {
6814    const {
6815      getThemeSupports
6816    } = select(external_wp_coreData_namespaceObject.store);
6817    const {
6818      getEditedPostAttribute
6819    } = select(store_store);
6820    return {
6821      postType: getEditedPostAttribute('type'),
6822      themeSupports: getThemeSupports()
6823    };
6824  })(ThemeSupportCheck));
6825  
6826  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-featured-image/check.js
6827  
6828  
6829  
6830  /**
6831   * Internal dependencies
6832   */
6833  
6834  
6835  
6836  function PostFeaturedImageCheck(props) {
6837    return (0,external_wp_element_namespaceObject.createElement)(theme_support_check, {
6838      supportKeys: "post-thumbnails"
6839    }, (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, _extends({}, props, {
6840      supportKeys: "thumbnail"
6841    })));
6842  }
6843  
6844  /* harmony default export */ var post_featured_image_check = (PostFeaturedImageCheck);
6845  
6846  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-featured-image/index.js
6847  
6848  
6849  /**
6850   * External dependencies
6851   */
6852  
6853  /**
6854   * WordPress dependencies
6855   */
6856  
6857  
6858  
6859  
6860  
6861  
6862  
6863  
6864  /**
6865   * Internal dependencies
6866   */
6867  
6868  
6869  
6870  const ALLOWED_MEDIA_TYPES = ['image']; // Used when labels from post type were not yet loaded or when they are not present.
6871  
6872  const DEFAULT_FEATURE_IMAGE_LABEL = (0,external_wp_i18n_namespaceObject.__)('Featured image');
6873  
6874  const DEFAULT_SET_FEATURE_IMAGE_LABEL = (0,external_wp_i18n_namespaceObject.__)('Set featured image');
6875  
6876  const DEFAULT_REMOVE_FEATURE_IMAGE_LABEL = (0,external_wp_i18n_namespaceObject.__)('Remove image');
6877  
6878  function PostFeaturedImage(_ref) {
6879    var _media$media_details$, _media$media_details$2;
6880  
6881    let {
6882      currentPostId,
6883      featuredImageId,
6884      onUpdateImage,
6885      onDropImage,
6886      onRemoveImage,
6887      media,
6888      postType,
6889      noticeUI
6890    } = _ref;
6891    const postLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels'], {});
6892    const instructions = (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('To edit the featured image, you need permission to upload media.'));
6893    let mediaWidth, mediaHeight, mediaSourceUrl;
6894  
6895    if (media) {
6896      const mediaSize = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.PostFeaturedImage.imageSize', 'post-thumbnail', media.id, currentPostId);
6897  
6898      if ((0,external_lodash_namespaceObject.has)(media, ['media_details', 'sizes', mediaSize])) {
6899        // Use mediaSize when available.
6900        mediaWidth = media.media_details.sizes[mediaSize].width;
6901        mediaHeight = media.media_details.sizes[mediaSize].height;
6902        mediaSourceUrl = media.media_details.sizes[mediaSize].source_url;
6903      } else {
6904        // Get fallbackMediaSize if mediaSize is not available.
6905        const fallbackMediaSize = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.PostFeaturedImage.imageSize', 'thumbnail', media.id, currentPostId);
6906  
6907        if ((0,external_lodash_namespaceObject.has)(media, ['media_details', 'sizes', fallbackMediaSize])) {
6908          // Use fallbackMediaSize when mediaSize is not available.
6909          mediaWidth = media.media_details.sizes[fallbackMediaSize].width;
6910          mediaHeight = media.media_details.sizes[fallbackMediaSize].height;
6911          mediaSourceUrl = media.media_details.sizes[fallbackMediaSize].source_url;
6912        } else {
6913          // Use full image size when mediaFallbackSize and mediaSize are not available.
6914          mediaWidth = media.media_details.width;
6915          mediaHeight = media.media_details.height;
6916          mediaSourceUrl = media.source_url;
6917        }
6918      }
6919    }
6920  
6921    return (0,external_wp_element_namespaceObject.createElement)(post_featured_image_check, null, noticeUI, (0,external_wp_element_namespaceObject.createElement)("div", {
6922      className: "editor-post-featured-image"
6923    }, media && (0,external_wp_element_namespaceObject.createElement)("div", {
6924      id: `editor-post-featured-image-$featuredImageId}-describedby`,
6925      className: "hidden"
6926    }, media.alt_text && (0,external_wp_i18n_namespaceObject.sprintf)( // Translators: %s: The selected image alt text.
6927    (0,external_wp_i18n_namespaceObject.__)('Current image: %s'), media.alt_text), !media.alt_text && (0,external_wp_i18n_namespaceObject.sprintf)( // Translators: %s: The selected image filename.
6928    (0,external_wp_i18n_namespaceObject.__)('The current image has no alternative text. The file name is: %s'), ((_media$media_details$ = media.media_details.sizes) === null || _media$media_details$ === void 0 ? void 0 : (_media$media_details$2 = _media$media_details$.full) === null || _media$media_details$2 === void 0 ? void 0 : _media$media_details$2.file) || media.slug)), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUploadCheck, {
6929      fallback: instructions
6930    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUpload, {
6931      title: postLabel.featured_image || DEFAULT_FEATURE_IMAGE_LABEL,
6932      onSelect: onUpdateImage,
6933      unstableFeaturedImageFlow: true,
6934      allowedTypes: ALLOWED_MEDIA_TYPES,
6935      modalClass: "editor-post-featured-image__media-modal",
6936      render: _ref2 => {
6937        let {
6938          open
6939        } = _ref2;
6940        return (0,external_wp_element_namespaceObject.createElement)("div", {
6941          className: "editor-post-featured-image__container"
6942        }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
6943          className: !featuredImageId ? 'editor-post-featured-image__toggle' : 'editor-post-featured-image__preview',
6944          onClick: open,
6945          "aria-label": !featuredImageId ? null : (0,external_wp_i18n_namespaceObject.__)('Edit or update the image'),
6946          "aria-describedby": !featuredImageId ? null : `editor-post-featured-image-$featuredImageId}-describedby`
6947        }, !!featuredImageId && media && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ResponsiveWrapper, {
6948          naturalWidth: mediaWidth,
6949          naturalHeight: mediaHeight,
6950          isInline: true
6951        }, (0,external_wp_element_namespaceObject.createElement)("img", {
6952          src: mediaSourceUrl,
6953          alt: ""
6954        })), !!featuredImageId && !media && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null), !featuredImageId && (postLabel.set_featured_image || DEFAULT_SET_FEATURE_IMAGE_LABEL)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DropZone, {
6955          onFilesDrop: onDropImage
6956        }));
6957      },
6958      value: featuredImageId
6959    })), !!featuredImageId && media && !media.isLoading && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUploadCheck, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUpload, {
6960      title: postLabel.featured_image || DEFAULT_FEATURE_IMAGE_LABEL,
6961      onSelect: onUpdateImage,
6962      unstableFeaturedImageFlow: true,
6963      allowedTypes: ALLOWED_MEDIA_TYPES,
6964      modalClass: "editor-post-featured-image__media-modal",
6965      render: _ref3 => {
6966        let {
6967          open
6968        } = _ref3;
6969        return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
6970          onClick: open,
6971          variant: "secondary"
6972        }, (0,external_wp_i18n_namespaceObject.__)('Replace Image'));
6973      }
6974    })), !!featuredImageId && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUploadCheck, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
6975      onClick: onRemoveImage,
6976      variant: "link",
6977      isDestructive: true
6978    }, postLabel.remove_featured_image || DEFAULT_REMOVE_FEATURE_IMAGE_LABEL))));
6979  }
6980  
6981  const applyWithSelect = (0,external_wp_data_namespaceObject.withSelect)(select => {
6982    const {
6983      getMedia,
6984      getPostType
6985    } = select(external_wp_coreData_namespaceObject.store);
6986    const {
6987      getCurrentPostId,
6988      getEditedPostAttribute
6989    } = select(store_store);
6990    const featuredImageId = getEditedPostAttribute('featured_media');
6991    return {
6992      media: featuredImageId ? getMedia(featuredImageId, {
6993        context: 'view'
6994      }) : null,
6995      currentPostId: getCurrentPostId(),
6996      postType: getPostType(getEditedPostAttribute('type')),
6997      featuredImageId
6998    };
6999  });
7000  const applyWithDispatch = (0,external_wp_data_namespaceObject.withDispatch)((dispatch, _ref4, _ref5) => {
7001    let {
7002      noticeOperations
7003    } = _ref4;
7004    let {
7005      select
7006    } = _ref5;
7007    const {
7008      editPost
7009    } = dispatch(store_store);
7010    return {
7011      onUpdateImage(image) {
7012        editPost({
7013          featured_media: image.id
7014        });
7015      },
7016  
7017      onDropImage(filesList) {
7018        select(external_wp_blockEditor_namespaceObject.store).getSettings().mediaUpload({
7019          allowedTypes: ['image'],
7020          filesList,
7021  
7022          onFileChange(_ref6) {
7023            let [image] = _ref6;
7024            editPost({
7025              featured_media: image.id
7026            });
7027          },
7028  
7029          onError(message) {
7030            noticeOperations.removeAllNotices();
7031            noticeOperations.createErrorNotice(message);
7032          }
7033  
7034        });
7035      },
7036  
7037      onRemoveImage() {
7038        editPost({
7039          featured_media: 0
7040        });
7041      }
7042  
7043    };
7044  });
7045  /* harmony default export */ var post_featured_image = ((0,external_wp_compose_namespaceObject.compose)(external_wp_components_namespaceObject.withNotices, applyWithSelect, applyWithDispatch, (0,external_wp_components_namespaceObject.withFilters)('editor.PostFeaturedImage'))(PostFeaturedImage));
7046  
7047  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-format/check.js
7048  
7049  
7050  
7051  /**
7052   * WordPress dependencies
7053   */
7054  
7055  /**
7056   * Internal dependencies
7057   */
7058  
7059  
7060  
7061  
7062  function PostFormatCheck(_ref) {
7063    let {
7064      disablePostFormats,
7065      ...props
7066    } = _ref;
7067    return !disablePostFormats && (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, _extends({}, props, {
7068      supportKeys: "post-formats"
7069    }));
7070  }
7071  
7072  /* harmony default export */ var post_format_check = ((0,external_wp_data_namespaceObject.withSelect)(select => {
7073    const editorSettings = select(store_store).getEditorSettings();
7074    return {
7075      disablePostFormats: editorSettings.disablePostFormats
7076    };
7077  })(PostFormatCheck));
7078  
7079  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-format/index.js
7080  
7081  
7082  /**
7083   * External dependencies
7084   */
7085  
7086  /**
7087   * WordPress dependencies
7088   */
7089  
7090  
7091  
7092  
7093  
7094  
7095  /**
7096   * Internal dependencies
7097   */
7098  
7099  
7100   // All WP post formats, sorted alphabetically by translated name.
7101  
7102  const POST_FORMATS = [{
7103    id: 'aside',
7104    caption: (0,external_wp_i18n_namespaceObject.__)('Aside')
7105  }, {
7106    id: 'audio',
7107    caption: (0,external_wp_i18n_namespaceObject.__)('Audio')
7108  }, {
7109    id: 'chat',
7110    caption: (0,external_wp_i18n_namespaceObject.__)('Chat')
7111  }, {
7112    id: 'gallery',
7113    caption: (0,external_wp_i18n_namespaceObject.__)('Gallery')
7114  }, {
7115    id: 'image',
7116    caption: (0,external_wp_i18n_namespaceObject.__)('Image')
7117  }, {
7118    id: 'link',
7119    caption: (0,external_wp_i18n_namespaceObject.__)('Link')
7120  }, {
7121    id: 'quote',
7122    caption: (0,external_wp_i18n_namespaceObject.__)('Quote')
7123  }, {
7124    id: 'standard',
7125    caption: (0,external_wp_i18n_namespaceObject.__)('Standard')
7126  }, {
7127    id: 'status',
7128    caption: (0,external_wp_i18n_namespaceObject.__)('Status')
7129  }, {
7130    id: 'video',
7131    caption: (0,external_wp_i18n_namespaceObject.__)('Video')
7132  }].sort((a, b) => {
7133    const normalizedA = a.caption.toUpperCase();
7134    const normalizedB = b.caption.toUpperCase();
7135  
7136    if (normalizedA < normalizedB) {
7137      return -1;
7138    }
7139  
7140    if (normalizedA > normalizedB) {
7141      return 1;
7142    }
7143  
7144    return 0;
7145  });
7146  function PostFormat() {
7147    const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostFormat);
7148    const postFormatSelectorId = `post-format-selector-$instanceId}`;
7149    const {
7150      postFormat,
7151      suggestedFormat,
7152      supportedFormats
7153    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
7154      const {
7155        getEditedPostAttribute,
7156        getSuggestedPostFormat
7157      } = select(store_store);
7158  
7159      const _postFormat = getEditedPostAttribute('format');
7160  
7161      const themeSupports = select(external_wp_coreData_namespaceObject.store).getThemeSupports();
7162      return {
7163        postFormat: _postFormat !== null && _postFormat !== void 0 ? _postFormat : 'standard',
7164        suggestedFormat: getSuggestedPostFormat(),
7165        supportedFormats: themeSupports.formats
7166      };
7167    }, []);
7168    const formats = POST_FORMATS.filter(format => {
7169      // Ensure current format is always in the set.
7170      // The current format may not be a format supported by the theme.
7171      return (0,external_lodash_namespaceObject.includes)(supportedFormats, format.id) || postFormat === format.id;
7172    });
7173    const suggestion = (0,external_lodash_namespaceObject.find)(formats, format => format.id === suggestedFormat);
7174    const {
7175      editPost
7176    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
7177  
7178    const onUpdatePostFormat = format => editPost({
7179      format
7180    });
7181  
7182    return (0,external_wp_element_namespaceObject.createElement)(post_format_check, null, (0,external_wp_element_namespaceObject.createElement)("div", {
7183      className: "editor-post-format"
7184    }, (0,external_wp_element_namespaceObject.createElement)("div", {
7185      className: "editor-post-format__content"
7186    }, (0,external_wp_element_namespaceObject.createElement)("label", {
7187      htmlFor: postFormatSelectorId
7188    }, (0,external_wp_i18n_namespaceObject.__)('Post Format')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, {
7189      value: postFormat,
7190      onChange: format => onUpdatePostFormat(format),
7191      id: postFormatSelectorId,
7192      options: formats.map(format => ({
7193        label: format.caption,
7194        value: format.id
7195      }))
7196    })), suggestion && suggestion.id !== postFormat && (0,external_wp_element_namespaceObject.createElement)("div", {
7197      className: "editor-post-format__suggestion"
7198    }, (0,external_wp_i18n_namespaceObject.__)('Suggestion:'), ' ', (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
7199      variant: "link",
7200      onClick: () => onUpdatePostFormat(suggestion.id)
7201    }, (0,external_wp_i18n_namespaceObject.sprintf)(
7202    /* translators: %s: post format */
7203    (0,external_wp_i18n_namespaceObject.__)('Apply format: %s'), suggestion.caption)))));
7204  }
7205  
7206  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/backup.js
7207  
7208  
7209  /**
7210   * WordPress dependencies
7211   */
7212  
7213  const backup = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
7214    xmlns: "http://www.w3.org/2000/svg",
7215    viewBox: "0 0 24 24"
7216  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
7217    d: "M5.5 12h1.75l-2.5 3-2.5-3H4a8 8 0 113.134 6.35l.907-1.194A6.5 6.5 0 105.5 12zm9.53 1.97l-2.28-2.28V8.5a.75.75 0 00-1.5 0V12a.747.747 0 00.218.529l1.282-.84-1.28.842 2.5 2.5a.75.75 0 101.06-1.061z"
7218  }));
7219  /* harmony default export */ var library_backup = (backup);
7220  
7221  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-last-revision/check.js
7222  
7223  
7224  /**
7225   * WordPress dependencies
7226   */
7227  
7228  /**
7229   * Internal dependencies
7230   */
7231  
7232  
7233  
7234  function PostLastRevisionCheck(_ref) {
7235    let {
7236      lastRevisionId,
7237      revisionsCount,
7238      children
7239    } = _ref;
7240  
7241    if (!lastRevisionId || revisionsCount < 2) {
7242      return null;
7243    }
7244  
7245    return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, {
7246      supportKeys: "revisions"
7247    }, children);
7248  }
7249  /* harmony default export */ var post_last_revision_check = ((0,external_wp_data_namespaceObject.withSelect)(select => {
7250    const {
7251      getCurrentPostLastRevisionId,
7252      getCurrentPostRevisionsCount
7253    } = select(store_store);
7254    return {
7255      lastRevisionId: getCurrentPostLastRevisionId(),
7256      revisionsCount: getCurrentPostRevisionsCount()
7257    };
7258  })(PostLastRevisionCheck));
7259  
7260  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-last-revision/index.js
7261  
7262  
7263  /**
7264   * WordPress dependencies
7265   */
7266  
7267  
7268  
7269  
7270  
7271  /**
7272   * Internal dependencies
7273   */
7274  
7275  
7276  
7277  
7278  function LastRevision(_ref) {
7279    let {
7280      lastRevisionId,
7281      revisionsCount
7282    } = _ref;
7283    return (0,external_wp_element_namespaceObject.createElement)(post_last_revision_check, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
7284      href: (0,external_wp_url_namespaceObject.addQueryArgs)('revision.php', {
7285        revision: lastRevisionId,
7286        gutenberg: true
7287      }),
7288      className: "editor-post-last-revision__title",
7289      icon: library_backup
7290    }, (0,external_wp_i18n_namespaceObject.sprintf)(
7291    /* translators: %d: number of revisions */
7292    (0,external_wp_i18n_namespaceObject._n)('%d Revision', '%d Revisions', revisionsCount), revisionsCount)));
7293  }
7294  
7295  /* harmony default export */ var post_last_revision = ((0,external_wp_data_namespaceObject.withSelect)(select => {
7296    const {
7297      getCurrentPostLastRevisionId,
7298      getCurrentPostRevisionsCount
7299    } = select(store_store);
7300    return {
7301      lastRevisionId: getCurrentPostLastRevisionId(),
7302      revisionsCount: getCurrentPostRevisionsCount()
7303    };
7304  })(LastRevision));
7305  
7306  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-locked-modal/index.js
7307  
7308  
7309  /**
7310   * External dependencies
7311   */
7312  
7313  /**
7314   * WordPress dependencies
7315   */
7316  
7317  
7318  
7319  
7320  
7321  
7322  
7323  
7324  
7325  /**
7326   * Internal dependencies
7327   */
7328  
7329  
7330  function PostLockedModal() {
7331    const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostLockedModal);
7332    const hookName = 'core/editor/post-locked-modal-' + instanceId;
7333    const {
7334      autosave,
7335      updatePostLock
7336    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
7337    const {
7338      isLocked,
7339      isTakeover,
7340      user,
7341      postId,
7342      postLockUtils,
7343      activePostLock,
7344      postType,
7345      previewLink
7346    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
7347      const {
7348        isPostLocked,
7349        isPostLockTakeover,
7350        getPostLockUser,
7351        getCurrentPostId,
7352        getActivePostLock,
7353        getEditedPostAttribute,
7354        getEditedPostPreviewLink,
7355        getEditorSettings
7356      } = select(store_store);
7357      const {
7358        getPostType
7359      } = select(external_wp_coreData_namespaceObject.store);
7360      return {
7361        isLocked: isPostLocked(),
7362        isTakeover: isPostLockTakeover(),
7363        user: getPostLockUser(),
7364        postId: getCurrentPostId(),
7365        postLockUtils: getEditorSettings().postLockUtils,
7366        activePostLock: getActivePostLock(),
7367        postType: getPostType(getEditedPostAttribute('type')),
7368        previewLink: getEditedPostPreviewLink()
7369      };
7370    }, []);
7371    (0,external_wp_element_namespaceObject.useEffect)(() => {
7372      /**
7373       * Keep the lock refreshed.
7374       *
7375       * When the user does not send a heartbeat in a heartbeat-tick
7376       * the user is no longer editing and another user can start editing.
7377       *
7378       * @param {Object} data Data to send in the heartbeat request.
7379       */
7380      function sendPostLock(data) {
7381        if (isLocked) {
7382          return;
7383        }
7384  
7385        data['wp-refresh-post-lock'] = {
7386          lock: activePostLock,
7387          post_id: postId
7388        };
7389      }
7390      /**
7391       * Refresh post locks: update the lock string or show the dialog if somebody has taken over editing.
7392       *
7393       * @param {Object} data Data received in the heartbeat request
7394       */
7395  
7396  
7397      function receivePostLock(data) {
7398        if (!data['wp-refresh-post-lock']) {
7399          return;
7400        }
7401  
7402        const received = data['wp-refresh-post-lock'];
7403  
7404        if (received.lock_error) {
7405          // Auto save and display the takeover modal.
7406          autosave();
7407          updatePostLock({
7408            isLocked: true,
7409            isTakeover: true,
7410            user: {
7411              name: received.lock_error.name,
7412              avatar: received.lock_error.avatar_src_2x
7413            }
7414          });
7415        } else if (received.new_lock) {
7416          updatePostLock({
7417            isLocked: false,
7418            activePostLock: received.new_lock
7419          });
7420        }
7421      }
7422      /**
7423       * Unlock the post before the window is exited.
7424       */
7425  
7426  
7427      function releasePostLock() {
7428        if (isLocked || !activePostLock) {
7429          return;
7430        }
7431  
7432        const data = new window.FormData();
7433        data.append('action', 'wp-remove-post-lock');
7434        data.append('_wpnonce', postLockUtils.unlockNonce);
7435        data.append('post_ID', postId);
7436        data.append('active_post_lock', activePostLock);
7437  
7438        if (window.navigator.sendBeacon) {
7439          window.navigator.sendBeacon(postLockUtils.ajaxUrl, data);
7440        } else {
7441          const xhr = new window.XMLHttpRequest();
7442          xhr.open('POST', postLockUtils.ajaxUrl, false);
7443          xhr.send(data);
7444        }
7445      } // Details on these events on the Heartbeat API docs
7446      // https://developer.wordpress.org/plugins/javascript/heartbeat-api/
7447  
7448  
7449      (0,external_wp_hooks_namespaceObject.addAction)('heartbeat.send', hookName, sendPostLock);
7450      (0,external_wp_hooks_namespaceObject.addAction)('heartbeat.tick', hookName, receivePostLock);
7451      window.addEventListener('beforeunload', releasePostLock);
7452      return () => {
7453        (0,external_wp_hooks_namespaceObject.removeAction)('heartbeat.send', hookName);
7454        (0,external_wp_hooks_namespaceObject.removeAction)('heartbeat.tick', hookName);
7455        window.removeEventListener('beforeunload', releasePostLock);
7456      };
7457    }, []);
7458  
7459    if (!isLocked) {
7460      return null;
7461    }
7462  
7463    const userDisplayName = user.name;
7464    const userAvatar = user.avatar;
7465    const unlockUrl = (0,external_wp_url_namespaceObject.addQueryArgs)('post.php', {
7466      'get-post-lock': '1',
7467      lockKey: true,
7468      post: postId,
7469      action: 'edit',
7470      _wpnonce: postLockUtils.nonce
7471    });
7472    const allPostsUrl = (0,external_wp_url_namespaceObject.addQueryArgs)('edit.php', {
7473      post_type: (0,external_lodash_namespaceObject.get)(postType, ['slug'])
7474    });
7475  
7476    const allPostsLabel = (0,external_wp_i18n_namespaceObject.__)('Exit editor');
7477  
7478    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Modal, {
7479      title: isTakeover ? (0,external_wp_i18n_namespaceObject.__)('Someone else has taken over this post') : (0,external_wp_i18n_namespaceObject.__)('This post is already being edited'),
7480      focusOnMount: true,
7481      shouldCloseOnClickOutside: false,
7482      shouldCloseOnEsc: false,
7483      isDismissible: false,
7484      className: "editor-post-locked-modal"
7485    }, !!userAvatar && (0,external_wp_element_namespaceObject.createElement)("img", {
7486      src: userAvatar,
7487      alt: (0,external_wp_i18n_namespaceObject.__)('Avatar'),
7488      className: "editor-post-locked-modal__avatar",
7489      width: 64,
7490      height: 64
7491    }), (0,external_wp_element_namespaceObject.createElement)("div", null, !!isTakeover && (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createInterpolateElement)(userDisplayName ? (0,external_wp_i18n_namespaceObject.sprintf)(
7492    /* translators: %s: user's display name */
7493    (0,external_wp_i18n_namespaceObject.__)('<strong>%s</strong> now has editing control of this posts (<PreviewLink />). Don’t worry, your changes up to this moment have been saved.'), userDisplayName) : (0,external_wp_i18n_namespaceObject.__)('Another user now has editing control of this post (<PreviewLink />). Don’t worry, your changes up to this moment have been saved.'), {
7494      strong: (0,external_wp_element_namespaceObject.createElement)("strong", null),
7495      PreviewLink: (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, {
7496        href: previewLink
7497      }, (0,external_wp_i18n_namespaceObject.__)('preview'))
7498    })), !isTakeover && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createInterpolateElement)(userDisplayName ? (0,external_wp_i18n_namespaceObject.sprintf)(
7499    /* translators: %s: user's display name */
7500    (0,external_wp_i18n_namespaceObject.__)('<strong>%s</strong> is currently working on this post (<PreviewLink />), which means you cannot make changes, unless you take over.'), userDisplayName) : (0,external_wp_i18n_namespaceObject.__)('Another user is currently working on this post (<PreviewLink />), which means you cannot make changes, unless you take over.'), {
7501      strong: (0,external_wp_element_namespaceObject.createElement)("strong", null),
7502      PreviewLink: (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, {
7503        href: previewLink
7504      }, (0,external_wp_i18n_namespaceObject.__)('preview'))
7505    })), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('If you take over, the other user will lose editing control to the post, but their changes will be saved.'))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, {
7506      className: "editor-post-locked-modal__buttons",
7507      justify: "flex-end",
7508      expanded: false
7509    }, !isTakeover && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
7510      variant: "tertiary",
7511      href: unlockUrl
7512    }, (0,external_wp_i18n_namespaceObject.__)('Take over'))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
7513      variant: "primary",
7514      href: allPostsUrl
7515    }, allPostsLabel)))));
7516  }
7517  
7518  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-pending-status/check.js
7519  /**
7520   * External dependencies
7521   */
7522  
7523  /**
7524   * WordPress dependencies
7525   */
7526  
7527  
7528  
7529  /**
7530   * Internal dependencies
7531   */
7532  
7533  
7534  function PostPendingStatusCheck(_ref) {
7535    let {
7536      hasPublishAction,
7537      isPublished,
7538      children
7539    } = _ref;
7540  
7541    if (isPublished || !hasPublishAction) {
7542      return null;
7543    }
7544  
7545    return children;
7546  }
7547  /* harmony default export */ var post_pending_status_check = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => {
7548    const {
7549      isCurrentPostPublished,
7550      getCurrentPostType,
7551      getCurrentPost
7552    } = select(store_store);
7553    return {
7554      hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
7555      isPublished: isCurrentPostPublished(),
7556      postType: getCurrentPostType()
7557    };
7558  }))(PostPendingStatusCheck));
7559  
7560  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-pending-status/index.js
7561  
7562  
7563  /**
7564   * WordPress dependencies
7565   */
7566  
7567  
7568  
7569  
7570  /**
7571   * Internal dependencies
7572   */
7573  
7574  
7575  
7576  function PostPendingStatus(_ref) {
7577    let {
7578      status,
7579      onUpdateStatus
7580    } = _ref;
7581  
7582    const togglePendingStatus = () => {
7583      const updatedStatus = status === 'pending' ? 'draft' : 'pending';
7584      onUpdateStatus(updatedStatus);
7585    };
7586  
7587    return (0,external_wp_element_namespaceObject.createElement)(post_pending_status_check, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
7588      label: (0,external_wp_i18n_namespaceObject.__)('Pending review'),
7589      checked: status === 'pending',
7590      onChange: togglePendingStatus
7591    }));
7592  }
7593  /* harmony default export */ var post_pending_status = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => ({
7594    status: select(store_store).getEditedPostAttribute('status')
7595  })), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
7596    onUpdateStatus(status) {
7597      dispatch(store_store).editPost({
7598        status
7599      });
7600    }
7601  
7602  })))(PostPendingStatus));
7603  
7604  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-pingbacks/index.js
7605  
7606  
7607  /**
7608   * WordPress dependencies
7609   */
7610  
7611  
7612  
7613  
7614  /**
7615   * Internal dependencies
7616   */
7617  
7618  
7619  
7620  function PostPingbacks(_ref) {
7621    let {
7622      pingStatus = 'open',
7623      ...props
7624    } = _ref;
7625  
7626    const onTogglePingback = () => props.editPost({
7627      ping_status: pingStatus === 'open' ? 'closed' : 'open'
7628    });
7629  
7630    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
7631      label: (0,external_wp_i18n_namespaceObject.__)('Allow pingbacks & trackbacks'),
7632      checked: pingStatus === 'open',
7633      onChange: onTogglePingback
7634    });
7635  }
7636  
7637  /* harmony default export */ var post_pingbacks = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
7638    return {
7639      pingStatus: select(store_store).getEditedPostAttribute('ping_status')
7640    };
7641  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
7642    editPost: dispatch(store_store).editPost
7643  }))])(PostPingbacks));
7644  
7645  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-preview-button/index.js
7646  
7647  
7648  /**
7649   * External dependencies
7650   */
7651  
7652  
7653  /**
7654   * WordPress dependencies
7655   */
7656  
7657  
7658  
7659  
7660  
7661  
7662  
7663  
7664  /**
7665   * Internal dependencies
7666   */
7667  
7668  
7669  
7670  function writeInterstitialMessage(targetDocument) {
7671    let markup = (0,external_wp_element_namespaceObject.renderToString)((0,external_wp_element_namespaceObject.createElement)("div", {
7672      className: "editor-post-preview-button__interstitial-message"
7673    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SVG, {
7674      xmlns: "http://www.w3.org/2000/svg",
7675      viewBox: "0 0 96 96"
7676    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Path, {
7677      className: "outer",
7678      d: "M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36",
7679      fill: "none"
7680    }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Path, {
7681      className: "inner",
7682      d: "M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z",
7683      fill: "none"
7684    })), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Generating preview…'))));
7685    markup += `
7686          <style>
7687              body {
7688                  margin: 0;
7689              }
7690              .editor-post-preview-button__interstitial-message {
7691                  display: flex;
7692                  flex-direction: column;
7693                  align-items: center;
7694                  justify-content: center;
7695                  height: 100vh;
7696                  width: 100vw;
7697              }
7698              @-webkit-keyframes paint {
7699                  0% {
7700                      stroke-dashoffset: 0;
7701                  }
7702              }
7703              @-moz-keyframes paint {
7704                  0% {
7705                      stroke-dashoffset: 0;
7706                  }
7707              }
7708              @-o-keyframes paint {
7709                  0% {
7710                      stroke-dashoffset: 0;
7711                  }
7712              }
7713              @keyframes paint {
7714                  0% {
7715                      stroke-dashoffset: 0;
7716                  }
7717              }
7718              .editor-post-preview-button__interstitial-message svg {
7719                  width: 192px;
7720                  height: 192px;
7721                  stroke: #555d66;
7722                  stroke-width: 0.75;
7723              }
7724              .editor-post-preview-button__interstitial-message svg .outer,
7725              .editor-post-preview-button__interstitial-message svg .inner {
7726                  stroke-dasharray: 280;
7727                  stroke-dashoffset: 280;
7728                  -webkit-animation: paint 1.5s ease infinite alternate;
7729                  -moz-animation: paint 1.5s ease infinite alternate;
7730                  -o-animation: paint 1.5s ease infinite alternate;
7731                  animation: paint 1.5s ease infinite alternate;
7732              }
7733              p {
7734                  text-align: center;
7735                  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
7736              }
7737          </style>
7738      `;
7739    /**
7740     * Filters the interstitial message shown when generating previews.
7741     *
7742     * @param {string} markup The preview interstitial markup.
7743     */
7744  
7745    markup = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.PostPreview.interstitialMarkup', markup);
7746    targetDocument.write(markup);
7747    targetDocument.title = (0,external_wp_i18n_namespaceObject.__)('Generating preview…');
7748    targetDocument.close();
7749  }
7750  
7751  class PostPreviewButton extends external_wp_element_namespaceObject.Component {
7752    constructor() {
7753      super(...arguments);
7754      this.buttonRef = (0,external_wp_element_namespaceObject.createRef)();
7755      this.openPreviewWindow = this.openPreviewWindow.bind(this);
7756    }
7757  
7758    componentDidUpdate(prevProps) {
7759      const {
7760        previewLink
7761      } = this.props; // This relies on the window being responsible to unset itself when
7762      // navigation occurs or a new preview window is opened, to avoid
7763      // unintentional forceful redirects.
7764  
7765      if (previewLink && !prevProps.previewLink) {
7766        this.setPreviewWindowLink(previewLink);
7767      }
7768    }
7769    /**
7770     * Sets the preview window's location to the given URL, if a preview window
7771     * exists and is not closed.
7772     *
7773     * @param {string} url URL to assign as preview window location.
7774     */
7775  
7776  
7777    setPreviewWindowLink(url) {
7778      const {
7779        previewWindow
7780      } = this;
7781  
7782      if (previewWindow && !previewWindow.closed) {
7783        previewWindow.location = url;
7784  
7785        if (this.buttonRef.current) {
7786          this.buttonRef.current.focus();
7787        }
7788      }
7789    }
7790  
7791    getWindowTarget() {
7792      const {
7793        postId
7794      } = this.props;
7795      return `wp-preview-$postId}`;
7796    }
7797  
7798    openPreviewWindow(event) {
7799      // Our Preview button has its 'href' and 'target' set correctly for a11y
7800      // purposes. Unfortunately, though, we can't rely on the default 'click'
7801      // handler since sometimes it incorrectly opens a new tab instead of reusing
7802      // the existing one.
7803      // https://github.com/WordPress/gutenberg/pull/8330
7804      event.preventDefault(); // Open up a Preview tab if needed. This is where we'll show the preview.
7805  
7806      if (!this.previewWindow || this.previewWindow.closed) {
7807        this.previewWindow = window.open('', this.getWindowTarget());
7808      } // Focus the Preview tab. This might not do anything, depending on the browser's
7809      // and user's preferences.
7810      // https://html.spec.whatwg.org/multipage/interaction.html#dom-window-focus
7811  
7812  
7813      this.previewWindow.focus();
7814  
7815      if ( // If we don't need to autosave the post before previewing, then we simply
7816      // load the Preview URL in the Preview tab.
7817      !this.props.isAutosaveable || // Do not save or overwrite the post, if the post is already locked.
7818      this.props.isPostLocked) {
7819        this.setPreviewWindowLink(event.target.href);
7820        return;
7821      } // Request an autosave. This happens asynchronously and causes the component
7822      // to update when finished.
7823  
7824  
7825      if (this.props.isDraft) {
7826        this.props.savePost({
7827          isPreview: true
7828        });
7829      } else {
7830        this.props.autosave({
7831          isPreview: true
7832        });
7833      } // Display a 'Generating preview' message in the Preview tab while we wait for the
7834      // autosave to finish.
7835  
7836  
7837      writeInterstitialMessage(this.previewWindow.document);
7838    }
7839  
7840    render() {
7841      const {
7842        previewLink,
7843        currentPostLink,
7844        isSaveable,
7845        role
7846      } = this.props; // Link to the `?preview=true` URL if we have it, since this lets us see
7847      // changes that were autosaved since the post was last published. Otherwise,
7848      // just link to the post's URL.
7849  
7850      const href = previewLink || currentPostLink;
7851      const classNames = classnames_default()({
7852        'editor-post-preview': !this.props.className
7853      }, this.props.className);
7854      return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
7855        variant: !this.props.className ? 'tertiary' : undefined,
7856        className: classNames,
7857        href: href,
7858        target: this.getWindowTarget(),
7859        disabled: !isSaveable,
7860        onClick: this.openPreviewWindow,
7861        ref: this.buttonRef,
7862        role: role
7863      }, this.props.textContent ? this.props.textContent : (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_i18n_namespaceObject._x)('Preview', 'imperative verb'), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, {
7864        as: "span"
7865      },
7866      /* translators: accessibility text */
7867      (0,external_wp_i18n_namespaceObject.__)('(opens in a new tab)'))));
7868    }
7869  
7870  }
7871  /* harmony default export */ var post_preview_button = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, _ref) => {
7872    let {
7873      forcePreviewLink,
7874      forceIsAutosaveable
7875    } = _ref;
7876    const {
7877      getCurrentPostId,
7878      getCurrentPostAttribute,
7879      getEditedPostAttribute,
7880      isEditedPostSaveable,
7881      isEditedPostAutosaveable,
7882      getEditedPostPreviewLink,
7883      isPostLocked
7884    } = select(store_store);
7885    const {
7886      getPostType
7887    } = select(external_wp_coreData_namespaceObject.store);
7888    const previewLink = getEditedPostPreviewLink();
7889    const postType = getPostType(getEditedPostAttribute('type'));
7890    return {
7891      postId: getCurrentPostId(),
7892      currentPostLink: getCurrentPostAttribute('link'),
7893      previewLink: forcePreviewLink !== undefined ? forcePreviewLink : previewLink,
7894      isSaveable: isEditedPostSaveable(),
7895      isAutosaveable: forceIsAutosaveable || isEditedPostAutosaveable(),
7896      isViewable: (0,external_lodash_namespaceObject.get)(postType, ['viewable'], false),
7897      isDraft: ['draft', 'auto-draft'].indexOf(getEditedPostAttribute('status')) !== -1,
7898      isPostLocked: isPostLocked()
7899    };
7900  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({
7901    autosave: dispatch(store_store).autosave,
7902    savePost: dispatch(store_store).savePost
7903  })), (0,external_wp_compose_namespaceObject.ifCondition)(_ref2 => {
7904    let {
7905      isViewable
7906    } = _ref2;
7907    return isViewable;
7908  })])(PostPreviewButton));
7909  
7910  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-button/label.js
7911  /**
7912   * External dependencies
7913   */
7914  
7915  /**
7916   * WordPress dependencies
7917   */
7918  
7919  
7920  
7921  
7922  /**
7923   * Internal dependencies
7924   */
7925  
7926  
7927  function PublishButtonLabel(_ref) {
7928    let {
7929      isPublished,
7930      isBeingScheduled,
7931      isSaving,
7932      isPublishing,
7933      hasPublishAction,
7934      isAutosaving,
7935      hasNonPostEntityChanges
7936    } = _ref;
7937  
7938    if (isPublishing) {
7939      /* translators: button label text should, if possible, be under 16 characters. */
7940      return (0,external_wp_i18n_namespaceObject.__)('Publishing…');
7941    } else if (isPublished && isSaving && !isAutosaving) {
7942      /* translators: button label text should, if possible, be under 16 characters. */
7943      return (0,external_wp_i18n_namespaceObject.__)('Updating…');
7944    } else if (isBeingScheduled && isSaving && !isAutosaving) {
7945      /* translators: button label text should, if possible, be under 16 characters. */
7946      return (0,external_wp_i18n_namespaceObject.__)('Scheduling…');
7947    }
7948  
7949    if (!hasPublishAction) {
7950      return hasNonPostEntityChanges ? (0,external_wp_i18n_namespaceObject.__)('Submit for Review…') : (0,external_wp_i18n_namespaceObject.__)('Submit for Review');
7951    } else if (isPublished) {
7952      return hasNonPostEntityChanges ? (0,external_wp_i18n_namespaceObject.__)('Update…') : (0,external_wp_i18n_namespaceObject.__)('Update');
7953    } else if (isBeingScheduled) {
7954      return hasNonPostEntityChanges ? (0,external_wp_i18n_namespaceObject.__)('Schedule…') : (0,external_wp_i18n_namespaceObject.__)('Schedule');
7955    }
7956  
7957    return (0,external_wp_i18n_namespaceObject.__)('Publish');
7958  }
7959  /* harmony default export */ var label = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, _ref2) => {
7960    let {
7961      forceIsSaving
7962    } = _ref2;
7963    const {
7964      isCurrentPostPublished,
7965      isEditedPostBeingScheduled,
7966      isSavingPost,
7967      isPublishingPost,
7968      getCurrentPost,
7969      getCurrentPostType,
7970      isAutosavingPost
7971    } = select(store_store);
7972    return {
7973      isPublished: isCurrentPostPublished(),
7974      isBeingScheduled: isEditedPostBeingScheduled(),
7975      isSaving: forceIsSaving || isSavingPost(),
7976      isPublishing: isPublishingPost(),
7977      hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
7978      postType: getCurrentPostType(),
7979      isAutosaving: isAutosavingPost()
7980    };
7981  })])(PublishButtonLabel));
7982  
7983  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-button/index.js
7984  
7985  
7986  
7987  /**
7988   * External dependencies
7989   */
7990  
7991  
7992  /**
7993   * WordPress dependencies
7994   */
7995  
7996  
7997  
7998  
7999  
8000  
8001  /**
8002   * Internal dependencies
8003   */
8004  
8005  
8006  
8007  class PostPublishButton extends external_wp_element_namespaceObject.Component {
8008    constructor(props) {
8009      super(props);
8010      this.buttonNode = (0,external_wp_element_namespaceObject.createRef)();
8011      this.createOnClick = this.createOnClick.bind(this);
8012      this.closeEntitiesSavedStates = this.closeEntitiesSavedStates.bind(this);
8013      this.state = {
8014        entitiesSavedStatesCallback: false
8015      };
8016    }
8017  
8018    componentDidMount() {
8019      if (this.props.focusOnMount) {
8020        this.buttonNode.current.focus();
8021      }
8022    }
8023  
8024    createOnClick(callback) {
8025      var _this = this;
8026  
8027      return function () {
8028        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
8029          args[_key] = arguments[_key];
8030        }
8031  
8032        const {
8033          hasNonPostEntityChanges,
8034          setEntitiesSavedStatesCallback
8035        } = _this.props; // If a post with non-post entities is published, but the user
8036        // elects to not save changes to the non-post entities, those
8037        // entities will still be dirty when the Publish button is clicked.
8038        // We also need to check that the `setEntitiesSavedStatesCallback`
8039        // prop was passed. See https://github.com/WordPress/gutenberg/pull/37383
8040  
8041        if (hasNonPostEntityChanges && setEntitiesSavedStatesCallback) {
8042          // The modal for multiple entity saving will open,
8043          // hold the callback for saving/publishing the post
8044          // so that we can call it if the post entity is checked.
8045          _this.setState({
8046            entitiesSavedStatesCallback: () => callback(...args)
8047          }); // Open the save panel by setting its callback.
8048          // To set a function on the useState hook, we must set it
8049          // with another function (() => myFunction). Passing the
8050          // function on its own will cause an error when called.
8051  
8052  
8053          setEntitiesSavedStatesCallback(() => _this.closeEntitiesSavedStates);
8054          return external_lodash_namespaceObject.noop;
8055        }
8056  
8057        return callback(...args);
8058      };
8059    }
8060  
8061    closeEntitiesSavedStates(savedEntities) {
8062      const {
8063        postType,
8064        postId
8065      } = this.props;
8066      const {
8067        entitiesSavedStatesCallback
8068      } = this.state;
8069      this.setState({
8070        entitiesSavedStatesCallback: false
8071      }, () => {
8072        if (savedEntities && (0,external_lodash_namespaceObject.some)(savedEntities, elt => elt.kind === 'postType' && elt.name === postType && elt.key === postId)) {
8073          // The post entity was checked, call the held callback from `createOnClick`.
8074          entitiesSavedStatesCallback();
8075        }
8076      });
8077    }
8078  
8079    render() {
8080      const {
8081        forceIsDirty,
8082        forceIsSaving,
8083        hasPublishAction,
8084        isBeingScheduled,
8085        isOpen,
8086        isPostSavingLocked,
8087        isPublishable,
8088        isPublished,
8089        isSaveable,
8090        isSaving,
8091        isAutoSaving,
8092        isToggle,
8093        onSave,
8094        onStatusChange,
8095        onSubmit = external_lodash_namespaceObject.noop,
8096        onToggle,
8097        visibility,
8098        hasNonPostEntityChanges,
8099        isSavingNonPostEntityChanges
8100      } = this.props;
8101      const isButtonDisabled = (isSaving || forceIsSaving || !isSaveable || isPostSavingLocked || !isPublishable && !forceIsDirty) && (!hasNonPostEntityChanges || isSavingNonPostEntityChanges);
8102      const isToggleDisabled = (isPublished || isSaving || forceIsSaving || !isSaveable || !isPublishable && !forceIsDirty) && (!hasNonPostEntityChanges || isSavingNonPostEntityChanges);
8103      let publishStatus;
8104  
8105      if (!hasPublishAction) {
8106        publishStatus = 'pending';
8107      } else if (visibility === 'private') {
8108        publishStatus = 'private';
8109      } else if (isBeingScheduled) {
8110        publishStatus = 'future';
8111      } else {
8112        publishStatus = 'publish';
8113      }
8114  
8115      const onClickButton = () => {
8116        if (isButtonDisabled) {
8117          return;
8118        }
8119  
8120        onSubmit();
8121        onStatusChange(publishStatus);
8122        onSave();
8123      };
8124  
8125      const onClickToggle = () => {
8126        if (isToggleDisabled) {
8127          return;
8128        }
8129  
8130        onToggle();
8131      };
8132  
8133      const buttonProps = {
8134        'aria-disabled': isButtonDisabled,
8135        className: 'editor-post-publish-button',
8136        isBusy: !isAutoSaving && isSaving && isPublished,
8137        variant: 'primary',
8138        onClick: this.createOnClick(onClickButton)
8139      };
8140      const toggleProps = {
8141        'aria-disabled': isToggleDisabled,
8142        'aria-expanded': isOpen,
8143        className: 'editor-post-publish-panel__toggle',
8144        isBusy: isSaving && isPublished,
8145        variant: 'primary',
8146        onClick: this.createOnClick(onClickToggle)
8147      };
8148      const toggleChildren = isBeingScheduled ? (0,external_wp_i18n_namespaceObject.__)('Schedule…') : (0,external_wp_i18n_namespaceObject.__)('Publish');
8149      const buttonChildren = (0,external_wp_element_namespaceObject.createElement)(label, {
8150        forceIsSaving: forceIsSaving,
8151        hasNonPostEntityChanges: hasNonPostEntityChanges
8152      });
8153      const componentProps = isToggle ? toggleProps : buttonProps;
8154      const componentChildren = isToggle ? toggleChildren : buttonChildren;
8155      return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({
8156        ref: this.buttonNode
8157      }, componentProps, {
8158        className: classnames_default()(componentProps.className, 'editor-post-publish-button__button', {
8159          'has-changes-dot': hasNonPostEntityChanges
8160        })
8161      }), componentChildren));
8162    }
8163  
8164  }
8165  /* harmony default export */ var post_publish_button = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
8166    const {
8167      isSavingPost,
8168      isAutosavingPost,
8169      isEditedPostBeingScheduled,
8170      getEditedPostVisibility,
8171      isCurrentPostPublished,
8172      isEditedPostSaveable,
8173      isEditedPostPublishable,
8174      isPostSavingLocked,
8175      getCurrentPost,
8176      getCurrentPostType,
8177      getCurrentPostId,
8178      hasNonPostEntityChanges,
8179      isSavingNonPostEntityChanges
8180    } = select(store_store);
8181  
8182    const _isAutoSaving = isAutosavingPost();
8183  
8184    return {
8185      isSaving: isSavingPost() || _isAutoSaving,
8186      isAutoSaving: _isAutoSaving,
8187      isBeingScheduled: isEditedPostBeingScheduled(),
8188      visibility: getEditedPostVisibility(),
8189      isSaveable: isEditedPostSaveable(),
8190      isPostSavingLocked: isPostSavingLocked(),
8191      isPublishable: isEditedPostPublishable(),
8192      isPublished: isCurrentPostPublished(),
8193      hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
8194      postType: getCurrentPostType(),
8195      postId: getCurrentPostId(),
8196      hasNonPostEntityChanges: hasNonPostEntityChanges(),
8197      isSavingNonPostEntityChanges: isSavingNonPostEntityChanges()
8198    };
8199  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => {
8200    const {
8201      editPost,
8202      savePost
8203    } = dispatch(store_store);
8204    return {
8205      onStatusChange: status => editPost({
8206        status
8207      }, {
8208        undoIgnore: true
8209      }),
8210      onSave: savePost
8211    };
8212  })])(PostPublishButton));
8213  
8214  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/close-small.js
8215  
8216  
8217  /**
8218   * WordPress dependencies
8219   */
8220  
8221  const closeSmall = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
8222    xmlns: "http://www.w3.org/2000/svg",
8223    viewBox: "0 0 24 24"
8224  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
8225    d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"
8226  }));
8227  /* harmony default export */ var close_small = (closeSmall);
8228  
8229  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/wordpress.js
8230  
8231  
8232  /**
8233   * WordPress dependencies
8234   */
8235  
8236  const wordpress = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
8237    xmlns: "http://www.w3.org/2000/svg",
8238    viewBox: "-2 -2 24 24"
8239  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
8240    d: "M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"
8241  }));
8242  /* harmony default export */ var library_wordpress = (wordpress);
8243  
8244  ;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
8245  function _defineProperty(obj, key, value) {
8246    if (key in obj) {
8247      Object.defineProperty(obj, key, {
8248        value: value,
8249        enumerable: true,
8250        configurable: true,
8251        writable: true
8252      });
8253    } else {
8254      obj[key] = value;
8255    }
8256  
8257    return obj;
8258  }
8259  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/utils.js
8260  /**
8261   * WordPress dependencies
8262   */
8263  
8264  const visibilityOptions = [{
8265    value: 'public',
8266    label: (0,external_wp_i18n_namespaceObject.__)('Public'),
8267    info: (0,external_wp_i18n_namespaceObject.__)('Visible to everyone.')
8268  }, {
8269    value: 'private',
8270    label: (0,external_wp_i18n_namespaceObject.__)('Private'),
8271    info: (0,external_wp_i18n_namespaceObject.__)('Only visible to site admins and editors.')
8272  }, {
8273    value: 'password',
8274    label: (0,external_wp_i18n_namespaceObject.__)('Password Protected'),
8275    info: (0,external_wp_i18n_namespaceObject.__)('Protected with a password you choose. Only those with the password can view this post.')
8276  }];
8277  
8278  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/index.js
8279  
8280  
8281  
8282  /**
8283   * WordPress dependencies
8284   */
8285  
8286  
8287  
8288  
8289  
8290  /**
8291   * Internal dependencies
8292   */
8293  
8294  
8295  
8296  class PostVisibility extends external_wp_element_namespaceObject.Component {
8297    constructor(props) {
8298      super(...arguments);
8299  
8300      _defineProperty(this, "confirmPrivate", () => {
8301        const {
8302          onUpdateVisibility,
8303          onSave
8304        } = this.props;
8305        onUpdateVisibility('private');
8306        this.setState({
8307          hasPassword: false,
8308          showPrivateConfirmDialog: false
8309        });
8310        onSave();
8311      });
8312  
8313      _defineProperty(this, "handleDialogCancel", () => {
8314        this.setState({
8315          showPrivateConfirmDialog: false
8316        });
8317      });
8318  
8319      this.setPublic = this.setPublic.bind(this);
8320      this.setPrivate = this.setPrivate.bind(this);
8321      this.setPasswordProtected = this.setPasswordProtected.bind(this);
8322      this.updatePassword = this.updatePassword.bind(this);
8323      this.state = {
8324        hasPassword: !!props.password,
8325        showPrivateConfirmDialog: false
8326      };
8327    }
8328  
8329    setPublic() {
8330      const {
8331        visibility,
8332        onUpdateVisibility,
8333        status
8334      } = this.props;
8335      onUpdateVisibility(visibility === 'private' ? 'draft' : status);
8336      this.setState({
8337        hasPassword: false
8338      });
8339    }
8340  
8341    setPrivate() {
8342      this.setState({
8343        showPrivateConfirmDialog: true
8344      });
8345    }
8346  
8347    setPasswordProtected() {
8348      const {
8349        visibility,
8350        onUpdateVisibility,
8351        status,
8352        password
8353      } = this.props;
8354      onUpdateVisibility(visibility === 'private' ? 'draft' : status, password || '');
8355      this.setState({
8356        hasPassword: true
8357      });
8358    }
8359  
8360    updatePassword(event) {
8361      const {
8362        status,
8363        onUpdateVisibility
8364      } = this.props;
8365      onUpdateVisibility(status, event.target.value);
8366    }
8367  
8368    render() {
8369      const {
8370        visibility,
8371        password,
8372        instanceId
8373      } = this.props;
8374      const visibilityHandlers = {
8375        public: {
8376          onSelect: this.setPublic,
8377          checked: visibility === 'public' && !this.state.hasPassword
8378        },
8379        private: {
8380          onSelect: this.setPrivate,
8381          checked: visibility === 'private'
8382        },
8383        password: {
8384          onSelect: this.setPasswordProtected,
8385          checked: this.state.hasPassword
8386        }
8387      };
8388      return [(0,external_wp_element_namespaceObject.createElement)("fieldset", {
8389        key: "visibility-selector",
8390        className: "editor-post-visibility__dialog-fieldset"
8391      }, (0,external_wp_element_namespaceObject.createElement)("legend", {
8392        className: "editor-post-visibility__dialog-legend"
8393      }, (0,external_wp_i18n_namespaceObject.__)('Post Visibility')), visibilityOptions.map(_ref => {
8394        let {
8395          value,
8396          label,
8397          info
8398        } = _ref;
8399        return (0,external_wp_element_namespaceObject.createElement)("div", {
8400          key: value,
8401          className: "editor-post-visibility__choice"
8402        }, (0,external_wp_element_namespaceObject.createElement)("input", {
8403          type: "radio",
8404          name: `editor-post-visibility__setting-$instanceId}`,
8405          value: value,
8406          onChange: visibilityHandlers[value].onSelect,
8407          checked: visibilityHandlers[value].checked,
8408          id: `editor-post-$value}-$instanceId}`,
8409          "aria-describedby": `editor-post-$value}-$instanceId}-description`,
8410          className: "editor-post-visibility__dialog-radio"
8411        }), (0,external_wp_element_namespaceObject.createElement)("label", {
8412          htmlFor: `editor-post-$value}-$instanceId}`,
8413          className: "editor-post-visibility__dialog-label"
8414        }, label), (0,external_wp_element_namespaceObject.createElement)("p", {
8415          id: `editor-post-$value}-$instanceId}-description`,
8416          className: "editor-post-visibility__dialog-info"
8417        }, info));
8418      })), this.state.hasPassword && (0,external_wp_element_namespaceObject.createElement)("div", {
8419        className: "editor-post-visibility__dialog-password",
8420        key: "password-selector"
8421      }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, {
8422        as: "label",
8423        htmlFor: `editor-post-visibility__dialog-password-input-$instanceId}`
8424      }, (0,external_wp_i18n_namespaceObject.__)('Create password')), (0,external_wp_element_namespaceObject.createElement)("input", {
8425        className: "editor-post-visibility__dialog-password-input",
8426        id: `editor-post-visibility__dialog-password-input-$instanceId}`,
8427        type: "text",
8428        onChange: this.updatePassword,
8429        value: password,
8430        placeholder: (0,external_wp_i18n_namespaceObject.__)('Use a secure password')
8431      })), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
8432        key: "private-publish-confirmation",
8433        isOpen: this.state.showPrivateConfirmDialog,
8434        onConfirm: this.confirmPrivate,
8435        onCancel: this.handleDialogCancel
8436      }, (0,external_wp_i18n_namespaceObject.__)('Would you like to privately publish this post now?'))];
8437    }
8438  
8439  }
8440  /* harmony default export */ var post_visibility = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
8441    const {
8442      getEditedPostAttribute,
8443      getEditedPostVisibility
8444    } = select(store_store);
8445    return {
8446      status: getEditedPostAttribute('status'),
8447      visibility: getEditedPostVisibility(),
8448      password: getEditedPostAttribute('password')
8449    };
8450  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => {
8451    const {
8452      savePost,
8453      editPost
8454    } = dispatch(store_store);
8455    return {
8456      onSave: savePost,
8457  
8458      onUpdateVisibility(status) {
8459        let password = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
8460        editPost({
8461          status,
8462          password
8463        });
8464      }
8465  
8466    };
8467  }), external_wp_compose_namespaceObject.withInstanceId])(PostVisibility));
8468  
8469  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/label.js
8470  /**
8471   * External dependencies
8472   */
8473  
8474  /**
8475   * WordPress dependencies
8476   */
8477  
8478  
8479  /**
8480   * Internal dependencies
8481   */
8482  
8483  
8484  
8485  
8486  function PostVisibilityLabel(_ref) {
8487    let {
8488      visibility
8489    } = _ref;
8490  
8491    const getVisibilityLabel = () => (0,external_lodash_namespaceObject.find)(visibilityOptions, {
8492      value: visibility
8493    }).label;
8494  
8495    return getVisibilityLabel(visibility);
8496  }
8497  
8498  /* harmony default export */ var post_visibility_label = ((0,external_wp_data_namespaceObject.withSelect)(select => ({
8499    visibility: select(store_store).getEditedPostVisibility()
8500  }))(PostVisibilityLabel));
8501  
8502  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-schedule/index.js
8503  
8504  
8505  /**
8506   * WordPress dependencies
8507   */
8508  
8509  
8510  
8511  
8512  
8513  /**
8514   * Internal dependencies
8515   */
8516  
8517  
8518  
8519  function getDayOfTheMonth() {
8520    let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
8521    let firstDay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
8522    const d = new Date(date);
8523    return new Date(d.getFullYear(), d.getMonth() + (firstDay ? 0 : 1), firstDay ? 1 : 0).toISOString();
8524  }
8525  
8526  function PostSchedule() {
8527    const {
8528      postDate,
8529      postType
8530    } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
8531      postDate: select(store_store).getEditedPostAttribute('date'),
8532      postType: select(store_store).getCurrentPostType()
8533    }), []);
8534    const {
8535      editPost
8536    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
8537  
8538    const onUpdateDate = date => editPost({
8539      date
8540    });
8541  
8542    const [previewedMonth, setPreviewedMonth] = (0,external_wp_element_namespaceObject.useState)(getDayOfTheMonth(postDate)); // Pick up published and schduled site posts.
8543  
8544    const eventsByPostType = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', postType, {
8545      status: 'publish,future',
8546      after: getDayOfTheMonth(previewedMonth),
8547      before: getDayOfTheMonth(previewedMonth, false),
8548      exclude: [select(store_store).getCurrentPostId()]
8549    }), [previewedMonth, postType]);
8550    const events = (0,external_wp_element_namespaceObject.useMemo)(() => (eventsByPostType || []).map(_ref => {
8551      let {
8552        title,
8553        type,
8554        date: eventDate
8555      } = _ref;
8556      return {
8557        title: title === null || title === void 0 ? void 0 : title.rendered,
8558        type,
8559        date: new Date(eventDate)
8560      };
8561    }), [eventsByPostType]);
8562    const ref = (0,external_wp_element_namespaceObject.useRef)();
8563  
8564    const settings = (0,external_wp_date_namespaceObject.__experimentalGetSettings)(); // To know if the current timezone is a 12 hour time with look for "a" in the time format
8565    // We also make sure this a is not escaped by a "/"
8566  
8567  
8568    const is12HourTime = /a(?!\\)/i.test(settings.formats.time.toLowerCase() // Test only the lower case a.
8569    .replace(/\\\\/g, '') // Replace "//" with empty strings.
8570    .split('').reverse().join('') // Reverse the string and test for "a" not followed by a slash.
8571    );
8572  
8573    function onChange(newDate) {
8574      onUpdateDate(newDate);
8575      const {
8576        ownerDocument
8577      } = ref.current;
8578      ownerDocument.activeElement.blur();
8579    }
8580  
8581    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DateTimePicker, {
8582      ref: ref,
8583      currentDate: postDate,
8584      onChange: onChange,
8585      is12Hour: is12HourTime,
8586      events: events,
8587      onMonthPreviewed: setPreviewedMonth
8588    });
8589  }
8590  
8591  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-schedule/label.js
8592  /**
8593   * WordPress dependencies
8594   */
8595  
8596  
8597  
8598  /**
8599   * Internal dependencies
8600   */
8601  
8602  
8603  function PostScheduleLabel(_ref) {
8604    let {
8605      date,
8606      isFloating
8607    } = _ref;
8608  
8609    const settings = (0,external_wp_date_namespaceObject.__experimentalGetSettings)();
8610  
8611    return date && !isFloating ? (0,external_wp_date_namespaceObject.format)(`$settings.formats.date} $settings.formats.time}`, date) : (0,external_wp_i18n_namespaceObject.__)('Immediately');
8612  }
8613  /* harmony default export */ var post_schedule_label = ((0,external_wp_data_namespaceObject.withSelect)(select => {
8614    return {
8615      date: select(store_store).getEditedPostAttribute('date'),
8616      isFloating: select(store_store).isEditedPostDateFloating()
8617    };
8618  })(PostScheduleLabel));
8619  
8620  ;// CONCATENATED MODULE: external ["wp","a11y"]
8621  var external_wp_a11y_namespaceObject = window["wp"]["a11y"];
8622  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/most-used-terms.js
8623  
8624  
8625  /**
8626   * External dependencies
8627   */
8628  
8629  /**
8630   * WordPress dependencies
8631   */
8632  
8633  
8634  
8635  
8636  /**
8637   * Internal dependencies
8638   */
8639  
8640  
8641  const MIN_MOST_USED_TERMS = 3;
8642  const DEFAULT_QUERY = {
8643    per_page: 10,
8644    orderby: 'count',
8645    order: 'desc',
8646    hide_empty: true,
8647    _fields: 'id,name,count',
8648    context: 'view'
8649  };
8650  function MostUsedTerms(_ref) {
8651    let {
8652      onSelect,
8653      taxonomy
8654    } = _ref;
8655    const {
8656      _terms,
8657      showTerms
8658    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
8659      const mostUsedTerms = select(external_wp_coreData_namespaceObject.store).getEntityRecords('taxonomy', taxonomy.slug, DEFAULT_QUERY);
8660      return {
8661        _terms: mostUsedTerms,
8662        showTerms: (mostUsedTerms === null || mostUsedTerms === void 0 ? void 0 : mostUsedTerms.length) >= MIN_MOST_USED_TERMS
8663      };
8664    }, []);
8665  
8666    if (!showTerms) {
8667      return null;
8668    }
8669  
8670    const terms = unescapeTerms(_terms);
8671    const label = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'most_used']);
8672    return (0,external_wp_element_namespaceObject.createElement)("div", {
8673      className: "editor-post-taxonomies__flat-term-most-used"
8674    }, (0,external_wp_element_namespaceObject.createElement)("h3", {
8675      className: "editor-post-taxonomies__flat-term-most-used-label"
8676    }, label), (0,external_wp_element_namespaceObject.createElement)("ul", {
8677      role: "list",
8678      className: "editor-post-taxonomies__flat-term-most-used-list"
8679    }, terms.map(term => (0,external_wp_element_namespaceObject.createElement)("li", {
8680      key: term.id
8681    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
8682      variant: "link",
8683      onClick: () => onSelect(term)
8684    }, term.name)))));
8685  }
8686  
8687  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/flat-term-selector.js
8688  
8689  
8690  /**
8691   * External dependencies
8692   */
8693  
8694  /**
8695   * WordPress dependencies
8696   */
8697  
8698  
8699  
8700  
8701  
8702  
8703  
8704  
8705  
8706  
8707  /**
8708   * Internal dependencies
8709   */
8710  
8711  
8712  
8713  
8714  /**
8715   * Shared reference to an empty array for cases where it is important to avoid
8716   * returning a new array reference on every invocation.
8717   *
8718   * @type {Array<any>}
8719   */
8720  
8721  const flat_term_selector_EMPTY_ARRAY = [];
8722  /**
8723   * Module constants
8724   */
8725  
8726  const MAX_TERMS_SUGGESTIONS = 20;
8727  const flat_term_selector_DEFAULT_QUERY = {
8728    per_page: MAX_TERMS_SUGGESTIONS,
8729    orderby: 'count',
8730    order: 'desc',
8731    _fields: 'id,name',
8732    context: 'view'
8733  };
8734  
8735  const isSameTermName = (termA, termB) => unescapeString(termA).toLowerCase() === unescapeString(termB).toLowerCase();
8736  
8737  const termNamesToIds = (names, terms) => {
8738    return names.map(termName => (0,external_lodash_namespaceObject.find)(terms, term => isSameTermName(term.name, termName)).id);
8739  }; // Tries to create a term or fetch it if it already exists.
8740  
8741  
8742  function findOrCreateTerm(termName, restBase) {
8743    const escapedTermName = (0,external_lodash_namespaceObject.escape)(termName);
8744    return external_wp_apiFetch_default()({
8745      path: `/wp/v2/$restBase}`,
8746      method: 'POST',
8747      data: {
8748        name: escapedTermName
8749      }
8750    }).catch(error => {
8751      const errorCode = error.code;
8752  
8753      if (errorCode === 'term_exists') {
8754        // If the terms exist, fetch it instead of creating a new one.
8755        const addRequest = external_wp_apiFetch_default()({
8756          path: (0,external_wp_url_namespaceObject.addQueryArgs)(`/wp/v2/$restBase}`, { ...flat_term_selector_DEFAULT_QUERY,
8757            search: escapedTermName
8758          })
8759        }).then(unescapeTerms);
8760        return addRequest.then(searchResult => {
8761          return (0,external_lodash_namespaceObject.find)(searchResult, result => isSameTermName(result.name, termName));
8762        });
8763      }
8764  
8765      return Promise.reject(error);
8766    }).then(unescapeTerm);
8767  }
8768  
8769  function FlatTermSelector(_ref) {
8770    let {
8771      slug
8772    } = _ref;
8773    const [values, setValues] = (0,external_wp_element_namespaceObject.useState)([]);
8774    const [search, setSearch] = (0,external_wp_element_namespaceObject.useState)('');
8775    const debouncedSearch = (0,external_wp_compose_namespaceObject.useDebounce)(setSearch, 500);
8776    const {
8777      terms,
8778      termIds,
8779      taxonomy,
8780      hasAssignAction,
8781      hasCreateAction,
8782      hasResolvedTerms
8783    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
8784      const {
8785        getCurrentPost,
8786        getEditedPostAttribute
8787      } = select(store_store);
8788      const {
8789        getEntityRecords,
8790        getTaxonomy,
8791        hasFinishedResolution
8792      } = select(external_wp_coreData_namespaceObject.store);
8793      const post = getCurrentPost();
8794  
8795      const _taxonomy = getTaxonomy(slug);
8796  
8797      const _termIds = _taxonomy ? getEditedPostAttribute(_taxonomy.rest_base) : flat_term_selector_EMPTY_ARRAY;
8798  
8799      const query = { ...flat_term_selector_DEFAULT_QUERY,
8800        include: _termIds.join(','),
8801        per_page: -1
8802      };
8803      return {
8804        hasCreateAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-create-' + _taxonomy.rest_base], false) : false,
8805        hasAssignAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-assign-' + _taxonomy.rest_base], false) : false,
8806        taxonomy: _taxonomy,
8807        termIds: _termIds,
8808        terms: _termIds.length ? getEntityRecords('taxonomy', slug, query) : flat_term_selector_EMPTY_ARRAY,
8809        hasResolvedTerms: hasFinishedResolution('getEntityRecords', ['taxonomy', slug, query])
8810      };
8811    }, [slug]);
8812    const {
8813      searchResults
8814    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
8815      const {
8816        getEntityRecords
8817      } = select(external_wp_coreData_namespaceObject.store);
8818      return {
8819        searchResults: !!search ? getEntityRecords('taxonomy', slug, { ...flat_term_selector_DEFAULT_QUERY,
8820          search
8821        }) : flat_term_selector_EMPTY_ARRAY
8822      };
8823    }, [search]); // Update terms state only after the selectors are resolved.
8824    // We're using this to avoid terms temporarily disappearing on slow networks
8825    // while core data makes REST API requests.
8826  
8827    (0,external_wp_element_namespaceObject.useEffect)(() => {
8828      if (hasResolvedTerms) {
8829        const newValues = terms.map(term => unescapeString(term.name));
8830        setValues(newValues);
8831      }
8832    }, [terms, hasResolvedTerms]);
8833    const suggestions = (0,external_wp_element_namespaceObject.useMemo)(() => {
8834      return (searchResults !== null && searchResults !== void 0 ? searchResults : []).map(term => unescapeString(term.name));
8835    }, [searchResults]);
8836    const {
8837      editPost
8838    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
8839  
8840    if (!hasAssignAction) {
8841      return null;
8842    }
8843  
8844    function onUpdateTerms(newTermIds) {
8845      editPost({
8846        [taxonomy.rest_base]: newTermIds
8847      });
8848    }
8849  
8850    function onChange(termNames) {
8851      const availableTerms = [...terms, ...(searchResults !== null && searchResults !== void 0 ? searchResults : [])];
8852      const uniqueTerms = (0,external_lodash_namespaceObject.uniqBy)(termNames, term => term.toLowerCase());
8853      const newTermNames = uniqueTerms.filter(termName => !(0,external_lodash_namespaceObject.find)(availableTerms, term => isSameTermName(term.name, termName))); // Optimistically update term values.
8854      // The selector will always re-fetch terms later.
8855  
8856      setValues(uniqueTerms);
8857  
8858      if (newTermNames.length === 0) {
8859        return onUpdateTerms(termNamesToIds(uniqueTerms, availableTerms));
8860      }
8861  
8862      if (!hasCreateAction) {
8863        return;
8864      }
8865  
8866      Promise.all(newTermNames.map(termName => findOrCreateTerm(termName, taxonomy.rest_base))).then(newTerms => {
8867        const newAvailableTerms = availableTerms.concat(newTerms);
8868        return onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms));
8869      });
8870    }
8871  
8872    function appendTerm(newTerm) {
8873      if (termIds.includes(newTerm.id)) {
8874        return;
8875      }
8876  
8877      const newTermIds = [...termIds, newTerm.id];
8878      const termAddedMessage = (0,external_wp_i18n_namespaceObject.sprintf)(
8879      /* translators: %s: term name. */
8880      (0,external_wp_i18n_namespaceObject._x)('%s added', 'term'), (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0,external_wp_i18n_namespaceObject.__)('Tag') : (0,external_wp_i18n_namespaceObject.__)('Term')));
8881      (0,external_wp_a11y_namespaceObject.speak)(termAddedMessage, 'assertive');
8882      onUpdateTerms(newTermIds);
8883    }
8884  
8885    const newTermLabel = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'add_new_item'], slug === 'post_tag' ? (0,external_wp_i18n_namespaceObject.__)('Add new tag') : (0,external_wp_i18n_namespaceObject.__)('Add new Term'));
8886    const singularName = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0,external_wp_i18n_namespaceObject.__)('Tag') : (0,external_wp_i18n_namespaceObject.__)('Term'));
8887    const termAddedLabel = (0,external_wp_i18n_namespaceObject.sprintf)(
8888    /* translators: %s: term name. */
8889    (0,external_wp_i18n_namespaceObject._x)('%s added', 'term'), singularName);
8890    const termRemovedLabel = (0,external_wp_i18n_namespaceObject.sprintf)(
8891    /* translators: %s: term name. */
8892    (0,external_wp_i18n_namespaceObject._x)('%s removed', 'term'), singularName);
8893    const removeTermLabel = (0,external_wp_i18n_namespaceObject.sprintf)(
8894    /* translators: %s: term name. */
8895    (0,external_wp_i18n_namespaceObject._x)('Remove %s', 'term'), singularName);
8896    return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FormTokenField, {
8897      value: values,
8898      suggestions: suggestions,
8899      onChange: onChange,
8900      onInputChange: debouncedSearch,
8901      maxSuggestions: MAX_TERMS_SUGGESTIONS,
8902      label: newTermLabel,
8903      messages: {
8904        added: termAddedLabel,
8905        removed: termRemovedLabel,
8906        remove: removeTermLabel
8907      }
8908    }), (0,external_wp_element_namespaceObject.createElement)(MostUsedTerms, {
8909      taxonomy: taxonomy,
8910      onSelect: appendTerm
8911    }));
8912  }
8913  
8914  /* harmony default export */ var flat_term_selector = ((0,external_wp_components_namespaceObject.withFilters)('editor.PostTaxonomyType')(FlatTermSelector));
8915  
8916  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/maybe-tags-panel.js
8917  
8918  
8919  /**
8920   * External dependencies
8921   */
8922  
8923  /**
8924   * WordPress dependencies
8925   */
8926  
8927  
8928  
8929  
8930  
8931  
8932  
8933  /**
8934   * Internal dependencies
8935   */
8936  
8937  
8938  
8939  
8940  const TagsPanel = () => {
8941    const panelBodyTitle = [(0,external_wp_i18n_namespaceObject.__)('Suggestion:'), (0,external_wp_element_namespaceObject.createElement)("span", {
8942      className: "editor-post-publish-panel__link",
8943      key: "label"
8944    }, (0,external_wp_i18n_namespaceObject.__)('Add tags'))];
8945    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
8946      initialOpen: false,
8947      title: panelBodyTitle
8948    }, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post.')), (0,external_wp_element_namespaceObject.createElement)(flat_term_selector, {
8949      slug: 'post_tag'
8950    }));
8951  };
8952  
8953  class MaybeTagsPanel extends external_wp_element_namespaceObject.Component {
8954    constructor(props) {
8955      super(props);
8956      this.state = {
8957        hadTagsWhenOpeningThePanel: props.hasTags
8958      };
8959    }
8960    /*
8961     * We only want to show the tag panel if the post didn't have
8962     * any tags when the user hit the Publish button.
8963     *
8964     * We can't use the prop.hasTags because it'll change to true
8965     * if the user adds a new tag within the pre-publish panel.
8966     * This would force a re-render and a new prop.hasTags check,
8967     * hiding this panel and keeping the user from adding
8968     * more than one tag.
8969     */
8970  
8971  
8972    render() {
8973      if (!this.state.hadTagsWhenOpeningThePanel) {
8974        return (0,external_wp_element_namespaceObject.createElement)(TagsPanel, null);
8975      }
8976  
8977      return null;
8978    }
8979  
8980  }
8981  
8982  /* harmony default export */ var maybe_tags_panel = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => {
8983    const postType = select(store_store).getCurrentPostType();
8984    const tagsTaxonomy = select(external_wp_coreData_namespaceObject.store).getTaxonomy('post_tag');
8985    const tags = tagsTaxonomy && select(store_store).getEditedPostAttribute(tagsTaxonomy.rest_base);
8986    return {
8987      areTagsFetched: tagsTaxonomy !== undefined,
8988      isPostTypeSupported: tagsTaxonomy && (0,external_lodash_namespaceObject.some)(tagsTaxonomy.types, type => type === postType),
8989      hasTags: tags && tags.length
8990    };
8991  }), (0,external_wp_compose_namespaceObject.ifCondition)(_ref => {
8992    let {
8993      areTagsFetched,
8994      isPostTypeSupported
8995    } = _ref;
8996    return isPostTypeSupported && areTagsFetched;
8997  }))(MaybeTagsPanel));
8998  
8999  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/maybe-post-format-panel.js
9000  
9001  
9002  /**
9003   * External dependencies
9004   */
9005  
9006  /**
9007   * WordPress dependencies
9008   */
9009  
9010  
9011  
9012  
9013  
9014  /**
9015   * Internal dependencies
9016   */
9017  
9018  
9019  
9020  
9021  const getSuggestion = (supportedFormats, suggestedPostFormat) => {
9022    const formats = POST_FORMATS.filter(format => (0,external_lodash_namespaceObject.includes)(supportedFormats, format.id));
9023    return (0,external_lodash_namespaceObject.find)(formats, format => format.id === suggestedPostFormat);
9024  };
9025  
9026  const PostFormatSuggestion = _ref => {
9027    let {
9028      suggestedPostFormat,
9029      suggestionText,
9030      onUpdatePostFormat
9031    } = _ref;
9032    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9033      variant: "link",
9034      onClick: () => onUpdatePostFormat(suggestedPostFormat)
9035    }, suggestionText);
9036  };
9037  
9038  function PostFormatPanel() {
9039    const {
9040      currentPostFormat,
9041      suggestion
9042    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
9043      const {
9044        getEditedPostAttribute,
9045        getSuggestedPostFormat
9046      } = select(store_store);
9047      const supportedFormats = (0,external_lodash_namespaceObject.get)(select(external_wp_coreData_namespaceObject.store).getThemeSupports(), ['formats'], []);
9048      return {
9049        currentPostFormat: getEditedPostAttribute('format'),
9050        suggestion: getSuggestion(supportedFormats, getSuggestedPostFormat())
9051      };
9052    }, []);
9053    const {
9054      editPost
9055    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
9056  
9057    const onUpdatePostFormat = format => editPost({
9058      format
9059    });
9060  
9061    const panelBodyTitle = [(0,external_wp_i18n_namespaceObject.__)('Suggestion:'), (0,external_wp_element_namespaceObject.createElement)("span", {
9062      className: "editor-post-publish-panel__link",
9063      key: "label"
9064    }, (0,external_wp_i18n_namespaceObject.__)('Use a post format'))];
9065  
9066    if (!suggestion || suggestion.id === currentPostFormat) {
9067      return null;
9068    }
9069  
9070    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
9071      initialOpen: false,
9072      title: panelBodyTitle
9073    }, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.')), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createElement)(PostFormatSuggestion, {
9074      onUpdatePostFormat: onUpdatePostFormat,
9075      suggestedPostFormat: suggestion.id,
9076      suggestionText: (0,external_wp_i18n_namespaceObject.sprintf)(
9077      /* translators: %s: post format */
9078      (0,external_wp_i18n_namespaceObject.__)('Apply the "%1$s" format.'), suggestion.caption)
9079    })));
9080  }
9081  
9082  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/hierarchical-term-selector.js
9083  
9084  
9085  /**
9086   * External dependencies
9087   */
9088  
9089  /**
9090   * WordPress dependencies
9091   */
9092  
9093  
9094  
9095  
9096  
9097  
9098  
9099  
9100  /**
9101   * Internal dependencies
9102   */
9103  
9104  
9105  
9106  /**
9107   * Module Constants
9108   */
9109  
9110  const hierarchical_term_selector_DEFAULT_QUERY = {
9111    per_page: -1,
9112    orderby: 'name',
9113    order: 'asc',
9114    _fields: 'id,name,parent',
9115    context: 'view'
9116  };
9117  const MIN_TERMS_COUNT_FOR_FILTER = 8;
9118  const hierarchical_term_selector_EMPTY_ARRAY = [];
9119  /**
9120   * Sort Terms by Selected.
9121   *
9122   * @param {Object[]} termsTree Array of terms in tree format.
9123   * @param {number[]} terms     Selected terms.
9124   *
9125   * @return {Object[]} Sorted array of terms.
9126   */
9127  
9128  function sortBySelected(termsTree, terms) {
9129    const treeHasSelection = termTree => {
9130      if (terms.indexOf(termTree.id) !== -1) {
9131        return true;
9132      }
9133  
9134      if (undefined === termTree.children) {
9135        return false;
9136      }
9137  
9138      return termTree.children.map(treeHasSelection).filter(child => child).length > 0;
9139    };
9140  
9141    const termOrChildIsSelected = (termA, termB) => {
9142      const termASelected = treeHasSelection(termA);
9143      const termBSelected = treeHasSelection(termB);
9144  
9145      if (termASelected === termBSelected) {
9146        return 0;
9147      }
9148  
9149      if (termASelected && !termBSelected) {
9150        return -1;
9151      }
9152  
9153      if (!termASelected && termBSelected) {
9154        return 1;
9155      }
9156  
9157      return 0;
9158    };
9159  
9160    const newTermTree = [...termsTree];
9161    newTermTree.sort(termOrChildIsSelected);
9162    return newTermTree;
9163  }
9164  /**
9165   * Find term by parent id or name.
9166   *
9167   * @param {Object[]}      terms  Array of Terms.
9168   * @param {number|string} parent id.
9169   * @param {string}        name   Term name.
9170   * @return {Object} Term object.
9171   */
9172  
9173  function findTerm(terms, parent, name) {
9174    return (0,external_lodash_namespaceObject.find)(terms, term => {
9175      return (!term.parent && !parent || parseInt(term.parent) === parseInt(parent)) && term.name.toLowerCase() === name.toLowerCase();
9176    });
9177  }
9178  /**
9179   * Get filter matcher function.
9180   *
9181   * @param {string} filterValue Filter value.
9182   * @return {(function(Object): (Object|boolean))} Matcher function.
9183   */
9184  
9185  function getFilterMatcher(filterValue) {
9186    const matchTermsForFilter = originalTerm => {
9187      if ('' === filterValue) {
9188        return originalTerm;
9189      } // Shallow clone, because we'll be filtering the term's children and
9190      // don't want to modify the original term.
9191  
9192  
9193      const term = { ...originalTerm
9194      }; // Map and filter the children, recursive so we deal with grandchildren
9195      // and any deeper levels.
9196  
9197      if (term.children.length > 0) {
9198        term.children = term.children.map(matchTermsForFilter).filter(child => child);
9199      } // If the term's name contains the filterValue, or it has children
9200      // (i.e. some child matched at some point in the tree) then return it.
9201  
9202  
9203      if (-1 !== term.name.toLowerCase().indexOf(filterValue.toLowerCase()) || term.children.length > 0) {
9204        return term;
9205      } // Otherwise, return false. After mapping, the list of terms will need
9206      // to have false values filtered out.
9207  
9208  
9209      return false;
9210    };
9211  
9212    return matchTermsForFilter;
9213  }
9214  /**
9215   * Hierarchical term selector.
9216   *
9217   * @param {Object} props      Component props.
9218   * @param {string} props.slug Taxonomy slug.
9219   * @return {WPElement}        Hierarchical term selector component.
9220   */
9221  
9222  function HierarchicalTermSelector(_ref) {
9223    let {
9224      slug
9225    } = _ref;
9226    const [adding, setAdding] = (0,external_wp_element_namespaceObject.useState)(false);
9227    const [formName, setFormName] = (0,external_wp_element_namespaceObject.useState)('');
9228    /**
9229     * @type {[number|'', Function]}
9230     */
9231  
9232    const [formParent, setFormParent] = (0,external_wp_element_namespaceObject.useState)('');
9233    const [showForm, setShowForm] = (0,external_wp_element_namespaceObject.useState)(false);
9234    const [filterValue, setFilterValue] = (0,external_wp_element_namespaceObject.useState)('');
9235    const [filteredTermsTree, setFilteredTermsTree] = (0,external_wp_element_namespaceObject.useState)([]);
9236    const debouncedSpeak = (0,external_wp_compose_namespaceObject.useDebounce)(external_wp_a11y_namespaceObject.speak, 500);
9237    const {
9238      hasCreateAction,
9239      hasAssignAction,
9240      terms,
9241      loading,
9242      availableTerms,
9243      taxonomy
9244    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
9245      const {
9246        getCurrentPost,
9247        getEditedPostAttribute
9248      } = select(store_store);
9249      const {
9250        getTaxonomy,
9251        getEntityRecords,
9252        isResolving
9253      } = select(external_wp_coreData_namespaceObject.store);
9254  
9255      const _taxonomy = getTaxonomy(slug);
9256  
9257      return {
9258        hasCreateAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-create-' + _taxonomy.rest_base], false) : false,
9259        hasAssignAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-assign-' + _taxonomy.rest_base], false) : false,
9260        terms: _taxonomy ? getEditedPostAttribute(_taxonomy.rest_base) : hierarchical_term_selector_EMPTY_ARRAY,
9261        loading: isResolving('getEntityRecords', ['taxonomy', slug, hierarchical_term_selector_DEFAULT_QUERY]),
9262        availableTerms: getEntityRecords('taxonomy', slug, hierarchical_term_selector_DEFAULT_QUERY) || hierarchical_term_selector_EMPTY_ARRAY,
9263        taxonomy: _taxonomy
9264      };
9265    }, [slug]);
9266    const {
9267      editPost
9268    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
9269    const {
9270      saveEntityRecord
9271    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
9272    const availableTermsTree = (0,external_wp_element_namespaceObject.useMemo)(() => sortBySelected(buildTermsTree(availableTerms), terms), // Remove `terms` from the dependency list to avoid reordering every time
9273    // checking or unchecking a term.
9274    [availableTerms]);
9275  
9276    if (!hasAssignAction) {
9277      return null;
9278    }
9279    /**
9280     * Append new term.
9281     *
9282     * @param {Object} term Term object.
9283     * @return {Promise} A promise that resolves to save term object.
9284     */
9285  
9286  
9287    const addTerm = term => {
9288      return saveEntityRecord('taxonomy', slug, term);
9289    };
9290    /**
9291     * Update terms for post.
9292     *
9293     * @param {number[]} termIds Term ids.
9294     */
9295  
9296  
9297    const onUpdateTerms = termIds => {
9298      editPost({
9299        [taxonomy.rest_base]: termIds
9300      });
9301    };
9302    /**
9303     * Handler for checking term.
9304     *
9305     * @param {number} termId
9306     */
9307  
9308  
9309    const onChange = termId => {
9310      const hasTerm = terms.includes(termId);
9311      const newTerms = hasTerm ? (0,external_lodash_namespaceObject.without)(terms, termId) : [...terms, termId];
9312      onUpdateTerms(newTerms);
9313    };
9314  
9315    const onChangeFormName = value => {
9316      setFormName(value);
9317    };
9318    /**
9319     * Handler for changing form parent.
9320     *
9321     * @param {number|''} parentId Parent post id.
9322     */
9323  
9324  
9325    const onChangeFormParent = parentId => {
9326      setFormParent(parentId);
9327    };
9328  
9329    const onToggleForm = () => {
9330      setShowForm(!showForm);
9331    };
9332  
9333    const onAddTerm = async event => {
9334      event.preventDefault();
9335  
9336      if (formName === '' || adding) {
9337        return;
9338      } // Check if the term we are adding already exists.
9339  
9340  
9341      const existingTerm = findTerm(availableTerms, formParent, formName);
9342  
9343      if (existingTerm) {
9344        // If the term we are adding exists but is not selected select it.
9345        if (!(0,external_lodash_namespaceObject.some)(terms, term => term === existingTerm.id)) {
9346          onUpdateTerms([...terms, existingTerm.id]);
9347        }
9348  
9349        setFormName('');
9350        setFormParent('');
9351        return;
9352      }
9353  
9354      setAdding(true);
9355      const newTerm = await addTerm({
9356        name: formName,
9357        parent: formParent ? formParent : undefined
9358      });
9359      const termAddedMessage = (0,external_wp_i18n_namespaceObject.sprintf)(
9360      /* translators: %s: taxonomy name */
9361      (0,external_wp_i18n_namespaceObject._x)('%s added', 'term'), (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'singular_name'], slug === 'category' ? (0,external_wp_i18n_namespaceObject.__)('Category') : (0,external_wp_i18n_namespaceObject.__)('Term')));
9362      (0,external_wp_a11y_namespaceObject.speak)(termAddedMessage, 'assertive');
9363      setAdding(false);
9364      setFormName('');
9365      setFormParent('');
9366      onUpdateTerms([...terms, newTerm.id]);
9367    };
9368  
9369    const setFilter = value => {
9370      const newFilteredTermsTree = availableTermsTree.map(getFilterMatcher(value)).filter(term => term);
9371  
9372      const getResultCount = termsTree => {
9373        let count = 0;
9374  
9375        for (let i = 0; i < termsTree.length; i++) {
9376          count++;
9377  
9378          if (undefined !== termsTree[i].children) {
9379            count += getResultCount(termsTree[i].children);
9380          }
9381        }
9382  
9383        return count;
9384      };
9385  
9386      setFilterValue(value);
9387      setFilteredTermsTree(newFilteredTermsTree);
9388      const resultCount = getResultCount(newFilteredTermsTree);
9389      const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)(
9390      /* translators: %d: number of results */
9391      (0,external_wp_i18n_namespaceObject._n)('%d result found.', '%d results found.', resultCount), resultCount);
9392      debouncedSpeak(resultsFoundMessage, 'assertive');
9393    };
9394  
9395    const renderTerms = renderedTerms => {
9396      return renderedTerms.map(term => {
9397        return (0,external_wp_element_namespaceObject.createElement)("div", {
9398          key: term.id,
9399          className: "editor-post-taxonomies__hierarchical-terms-choice"
9400        }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
9401          checked: terms.indexOf(term.id) !== -1,
9402          onChange: () => {
9403            const termId = parseInt(term.id, 10);
9404            onChange(termId);
9405          },
9406          label: (0,external_lodash_namespaceObject.unescape)(term.name)
9407        }), !!term.children.length && (0,external_wp_element_namespaceObject.createElement)("div", {
9408          className: "editor-post-taxonomies__hierarchical-terms-subchoices"
9409        }, renderTerms(term.children)));
9410      });
9411    };
9412  
9413    const labelWithFallback = (labelProperty, fallbackIsCategory, fallbackIsNotCategory) => (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', labelProperty], slug === 'category' ? fallbackIsCategory : fallbackIsNotCategory);
9414  
9415    const newTermButtonLabel = labelWithFallback('add_new_item', (0,external_wp_i18n_namespaceObject.__)('Add new category'), (0,external_wp_i18n_namespaceObject.__)('Add new term'));
9416    const newTermLabel = labelWithFallback('new_item_name', (0,external_wp_i18n_namespaceObject.__)('Add new category'), (0,external_wp_i18n_namespaceObject.__)('Add new term'));
9417    const parentSelectLabel = labelWithFallback('parent_item', (0,external_wp_i18n_namespaceObject.__)('Parent Category'), (0,external_wp_i18n_namespaceObject.__)('Parent Term'));
9418    const noParentOption = `— $parentSelectLabel} —`;
9419    const newTermSubmitLabel = newTermButtonLabel;
9420    const filterLabel = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'search_items'], (0,external_wp_i18n_namespaceObject.__)('Search Terms'));
9421    const groupLabel = (0,external_lodash_namespaceObject.get)(taxonomy, ['name'], (0,external_wp_i18n_namespaceObject.__)('Terms'));
9422    const showFilter = availableTerms.length >= MIN_TERMS_COUNT_FOR_FILTER;
9423    return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, showFilter && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, {
9424      className: "editor-post-taxonomies__hierarchical-terms-filter",
9425      label: filterLabel,
9426      value: filterValue,
9427      onChange: setFilter
9428    }), (0,external_wp_element_namespaceObject.createElement)("div", {
9429      className: "editor-post-taxonomies__hierarchical-terms-list",
9430      tabIndex: "0",
9431      role: "group",
9432      "aria-label": groupLabel
9433    }, renderTerms('' !== filterValue ? filteredTermsTree : availableTermsTree)), !loading && hasCreateAction && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9434      onClick: onToggleForm,
9435      className: "editor-post-taxonomies__hierarchical-terms-add",
9436      "aria-expanded": showForm,
9437      variant: "link"
9438    }, newTermButtonLabel), showForm && (0,external_wp_element_namespaceObject.createElement)("form", {
9439      onSubmit: onAddTerm
9440    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, {
9441      className: "editor-post-taxonomies__hierarchical-terms-input",
9442      label: newTermLabel,
9443      value: formName,
9444      onChange: onChangeFormName,
9445      required: true
9446    }), !!availableTerms.length && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TreeSelect, {
9447      label: parentSelectLabel,
9448      noOptionLabel: noParentOption,
9449      onChange: onChangeFormParent,
9450      selectedId: formParent,
9451      tree: availableTermsTree
9452    }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9453      variant: "secondary",
9454      type: "submit",
9455      className: "editor-post-taxonomies__hierarchical-terms-submit"
9456    }, newTermSubmitLabel)));
9457  }
9458  
9459  /* harmony default export */ var hierarchical_term_selector = ((0,external_wp_components_namespaceObject.withFilters)('editor.PostTaxonomyType')(HierarchicalTermSelector));
9460  
9461  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/maybe-category-panel.js
9462  
9463  
9464  /**
9465   * External dependencies
9466   */
9467  
9468  /**
9469   * WordPress dependencies
9470   */
9471  
9472  
9473  
9474  
9475  
9476  
9477  /**
9478   * Internal dependencies
9479   */
9480  
9481  
9482  
9483  
9484  function MaybeCategoryPanel() {
9485    const hasNoCategory = (0,external_wp_data_namespaceObject.useSelect)(select => {
9486      var _select$getEntityReco;
9487  
9488      const postType = select(store_store).getCurrentPostType();
9489      const categoriesTaxonomy = select(external_wp_coreData_namespaceObject.store).getTaxonomy('category');
9490      const defaultCategorySlug = 'uncategorized';
9491      const defaultCategory = (_select$getEntityReco = select(external_wp_coreData_namespaceObject.store).getEntityRecords('taxonomy', 'category', {
9492        slug: defaultCategorySlug
9493      })) === null || _select$getEntityReco === void 0 ? void 0 : _select$getEntityReco[0];
9494      const postTypeSupportsCategories = categoriesTaxonomy && (0,external_lodash_namespaceObject.some)(categoriesTaxonomy.types, type => type === postType);
9495      const categories = categoriesTaxonomy && select(store_store).getEditedPostAttribute(categoriesTaxonomy.rest_base); // This boolean should return true if everything is loaded
9496      // ( categoriesTaxonomy, defaultCategory )
9497      // and the post has not been assigned a category different than "uncategorized".
9498  
9499      return !!categoriesTaxonomy && !!defaultCategory && postTypeSupportsCategories && ((categories === null || categories === void 0 ? void 0 : categories.length) === 0 || (categories === null || categories === void 0 ? void 0 : categories.length) === 1 && defaultCategory.id === categories[0]);
9500    }, []);
9501    const [shouldShowPanel, setShouldShowPanel] = (0,external_wp_element_namespaceObject.useState)(false);
9502    (0,external_wp_element_namespaceObject.useEffect)(() => {
9503      // We use state to avoid hiding the panel if the user edits the categories
9504      // and adds one within the panel itself (while visible).
9505      if (hasNoCategory) {
9506        setShouldShowPanel(true);
9507      }
9508    }, [hasNoCategory]);
9509  
9510    if (!shouldShowPanel) {
9511      return null;
9512    }
9513  
9514    const panelBodyTitle = [(0,external_wp_i18n_namespaceObject.__)('Suggestion:'), (0,external_wp_element_namespaceObject.createElement)("span", {
9515      className: "editor-post-publish-panel__link",
9516      key: "label"
9517    }, (0,external_wp_i18n_namespaceObject.__)('Assign a category'))];
9518    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
9519      initialOpen: false,
9520      title: panelBodyTitle
9521    }, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Categories provide a helpful way to group related posts together and to quickly tell readers what a post is about.')), (0,external_wp_element_namespaceObject.createElement)(hierarchical_term_selector, {
9522      slug: "category"
9523    }));
9524  }
9525  
9526  /* harmony default export */ var maybe_category_panel = (MaybeCategoryPanel);
9527  
9528  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/prepublish.js
9529  
9530  
9531  /**
9532   * External dependencies
9533   */
9534  
9535  /**
9536   * WordPress dependencies
9537   */
9538  
9539  
9540  
9541  
9542  
9543  
9544  
9545  
9546  /**
9547   * Internal dependencies
9548   */
9549  
9550  
9551  
9552  
9553  
9554  
9555  
9556  
9557  
9558  
9559  function PostPublishPanelPrepublish(_ref) {
9560    let {
9561      children
9562    } = _ref;
9563    const {
9564      isBeingScheduled,
9565      isRequestingSiteIcon,
9566      hasPublishAction,
9567      siteIconUrl,
9568      siteTitle,
9569      siteHome
9570    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
9571      const {
9572        getCurrentPost,
9573        isEditedPostBeingScheduled
9574      } = select(store_store);
9575      const {
9576        getEntityRecord,
9577        isResolving
9578      } = select(external_wp_coreData_namespaceObject.store);
9579      const siteData = getEntityRecord('root', '__unstableBase', undefined) || {};
9580      return {
9581        hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
9582        isBeingScheduled: isEditedPostBeingScheduled(),
9583        isRequestingSiteIcon: isResolving('getEntityRecord', ['root', '__unstableBase', undefined]),
9584        siteIconUrl: siteData.site_icon_url,
9585        siteTitle: siteData.name,
9586        siteHome: siteData.home && (0,external_wp_url_namespaceObject.filterURLForDisplay)(siteData.home)
9587      };
9588    }, []);
9589    let siteIcon = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, {
9590      className: "components-site-icon",
9591      size: "36px",
9592      icon: library_wordpress
9593    });
9594  
9595    if (siteIconUrl) {
9596      siteIcon = (0,external_wp_element_namespaceObject.createElement)("img", {
9597        alt: (0,external_wp_i18n_namespaceObject.__)('Site Icon'),
9598        className: "components-site-icon",
9599        src: siteIconUrl
9600      });
9601    }
9602  
9603    if (isRequestingSiteIcon) {
9604      siteIcon = null;
9605    }
9606  
9607    let prePublishTitle, prePublishBodyText;
9608  
9609    if (!hasPublishAction) {
9610      prePublishTitle = (0,external_wp_i18n_namespaceObject.__)('Are you ready to submit for review?');
9611      prePublishBodyText = (0,external_wp_i18n_namespaceObject.__)('When you’re ready, submit your work for review, and an Editor will be able to approve it for you.');
9612    } else if (isBeingScheduled) {
9613      prePublishTitle = (0,external_wp_i18n_namespaceObject.__)('Are you ready to schedule?');
9614      prePublishBodyText = (0,external_wp_i18n_namespaceObject.__)('Your work will be published at the specified date and time.');
9615    } else {
9616      prePublishTitle = (0,external_wp_i18n_namespaceObject.__)('Are you ready to publish?');
9617      prePublishBodyText = (0,external_wp_i18n_namespaceObject.__)('Double-check your settings before publishing.');
9618    }
9619  
9620    return (0,external_wp_element_namespaceObject.createElement)("div", {
9621      className: "editor-post-publish-panel__prepublish"
9622    }, (0,external_wp_element_namespaceObject.createElement)("div", null, (0,external_wp_element_namespaceObject.createElement)("strong", null, prePublishTitle)), (0,external_wp_element_namespaceObject.createElement)("p", null, prePublishBodyText), (0,external_wp_element_namespaceObject.createElement)("div", {
9623      className: "components-site-card"
9624    }, siteIcon, (0,external_wp_element_namespaceObject.createElement)("div", {
9625      className: "components-site-info"
9626    }, (0,external_wp_element_namespaceObject.createElement)("span", {
9627      className: "components-site-name"
9628    }, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle) || (0,external_wp_i18n_namespaceObject.__)('(Untitled)')), (0,external_wp_element_namespaceObject.createElement)("span", {
9629      className: "components-site-home"
9630    }, siteHome))), hasPublishAction && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
9631      initialOpen: false,
9632      title: [(0,external_wp_i18n_namespaceObject.__)('Visibility:'), (0,external_wp_element_namespaceObject.createElement)("span", {
9633        className: "editor-post-publish-panel__link",
9634        key: "label"
9635      }, (0,external_wp_element_namespaceObject.createElement)(post_visibility_label, null))]
9636    }, (0,external_wp_element_namespaceObject.createElement)(post_visibility, null)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
9637      initialOpen: false,
9638      title: [(0,external_wp_i18n_namespaceObject.__)('Publish:'), (0,external_wp_element_namespaceObject.createElement)("span", {
9639        className: "editor-post-publish-panel__link",
9640        key: "label"
9641      }, (0,external_wp_element_namespaceObject.createElement)(post_schedule_label, null))]
9642    }, (0,external_wp_element_namespaceObject.createElement)(PostSchedule, null))), (0,external_wp_element_namespaceObject.createElement)(PostFormatPanel, null), (0,external_wp_element_namespaceObject.createElement)(maybe_tags_panel, null), (0,external_wp_element_namespaceObject.createElement)(maybe_category_panel, null), children);
9643  }
9644  
9645  /* harmony default export */ var prepublish = (PostPublishPanelPrepublish);
9646  
9647  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/postpublish.js
9648  
9649  
9650  /**
9651   * External dependencies
9652   */
9653  
9654  /**
9655   * WordPress dependencies
9656   */
9657  
9658  
9659  
9660  
9661  
9662  
9663  
9664  
9665  
9666  /**
9667   * Internal dependencies
9668   */
9669  
9670  
9671  
9672  const POSTNAME = '%postname%';
9673  /**
9674   * Returns URL for a future post.
9675   *
9676   * @param {Object} post Post object.
9677   *
9678   * @return {string} PostPublish URL.
9679   */
9680  
9681  const getFuturePostUrl = post => {
9682    const {
9683      slug
9684    } = post;
9685  
9686    if (post.permalink_template.includes(POSTNAME)) {
9687      return post.permalink_template.replace(POSTNAME, slug);
9688    }
9689  
9690    return post.permalink_template;
9691  };
9692  
9693  function postpublish_CopyButton(_ref) {
9694    let {
9695      text,
9696      onCopy,
9697      children
9698    } = _ref;
9699    const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(text, onCopy);
9700    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9701      variant: "secondary",
9702      ref: ref
9703    }, children);
9704  }
9705  
9706  class PostPublishPanelPostpublish extends external_wp_element_namespaceObject.Component {
9707    constructor() {
9708      super(...arguments);
9709      this.state = {
9710        showCopyConfirmation: false
9711      };
9712      this.onCopy = this.onCopy.bind(this);
9713      this.onSelectInput = this.onSelectInput.bind(this);
9714      this.postLink = (0,external_wp_element_namespaceObject.createRef)();
9715    }
9716  
9717    componentDidMount() {
9718      if (this.props.focusOnMount) {
9719        this.postLink.current.focus();
9720      }
9721    }
9722  
9723    componentWillUnmount() {
9724      clearTimeout(this.dismissCopyConfirmation);
9725    }
9726  
9727    onCopy() {
9728      this.setState({
9729        showCopyConfirmation: true
9730      });
9731      clearTimeout(this.dismissCopyConfirmation);
9732      this.dismissCopyConfirmation = setTimeout(() => {
9733        this.setState({
9734          showCopyConfirmation: false
9735        });
9736      }, 4000);
9737    }
9738  
9739    onSelectInput(event) {
9740      event.target.select();
9741    }
9742  
9743    render() {
9744      const {
9745        children,
9746        isScheduled,
9747        post,
9748        postType
9749      } = this.props;
9750      const postLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'singular_name']);
9751      const viewPostLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'view_item']);
9752      const addNewPostLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'add_new_item']);
9753      const link = post.status === 'future' ? getFuturePostUrl(post) : post.link;
9754      const addLink = (0,external_wp_url_namespaceObject.addQueryArgs)('post-new.php', {
9755        post_type: post.type
9756      });
9757      const postPublishNonLinkHeader = isScheduled ? (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_i18n_namespaceObject.__)('is now scheduled. It will go live on'), ' ', (0,external_wp_element_namespaceObject.createElement)(post_schedule_label, null), ".") : (0,external_wp_i18n_namespaceObject.__)('is now live.');
9758      return (0,external_wp_element_namespaceObject.createElement)("div", {
9759        className: "post-publish-panel__postpublish"
9760      }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, {
9761        className: "post-publish-panel__postpublish-header"
9762      }, (0,external_wp_element_namespaceObject.createElement)("a", {
9763        ref: this.postLink,
9764        href: link
9765      }, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(post.title) || (0,external_wp_i18n_namespaceObject.__)('(no title)')), ' ', postPublishNonLinkHeader), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, null, (0,external_wp_element_namespaceObject.createElement)("p", {
9766        className: "post-publish-panel__postpublish-subheader"
9767      }, (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_i18n_namespaceObject.__)('What’s next?'))), (0,external_wp_element_namespaceObject.createElement)("div", {
9768        className: "post-publish-panel__postpublish-post-address-container"
9769      }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, {
9770        className: "post-publish-panel__postpublish-post-address",
9771        readOnly: true,
9772        label: (0,external_wp_i18n_namespaceObject.sprintf)(
9773        /* translators: %s: post type singular name */
9774        (0,external_wp_i18n_namespaceObject.__)('%s address'), postLabel),
9775        value: (0,external_wp_url_namespaceObject.safeDecodeURIComponent)(link),
9776        onFocus: this.onSelectInput
9777      }), (0,external_wp_element_namespaceObject.createElement)("div", {
9778        className: "post-publish-panel__postpublish-post-address__copy-button-wrap"
9779      }, (0,external_wp_element_namespaceObject.createElement)(postpublish_CopyButton, {
9780        text: link,
9781        onCopy: this.onCopy
9782      }, this.state.showCopyConfirmation ? (0,external_wp_i18n_namespaceObject.__)('Copied!') : (0,external_wp_i18n_namespaceObject.__)('Copy')))), (0,external_wp_element_namespaceObject.createElement)("div", {
9783        className: "post-publish-panel__postpublish-buttons"
9784      }, !isScheduled && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9785        variant: "primary",
9786        href: link
9787      }, viewPostLabel), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9788        variant: isScheduled ? 'primary' : 'secondary',
9789        href: addLink
9790      }, addNewPostLabel))), children);
9791    }
9792  
9793  }
9794  
9795  /* harmony default export */ var postpublish = ((0,external_wp_data_namespaceObject.withSelect)(select => {
9796    const {
9797      getEditedPostAttribute,
9798      getCurrentPost,
9799      isCurrentPostScheduled
9800    } = select(store_store);
9801    const {
9802      getPostType
9803    } = select(external_wp_coreData_namespaceObject.store);
9804    return {
9805      post: getCurrentPost(),
9806      postType: getPostType(getEditedPostAttribute('type')),
9807      isScheduled: isCurrentPostScheduled()
9808    };
9809  })(PostPublishPanelPostpublish));
9810  
9811  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/index.js
9812  
9813  
9814  
9815  /**
9816   * External dependencies
9817   */
9818  
9819  /**
9820   * WordPress dependencies
9821   */
9822  
9823  
9824  
9825  
9826  
9827  
9828  
9829  
9830  /**
9831   * Internal dependencies
9832   */
9833  
9834  
9835  
9836  
9837  
9838  class PostPublishPanel extends external_wp_element_namespaceObject.Component {
9839    constructor() {
9840      super(...arguments);
9841      this.onSubmit = this.onSubmit.bind(this);
9842    }
9843  
9844    componentDidUpdate(prevProps) {
9845      // Automatically collapse the publish sidebar when a post
9846      // is published and the user makes an edit.
9847      if (prevProps.isPublished && !this.props.isSaving && this.props.isDirty) {
9848        this.props.onClose();
9849      }
9850    }
9851  
9852    onSubmit() {
9853      const {
9854        onClose,
9855        hasPublishAction,
9856        isPostTypeViewable
9857      } = this.props;
9858  
9859      if (!hasPublishAction || !isPostTypeViewable) {
9860        onClose();
9861      }
9862    }
9863  
9864    render() {
9865      const {
9866        forceIsDirty,
9867        forceIsSaving,
9868        isBeingScheduled,
9869        isPublished,
9870        isPublishSidebarEnabled,
9871        isScheduled,
9872        isSaving,
9873        isSavingNonPostEntityChanges,
9874        onClose,
9875        onTogglePublishSidebar,
9876        PostPublishExtension,
9877        PrePublishExtension,
9878        ...additionalProps
9879      } = this.props;
9880      const propsForPanel = (0,external_lodash_namespaceObject.omit)(additionalProps, ['hasPublishAction', 'isDirty', 'isPostTypeViewable']);
9881      const isPublishedOrScheduled = isPublished || isScheduled && isBeingScheduled;
9882      const isPrePublish = !isPublishedOrScheduled && !isSaving;
9883      const isPostPublish = isPublishedOrScheduled && !isSaving;
9884      return (0,external_wp_element_namespaceObject.createElement)("div", _extends({
9885        className: "editor-post-publish-panel"
9886      }, propsForPanel), (0,external_wp_element_namespaceObject.createElement)("div", {
9887        className: "editor-post-publish-panel__header"
9888      }, isPostPublish ? (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9889        onClick: onClose,
9890        icon: close_small,
9891        label: (0,external_wp_i18n_namespaceObject.__)('Close panel')
9892      }) : (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("div", {
9893        className: "editor-post-publish-panel__header-publish-button"
9894      }, (0,external_wp_element_namespaceObject.createElement)(post_publish_button, {
9895        focusOnMount: true,
9896        onSubmit: this.onSubmit,
9897        forceIsDirty: forceIsDirty,
9898        forceIsSaving: forceIsSaving
9899      })), (0,external_wp_element_namespaceObject.createElement)("div", {
9900        className: "editor-post-publish-panel__header-cancel-button"
9901      }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
9902        disabled: isSavingNonPostEntityChanges,
9903        onClick: onClose,
9904        variant: "secondary"
9905      }, (0,external_wp_i18n_namespaceObject.__)('Cancel'))))), (0,external_wp_element_namespaceObject.createElement)("div", {
9906        className: "editor-post-publish-panel__content"
9907      }, isPrePublish && (0,external_wp_element_namespaceObject.createElement)(prepublish, null, PrePublishExtension && (0,external_wp_element_namespaceObject.createElement)(PrePublishExtension, null)), isPostPublish && (0,external_wp_element_namespaceObject.createElement)(postpublish, {
9908        focusOnMount: true
9909      }, PostPublishExtension && (0,external_wp_element_namespaceObject.createElement)(PostPublishExtension, null)), isSaving && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)), (0,external_wp_element_namespaceObject.createElement)("div", {
9910        className: "editor-post-publish-panel__footer"
9911      }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
9912        label: (0,external_wp_i18n_namespaceObject.__)('Always show pre-publish checks.'),
9913        checked: isPublishSidebarEnabled,
9914        onChange: onTogglePublishSidebar
9915      })));
9916    }
9917  
9918  }
9919  /* harmony default export */ var post_publish_panel = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
9920    const {
9921      getPostType
9922    } = select(external_wp_coreData_namespaceObject.store);
9923    const {
9924      getCurrentPost,
9925      getEditedPostAttribute,
9926      isCurrentPostPublished,
9927      isCurrentPostScheduled,
9928      isEditedPostBeingScheduled,
9929      isEditedPostDirty,
9930      isSavingPost,
9931      isSavingNonPostEntityChanges
9932    } = select(store_store);
9933    const {
9934      isPublishSidebarEnabled
9935    } = select(store_store);
9936    const postType = getPostType(getEditedPostAttribute('type'));
9937    return {
9938      hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
9939      isPostTypeViewable: (0,external_lodash_namespaceObject.get)(postType, ['viewable'], false),
9940      isBeingScheduled: isEditedPostBeingScheduled(),
9941      isDirty: isEditedPostDirty(),
9942      isPublished: isCurrentPostPublished(),
9943      isPublishSidebarEnabled: isPublishSidebarEnabled(),
9944      isSaving: isSavingPost(),
9945      isSavingNonPostEntityChanges: isSavingNonPostEntityChanges(),
9946      isScheduled: isCurrentPostScheduled()
9947    };
9948  }), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, _ref) => {
9949    let {
9950      isPublishSidebarEnabled
9951    } = _ref;
9952    const {
9953      disablePublishSidebar,
9954      enablePublishSidebar
9955    } = dispatch(store_store);
9956    return {
9957      onTogglePublishSidebar: () => {
9958        if (isPublishSidebarEnabled) {
9959          disablePublishSidebar();
9960        } else {
9961          enablePublishSidebar();
9962        }
9963      }
9964    };
9965  }), external_wp_components_namespaceObject.withFocusReturn, external_wp_components_namespaceObject.withConstrainedTabbing])(PostPublishPanel));
9966  
9967  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/cloud-upload.js
9968  
9969  
9970  /**
9971   * WordPress dependencies
9972   */
9973  
9974  const cloudUpload = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
9975    xmlns: "http://www.w3.org/2000/svg",
9976    viewBox: "0 0 24 24"
9977  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
9978    d: "M17.3 10.1c0-2.5-2.1-4.4-4.8-4.4-2.2 0-4.1 1.4-4.6 3.3h-.2C5.7 9 4 10.7 4 12.8c0 2.1 1.7 3.8 3.7 3.8h9c1.8 0 3.2-1.5 3.2-3.3.1-1.6-1.1-2.9-2.6-3.2zm-.5 5.1h-4v-2.4L14 14l1-1-3-3-3 3 1 1 1.2-1.2v2.4H7.7c-1.2 0-2.2-1.1-2.2-2.3s1-2.4 2.2-2.4H9l.3-1.1c.4-1.3 1.7-2.2 3.2-2.2 1.8 0 3.3 1.3 3.3 2.9v1.3l1.3.2c.8.1 1.4.9 1.4 1.8 0 1-.8 1.8-1.7 1.8z"
9979  }));
9980  /* harmony default export */ var cloud_upload = (cloudUpload);
9981  
9982  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/icon/index.js
9983  /**
9984   * WordPress dependencies
9985   */
9986  
9987  /** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */
9988  
9989  /**
9990   * Return an SVG icon.
9991   *
9992   * @param {IconProps} props icon is the SVG component to render
9993   *                          size is a number specifiying the icon size in pixels
9994   *                          Other props will be passed to wrapped SVG component
9995   *
9996   * @return {JSX.Element}  Icon component
9997   */
9998  
9999  function Icon(_ref) {
10000    let {
10001      icon,
10002      size = 24,
10003      ...props
10004    } = _ref;
10005    return (0,external_wp_element_namespaceObject.cloneElement)(icon, {
10006      width: size,
10007      height: size,
10008      ...props
10009    });
10010  }
10011  
10012  /* harmony default export */ var icon = (Icon);
10013  
10014  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/check.js
10015  
10016  
10017  /**
10018   * WordPress dependencies
10019   */
10020  
10021  const check_check = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
10022    xmlns: "http://www.w3.org/2000/svg",
10023    viewBox: "0 0 24 24"
10024  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
10025    d: "M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"
10026  }));
10027  /* harmony default export */ var library_check = (check_check);
10028  
10029  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/cloud.js
10030  
10031  
10032  /**
10033   * WordPress dependencies
10034   */
10035  
10036  const cloud = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
10037    xmlns: "http://www.w3.org/2000/svg",
10038    viewBox: "0 0 24 24"
10039  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
10040    d: "M17.3 10.1c0-2.5-2.1-4.4-4.8-4.4-2.2 0-4.1 1.4-4.6 3.3h-.2C5.7 9 4 10.7 4 12.8c0 2.1 1.7 3.8 3.7 3.8h9c1.8 0 3.2-1.5 3.2-3.3.1-1.6-1.1-2.9-2.6-3.2zm-.5 5.1h-9c-1.2 0-2.2-1.1-2.2-2.3s1-2.4 2.2-2.4h1.3l.3-1.1c.4-1.3 1.7-2.2 3.2-2.2 1.8 0 3.3 1.3 3.3 2.9v1.3l1.3.2c.8.1 1.4.9 1.4 1.8-.1 1-.9 1.8-1.8 1.8z"
10041  }));
10042  /* harmony default export */ var library_cloud = (cloud);
10043  
10044  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-switch-to-draft-button/index.js
10045  
10046  
10047  /**
10048   * WordPress dependencies
10049   */
10050  
10051  
10052  
10053  
10054  
10055  /**
10056   * Internal dependencies
10057   */
10058  
10059  
10060  
10061  function PostSwitchToDraftButton(_ref) {
10062    let {
10063      isSaving,
10064      isPublished,
10065      isScheduled,
10066      onClick
10067    } = _ref;
10068    const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small', '<');
10069    const [showConfirmDialog, setShowConfirmDialog] = (0,external_wp_element_namespaceObject.useState)(false);
10070  
10071    if (!isPublished && !isScheduled) {
10072      return null;
10073    }
10074  
10075    let alertMessage;
10076  
10077    if (isPublished) {
10078      alertMessage = (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to unpublish this post?');
10079    } else if (isScheduled) {
10080      alertMessage = (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to unschedule this post?');
10081    }
10082  
10083    const handleConfirm = () => {
10084      setShowConfirmDialog(false);
10085      onClick();
10086    };
10087  
10088    return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
10089      className: "editor-post-switch-to-draft",
10090      onClick: () => {
10091        setShowConfirmDialog(true);
10092      },
10093      disabled: isSaving,
10094      variant: "tertiary"
10095    }, isMobileViewport ? (0,external_wp_i18n_namespaceObject.__)('Draft') : (0,external_wp_i18n_namespaceObject.__)('Switch to draft')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
10096      isOpen: showConfirmDialog,
10097      onConfirm: handleConfirm,
10098      onCancel: () => setShowConfirmDialog(false)
10099    }, alertMessage));
10100  }
10101  
10102  /* harmony default export */ var post_switch_to_draft_button = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10103    const {
10104      isSavingPost,
10105      isCurrentPostPublished,
10106      isCurrentPostScheduled
10107    } = select(store_store);
10108    return {
10109      isSaving: isSavingPost(),
10110      isPublished: isCurrentPostPublished(),
10111      isScheduled: isCurrentPostScheduled()
10112    };
10113  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => {
10114    const {
10115      editPost,
10116      savePost
10117    } = dispatch(store_store);
10118    return {
10119      onClick: () => {
10120        editPost({
10121          status: 'draft'
10122        });
10123        savePost();
10124      }
10125    };
10126  })])(PostSwitchToDraftButton));
10127  
10128  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-saved-state/index.js
10129  
10130  
10131  /**
10132   * External dependencies
10133   */
10134  
10135  /**
10136   * WordPress dependencies
10137   */
10138  
10139  
10140  
10141  
10142  
10143  
10144  
10145  
10146  /**
10147   * Internal dependencies
10148   */
10149  
10150  
10151  
10152  /**
10153   * Component showing whether the post is saved or not and providing save
10154   * buttons.
10155   *
10156   * @param {Object}   props                Component props.
10157   * @param {?boolean} props.forceIsDirty   Whether to force the post to be marked
10158   *                                        as dirty.
10159   * @param {?boolean} props.forceIsSaving  Whether to force the post to be marked
10160   *                                        as being saved.
10161   * @param {?boolean} props.showIconLabels Whether interface buttons show labels instead of icons
10162   * @return {import('@wordpress/element').WPComponent} The component.
10163   */
10164  
10165  function PostSavedState(_ref) {
10166    let {
10167      forceIsDirty,
10168      forceIsSaving,
10169      showIconLabels = false
10170    } = _ref;
10171    const [forceSavedMessage, setForceSavedMessage] = (0,external_wp_element_namespaceObject.useState)(false);
10172    const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small');
10173    const {
10174      isAutosaving,
10175      isDirty,
10176      isNew,
10177      isPending,
10178      isPublished,
10179      isSaveable,
10180      isSaving,
10181      isScheduled,
10182      hasPublishAction
10183    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
10184      var _getCurrentPost$_link, _getCurrentPost, _getCurrentPost$_link2;
10185  
10186      const {
10187        isEditedPostNew,
10188        isCurrentPostPublished,
10189        isCurrentPostScheduled,
10190        isEditedPostDirty,
10191        isSavingPost,
10192        isEditedPostSaveable,
10193        getCurrentPost,
10194        isAutosavingPost,
10195        getEditedPostAttribute
10196      } = select(store_store);
10197      return {
10198        isAutosaving: isAutosavingPost(),
10199        isDirty: forceIsDirty || isEditedPostDirty(),
10200        isNew: isEditedPostNew(),
10201        isPending: 'pending' === getEditedPostAttribute('status'),
10202        isPublished: isCurrentPostPublished(),
10203        isSaving: forceIsSaving || isSavingPost(),
10204        isSaveable: isEditedPostSaveable(),
10205        isScheduled: isCurrentPostScheduled(),
10206        hasPublishAction: (_getCurrentPost$_link = (_getCurrentPost = getCurrentPost()) === null || _getCurrentPost === void 0 ? void 0 : (_getCurrentPost$_link2 = _getCurrentPost._links) === null || _getCurrentPost$_link2 === void 0 ? void 0 : _getCurrentPost$_link2['wp:action-publish']) !== null && _getCurrentPost$_link !== void 0 ? _getCurrentPost$_link : false
10207      };
10208    }, [forceIsDirty, forceIsSaving]);
10209    const {
10210      savePost
10211    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
10212    const wasSaving = (0,external_wp_compose_namespaceObject.usePrevious)(isSaving);
10213    (0,external_wp_element_namespaceObject.useEffect)(() => {
10214      let timeoutId;
10215  
10216      if (wasSaving && !isSaving) {
10217        setForceSavedMessage(true);
10218        timeoutId = setTimeout(() => {
10219          setForceSavedMessage(false);
10220        }, 1000);
10221      }
10222  
10223      return () => clearTimeout(timeoutId);
10224    }, [isSaving]); // Once the post has been submitted for review this button
10225    // is not needed for the contributor role.
10226  
10227    if (!hasPublishAction && isPending) {
10228      return null;
10229    }
10230  
10231    if (isPublished || isScheduled) {
10232      return (0,external_wp_element_namespaceObject.createElement)(post_switch_to_draft_button, null);
10233    }
10234    /* translators: button label text should, if possible, be under 16 characters. */
10235  
10236  
10237    const label = isPending ? (0,external_wp_i18n_namespaceObject.__)('Save as pending') : (0,external_wp_i18n_namespaceObject.__)('Save draft');
10238    /* translators: button label text should, if possible, be under 16 characters. */
10239  
10240    const shortLabel = (0,external_wp_i18n_namespaceObject.__)('Save');
10241  
10242    const isSaved = forceSavedMessage || !isNew && !isDirty;
10243    const isSavedState = isSaving || isSaved;
10244    const isDisabled = isSaving || isSaved || !isSaveable;
10245    let text;
10246  
10247    if (isSaving) {
10248      text = isAutosaving ? (0,external_wp_i18n_namespaceObject.__)('Autosaving') : (0,external_wp_i18n_namespaceObject.__)('Saving');
10249    } else if (isSaved) {
10250      text = (0,external_wp_i18n_namespaceObject.__)('Saved');
10251    } else if (isLargeViewport) {
10252      text = label;
10253    } else if (showIconLabels) {
10254      text = shortLabel;
10255    } // Use common Button instance for all saved states so that focus is not
10256    // lost.
10257  
10258  
10259    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
10260      className: isSaveable || isSaving ? classnames_default()({
10261        'editor-post-save-draft': !isSavedState,
10262        'editor-post-saved-state': isSavedState,
10263        'is-saving': isSaving,
10264        'is-autosaving': isAutosaving,
10265        'is-saved': isSaved,
10266        [(0,external_wp_components_namespaceObject.__unstableGetAnimateClassName)({
10267          type: 'loading'
10268        })]: isSaving
10269      }) : undefined,
10270      onClick: isDisabled ? undefined : () => savePost(),
10271      shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('s'),
10272      variant: isLargeViewport ? 'tertiary' : undefined,
10273      icon: isLargeViewport ? undefined : cloud_upload,
10274      label: showIconLabels ? undefined : label,
10275      "aria-disabled": isDisabled
10276    }, isSavedState && (0,external_wp_element_namespaceObject.createElement)(icon, {
10277      icon: isSaved ? library_check : library_cloud
10278    }), text);
10279  }
10280  
10281  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-schedule/check.js
10282  /**
10283   * External dependencies
10284   */
10285  
10286  /**
10287   * WordPress dependencies
10288   */
10289  
10290  
10291  
10292  /**
10293   * Internal dependencies
10294   */
10295  
10296  
10297  function PostScheduleCheck(_ref) {
10298    let {
10299      hasPublishAction,
10300      children
10301    } = _ref;
10302  
10303    if (!hasPublishAction) {
10304      return null;
10305    }
10306  
10307    return children;
10308  }
10309  /* harmony default export */ var post_schedule_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10310    const {
10311      getCurrentPost,
10312      getCurrentPostType
10313    } = select(store_store);
10314    return {
10315      hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
10316      postType: getCurrentPostType()
10317    };
10318  })])(PostScheduleCheck));
10319  
10320  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-slug/check.js
10321  
10322  
10323  /**
10324   * Internal dependencies
10325   */
10326  
10327  function PostSlugCheck(_ref) {
10328    let {
10329      children
10330    } = _ref;
10331    return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, {
10332      supportKeys: "slug"
10333    }, children);
10334  }
10335  
10336  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-slug/index.js
10337  
10338  
10339  /**
10340   * WordPress dependencies
10341   */
10342  
10343  
10344  
10345  
10346  
10347  /**
10348   * Internal dependencies
10349   */
10350  
10351  
10352  
10353  class PostSlug extends external_wp_element_namespaceObject.Component {
10354    constructor(_ref) {
10355      let {
10356        postSlug,
10357        postTitle,
10358        postID
10359      } = _ref;
10360      super(...arguments);
10361      this.state = {
10362        editedSlug: (0,external_wp_url_namespaceObject.safeDecodeURIComponent)(postSlug) || (0,external_wp_url_namespaceObject.cleanForSlug)(postTitle) || postID
10363      };
10364      this.setSlug = this.setSlug.bind(this);
10365    }
10366  
10367    setSlug(event) {
10368      const {
10369        postSlug,
10370        onUpdateSlug
10371      } = this.props;
10372      const {
10373        value
10374      } = event.target;
10375      const editedSlug = (0,external_wp_url_namespaceObject.cleanForSlug)(value);
10376  
10377      if (editedSlug === postSlug) {
10378        return;
10379      }
10380  
10381      onUpdateSlug(editedSlug);
10382    }
10383  
10384    render() {
10385      const {
10386        instanceId
10387      } = this.props;
10388      const {
10389        editedSlug
10390      } = this.state;
10391      const inputId = 'editor-post-slug-' + instanceId;
10392      return (0,external_wp_element_namespaceObject.createElement)(PostSlugCheck, null, (0,external_wp_element_namespaceObject.createElement)("label", {
10393        htmlFor: inputId
10394      }, (0,external_wp_i18n_namespaceObject.__)('Slug')), (0,external_wp_element_namespaceObject.createElement)("input", {
10395        autoComplete: "off",
10396        spellCheck: "false",
10397        type: "text",
10398        id: inputId,
10399        value: editedSlug,
10400        onChange: event => this.setState({
10401          editedSlug: event.target.value
10402        }),
10403        onBlur: this.setSlug,
10404        className: "editor-post-slug__input"
10405      }));
10406    }
10407  
10408  }
10409  /* harmony default export */ var post_slug = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10410    const {
10411      getCurrentPost,
10412      getEditedPostAttribute
10413    } = select(store_store);
10414    const {
10415      id
10416    } = getCurrentPost();
10417    return {
10418      postSlug: getEditedPostAttribute('slug'),
10419      postTitle: getEditedPostAttribute('title'),
10420      postID: id
10421    };
10422  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => {
10423    const {
10424      editPost
10425    } = dispatch(store_store);
10426    return {
10427      onUpdateSlug(slug) {
10428        editPost({
10429          slug
10430        });
10431      }
10432  
10433    };
10434  }), external_wp_compose_namespaceObject.withInstanceId])(PostSlug));
10435  
10436  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-sticky/check.js
10437  /**
10438   * External dependencies
10439   */
10440  
10441  /**
10442   * WordPress dependencies
10443   */
10444  
10445  
10446  
10447  /**
10448   * Internal dependencies
10449   */
10450  
10451  
10452  function PostStickyCheck(_ref) {
10453    let {
10454      hasStickyAction,
10455      postType,
10456      children
10457    } = _ref;
10458  
10459    if (postType !== 'post' || !hasStickyAction) {
10460      return null;
10461    }
10462  
10463    return children;
10464  }
10465  /* harmony default export */ var post_sticky_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10466    const post = select(store_store).getCurrentPost();
10467    return {
10468      hasStickyAction: (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-sticky'], false),
10469      postType: select(store_store).getCurrentPostType()
10470    };
10471  })])(PostStickyCheck));
10472  
10473  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-sticky/index.js
10474  
10475  
10476  /**
10477   * WordPress dependencies
10478   */
10479  
10480  
10481  
10482  
10483  /**
10484   * Internal dependencies
10485   */
10486  
10487  
10488  
10489  function PostSticky(_ref) {
10490    let {
10491      onUpdateSticky,
10492      postSticky = false
10493    } = _ref;
10494    return (0,external_wp_element_namespaceObject.createElement)(post_sticky_check, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, {
10495      label: (0,external_wp_i18n_namespaceObject.__)('Stick to the top of the blog'),
10496      checked: postSticky,
10497      onChange: () => onUpdateSticky(!postSticky)
10498    }));
10499  }
10500  /* harmony default export */ var post_sticky = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10501    return {
10502      postSticky: select(store_store).getEditedPostAttribute('sticky')
10503    };
10504  }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => {
10505    return {
10506      onUpdateSticky(postSticky) {
10507        dispatch(store_store).editPost({
10508          sticky: postSticky
10509        });
10510      }
10511  
10512    };
10513  })])(PostSticky));
10514  
10515  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/index.js
10516  
10517  
10518  /**
10519   * External dependencies
10520   */
10521  
10522  /**
10523   * WordPress dependencies
10524   */
10525  
10526  
10527  
10528  
10529  
10530  /**
10531   * Internal dependencies
10532   */
10533  
10534  
10535  
10536  
10537  function PostTaxonomies(_ref) {
10538    let {
10539      postType,
10540      taxonomies,
10541      taxonomyWrapper = external_lodash_namespaceObject.identity
10542    } = _ref;
10543    const availableTaxonomies = (0,external_lodash_namespaceObject.filter)(taxonomies, taxonomy => (0,external_lodash_namespaceObject.includes)(taxonomy.types, postType));
10544    const visibleTaxonomies = (0,external_lodash_namespaceObject.filter)(availableTaxonomies, // In some circumstances .visibility can end up as undefined so optional chaining operator required.
10545    // https://github.com/WordPress/gutenberg/issues/40326
10546    taxonomy => {
10547      var _taxonomy$visibility;
10548  
10549      return (_taxonomy$visibility = taxonomy.visibility) === null || _taxonomy$visibility === void 0 ? void 0 : _taxonomy$visibility.show_ui;
10550    });
10551    return visibleTaxonomies.map(taxonomy => {
10552      const TaxonomyComponent = taxonomy.hierarchical ? hierarchical_term_selector : flat_term_selector;
10553      return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, {
10554        key: `taxonomy-$taxonomy.slug}`
10555      }, taxonomyWrapper((0,external_wp_element_namespaceObject.createElement)(TaxonomyComponent, {
10556        slug: taxonomy.slug
10557      }), taxonomy));
10558    });
10559  }
10560  /* harmony default export */ var post_taxonomies = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10561    return {
10562      postType: select(store_store).getCurrentPostType(),
10563      taxonomies: select(external_wp_coreData_namespaceObject.store).getTaxonomies({
10564        per_page: -1
10565      })
10566    };
10567  })])(PostTaxonomies));
10568  
10569  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/check.js
10570  /**
10571   * External dependencies
10572   */
10573  
10574  /**
10575   * WordPress dependencies
10576   */
10577  
10578  
10579  
10580  
10581  /**
10582   * Internal dependencies
10583   */
10584  
10585  
10586  function PostTaxonomiesCheck(_ref) {
10587    let {
10588      postType,
10589      taxonomies,
10590      children
10591    } = _ref;
10592    const hasTaxonomies = (0,external_lodash_namespaceObject.some)(taxonomies, taxonomy => (0,external_lodash_namespaceObject.includes)(taxonomy.types, postType));
10593  
10594    if (!hasTaxonomies) {
10595      return null;
10596    }
10597  
10598    return children;
10599  }
10600  /* harmony default export */ var post_taxonomies_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
10601    return {
10602      postType: select(store_store).getCurrentPostType(),
10603      taxonomies: select(external_wp_coreData_namespaceObject.store).getTaxonomies({
10604        per_page: -1
10605      })
10606    };
10607  })])(PostTaxonomiesCheck));
10608  
10609  // EXTERNAL MODULE: ./node_modules/react-autosize-textarea/lib/index.js
10610  var lib = __webpack_require__(773);
10611  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-text-editor/index.js
10612  
10613  
10614  /**
10615   * External dependencies
10616   */
10617  
10618  /**
10619   * WordPress dependencies
10620   */
10621  
10622  
10623  
10624  
10625  
10626  
10627  
10628  /**
10629   * Internal dependencies
10630   */
10631  
10632  
10633  function PostTextEditor() {
10634    const postContent = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostContent(), []);
10635    const {
10636      editPost,
10637      resetEditorBlocks
10638    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
10639    const [value, setValue] = (0,external_wp_element_namespaceObject.useState)(postContent);
10640    const [isDirty, setIsDirty] = (0,external_wp_element_namespaceObject.useState)(false);
10641    const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostTextEditor);
10642  
10643    if (!isDirty && value !== postContent) {
10644      setValue(postContent);
10645    }
10646    /**
10647     * Handles a textarea change event to notify the onChange prop callback and
10648     * reflect the new value in the component's own state. This marks the start
10649     * of the user's edits, if not already changed, preventing future props
10650     * changes to value from replacing the rendered value. This is expected to
10651     * be followed by a reset to dirty state via `stopEditing`.
10652     *
10653     * @see stopEditing
10654     *
10655     * @param {Event} event Change event.
10656     */
10657  
10658  
10659    const onChange = event => {
10660      const newValue = event.target.value;
10661      editPost({
10662        content: newValue
10663      });
10664      setValue(newValue);
10665      setIsDirty(true);
10666    };
10667    /**
10668     * Function called when the user has completed their edits, responsible for
10669     * ensuring that changes, if made, are surfaced to the onPersist prop
10670     * callback and resetting dirty state.
10671     */
10672  
10673  
10674    const stopEditing = () => {
10675      if (isDirty) {
10676        const blocks = (0,external_wp_blocks_namespaceObject.parse)(value);
10677        resetEditorBlocks(blocks);
10678        setIsDirty(false);
10679      }
10680    };
10681  
10682    return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, {
10683      as: "label",
10684      htmlFor: `post-content-$instanceId}`
10685    }, (0,external_wp_i18n_namespaceObject.__)('Type text or HTML')), (0,external_wp_element_namespaceObject.createElement)(lib/* default */.Z, {
10686      autoComplete: "off",
10687      dir: "auto",
10688      value: value,
10689      onChange: onChange,
10690      onBlur: stopEditing,
10691      className: "editor-post-text-editor",
10692      id: `post-content-$instanceId}`,
10693      placeholder: (0,external_wp_i18n_namespaceObject.__)('Start writing with text or HTML')
10694    }));
10695  }
10696  
10697  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-title/index.js
10698  
10699  
10700  /**
10701   * External dependencies
10702   */
10703  
10704  /**
10705   * WordPress dependencies
10706   */
10707  
10708  
10709  
10710  
10711  
10712  
10713  
10714  
10715  
10716  
10717  /**
10718   * Internal dependencies
10719   */
10720  
10721  
10722  
10723  /**
10724   * Constants
10725   */
10726  
10727  const REGEXP_NEWLINES = /[\r\n]+/g;
10728  function PostTitle() {
10729    const ref = (0,external_wp_element_namespaceObject.useRef)();
10730    const [isSelected, setIsSelected] = (0,external_wp_element_namespaceObject.useState)(false);
10731    const {
10732      editPost
10733    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
10734    const {
10735      insertDefaultBlock,
10736      clearSelectedBlock,
10737      insertBlocks
10738    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
10739    const {
10740      isCleanNewPost,
10741      title,
10742      placeholder,
10743      isFocusMode,
10744      hasFixedToolbar
10745    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
10746      const {
10747        getEditedPostAttribute,
10748        isCleanNewPost: _isCleanNewPost
10749      } = select(store_store);
10750      const {
10751        getSettings
10752      } = select(external_wp_blockEditor_namespaceObject.store);
10753      const {
10754        titlePlaceholder,
10755        focusMode,
10756        hasFixedToolbar: _hasFixedToolbar
10757      } = getSettings();
10758      return {
10759        isCleanNewPost: _isCleanNewPost(),
10760        title: getEditedPostAttribute('title'),
10761        placeholder: titlePlaceholder,
10762        isFocusMode: focusMode,
10763        hasFixedToolbar: _hasFixedToolbar
10764      };
10765    }, []);
10766    (0,external_wp_element_namespaceObject.useEffect)(() => {
10767      if (!ref.current) {
10768        return;
10769      }
10770  
10771      const {
10772        ownerDocument
10773      } = ref.current;
10774      const {
10775        activeElement,
10776        body
10777      } = ownerDocument; // Only autofocus the title when the post is entirely empty. This should
10778      // only happen for a new post, which means we focus the title on new
10779      // post so the author can start typing right away, without needing to
10780      // click anything.
10781  
10782      if (isCleanNewPost && (!activeElement || body === activeElement)) {
10783        ref.current.focus();
10784      }
10785    }, [isCleanNewPost]);
10786  
10787    function onEnterPress() {
10788      insertDefaultBlock(undefined, undefined, 0);
10789    }
10790  
10791    function onInsertBlockAfter(blocks) {
10792      insertBlocks(blocks, 0);
10793    }
10794  
10795    function onUpdate(newTitle) {
10796      editPost({
10797        title: newTitle
10798      });
10799    }
10800  
10801    const [selection, setSelection] = (0,external_wp_element_namespaceObject.useState)({});
10802  
10803    function onSelect() {
10804      setIsSelected(true);
10805      clearSelectedBlock();
10806    }
10807  
10808    function onUnselect() {
10809      setIsSelected(false);
10810      setSelection({});
10811    }
10812  
10813    function onChange(value) {
10814      onUpdate(value.replace(REGEXP_NEWLINES, ' '));
10815    }
10816  
10817    function onKeyDown(event) {
10818      if (event.keyCode === external_wp_keycodes_namespaceObject.ENTER) {
10819        event.preventDefault();
10820        onEnterPress();
10821      }
10822    }
10823  
10824    function onPaste(event) {
10825      const clipboardData = event.clipboardData;
10826      let plainText = '';
10827      let html = ''; // IE11 only supports `Text` as an argument for `getData` and will
10828      // otherwise throw an invalid argument error, so we try the standard
10829      // arguments first, then fallback to `Text` if they fail.
10830  
10831      try {
10832        plainText = clipboardData.getData('text/plain');
10833        html = clipboardData.getData('text/html');
10834      } catch (error1) {
10835        try {
10836          html = clipboardData.getData('Text');
10837        } catch (error2) {
10838          // Some browsers like UC Browser paste plain text by default and
10839          // don't support clipboardData at all, so allow default
10840          // behaviour.
10841          return;
10842        }
10843      } // Allows us to ask for this information when we get a report.
10844  
10845  
10846      window.console.log('Received HTML:\n\n', html);
10847      window.console.log('Received plain text:\n\n', plainText);
10848      const content = (0,external_wp_blocks_namespaceObject.pasteHandler)({
10849        HTML: html,
10850        plainText
10851      });
10852  
10853      if (typeof content !== 'string' && content.length) {
10854        event.preventDefault();
10855        const [firstBlock] = content;
10856  
10857        if (!title && (firstBlock.name === 'core/heading' || firstBlock.name === 'core/paragraph')) {
10858          onUpdate(firstBlock.attributes.content);
10859          onInsertBlockAfter(content.slice(1));
10860        } else {
10861          onInsertBlockAfter(content);
10862        }
10863      }
10864    } // The wp-block className is important for editor styles.
10865    // This same block is used in both the visual and the code editor.
10866  
10867  
10868    const className = classnames_default()('wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text', {
10869      'is-selected': isSelected,
10870      'is-focus-mode': isFocusMode,
10871      'has-fixed-toolbar': hasFixedToolbar
10872    });
10873  
10874    const decodedPlaceholder = (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(placeholder) || (0,external_wp_i18n_namespaceObject.__)('Add title');
10875  
10876    const {
10877      ref: richTextRef
10878    } = (0,external_wp_richText_namespaceObject.__unstableUseRichText)({
10879      value: title,
10880      onChange,
10881      placeholder: decodedPlaceholder,
10882      selectionStart: selection.start,
10883      selectionEnd: selection.end,
10884  
10885      onSelectionChange(newStart, newEnd) {
10886        setSelection(sel => {
10887          const {
10888            start,
10889            end
10890          } = sel;
10891  
10892          if (start === newStart && end === newEnd) {
10893            return sel;
10894          }
10895  
10896          return {
10897            start: newStart,
10898            end: newEnd
10899          };
10900        });
10901      },
10902  
10903      __unstableDisableFormats: true,
10904      preserveWhiteSpace: true
10905    });
10906    /* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */
10907  
10908    return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, {
10909      supportKeys: "title"
10910    }, (0,external_wp_element_namespaceObject.createElement)("h1", {
10911      ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([richTextRef, ref]),
10912      contentEditable: true,
10913      className: className,
10914      "aria-label": decodedPlaceholder,
10915      role: "textbox",
10916      "aria-multiline": "true",
10917      onFocus: onSelect,
10918      onBlur: onUnselect,
10919      onKeyDown: onKeyDown,
10920      onKeyPress: onUnselect,
10921      onPaste: onPaste
10922    }));
10923    /* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */
10924  }
10925  
10926  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-trash/index.js
10927  
10928  
10929  /**
10930   * WordPress dependencies
10931   */
10932  
10933  
10934  
10935  /**
10936   * Internal dependencies
10937   */
10938  
10939  
10940  function PostTrash() {
10941    const {
10942      isNew,
10943      postId
10944    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
10945      const store = select(store_store);
10946      return {
10947        isNew: store.isEditedPostNew(),
10948        postId: store.getCurrentPostId()
10949      };
10950    }, []);
10951    const {
10952      trashPost
10953    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
10954  
10955    if (isNew || !postId) {
10956      return null;
10957    }
10958  
10959    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, {
10960      className: "editor-post-trash",
10961      isDestructive: true,
10962      variant: "secondary",
10963      onClick: () => trashPost()
10964    }, (0,external_wp_i18n_namespaceObject.__)('Move to trash'));
10965  }
10966  
10967  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-trash/check.js
10968  /**
10969   * WordPress dependencies
10970   */
10971  
10972  
10973  /**
10974   * Internal dependencies
10975   */
10976  
10977  
10978  
10979  function PostTrashCheck(_ref) {
10980    let {
10981      isNew,
10982      postId,
10983      canUserDelete,
10984      children
10985    } = _ref;
10986  
10987    if (isNew || !postId || !canUserDelete) {
10988      return null;
10989    }
10990  
10991    return children;
10992  }
10993  
10994  /* harmony default export */ var post_trash_check = ((0,external_wp_data_namespaceObject.withSelect)(select => {
10995    const {
10996      isEditedPostNew,
10997      getCurrentPostId,
10998      getCurrentPostType
10999    } = select(store_store);
11000    const {
11001      getPostType,
11002      canUser
11003    } = select(external_wp_coreData_namespaceObject.store);
11004    const postId = getCurrentPostId();
11005    const postType = getPostType(getCurrentPostType());
11006    const resource = (postType === null || postType === void 0 ? void 0 : postType.rest_base) || ''; // eslint-disable-line camelcase
11007  
11008    return {
11009      isNew: isEditedPostNew(),
11010      postId,
11011      canUserDelete: postId && resource ? canUser('delete', resource, postId) : false
11012    };
11013  })(PostTrashCheck));
11014  
11015  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/check.js
11016  /**
11017   * External dependencies
11018   */
11019  
11020  /**
11021   * WordPress dependencies
11022   */
11023  
11024  
11025  
11026  /**
11027   * Internal dependencies
11028   */
11029  
11030  
11031  function PostVisibilityCheck(_ref) {
11032    let {
11033      hasPublishAction,
11034      render
11035    } = _ref;
11036    const canEdit = hasPublishAction;
11037    return render({
11038      canEdit
11039    });
11040  }
11041  /* harmony default export */ var post_visibility_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => {
11042    const {
11043      getCurrentPost,
11044      getCurrentPostType
11045    } = select(store_store);
11046    return {
11047      hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false),
11048      postType: getCurrentPostType()
11049    };
11050  })])(PostVisibilityCheck));
11051  
11052  ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/info.js
11053  
11054  
11055  /**
11056   * WordPress dependencies
11057   */
11058  
11059  const info = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
11060    xmlns: "http://www.w3.org/2000/svg",
11061    viewBox: "0 0 24 24"
11062  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
11063    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"
11064  }));
11065  /* harmony default export */ var library_info = (info);
11066  
11067  ;// CONCATENATED MODULE: external ["wp","wordcount"]
11068  var external_wp_wordcount_namespaceObject = window["wp"]["wordcount"];
11069  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/word-count/index.js
11070  
11071  
11072  /**
11073   * WordPress dependencies
11074   */
11075  
11076  
11077  
11078  /**
11079   * Internal dependencies
11080   */
11081  
11082  
11083  function WordCount() {
11084    const content = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostAttribute('content'), []);
11085    /*
11086     * translators: If your word count is based on single characters (e.g. East Asian characters),
11087     * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
11088     * Do not translate into your own language.
11089     */
11090  
11091    const wordCountType = (0,external_wp_i18n_namespaceObject._x)('words', 'Word count type. Do not translate!');
11092  
11093    return (0,external_wp_element_namespaceObject.createElement)("span", {
11094      className: "word-count"
11095    }, (0,external_wp_wordcount_namespaceObject.count)(content, wordCountType));
11096  }
11097  
11098  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/character-count/index.js
11099  /**
11100   * WordPress dependencies
11101   */
11102  
11103  
11104  /**
11105   * Internal dependencies
11106   */
11107  
11108  
11109  function CharacterCount() {
11110    const content = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostAttribute('content'), []);
11111    return (0,external_wp_wordcount_namespaceObject.count)(content, 'characters_including_spaces');
11112  }
11113  
11114  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/table-of-contents/panel.js
11115  
11116  
11117  /**
11118   * WordPress dependencies
11119   */
11120  
11121  
11122  
11123  /**
11124   * Internal dependencies
11125   */
11126  
11127  
11128  
11129  
11130  
11131  function TableOfContentsPanel(_ref) {
11132    let {
11133      hasOutlineItemsDisabled,
11134      onRequestClose
11135    } = _ref;
11136    const {
11137      headingCount,
11138      paragraphCount,
11139      numberOfBlocks
11140    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
11141      const {
11142        getGlobalBlockCount
11143      } = select(external_wp_blockEditor_namespaceObject.store);
11144      return {
11145        headingCount: getGlobalBlockCount('core/heading'),
11146        paragraphCount: getGlobalBlockCount('core/paragraph'),
11147        numberOfBlocks: getGlobalBlockCount()
11148      };
11149    }, []);
11150    return (
11151      /*
11152       * Disable reason: The `list` ARIA role is redundant but
11153       * Safari+VoiceOver won't announce the list otherwise.
11154       */
11155  
11156      /* eslint-disable jsx-a11y/no-redundant-roles */
11157      (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("div", {
11158        className: "table-of-contents__wrapper",
11159        role: "note",
11160        "aria-label": (0,external_wp_i18n_namespaceObject.__)('Document Statistics'),
11161        tabIndex: "0"
11162      }, (0,external_wp_element_namespaceObject.createElement)("ul", {
11163        role: "list",
11164        className: "table-of-contents__counts"
11165      }, (0,external_wp_element_namespaceObject.createElement)("li", {
11166        className: "table-of-contents__count"
11167      }, (0,external_wp_i18n_namespaceObject.__)('Characters'), (0,external_wp_element_namespaceObject.createElement)("span", {
11168        className: "table-of-contents__number"
11169      }, (0,external_wp_element_namespaceObject.createElement)(CharacterCount, null))), (0,external_wp_element_namespaceObject.createElement)("li", {
11170        className: "table-of-contents__count"
11171      }, (0,external_wp_i18n_namespaceObject.__)('Words'), (0,external_wp_element_namespaceObject.createElement)(WordCount, null)), (0,external_wp_element_namespaceObject.createElement)("li", {
11172        className: "table-of-contents__count"
11173      }, (0,external_wp_i18n_namespaceObject.__)('Headings'), (0,external_wp_element_namespaceObject.createElement)("span", {
11174        className: "table-of-contents__number"
11175      }, headingCount)), (0,external_wp_element_namespaceObject.createElement)("li", {
11176        className: "table-of-contents__count"
11177      }, (0,external_wp_i18n_namespaceObject.__)('Paragraphs'), (0,external_wp_element_namespaceObject.createElement)("span", {
11178        className: "table-of-contents__number"
11179      }, paragraphCount)), (0,external_wp_element_namespaceObject.createElement)("li", {
11180        className: "table-of-contents__count"
11181      }, (0,external_wp_i18n_namespaceObject.__)('Blocks'), (0,external_wp_element_namespaceObject.createElement)("span", {
11182        className: "table-of-contents__number"
11183      }, numberOfBlocks)))), headingCount > 0 && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("hr", null), (0,external_wp_element_namespaceObject.createElement)("h2", {
11184        className: "table-of-contents__title"
11185      }, (0,external_wp_i18n_namespaceObject.__)('Document Outline')), (0,external_wp_element_namespaceObject.createElement)(document_outline, {
11186        onSelect: onRequestClose,
11187        hasOutlineItemsDisabled: hasOutlineItemsDisabled
11188      })))
11189      /* eslint-enable jsx-a11y/no-redundant-roles */
11190  
11191    );
11192  }
11193  
11194  /* harmony default export */ var panel = (TableOfContentsPanel);
11195  
11196  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/table-of-contents/index.js
11197  
11198  
11199  
11200  /**
11201   * WordPress dependencies
11202   */
11203  
11204  
11205  
11206  
11207  
11208  
11209  /**
11210   * Internal dependencies
11211   */
11212  
11213  
11214  
11215  function TableOfContents(_ref, ref) {
11216    let {
11217      hasOutlineItemsDisabled,
11218      repositionDropdown,
11219      ...props
11220    } = _ref;
11221    const hasBlocks = (0,external_wp_data_namespaceObject.useSelect)(select => !!select(external_wp_blockEditor_namespaceObject.store).getBlockCount(), []);
11222    return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Dropdown, {
11223      position: repositionDropdown ? 'middle right right' : 'bottom',
11224      className: "table-of-contents",
11225      contentClassName: "table-of-contents__popover",
11226      renderToggle: _ref2 => {
11227        let {
11228          isOpen,
11229          onToggle
11230        } = _ref2;
11231        return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({}, props, {
11232          ref: ref,
11233          onClick: hasBlocks ? onToggle : undefined,
11234          icon: library_info,
11235          "aria-expanded": isOpen,
11236          "aria-haspopup": "true"
11237          /* translators: button label text should, if possible, be under 16 characters. */
11238          ,
11239          label: (0,external_wp_i18n_namespaceObject.__)('Details'),
11240          tooltipPosition: "bottom",
11241          "aria-disabled": !hasBlocks
11242        }));
11243      },
11244      renderContent: _ref3 => {
11245        let {
11246          onClose
11247        } = _ref3;
11248        return (0,external_wp_element_namespaceObject.createElement)(panel, {
11249          onRequestClose: onClose,
11250          hasOutlineItemsDisabled: hasOutlineItemsDisabled
11251        });
11252      }
11253    });
11254  }
11255  
11256  /* harmony default export */ var table_of_contents = ((0,external_wp_element_namespaceObject.forwardRef)(TableOfContents));
11257  
11258  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/unsaved-changes-warning/index.js
11259  /**
11260   * WordPress dependencies
11261   */
11262  
11263  
11264  
11265  
11266  /**
11267   * Warns the user if there are unsaved changes before leaving the editor.
11268   * Compatible with Post Editor and Site Editor.
11269   *
11270   * @return {WPComponent} The component.
11271   */
11272  
11273  function UnsavedChangesWarning() {
11274    const isDirty = (0,external_wp_data_namespaceObject.useSelect)(select => {
11275      return () => {
11276        const {
11277          __experimentalGetDirtyEntityRecords
11278        } = select(external_wp_coreData_namespaceObject.store);
11279  
11280        const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
11281  
11282        return dirtyEntityRecords.length > 0;
11283      };
11284    }, []);
11285    /**
11286     * Warns the user if there are unsaved changes before leaving the editor.
11287     *
11288     * @param {Event} event `beforeunload` event.
11289     *
11290     * @return {?string} Warning prompt message, if unsaved changes exist.
11291     */
11292  
11293    const warnIfUnsavedChanges = event => {
11294      // We need to call the selector directly in the listener to avoid race
11295      // conditions with `BrowserURL` where `componentDidUpdate` gets the
11296      // new value of `isEditedPostDirty` before this component does,
11297      // causing this component to incorrectly think a trashed post is still dirty.
11298      if (isDirty()) {
11299        event.returnValue = (0,external_wp_i18n_namespaceObject.__)('You have unsaved changes. If you proceed, they will be lost.');
11300        return event.returnValue;
11301      }
11302    };
11303  
11304    (0,external_wp_element_namespaceObject.useEffect)(() => {
11305      window.addEventListener('beforeunload', warnIfUnsavedChanges);
11306      return () => {
11307        window.removeEventListener('beforeunload', warnIfUnsavedChanges);
11308      };
11309    }, []);
11310    return null;
11311  }
11312  
11313  ;// CONCATENATED MODULE: external ["wp","reusableBlocks"]
11314  var external_wp_reusableBlocks_namespaceObject = window["wp"]["reusableBlocks"];
11315  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/provider/with-registry-provider.js
11316  
11317  
11318  /**
11319   * WordPress dependencies
11320   */
11321  
11322  
11323  
11324  
11325  /**
11326   * Internal dependencies
11327   */
11328  
11329  
11330  const withRegistryProvider = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => (0,external_wp_data_namespaceObject.withRegistry)(props => {
11331    const {
11332      useSubRegistry = true,
11333      registry,
11334      ...additionalProps
11335    } = props;
11336  
11337    if (!useSubRegistry) {
11338      return (0,external_wp_element_namespaceObject.createElement)(WrappedComponent, additionalProps);
11339    }
11340  
11341    const [subRegistry, setSubRegistry] = (0,external_wp_element_namespaceObject.useState)(null);
11342    (0,external_wp_element_namespaceObject.useEffect)(() => {
11343      const newRegistry = (0,external_wp_data_namespaceObject.createRegistry)({
11344        'core/block-editor': external_wp_blockEditor_namespaceObject.storeConfig
11345      }, registry);
11346      newRegistry.registerStore('core/editor', storeConfig);
11347      setSubRegistry(newRegistry);
11348    }, [registry]);
11349  
11350    if (!subRegistry) {
11351      return null;
11352    }
11353  
11354    return (0,external_wp_element_namespaceObject.createElement)(external_wp_data_namespaceObject.RegistryProvider, {
11355      value: subRegistry
11356    }, (0,external_wp_element_namespaceObject.createElement)(WrappedComponent, additionalProps));
11357  }), 'withRegistryProvider');
11358  /* harmony default export */ var with_registry_provider = (withRegistryProvider);
11359  
11360  ;// CONCATENATED MODULE: external ["wp","mediaUtils"]
11361  var external_wp_mediaUtils_namespaceObject = window["wp"]["mediaUtils"];
11362  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/media-upload/index.js
11363  /**
11364   * External dependencies
11365   */
11366  
11367  /**
11368   * WordPress dependencies
11369   */
11370  
11371  
11372  
11373  /**
11374   * Internal dependencies
11375   */
11376  
11377  
11378  /**
11379   * Upload a media file when the file upload button is activated.
11380   * Wrapper around mediaUpload() that injects the current post ID.
11381   *
11382   * @param {Object}   $0                   Parameters object passed to the function.
11383   * @param {?Object}  $0.additionalData    Additional data to include in the request.
11384   * @param {string}   $0.allowedTypes      Array with the types of media that can be uploaded, if unset all types are allowed.
11385   * @param {Array}    $0.filesList         List of files.
11386   * @param {?number}  $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.
11387   * @param {Function} $0.onError           Function called when an error happens.
11388   * @param {Function} $0.onFileChange      Function called each time a file or a temporary representation of the file is available.
11389   */
11390  
11391  function mediaUpload(_ref) {
11392    let {
11393      additionalData = {},
11394      allowedTypes,
11395      filesList,
11396      maxUploadFileSize,
11397      onError = external_lodash_namespaceObject.noop,
11398      onFileChange
11399    } = _ref;
11400    const {
11401      getCurrentPostId,
11402      getEditorSettings
11403    } = (0,external_wp_data_namespaceObject.select)(store_store);
11404    const wpAllowedMimeTypes = getEditorSettings().allowedMimeTypes;
11405    maxUploadFileSize = maxUploadFileSize || getEditorSettings().maxUploadFileSize;
11406    (0,external_wp_mediaUtils_namespaceObject.uploadMedia)({
11407      allowedTypes,
11408      filesList,
11409      onFileChange,
11410      additionalData: {
11411        post: getCurrentPostId(),
11412        ...additionalData
11413      },
11414      maxUploadFileSize,
11415      onError: _ref2 => {
11416        let {
11417          message
11418        } = _ref2;
11419        return onError(message);
11420      },
11421      wpAllowedMimeTypes
11422    });
11423  }
11424  
11425  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/provider/use-block-editor-settings.js
11426  /**
11427   * External dependencies
11428   */
11429  
11430  /**
11431   * WordPress dependencies
11432   */
11433  
11434  
11435  
11436  
11437  
11438  /**
11439   * Internal dependencies
11440   */
11441  
11442  
11443  
11444  /**
11445   * React hook used to compute the block editor settings to use for the post editor.
11446   *
11447   * @param {Object}  settings    EditorProvider settings prop.
11448   * @param {boolean} hasTemplate Whether template mode is enabled.
11449   *
11450   * @return {Object} Block Editor Settings.
11451   */
11452  
11453  function useBlockEditorSettings(settings, hasTemplate) {
11454    const {
11455      reusableBlocks,
11456      hasUploadPermissions,
11457      canUseUnfilteredHTML,
11458      userCanCreatePages,
11459      pageOnFront
11460    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
11461      const {
11462        canUserUseUnfilteredHTML
11463      } = select(store_store);
11464      const isWeb = external_wp_element_namespaceObject.Platform.OS === 'web';
11465      const {
11466        canUser,
11467        getEntityRecord
11468      } = select(external_wp_coreData_namespaceObject.store);
11469      const siteSettings = getEntityRecord('root', 'site');
11470      return {
11471        canUseUnfilteredHTML: canUserUseUnfilteredHTML(),
11472        reusableBlocks: isWeb ? select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', 'wp_block', {
11473          per_page: -1
11474        }) : [],
11475        // Reusable blocks are fetched in the native version of this hook.
11476        hasUploadPermissions: (0,external_lodash_namespaceObject.defaultTo)(canUser('create', 'media'), true),
11477        userCanCreatePages: canUser('create', 'pages'),
11478        pageOnFront: siteSettings === null || siteSettings === void 0 ? void 0 : siteSettings.page_on_front
11479      };
11480    }, []);
11481    const {
11482      __experimentalBlockPatterns: settingsBlockPatterns,
11483      __experimentalBlockPatternCategories: settingsBlockPatternCategories
11484    } = settings;
11485    const {
11486      blockPatterns,
11487      blockPatternCategories
11488    } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
11489      blockPatterns: settingsBlockPatterns !== null && settingsBlockPatterns !== void 0 ? settingsBlockPatterns : select(external_wp_coreData_namespaceObject.store).getBlockPatterns(),
11490      blockPatternCategories: settingsBlockPatternCategories !== null && settingsBlockPatternCategories !== void 0 ? settingsBlockPatternCategories : select(external_wp_coreData_namespaceObject.store).getBlockPatternCategories()
11491    }), [settingsBlockPatterns, settingsBlockPatternCategories]);
11492    const {
11493      undo
11494    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
11495    const {
11496      saveEntityRecord
11497    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
11498    /**
11499     * Creates a Post entity.
11500     * This is utilised by the Link UI to allow for on-the-fly creation of Posts/Pages.
11501     *
11502     * @param {Object} options parameters for the post being created. These mirror those used on 3rd param of saveEntityRecord.
11503     * @return {Object} the post type object that was created.
11504     */
11505  
11506    const createPageEntity = options => {
11507      if (!userCanCreatePages) {
11508        return Promise.reject({
11509          message: (0,external_wp_i18n_namespaceObject.__)('You do not have permission to create Pages.')
11510        });
11511      }
11512  
11513      return saveEntityRecord('postType', 'page', options);
11514    };
11515  
11516    return (0,external_wp_element_namespaceObject.useMemo)(() => ({ ...(0,external_lodash_namespaceObject.pick)(settings, ['__experimentalBlockDirectory', '__experimentalDiscussionSettings', '__experimentalFeatures', '__experimentalPreferredStyleVariations', '__experimentalSetIsInserterOpened', '__unstableGalleryWithImageBlocks', 'alignWide', 'allowedBlockTypes', 'bodyPlaceholder', 'canLockBlocks', 'codeEditingEnabled', 'colors', 'disableCustomColors', 'disableCustomFontSizes', 'disableCustomGradients', 'enableCustomLineHeight', 'enableCustomSpacing', 'enableCustomUnits', 'focusMode', 'fontSizes', 'gradients', 'generateAnchors', 'hasFixedToolbar', 'hasReducedUI', 'imageDefaultSize', 'imageDimensions', 'imageEditing', 'imageSizes', 'isRTL', 'keepCaretInsideBlock', 'maxWidth', 'onUpdateDefaultBlockStyles', 'styles', 'template', 'templateLock', 'titlePlaceholder', 'supportsLayout', 'widgetTypesToHideFromLegacyWidgetBlock', '__unstableResolvedAssets']),
11517      mediaUpload: hasUploadPermissions ? mediaUpload : undefined,
11518      __experimentalReusableBlocks: reusableBlocks,
11519      __experimentalBlockPatterns: blockPatterns,
11520      __experimentalBlockPatternCategories: blockPatternCategories,
11521      __experimentalFetchLinkSuggestions: (search, searchOptions) => (0,external_wp_coreData_namespaceObject.__experimentalFetchLinkSuggestions)(search, searchOptions, settings),
11522      __experimentalFetchRichUrlData: external_wp_coreData_namespaceObject.__experimentalFetchUrlData,
11523      __experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML,
11524      __experimentalUndo: undo,
11525      outlineMode: hasTemplate,
11526      __experimentalCreatePageEntity: createPageEntity,
11527      __experimentalUserCanCreatePages: userCanCreatePages,
11528      pageOnFront,
11529      __experimentalPreferPatternsOnRoot: hasTemplate
11530    }), [settings, hasUploadPermissions, reusableBlocks, blockPatterns, blockPatternCategories, canUseUnfilteredHTML, undo, hasTemplate, userCanCreatePages, pageOnFront]);
11531  }
11532  
11533  /* harmony default export */ var use_block_editor_settings = (useBlockEditorSettings);
11534  
11535  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/provider/index.js
11536  
11537  
11538  /**
11539   * WordPress dependencies
11540   */
11541  
11542  
11543  
11544  
11545  
11546  
11547  
11548  /**
11549   * Internal dependencies
11550   */
11551  
11552  
11553  
11554  
11555  
11556  function EditorProvider(_ref) {
11557    let {
11558      __unstableTemplate,
11559      post,
11560      settings,
11561      recovery,
11562      initialEdits,
11563      children
11564    } = _ref;
11565    const defaultBlockContext = (0,external_wp_element_namespaceObject.useMemo)(() => {
11566      if (post.type === 'wp_template') {
11567        return {};
11568      }
11569  
11570      return {
11571        postId: post.id,
11572        postType: post.type
11573      };
11574    }, [post.id, post.type]);
11575    const {
11576      selection,
11577      isReady
11578    } = (0,external_wp_data_namespaceObject.useSelect)(select => {
11579      const {
11580        getEditorSelection,
11581        __unstableIsEditorReady
11582      } = select(store_store);
11583      return {
11584        isReady: __unstableIsEditorReady(),
11585        selection: getEditorSelection()
11586      };
11587    }, []);
11588    const {
11589      id,
11590      type
11591    } = __unstableTemplate !== null && __unstableTemplate !== void 0 ? __unstableTemplate : post;
11592    const [blocks, onInput, onChange] = (0,external_wp_coreData_namespaceObject.useEntityBlockEditor)('postType', type, {
11593      id
11594    });
11595    const editorSettings = use_block_editor_settings(settings, !!__unstableTemplate);
11596    const {
11597      updatePostLock,
11598      setupEditor,
11599      updateEditorSettings,
11600      __experimentalTearDownEditor
11601    } = (0,external_wp_data_namespaceObject.useDispatch)(store_store);
11602    const {
11603      createWarningNotice
11604    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); // Initialize and tear down the editor.
11605    // Ideally this should be synced on each change and not just something you do once.
11606  
11607    (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
11608      // Assume that we don't need to initialize in the case of an error recovery.
11609      if (recovery) {
11610        return;
11611      }
11612  
11613      updatePostLock(settings.postLock);
11614      setupEditor(post, initialEdits, settings.template);
11615  
11616      if (settings.autosave) {
11617        createWarningNotice((0,external_wp_i18n_namespaceObject.__)('There is an autosave of this post that is more recent than the version below.'), {
11618          id: 'autosave-exists',
11619          actions: [{
11620            label: (0,external_wp_i18n_namespaceObject.__)('View the autosave'),
11621            url: settings.autosave.editLink
11622          }]
11623        });
11624      }
11625  
11626      return () => {
11627        __experimentalTearDownEditor();
11628      };
11629    }, []); // Synchronize the editor settings as they change.
11630  
11631    (0,external_wp_element_namespaceObject.useEffect)(() => {
11632      updateEditorSettings(settings);
11633    }, [settings]);
11634  
11635    if (!isReady) {
11636      return null;
11637    }
11638  
11639    return (0,external_wp_element_namespaceObject.createElement)(external_wp_coreData_namespaceObject.EntityProvider, {
11640      kind: "root",
11641      type: "site"
11642    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_coreData_namespaceObject.EntityProvider, {
11643      kind: "postType",
11644      type: post.type,
11645      id: post.id
11646    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockContextProvider, {
11647      value: defaultBlockContext
11648    }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockEditorProvider, {
11649      value: blocks,
11650      onChange: onChange,
11651      onInput: onInput,
11652      selection: selection,
11653      settings: editorSettings,
11654      useSubRegistry: false
11655    }, children, (0,external_wp_element_namespaceObject.createElement)(external_wp_reusableBlocks_namespaceObject.ReusableBlocksMenuItems, null)))));
11656  }
11657  
11658  /* harmony default export */ var provider = (with_registry_provider(EditorProvider));
11659  
11660  ;// CONCATENATED MODULE: external ["wp","serverSideRender"]
11661  var external_wp_serverSideRender_namespaceObject = window["wp"]["serverSideRender"];
11662  var external_wp_serverSideRender_default = /*#__PURE__*/__webpack_require__.n(external_wp_serverSideRender_namespaceObject);
11663  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/deprecated.js
11664  
11665  
11666  // Block Creation Components.
11667  
11668  /**
11669   * WordPress dependencies
11670   */
11671  
11672  
11673  
11674  
11675  
11676  function deprecateComponent(name, Wrapped) {
11677    let staticsToHoist = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
11678    const Component = (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => {
11679      external_wp_deprecated_default()('wp.editor.' + name, {
11680        since: '5.3',
11681        alternative: 'wp.blockEditor.' + name,
11682        version: '6.2'
11683      });
11684      return (0,external_wp_element_namespaceObject.createElement)(Wrapped, _extends({
11685        ref: ref
11686      }, props));
11687    });
11688    staticsToHoist.forEach(staticName => {
11689      Component[staticName] = deprecateComponent(name + '.' + staticName, Wrapped[staticName]);
11690    });
11691    return Component;
11692  }
11693  
11694  function deprecateFunction(name, func) {
11695    return function () {
11696      external_wp_deprecated_default()('wp.editor.' + name, {
11697        since: '5.3',
11698        alternative: 'wp.blockEditor.' + name,
11699        version: '6.2'
11700      });
11701      return func(...arguments);
11702    };
11703  }
11704  
11705  const RichText = deprecateComponent('RichText', external_wp_blockEditor_namespaceObject.RichText, ['Content']);
11706  RichText.isEmpty = deprecateFunction('RichText.isEmpty', external_wp_blockEditor_namespaceObject.RichText.isEmpty);
11707  
11708  const Autocomplete = deprecateComponent('Autocomplete', external_wp_blockEditor_namespaceObject.Autocomplete);
11709  const AlignmentToolbar = deprecateComponent('AlignmentToolbar', external_wp_blockEditor_namespaceObject.AlignmentToolbar);
11710  const BlockAlignmentToolbar = deprecateComponent('BlockAlignmentToolbar', external_wp_blockEditor_namespaceObject.BlockAlignmentToolbar);
11711  const BlockControls = deprecateComponent('BlockControls', external_wp_blockEditor_namespaceObject.BlockControls, ['Slot']);
11712  const BlockEdit = deprecateComponent('BlockEdit', external_wp_blockEditor_namespaceObject.BlockEdit);
11713  const BlockEditorKeyboardShortcuts = deprecateComponent('BlockEditorKeyboardShortcuts', external_wp_blockEditor_namespaceObject.BlockEditorKeyboardShortcuts);
11714  const BlockFormatControls = deprecateComponent('BlockFormatControls', external_wp_blockEditor_namespaceObject.BlockFormatControls, ['Slot']);
11715  const BlockIcon = deprecateComponent('BlockIcon', external_wp_blockEditor_namespaceObject.BlockIcon);
11716  const BlockInspector = deprecateComponent('BlockInspector', external_wp_blockEditor_namespaceObject.BlockInspector);
11717  const BlockList = deprecateComponent('BlockList', external_wp_blockEditor_namespaceObject.BlockList);
11718  const BlockMover = deprecateComponent('BlockMover', external_wp_blockEditor_namespaceObject.BlockMover);
11719  const BlockNavigationDropdown = deprecateComponent('BlockNavigationDropdown', external_wp_blockEditor_namespaceObject.BlockNavigationDropdown);
11720  const BlockSelectionClearer = deprecateComponent('BlockSelectionClearer', external_wp_blockEditor_namespaceObject.BlockSelectionClearer);
11721  const BlockSettingsMenu = deprecateComponent('BlockSettingsMenu', external_wp_blockEditor_namespaceObject.BlockSettingsMenu);
11722  const BlockTitle = deprecateComponent('BlockTitle', external_wp_blockEditor_namespaceObject.BlockTitle);
11723  const BlockToolbar = deprecateComponent('BlockToolbar', external_wp_blockEditor_namespaceObject.BlockToolbar);
11724  const ColorPalette = deprecateComponent('ColorPalette', external_wp_blockEditor_namespaceObject.ColorPalette);
11725  const ContrastChecker = deprecateComponent('ContrastChecker', external_wp_blockEditor_namespaceObject.ContrastChecker);
11726  const CopyHandler = deprecateComponent('CopyHandler', external_wp_blockEditor_namespaceObject.CopyHandler);
11727  const DefaultBlockAppender = deprecateComponent('DefaultBlockAppender', external_wp_blockEditor_namespaceObject.DefaultBlockAppender);
11728  const FontSizePicker = deprecateComponent('FontSizePicker', external_wp_blockEditor_namespaceObject.FontSizePicker);
11729  const Inserter = deprecateComponent('Inserter', external_wp_blockEditor_namespaceObject.Inserter);
11730  const InnerBlocks = deprecateComponent('InnerBlocks', external_wp_blockEditor_namespaceObject.InnerBlocks, ['ButtonBlockAppender', 'DefaultBlockAppender', 'Content']);
11731  const InspectorAdvancedControls = deprecateComponent('InspectorAdvancedControls', external_wp_blockEditor_namespaceObject.InspectorAdvancedControls, ['Slot']);
11732  const InspectorControls = deprecateComponent('InspectorControls', external_wp_blockEditor_namespaceObject.InspectorControls, ['Slot']);
11733  const PanelColorSettings = deprecateComponent('PanelColorSettings', external_wp_blockEditor_namespaceObject.PanelColorSettings);
11734  const PlainText = deprecateComponent('PlainText', external_wp_blockEditor_namespaceObject.PlainText);
11735  const RichTextShortcut = deprecateComponent('RichTextShortcut', external_wp_blockEditor_namespaceObject.RichTextShortcut);
11736  const RichTextToolbarButton = deprecateComponent('RichTextToolbarButton', external_wp_blockEditor_namespaceObject.RichTextToolbarButton);
11737  const __unstableRichTextInputEvent = deprecateComponent('__unstableRichTextInputEvent', external_wp_blockEditor_namespaceObject.__unstableRichTextInputEvent);
11738  const MediaPlaceholder = deprecateComponent('MediaPlaceholder', external_wp_blockEditor_namespaceObject.MediaPlaceholder);
11739  const MediaUpload = deprecateComponent('MediaUpload', external_wp_blockEditor_namespaceObject.MediaUpload);
11740  const MediaUploadCheck = deprecateComponent('MediaUploadCheck', external_wp_blockEditor_namespaceObject.MediaUploadCheck);
11741  const MultiSelectScrollIntoView = deprecateComponent('MultiSelectScrollIntoView', external_wp_blockEditor_namespaceObject.MultiSelectScrollIntoView);
11742  const NavigableToolbar = deprecateComponent('NavigableToolbar', external_wp_blockEditor_namespaceObject.NavigableToolbar);
11743  const ObserveTyping = deprecateComponent('ObserveTyping', external_wp_blockEditor_namespaceObject.ObserveTyping);
11744  const SkipToSelectedBlock = deprecateComponent('SkipToSelectedBlock', external_wp_blockEditor_namespaceObject.SkipToSelectedBlock);
11745  const URLInput = deprecateComponent('URLInput', external_wp_blockEditor_namespaceObject.URLInput);
11746  const URLInputButton = deprecateComponent('URLInputButton', external_wp_blockEditor_namespaceObject.URLInputButton);
11747  const URLPopover = deprecateComponent('URLPopover', external_wp_blockEditor_namespaceObject.URLPopover);
11748  const Warning = deprecateComponent('Warning', external_wp_blockEditor_namespaceObject.Warning);
11749  const WritingFlow = deprecateComponent('WritingFlow', external_wp_blockEditor_namespaceObject.WritingFlow);
11750  const createCustomColorsHOC = deprecateFunction('createCustomColorsHOC', external_wp_blockEditor_namespaceObject.createCustomColorsHOC);
11751  const getColorClassName = deprecateFunction('getColorClassName', external_wp_blockEditor_namespaceObject.getColorClassName);
11752  const getColorObjectByAttributeValues = deprecateFunction('getColorObjectByAttributeValues', external_wp_blockEditor_namespaceObject.getColorObjectByAttributeValues);
11753  const getColorObjectByColorValue = deprecateFunction('getColorObjectByColorValue', external_wp_blockEditor_namespaceObject.getColorObjectByColorValue);
11754  const getFontSize = deprecateFunction('getFontSize', external_wp_blockEditor_namespaceObject.getFontSize);
11755  const getFontSizeClass = deprecateFunction('getFontSizeClass', external_wp_blockEditor_namespaceObject.getFontSizeClass);
11756  const withColorContext = deprecateFunction('withColorContext', external_wp_blockEditor_namespaceObject.withColorContext);
11757  const withColors = deprecateFunction('withColors', external_wp_blockEditor_namespaceObject.withColors);
11758  const withFontSizes = deprecateFunction('withFontSizes', external_wp_blockEditor_namespaceObject.withFontSizes);
11759  
11760  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/index.js
11761  // Block Creation Components.
11762   // Post Related Components.
11763  
11764  
11765  
11766  
11767  
11768  
11769  
11770  
11771  
11772  
11773  
11774  
11775  
11776  
11777  
11778  
11779  
11780  
11781  
11782  
11783  
11784  
11785  
11786  
11787  
11788  
11789  
11790  
11791  
11792  
11793  
11794  
11795  
11796  
11797  
11798  
11799  
11800  
11801  
11802  
11803  
11804  
11805  
11806  
11807  
11808  
11809  
11810  
11811  
11812  
11813  
11814  
11815  
11816  
11817  
11818  
11819  
11820  
11821  
11822  
11823  
11824   // State Related Components.
11825  
11826  
11827  
11828  
11829  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/url.js
11830  /**
11831   * WordPress dependencies
11832   */
11833  
11834  
11835  /**
11836   * Performs some basic cleanup of a string for use as a post slug
11837   *
11838   * This replicates some of what sanitize_title() does in WordPress core, but
11839   * is only designed to approximate what the slug will be.
11840   *
11841   * Converts Latin-1 Supplement and Latin Extended-A letters to basic Latin letters.
11842   * Removes combining diacritical marks. Converts whitespace, periods,
11843   * and forward slashes to hyphens. Removes any remaining non-word characters
11844   * except hyphens and underscores. Converts remaining string to lowercase.
11845   * It does not account for octets, HTML entities, or other encoded characters.
11846   *
11847   * @param {string} string Title or slug to be processed
11848   *
11849   * @return {string} Processed string
11850   */
11851  
11852  function cleanForSlug(string) {
11853    external_wp_deprecated_default()('wp.editor.cleanForSlug', {
11854      since: '12.7',
11855      plugin: 'Gutenberg',
11856      alternative: 'wp.url.cleanForSlug'
11857    });
11858    return (0,external_wp_url_namespaceObject.cleanForSlug)(string);
11859  }
11860  
11861  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/index.js
11862  /**
11863   * Internal dependencies
11864   */
11865  
11866  
11867  
11868  
11869  
11870  ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/index.js
11871  /**
11872   * Internal dependencies
11873   */
11874  
11875  
11876  
11877  
11878  /*
11879   * Backward compatibility
11880   */
11881  
11882  
11883  
11884  }();
11885  (window.wp = window.wp || {}).editor = __webpack_exports__;
11886  /******/ })()
11887  ;


Generated: Thu Nov 21 01:00:03 2024 Cross-referenced by PHPXref 0.7.1