[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/js/dist/ -> customize-widgets.js (source)

   1  this["wp"] = this["wp"] || {}; this["wp"]["customizeWidgets"] =
   2  /******/ (function(modules) { // webpackBootstrap
   3  /******/     // The module cache
   4  /******/     var installedModules = {};
   5  /******/
   6  /******/     // The require function
   7  /******/ 	function __webpack_require__(moduleId) {
   8  /******/
   9  /******/         // Check if module is in cache
  10  /******/         if(installedModules[moduleId]) {
  11  /******/             return installedModules[moduleId].exports;
  12  /******/         }
  13  /******/         // Create a new module (and put it into the cache)
  14  /******/         var module = installedModules[moduleId] = {
  15  /******/             i: moduleId,
  16  /******/             l: false,
  17  /******/             exports: {}
  18  /******/         };
  19  /******/
  20  /******/         // Execute the module function
  21  /******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22  /******/
  23  /******/         // Flag the module as loaded
  24  /******/         module.l = true;
  25  /******/
  26  /******/         // Return the exports of the module
  27  /******/         return module.exports;
  28  /******/     }
  29  /******/
  30  /******/
  31  /******/     // expose the modules object (__webpack_modules__)
  32  /******/     __webpack_require__.m = modules;
  33  /******/
  34  /******/     // expose the module cache
  35  /******/     __webpack_require__.c = installedModules;
  36  /******/
  37  /******/     // define getter function for harmony exports
  38  /******/     __webpack_require__.d = function(exports, name, getter) {
  39  /******/         if(!__webpack_require__.o(exports, name)) {
  40  /******/             Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41  /******/         }
  42  /******/     };
  43  /******/
  44  /******/     // define __esModule on exports
  45  /******/     __webpack_require__.r = function(exports) {
  46  /******/         if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47  /******/             Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48  /******/         }
  49  /******/         Object.defineProperty(exports, '__esModule', { value: true });
  50  /******/     };
  51  /******/
  52  /******/     // create a fake namespace object
  53  /******/     // mode & 1: value is a module id, require it
  54  /******/     // mode & 2: merge all properties of value into the ns
  55  /******/     // mode & 4: return value when already ns object
  56  /******/     // mode & 8|1: behave like require
  57  /******/     __webpack_require__.t = function(value, mode) {
  58  /******/         if(mode & 1) value = __webpack_require__(value);
  59  /******/         if(mode & 8) return value;
  60  /******/         if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61  /******/         var ns = Object.create(null);
  62  /******/         __webpack_require__.r(ns);
  63  /******/         Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64  /******/         if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65  /******/         return ns;
  66  /******/     };
  67  /******/
  68  /******/     // getDefaultExport function for compatibility with non-harmony modules
  69  /******/     __webpack_require__.n = function(module) {
  70  /******/         var getter = module && module.__esModule ?
  71  /******/ 			function getDefault() { return module['default']; } :
  72  /******/ 			function getModuleExports() { return module; };
  73  /******/         __webpack_require__.d(getter, 'a', getter);
  74  /******/         return getter;
  75  /******/     };
  76  /******/
  77  /******/     // Object.prototype.hasOwnProperty.call
  78  /******/     __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79  /******/
  80  /******/     // __webpack_public_path__
  81  /******/     __webpack_require__.p = "";
  82  /******/
  83  /******/
  84  /******/     // Load entry module and return exports
  85  /******/     return __webpack_require__(__webpack_require__.s = "9pbN");
  86  /******/ })
  87  /************************************************************************/
  88  /******/ ({
  89  
  90  /***/ "1CF3":
  91  /***/ (function(module, exports) {
  92  
  93  (function() { module.exports = window["wp"]["dom"]; }());
  94  
  95  /***/ }),
  96  
  97  /***/ "1ZqX":
  98  /***/ (function(module, exports) {
  99  
 100  (function() { module.exports = window["wp"]["data"]; }());
 101  
 102  /***/ }),
 103  
 104  /***/ "6aBm":
 105  /***/ (function(module, exports) {
 106  
 107  (function() { module.exports = window["wp"]["mediaUtils"]; }());
 108  
 109  /***/ }),
 110  
 111  /***/ "9pbN":
 112  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 113  
 114  "use strict";
 115  // ESM COMPAT FLAG
 116  __webpack_require__.r(__webpack_exports__);
 117  
 118  // EXPORTS
 119  __webpack_require__.d(__webpack_exports__, "initialize", function() { return /* binding */ initialize; });
 120  
 121  // NAMESPACE OBJECT: ./node_modules/@wordpress/customize-widgets/build-module/store/selectors.js
 122  var selectors_namespaceObject = {};
 123  __webpack_require__.r(selectors_namespaceObject);
 124  __webpack_require__.d(selectors_namespaceObject, "__unstableIsFeatureActive", function() { return __unstableIsFeatureActive; });
 125  __webpack_require__.d(selectors_namespaceObject, "isInserterOpened", function() { return selectors_isInserterOpened; });
 126  __webpack_require__.d(selectors_namespaceObject, "__experimentalGetInsertionPoint", function() { return __experimentalGetInsertionPoint; });
 127  
 128  // NAMESPACE OBJECT: ./node_modules/@wordpress/customize-widgets/build-module/store/actions.js
 129  var actions_namespaceObject = {};
 130  __webpack_require__.r(actions_namespaceObject);
 131  __webpack_require__.d(actions_namespaceObject, "__unstableToggleFeature", function() { return __unstableToggleFeature; });
 132  __webpack_require__.d(actions_namespaceObject, "setIsInserterOpened", function() { return actions_setIsInserterOpened; });
 133  
 134  // EXTERNAL MODULE: external ["wp","element"]
 135  var external_wp_element_ = __webpack_require__("GRId");
 136  
 137  // EXTERNAL MODULE: external ["wp","blockLibrary"]
 138  var external_wp_blockLibrary_ = __webpack_require__("QyPg");
 139  
 140  // EXTERNAL MODULE: external ["wp","widgets"]
 141  var external_wp_widgets_ = __webpack_require__("GLVC");
 142  
 143  // EXTERNAL MODULE: external ["wp","blocks"]
 144  var external_wp_blocks_ = __webpack_require__("HSyU");
 145  
 146  // EXTERNAL MODULE: external ["wp","components"]
 147  var external_wp_components_ = __webpack_require__("tI+e");
 148  
 149  // EXTERNAL MODULE: external ["wp","i18n"]
 150  var external_wp_i18n_ = __webpack_require__("l3Sj");
 151  
 152  // EXTERNAL MODULE: external ["wp","blockEditor"]
 153  var external_wp_blockEditor_ = __webpack_require__("axFQ");
 154  
 155  // EXTERNAL MODULE: external ["wp","compose"]
 156  var external_wp_compose_ = __webpack_require__("K9lf");
 157  
 158  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/error-boundary/index.js
 159  
 160  
 161  /**
 162   * WordPress dependencies
 163   */
 164  
 165  
 166  
 167  
 168  
 169  
 170  function CopyButton({
 171    text,
 172    children
 173  }) {
 174    const ref = Object(external_wp_compose_["useCopyToClipboard"])(text);
 175    return Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
 176      variant: "secondary",
 177      ref: ref
 178    }, children);
 179  }
 180  
 181  class error_boundary_ErrorBoundary extends external_wp_element_["Component"] {
 182    constructor() {
 183      super(...arguments);
 184      this.state = {
 185        error: null
 186      };
 187    }
 188  
 189    componentDidCatch(error) {
 190      this.setState({
 191        error
 192      });
 193    }
 194  
 195    render() {
 196      const {
 197        error
 198      } = this.state;
 199  
 200      if (!error) {
 201        return this.props.children;
 202      }
 203  
 204      return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["Warning"], {
 205        className: "customize-widgets-error-boundary",
 206        actions: [Object(external_wp_element_["createElement"])(CopyButton, {
 207          key: "copy-error",
 208          text: error.stack
 209        }, Object(external_wp_i18n_["__"])('Copy Error'))]
 210      }, Object(external_wp_i18n_["__"])('The editor has encountered an unexpected error.'));
 211    }
 212  
 213  }
 214  
 215  // EXTERNAL MODULE: external "lodash"
 216  var external_lodash_ = __webpack_require__("YLtl");
 217  
 218  // EXTERNAL MODULE: external ["wp","coreData"]
 219  var external_wp_coreData_ = __webpack_require__("jZUy");
 220  
 221  // EXTERNAL MODULE: external ["wp","data"]
 222  var external_wp_data_ = __webpack_require__("1ZqX");
 223  
 224  // EXTERNAL MODULE: external ["wp","mediaUtils"]
 225  var external_wp_mediaUtils_ = __webpack_require__("6aBm");
 226  
 227  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
 228  var esm_extends = __webpack_require__("wx14");
 229  
 230  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/block-inspector-button/index.js
 231  
 232  
 233  
 234  /**
 235   * WordPress dependencies
 236   */
 237  
 238  
 239  
 240  
 241  
 242  
 243  function BlockInspectorButton({
 244    inspector,
 245    closeMenu,
 246    ...props
 247  }) {
 248    const selectedBlockClientId = Object(external_wp_data_["useSelect"])(select => select(external_wp_blockEditor_["store"]).getSelectedBlockClientId(), []);
 249    const selectedBlock = Object(external_wp_element_["useMemo"])(() => document.getElementById(`block-$selectedBlockClientId}`), [selectedBlockClientId]);
 250    return Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], Object(esm_extends["a" /* default */])({
 251      onClick: () => {
 252        // Open the inspector.
 253        inspector.open({
 254          returnFocusWhenClose: selectedBlock
 255        }); // Then close the dropdown menu.
 256  
 257        closeMenu();
 258      }
 259    }, props), Object(external_wp_i18n_["__"])('Show more settings'));
 260  }
 261  
 262  /* harmony default export */ var block_inspector_button = (BlockInspectorButton);
 263  
 264  // EXTERNAL MODULE: ./node_modules/classnames/index.js
 265  var classnames = __webpack_require__("TSYQ");
 266  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
 267  
 268  // EXTERNAL MODULE: external ["wp","keycodes"]
 269  var external_wp_keycodes_ = __webpack_require__("RxS6");
 270  
 271  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/undo.js
 272  var library_undo = __webpack_require__("Ntru");
 273  
 274  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/redo.js
 275  var library_redo = __webpack_require__("K2cm");
 276  
 277  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/plus.js
 278  var plus = __webpack_require__("Q4Sy");
 279  
 280  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/close-small.js
 281  var close_small = __webpack_require__("bWcr");
 282  
 283  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/defaults.js
 284  const PREFERENCES_DEFAULTS = {
 285    features: {
 286      fixedToolbar: false,
 287      welcomeGuide: true
 288    }
 289  };
 290  
 291  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/reducer.js
 292  /**
 293   * External dependencies
 294   */
 295  
 296  /**
 297   * WordPress dependencies
 298   */
 299  
 300  
 301  /**
 302   * Internal dependencies
 303   */
 304  
 305  
 306  /**
 307   * Higher-order reducer creator which provides the given initial state for the
 308   * original reducer.
 309   *
 310   * @param {*} initialState Initial state to provide to reducer.
 311   *
 312   * @return {Function} Higher-order reducer.
 313   */
 314  
 315  const createWithInitialState = initialState => reducer => {
 316    return (state = initialState, action) => reducer(state, action);
 317  };
 318  /**
 319   * Reducer tracking whether the inserter is open.
 320   *
 321   * @param {boolean|Object} state
 322   * @param {Object}         action
 323   */
 324  
 325  
 326  function blockInserterPanel(state = false, action) {
 327    switch (action.type) {
 328      case 'SET_IS_INSERTER_OPENED':
 329        return action.value;
 330    }
 331  
 332    return state;
 333  }
 334  /**
 335   * Reducer returning the user preferences.
 336   *
 337   * @param {Object}  state                           Current state.
 338   * @param {Object}  action                          Dispatched action.
 339   *
 340   * @return {Object} Updated state.
 341   */
 342  
 343  
 344  const preferences = Object(external_lodash_["flow"])([external_wp_data_["combineReducers"], createWithInitialState(PREFERENCES_DEFAULTS)])({
 345    features(state, action) {
 346      if (action.type === 'TOGGLE_FEATURE') {
 347        return { ...state,
 348          [action.feature]: !state[action.feature]
 349        };
 350      }
 351  
 352      return state;
 353    }
 354  
 355  });
 356  /* harmony default export */ var reducer = (Object(external_wp_data_["combineReducers"])({
 357    blockInserterPanel,
 358    preferences
 359  }));
 360  
 361  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/selectors.js
 362  /**
 363   * External dependencies
 364   */
 365  
 366  /**
 367   * Returns whether the given feature is enabled or not.
 368   *
 369   * This function is unstable, as it is mostly copied from the edit-post
 370   * package. Editor features and preferences have a lot of scope for
 371   * being generalized and refactored.
 372   *
 373   * @param {Object} state   Global application state.
 374   * @param {string} feature Feature slug.
 375   *
 376   * @return {boolean} Is active.
 377   */
 378  
 379  function __unstableIsFeatureActive(state, feature) {
 380    return Object(external_lodash_["get"])(state.preferences.features, [feature], false);
 381  }
 382  /**
 383   * Returns true if the inserter is opened.
 384   *
 385   * @param {Object} state Global application state.
 386   *
 387   * @return {boolean} Whether the inserter is opened.
 388   */
 389  
 390  function selectors_isInserterOpened(state) {
 391    return !!state.blockInserterPanel;
 392  }
 393  /**
 394   * Get the insertion point for the inserter.
 395   *
 396   * @param {Object} state Global application state.
 397   *
 398   * @return {Object} The root client ID and index to insert at.
 399   */
 400  
 401  function __experimentalGetInsertionPoint(state) {
 402    const {
 403      rootClientId,
 404      insertionIndex
 405    } = state.blockInserterPanel;
 406    return {
 407      rootClientId,
 408      insertionIndex
 409    };
 410  }
 411  
 412  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/actions.js
 413  /**
 414   * Returns an action object used to toggle a feature flag.
 415   *
 416   * This function is unstable, as it is mostly copied from the edit-post
 417   * package. Editor features and preferences have a lot of scope for
 418   * being generalized and refactored.
 419   *
 420   * @param {string} feature Feature name.
 421   *
 422   * @return {Object} Action object.
 423   */
 424  function __unstableToggleFeature(feature) {
 425    return {
 426      type: 'TOGGLE_FEATURE',
 427      feature
 428    };
 429  }
 430  /**
 431   * Returns an action object used to open/close the inserter.
 432   *
 433   * @param {boolean|Object} value                Whether the inserter should be
 434   *                                              opened (true) or closed (false).
 435   *                                              To specify an insertion point,
 436   *                                              use an object.
 437   * @param {string}         value.rootClientId   The root client ID to insert at.
 438   * @param {number}         value.insertionIndex The index to insert at.
 439   *
 440   * @return {Object} Action object.
 441   */
 442  
 443  function actions_setIsInserterOpened(value) {
 444    return {
 445      type: 'SET_IS_INSERTER_OPENED',
 446      value
 447    };
 448  }
 449  
 450  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/constants.js
 451  /**
 452   * Module Constants
 453   */
 454  const STORE_NAME = 'core/customize-widgets';
 455  
 456  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/store/index.js
 457  /**
 458   * WordPress dependencies
 459   */
 460  
 461  /**
 462   * Internal dependencies
 463   */
 464  
 465  
 466  
 467  
 468  
 469  /**
 470   * Block editor data store configuration.
 471   *
 472   * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore
 473   *
 474   * @type {Object}
 475   */
 476  
 477  const storeConfig = {
 478    reducer: reducer,
 479    selectors: selectors_namespaceObject,
 480    actions: actions_namespaceObject,
 481    persist: ['preferences']
 482  };
 483  /**
 484   * Store definition for the edit widgets namespace.
 485   *
 486   * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
 487   *
 488   * @type {Object}
 489   */
 490  
 491  const store = Object(external_wp_data_["createReduxStore"])(STORE_NAME, storeConfig); // Once we build a more generic persistence plugin that works across types of stores
 492  // we'd be able to replace this with a register call.
 493  
 494  Object(external_wp_data_["registerStore"])(STORE_NAME, storeConfig);
 495  
 496  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/inserter/index.js
 497  
 498  
 499  /**
 500   * WordPress dependencies
 501   */
 502  
 503  
 504  
 505  
 506  
 507  
 508  /**
 509   * Internal dependencies
 510   */
 511  
 512  
 513  
 514  function Inserter({
 515    setIsOpened
 516  }) {
 517    const inserterTitleId = Object(external_wp_compose_["useInstanceId"])(Inserter, 'customize-widget-layout__inserter-panel-title');
 518    const insertionPoint = Object(external_wp_data_["useSelect"])(select => select(store).__experimentalGetInsertionPoint());
 519    return Object(external_wp_element_["createElement"])("div", {
 520      className: "customize-widgets-layout__inserter-panel",
 521      "aria-labelledby": inserterTitleId
 522    }, Object(external_wp_element_["createElement"])("div", {
 523      className: "customize-widgets-layout__inserter-panel-header"
 524    }, Object(external_wp_element_["createElement"])("h2", {
 525      id: inserterTitleId,
 526      className: "customize-widgets-layout__inserter-panel-header-title"
 527    }, Object(external_wp_i18n_["__"])('Add a block')), Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
 528      className: "customize-widgets-layout__inserter-panel-header-close-button",
 529      icon: close_small["a" /* default */],
 530      onClick: () => setIsOpened(false),
 531      "aria-label": Object(external_wp_i18n_["__"])('Close inserter')
 532    })), Object(external_wp_element_["createElement"])("div", {
 533      className: "customize-widgets-layout__inserter-panel-content"
 534    }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["__experimentalLibrary"], {
 535      rootClientId: insertionPoint.rootClientId,
 536      __experimentalInsertionIndex: insertionPoint.insertionIndex,
 537      showInserterHelpPanel: true,
 538      onSelect: () => setIsOpened(false)
 539    })));
 540  }
 541  
 542  /* harmony default export */ var components_inserter = (Inserter);
 543  
 544  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/more-vertical.js
 545  var more_vertical = __webpack_require__("VKE3");
 546  
 547  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/external.js
 548  var external = __webpack_require__("K+tz");
 549  
 550  // EXTERNAL MODULE: external ["wp","keyboardShortcuts"]
 551  var external_wp_keyboardShortcuts_ = __webpack_require__("hF7m");
 552  
 553  // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/check.js
 554  var check = __webpack_require__("RMJe");
 555  
 556  // EXTERNAL MODULE: external ["wp","a11y"]
 557  var external_wp_a11y_ = __webpack_require__("gdqT");
 558  
 559  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/more-menu/feature-toggle.js
 560  
 561  
 562  /**
 563   * WordPress dependencies
 564   */
 565  
 566  
 567  
 568  
 569  
 570  /**
 571   * Internal dependencies
 572   */
 573  
 574  
 575  function FeatureToggle({
 576    label,
 577    info,
 578    messageActivated,
 579    messageDeactivated,
 580    shortcut,
 581    feature
 582  }) {
 583    const isActive = Object(external_wp_data_["useSelect"])(select => select(store).__unstableIsFeatureActive(feature), [feature]);
 584    const {
 585      __unstableToggleFeature: toggleFeature
 586    } = Object(external_wp_data_["useDispatch"])(store);
 587  
 588    const speakMessage = () => {
 589      if (isActive) {
 590        Object(external_wp_a11y_["speak"])(messageDeactivated || Object(external_wp_i18n_["__"])('Feature deactivated'));
 591      } else {
 592        Object(external_wp_a11y_["speak"])(messageActivated || Object(external_wp_i18n_["__"])('Feature activated'));
 593      }
 594    };
 595  
 596    return Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], {
 597      icon: isActive && check["a" /* default */],
 598      isSelected: isActive,
 599      onClick: () => {
 600        toggleFeature(feature);
 601        speakMessage();
 602      },
 603      role: "menuitemcheckbox",
 604      info: info,
 605      shortcut: shortcut
 606    }, label);
 607  }
 608  
 609  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/config.js
 610  /**
 611   * WordPress dependencies
 612   */
 613  
 614  const textFormattingShortcuts = [{
 615    keyCombination: {
 616      modifier: 'primary',
 617      character: 'b'
 618    },
 619    description: Object(external_wp_i18n_["__"])('Make the selected text bold.')
 620  }, {
 621    keyCombination: {
 622      modifier: 'primary',
 623      character: 'i'
 624    },
 625    description: Object(external_wp_i18n_["__"])('Make the selected text italic.')
 626  }, {
 627    keyCombination: {
 628      modifier: 'primary',
 629      character: 'k'
 630    },
 631    description: Object(external_wp_i18n_["__"])('Convert the selected text into a link.')
 632  }, {
 633    keyCombination: {
 634      modifier: 'primaryShift',
 635      character: 'k'
 636    },
 637    description: Object(external_wp_i18n_["__"])('Remove a link.')
 638  }, {
 639    keyCombination: {
 640      modifier: 'primary',
 641      character: 'u'
 642    },
 643    description: Object(external_wp_i18n_["__"])('Underline the selected text.')
 644  }];
 645  
 646  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/shortcut.js
 647  
 648  
 649  /**
 650   * External dependencies
 651   */
 652  
 653  /**
 654   * WordPress dependencies
 655   */
 656  
 657  
 658  
 659  
 660  function KeyCombination({
 661    keyCombination,
 662    forceAriaLabel
 663  }) {
 664    const shortcut = keyCombination.modifier ? external_wp_keycodes_["displayShortcutList"][keyCombination.modifier](keyCombination.character) : keyCombination.character;
 665    const ariaLabel = keyCombination.modifier ? external_wp_keycodes_["shortcutAriaLabel"][keyCombination.modifier](keyCombination.character) : keyCombination.character;
 666    return Object(external_wp_element_["createElement"])("kbd", {
 667      className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination",
 668      "aria-label": forceAriaLabel || ariaLabel
 669    }, Object(external_lodash_["castArray"])(shortcut).map((character, index) => {
 670      if (character === '+') {
 671        return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], {
 672          key: index
 673        }, character);
 674      }
 675  
 676      return Object(external_wp_element_["createElement"])("kbd", {
 677        key: index,
 678        className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-key"
 679      }, character);
 680    }));
 681  }
 682  
 683  function Shortcut({
 684    description,
 685    keyCombination,
 686    aliases = [],
 687    ariaLabel
 688  }) {
 689    return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])("div", {
 690      className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-description"
 691    }, description), Object(external_wp_element_["createElement"])("div", {
 692      className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-term"
 693    }, Object(external_wp_element_["createElement"])(KeyCombination, {
 694      keyCombination: keyCombination,
 695      forceAriaLabel: ariaLabel
 696    }), aliases.map((alias, index) => Object(external_wp_element_["createElement"])(KeyCombination, {
 697      keyCombination: alias,
 698      forceAriaLabel: ariaLabel,
 699      key: index
 700    }))));
 701  }
 702  
 703  /* harmony default export */ var keyboard_shortcut_help_modal_shortcut = (Shortcut);
 704  
 705  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js
 706  
 707  
 708  /**
 709   * WordPress dependencies
 710   */
 711  
 712  
 713  /**
 714   * Internal dependencies
 715   */
 716  
 717  
 718  
 719  function DynamicShortcut({
 720    name
 721  }) {
 722    const {
 723      keyCombination,
 724      description,
 725      aliases
 726    } = Object(external_wp_data_["useSelect"])(select => {
 727      const {
 728        getShortcutKeyCombination,
 729        getShortcutDescription,
 730        getShortcutAliases
 731      } = select(external_wp_keyboardShortcuts_["store"]);
 732      return {
 733        keyCombination: getShortcutKeyCombination(name),
 734        aliases: getShortcutAliases(name),
 735        description: getShortcutDescription(name)
 736      };
 737    });
 738  
 739    if (!keyCombination) {
 740      return null;
 741    }
 742  
 743    return Object(external_wp_element_["createElement"])(keyboard_shortcut_help_modal_shortcut, {
 744      keyCombination: keyCombination,
 745      description: description,
 746      aliases: aliases
 747    });
 748  }
 749  
 750  /* harmony default export */ var dynamic_shortcut = (DynamicShortcut);
 751  
 752  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcut-help-modal/index.js
 753  
 754  
 755  /**
 756   * External dependencies
 757   */
 758  
 759  
 760  /**
 761   * WordPress dependencies
 762   */
 763  
 764  
 765  
 766  
 767  
 768  /**
 769   * Internal dependencies
 770   */
 771  
 772  
 773  
 774  
 775  
 776  const ShortcutList = ({
 777    shortcuts
 778  }) =>
 779  /*
 780   * Disable reason: The `list` ARIA role is redundant but
 781   * Safari+VoiceOver won't announce the list otherwise.
 782   */
 783  
 784  /* eslint-disable jsx-a11y/no-redundant-roles */
 785  Object(external_wp_element_["createElement"])("ul", {
 786    className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-list",
 787    role: "list"
 788  }, shortcuts.map((shortcut, index) => Object(external_wp_element_["createElement"])("li", {
 789    className: "customize-widgets-keyboard-shortcut-help-modal__shortcut",
 790    key: index
 791  }, Object(external_lodash_["isString"])(shortcut) ? Object(external_wp_element_["createElement"])(dynamic_shortcut, {
 792    name: shortcut
 793  }) : Object(external_wp_element_["createElement"])(keyboard_shortcut_help_modal_shortcut, shortcut))))
 794  /* eslint-enable jsx-a11y/no-redundant-roles */
 795  ;
 796  
 797  const ShortcutSection = ({
 798    title,
 799    shortcuts,
 800    className
 801  }) => Object(external_wp_element_["createElement"])("section", {
 802    className: classnames_default()('customize-widgets-keyboard-shortcut-help-modal__section', className)
 803  }, !!title && Object(external_wp_element_["createElement"])("h2", {
 804    className: "customize-widgets-keyboard-shortcut-help-modal__section-title"
 805  }, title), Object(external_wp_element_["createElement"])(ShortcutList, {
 806    shortcuts: shortcuts
 807  }));
 808  
 809  const ShortcutCategorySection = ({
 810    title,
 811    categoryName,
 812    additionalShortcuts = []
 813  }) => {
 814    const categoryShortcuts = Object(external_wp_data_["useSelect"])(select => {
 815      return select(external_wp_keyboardShortcuts_["store"]).getCategoryShortcuts(categoryName);
 816    }, [categoryName]);
 817    return Object(external_wp_element_["createElement"])(ShortcutSection, {
 818      title: title,
 819      shortcuts: categoryShortcuts.concat(additionalShortcuts)
 820    });
 821  };
 822  
 823  function KeyboardShortcutHelpModal({
 824    isModalActive,
 825    toggleModal
 826  }) {
 827    const {
 828      registerShortcut
 829    } = Object(external_wp_data_["useDispatch"])(external_wp_keyboardShortcuts_["store"]);
 830    registerShortcut({
 831      name: 'core/customize-widgets/keyboard-shortcuts',
 832      category: 'main',
 833      description: Object(external_wp_i18n_["__"])('Display these keyboard shortcuts.'),
 834      keyCombination: {
 835        modifier: 'access',
 836        character: 'h'
 837      }
 838    });
 839    Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/keyboard-shortcuts', toggleModal, {
 840      bindGlobal: true
 841    });
 842  
 843    if (!isModalActive) {
 844      return null;
 845    }
 846  
 847    return Object(external_wp_element_["createElement"])(external_wp_components_["Modal"], {
 848      className: "customize-widgets-keyboard-shortcut-help-modal",
 849      title: Object(external_wp_i18n_["__"])('Keyboard shortcuts'),
 850      closeLabel: Object(external_wp_i18n_["__"])('Close'),
 851      onRequestClose: toggleModal
 852    }, Object(external_wp_element_["createElement"])(ShortcutSection, {
 853      className: "customize-widgets-keyboard-shortcut-help-modal__main-shortcuts",
 854      shortcuts: ['core/customize-widgets/keyboard-shortcuts']
 855    }), Object(external_wp_element_["createElement"])(ShortcutCategorySection, {
 856      title: Object(external_wp_i18n_["__"])('Global shortcuts'),
 857      categoryName: "global"
 858    }), Object(external_wp_element_["createElement"])(ShortcutCategorySection, {
 859      title: Object(external_wp_i18n_["__"])('Selection shortcuts'),
 860      categoryName: "selection"
 861    }), Object(external_wp_element_["createElement"])(ShortcutCategorySection, {
 862      title: Object(external_wp_i18n_["__"])('Block shortcuts'),
 863      categoryName: "block",
 864      additionalShortcuts: [{
 865        keyCombination: {
 866          character: '/'
 867        },
 868        description: Object(external_wp_i18n_["__"])('Change the block type after adding a new paragraph.'),
 869  
 870        /* translators: The forward-slash character. e.g. '/'. */
 871        ariaLabel: Object(external_wp_i18n_["__"])('Forward-slash')
 872      }]
 873    }), Object(external_wp_element_["createElement"])(ShortcutSection, {
 874      title: Object(external_wp_i18n_["__"])('Text formatting'),
 875      shortcuts: textFormattingShortcuts
 876    }));
 877  }
 878  
 879  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/more-menu/index.js
 880  
 881  
 882  /**
 883   * WordPress dependencies
 884   */
 885  
 886  
 887  
 888  
 889  
 890  
 891  /**
 892   * Internal dependencies
 893   */
 894  
 895  
 896  
 897  const POPOVER_PROPS = {
 898    className: 'customize-widgets-more-menu__content',
 899    position: 'bottom left'
 900  };
 901  const TOGGLE_PROPS = {
 902    tooltipPosition: 'bottom'
 903  };
 904  function MoreMenu() {
 905    const [isKeyboardShortcutsModalActive, setIsKeyboardShortcutsModalVisible] = Object(external_wp_element_["useState"])(false);
 906  
 907    const toggleKeyboardShortcutsModal = () => setIsKeyboardShortcutsModalVisible(!isKeyboardShortcutsModalActive);
 908  
 909    Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/keyboard-shortcuts', toggleKeyboardShortcutsModal, {
 910      bindGlobal: true
 911    });
 912    return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarDropdownMenu"], {
 913      className: "customize-widgets-more-menu",
 914      icon: more_vertical["a" /* default */]
 915      /* translators: button label text should, if possible, be under 16 characters. */
 916      ,
 917      label: Object(external_wp_i18n_["__"])('Options'),
 918      popoverProps: POPOVER_PROPS,
 919      toggleProps: TOGGLE_PROPS
 920    }, () => Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], {
 921      label: Object(external_wp_i18n_["_x"])('View', 'noun')
 922    }, Object(external_wp_element_["createElement"])(FeatureToggle, {
 923      feature: "fixedToolbar",
 924      label: Object(external_wp_i18n_["__"])('Top toolbar'),
 925      info: Object(external_wp_i18n_["__"])('Access all block and document tools in a single place'),
 926      messageActivated: Object(external_wp_i18n_["__"])('Top toolbar activated'),
 927      messageDeactivated: Object(external_wp_i18n_["__"])('Top toolbar deactivated')
 928    })), Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], {
 929      label: Object(external_wp_i18n_["__"])('Tools')
 930    }, Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], {
 931      onClick: () => {
 932        setIsKeyboardShortcutsModalVisible(true);
 933      },
 934      shortcut: external_wp_keycodes_["displayShortcut"].access('h')
 935    }, Object(external_wp_i18n_["__"])('Keyboard shortcuts')), Object(external_wp_element_["createElement"])(FeatureToggle, {
 936      feature: "welcomeGuide",
 937      label: Object(external_wp_i18n_["__"])('Welcome Guide')
 938    }), Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], {
 939      role: "menuitem",
 940      icon: external["a" /* default */],
 941      href: Object(external_wp_i18n_["__"])('https://wordpress.org/support/article/block-based-widgets-editor/'),
 942      target: "_blank",
 943      rel: "noopener noreferrer"
 944    }, Object(external_wp_i18n_["__"])('Help'), Object(external_wp_element_["createElement"])(external_wp_components_["VisuallyHidden"], {
 945      as: "span"
 946    },
 947    /* translators: accessibility text */
 948    Object(external_wp_i18n_["__"])('(opens in a new tab)')))), Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], {
 949      label: Object(external_wp_i18n_["__"])('Preferences')
 950    }, Object(external_wp_element_["createElement"])(FeatureToggle, {
 951      feature: "keepCaretInsideBlock",
 952      label: Object(external_wp_i18n_["__"])('Contain text cursor inside block'),
 953      info: Object(external_wp_i18n_["__"])('Aids screen readers by stopping text caret from leaving blocks.'),
 954      messageActivated: Object(external_wp_i18n_["__"])('Contain text cursor inside block activated'),
 955      messageDeactivated: Object(external_wp_i18n_["__"])('Contain text cursor inside block deactivated')
 956    })))), Object(external_wp_element_["createElement"])(KeyboardShortcutHelpModal, {
 957      isModalActive: isKeyboardShortcutsModalActive,
 958      toggleModal: toggleKeyboardShortcutsModal
 959    }));
 960  }
 961  
 962  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/header/index.js
 963  
 964  
 965  /**
 966   * External dependencies
 967   */
 968  
 969  /**
 970   * WordPress dependencies
 971   */
 972  
 973  
 974  
 975  
 976  
 977  
 978  
 979  /**
 980   * Internal dependencies
 981   */
 982  
 983  
 984  
 985  
 986  function Header({
 987    sidebar,
 988    inserter,
 989    isInserterOpened,
 990    setIsInserterOpened,
 991    isFixedToolbarActive
 992  }) {
 993    const [[hasUndo, hasRedo], setUndoRedo] = Object(external_wp_element_["useState"])([sidebar.hasUndo(), sidebar.hasRedo()]);
 994    Object(external_wp_element_["useEffect"])(() => {
 995      return sidebar.subscribeHistory(() => {
 996        setUndoRedo([sidebar.hasUndo(), sidebar.hasRedo()]);
 997      });
 998    }, [sidebar]);
 999    return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])("div", {
1000      className: classnames_default()('customize-widgets-header', {
1001        'is-fixed-toolbar-active': isFixedToolbarActive
1002      })
1003    }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["NavigableToolbar"], {
1004      className: "customize-widgets-header-toolbar",
1005      "aria-label": Object(external_wp_i18n_["__"])('Document tools')
1006    }, Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], {
1007      icon: !Object(external_wp_i18n_["isRTL"])() ? library_undo["a" /* default */] : library_redo["a" /* default */]
1008      /* translators: button label text should, if possible, be under 16 characters. */
1009      ,
1010      label: Object(external_wp_i18n_["__"])('Undo'),
1011      shortcut: external_wp_keycodes_["displayShortcut"].primary('z') // If there are no undo levels we don't want to actually disable this
1012      // button, because it will remove focus for keyboard users.
1013      // See: https://github.com/WordPress/gutenberg/issues/3486
1014      ,
1015      "aria-disabled": !hasUndo,
1016      onClick: sidebar.undo,
1017      className: "customize-widgets-editor-history-button undo-button"
1018    }), Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], {
1019      icon: !Object(external_wp_i18n_["isRTL"])() ? library_redo["a" /* default */] : library_undo["a" /* default */]
1020      /* translators: button label text should, if possible, be under 16 characters. */
1021      ,
1022      label: Object(external_wp_i18n_["__"])('Redo'),
1023      shortcut: external_wp_keycodes_["displayShortcut"].primaryShift('z') // If there are no undo levels we don't want to actually disable this
1024      // button, because it will remove focus for keyboard users.
1025      // See: https://github.com/WordPress/gutenberg/issues/3486
1026      ,
1027      "aria-disabled": !hasRedo,
1028      onClick: sidebar.redo,
1029      className: "customize-widgets-editor-history-button redo-button"
1030    }), Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], {
1031      className: "customize-widgets-header-toolbar__inserter-toggle",
1032      isPressed: isInserterOpened,
1033      isPrimary: true,
1034      icon: plus["a" /* default */],
1035      label: Object(external_wp_i18n_["_x"])('Add block', 'Generic label for block inserter button'),
1036      onClick: () => {
1037        setIsInserterOpened(isOpen => !isOpen);
1038      }
1039    }), Object(external_wp_element_["createElement"])(MoreMenu, null))), Object(external_wp_element_["createPortal"])(Object(external_wp_element_["createElement"])(components_inserter, {
1040      setIsOpened: setIsInserterOpened
1041    }), inserter.contentContainer[0]));
1042  }
1043  
1044  /* harmony default export */ var header = (Header);
1045  
1046  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/inserter/use-inserter.js
1047  /**
1048   * WordPress dependencies
1049   */
1050  
1051  
1052  /**
1053   * Internal dependencies
1054   */
1055  
1056  
1057  function useInserter(inserter) {
1058    const isInserterOpened = Object(external_wp_data_["useSelect"])(select => select(store).isInserterOpened());
1059    const {
1060      setIsInserterOpened
1061    } = Object(external_wp_data_["useDispatch"])(store);
1062    Object(external_wp_element_["useEffect"])(() => {
1063      if (isInserterOpened) {
1064        inserter.open();
1065      } else {
1066        inserter.close();
1067      }
1068    }, [inserter, isInserterOpened]);
1069    return [isInserterOpened, Object(external_wp_element_["useCallback"])(updater => {
1070      let isOpen = updater;
1071  
1072      if (typeof updater === 'function') {
1073        isOpen = updater(Object(external_wp_data_["select"])(store).isInserterOpened());
1074      }
1075  
1076      setIsInserterOpened(isOpen);
1077    }, [setIsInserterOpened])];
1078  }
1079  
1080  // EXTERNAL MODULE: external ["wp","isShallowEqual"]
1081  var external_wp_isShallowEqual_ = __webpack_require__("rl8x");
1082  var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_);
1083  
1084  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/utils.js
1085  // @ts-check
1086  
1087  /**
1088   * WordPress dependencies
1089   */
1090  
1091  
1092  /**
1093   * External dependencies
1094   */
1095  
1096  
1097  /**
1098   * Convert settingId to widgetId.
1099   *
1100   * @param {string} settingId The setting id.
1101   * @return {string} The widget id.
1102   */
1103  
1104  function settingIdToWidgetId(settingId) {
1105    const matches = settingId.match(/^widget_(.+)(?:\[(\d+)\])$/);
1106  
1107    if (matches) {
1108      const idBase = matches[1];
1109      const number = parseInt(matches[2], 10);
1110      return `$idBase}-$number}`;
1111    }
1112  
1113    return settingId;
1114  }
1115  /**
1116   * Transform a block to a customizable widget.
1117   *
1118   * @param {WPBlock} block          The block to be transformed from.
1119   * @param {Object}  existingWidget The widget to be extended from.
1120   * @return {Object} The transformed widget.
1121   */
1122  
1123  function blockToWidget(block, existingWidget = null) {
1124    let widget;
1125    const isValidLegacyWidgetBlock = block.name === 'core/legacy-widget' && (block.attributes.id || block.attributes.instance);
1126  
1127    if (isValidLegacyWidgetBlock) {
1128      if (block.attributes.id) {
1129        // Widget that does not extend WP_Widget.
1130        widget = {
1131          id: block.attributes.id
1132        };
1133      } else {
1134        const {
1135          encoded,
1136          hash,
1137          raw,
1138          ...rest
1139        } = block.attributes.instance; // Widget that extends WP_Widget.
1140  
1141        widget = {
1142          idBase: block.attributes.idBase,
1143          instance: { ...(existingWidget === null || existingWidget === void 0 ? void 0 : existingWidget.instance),
1144            // Required only for the customizer.
1145            is_widget_customizer_js_value: true,
1146            encoded_serialized_instance: encoded,
1147            instance_hash_key: hash,
1148            raw_instance: raw,
1149            ...rest
1150          }
1151        };
1152      }
1153    } else {
1154      const instance = {
1155        content: Object(external_wp_blocks_["serialize"])(block)
1156      };
1157      widget = {
1158        idBase: 'block',
1159        widgetClass: 'WP_Widget_Block',
1160        instance: {
1161          raw_instance: instance
1162        }
1163      };
1164    }
1165  
1166    return { ...Object(external_lodash_["omit"])(existingWidget, ['form', 'rendered']),
1167      ...widget
1168    };
1169  }
1170  /**
1171   * Transform a widget to a block.
1172   *
1173   * @param {Object} widget          The widget to be transformed from.
1174   * @param {string} widget.id       The widget id.
1175   * @param {string} widget.idBase   The id base of the widget.
1176   * @param {number} widget.number   The number/index of the widget.
1177   * @param {Object} widget.instance The instance of the widget.
1178   * @return {WPBlock} The transformed block.
1179   */
1180  
1181  function widgetToBlock({
1182    id,
1183    idBase,
1184    number,
1185    instance
1186  }) {
1187    let block;
1188    const {
1189      encoded_serialized_instance: encoded,
1190      instance_hash_key: hash,
1191      raw_instance: raw,
1192      ...rest
1193    } = instance;
1194  
1195    if (idBase === 'block') {
1196      const parsedBlocks = Object(external_wp_blocks_["parse"])(raw.content);
1197      block = parsedBlocks.length ? parsedBlocks[0] : Object(external_wp_blocks_["createBlock"])('core/paragraph', {});
1198    } else if (number) {
1199      // Widget that extends WP_Widget.
1200      block = Object(external_wp_blocks_["createBlock"])('core/legacy-widget', {
1201        idBase,
1202        instance: {
1203          encoded,
1204          hash,
1205          raw,
1206          ...rest
1207        }
1208      });
1209    } else {
1210      // Widget that does not extend WP_Widget.
1211      block = Object(external_wp_blocks_["createBlock"])('core/legacy-widget', {
1212        id
1213      });
1214    }
1215  
1216    return Object(external_wp_widgets_["addWidgetIdToBlock"])(block, id);
1217  }
1218  
1219  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/use-sidebar-block-editor.js
1220  /**
1221   * External dependencies
1222   */
1223  
1224  /**
1225   * WordPress dependencies
1226   */
1227  
1228  
1229  
1230  
1231  /**
1232   * Internal dependencies
1233   */
1234  
1235  
1236  
1237  function widgetsToBlocks(widgets) {
1238    return widgets.map(widget => widgetToBlock(widget));
1239  }
1240  
1241  function useSidebarBlockEditor(sidebar) {
1242    const [blocks, setBlocks] = Object(external_wp_element_["useState"])(() => widgetsToBlocks(sidebar.getWidgets()));
1243    Object(external_wp_element_["useEffect"])(() => {
1244      return sidebar.subscribe((prevWidgets, nextWidgets) => {
1245        setBlocks(prevBlocks => {
1246          const prevWidgetsMap = new Map(prevWidgets.map(widget => [widget.id, widget]));
1247          const prevBlocksMap = new Map(prevBlocks.map(block => [Object(external_wp_widgets_["getWidgetIdFromBlock"])(block), block]));
1248          const nextBlocks = nextWidgets.map(nextWidget => {
1249            const prevWidget = prevWidgetsMap.get(nextWidget.id); // Bail out updates.
1250  
1251            if (prevWidget && prevWidget === nextWidget) {
1252              return prevBlocksMap.get(nextWidget.id);
1253            }
1254  
1255            return widgetToBlock(nextWidget);
1256          }); // Bail out updates.
1257  
1258          if (external_wp_isShallowEqual_default()(prevBlocks, nextBlocks)) {
1259            return prevBlocks;
1260          }
1261  
1262          return nextBlocks;
1263        });
1264      });
1265    }, [sidebar]);
1266    const onChangeBlocks = Object(external_wp_element_["useCallback"])(nextBlocks => {
1267      setBlocks(prevBlocks => {
1268        if (external_wp_isShallowEqual_default()(prevBlocks, nextBlocks)) {
1269          return prevBlocks;
1270        }
1271  
1272        const prevBlocksMap = new Map(prevBlocks.map(block => [Object(external_wp_widgets_["getWidgetIdFromBlock"])(block), block]));
1273        const nextWidgets = nextBlocks.map(nextBlock => {
1274          const widgetId = Object(external_wp_widgets_["getWidgetIdFromBlock"])(nextBlock); // Update existing widgets.
1275  
1276          if (widgetId && prevBlocksMap.has(widgetId)) {
1277            const prevBlock = prevBlocksMap.get(widgetId);
1278            const prevWidget = sidebar.getWidget(widgetId); // Bail out updates by returning the previous widgets.
1279            // Deep equality is necessary until the block editor's internals changes.
1280  
1281            if (Object(external_lodash_["isEqual"])(nextBlock, prevBlock) && prevWidget) {
1282              return prevWidget;
1283            }
1284  
1285            return blockToWidget(nextBlock, prevWidget);
1286          } // Add a new widget.
1287  
1288  
1289          return blockToWidget(nextBlock);
1290        }); // Bail out updates if the updated widgets are the same.
1291  
1292        if (external_wp_isShallowEqual_default()(sidebar.getWidgets(), nextWidgets)) {
1293          return prevBlocks;
1294        }
1295  
1296        const addedWidgetIds = sidebar.setWidgets(nextWidgets);
1297        return nextBlocks.reduce((updatedNextBlocks, nextBlock, index) => {
1298          const addedWidgetId = addedWidgetIds[index];
1299  
1300          if (addedWidgetId !== null) {
1301            // Only create a new instance if necessary to prevent
1302            // the whole editor from re-rendering on every edit.
1303            if (updatedNextBlocks === nextBlocks) {
1304              updatedNextBlocks = nextBlocks.slice();
1305            }
1306  
1307            updatedNextBlocks[index] = Object(external_wp_widgets_["addWidgetIdToBlock"])(nextBlock, addedWidgetId);
1308          }
1309  
1310          return updatedNextBlocks;
1311        }, nextBlocks);
1312      });
1313    }, [sidebar]);
1314    return [blocks, onChangeBlocks, onChangeBlocks];
1315  }
1316  
1317  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/focus-control/index.js
1318  
1319  
1320  /**
1321   * WordPress dependencies
1322   */
1323  
1324  /**
1325   * Internal dependencies
1326   */
1327  
1328  
1329  const FocusControlContext = Object(external_wp_element_["createContext"])();
1330  function FocusControl({
1331    api,
1332    sidebarControls,
1333    children
1334  }) {
1335    const [focusedWidgetIdRef, setFocusedWidgetIdRef] = Object(external_wp_element_["useState"])({
1336      current: null
1337    });
1338    const focusWidget = Object(external_wp_element_["useCallback"])(widgetId => {
1339      for (const sidebarControl of sidebarControls) {
1340        const widgets = sidebarControl.setting.get();
1341  
1342        if (widgets.includes(widgetId)) {
1343          sidebarControl.sectionInstance.expand({
1344            // Schedule it after the complete callback so that
1345            // it won't be overridden by the "Back" button focus.
1346            completeCallback() {
1347              // Create a "ref-like" object every time to ensure
1348              // the same widget id can also triggers the focus control.
1349              setFocusedWidgetIdRef({
1350                current: widgetId
1351              });
1352            }
1353  
1354          });
1355          break;
1356        }
1357      }
1358    }, [sidebarControls]);
1359    Object(external_wp_element_["useEffect"])(() => {
1360      function handleFocus(settingId) {
1361        const widgetId = settingIdToWidgetId(settingId);
1362        focusWidget(widgetId);
1363      }
1364  
1365      function handleReady() {
1366        api.previewer.preview.bind('focus-control-for-setting', handleFocus);
1367      }
1368  
1369      api.previewer.bind('ready', handleReady);
1370      return () => {
1371        api.previewer.unbind('ready', handleReady);
1372        api.previewer.preview.unbind('focus-control-for-setting', handleFocus);
1373      };
1374    }, [api, focusWidget]);
1375    const context = Object(external_wp_element_["useMemo"])(() => [focusedWidgetIdRef, focusWidget], [focusedWidgetIdRef, focusWidget]);
1376    return Object(external_wp_element_["createElement"])(FocusControlContext.Provider, {
1377      value: context
1378    }, children);
1379  }
1380  const useFocusControl = () => Object(external_wp_element_["useContext"])(FocusControlContext);
1381  
1382  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/focus-control/use-blocks-focus-control.js
1383  /**
1384   * WordPress dependencies
1385   */
1386  
1387  
1388  
1389  
1390  /**
1391   * Internal dependencies
1392   */
1393  
1394  
1395  function useBlocksFocusControl(blocks) {
1396    const {
1397      selectBlock
1398    } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]);
1399    const [focusedWidgetIdRef] = useFocusControl();
1400    const blocksRef = Object(external_wp_element_["useRef"])(blocks);
1401    Object(external_wp_element_["useEffect"])(() => {
1402      blocksRef.current = blocks;
1403    }, [blocks]);
1404    Object(external_wp_element_["useEffect"])(() => {
1405      if (focusedWidgetIdRef.current) {
1406        const focusedBlock = blocksRef.current.find(block => Object(external_wp_widgets_["getWidgetIdFromBlock"])(block) === focusedWidgetIdRef.current);
1407  
1408        if (focusedBlock) {
1409          selectBlock(focusedBlock.clientId); // If the block is already being selected, the DOM node won't
1410          // get focused again automatically.
1411          // We select the DOM and focus it manually here.
1412  
1413          const blockNode = document.querySelector(`[data-block="$focusedBlock.clientId}"]`);
1414          blockNode === null || blockNode === void 0 ? void 0 : blockNode.focus();
1415        }
1416      }
1417    }, [focusedWidgetIdRef, selectBlock]);
1418  }
1419  
1420  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/sidebar-editor-provider.js
1421  
1422  
1423  /**
1424   * WordPress dependencies
1425   */
1426  
1427  /**
1428   * Internal dependencies
1429   */
1430  
1431  
1432  
1433  function SidebarEditorProvider({
1434    sidebar,
1435    settings,
1436    children
1437  }) {
1438    const [blocks, onInput, onChange] = useSidebarBlockEditor(sidebar);
1439    useBlocksFocusControl(blocks);
1440    return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockEditorProvider"], {
1441      value: blocks,
1442      onInput: onInput,
1443      onChange: onChange,
1444      settings: settings,
1445      useSubRegistry: false
1446    }, children);
1447  }
1448  
1449  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/welcome-guide/index.js
1450  
1451  
1452  /**
1453   * WordPress dependencies
1454   */
1455  
1456  
1457  
1458  /**
1459   * Internal dependencies
1460   */
1461  
1462  
1463  function WelcomeGuide({
1464    sidebar
1465  }) {
1466    const {
1467      __unstableToggleFeature: toggleFeature
1468    } = Object(external_wp_data_["useDispatch"])(store);
1469    const isEntirelyBlockWidgets = sidebar.getWidgets().every(widget => widget.id.startsWith('block-'));
1470    return Object(external_wp_element_["createElement"])("div", {
1471      className: "customize-widgets-welcome-guide"
1472    }, Object(external_wp_element_["createElement"])("div", {
1473      className: "customize-widgets-welcome-guide__image__wrapper"
1474    }, Object(external_wp_element_["createElement"])("picture", null, Object(external_wp_element_["createElement"])("source", {
1475      srcSet: "https://s.w.org/images/block-editor/welcome-editor.svg",
1476      media: "(prefers-reduced-motion: reduce)"
1477    }), Object(external_wp_element_["createElement"])("img", {
1478      className: "customize-widgets-welcome-guide__image",
1479      src: "https://s.w.org/images/block-editor/welcome-editor.gif",
1480      width: "312",
1481      height: "240",
1482      alt: ""
1483    }))), Object(external_wp_element_["createElement"])("h1", {
1484      className: "customize-widgets-welcome-guide__heading"
1485    }, Object(external_wp_i18n_["__"])('Welcome to block Widgets')), Object(external_wp_element_["createElement"])("p", {
1486      className: "customize-widgets-welcome-guide__text"
1487    }, isEntirelyBlockWidgets ? Object(external_wp_i18n_["__"])('Your theme provides different “block” areas for you to add and edit content. Try adding a search bar, social icons, or other types of blocks here and see how they’ll look on your site.') : Object(external_wp_i18n_["__"])('You can now add any block to your site’s widget areas. Don’t worry, all of your favorite widgets still work flawlessly.')), Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
1488      className: "customize-widgets-welcome-guide__button",
1489      isPrimary: true,
1490      onClick: () => toggleFeature('welcomeGuide')
1491    }, Object(external_wp_i18n_["__"])('Got it')), Object(external_wp_element_["createElement"])("hr", {
1492      className: "customize-widgets-welcome-guide__separator"
1493    }), !isEntirelyBlockWidgets && Object(external_wp_element_["createElement"])("p", {
1494      className: "customize-widgets-welcome-guide__more-info"
1495    }, Object(external_wp_i18n_["__"])('Want to stick with the old widgets?'), Object(external_wp_element_["createElement"])("br", null), Object(external_wp_element_["createElement"])(external_wp_components_["ExternalLink"], {
1496      href: Object(external_wp_i18n_["__"])('https://wordpress.org/plugins/classic-widgets/')
1497    }, Object(external_wp_i18n_["__"])('Get the Classic Widgets plugin.'))), Object(external_wp_element_["createElement"])("p", {
1498      className: "customize-widgets-welcome-guide__more-info"
1499    }, Object(external_wp_i18n_["__"])('New to the block editor?'), Object(external_wp_element_["createElement"])("br", null), Object(external_wp_element_["createElement"])(external_wp_components_["ExternalLink"], {
1500      href: Object(external_wp_i18n_["__"])('https://wordpress.org/support/article/wordpress-editor/')
1501    }, Object(external_wp_i18n_["__"])("Here's a detailed guide."))));
1502  }
1503  
1504  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/keyboard-shortcuts/index.js
1505  /**
1506   * WordPress dependencies
1507   */
1508  
1509  
1510  
1511  
1512  
1513  function KeyboardShortcuts({
1514    undo,
1515    redo,
1516    save
1517  }) {
1518    Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/undo', event => {
1519      undo();
1520      event.preventDefault();
1521    }, {
1522      bindGlobal: true
1523    });
1524    Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/redo', event => {
1525      redo();
1526      event.preventDefault();
1527    }, {
1528      bindGlobal: true
1529    });
1530    Object(external_wp_keyboardShortcuts_["useShortcut"])('core/customize-widgets/save', event => {
1531      event.preventDefault();
1532      save();
1533    }, {
1534      bindGlobal: true
1535    });
1536    return null;
1537  }
1538  
1539  function KeyboardShortcutsRegister() {
1540    const {
1541      registerShortcut,
1542      unregisterShortcut
1543    } = Object(external_wp_data_["useDispatch"])(external_wp_keyboardShortcuts_["store"]);
1544    Object(external_wp_element_["useEffect"])(() => {
1545      registerShortcut({
1546        name: 'core/customize-widgets/undo',
1547        category: 'global',
1548        description: Object(external_wp_i18n_["__"])('Undo your last changes.'),
1549        keyCombination: {
1550          modifier: 'primary',
1551          character: 'z'
1552        }
1553      });
1554      registerShortcut({
1555        name: 'core/customize-widgets/redo',
1556        category: 'global',
1557        description: Object(external_wp_i18n_["__"])('Redo your last undo.'),
1558        keyCombination: {
1559          modifier: 'primaryShift',
1560          character: 'z'
1561        }
1562      });
1563      registerShortcut({
1564        name: 'core/customize-widgets/save',
1565        category: 'global',
1566        description: Object(external_wp_i18n_["__"])('Save your changes.'),
1567        keyCombination: {
1568          modifier: 'primary',
1569          character: 's'
1570        }
1571      });
1572      return () => {
1573        unregisterShortcut('core/customize-widgets/undo');
1574        unregisterShortcut('core/customize-widgets/redo');
1575        unregisterShortcut('core/customize-widgets/save');
1576      };
1577    }, [registerShortcut]);
1578    return null;
1579  }
1580  
1581  KeyboardShortcuts.Register = KeyboardShortcutsRegister;
1582  /* harmony default export */ var keyboard_shortcuts = (KeyboardShortcuts);
1583  
1584  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/block-appender/index.js
1585  
1586  
1587  
1588  /**
1589   * WordPress dependencies
1590   */
1591  
1592  
1593  
1594  function BlockAppender(props) {
1595    const ref = Object(external_wp_element_["useRef"])();
1596    const isBlocksListEmpty = Object(external_wp_data_["useSelect"])(select => select(external_wp_blockEditor_["store"]).getBlockCount() === 0); // Move the focus to the block appender to prevent focus from
1597    // being lost when emptying the widget area.
1598  
1599    Object(external_wp_element_["useEffect"])(() => {
1600      if (isBlocksListEmpty && ref.current) {
1601        const {
1602          ownerDocument
1603        } = ref.current;
1604  
1605        if (!ownerDocument.activeElement || ownerDocument.activeElement === ownerDocument.body) {
1606          ref.current.focus();
1607        }
1608      }
1609    }, [isBlocksListEmpty]);
1610    return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["ButtonBlockAppender"], Object(esm_extends["a" /* default */])({}, props, {
1611      ref: ref
1612    }));
1613  }
1614  
1615  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/index.js
1616  
1617  
1618  /**
1619   * External dependencies
1620   */
1621  
1622  /**
1623   * WordPress dependencies
1624   */
1625  
1626  
1627  
1628  
1629  
1630  
1631  /**
1632   * Internal dependencies
1633   */
1634  
1635  
1636  
1637  
1638  
1639  
1640  
1641  
1642  
1643  function SidebarBlockEditor({
1644    blockEditorSettings,
1645    sidebar,
1646    inserter,
1647    inspector
1648  }) {
1649    const [isInserterOpened, setIsInserterOpened] = useInserter(inserter);
1650    const {
1651      hasUploadPermissions,
1652      isFixedToolbarActive,
1653      keepCaretInsideBlock,
1654      isWelcomeGuideActive
1655    } = Object(external_wp_data_["useSelect"])(select => {
1656      return {
1657        hasUploadPermissions: Object(external_lodash_["defaultTo"])(select(external_wp_coreData_["store"]).canUser('create', 'media'), true),
1658        isFixedToolbarActive: select(store).__unstableIsFeatureActive('fixedToolbar'),
1659        keepCaretInsideBlock: select(store).__unstableIsFeatureActive('keepCaretInsideBlock'),
1660        isWelcomeGuideActive: select(store).__unstableIsFeatureActive('welcomeGuide')
1661      };
1662    }, []);
1663    const settings = Object(external_wp_element_["useMemo"])(() => {
1664      let mediaUploadBlockEditor;
1665  
1666      if (hasUploadPermissions) {
1667        mediaUploadBlockEditor = ({
1668          onError,
1669          ...argumentsObject
1670        }) => {
1671          Object(external_wp_mediaUtils_["uploadMedia"])({
1672            wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes,
1673            onError: ({
1674              message
1675            }) => onError(message),
1676            ...argumentsObject
1677          });
1678        };
1679      }
1680  
1681      return { ...blockEditorSettings,
1682        __experimentalSetIsInserterOpened: setIsInserterOpened,
1683        mediaUpload: mediaUploadBlockEditor,
1684        hasFixedToolbar: isFixedToolbarActive,
1685        keepCaretInsideBlock,
1686        __unstableHasCustomAppender: true
1687      };
1688    }, [hasUploadPermissions, blockEditorSettings, isFixedToolbarActive, keepCaretInsideBlock, setIsInserterOpened]);
1689  
1690    if (isWelcomeGuideActive) {
1691      return Object(external_wp_element_["createElement"])(WelcomeGuide, {
1692        sidebar: sidebar
1693      });
1694    }
1695  
1696    return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockEditorKeyboardShortcuts"].Register, null), Object(external_wp_element_["createElement"])(keyboard_shortcuts.Register, null), Object(external_wp_element_["createElement"])(SidebarEditorProvider, {
1697      sidebar: sidebar,
1698      settings: settings
1699    }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockEditorKeyboardShortcuts"], null), Object(external_wp_element_["createElement"])(keyboard_shortcuts, {
1700      undo: sidebar.undo,
1701      redo: sidebar.redo,
1702      save: sidebar.save
1703    }), Object(external_wp_element_["createElement"])(header, {
1704      sidebar: sidebar,
1705      inserter: inserter,
1706      isInserterOpened: isInserterOpened,
1707      setIsInserterOpened: setIsInserterOpened,
1708      isFixedToolbarActive: isFixedToolbarActive
1709    }), Object(external_wp_element_["createElement"])(external_wp_blockEditor_["CopyHandler"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockTools"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockSelectionClearer"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["WritingFlow"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["ObserveTyping"], null, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockList"], {
1710      renderAppender: BlockAppender
1711    })))))), Object(external_wp_element_["createPortal"])( // This is a temporary hack to prevent button component inside <BlockInspector>
1712    // from submitting form when type="button" is not specified.
1713    Object(external_wp_element_["createElement"])("form", {
1714      onSubmit: event => event.preventDefault()
1715    }, Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockInspector"], null)), inspector.contentContainer[0])), Object(external_wp_element_["createElement"])(external_wp_blockEditor_["__unstableBlockSettingsMenuFirstItem"], null, ({
1716      onClose
1717    }) => Object(external_wp_element_["createElement"])(block_inspector_button, {
1718      inspector: inspector,
1719      closeMenu: onClose
1720    })));
1721  }
1722  
1723  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-controls/index.js
1724  
1725  
1726  /**
1727   * WordPress dependencies
1728   */
1729  
1730  const SidebarControlsContext = Object(external_wp_element_["createContext"])();
1731  function SidebarControls({
1732    sidebarControls,
1733    activeSidebarControl,
1734    children
1735  }) {
1736    const context = Object(external_wp_element_["useMemo"])(() => ({
1737      sidebarControls,
1738      activeSidebarControl
1739    }), [sidebarControls, activeSidebarControl]);
1740    return Object(external_wp_element_["createElement"])(SidebarControlsContext.Provider, {
1741      value: context
1742    }, children);
1743  }
1744  function useSidebarControls() {
1745    const {
1746      sidebarControls
1747    } = Object(external_wp_element_["useContext"])(SidebarControlsContext);
1748    return sidebarControls;
1749  }
1750  function useActiveSidebarControl() {
1751    const {
1752      activeSidebarControl
1753    } = Object(external_wp_element_["useContext"])(SidebarControlsContext);
1754    return activeSidebarControl;
1755  }
1756  
1757  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/customize-widgets/use-clear-selected-block.js
1758  /**
1759   * WordPress dependencies
1760   */
1761  
1762  
1763  
1764  /**
1765   * We can't just use <BlockSelectionClearer> because the customizer has
1766   * many root nodes rather than just one in the post editor.
1767   * We need to listen to the focus events in all those roots, and also in
1768   * the preview iframe.
1769   * This hook will clear the selected block when focusing outside the editor,
1770   * with a few exceptions:
1771   * 1. Focusing on popovers.
1772   * 2. Focusing on the inspector.
1773   * 3. Focusing on any modals/dialogs.
1774   * These cases are normally triggered by user interactions from the editor,
1775   * not by explicitly focusing outside the editor, hence no need for clearing.
1776   *
1777   * @param {Object} sidebarControl The sidebar control instance.
1778   * @param {Object} popoverRef The ref object of the popover node container.
1779   */
1780  
1781  function useClearSelectedBlock(sidebarControl, popoverRef) {
1782    const {
1783      hasSelectedBlock,
1784      hasMultiSelection
1785    } = Object(external_wp_data_["useSelect"])(external_wp_blockEditor_["store"]);
1786    const {
1787      clearSelectedBlock
1788    } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]);
1789    Object(external_wp_element_["useEffect"])(() => {
1790      if (popoverRef.current && sidebarControl) {
1791        const inspector = sidebarControl.inspector;
1792        const container = sidebarControl.container[0];
1793        const ownerDocument = container.ownerDocument;
1794        const ownerWindow = ownerDocument.defaultView;
1795  
1796        function handleClearSelectedBlock(element) {
1797          if ( // 1. Make sure there are blocks being selected.
1798          (hasSelectedBlock() || hasMultiSelection()) && // 2. The element should exist in the DOM (not deleted).
1799          element && ownerDocument.contains(element) && // 3. It should also not exist in the container, the popover, nor the dialog.
1800          !container.contains(element) && !popoverRef.current.contains(element) && !element.closest('[role="dialog"]') && // 4. The inspector should not be opened.
1801          !inspector.expanded()) {
1802            clearSelectedBlock();
1803          }
1804        } // Handle mouse down in the same document.
1805  
1806  
1807        function handleMouseDown(event) {
1808          handleClearSelectedBlock(event.target);
1809        } // Handle focusing outside the current document, like to iframes.
1810  
1811  
1812        function handleBlur() {
1813          handleClearSelectedBlock(ownerDocument.activeElement);
1814        }
1815  
1816        ownerDocument.addEventListener('mousedown', handleMouseDown);
1817        ownerWindow.addEventListener('blur', handleBlur);
1818        return () => {
1819          ownerDocument.removeEventListener('mousedown', handleMouseDown);
1820          ownerWindow.removeEventListener('blur', handleBlur);
1821        };
1822      }
1823    }, [popoverRef, sidebarControl, hasSelectedBlock, hasMultiSelection, clearSelectedBlock]);
1824  }
1825  
1826  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/customize-widgets/index.js
1827  
1828  
1829  /**
1830   * WordPress dependencies
1831   */
1832  
1833  
1834  /**
1835   * Internal dependencies
1836   */
1837  
1838  
1839  
1840  
1841  
1842  
1843  function CustomizeWidgets({
1844    api,
1845    sidebarControls,
1846    blockEditorSettings
1847  }) {
1848    const [activeSidebarControl, setActiveSidebarControl] = Object(external_wp_element_["useState"])(null);
1849    const parentContainer = document.getElementById('customize-theme-controls');
1850    const popoverRef = Object(external_wp_element_["useRef"])();
1851    useClearSelectedBlock(activeSidebarControl, popoverRef);
1852    Object(external_wp_element_["useEffect"])(() => {
1853      const unsubscribers = sidebarControls.map(sidebarControl => sidebarControl.subscribe(expanded => {
1854        if (expanded) {
1855          setActiveSidebarControl(sidebarControl);
1856        }
1857      }));
1858      return () => {
1859        unsubscribers.forEach(unsubscriber => unsubscriber());
1860      };
1861    }, [sidebarControls]);
1862    const activeSidebar = activeSidebarControl && Object(external_wp_element_["createPortal"])(Object(external_wp_element_["createElement"])(error_boundary_ErrorBoundary, null, Object(external_wp_element_["createElement"])(SidebarBlockEditor, {
1863      key: activeSidebarControl.id,
1864      blockEditorSettings: blockEditorSettings,
1865      sidebar: activeSidebarControl.sidebarAdapter,
1866      inserter: activeSidebarControl.inserter,
1867      inspector: activeSidebarControl.inspector
1868    })), activeSidebarControl.container[0]); // We have to portal this to the parent of both the editor and the inspector,
1869    // so that the popovers will appear above both of them.
1870  
1871    const popover = parentContainer && Object(external_wp_element_["createPortal"])(Object(external_wp_element_["createElement"])("div", {
1872      className: "customize-widgets-popover",
1873      ref: popoverRef
1874    }, Object(external_wp_element_["createElement"])(external_wp_components_["Popover"].Slot, null)), parentContainer);
1875    return Object(external_wp_element_["createElement"])(external_wp_components_["SlotFillProvider"], null, Object(external_wp_element_["createElement"])(SidebarControls, {
1876      sidebarControls: sidebarControls,
1877      activeSidebarControl: activeSidebarControl
1878    }, Object(external_wp_element_["createElement"])(FocusControl, {
1879      api: api,
1880      sidebarControls: sidebarControls
1881    }, activeSidebar, popover)));
1882  }
1883  
1884  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/inspector-section.js
1885  function getInspectorSection() {
1886    const {
1887      wp: {
1888        customize
1889      }
1890    } = window;
1891    return class InspectorSection extends customize.Section {
1892      constructor(id, options) {
1893        super(id, options);
1894        this.parentSection = options.parentSection;
1895        this.returnFocusWhenClose = null;
1896      }
1897  
1898      ready() {
1899        this.contentContainer[0].classList.add('customize-widgets-layout__inspector');
1900      }
1901  
1902      onChangeExpanded(expanded, args) {
1903        super.onChangeExpanded(expanded, args);
1904  
1905        if (this.parentSection && !args.unchanged) {
1906          if (expanded) {
1907            this.parentSection.collapse({
1908              manualTransition: true
1909            });
1910          } else {
1911            this.parentSection.expand({
1912              manualTransition: true,
1913              completeCallback: () => {
1914                // Return focus after finishing the transition.
1915                if (this.returnFocusWhenClose && !this.contentContainer[0].contains(this.returnFocusWhenClose)) {
1916                  this.returnFocusWhenClose.focus();
1917                }
1918              }
1919            });
1920          }
1921        }
1922      }
1923  
1924      open({
1925        returnFocusWhenClose
1926      } = {}) {
1927        this.returnFocusWhenClose = returnFocusWhenClose;
1928        this.expand({
1929          allowMultiple: true
1930        });
1931      }
1932  
1933      close() {
1934        this.collapse({
1935          allowMultiple: true
1936        });
1937      }
1938  
1939    };
1940  }
1941  
1942  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/sidebar-section.js
1943  /**
1944   * WordPress dependencies
1945   */
1946  
1947  /**
1948   * Internal dependencies
1949   */
1950  
1951  
1952  
1953  const getInspectorSectionId = sidebarId => `widgets-inspector-$sidebarId}`;
1954  
1955  function getSidebarSection() {
1956    const {
1957      wp: {
1958        customize
1959      }
1960    } = window;
1961    return class SidebarSection extends customize.Section {
1962      ready() {
1963        const InspectorSection = getInspectorSection();
1964        this.inspector = new InspectorSection(getInspectorSectionId(this.id), {
1965          title: Object(external_wp_i18n_["__"])('Block Settings'),
1966          parentSection: this,
1967          customizeAction: [Object(external_wp_i18n_["__"])('Customizing'), Object(external_wp_i18n_["__"])('Widgets'), this.params.title].join(' ▸ ')
1968        });
1969        customize.section.add(this.inspector);
1970        this.contentContainer[0].classList.add('customize-widgets__sidebar-section');
1971      }
1972  
1973      hasSubSectionOpened() {
1974        return this.inspector.expanded();
1975      }
1976  
1977      onChangeExpanded(expanded, _args) {
1978        const controls = this.controls();
1979        const args = { ..._args,
1980  
1981          completeCallback() {
1982            var _args$completeCallbac;
1983  
1984            controls.forEach(control => {
1985              var _control$onChangeSect;
1986  
1987              (_control$onChangeSect = control.onChangeSectionExpanded) === null || _control$onChangeSect === void 0 ? void 0 : _control$onChangeSect.call(control, expanded, args);
1988            });
1989            (_args$completeCallbac = _args.completeCallback) === null || _args$completeCallbac === void 0 ? void 0 : _args$completeCallbac.call(_args);
1990          }
1991  
1992        };
1993  
1994        if (args.manualTransition) {
1995          if (expanded) {
1996            this.contentContainer.addClass(['busy', 'open']);
1997            this.contentContainer.removeClass('is-sub-section-open');
1998            this.contentContainer.closest('.wp-full-overlay').addClass('section-open');
1999            this.contentContainer.one('transitionend', () => {
2000              this.contentContainer.removeClass('busy');
2001              args.completeCallback();
2002            });
2003          } else {
2004            this.contentContainer.addClass(['busy', 'is-sub-section-open']);
2005            this.contentContainer.closest('.wp-full-overlay').addClass('section-open');
2006            this.contentContainer.removeClass('open');
2007            this.contentContainer.one('transitionend', () => {
2008              this.contentContainer.removeClass('busy');
2009              args.completeCallback();
2010            });
2011          }
2012        } else {
2013          super.onChangeExpanded(expanded, args);
2014        }
2015      }
2016  
2017    };
2018  }
2019  
2020  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/sidebar-adapter.js
2021  /**
2022   * Internal dependencies
2023   */
2024  
2025  const {
2026    wp
2027  } = window;
2028  
2029  function parseWidgetId(widgetId) {
2030    const matches = widgetId.match(/^(.+)-(\d+)$/);
2031  
2032    if (matches) {
2033      return {
2034        idBase: matches[1],
2035        number: parseInt(matches[2], 10)
2036      };
2037    } // Likely an old single widget.
2038  
2039  
2040    return {
2041      idBase: widgetId
2042    };
2043  }
2044  
2045  function widgetIdToSettingId(widgetId) {
2046    const {
2047      idBase,
2048      number
2049    } = parseWidgetId(widgetId);
2050  
2051    if (number) {
2052      return `widget_$idBase}[$number}]`;
2053    }
2054  
2055    return `widget_$idBase}`;
2056  }
2057  /**
2058   * This is a custom debounce function to call different callbacks depending on
2059   * whether it's the _leading_ call or not.
2060   *
2061   * @param {Function} leading  The callback that gets called first.
2062   * @param {Function} callback The callback that gets called after the first time.
2063   * @param {number}   timeout  The debounced time in milliseconds.
2064   * @return {Function} The debounced function.
2065   */
2066  
2067  
2068  function debounce(leading, callback, timeout) {
2069    let isLeading = false;
2070    let timerID;
2071  
2072    function debounced(...args) {
2073      const result = (isLeading ? callback : leading).apply(this, args);
2074      isLeading = true;
2075      clearTimeout(timerID);
2076      timerID = setTimeout(() => {
2077        isLeading = false;
2078      }, timeout);
2079      return result;
2080    }
2081  
2082    debounced.cancel = () => {
2083      isLeading = false;
2084      clearTimeout(timerID);
2085    };
2086  
2087    return debounced;
2088  }
2089  
2090  class sidebar_adapter_SidebarAdapter {
2091    constructor(setting, api) {
2092      this.setting = setting;
2093      this.api = api;
2094      this.locked = false;
2095      this.widgetsCache = new WeakMap();
2096      this.subscribers = new Set();
2097      this.history = [this._getWidgetIds().map(widgetId => this.getWidget(widgetId))];
2098      this.historyIndex = 0;
2099      this.historySubscribers = new Set(); // Debounce the input for 1 second.
2100  
2101      this._debounceSetHistory = debounce(this._pushHistory, this._replaceHistory, 1000);
2102      this.setting.bind(this._handleSettingChange.bind(this));
2103      this.api.bind('change', this._handleAllSettingsChange.bind(this));
2104      this.undo = this.undo.bind(this);
2105      this.redo = this.redo.bind(this);
2106      this.save = this.save.bind(this);
2107    }
2108  
2109    subscribe(callback) {
2110      this.subscribers.add(callback);
2111      return () => {
2112        this.subscribers.delete(callback);
2113      };
2114    }
2115  
2116    getWidgets() {
2117      return this.history[this.historyIndex];
2118    }
2119  
2120    _emit(...args) {
2121      for (const callback of this.subscribers) {
2122        callback(...args);
2123      }
2124    }
2125  
2126    _getWidgetIds() {
2127      return this.setting.get();
2128    }
2129  
2130    _pushHistory() {
2131      this.history = [...this.history.slice(0, this.historyIndex + 1), this._getWidgetIds().map(widgetId => this.getWidget(widgetId))];
2132      this.historyIndex += 1;
2133      this.historySubscribers.forEach(listener => listener());
2134    }
2135  
2136    _replaceHistory() {
2137      this.history[this.historyIndex] = this._getWidgetIds().map(widgetId => this.getWidget(widgetId));
2138    }
2139  
2140    _handleSettingChange() {
2141      if (this.locked) {
2142        return;
2143      }
2144  
2145      const prevWidgets = this.getWidgets();
2146  
2147      this._pushHistory();
2148  
2149      this._emit(prevWidgets, this.getWidgets());
2150    }
2151  
2152    _handleAllSettingsChange(setting) {
2153      if (this.locked) {
2154        return;
2155      }
2156  
2157      if (!setting.id.startsWith('widget_')) {
2158        return;
2159      }
2160  
2161      const widgetId = settingIdToWidgetId(setting.id);
2162  
2163      if (!this.setting.get().includes(widgetId)) {
2164        return;
2165      }
2166  
2167      const prevWidgets = this.getWidgets();
2168  
2169      this._pushHistory();
2170  
2171      this._emit(prevWidgets, this.getWidgets());
2172    }
2173  
2174    _createWidget(widget) {
2175      const widgetModel = wp.customize.Widgets.availableWidgets.findWhere({
2176        id_base: widget.idBase
2177      });
2178      let number = widget.number;
2179  
2180      if (widgetModel.get('is_multi') && !number) {
2181        widgetModel.set('multi_number', widgetModel.get('multi_number') + 1);
2182        number = widgetModel.get('multi_number');
2183      }
2184  
2185      const settingId = number ? `widget_$widget.idBase}[$number}]` : `widget_$widget.idBase}`;
2186      const settingArgs = {
2187        transport: wp.customize.Widgets.data.selectiveRefreshableWidgets[widgetModel.get('id_base')] ? 'postMessage' : 'refresh',
2188        previewer: this.setting.previewer
2189      };
2190      const setting = this.api.create(settingId, settingId, '', settingArgs);
2191      setting.set(widget.instance);
2192      const widgetId = settingIdToWidgetId(settingId);
2193      return widgetId;
2194    }
2195  
2196    _removeWidget(widget) {
2197      const settingId = widgetIdToSettingId(widget.id);
2198      const setting = this.api(settingId);
2199  
2200      if (setting) {
2201        const instance = setting.get();
2202        this.widgetsCache.delete(instance);
2203      }
2204  
2205      this.api.remove(settingId);
2206    }
2207  
2208    _updateWidget(widget) {
2209      const prevWidget = this.getWidget(widget.id); // Bail out update if nothing changed.
2210  
2211      if (prevWidget === widget) {
2212        return widget.id;
2213      } // Update existing setting if only the widget's instance changed.
2214  
2215  
2216      if (prevWidget.idBase && widget.idBase && prevWidget.idBase === widget.idBase) {
2217        const settingId = widgetIdToSettingId(widget.id);
2218        this.api(settingId).set(widget.instance);
2219        return widget.id;
2220      } // Otherwise delete and re-create.
2221  
2222  
2223      this._removeWidget(widget);
2224  
2225      return this._createWidget(widget);
2226    }
2227  
2228    getWidget(widgetId) {
2229      if (!widgetId) {
2230        return null;
2231      }
2232  
2233      const {
2234        idBase,
2235        number
2236      } = parseWidgetId(widgetId);
2237      const settingId = widgetIdToSettingId(widgetId);
2238      const setting = this.api(settingId);
2239  
2240      if (!setting) {
2241        return null;
2242      }
2243  
2244      const instance = setting.get();
2245  
2246      if (this.widgetsCache.has(instance)) {
2247        return this.widgetsCache.get(instance);
2248      }
2249  
2250      const widget = {
2251        id: widgetId,
2252        idBase,
2253        number,
2254        instance
2255      };
2256      this.widgetsCache.set(instance, widget);
2257      return widget;
2258    }
2259  
2260    _updateWidgets(nextWidgets) {
2261      this.locked = true;
2262      const addedWidgetIds = [];
2263      const nextWidgetIds = nextWidgets.map(nextWidget => {
2264        if (nextWidget.id && this.getWidget(nextWidget.id)) {
2265          addedWidgetIds.push(null);
2266          return this._updateWidget(nextWidget);
2267        }
2268  
2269        const widgetId = this._createWidget(nextWidget);
2270  
2271        addedWidgetIds.push(widgetId);
2272        return widgetId;
2273      });
2274      const deletedWidgets = this.getWidgets().filter(widget => !nextWidgetIds.includes(widget.id));
2275      deletedWidgets.forEach(widget => this._removeWidget(widget));
2276      this.setting.set(nextWidgetIds);
2277      this.locked = false;
2278      return addedWidgetIds;
2279    }
2280  
2281    setWidgets(nextWidgets) {
2282      const addedWidgetIds = this._updateWidgets(nextWidgets);
2283  
2284      this._debounceSetHistory();
2285  
2286      return addedWidgetIds;
2287    }
2288    /**
2289     * Undo/Redo related features
2290     */
2291  
2292  
2293    hasUndo() {
2294      return this.historyIndex > 0;
2295    }
2296  
2297    hasRedo() {
2298      return this.historyIndex < this.history.length - 1;
2299    }
2300  
2301    _seek(historyIndex) {
2302      const currentWidgets = this.getWidgets();
2303      this.historyIndex = historyIndex;
2304      const widgets = this.history[this.historyIndex];
2305  
2306      this._updateWidgets(widgets);
2307  
2308      this._emit(currentWidgets, this.getWidgets());
2309  
2310      this.historySubscribers.forEach(listener => listener());
2311  
2312      this._debounceSetHistory.cancel();
2313    }
2314  
2315    undo() {
2316      if (!this.hasUndo()) {
2317        return;
2318      }
2319  
2320      this._seek(this.historyIndex - 1);
2321    }
2322  
2323    redo() {
2324      if (!this.hasRedo()) {
2325        return;
2326      }
2327  
2328      this._seek(this.historyIndex + 1);
2329    }
2330  
2331    subscribeHistory(listener) {
2332      this.historySubscribers.add(listener);
2333      return () => {
2334        this.historySubscribers.delete(listener);
2335      };
2336    }
2337  
2338    save() {
2339      this.api.previewer.save();
2340    }
2341  
2342  }
2343  
2344  // EXTERNAL MODULE: external ["wp","dom"]
2345  var external_wp_dom_ = __webpack_require__("1CF3");
2346  
2347  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/inserter-outer-section.js
2348  /**
2349   * WordPress dependencies
2350   */
2351  
2352  
2353  
2354  /**
2355   * Internal dependencies
2356   */
2357  
2358  
2359  function getInserterOuterSection() {
2360    const {
2361      wp: {
2362        customize
2363      }
2364    } = window;
2365    const OuterSection = customize.OuterSection; // Override the OuterSection class to handle multiple outer sections.
2366    // It closes all the other outer sections whenever one is opened.
2367    // The result is that at most one outer section can be opened at the same time.
2368  
2369    customize.OuterSection = class extends OuterSection {
2370      onChangeExpanded(expanded, args) {
2371        if (expanded) {
2372          customize.section.each(section => {
2373            if (section.params.type === 'outer' && section.id !== this.id) {
2374              if (section.expanded()) {
2375                section.collapse();
2376              }
2377            }
2378          });
2379        }
2380  
2381        return super.onChangeExpanded(expanded, args);
2382      }
2383  
2384    }; // Handle constructor so that "params.type" can be correctly pointed to "outer".
2385  
2386    customize.sectionConstructor.outer = customize.OuterSection;
2387    return class InserterOuterSection extends customize.OuterSection {
2388      constructor(...args) {
2389        super(...args); // This is necessary since we're creating a new class which is not identical to the original OuterSection.
2390        // @See https://github.com/WordPress/wordpress-develop/blob/42b05c397c50d9dc244083eff52991413909d4bd/src/js/_enqueues/wp/customize/controls.js#L1427-L1436
2391  
2392        this.params.type = 'outer';
2393        this.activeElementBeforeExpanded = null;
2394        const ownerWindow = this.contentContainer[0].ownerDocument.defaultView; // Handle closing the inserter when pressing the Escape key.
2395  
2396        ownerWindow.addEventListener('keydown', event => {
2397          if (this.expanded() && (event.keyCode === external_wp_keycodes_["ESCAPE"] || event.code === 'Escape')) {
2398            event.stopPropagation();
2399            Object(external_wp_data_["dispatch"])(store).setIsInserterOpened(false);
2400          }
2401        }, // Use capture mode to make this run before other event listeners.
2402        true);
2403        this.contentContainer.addClass('widgets-inserter'); // Set a flag if the state is being changed from open() or close().
2404        // Don't propagate the event if it's an internal action to prevent infinite loop.
2405  
2406        this.isFromInternalAction = false;
2407        this.expanded.bind(() => {
2408          if (!this.isFromInternalAction) {
2409            // Propagate the event to React to sync the state.
2410            Object(external_wp_data_["dispatch"])(store).setIsInserterOpened(this.expanded());
2411          }
2412  
2413          this.isFromInternalAction = false;
2414        });
2415      }
2416  
2417      open() {
2418        if (!this.expanded()) {
2419          const contentContainer = this.contentContainer[0];
2420          this.activeElementBeforeExpanded = contentContainer.ownerDocument.activeElement;
2421          this.isFromInternalAction = true;
2422          this.expand({
2423            completeCallback() {
2424              // We have to do this in a "completeCallback" or else the elements will not yet be visible/tabbable.
2425              // The first one should be the close button,
2426              // we want to skip it and choose the second one instead, which is the search box.
2427              const searchBox = external_wp_dom_["focus"].tabbable.find(contentContainer)[1];
2428  
2429              if (searchBox) {
2430                searchBox.focus();
2431              }
2432            }
2433  
2434          });
2435        }
2436      }
2437  
2438      close() {
2439        if (this.expanded()) {
2440          const contentContainer = this.contentContainer[0];
2441          const activeElement = contentContainer.ownerDocument.activeElement;
2442          this.isFromInternalAction = true;
2443          this.collapse({
2444            completeCallback() {
2445              // Return back the focus when closing the inserter.
2446              // Only do this if the active element which triggers the action is inside the inserter,
2447              // (the close button for instance). In that case the focus will be lost.
2448              // Otherwise, we don't hijack the focus when the user is focusing on other elements
2449              // (like the quick inserter).
2450              if (contentContainer.contains(activeElement)) {
2451                // Return back the focus when closing the inserter.
2452                if (this.activeElementBeforeExpanded) {
2453                  this.activeElementBeforeExpanded.focus();
2454                }
2455              }
2456            }
2457  
2458          });
2459        }
2460      }
2461  
2462    };
2463  }
2464  
2465  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/controls/sidebar-control.js
2466  /**
2467   * WordPress dependencies
2468   */
2469  
2470  /**
2471   * Internal dependencies
2472   */
2473  
2474  
2475  
2476  
2477  
2478  const getInserterId = controlId => `widgets-inserter-$controlId}`;
2479  
2480  function getSidebarControl() {
2481    const {
2482      wp: {
2483        customize
2484      }
2485    } = window;
2486    return class SidebarControl extends customize.Control {
2487      constructor(...args) {
2488        super(...args);
2489        this.subscribers = new Set();
2490      }
2491  
2492      ready() {
2493        const InserterOuterSection = getInserterOuterSection();
2494        this.inserter = new InserterOuterSection(getInserterId(this.id), {});
2495        customize.section.add(this.inserter);
2496        this.sectionInstance = customize.section(this.section());
2497        this.inspector = this.sectionInstance.inspector;
2498        this.sidebarAdapter = new sidebar_adapter_SidebarAdapter(this.setting, customize);
2499      }
2500  
2501      subscribe(callback) {
2502        this.subscribers.add(callback);
2503        return () => {
2504          this.subscribers.delete(callback);
2505        };
2506      }
2507  
2508      onChangeSectionExpanded(expanded, args) {
2509        if (!args.unchanged) {
2510          // Close the inserter when the section collapses.
2511          if (!expanded) {
2512            Object(external_wp_data_["dispatch"])(store).setIsInserterOpened(false);
2513          }
2514  
2515          this.subscribers.forEach(subscriber => subscriber(expanded, args));
2516        }
2517      }
2518  
2519    };
2520  }
2521  
2522  // EXTERNAL MODULE: external ["wp","hooks"]
2523  var external_wp_hooks_ = __webpack_require__("g56x");
2524  
2525  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/move-to-sidebar.js
2526  
2527  
2528  /**
2529   * External dependencies
2530   */
2531  
2532  /**
2533   * WordPress dependencies
2534   */
2535  
2536  
2537  
2538  
2539  
2540  
2541  /**
2542   * Internal dependencies
2543   */
2544  
2545  
2546  
2547  
2548  const withMoveToSidebarToolbarItem = Object(external_wp_compose_["createHigherOrderComponent"])(BlockEdit => props => {
2549    let widgetId = Object(external_wp_widgets_["getWidgetIdFromBlock"])(props);
2550    const sidebarControls = useSidebarControls();
2551    const activeSidebarControl = useActiveSidebarControl();
2552    const hasMultipleSidebars = (sidebarControls === null || sidebarControls === void 0 ? void 0 : sidebarControls.length) > 1;
2553    const blockName = props.name;
2554    const clientId = props.clientId;
2555    const canInsertBlockInSidebar = Object(external_wp_data_["useSelect"])(select => {
2556      // Use an empty string to represent the root block list, which
2557      // in the customizer editor represents a sidebar/widget area.
2558      return select(external_wp_blockEditor_["store"]).canInsertBlockType(blockName, '');
2559    }, [blockName]);
2560    const block = Object(external_wp_data_["useSelect"])(select => select(external_wp_blockEditor_["store"]).getBlock(clientId), [clientId]);
2561    const {
2562      removeBlock
2563    } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]);
2564    const [, focusWidget] = useFocusControl();
2565  
2566    function moveToSidebar(sidebarControlId) {
2567      const newSidebarControl = sidebarControls.find(sidebarControl => sidebarControl.id === sidebarControlId);
2568  
2569      if (widgetId) {
2570        /**
2571         * If there's a widgetId, move it to the other sidebar.
2572         */
2573        const oldSetting = activeSidebarControl.setting;
2574        const newSetting = newSidebarControl.setting;
2575        oldSetting(Object(external_lodash_["without"])(oldSetting(), widgetId));
2576        newSetting([...newSetting(), widgetId]);
2577      } else {
2578        /**
2579         * If there isn't a widgetId, it's most likely a inner block.
2580         * First, remove the block in the original sidebar,
2581         * then, create a new widget in the new sidebar and get back its widgetId.
2582         */
2583        const sidebarAdapter = newSidebarControl.sidebarAdapter;
2584        removeBlock(clientId);
2585        const addedWidgetIds = sidebarAdapter.setWidgets([...sidebarAdapter.getWidgets(), blockToWidget(block)]); // The last non-null id is the added widget's id.
2586  
2587        widgetId = addedWidgetIds.reverse().find(id => !!id);
2588      } // Move focus to the moved widget and expand the sidebar.
2589  
2590  
2591      focusWidget(widgetId);
2592    }
2593  
2594    return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(BlockEdit, props), hasMultipleSidebars && canInsertBlockInSidebar && Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockControls"], null, Object(external_wp_element_["createElement"])(external_wp_widgets_["MoveToWidgetArea"], {
2595      widgetAreas: sidebarControls.map(sidebarControl => ({
2596        id: sidebarControl.id,
2597        name: sidebarControl.params.label,
2598        description: sidebarControl.params.description
2599      })),
2600      currentWidgetAreaId: activeSidebarControl === null || activeSidebarControl === void 0 ? void 0 : activeSidebarControl.id,
2601      onSelect: moveToSidebar
2602    })));
2603  }, 'withMoveToSidebarToolbarItem');
2604  Object(external_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/customize-widgets/block-edit', withMoveToSidebarToolbarItem);
2605  
2606  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/replace-media-upload.js
2607  /**
2608   * WordPress dependencies
2609   */
2610  
2611  
2612  
2613  const replaceMediaUpload = () => external_wp_mediaUtils_["MediaUpload"];
2614  
2615  Object(external_wp_hooks_["addFilter"])('editor.MediaUpload', 'core/edit-widgets/replace-media-upload', replaceMediaUpload);
2616  
2617  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/wide-widget-display.js
2618  
2619  
2620  
2621  /**
2622   * WordPress dependencies
2623   */
2624  
2625  
2626  const {
2627    wp: wide_widget_display_wp
2628  } = window;
2629  const withWideWidgetDisplay = Object(external_wp_compose_["createHigherOrderComponent"])(BlockEdit => props => {
2630    var _wp$customize$Widgets, _wp$customize$Widgets2;
2631  
2632    const {
2633      idBase
2634    } = props.attributes;
2635    const isWide = (_wp$customize$Widgets = (_wp$customize$Widgets2 = wide_widget_display_wp.customize.Widgets.data.availableWidgets.find(widget => widget.id_base === idBase)) === null || _wp$customize$Widgets2 === void 0 ? void 0 : _wp$customize$Widgets2.is_wide) !== null && _wp$customize$Widgets !== void 0 ? _wp$customize$Widgets : false;
2636    return Object(external_wp_element_["createElement"])(BlockEdit, Object(esm_extends["a" /* default */])({}, props, {
2637      isWide: isWide
2638    }));
2639  }, 'withWideWidgetDisplay');
2640  Object(external_wp_hooks_["addFilter"])('editor.BlockEdit', 'core/customize-widgets/wide-widget-display', withWideWidgetDisplay);
2641  
2642  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/filters/index.js
2643  /**
2644   * Internal dependencies
2645   */
2646  
2647  
2648  
2649  
2650  // CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/index.js
2651  
2652  
2653  /**
2654   * WordPress dependencies
2655   */
2656  
2657  
2658  
2659  
2660  /**
2661   * Internal dependencies
2662   */
2663  
2664  
2665  
2666  
2667  
2668  const {
2669    wp: build_module_wp
2670  } = window;
2671  const DISABLED_BLOCKS = ['core/more', 'core/block', 'core/freeform'];
2672  const ENABLE_EXPERIMENTAL_FSE_BLOCKS = false;
2673  /**
2674   * Initializes the widgets block editor in the customizer.
2675   *
2676   * @param {string} editorName          The editor name.
2677   * @param {Object} blockEditorSettings Block editor settings.
2678   */
2679  
2680  function initialize(editorName, blockEditorSettings) {
2681    const coreBlocks = Object(external_wp_blockLibrary_["__experimentalGetCoreBlocks"])().filter(block => {
2682      return !(DISABLED_BLOCKS.includes(block.name) || block.name.startsWith('core/post') || block.name.startsWith('core/query') || block.name.startsWith('core/site'));
2683    });
2684  
2685    Object(external_wp_blockLibrary_["registerCoreBlocks"])(coreBlocks);
2686    Object(external_wp_widgets_["registerLegacyWidgetBlock"])();
2687  
2688    if (false) {}
2689  
2690    Object(external_wp_widgets_["registerLegacyWidgetVariations"])(blockEditorSettings); // As we are unregistering `core/freeform` to avoid the Classic block, we must
2691    // replace it with something as the default freeform content handler. Failure to
2692    // do this will result in errors in the default block parser.
2693    // see: https://github.com/WordPress/gutenberg/issues/33097
2694  
2695    Object(external_wp_blocks_["setFreeformContentHandlerName"])('core/html');
2696    const SidebarControl = getSidebarControl(blockEditorSettings);
2697    build_module_wp.customize.sectionConstructor.sidebar = getSidebarSection();
2698    build_module_wp.customize.controlConstructor.sidebar_block_editor = SidebarControl;
2699    const container = document.createElement('div');
2700    document.body.appendChild(container);
2701    build_module_wp.customize.bind('ready', () => {
2702      const sidebarControls = [];
2703      build_module_wp.customize.control.each(control => {
2704        if (control instanceof SidebarControl) {
2705          sidebarControls.push(control);
2706        }
2707      });
2708      Object(external_wp_element_["render"])(Object(external_wp_element_["createElement"])(CustomizeWidgets, {
2709        api: build_module_wp.customize,
2710        sidebarControls: sidebarControls,
2711        blockEditorSettings: blockEditorSettings
2712      }), container);
2713    });
2714  }
2715  
2716  
2717  /***/ }),
2718  
2719  /***/ "GLVC":
2720  /***/ (function(module, exports) {
2721  
2722  (function() { module.exports = window["wp"]["widgets"]; }());
2723  
2724  /***/ }),
2725  
2726  /***/ "GRId":
2727  /***/ (function(module, exports) {
2728  
2729  (function() { module.exports = window["wp"]["element"]; }());
2730  
2731  /***/ }),
2732  
2733  /***/ "HSyU":
2734  /***/ (function(module, exports) {
2735  
2736  (function() { module.exports = window["wp"]["blocks"]; }());
2737  
2738  /***/ }),
2739  
2740  /***/ "K+tz":
2741  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2742  
2743  "use strict";
2744  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
2745  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
2746  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
2747  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
2748  
2749  
2750  /**
2751   * WordPress dependencies
2752   */
2753  
2754  const external = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
2755    xmlns: "http://www.w3.org/2000/svg",
2756    viewBox: "0 0 24 24"
2757  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
2758    d: "M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"
2759  }));
2760  /* harmony default export */ __webpack_exports__["a"] = (external);
2761  
2762  
2763  /***/ }),
2764  
2765  /***/ "K2cm":
2766  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2767  
2768  "use strict";
2769  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
2770  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
2771  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
2772  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
2773  
2774  
2775  /**
2776   * WordPress dependencies
2777   */
2778  
2779  const redo = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
2780    xmlns: "http://www.w3.org/2000/svg",
2781    viewBox: "0 0 24 24"
2782  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
2783    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"
2784  }));
2785  /* harmony default export */ __webpack_exports__["a"] = (redo);
2786  
2787  
2788  /***/ }),
2789  
2790  /***/ "K9lf":
2791  /***/ (function(module, exports) {
2792  
2793  (function() { module.exports = window["wp"]["compose"]; }());
2794  
2795  /***/ }),
2796  
2797  /***/ "Ntru":
2798  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2799  
2800  "use strict";
2801  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
2802  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
2803  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
2804  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
2805  
2806  
2807  /**
2808   * WordPress dependencies
2809   */
2810  
2811  const undo = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
2812    xmlns: "http://www.w3.org/2000/svg",
2813    viewBox: "0 0 24 24"
2814  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
2815    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"
2816  }));
2817  /* harmony default export */ __webpack_exports__["a"] = (undo);
2818  
2819  
2820  /***/ }),
2821  
2822  /***/ "Q4Sy":
2823  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2824  
2825  "use strict";
2826  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
2827  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
2828  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
2829  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
2830  
2831  
2832  /**
2833   * WordPress dependencies
2834   */
2835  
2836  const plus = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
2837    xmlns: "http://www.w3.org/2000/svg",
2838    viewBox: "0 0 24 24"
2839  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
2840    d: "M18 11.2h-5.2V6h-1.6v5.2H6v1.6h5.2V18h1.6v-5.2H18z"
2841  }));
2842  /* harmony default export */ __webpack_exports__["a"] = (plus);
2843  
2844  
2845  /***/ }),
2846  
2847  /***/ "QyPg":
2848  /***/ (function(module, exports) {
2849  
2850  (function() { module.exports = window["wp"]["blockLibrary"]; }());
2851  
2852  /***/ }),
2853  
2854  /***/ "RMJe":
2855  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2856  
2857  "use strict";
2858  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
2859  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
2860  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
2861  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
2862  
2863  
2864  /**
2865   * WordPress dependencies
2866   */
2867  
2868  const check = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
2869    xmlns: "http://www.w3.org/2000/svg",
2870    viewBox: "0 0 24 24"
2871  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
2872    d: "M18.3 5.6L9.9 16.9l-4.6-3.4-.9 1.2 5.8 4.3 9.3-12.6z"
2873  }));
2874  /* harmony default export */ __webpack_exports__["a"] = (check);
2875  
2876  
2877  /***/ }),
2878  
2879  /***/ "RxS6":
2880  /***/ (function(module, exports) {
2881  
2882  (function() { module.exports = window["wp"]["keycodes"]; }());
2883  
2884  /***/ }),
2885  
2886  /***/ "TSYQ":
2887  /***/ (function(module, exports, __webpack_require__) {
2888  
2889  var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
2890    Copyright (c) 2018 Jed Watson.
2891    Licensed under the MIT License (MIT), see
2892    http://jedwatson.github.io/classnames
2893  */
2894  /* global define */
2895  
2896  (function () {
2897      'use strict';
2898  
2899      var hasOwn = {}.hasOwnProperty;
2900  
2901  	function classNames() {
2902          var classes = [];
2903  
2904          for (var i = 0; i < arguments.length; i++) {
2905              var arg = arguments[i];
2906              if (!arg) continue;
2907  
2908              var argType = typeof arg;
2909  
2910              if (argType === 'string' || argType === 'number') {
2911                  classes.push(arg);
2912              } else if (Array.isArray(arg)) {
2913                  if (arg.length) {
2914                      var inner = classNames.apply(null, arg);
2915                      if (inner) {
2916                          classes.push(inner);
2917                      }
2918                  }
2919              } else if (argType === 'object') {
2920                  if (arg.toString === Object.prototype.toString) {
2921                      for (var key in arg) {
2922                          if (hasOwn.call(arg, key) && arg[key]) {
2923                              classes.push(key);
2924                          }
2925                      }
2926                  } else {
2927                      classes.push(arg.toString());
2928                  }
2929              }
2930          }
2931  
2932          return classes.join(' ');
2933      }
2934  
2935      if ( true && module.exports) {
2936          classNames.default = classNames;
2937          module.exports = classNames;
2938      } else if (true) {
2939          // register as 'classnames', consistent with npm package name
2940          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
2941              return classNames;
2942          }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
2943                  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
2944      } else {}
2945  }());
2946  
2947  
2948  /***/ }),
2949  
2950  /***/ "Tqx9":
2951  /***/ (function(module, exports) {
2952  
2953  (function() { module.exports = window["wp"]["primitives"]; }());
2954  
2955  /***/ }),
2956  
2957  /***/ "VKE3":
2958  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2959  
2960  "use strict";
2961  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
2962  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
2963  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
2964  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
2965  
2966  
2967  /**
2968   * WordPress dependencies
2969   */
2970  
2971  const moreVertical = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
2972    xmlns: "http://www.w3.org/2000/svg",
2973    viewBox: "0 0 24 24"
2974  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
2975    d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"
2976  }));
2977  /* harmony default export */ __webpack_exports__["a"] = (moreVertical);
2978  
2979  
2980  /***/ }),
2981  
2982  /***/ "YLtl":
2983  /***/ (function(module, exports) {
2984  
2985  (function() { module.exports = window["lodash"]; }());
2986  
2987  /***/ }),
2988  
2989  /***/ "axFQ":
2990  /***/ (function(module, exports) {
2991  
2992  (function() { module.exports = window["wp"]["blockEditor"]; }());
2993  
2994  /***/ }),
2995  
2996  /***/ "bWcr":
2997  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2998  
2999  "use strict";
3000  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId");
3001  /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
3002  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9");
3003  /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__);
3004  
3005  
3006  /**
3007   * WordPress dependencies
3008   */
3009  
3010  const closeSmall = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], {
3011    xmlns: "http://www.w3.org/2000/svg",
3012    viewBox: "0 0 24 24"
3013  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], {
3014    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"
3015  }));
3016  /* harmony default export */ __webpack_exports__["a"] = (closeSmall);
3017  
3018  
3019  /***/ }),
3020  
3021  /***/ "g56x":
3022  /***/ (function(module, exports) {
3023  
3024  (function() { module.exports = window["wp"]["hooks"]; }());
3025  
3026  /***/ }),
3027  
3028  /***/ "gdqT":
3029  /***/ (function(module, exports) {
3030  
3031  (function() { module.exports = window["wp"]["a11y"]; }());
3032  
3033  /***/ }),
3034  
3035  /***/ "hF7m":
3036  /***/ (function(module, exports) {
3037  
3038  (function() { module.exports = window["wp"]["keyboardShortcuts"]; }());
3039  
3040  /***/ }),
3041  
3042  /***/ "jZUy":
3043  /***/ (function(module, exports) {
3044  
3045  (function() { module.exports = window["wp"]["coreData"]; }());
3046  
3047  /***/ }),
3048  
3049  /***/ "l3Sj":
3050  /***/ (function(module, exports) {
3051  
3052  (function() { module.exports = window["wp"]["i18n"]; }());
3053  
3054  /***/ }),
3055  
3056  /***/ "rl8x":
3057  /***/ (function(module, exports) {
3058  
3059  (function() { module.exports = window["wp"]["isShallowEqual"]; }());
3060  
3061  /***/ }),
3062  
3063  /***/ "tI+e":
3064  /***/ (function(module, exports) {
3065  
3066  (function() { module.exports = window["wp"]["components"]; }());
3067  
3068  /***/ }),
3069  
3070  /***/ "wx14":
3071  /***/ (function(module, __webpack_exports__, __webpack_require__) {
3072  
3073  "use strict";
3074  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
3075  function _extends() {
3076    _extends = Object.assign || function (target) {
3077      for (var i = 1; i < arguments.length; i++) {
3078        var source = arguments[i];
3079  
3080        for (var key in source) {
3081          if (Object.prototype.hasOwnProperty.call(source, key)) {
3082            target[key] = source[key];
3083          }
3084        }
3085      }
3086  
3087      return target;
3088    };
3089  
3090    return _extends.apply(this, arguments);
3091  }
3092  
3093  /***/ })
3094  
3095  /******/ });


Generated: Sun Oct 17 01:00:03 2021 Cross-referenced by PHPXref 0.7.1