ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

reusable-blocks.js (22165B)


      1 this["wp"] = this["wp"] || {}; this["wp"]["reusableBlocks"] =
      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 = "iqm2");
     86 /******/ })
     87 /************************************************************************/
     88 /******/ ({
     89 
     90 /***/ "1ZqX":
     91 /***/ (function(module, exports) {
     92 
     93 (function() { module.exports = window["wp"]["data"]; }());
     94 
     95 /***/ }),
     96 
     97 /***/ "GRId":
     98 /***/ (function(module, exports) {
     99 
    100 (function() { module.exports = window["wp"]["element"]; }());
    101 
    102 /***/ }),
    103 
    104 /***/ "HSyU":
    105 /***/ (function(module, exports) {
    106 
    107 (function() { module.exports = window["wp"]["blocks"]; }());
    108 
    109 /***/ }),
    110 
    111 /***/ "Mmq9":
    112 /***/ (function(module, exports) {
    113 
    114 (function() { module.exports = window["wp"]["url"]; }());
    115 
    116 /***/ }),
    117 
    118 /***/ "Tqx9":
    119 /***/ (function(module, exports) {
    120 
    121 (function() { module.exports = window["wp"]["primitives"]; }());
    122 
    123 /***/ }),
    124 
    125 /***/ "YLtl":
    126 /***/ (function(module, exports) {
    127 
    128 (function() { module.exports = window["lodash"]; }());
    129 
    130 /***/ }),
    131 
    132 /***/ "axFQ":
    133 /***/ (function(module, exports) {
    134 
    135 (function() { module.exports = window["wp"]["blockEditor"]; }());
    136 
    137 /***/ }),
    138 
    139 /***/ "iqm2":
    140 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    141 
    142 "use strict";
    143 // ESM COMPAT FLAG
    144 __webpack_require__.r(__webpack_exports__);
    145 
    146 // EXPORTS
    147 __webpack_require__.d(__webpack_exports__, "store", function() { return /* reexport */ store; });
    148 __webpack_require__.d(__webpack_exports__, "ReusableBlocksMenuItems", function() { return /* reexport */ reusable_blocks_menu_items; });
    149 
    150 // NAMESPACE OBJECT: ./node_modules/@wordpress/reusable-blocks/build-module/store/actions.js
    151 var actions_namespaceObject = {};
    152 __webpack_require__.r(actions_namespaceObject);
    153 __webpack_require__.d(actions_namespaceObject, "__experimentalConvertBlockToStatic", function() { return __experimentalConvertBlockToStatic; });
    154 __webpack_require__.d(actions_namespaceObject, "__experimentalConvertBlocksToReusable", function() { return __experimentalConvertBlocksToReusable; });
    155 __webpack_require__.d(actions_namespaceObject, "__experimentalDeleteReusableBlock", function() { return __experimentalDeleteReusableBlock; });
    156 __webpack_require__.d(actions_namespaceObject, "__experimentalSetEditingReusableBlock", function() { return __experimentalSetEditingReusableBlock; });
    157 
    158 // NAMESPACE OBJECT: ./node_modules/@wordpress/reusable-blocks/build-module/store/selectors.js
    159 var selectors_namespaceObject = {};
    160 __webpack_require__.r(selectors_namespaceObject);
    161 __webpack_require__.d(selectors_namespaceObject, "__experimentalIsEditingReusableBlock", function() { return __experimentalIsEditingReusableBlock; });
    162 
    163 // EXTERNAL MODULE: external ["wp","blockEditor"]
    164 var external_wp_blockEditor_ = __webpack_require__("axFQ");
    165 
    166 // EXTERNAL MODULE: external ["wp","coreData"]
    167 var external_wp_coreData_ = __webpack_require__("jZUy");
    168 
    169 // EXTERNAL MODULE: external ["wp","data"]
    170 var external_wp_data_ = __webpack_require__("1ZqX");
    171 
    172 // EXTERNAL MODULE: external "lodash"
    173 var external_lodash_ = __webpack_require__("YLtl");
    174 
    175 // EXTERNAL MODULE: external ["wp","blocks"]
    176 var external_wp_blocks_ = __webpack_require__("HSyU");
    177 
    178 // EXTERNAL MODULE: external ["wp","i18n"]
    179 var external_wp_i18n_ = __webpack_require__("l3Sj");
    180 
    181 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/store/controls.js
    182 /**
    183  * External dependencies
    184  */
    185 
    186 /**
    187  * WordPress dependencies
    188  */
    189 
    190 
    191 
    192 
    193 
    194 /**
    195  * Internal dependencies
    196  */
    197 
    198 
    199 /**
    200  * Convert a reusable block to a static block effect handler
    201  *
    202  * @param {string}  clientId Block ID.
    203  * @return {Object} control descriptor.
    204  */
    205 
    206 function convertBlockToStatic(clientId) {
    207   return {
    208     type: 'CONVERT_BLOCK_TO_STATIC',
    209     clientId
    210   };
    211 }
    212 /**
    213  * Convert a static block to a reusable block effect handler
    214  *
    215  * @param {Array} clientIds Block IDs.
    216  * @param {string} title    Reusable block title.
    217  * @return {Object} control descriptor.
    218  */
    219 
    220 function controls_convertBlocksToReusable(clientIds, title) {
    221   return {
    222     type: 'CONVERT_BLOCKS_TO_REUSABLE',
    223     clientIds,
    224     title
    225   };
    226 }
    227 /**
    228  * Deletes a reusable block.
    229  *
    230  * @param {string} id Reusable block ID.
    231  * @return {Object} control descriptor.
    232  */
    233 
    234 function deleteReusableBlock(id) {
    235   return {
    236     type: 'DELETE_REUSABLE_BLOCK',
    237     id
    238   };
    239 }
    240 const controls = {
    241   CONVERT_BLOCK_TO_STATIC: Object(external_wp_data_["createRegistryControl"])(registry => ({
    242     clientId
    243   }) => {
    244     const oldBlock = registry.select(external_wp_blockEditor_["store"]).getBlock(clientId);
    245     const reusableBlock = registry.select('core').getEditedEntityRecord('postType', 'wp_block', oldBlock.attributes.ref);
    246     const newBlocks = Object(external_wp_blocks_["parse"])(Object(external_lodash_["isFunction"])(reusableBlock.content) ? reusableBlock.content(reusableBlock) : reusableBlock.content);
    247     registry.dispatch(external_wp_blockEditor_["store"]).replaceBlocks(oldBlock.clientId, newBlocks);
    248   }),
    249   CONVERT_BLOCKS_TO_REUSABLE: Object(external_wp_data_["createRegistryControl"])(registry => async function ({
    250     clientIds,
    251     title
    252   }) {
    253     const reusableBlock = {
    254       title: title || Object(external_wp_i18n_["__"])('Untitled Reusable block'),
    255       content: Object(external_wp_blocks_["serialize"])(registry.select(external_wp_blockEditor_["store"]).getBlocksByClientId(clientIds)),
    256       status: 'publish'
    257     };
    258     const updatedRecord = await registry.dispatch('core').saveEntityRecord('postType', 'wp_block', reusableBlock);
    259     const newBlock = Object(external_wp_blocks_["createBlock"])('core/block', {
    260       ref: updatedRecord.id
    261     });
    262     registry.dispatch(external_wp_blockEditor_["store"]).replaceBlocks(clientIds, newBlock);
    263 
    264     registry.dispatch(store).__experimentalSetEditingReusableBlock(newBlock.clientId, true);
    265   }),
    266   DELETE_REUSABLE_BLOCK: Object(external_wp_data_["createRegistryControl"])(registry => async function ({
    267     id
    268   }) {
    269     const reusableBlock = registry.select('core').getEditedEntityRecord('postType', 'wp_block', id); // Don't allow a reusable block with a temporary ID to be deleted
    270 
    271     if (!reusableBlock) {
    272       return;
    273     } // Remove any other blocks that reference this reusable block
    274 
    275 
    276     const allBlocks = registry.select(external_wp_blockEditor_["store"]).getBlocks();
    277     const associatedBlocks = allBlocks.filter(block => Object(external_wp_blocks_["isReusableBlock"])(block) && block.attributes.ref === id);
    278     const associatedBlockClientIds = associatedBlocks.map(block => block.clientId); // Remove the parsed block.
    279 
    280     if (associatedBlockClientIds.length) {
    281       registry.dispatch(external_wp_blockEditor_["store"]).removeBlocks(associatedBlockClientIds);
    282     }
    283 
    284     await registry.dispatch('core').deleteEntityRecord('postType', 'wp_block', id);
    285   })
    286 };
    287 /* harmony default export */ var store_controls = (controls);
    288 
    289 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/store/actions.js
    290 /**
    291  * Internal dependencies
    292  */
    293 
    294 /**
    295  * Returns a generator converting a reusable block into a static block.
    296  *
    297  * @param {string} clientId The client ID of the block to attach.
    298  */
    299 
    300 function* __experimentalConvertBlockToStatic(clientId) {
    301   yield convertBlockToStatic(clientId);
    302 }
    303 /**
    304  * Returns a generator converting one or more static blocks into a reusable block.
    305  *
    306  * @param {string[]} clientIds The client IDs of the block to detach.
    307  * @param {string}   title     Reusable block title.
    308  */
    309 
    310 function* __experimentalConvertBlocksToReusable(clientIds, title) {
    311   yield controls_convertBlocksToReusable(clientIds, title);
    312 }
    313 /**
    314  * Returns a generator deleting a reusable block.
    315  *
    316  * @param {string} id The ID of the reusable block to delete.
    317  */
    318 
    319 function* __experimentalDeleteReusableBlock(id) {
    320   yield deleteReusableBlock(id);
    321 }
    322 /**
    323  * Returns an action descriptor for SET_EDITING_REUSABLE_BLOCK action.
    324  *
    325  * @param {string} clientId The clientID of the reusable block to target.
    326  * @param {boolean} isEditing Whether the block should be in editing state.
    327  * @return {Object} Action descriptor.
    328  */
    329 
    330 function __experimentalSetEditingReusableBlock(clientId, isEditing) {
    331   return {
    332     type: 'SET_EDITING_REUSABLE_BLOCK',
    333     clientId,
    334     isEditing
    335   };
    336 }
    337 
    338 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/store/reducer.js
    339 /**
    340  * WordPress dependencies
    341  */
    342 
    343 function isEditingReusableBlock(state = {}, action) {
    344   if ((action === null || action === void 0 ? void 0 : action.type) === 'SET_EDITING_REUSABLE_BLOCK') {
    345     return { ...state,
    346       [action.clientId]: action.isEditing
    347     };
    348   }
    349 
    350   return state;
    351 }
    352 /* harmony default export */ var reducer = (Object(external_wp_data_["combineReducers"])({
    353   isEditingReusableBlock
    354 }));
    355 
    356 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/store/selectors.js
    357 /**
    358  * Returns true if reusable block is in the editing state.
    359  *
    360  * @param {Object} state Global application state.
    361  * @param {number} clientId the clientID of the block.
    362  * @return {boolean} Whether the reusable block is in the editing state.
    363  */
    364 function __experimentalIsEditingReusableBlock(state, clientId) {
    365   return state.isEditingReusableBlock[clientId];
    366 }
    367 
    368 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/store/index.js
    369 /**
    370  * WordPress dependencies
    371  */
    372 
    373 /**
    374  * Internal dependencies
    375  */
    376 
    377 
    378 
    379 
    380 
    381 const STORE_NAME = 'core/reusable-blocks';
    382 /**
    383  * Store definition for the reusable blocks namespace.
    384  *
    385  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
    386  *
    387  * @type {Object}
    388  */
    389 
    390 const store = Object(external_wp_data_["createReduxStore"])(STORE_NAME, {
    391   actions: actions_namespaceObject,
    392   controls: store_controls,
    393   reducer: reducer,
    394   selectors: selectors_namespaceObject
    395 });
    396 Object(external_wp_data_["register"])(store);
    397 
    398 // EXTERNAL MODULE: external ["wp","element"]
    399 var external_wp_element_ = __webpack_require__("GRId");
    400 
    401 // EXTERNAL MODULE: external ["wp","components"]
    402 var external_wp_components_ = __webpack_require__("tI+e");
    403 
    404 // EXTERNAL MODULE: external ["wp","primitives"]
    405 var external_wp_primitives_ = __webpack_require__("Tqx9");
    406 
    407 // CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/reusable-block.js
    408 
    409 
    410 /**
    411  * WordPress dependencies
    412  */
    413 
    414 const reusable_block_reusableBlock = Object(external_wp_element_["createElement"])(external_wp_primitives_["SVG"], {
    415   xmlns: "http://www.w3.org/2000/svg",
    416   viewBox: "0 0 24 24"
    417 }, Object(external_wp_element_["createElement"])(external_wp_primitives_["Path"], {
    418   d: "M7 7.2h8.2L13.5 9l1.1 1.1 3.6-3.6-3.5-4-1.1 1 1.9 2.3H7c-.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.2-.5zm13.8 4V11h-1.5v.3c0 1.1 0 3.5-1 4.5-.3.3-.7.5-1.3.5H8.8l1.7-1.7-1.1-1.1L5.9 17l3.5 4 1.1-1-1.9-2.3H17c.9 0 1.7-.3 2.3-.9 1.5-1.4 1.5-4.2 1.5-5.6z"
    419 }));
    420 /* harmony default export */ var reusable_block = (reusable_block_reusableBlock);
    421 
    422 // EXTERNAL MODULE: external ["wp","notices"]
    423 var external_wp_notices_ = __webpack_require__("onLe");
    424 
    425 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/components/reusable-blocks-menu-items/reusable-block-convert-button.js
    426 
    427 
    428 /**
    429  * WordPress dependencies
    430  */
    431 
    432 
    433 
    434 
    435 
    436 
    437 
    438 
    439 /**
    440  * Internal dependencies
    441  */
    442 
    443 
    444 /**
    445  * Menu control to convert block(s) to reusable block.
    446  *
    447  * @param {Object}   props              Component props.
    448  * @param {string[]} props.clientIds    Client ids of selected blocks.
    449  * @param {string}   props.rootClientId ID of the currently selected top-level block.
    450  * @return {import('@wordpress/element').WPComponent} The menu control or null.
    451  */
    452 
    453 function ReusableBlockConvertButton({
    454   clientIds,
    455   rootClientId
    456 }) {
    457   const [isModalOpen, setIsModalOpen] = Object(external_wp_element_["useState"])(false);
    458   const [title, setTitle] = Object(external_wp_element_["useState"])('');
    459   const canConvert = Object(external_wp_data_["useSelect"])(select => {
    460     var _getBlocksByClientId;
    461 
    462     const {
    463       canUser
    464     } = select('core');
    465     const {
    466       getBlocksByClientId,
    467       canInsertBlockType
    468     } = select('core/block-editor');
    469     const blocks = (_getBlocksByClientId = getBlocksByClientId(clientIds)) !== null && _getBlocksByClientId !== void 0 ? _getBlocksByClientId : [];
    470     const isReusable = blocks.length === 1 && blocks[0] && Object(external_wp_blocks_["isReusableBlock"])(blocks[0]) && !!select('core').getEntityRecord('postType', 'wp_block', blocks[0].attributes.ref);
    471 
    472     const _canConvert = // Hide when this is already a reusable block.
    473     !isReusable && // Hide when reusable blocks are disabled.
    474     canInsertBlockType('core/block', rootClientId) && blocks.every(block => // Guard against the case where a regular block has *just* been converted.
    475     !!block && // Hide on invalid blocks.
    476     block.isValid && // Hide when block doesn't support being made reusable.
    477     Object(external_wp_blocks_["hasBlockSupport"])(block.name, 'reusable', true)) && // Hide when current doesn't have permission to do that.
    478     !!canUser('create', 'blocks');
    479 
    480     return _canConvert;
    481   }, [clientIds]);
    482   const {
    483     __experimentalConvertBlocksToReusable: convertBlocksToReusable
    484   } = Object(external_wp_data_["useDispatch"])(store);
    485   const {
    486     createSuccessNotice,
    487     createErrorNotice
    488   } = Object(external_wp_data_["useDispatch"])(external_wp_notices_["store"]);
    489   const onConvert = Object(external_wp_element_["useCallback"])(async function (reusableBlockTitle) {
    490     try {
    491       await convertBlocksToReusable(clientIds, reusableBlockTitle);
    492       createSuccessNotice(Object(external_wp_i18n_["__"])('Reusable block created.'), {
    493         type: 'snackbar'
    494       });
    495     } catch (error) {
    496       createErrorNotice(error.message, {
    497         type: 'snackbar'
    498       });
    499     }
    500   }, [clientIds]);
    501 
    502   if (!canConvert) {
    503     return null;
    504   }
    505 
    506   return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockSettingsMenuControls"], null, ({
    507     onClose
    508   }) => Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], {
    509     icon: reusable_block,
    510     onClick: () => {
    511       setIsModalOpen(true);
    512     }
    513   }, Object(external_wp_i18n_["__"])('Add to Reusable blocks')), isModalOpen && Object(external_wp_element_["createElement"])(external_wp_components_["Modal"], {
    514     title: Object(external_wp_i18n_["__"])('Create Reusable block'),
    515     closeLabel: Object(external_wp_i18n_["__"])('Close'),
    516     onRequestClose: () => {
    517       setIsModalOpen(false);
    518       setTitle('');
    519     },
    520     overlayClassName: "reusable-blocks-menu-items__convert-modal"
    521   }, Object(external_wp_element_["createElement"])("form", {
    522     onSubmit: event => {
    523       event.preventDefault();
    524       onConvert(title);
    525       setIsModalOpen(false);
    526       setTitle('');
    527       onClose();
    528     }
    529   }, Object(external_wp_element_["createElement"])(external_wp_components_["TextControl"], {
    530     label: Object(external_wp_i18n_["__"])('Name'),
    531     value: title,
    532     onChange: setTitle
    533   }), Object(external_wp_element_["createElement"])(external_wp_components_["Flex"], {
    534     className: "reusable-blocks-menu-items__convert-modal-actions",
    535     justify: "flex-end"
    536   }, Object(external_wp_element_["createElement"])(external_wp_components_["FlexItem"], null, Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
    537     isSecondary: true,
    538     onClick: () => {
    539       setIsModalOpen(false);
    540       setTitle('');
    541     }
    542   }, Object(external_wp_i18n_["__"])('Cancel'))), Object(external_wp_element_["createElement"])(external_wp_components_["FlexItem"], null, Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
    543     isPrimary: true,
    544     type: "submit"
    545   }, Object(external_wp_i18n_["__"])('Save'))))))));
    546 }
    547 
    548 // EXTERNAL MODULE: external ["wp","url"]
    549 var external_wp_url_ = __webpack_require__("Mmq9");
    550 
    551 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/components/reusable-blocks-menu-items/reusable-blocks-manage-button.js
    552 
    553 
    554 /**
    555  * WordPress dependencies
    556  */
    557 
    558 
    559 
    560 
    561 
    562 
    563 
    564 function ReusableBlocksManageButton({
    565   clientId
    566 }) {
    567   const {
    568     isVisible
    569   } = Object(external_wp_data_["useSelect"])(select => {
    570     const {
    571       getBlock
    572     } = select(external_wp_blockEditor_["store"]);
    573     const {
    574       canUser
    575     } = select('core');
    576     const reusableBlock = getBlock(clientId);
    577     return {
    578       isVisible: !!reusableBlock && Object(external_wp_blocks_["isReusableBlock"])(reusableBlock) && !!canUser('update', 'blocks', reusableBlock.attributes.ref)
    579     };
    580   }, [clientId]);
    581 
    582   if (!isVisible) {
    583     return null;
    584   }
    585 
    586   return Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockSettingsMenuControls"], null, Object(external_wp_element_["createElement"])(external_wp_components_["MenuItem"], {
    587     href: Object(external_wp_url_["addQueryArgs"])('edit.php', {
    588       post_type: 'wp_block'
    589     })
    590   }, Object(external_wp_i18n_["__"])('Manage Reusable blocks')));
    591 }
    592 
    593 /* harmony default export */ var reusable_blocks_manage_button = (ReusableBlocksManageButton);
    594 
    595 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/components/reusable-blocks-menu-items/index.js
    596 
    597 
    598 /**
    599  * WordPress dependencies
    600  */
    601 
    602 
    603 /**
    604  * Internal dependencies
    605  */
    606 
    607 
    608 
    609 
    610 function ReusableBlocksMenuItems({
    611   clientIds,
    612   rootClientId
    613 }) {
    614   return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, Object(external_wp_element_["createElement"])(ReusableBlockConvertButton, {
    615     clientIds: clientIds,
    616     rootClientId: rootClientId
    617   }), clientIds.length === 1 && Object(external_wp_element_["createElement"])(reusable_blocks_manage_button, {
    618     clientId: clientIds[0]
    619   }));
    620 }
    621 
    622 /* harmony default export */ var reusable_blocks_menu_items = (Object(external_wp_data_["withSelect"])(select => {
    623   const {
    624     getSelectedBlockClientIds
    625   } = select(external_wp_blockEditor_["store"]);
    626   return {
    627     clientIds: getSelectedBlockClientIds()
    628   };
    629 })(ReusableBlocksMenuItems));
    630 
    631 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/components/index.js
    632 
    633 
    634 // CONCATENATED MODULE: ./node_modules/@wordpress/reusable-blocks/build-module/index.js
    635 /**
    636  * WordPress dependencies
    637  */
    638 
    639 
    640 
    641 
    642 
    643 
    644 /***/ }),
    645 
    646 /***/ "jZUy":
    647 /***/ (function(module, exports) {
    648 
    649 (function() { module.exports = window["wp"]["coreData"]; }());
    650 
    651 /***/ }),
    652 
    653 /***/ "l3Sj":
    654 /***/ (function(module, exports) {
    655 
    656 (function() { module.exports = window["wp"]["i18n"]; }());
    657 
    658 /***/ }),
    659 
    660 /***/ "onLe":
    661 /***/ (function(module, exports) {
    662 
    663 (function() { module.exports = window["wp"]["notices"]; }());
    664 
    665 /***/ }),
    666 
    667 /***/ "tI+e":
    668 /***/ (function(module, exports) {
    669 
    670 (function() { module.exports = window["wp"]["components"]; }());
    671 
    672 /***/ })
    673 
    674 /******/ });