block-directory.js (62383B)
1 this["wp"] = this["wp"] || {}; this["wp"]["blockDirectory"] = 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 = "7f3f"); 86 /******/ }) 87 /************************************************************************/ 88 /******/ ({ 89 90 /***/ "//Lo": 91 /***/ (function(module, __webpack_exports__, __webpack_require__) { 92 93 "use strict"; 94 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 95 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 96 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 97 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 98 99 100 /** 101 * WordPress dependencies 102 */ 103 104 const blockDefault = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 105 xmlns: "http://www.w3.org/2000/svg", 106 viewBox: "0 0 24 24" 107 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 108 d: "M19 8h-1V6h-5v2h-2V6H6v2H5c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2zm.5 10c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5v-8c0-.3.2-.5.5-.5h14c.3 0 .5.2.5.5v8z" 109 })); 110 /* harmony default export */ __webpack_exports__["a"] = (blockDefault); 111 112 113 /***/ }), 114 115 /***/ "1ZqX": 116 /***/ (function(module, exports) { 117 118 (function() { module.exports = window["wp"]["data"]; }()); 119 120 /***/ }), 121 122 /***/ "51Zz": 123 /***/ (function(module, exports) { 124 125 (function() { module.exports = window["wp"]["dataControls"]; }()); 126 127 /***/ }), 128 129 /***/ "7f3f": 130 /***/ (function(module, __webpack_exports__, __webpack_require__) { 131 132 "use strict"; 133 // ESM COMPAT FLAG 134 __webpack_require__.r(__webpack_exports__); 135 136 // EXPORTS 137 __webpack_require__.d(__webpack_exports__, "store", function() { return /* reexport */ store; }); 138 139 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-directory/build-module/store/selectors.js 140 var selectors_namespaceObject = {}; 141 __webpack_require__.r(selectors_namespaceObject); 142 __webpack_require__.d(selectors_namespaceObject, "isRequestingDownloadableBlocks", function() { return selectors_isRequestingDownloadableBlocks; }); 143 __webpack_require__.d(selectors_namespaceObject, "getDownloadableBlocks", function() { return selectors_getDownloadableBlocks; }); 144 __webpack_require__.d(selectors_namespaceObject, "getInstalledBlockTypes", function() { return getInstalledBlockTypes; }); 145 __webpack_require__.d(selectors_namespaceObject, "getNewBlockTypes", function() { return getNewBlockTypes; }); 146 __webpack_require__.d(selectors_namespaceObject, "getUnusedBlockTypes", function() { return getUnusedBlockTypes; }); 147 __webpack_require__.d(selectors_namespaceObject, "isInstalling", function() { return selectors_isInstalling; }); 148 __webpack_require__.d(selectors_namespaceObject, "getErrorNotices", function() { return getErrorNotices; }); 149 __webpack_require__.d(selectors_namespaceObject, "getErrorNoticeForBlock", function() { return selectors_getErrorNoticeForBlock; }); 150 151 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-directory/build-module/store/actions.js 152 var actions_namespaceObject = {}; 153 __webpack_require__.r(actions_namespaceObject); 154 __webpack_require__.d(actions_namespaceObject, "fetchDownloadableBlocks", function() { return fetchDownloadableBlocks; }); 155 __webpack_require__.d(actions_namespaceObject, "receiveDownloadableBlocks", function() { return receiveDownloadableBlocks; }); 156 __webpack_require__.d(actions_namespaceObject, "installBlockType", function() { return actions_installBlockType; }); 157 __webpack_require__.d(actions_namespaceObject, "uninstallBlockType", function() { return actions_uninstallBlockType; }); 158 __webpack_require__.d(actions_namespaceObject, "addInstalledBlockType", function() { return addInstalledBlockType; }); 159 __webpack_require__.d(actions_namespaceObject, "removeInstalledBlockType", function() { return removeInstalledBlockType; }); 160 __webpack_require__.d(actions_namespaceObject, "setIsInstalling", function() { return setIsInstalling; }); 161 __webpack_require__.d(actions_namespaceObject, "setErrorNotice", function() { return setErrorNotice; }); 162 __webpack_require__.d(actions_namespaceObject, "clearErrorNotice", function() { return clearErrorNotice; }); 163 164 // EXTERNAL MODULE: external ["wp","element"] 165 var external_wp_element_ = __webpack_require__("GRId"); 166 167 // EXTERNAL MODULE: external ["wp","plugins"] 168 var external_wp_plugins_ = __webpack_require__("TvNi"); 169 170 // EXTERNAL MODULE: external ["wp","hooks"] 171 var external_wp_hooks_ = __webpack_require__("g56x"); 172 173 // EXTERNAL MODULE: external ["wp","blocks"] 174 var external_wp_blocks_ = __webpack_require__("HSyU"); 175 176 // EXTERNAL MODULE: external ["wp","data"] 177 var external_wp_data_ = __webpack_require__("1ZqX"); 178 179 // EXTERNAL MODULE: external ["wp","editor"] 180 var external_wp_editor_ = __webpack_require__("jSdM"); 181 182 // EXTERNAL MODULE: external ["wp","dataControls"] 183 var external_wp_dataControls_ = __webpack_require__("51Zz"); 184 185 // EXTERNAL MODULE: external "lodash" 186 var external_lodash_ = __webpack_require__("YLtl"); 187 188 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/reducer.js 189 /** 190 * External dependencies 191 */ 192 193 /** 194 * WordPress dependencies 195 */ 196 197 198 /** 199 * Reducer returning an array of downloadable blocks. 200 * 201 * @param {Object} state Current state. 202 * @param {Object} action Dispatched action. 203 * 204 * @return {Object} Updated state. 205 */ 206 207 const downloadableBlocks = (state = {}, action) => { 208 switch (action.type) { 209 case 'FETCH_DOWNLOADABLE_BLOCKS': 210 return { ...state, 211 [action.filterValue]: { 212 isRequesting: true 213 } 214 }; 215 216 case 'RECEIVE_DOWNLOADABLE_BLOCKS': 217 return { ...state, 218 [action.filterValue]: { 219 results: action.downloadableBlocks, 220 isRequesting: false 221 } 222 }; 223 } 224 225 return state; 226 }; 227 /** 228 * Reducer managing the installation and deletion of blocks. 229 * 230 * @param {Object} state Current state. 231 * @param {Object} action Dispatched action. 232 * 233 * @return {Object} Updated state. 234 */ 235 236 const blockManagement = (state = { 237 installedBlockTypes: [], 238 isInstalling: {} 239 }, action) => { 240 switch (action.type) { 241 case 'ADD_INSTALLED_BLOCK_TYPE': 242 return { ...state, 243 installedBlockTypes: [...state.installedBlockTypes, action.item] 244 }; 245 246 case 'REMOVE_INSTALLED_BLOCK_TYPE': 247 return { ...state, 248 installedBlockTypes: state.installedBlockTypes.filter(blockType => blockType.name !== action.item.name) 249 }; 250 251 case 'SET_INSTALLING_BLOCK': 252 return { ...state, 253 isInstalling: { ...state.isInstalling, 254 [action.blockId]: action.isInstalling 255 } 256 }; 257 } 258 259 return state; 260 }; 261 /** 262 * Reducer returning an object of error notices. 263 * 264 * @param {Object} state Current state. 265 * @param {Object} action Dispatched action. 266 * 267 * @return {Object} Updated state. 268 */ 269 270 const errorNotices = (state = {}, action) => { 271 switch (action.type) { 272 case 'SET_ERROR_NOTICE': 273 return { ...state, 274 [action.blockId]: { 275 message: action.message, 276 isFatal: action.isFatal 277 } 278 }; 279 280 case 'CLEAR_ERROR_NOTICE': 281 return Object(external_lodash_["omit"])(state, action.blockId); 282 } 283 284 return state; 285 }; 286 /* harmony default export */ var reducer = (Object(external_wp_data_["combineReducers"])({ 287 downloadableBlocks, 288 blockManagement, 289 errorNotices 290 })); 291 292 // EXTERNAL MODULE: external ["wp","blockEditor"] 293 var external_wp_blockEditor_ = __webpack_require__("axFQ"); 294 295 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/utils/has-block-type.js 296 /** 297 * Check if a block list contains a specific block type. Recursively searches 298 * through `innerBlocks` if they exist. 299 * 300 * @param {Object} blockType A block object to search for. 301 * @param {Object[]} blocks The list of blocks to look through. 302 * 303 * @return {boolean} Whether the blockType is found. 304 */ 305 function hasBlockType(blockType, blocks = []) { 306 if (!blocks.length) { 307 return false; 308 } 309 310 if (blocks.some(({ 311 name 312 }) => name === blockType.name)) { 313 return true; 314 } 315 316 for (let i = 0; i < blocks.length; i++) { 317 if (hasBlockType(blockType, blocks[i].innerBlocks)) { 318 return true; 319 } 320 } 321 322 return false; 323 } 324 325 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/selectors.js 326 /** 327 * WordPress dependencies 328 */ 329 330 331 /** 332 * Internal dependencies 333 */ 334 335 336 /** 337 * Returns true if application is requesting for downloadable blocks. 338 * 339 * @param {Object} state Global application state. 340 * @param {string} filterValue Search string. 341 * 342 * @return {boolean} Whether a request is in progress for the blocks list. 343 */ 344 345 function selectors_isRequestingDownloadableBlocks(state, filterValue) { 346 if (!state.downloadableBlocks[filterValue] || !state.downloadableBlocks[filterValue].isRequesting) { 347 return false; 348 } 349 350 return state.downloadableBlocks[filterValue].isRequesting; 351 } 352 /** 353 * Returns the available uninstalled blocks. 354 * 355 * @param {Object} state Global application state. 356 * @param {string} filterValue Search string. 357 * 358 * @return {Array} Downloadable blocks. 359 */ 360 361 function selectors_getDownloadableBlocks(state, filterValue) { 362 if (!state.downloadableBlocks[filterValue] || !state.downloadableBlocks[filterValue].results) { 363 return []; 364 } 365 366 return state.downloadableBlocks[filterValue].results; 367 } 368 /** 369 * Returns the block types that have been installed on the server in this 370 * session. 371 * 372 * @param {Object} state Global application state. 373 * 374 * @return {Array} Block type items 375 */ 376 377 function getInstalledBlockTypes(state) { 378 return state.blockManagement.installedBlockTypes; 379 } 380 /** 381 * Returns block types that have been installed on the server and used in the 382 * current post. 383 * 384 * @param {Object} state Global application state. 385 * 386 * @return {Array} Block type items. 387 */ 388 389 const getNewBlockTypes = Object(external_wp_data_["createRegistrySelector"])(select => state => { 390 const usedBlockTree = select(external_wp_blockEditor_["store"]).getBlocks(); 391 const installedBlockTypes = getInstalledBlockTypes(state); 392 return installedBlockTypes.filter(blockType => hasBlockType(blockType, usedBlockTree)); 393 }); 394 /** 395 * Returns the block types that have been installed on the server but are not 396 * used in the current post. 397 * 398 * @param {Object} state Global application state. 399 * 400 * @return {Array} Block type items. 401 */ 402 403 const getUnusedBlockTypes = Object(external_wp_data_["createRegistrySelector"])(select => state => { 404 const usedBlockTree = select(external_wp_blockEditor_["store"]).getBlocks(); 405 const installedBlockTypes = getInstalledBlockTypes(state); 406 return installedBlockTypes.filter(blockType => !hasBlockType(blockType, usedBlockTree)); 407 }); 408 /** 409 * Returns true if a block plugin install is in progress. 410 * 411 * @param {Object} state Global application state. 412 * @param {string} blockId Id of the block. 413 * 414 * @return {boolean} Whether this block is currently being installed. 415 */ 416 417 function selectors_isInstalling(state, blockId) { 418 return state.blockManagement.isInstalling[blockId] || false; 419 } 420 /** 421 * Returns all block error notices. 422 * 423 * @param {Object} state Global application state. 424 * 425 * @return {Object} Object with error notices. 426 */ 427 428 function getErrorNotices(state) { 429 return state.errorNotices; 430 } 431 /** 432 * Returns the error notice for a given block. 433 * 434 * @param {Object} state Global application state. 435 * @param {string} blockId The ID of the block plugin. eg: my-block 436 * 437 * @return {string|boolean} The error text, or false if no error. 438 */ 439 440 function selectors_getErrorNoticeForBlock(state, blockId) { 441 return state.errorNotices[blockId]; 442 } 443 444 // EXTERNAL MODULE: external ["wp","i18n"] 445 var external_wp_i18n_ = __webpack_require__("l3Sj"); 446 447 // EXTERNAL MODULE: external ["wp","notices"] 448 var external_wp_notices_ = __webpack_require__("onLe"); 449 450 // EXTERNAL MODULE: external ["wp","apiFetch"] 451 var external_wp_apiFetch_ = __webpack_require__("ywyh"); 452 var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_); 453 454 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/controls.js 455 /** 456 * WordPress dependencies 457 */ 458 459 /** 460 * Load an asset for a block. 461 * 462 * This function returns a Promise that will resolve once the asset is loaded, 463 * or in the case of Stylesheets and Inline JavaScript, will resolve immediately. 464 * 465 * @param {HTMLElement} el A HTML Element asset to inject. 466 * 467 * @return {Promise} Promise which will resolve when the asset is loaded. 468 */ 469 470 const loadAsset = el => { 471 return new Promise((resolve, reject) => { 472 /* 473 * Reconstruct the passed element, this is required as inserting the Node directly 474 * won't always fire the required onload events, even if the asset wasn't already loaded. 475 */ 476 const newNode = document.createElement(el.nodeName); 477 ['id', 'rel', 'src', 'href', 'type'].forEach(attr => { 478 if (el[attr]) { 479 newNode[attr] = el[attr]; 480 } 481 }); // Append inline <script> contents. 482 483 if (el.innerHTML) { 484 newNode.appendChild(document.createTextNode(el.innerHTML)); 485 } 486 487 newNode.onload = () => resolve(true); 488 489 newNode.onerror = () => reject(new Error('Error loading asset.')); 490 491 document.body.appendChild(newNode); // Resolve Stylesheets and Inline JavaScript immediately. 492 493 if ('link' === newNode.nodeName.toLowerCase() || 'script' === newNode.nodeName.toLowerCase() && !newNode.src) { 494 resolve(); 495 } 496 }); 497 }; 498 /** 499 * Load the asset files for a block 500 * 501 * @param {Array} assets A collection of URLs for the assets. 502 * 503 * @return {Object} Control descriptor. 504 */ 505 506 function loadAssets(assets) { 507 return { 508 type: 'LOAD_ASSETS', 509 assets 510 }; 511 } 512 const controls = { 513 async LOAD_ASSETS() { 514 /* 515 * Fetch the current URL (post-new.php, or post.php?post=1&action=edit) and compare the 516 * JavaScript and CSS assets loaded between the pages. This imports the required assets 517 * for the block into the current page while not requiring that we know them up-front. 518 * In the future this can be improved by reliance upon block.json and/or a script-loader 519 * dependency API. 520 */ 521 const response = await external_wp_apiFetch_default()({ 522 url: document.location.href, 523 parse: false 524 }); 525 const data = await response.text(); 526 const doc = new window.DOMParser().parseFromString(data, 'text/html'); 527 const newAssets = Array.from(doc.querySelectorAll('link[rel="stylesheet"],script')).filter(asset => asset.id && !document.getElementById(asset.id)); 528 /* 529 * Load each asset in order, as they may depend upon an earlier loaded script. 530 * Stylesheets and Inline Scripts will resolve immediately upon insertion. 531 */ 532 533 for (const newAsset of newAssets) { 534 await loadAsset(newAsset); 535 } 536 } 537 538 }; 539 /* harmony default export */ var store_controls = (controls); 540 541 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/utils/get-plugin-url.js 542 /** 543 * Get the plugin's direct API link out of a block-directory response. 544 * 545 * @param {Object} block The block object 546 * 547 * @return {string} The plugin URL, if exists. 548 */ 549 function getPluginUrl(block) { 550 if (!block) { 551 return false; 552 } 553 554 const link = block.links['wp:plugin'] || block.links.self; 555 556 if (link && link.length) { 557 return link[0].href; 558 } 559 560 return false; 561 } 562 563 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/actions.js 564 /** 565 * WordPress dependencies 566 */ 567 568 569 570 571 572 /** 573 * Internal dependencies 574 */ 575 576 577 578 /** 579 * Returns an action object used in signalling that the downloadable blocks 580 * have been requested and are loading. 581 * 582 * @param {string} filterValue Search string. 583 * 584 * @return {Object} Action object. 585 */ 586 587 function fetchDownloadableBlocks(filterValue) { 588 return { 589 type: 'FETCH_DOWNLOADABLE_BLOCKS', 590 filterValue 591 }; 592 } 593 /** 594 * Returns an action object used in signalling that the downloadable blocks 595 * have been updated. 596 * 597 * @param {Array} downloadableBlocks Downloadable blocks. 598 * @param {string} filterValue Search string. 599 * 600 * @return {Object} Action object. 601 */ 602 603 function receiveDownloadableBlocks(downloadableBlocks, filterValue) { 604 return { 605 type: 'RECEIVE_DOWNLOADABLE_BLOCKS', 606 downloadableBlocks, 607 filterValue 608 }; 609 } 610 /** 611 * Action triggered to install a block plugin. 612 * 613 * @param {Object} block The block item returned by search. 614 * 615 * @return {boolean} Whether the block was successfully installed & loaded. 616 */ 617 618 function* actions_installBlockType(block) { 619 const { 620 id, 621 assets 622 } = block; 623 let success = false; 624 yield clearErrorNotice(id); 625 626 try { 627 yield setIsInstalling(block.id, true); // If we have a wp:plugin link, the plugin is installed but inactive. 628 629 const url = getPluginUrl(block); 630 let links = {}; 631 632 if (url) { 633 yield Object(external_wp_dataControls_["apiFetch"])({ 634 url, 635 data: { 636 status: 'active' 637 }, 638 method: 'PUT' 639 }); 640 } else { 641 const response = yield Object(external_wp_dataControls_["apiFetch"])({ 642 path: 'wp/v2/plugins', 643 data: { 644 slug: block.id, 645 status: 'active' 646 }, 647 method: 'POST' 648 }); // Add the `self` link for newly-installed blocks. 649 650 links = response._links; 651 } 652 653 yield addInstalledBlockType({ ...block, 654 links: { ...block.links, 655 ...links 656 } 657 }); 658 yield loadAssets(assets); 659 const registeredBlocks = yield external_wp_data_["controls"].select(external_wp_blocks_["store"].name, 'getBlockTypes'); 660 661 if (!registeredBlocks.some(i => i.name === block.name)) { 662 throw new Error(Object(external_wp_i18n_["__"])('Error registering block. Try reloading the page.')); 663 } 664 665 yield external_wp_data_["controls"].dispatch(external_wp_notices_["store"], 'createInfoNotice', Object(external_wp_i18n_["sprintf"])( // translators: %s is the block title. 666 Object(external_wp_i18n_["__"])('Block %s installed and added.'), block.title), { 667 speak: true, 668 type: 'snackbar' 669 }); 670 success = true; 671 } catch (error) { 672 let message = error.message || Object(external_wp_i18n_["__"])('An error occurred.'); // Errors we throw are fatal 673 674 675 let isFatal = error instanceof Error; // Specific API errors that are fatal 676 677 const fatalAPIErrors = { 678 folder_exists: Object(external_wp_i18n_["__"])('This block is already installed. Try reloading the page.'), 679 unable_to_connect_to_filesystem: Object(external_wp_i18n_["__"])('Error installing block. You can reload the page and try again.') 680 }; 681 682 if (fatalAPIErrors[error.code]) { 683 isFatal = true; 684 message = fatalAPIErrors[error.code]; 685 } 686 687 yield setErrorNotice(id, message, isFatal); 688 yield external_wp_data_["controls"].dispatch(external_wp_notices_["store"], 'createErrorNotice', message, { 689 speak: true, 690 isDismissible: true 691 }); 692 } 693 694 yield setIsInstalling(block.id, false); 695 return success; 696 } 697 /** 698 * Action triggered to uninstall a block plugin. 699 * 700 * @param {Object} block The blockType object. 701 */ 702 703 function* actions_uninstallBlockType(block) { 704 try { 705 yield Object(external_wp_dataControls_["apiFetch"])({ 706 url: getPluginUrl(block), 707 data: { 708 status: 'inactive' 709 }, 710 method: 'PUT' 711 }); 712 yield Object(external_wp_dataControls_["apiFetch"])({ 713 url: getPluginUrl(block), 714 method: 'DELETE' 715 }); 716 yield removeInstalledBlockType(block); 717 } catch (error) { 718 yield external_wp_data_["controls"].dispatch(external_wp_notices_["store"], 'createErrorNotice', error.message || Object(external_wp_i18n_["__"])('An error occurred.')); 719 } 720 } 721 /** 722 * Returns an action object used to add a block type to the "newly installed" 723 * tracking list. 724 * 725 * @param {Object} item The block item with the block id and name. 726 * 727 * @return {Object} Action object. 728 */ 729 730 function addInstalledBlockType(item) { 731 return { 732 type: 'ADD_INSTALLED_BLOCK_TYPE', 733 item 734 }; 735 } 736 /** 737 * Returns an action object used to remove a block type from the "newly installed" 738 * tracking list. 739 * 740 * @param {string} item The block item with the block id and name. 741 * 742 * @return {Object} Action object. 743 */ 744 745 function removeInstalledBlockType(item) { 746 return { 747 type: 'REMOVE_INSTALLED_BLOCK_TYPE', 748 item 749 }; 750 } 751 /** 752 * Returns an action object used to indicate install in progress. 753 * 754 * @param {string} blockId 755 * @param {boolean} isInstalling 756 * 757 * @return {Object} Action object. 758 */ 759 760 function setIsInstalling(blockId, isInstalling) { 761 return { 762 type: 'SET_INSTALLING_BLOCK', 763 blockId, 764 isInstalling 765 }; 766 } 767 /** 768 * Sets an error notice to be displayed to the user for a given block. 769 * 770 * @param {string} blockId The ID of the block plugin. eg: my-block 771 * @param {string} message The message shown in the notice. 772 * @param {boolean} isFatal Whether the user can recover from the error. 773 * 774 * @return {Object} Action object. 775 */ 776 777 function setErrorNotice(blockId, message, isFatal = false) { 778 return { 779 type: 'SET_ERROR_NOTICE', 780 blockId, 781 message, 782 isFatal 783 }; 784 } 785 /** 786 * Sets the error notice to empty for specific block. 787 * 788 * @param {string} blockId The ID of the block plugin. eg: my-block 789 * 790 * @return {Object} Action object. 791 */ 792 793 function clearErrorNotice(blockId) { 794 return { 795 type: 'CLEAR_ERROR_NOTICE', 796 blockId 797 }; 798 } 799 800 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/resolvers.js 801 /** 802 * External dependencies 803 */ 804 805 /** 806 * WordPress dependencies 807 */ 808 809 810 /** 811 * Internal dependencies 812 */ 813 814 815 /* harmony default export */ var resolvers = ({ 816 *getDownloadableBlocks(filterValue) { 817 if (!filterValue) { 818 return; 819 } 820 821 try { 822 yield fetchDownloadableBlocks(filterValue); 823 const results = yield Object(external_wp_dataControls_["apiFetch"])({ 824 path: `wp/v2/block-directory/search?term=${filterValue}` 825 }); 826 const blocks = results.map(result => Object(external_lodash_["mapKeys"])(result, (value, key) => { 827 return Object(external_lodash_["camelCase"])(key); 828 })); 829 yield receiveDownloadableBlocks(blocks, filterValue); 830 } catch (error) {} 831 } 832 833 }); 834 835 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/index.js 836 /** 837 * WordPress dependencies 838 */ 839 840 841 /** 842 * Internal dependencies 843 */ 844 845 846 847 848 849 850 /** 851 * Module Constants 852 */ 853 854 const STORE_NAME = 'core/block-directory'; 855 /** 856 * Block editor data store configuration. 857 * 858 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore 859 * 860 * @type {Object} 861 */ 862 863 const storeConfig = { 864 reducer: reducer, 865 selectors: selectors_namespaceObject, 866 actions: actions_namespaceObject, 867 controls: { ...external_wp_dataControls_["controls"], 868 ...store_controls 869 }, 870 resolvers: resolvers 871 }; 872 /** 873 * Store definition for the block directory namespace. 874 * 875 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore 876 * 877 * @type {Object} 878 */ 879 880 const store = Object(external_wp_data_["createReduxStore"])(STORE_NAME, storeConfig); 881 Object(external_wp_data_["register"])(store); 882 883 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/auto-block-uninstaller/index.js 884 /** 885 * WordPress dependencies 886 */ 887 888 889 890 891 /** 892 * Internal dependencies 893 */ 894 895 896 function AutoBlockUninstaller() { 897 const { 898 uninstallBlockType 899 } = Object(external_wp_data_["useDispatch"])(store); 900 const shouldRemoveBlockTypes = Object(external_wp_data_["useSelect"])(select => { 901 const { 902 isAutosavingPost, 903 isSavingPost 904 } = select(external_wp_editor_["store"]); 905 return isSavingPost() && !isAutosavingPost(); 906 }, []); 907 const unusedBlockTypes = Object(external_wp_data_["useSelect"])(select => select(store).getUnusedBlockTypes(), []); 908 Object(external_wp_element_["useEffect"])(() => { 909 if (shouldRemoveBlockTypes && unusedBlockTypes.length) { 910 unusedBlockTypes.forEach(blockType => { 911 uninstallBlockType(blockType); 912 Object(external_wp_blocks_["unregisterBlockType"])(blockType.name); 913 }); 914 } 915 }, [shouldRemoveBlockTypes]); 916 return null; 917 } 918 919 // EXTERNAL MODULE: external ["wp","components"] 920 var external_wp_components_ = __webpack_require__("tI+e"); 921 922 // EXTERNAL MODULE: external ["wp","compose"] 923 var external_wp_compose_ = __webpack_require__("K9lf"); 924 925 // EXTERNAL MODULE: external ["wp","coreData"] 926 var external_wp_coreData_ = __webpack_require__("jZUy"); 927 928 // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js 929 var esm_extends = __webpack_require__("wx14"); 930 931 // EXTERNAL MODULE: external ["wp","htmlEntities"] 932 var external_wp_htmlEntities_ = __webpack_require__("rmEH"); 933 934 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/icon/index.js 935 var build_module_icon = __webpack_require__("iClF"); 936 937 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/star-filled.js 938 var star_filled = __webpack_require__("URob"); 939 940 // EXTERNAL MODULE: external ["wp","primitives"] 941 var external_wp_primitives_ = __webpack_require__("Tqx9"); 942 943 // CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/star-half.js 944 945 946 /** 947 * WordPress dependencies 948 */ 949 950 const starHalf = Object(external_wp_element_["createElement"])(external_wp_primitives_["SVG"], { 951 xmlns: "http://www.w3.org/2000/svg", 952 viewBox: "0 0 24 24" 953 }, Object(external_wp_element_["createElement"])(external_wp_primitives_["Path"], { 954 d: "M9.518 8.783a.25.25 0 00.188-.137l2.069-4.192a.25.25 0 01.448 0l2.07 4.192a.25.25 0 00.187.137l4.626.672a.25.25 0 01.139.427l-3.347 3.262a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.363.264l-4.137-2.176a.25.25 0 00-.233 0l-4.138 2.175a.25.25 0 01-.362-.263l.79-4.607a.25.25 0 00-.072-.222L4.753 9.882a.25.25 0 01.14-.427l4.625-.672zM12 14.533c.28 0 .559.067.814.2l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39v7.143z" 955 })); 956 /* harmony default export */ var star_half = (starHalf); 957 958 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/star-empty.js 959 var star_empty = __webpack_require__("Xxwi"); 960 961 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/block-ratings/stars.js 962 963 964 /** 965 * External dependencies 966 */ 967 968 /** 969 * WordPress dependencies 970 */ 971 972 973 974 975 function Stars({ 976 rating 977 }) { 978 const stars = Math.round(rating / 0.5) * 0.5; 979 const fullStarCount = Math.floor(rating); 980 const halfStarCount = Math.ceil(rating - fullStarCount); 981 const emptyStarCount = 5 - (fullStarCount + halfStarCount); 982 return Object(external_wp_element_["createElement"])("span", { 983 "aria-label": Object(external_wp_i18n_["sprintf"])( 984 /* translators: %s: number of stars. */ 985 Object(external_wp_i18n_["__"])('%s out of 5 stars'), stars) 986 }, Object(external_lodash_["times"])(fullStarCount, i => Object(external_wp_element_["createElement"])(build_module_icon["a" /* default */], { 987 key: `full_stars_${i}`, 988 className: "block-directory-block-ratings__star-full", 989 icon: star_filled["a" /* default */], 990 size: 16 991 })), Object(external_lodash_["times"])(halfStarCount, i => Object(external_wp_element_["createElement"])(build_module_icon["a" /* default */], { 992 key: `half_stars_${i}`, 993 className: "block-directory-block-ratings__star-half-full", 994 icon: star_half, 995 size: 16 996 })), Object(external_lodash_["times"])(emptyStarCount, i => Object(external_wp_element_["createElement"])(build_module_icon["a" /* default */], { 997 key: `empty_stars_${i}`, 998 className: "block-directory-block-ratings__star-empty", 999 icon: star_empty["a" /* default */], 1000 size: 16 1001 }))); 1002 } 1003 1004 /* harmony default export */ var block_ratings_stars = (Stars); 1005 1006 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/block-ratings/index.js 1007 1008 1009 /** 1010 * Internal dependencies 1011 */ 1012 1013 const BlockRatings = ({ 1014 rating 1015 }) => Object(external_wp_element_["createElement"])("span", { 1016 className: "block-directory-block-ratings" 1017 }, Object(external_wp_element_["createElement"])(block_ratings_stars, { 1018 rating: rating 1019 })); 1020 /* harmony default export */ var block_ratings = (BlockRatings); 1021 1022 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-block-icon/index.js 1023 1024 1025 /** 1026 * WordPress dependencies 1027 */ 1028 1029 1030 function DownloadableBlockIcon({ 1031 icon 1032 }) { 1033 const className = 'block-directory-downloadable-block-icon'; 1034 return icon.match(/\.(jpeg|jpg|gif|png|svg)(?:\?.*)?$/) !== null ? Object(external_wp_element_["createElement"])("img", { 1035 className: className, 1036 src: icon, 1037 alt: "" 1038 }) : Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockIcon"], { 1039 className: className, 1040 icon: icon, 1041 showColors: true 1042 }); 1043 } 1044 1045 /* harmony default export */ var downloadable_block_icon = (DownloadableBlockIcon); 1046 1047 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-block-notice/index.js 1048 1049 1050 /** 1051 * WordPress dependencies 1052 */ 1053 1054 1055 /** 1056 * Internal dependencies 1057 */ 1058 1059 1060 const DownloadableBlockNotice = ({ 1061 block 1062 }) => { 1063 const errorNotice = Object(external_wp_data_["useSelect"])(select => select(store).getErrorNoticeForBlock(block.id), [block]); 1064 1065 if (!errorNotice) { 1066 return null; 1067 } 1068 1069 return Object(external_wp_element_["createElement"])("div", { 1070 className: "block-directory-downloadable-block-notice" 1071 }, Object(external_wp_element_["createElement"])("div", { 1072 className: "block-directory-downloadable-block-notice__content" 1073 }, errorNotice.message, errorNotice.isFatal ? ' ' + Object(external_wp_i18n_["__"])('Try reloading the page.') : null)); 1074 }; 1075 /* harmony default export */ var downloadable_block_notice = (DownloadableBlockNotice); 1076 1077 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-block-list-item/index.js 1078 1079 1080 1081 /** 1082 * WordPress dependencies 1083 */ 1084 1085 1086 1087 1088 1089 1090 /** 1091 * Internal dependencies 1092 */ 1093 1094 1095 1096 1097 // Return the appropriate block item label, given the block data and status. 1098 1099 function getDownloadableBlockLabel({ 1100 title, 1101 rating, 1102 ratingCount 1103 }, { 1104 hasNotice, 1105 isInstalled, 1106 isInstalling 1107 }) { 1108 const stars = Math.round(rating / 0.5) * 0.5; 1109 1110 if (!isInstalled && hasNotice) { 1111 /* translators: %1$s: block title */ 1112 return Object(external_wp_i18n_["sprintf"])('Retry installing %s.', Object(external_wp_htmlEntities_["decodeEntities"])(title)); 1113 } 1114 1115 if (isInstalled) { 1116 /* translators: %1$s: block title */ 1117 return Object(external_wp_i18n_["sprintf"])('Add %s.', Object(external_wp_htmlEntities_["decodeEntities"])(title)); 1118 } 1119 1120 if (isInstalling) { 1121 /* translators: %1$s: block title */ 1122 return Object(external_wp_i18n_["sprintf"])('Installing %s.', Object(external_wp_htmlEntities_["decodeEntities"])(title)); 1123 } // No ratings yet, just use the title. 1124 1125 1126 if (ratingCount < 1) { 1127 /* translators: %1$s: block title */ 1128 return Object(external_wp_i18n_["sprintf"])('Install %s.', Object(external_wp_htmlEntities_["decodeEntities"])(title)); 1129 } 1130 1131 return Object(external_wp_i18n_["sprintf"])( 1132 /* translators: %1$s: block title, %2$s: average rating, %3$s: total ratings count. */ 1133 Object(external_wp_i18n_["_n"])('Install %1$s. %2$s stars with %3$s review.', 'Install %1$s. %2$s stars with %3$s reviews.', ratingCount), Object(external_wp_htmlEntities_["decodeEntities"])(title), stars, ratingCount); 1134 } 1135 1136 function DownloadableBlockListItem({ 1137 composite, 1138 item, 1139 onClick 1140 }) { 1141 const { 1142 author, 1143 description, 1144 icon, 1145 rating, 1146 title 1147 } = item; // getBlockType returns a block object if this block exists, or null if not. 1148 1149 const isInstalled = !!Object(external_wp_blocks_["getBlockType"])(item.name); 1150 const { 1151 hasNotice, 1152 isInstalling, 1153 isInstallable 1154 } = Object(external_wp_data_["useSelect"])(select => { 1155 const { 1156 getErrorNoticeForBlock, 1157 isInstalling: isBlockInstalling 1158 } = select(store); 1159 const notice = getErrorNoticeForBlock(item.id); 1160 const hasFatal = notice && notice.isFatal; 1161 return { 1162 hasNotice: !!notice, 1163 isInstalling: isBlockInstalling(item.id), 1164 isInstallable: !hasFatal 1165 }; 1166 }, [item]); 1167 let statusText = ''; 1168 1169 if (isInstalled) { 1170 statusText = Object(external_wp_i18n_["__"])('Installed!'); 1171 } else if (isInstalling) { 1172 statusText = Object(external_wp_i18n_["__"])('Installing…'); 1173 } 1174 1175 return Object(external_wp_element_["createElement"])(external_wp_components_["__unstableCompositeItem"], Object(esm_extends["a" /* default */])({ 1176 role: "option", 1177 as: external_wp_components_["Button"] 1178 }, composite, { 1179 className: "block-directory-downloadable-block-list-item", 1180 onClick: event => { 1181 event.preventDefault(); 1182 onClick(); 1183 }, 1184 isBusy: isInstalling, 1185 disabled: isInstalling || !isInstallable, 1186 label: getDownloadableBlockLabel(item, { 1187 hasNotice, 1188 isInstalled, 1189 isInstalling 1190 }), 1191 showTooltip: true, 1192 tooltipPosition: "top center" 1193 }), Object(external_wp_element_["createElement"])("div", { 1194 className: "block-directory-downloadable-block-list-item__icon" 1195 }, Object(external_wp_element_["createElement"])(downloadable_block_icon, { 1196 icon: icon, 1197 title: title 1198 }), isInstalling ? Object(external_wp_element_["createElement"])("span", { 1199 className: "block-directory-downloadable-block-list-item__spinner" 1200 }, Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null)) : Object(external_wp_element_["createElement"])(block_ratings, { 1201 rating: rating 1202 })), Object(external_wp_element_["createElement"])("span", { 1203 className: "block-directory-downloadable-block-list-item__details" 1204 }, Object(external_wp_element_["createElement"])("span", { 1205 className: "block-directory-downloadable-block-list-item__title" 1206 }, Object(external_wp_element_["createInterpolateElement"])(Object(external_wp_i18n_["sprintf"])( 1207 /* translators: %1$s: block title, %2$s: author name. */ 1208 Object(external_wp_i18n_["__"])('%1$s <span>by %2$s</span>'), Object(external_wp_htmlEntities_["decodeEntities"])(title), author), { 1209 span: Object(external_wp_element_["createElement"])("span", { 1210 className: "block-directory-downloadable-block-list-item__author" 1211 }) 1212 })), hasNotice ? Object(external_wp_element_["createElement"])(downloadable_block_notice, { 1213 block: item 1214 }) : Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])("span", { 1215 className: "block-directory-downloadable-block-list-item__desc" 1216 }, !!statusText ? statusText : Object(external_wp_htmlEntities_["decodeEntities"])(description)), isInstallable && !(isInstalled || isInstalling) && Object(external_wp_element_["createElement"])(external_wp_components_["VisuallyHidden"], null, Object(external_wp_i18n_["__"])('Install block'))))); 1217 } 1218 1219 /* harmony default export */ var downloadable_block_list_item = (DownloadableBlockListItem); 1220 1221 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-list/index.js 1222 1223 1224 1225 /** 1226 * External dependencies 1227 */ 1228 1229 /** 1230 * WordPress dependencies 1231 */ 1232 1233 1234 1235 1236 1237 /** 1238 * Internal dependencies 1239 */ 1240 1241 1242 1243 1244 function DownloadableBlocksList({ 1245 items, 1246 onHover = external_lodash_["noop"], 1247 onSelect 1248 }) { 1249 const composite = Object(external_wp_components_["__unstableUseCompositeState"])(); 1250 const { 1251 installBlockType 1252 } = Object(external_wp_data_["useDispatch"])(store); 1253 1254 if (!items.length) { 1255 return null; 1256 } 1257 1258 return Object(external_wp_element_["createElement"])(external_wp_components_["__unstableComposite"], Object(esm_extends["a" /* default */])({}, composite, { 1259 role: "listbox", 1260 className: "block-directory-downloadable-blocks-list", 1261 "aria-label": Object(external_wp_i18n_["__"])('Blocks available for install') 1262 }), items.map(item => { 1263 return Object(external_wp_element_["createElement"])(downloadable_block_list_item, { 1264 key: item.id, 1265 composite: composite, 1266 onClick: () => { 1267 // Check if the block is registered (`getBlockType` 1268 // will return an object). If so, insert the block. 1269 // This prevents installing existing plugins. 1270 if (Object(external_wp_blocks_["getBlockType"])(item.name)) { 1271 onSelect(item); 1272 } else { 1273 installBlockType(item).then(success => { 1274 if (success) { 1275 onSelect(item); 1276 } 1277 }); 1278 } 1279 1280 onHover(null); 1281 }, 1282 onHover: onHover, 1283 item: item 1284 }); 1285 })); 1286 } 1287 1288 /* harmony default export */ var downloadable_blocks_list = (DownloadableBlocksList); 1289 1290 // EXTERNAL MODULE: external ["wp","a11y"] 1291 var external_wp_a11y_ = __webpack_require__("gdqT"); 1292 1293 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-panel/inserter-panel.js 1294 1295 1296 /** 1297 * WordPress dependencies 1298 */ 1299 1300 1301 1302 1303 function DownloadableBlocksInserterPanel({ 1304 children, 1305 downloadableItems, 1306 hasLocalBlocks 1307 }) { 1308 const count = downloadableItems.length; 1309 Object(external_wp_element_["useEffect"])(() => { 1310 Object(external_wp_a11y_["speak"])(Object(external_wp_i18n_["sprintf"])( 1311 /* translators: %d: number of available blocks. */ 1312 Object(external_wp_i18n_["_n"])('%d additional block is available to install.', '%d additional blocks are available to install.', count), count)); 1313 }, [count]); 1314 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, !hasLocalBlocks && Object(external_wp_element_["createElement"])("p", { 1315 className: "block-directory-downloadable-blocks-panel__no-local" 1316 }, Object(external_wp_i18n_["__"])('No results available from your installed blocks.')), Object(external_wp_element_["createElement"])("div", { 1317 className: "block-editor-inserter__quick-inserter-separator" 1318 }), Object(external_wp_element_["createElement"])("div", { 1319 className: "block-directory-downloadable-blocks-panel" 1320 }, Object(external_wp_element_["createElement"])("div", { 1321 className: "block-directory-downloadable-blocks-panel__header" 1322 }, Object(external_wp_element_["createElement"])("h2", { 1323 className: "block-directory-downloadable-blocks-panel__title" 1324 }, Object(external_wp_i18n_["__"])('Available to install')), Object(external_wp_element_["createElement"])("p", { 1325 className: "block-directory-downloadable-blocks-panel__description" 1326 }, Object(external_wp_i18n_["__"])('Select a block to install and add it to your post.'))), children)); 1327 } 1328 1329 /* harmony default export */ var inserter_panel = (DownloadableBlocksInserterPanel); 1330 1331 // EXTERNAL MODULE: ./node_modules/@wordpress/icons/build-module/library/block-default.js 1332 var block_default = __webpack_require__("//Lo"); 1333 1334 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-panel/no-results.js 1335 1336 1337 /** 1338 * WordPress dependencies 1339 */ 1340 1341 1342 1343 function DownloadableBlocksNoResults() { 1344 return Object(external_wp_element_["createElement"])("div", { 1345 className: "block-editor-inserter__no-results" 1346 }, Object(external_wp_element_["createElement"])(build_module_icon["a" /* default */], { 1347 className: "block-editor-inserter__no-results-icon", 1348 icon: block_default["a" /* default */] 1349 }), Object(external_wp_element_["createElement"])("p", null, Object(external_wp_i18n_["__"])('No results found.'))); 1350 } 1351 1352 /* harmony default export */ var no_results = (DownloadableBlocksNoResults); 1353 1354 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-panel/index.js 1355 1356 1357 /** 1358 * WordPress dependencies 1359 */ 1360 1361 1362 1363 1364 1365 1366 /** 1367 * Internal dependencies 1368 */ 1369 1370 1371 1372 1373 1374 1375 function DownloadableBlocksPanel({ 1376 downloadableItems, 1377 onSelect, 1378 onHover, 1379 hasLocalBlocks, 1380 hasPermission, 1381 isLoading, 1382 isTyping 1383 }) { 1384 if (typeof hasPermission === 'undefined' || isLoading || isTyping) { 1385 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, hasPermission && !hasLocalBlocks && Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])("p", { 1386 className: "block-directory-downloadable-blocks-panel__no-local" 1387 }, Object(external_wp_i18n_["__"])('No results available from your installed blocks.')), Object(external_wp_element_["createElement"])("div", { 1388 className: "block-editor-inserter__quick-inserter-separator" 1389 })), Object(external_wp_element_["createElement"])("div", { 1390 className: "block-directory-downloadable-blocks-panel has-blocks-loading" 1391 }, Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null))); 1392 } 1393 1394 if (false === hasPermission) { 1395 if (!hasLocalBlocks) { 1396 return Object(external_wp_element_["createElement"])(no_results, null); 1397 } 1398 1399 return null; 1400 } 1401 1402 return !!downloadableItems.length ? Object(external_wp_element_["createElement"])(inserter_panel, { 1403 downloadableItems: downloadableItems, 1404 hasLocalBlocks: hasLocalBlocks 1405 }, Object(external_wp_element_["createElement"])(downloadable_blocks_list, { 1406 items: downloadableItems, 1407 onSelect: onSelect, 1408 onHover: onHover 1409 })) : !hasLocalBlocks && Object(external_wp_element_["createElement"])(no_results, null); 1410 } 1411 1412 /* harmony default export */ var downloadable_blocks_panel = (Object(external_wp_compose_["compose"])([Object(external_wp_data_["withSelect"])((select, { 1413 filterValue, 1414 rootClientId = null 1415 }) => { 1416 const { 1417 getDownloadableBlocks, 1418 isRequestingDownloadableBlocks 1419 } = select(store); 1420 const { 1421 canInsertBlockType 1422 } = select(external_wp_blockEditor_["store"]); 1423 const hasPermission = select(external_wp_coreData_["store"]).canUser('read', 'block-directory/search'); 1424 1425 function getInstallableBlocks(term) { 1426 return getDownloadableBlocks(term).filter(block => canInsertBlockType(block, rootClientId, true)); 1427 } 1428 1429 const downloadableItems = hasPermission ? getInstallableBlocks(filterValue) : []; 1430 const isLoading = isRequestingDownloadableBlocks(filterValue); 1431 return { 1432 downloadableItems, 1433 hasPermission, 1434 isLoading 1435 }; 1436 })])(DownloadableBlocksPanel)); 1437 1438 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/inserter-menu-downloadable-blocks-panel/index.js 1439 1440 1441 /** 1442 * External dependencies 1443 */ 1444 1445 /** 1446 * WordPress dependencies 1447 */ 1448 1449 1450 1451 /** 1452 * Internal dependencies 1453 */ 1454 1455 1456 1457 function InserterMenuDownloadableBlocksPanel() { 1458 const [debouncedFilterValue, setFilterValue] = Object(external_wp_element_["useState"])(''); 1459 const debouncedSetFilterValue = Object(external_lodash_["debounce"])(setFilterValue, 400); 1460 return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["__unstableInserterMenuExtension"], null, ({ 1461 onSelect, 1462 onHover, 1463 filterValue, 1464 hasItems, 1465 rootClientId 1466 }) => { 1467 if (debouncedFilterValue !== filterValue) { 1468 debouncedSetFilterValue(filterValue); 1469 } 1470 1471 if (!debouncedFilterValue) { 1472 return null; 1473 } 1474 1475 return Object(external_wp_element_["createElement"])(downloadable_blocks_panel, { 1476 onSelect: onSelect, 1477 onHover: onHover, 1478 rootClientId: rootClientId, 1479 filterValue: debouncedFilterValue, 1480 hasLocalBlocks: hasItems, 1481 isTyping: filterValue !== debouncedFilterValue 1482 }); 1483 }); 1484 } 1485 1486 /* harmony default export */ var inserter_menu_downloadable_blocks_panel = (InserterMenuDownloadableBlocksPanel); 1487 1488 // EXTERNAL MODULE: external ["wp","editPost"] 1489 var external_wp_editPost_ = __webpack_require__("BLhE"); 1490 1491 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/compact-list/index.js 1492 1493 1494 /** 1495 * WordPress dependencies 1496 */ 1497 1498 /** 1499 * Internal dependencies 1500 */ 1501 1502 1503 function CompactList({ 1504 items 1505 }) { 1506 if (!items.length) { 1507 return null; 1508 } 1509 1510 return Object(external_wp_element_["createElement"])("ul", { 1511 className: "block-directory-compact-list" 1512 }, items.map(({ 1513 icon, 1514 id, 1515 title, 1516 author 1517 }) => Object(external_wp_element_["createElement"])("li", { 1518 key: id, 1519 className: "block-directory-compact-list__item" 1520 }, Object(external_wp_element_["createElement"])(downloadable_block_icon, { 1521 icon: icon, 1522 title: title 1523 }), Object(external_wp_element_["createElement"])("div", { 1524 className: "block-directory-compact-list__item-details" 1525 }, Object(external_wp_element_["createElement"])("div", { 1526 className: "block-directory-compact-list__item-title" 1527 }, title), Object(external_wp_element_["createElement"])("div", { 1528 className: "block-directory-compact-list__item-author" 1529 }, Object(external_wp_i18n_["sprintf"])( 1530 /* translators: %s: Name of the block author. */ 1531 Object(external_wp_i18n_["__"])('By %s'), author)))))); 1532 } 1533 1534 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/installed-blocks-pre-publish-panel/index.js 1535 1536 1537 /** 1538 * WordPress dependencies 1539 */ 1540 1541 1542 1543 1544 /** 1545 * Internal dependencies 1546 */ 1547 1548 1549 1550 function InstalledBlocksPrePublishPanel() { 1551 const newBlockTypes = Object(external_wp_data_["useSelect"])(select => select(store).getNewBlockTypes(), []); 1552 1553 if (!newBlockTypes.length) { 1554 return null; 1555 } 1556 1557 return Object(external_wp_element_["createElement"])(external_wp_editPost_["PluginPrePublishPanel"], { 1558 icon: block_default["a" /* default */], 1559 title: Object(external_wp_i18n_["sprintf"])( // translators: %d: number of blocks (number). 1560 Object(external_wp_i18n_["_n"])('Added: %d block', 'Added: %d blocks', newBlockTypes.length), newBlockTypes.length), 1561 initialOpen: true 1562 }, Object(external_wp_element_["createElement"])("p", { 1563 className: "installed-blocks-pre-publish-panel__copy" 1564 }, Object(external_wp_i18n_["_n"])('The following block has been added to your site.', 'The following blocks have been added to your site.', newBlockTypes.length)), Object(external_wp_element_["createElement"])(CompactList, { 1565 items: newBlockTypes 1566 })); 1567 } 1568 1569 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/get-install-missing/install-button.js 1570 1571 1572 /** 1573 * WordPress dependencies 1574 */ 1575 1576 1577 1578 1579 1580 /** 1581 * Internal dependencies 1582 */ 1583 1584 1585 function InstallButton({ 1586 attributes, 1587 block, 1588 clientId 1589 }) { 1590 const isInstallingBlock = Object(external_wp_data_["useSelect"])(select => select(store).isInstalling(block.id)); 1591 const { 1592 installBlockType 1593 } = Object(external_wp_data_["useDispatch"])(store); 1594 const { 1595 replaceBlock 1596 } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]); 1597 return Object(external_wp_element_["createElement"])(external_wp_components_["Button"], { 1598 onClick: () => installBlockType(block).then(success => { 1599 if (success) { 1600 const blockType = Object(external_wp_blocks_["getBlockType"])(block.name); 1601 const [originalBlock] = Object(external_wp_blocks_["parse"])(attributes.originalContent); 1602 1603 if (originalBlock) { 1604 replaceBlock(clientId, Object(external_wp_blocks_["createBlock"])(blockType.name, originalBlock.attributes, originalBlock.innerBlocks)); 1605 } 1606 } 1607 }), 1608 disabled: isInstallingBlock, 1609 isBusy: isInstallingBlock, 1610 isPrimary: true 1611 }, Object(external_wp_i18n_["sprintf"])( 1612 /* translators: %s: block name */ 1613 Object(external_wp_i18n_["__"])('Install %s'), block.title)); 1614 } 1615 1616 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/get-install-missing/index.js 1617 1618 1619 1620 /** 1621 * WordPress dependencies 1622 */ 1623 1624 1625 1626 1627 1628 1629 1630 /** 1631 * Internal dependencies 1632 */ 1633 1634 1635 1636 1637 const getInstallMissing = OriginalComponent => props => { 1638 const { 1639 originalName 1640 } = props.attributes; // Disable reason: This is a valid component, but it's mistaken for a callback. 1641 // eslint-disable-next-line react-hooks/rules-of-hooks 1642 1643 const { 1644 block, 1645 hasPermission 1646 } = Object(external_wp_data_["useSelect"])(select => { 1647 const { 1648 getDownloadableBlocks 1649 } = select(store); 1650 const blocks = getDownloadableBlocks('block:' + originalName).filter(({ 1651 name 1652 }) => originalName === name); 1653 return { 1654 hasPermission: select(external_wp_coreData_["store"]).canUser('read', 'block-directory/search'), 1655 block: blocks.length && blocks[0] 1656 }; 1657 }, [originalName]); // The user can't install blocks, or the block isn't available for download. 1658 1659 if (!hasPermission || !block) { 1660 return Object(external_wp_element_["createElement"])(OriginalComponent, props); 1661 } 1662 1663 return Object(external_wp_element_["createElement"])(ModifiedWarning, Object(esm_extends["a" /* default */])({}, props, { 1664 originalBlock: block 1665 })); 1666 }; 1667 1668 const ModifiedWarning = ({ 1669 originalBlock, 1670 ...props 1671 }) => { 1672 const { 1673 originalName, 1674 originalUndelimitedContent 1675 } = props.attributes; 1676 const { 1677 replaceBlock 1678 } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]); 1679 1680 const convertToHTML = () => { 1681 replaceBlock(props.clientId, Object(external_wp_blocks_["createBlock"])('core/html', { 1682 content: originalUndelimitedContent 1683 })); 1684 }; 1685 1686 const hasContent = !!originalUndelimitedContent; 1687 const hasHTMLBlock = Object(external_wp_blocks_["getBlockType"])('core/html'); 1688 let messageHTML = Object(external_wp_i18n_["sprintf"])( 1689 /* translators: %s: block name */ 1690 Object(external_wp_i18n_["__"])('Your site doesn’t include support for the %s block. You can try installing the block or remove it entirely.'), originalBlock.title || originalName); 1691 const actions = [Object(external_wp_element_["createElement"])(InstallButton, { 1692 key: "install", 1693 block: originalBlock, 1694 attributes: props.attributes, 1695 clientId: props.clientId 1696 })]; 1697 1698 if (hasContent && hasHTMLBlock) { 1699 messageHTML = Object(external_wp_i18n_["sprintf"])( 1700 /* translators: %s: block name */ 1701 Object(external_wp_i18n_["__"])('Your site doesn’t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely.'), originalBlock.title || originalName); 1702 actions.push(Object(external_wp_element_["createElement"])(external_wp_components_["Button"], { 1703 key: "convert", 1704 onClick: convertToHTML, 1705 isLink: true 1706 }, Object(external_wp_i18n_["__"])('Keep as HTML'))); 1707 } 1708 1709 return Object(external_wp_element_["createElement"])("div", Object(external_wp_blockEditor_["useBlockProps"])(), Object(external_wp_element_["createElement"])(external_wp_blockEditor_["Warning"], { 1710 actions: actions 1711 }, messageHTML), Object(external_wp_element_["createElement"])(external_wp_element_["RawHTML"], null, originalUndelimitedContent)); 1712 }; 1713 1714 /* harmony default export */ var get_install_missing = (getInstallMissing); 1715 1716 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/index.js 1717 1718 1719 /** 1720 * WordPress dependencies 1721 */ 1722 1723 1724 /** 1725 * Internal dependencies 1726 */ 1727 1728 1729 1730 1731 1732 Object(external_wp_plugins_["registerPlugin"])('block-directory', { 1733 render() { 1734 return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(AutoBlockUninstaller, null), Object(external_wp_element_["createElement"])(inserter_menu_downloadable_blocks_panel, null), Object(external_wp_element_["createElement"])(InstalledBlocksPrePublishPanel, null)); 1735 } 1736 1737 }); 1738 Object(external_wp_hooks_["addFilter"])('blocks.registerBlockType', 'block-directory/fallback', (settings, name) => { 1739 if (name !== 'core/missing') { 1740 return settings; 1741 } 1742 1743 settings.edit = get_install_missing(settings.edit); 1744 return settings; 1745 }); 1746 1747 // CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/index.js 1748 /** 1749 * Internal dependencies 1750 */ 1751 1752 1753 1754 1755 /***/ }), 1756 1757 /***/ "BLhE": 1758 /***/ (function(module, exports) { 1759 1760 (function() { module.exports = window["wp"]["editPost"]; }()); 1761 1762 /***/ }), 1763 1764 /***/ "GRId": 1765 /***/ (function(module, exports) { 1766 1767 (function() { module.exports = window["wp"]["element"]; }()); 1768 1769 /***/ }), 1770 1771 /***/ "HSyU": 1772 /***/ (function(module, exports) { 1773 1774 (function() { module.exports = window["wp"]["blocks"]; }()); 1775 1776 /***/ }), 1777 1778 /***/ "K9lf": 1779 /***/ (function(module, exports) { 1780 1781 (function() { module.exports = window["wp"]["compose"]; }()); 1782 1783 /***/ }), 1784 1785 /***/ "Tqx9": 1786 /***/ (function(module, exports) { 1787 1788 (function() { module.exports = window["wp"]["primitives"]; }()); 1789 1790 /***/ }), 1791 1792 /***/ "TvNi": 1793 /***/ (function(module, exports) { 1794 1795 (function() { module.exports = window["wp"]["plugins"]; }()); 1796 1797 /***/ }), 1798 1799 /***/ "URob": 1800 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1801 1802 "use strict"; 1803 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 1804 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 1805 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 1806 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 1807 1808 1809 /** 1810 * WordPress dependencies 1811 */ 1812 1813 const starFilled = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 1814 xmlns: "http://www.w3.org/2000/svg", 1815 viewBox: "0 0 24 24" 1816 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1817 d: "M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z" 1818 })); 1819 /* harmony default export */ __webpack_exports__["a"] = (starFilled); 1820 1821 1822 /***/ }), 1823 1824 /***/ "Xxwi": 1825 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1826 1827 "use strict"; 1828 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 1829 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 1830 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Tqx9"); 1831 /* harmony import */ var _wordpress_primitives__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__); 1832 1833 1834 /** 1835 * WordPress dependencies 1836 */ 1837 1838 const starEmpty = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["SVG"], { 1839 xmlns: "http://www.w3.org/2000/svg", 1840 viewBox: "0 0 24 24" 1841 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_primitives__WEBPACK_IMPORTED_MODULE_1__["Path"], { 1842 fillRule: "evenodd", 1843 d: "M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z", 1844 clipRule: "evenodd" 1845 })); 1846 /* harmony default export */ __webpack_exports__["a"] = (starEmpty); 1847 1848 1849 /***/ }), 1850 1851 /***/ "YLtl": 1852 /***/ (function(module, exports) { 1853 1854 (function() { module.exports = window["lodash"]; }()); 1855 1856 /***/ }), 1857 1858 /***/ "axFQ": 1859 /***/ (function(module, exports) { 1860 1861 (function() { module.exports = window["wp"]["blockEditor"]; }()); 1862 1863 /***/ }), 1864 1865 /***/ "g56x": 1866 /***/ (function(module, exports) { 1867 1868 (function() { module.exports = window["wp"]["hooks"]; }()); 1869 1870 /***/ }), 1871 1872 /***/ "gdqT": 1873 /***/ (function(module, exports) { 1874 1875 (function() { module.exports = window["wp"]["a11y"]; }()); 1876 1877 /***/ }), 1878 1879 /***/ "iClF": 1880 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1881 1882 "use strict"; 1883 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("GRId"); 1884 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 1885 /** 1886 * WordPress dependencies 1887 */ 1888 1889 /** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */ 1890 1891 /** 1892 * Return an SVG icon. 1893 * 1894 * @param {IconProps} props icon is the SVG component to render 1895 * size is a number specifiying the icon size in pixels 1896 * Other props will be passed to wrapped SVG component 1897 * 1898 * @return {JSX.Element} Icon component 1899 */ 1900 1901 function Icon({ 1902 icon, 1903 size = 24, 1904 ...props 1905 }) { 1906 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["cloneElement"])(icon, { 1907 width: size, 1908 height: size, 1909 ...props 1910 }); 1911 } 1912 1913 /* harmony default export */ __webpack_exports__["a"] = (Icon); 1914 1915 1916 /***/ }), 1917 1918 /***/ "jSdM": 1919 /***/ (function(module, exports) { 1920 1921 (function() { module.exports = window["wp"]["editor"]; }()); 1922 1923 /***/ }), 1924 1925 /***/ "jZUy": 1926 /***/ (function(module, exports) { 1927 1928 (function() { module.exports = window["wp"]["coreData"]; }()); 1929 1930 /***/ }), 1931 1932 /***/ "l3Sj": 1933 /***/ (function(module, exports) { 1934 1935 (function() { module.exports = window["wp"]["i18n"]; }()); 1936 1937 /***/ }), 1938 1939 /***/ "onLe": 1940 /***/ (function(module, exports) { 1941 1942 (function() { module.exports = window["wp"]["notices"]; }()); 1943 1944 /***/ }), 1945 1946 /***/ "rmEH": 1947 /***/ (function(module, exports) { 1948 1949 (function() { module.exports = window["wp"]["htmlEntities"]; }()); 1950 1951 /***/ }), 1952 1953 /***/ "tI+e": 1954 /***/ (function(module, exports) { 1955 1956 (function() { module.exports = window["wp"]["components"]; }()); 1957 1958 /***/ }), 1959 1960 /***/ "wx14": 1961 /***/ (function(module, __webpack_exports__, __webpack_require__) { 1962 1963 "use strict"; 1964 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; }); 1965 function _extends() { 1966 _extends = Object.assign || function (target) { 1967 for (var i = 1; i < arguments.length; i++) { 1968 var source = arguments[i]; 1969 1970 for (var key in source) { 1971 if (Object.prototype.hasOwnProperty.call(source, key)) { 1972 target[key] = source[key]; 1973 } 1974 } 1975 } 1976 1977 return target; 1978 }; 1979 1980 return _extends.apply(this, arguments); 1981 } 1982 1983 /***/ }), 1984 1985 /***/ "ywyh": 1986 /***/ (function(module, exports) { 1987 1988 (function() { module.exports = window["wp"]["apiFetch"]; }()); 1989 1990 /***/ }) 1991 1992 /******/ });