wp/wp-includes/js/dist/plugins.js
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
child 22 8c2e4d02f4ef
--- a/wp/wp-includes/js/dist/plugins.js	Thu Sep 29 08:06:27 2022 +0200
+++ b/wp/wp-includes/js/dist/plugins.js	Fri Sep 05 18:40:08 2025 +0200
@@ -1,9 +1,66 @@
-/******/ (function() { // webpackBootstrap
-/******/ 	var __webpack_modules__ = ({
+/******/ (() => { // webpackBootstrap
+/******/ 	"use strict";
+/******/ 	// The require scope
+/******/ 	var __webpack_require__ = {};
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/compat get default export */
+/******/ 	(() => {
+/******/ 		// getDefaultExport function for compatibility with non-harmony modules
+/******/ 		__webpack_require__.n = (module) => {
+/******/ 			var getter = module && module.__esModule ?
+/******/ 				() => (module['default']) :
+/******/ 				() => (module);
+/******/ 			__webpack_require__.d(getter, { a: getter });
+/******/ 			return getter;
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	(() => {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = (exports, definition) => {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/make namespace object */
+/******/ 	(() => {
+/******/ 		// define __esModule on exports
+/******/ 		__webpack_require__.r = (exports) => {
+/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 			}
+/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/************************************************************************/
+var __webpack_exports__ = {};
+// ESM COMPAT FLAG
+__webpack_require__.r(__webpack_exports__);
 
-/***/ 9756:
-/***/ (function(module) {
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+  PluginArea: () => (/* reexport */ plugin_area),
+  getPlugin: () => (/* reexport */ getPlugin),
+  getPlugins: () => (/* reexport */ getPlugins),
+  registerPlugin: () => (/* reexport */ registerPlugin),
+  unregisterPlugin: () => (/* reexport */ unregisterPlugin),
+  usePluginContext: () => (/* reexport */ usePluginContext),
+  withPluginContext: () => (/* reexport */ withPluginContext)
+});
 
+;// CONCATENATED MODULE: ./node_modules/memize/dist/index.js
 /**
  * Memize options object.
  *
@@ -36,14 +93,14 @@
  * Accepts a function to be memoized, and returns a new memoized function, with
  * optional options.
  *
- * @template {Function} F
+ * @template {(...args: any[]) => any} F
  *
  * @param {F}             fn        Function to memoize.
  * @param {MemizeOptions} [options] Options object.
  *
- * @return {F & MemizeMemoizedFunction} Memoized function.
+ * @return {((...args: Parameters<F>) => ReturnType<F>) & MemizeMemoizedFunction} Memoized function.
  */
-function memize( fn, options ) {
+function memize(fn, options) {
 	var size = 0;
 
 	/** @type {?MemizeCacheNode|undefined} */
@@ -54,12 +111,13 @@
 
 	options = options || {};
 
-	function memoized( /* ...args */ ) {
+	function memoized(/* ...args */) {
 		var node = head,
 			len = arguments.length,
-			args, i;
+			args,
+			i;
 
-		searchCache: while ( node ) {
+		searchCache: while (node) {
 			// Perform a shallow equality test to confirm that whether the node
 			// under test is a candidate for the arguments passed. Two arrays
 			// are shallowly equal if their length matches and each entry is
@@ -67,14 +125,14 @@
 			// function which could incur an arguments leaking deoptimization.
 
 			// Check whether node arguments match arguments length
-			if ( node.args.length !== arguments.length ) {
+			if (node.args.length !== arguments.length) {
 				node = node.next;
 				continue;
 			}
 
 			// Check whether node arguments match arguments values
-			for ( i = 0; i < len; i++ ) {
-				if ( node.args[ i ] !== arguments[ i ] ) {
+			for (i = 0; i < len; i++) {
+				if (node.args[i] !== arguments[i]) {
 					node = node.next;
 					continue searchCache;
 				}
@@ -83,23 +141,23 @@
 			// At this point we can assume we've found a match
 
 			// Surface matched node to head if not already
-			if ( node !== head ) {
+			if (node !== head) {
 				// As tail, shift to previous. Must only shift if not also
 				// head, since if both head and tail, there is no previous.
-				if ( node === tail ) {
+				if (node === tail) {
 					tail = node.prev;
 				}
 
 				// Adjust siblings to point to each other. If node was tail,
 				// this also handles new tail's empty `next` assignment.
-				/** @type {MemizeCacheNode} */ ( node.prev ).next = node.next;
-				if ( node.next ) {
+				/** @type {MemizeCacheNode} */ (node.prev).next = node.next;
+				if (node.next) {
 					node.next.prev = node.prev;
 				}
 
 				node.next = head;
 				node.prev = null;
-				/** @type {MemizeCacheNode} */ ( head ).prev = node;
+				/** @type {MemizeCacheNode} */ (head).prev = node;
 				head = node;
 			}
 
@@ -110,23 +168,23 @@
 		// No cached value found. Continue to insertion phase:
 
 		// Create a copy of arguments (avoid leaking deoptimization)
-		args = new Array( len );
-		for ( i = 0; i < len; i++ ) {
-			args[ i ] = arguments[ i ];
+		args = new Array(len);
+		for (i = 0; i < len; i++) {
+			args[i] = arguments[i];
 		}
 
 		node = {
 			args: args,
 
 			// Generate the result from original function
-			val: fn.apply( null, args ),
+			val: fn.apply(null, args),
 		};
 
 		// Don't need to check whether node is already head, since it would
 		// have been returned above already if it was
 
 		// Shift existing head down list
-		if ( head ) {
+		if (head) {
 			head.prev = node;
 			node.next = head;
 		} else {
@@ -135,9 +193,9 @@
 		}
 
 		// Trim tail if we're reached max size and are pending cache insertion
-		if ( size === /** @type {MemizeOptions} */ ( options ).maxSize ) {
-			tail = /** @type {MemizeCacheNode} */ ( tail ).prev;
-			/** @type {MemizeCacheNode} */ ( tail ).next = null;
+		if (size === /** @type {MemizeOptions} */ (options).maxSize) {
+			tail = /** @type {MemizeCacheNode} */ (tail).prev;
+			/** @type {MemizeCacheNode} */ (tail).next = null;
 		} else {
 			size++;
 		}
@@ -147,14 +205,12 @@
 		return node.val;
 	}
 
-	memoized.clear = function() {
+	memoized.clear = function () {
 		head = null;
 		tail = null;
 		size = 0;
 	};
 
-	if ( false ) {}
-
 	// Ignore reason: There's not a clear solution to create an intersection of
 	// the function with additional properties, where the goal is to retain the
 	// function signature of the incoming argument and add control properties
@@ -164,154 +220,62 @@
 	return memoized;
 }
 
-module.exports = memize;
 
 
-/***/ })
-
-/******/ 	});
-/************************************************************************/
-/******/ 	// The module cache
-/******/ 	var __webpack_module_cache__ = {};
-/******/ 	
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/ 		// Check if module is in cache
-/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
-/******/ 		if (cachedModule !== undefined) {
-/******/ 			return cachedModule.exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = __webpack_module_cache__[moduleId] = {
-/******/ 			// no module.id needed
-/******/ 			// no module.loaded needed
-/******/ 			exports: {}
-/******/ 		};
-/******/ 	
-/******/ 		// Execute the module function
-/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
-/******/ 	
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/ 	
-/************************************************************************/
-/******/ 	/* webpack/runtime/compat get default export */
-/******/ 	!function() {
-/******/ 		// getDefaultExport function for compatibility with non-harmony modules
-/******/ 		__webpack_require__.n = function(module) {
-/******/ 			var getter = module && module.__esModule ?
-/******/ 				function() { return module['default']; } :
-/******/ 				function() { return module; };
-/******/ 			__webpack_require__.d(getter, { a: getter });
-/******/ 			return getter;
-/******/ 		};
-/******/ 	}();
-/******/ 	
-/******/ 	/* webpack/runtime/define property getters */
-/******/ 	!function() {
-/******/ 		// define getter functions for harmony exports
-/******/ 		__webpack_require__.d = function(exports, definition) {
-/******/ 			for(var key in definition) {
-/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
-/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
-/******/ 				}
-/******/ 			}
-/******/ 		};
-/******/ 	}();
-/******/ 	
-/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
-/******/ 	!function() {
-/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
-/******/ 	}();
-/******/ 	
-/******/ 	/* webpack/runtime/make namespace object */
-/******/ 	!function() {
-/******/ 		// define __esModule on exports
-/******/ 		__webpack_require__.r = function(exports) {
-/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 			}
-/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 		};
-/******/ 	}();
-/******/ 	
-/************************************************************************/
-var __webpack_exports__ = {};
-// This entry need to be wrapped in an IIFE because it need to be in strict mode.
-!function() {
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "PluginArea": function() { return /* reexport */ plugin_area; },
-  "getPlugin": function() { return /* reexport */ getPlugin; },
-  "getPlugins": function() { return /* reexport */ getPlugins; },
-  "registerPlugin": function() { return /* reexport */ registerPlugin; },
-  "unregisterPlugin": function() { return /* reexport */ unregisterPlugin; },
-  "withPluginContext": function() { return /* reexport */ withPluginContext; }
-});
-
 ;// CONCATENATED MODULE: external ["wp","element"]
-var external_wp_element_namespaceObject = window["wp"]["element"];
-;// CONCATENATED MODULE: external "lodash"
-var external_lodash_namespaceObject = window["lodash"];
-// EXTERNAL MODULE: ./node_modules/memize/index.js
-var memize = __webpack_require__(9756);
-var memize_default = /*#__PURE__*/__webpack_require__.n(memize);
+const external_wp_element_namespaceObject = window["wp"]["element"];
 ;// CONCATENATED MODULE: external ["wp","hooks"]
-var external_wp_hooks_namespaceObject = window["wp"]["hooks"];
-;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
+const external_wp_hooks_namespaceObject = window["wp"]["hooks"];
+;// CONCATENATED MODULE: external ["wp","isShallowEqual"]
+const external_wp_isShallowEqual_namespaceObject = window["wp"]["isShallowEqual"];
+var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_namespaceObject);
 ;// CONCATENATED MODULE: external ["wp","compose"]
-var external_wp_compose_namespaceObject = window["wp"]["compose"];
+const external_wp_compose_namespaceObject = window["wp"]["compose"];
+;// CONCATENATED MODULE: external "ReactJSXRuntime"
+const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/plugin-context/index.js
-
-
-
 /**
  * WordPress dependencies
  */
 
 
-const {
-  Consumer,
-  Provider
-} = (0,external_wp_element_namespaceObject.createContext)({
+
+/**
+ * Internal dependencies
+ */
+
+const Context = (0,external_wp_element_namespaceObject.createContext)({
   name: null,
   icon: null
 });
+const PluginContextProvider = Context.Provider;
+
+/**
+ * A hook that returns the plugin context.
+ *
+ * @return {PluginContext} Plugin context
+ */
+function usePluginContext() {
+  return (0,external_wp_element_namespaceObject.useContext)(Context);
+}
 
 /**
  * A Higher Order Component used to inject Plugin context to the
  * wrapped component.
  *
- * @param {Function} mapContextToProps Function called on every context change,
- *                                     expected to return object of props to
- *                                     merge with the component's own props.
+ * @param  mapContextToProps Function called on every context change,
+ *                           expected to return object of props to
+ *                           merge with the component's own props.
  *
- * @return {WPComponent} Enhanced component with injected context as props.
+ * @return {Component} Enhanced component with injected context as props.
  */
-
 const withPluginContext = mapContextToProps => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(OriginalComponent => {
-  return props => (0,external_wp_element_namespaceObject.createElement)(Consumer, null, context => (0,external_wp_element_namespaceObject.createElement)(OriginalComponent, _extends({}, props, mapContextToProps(context, props))));
+  return props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Context.Consumer, {
+    children: context => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(OriginalComponent, {
+      ...props,
+      ...mapContextToProps(context, props)
+    })
+  });
 }, 'withPluginContext');
 
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/plugin-error-boundary/index.js
@@ -320,110 +284,95 @@
  */
 
 class PluginErrorBoundary extends external_wp_element_namespaceObject.Component {
+  /**
+   * @param {Object} props
+   */
   constructor(props) {
     super(props);
     this.state = {
       hasError: false
     };
   }
-
   static getDerivedStateFromError() {
     return {
       hasError: true
     };
   }
 
+  /**
+   * @param {Error} error Error object passed by React.
+   */
   componentDidCatch(error) {
     const {
       name,
       onError
     } = this.props;
-
     if (onError) {
       onError(name, error);
     }
   }
-
   render() {
     if (!this.state.hasError) {
       return this.props.children;
     }
-
     return null;
   }
-
 }
 
 ;// CONCATENATED MODULE: external ["wp","primitives"]
-var external_wp_primitives_namespaceObject = window["wp"]["primitives"];
+const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/plugins.js
-
-
 /**
  * WordPress dependencies
  */
 
-const plugins = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
+
+const plugins = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
   xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24"
-}, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
-  d: "M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z"
-}));
-/* harmony default export */ var library_plugins = (plugins);
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z"
+  })
+});
+/* harmony default export */ const library_plugins = (plugins);
 
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/api/index.js
 /* eslint no-console: [ 'error', { allow: [ 'error' ] } ] */
+/**
+ * External dependencies
+ */
 
 /**
  * WordPress dependencies
  */
 
 
-/**
- * External dependencies
- */
-
 
 /**
  * Defined behavior of a plugin type.
- *
- * @typedef {Object} WPPlugin
- *
- * @property {string}                    name    A string identifying the plugin. Must be
- *                                               unique across all registered plugins.
- * @property {string|WPElement|Function} [icon]  An icon to be shown in the UI. It can
- *                                               be a slug of the Dashicon, or an element
- *                                               (or function returning an element) if you
- *                                               choose to render your own SVG.
- * @property {Function}                  render  A component containing the UI elements
- *                                               to be rendered.
- * @property {string}                    [scope] The optional scope to be used when rendering inside
- *                                               a plugin area. No scope by default.
  */
 
 /**
  * Plugin definitions keyed by plugin name.
- *
- * @type {Object.<string,WPPlugin>}
  */
+const api_plugins = {};
 
-const api_plugins = {};
 /**
  * Registers a plugin to the editor.
  *
- * @param {string}   name     A string identifying the plugin.Must be
- *                            unique across all registered plugins.
- * @param {WPPlugin} settings The settings for this plugin.
+ * @param name     A string identifying the plugin. Must be
+ *                 unique across all registered plugins.
+ * @param settings The settings for this plugin.
  *
  * @example
  * ```js
  * // Using ES5 syntax
- * var el = wp.element.createElement;
+ * var el = React.createElement;
  * var Fragment = wp.element.Fragment;
- * var PluginSidebar = wp.editPost.PluginSidebar;
- * var PluginSidebarMoreMenuItem = wp.editPost.PluginSidebarMoreMenuItem;
+ * var PluginSidebar = wp.editor.PluginSidebar;
+ * var PluginSidebarMoreMenuItem = wp.editor.PluginSidebarMoreMenuItem;
  * var registerPlugin = wp.plugins.registerPlugin;
- * var moreIcon = wp.element.createElement( 'svg' ); //... svg element.
+ * var moreIcon = React.createElement( 'svg' ); //... svg element.
  *
  * function Component() {
  * 	return el(
@@ -456,7 +405,7 @@
  * @example
  * ```js
  * // Using ESNext syntax
- * import { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post';
+ * import { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/editor';
  * import { registerPlugin } from '@wordpress/plugins';
  * import { more } from '@wordpress/icons';
  *
@@ -483,52 +432,43 @@
  * } );
  * ```
  *
- * @return {WPPlugin} The final plugin settings object.
+ * @return The final plugin settings object.
  */
-
 function registerPlugin(name, settings) {
   if (typeof settings !== 'object') {
     console.error('No settings object provided!');
     return null;
   }
-
   if (typeof name !== 'string') {
     console.error('Plugin name must be string.');
     return null;
   }
-
   if (!/^[a-z][a-z0-9-]*$/.test(name)) {
     console.error('Plugin name must include only lowercase alphanumeric characters or dashes, and start with a letter. Example: "my-plugin".');
     return null;
   }
-
   if (api_plugins[name]) {
     console.error(`Plugin "${name}" is already registered.`);
   }
-
   settings = (0,external_wp_hooks_namespaceObject.applyFilters)('plugins.registerPlugin', settings, name);
   const {
     render,
     scope
   } = settings;
-
-  if (!(0,external_lodash_namespaceObject.isFunction)(render)) {
+  if (typeof render !== 'function') {
     console.error('The "render" property must be specified and must be a valid function.');
     return null;
   }
-
   if (scope) {
     if (typeof scope !== 'string') {
       console.error('Plugin scope must be string.');
       return null;
     }
-
     if (!/^[a-z][a-z0-9-]*$/.test(scope)) {
       console.error('Plugin scope must include only lowercase alphanumeric characters or dashes, and start with a letter. Example: "my-page".');
       return null;
     }
   }
-
   api_plugins[name] = {
     name,
     icon: library_plugins,
@@ -537,10 +477,11 @@
   (0,external_wp_hooks_namespaceObject.doAction)('plugins.pluginRegistered', settings, name);
   return settings;
 }
+
 /**
  * Unregisters a plugin by name.
  *
- * @param {string} name Plugin name.
+ * @param name Plugin name.
  *
  * @example
  * ```js
@@ -558,48 +499,44 @@
  * unregisterPlugin( 'plugin-name' );
  * ```
  *
- * @return {?WPPlugin} The previous plugin settings object, if it has been
- *                     successfully unregistered; otherwise `undefined`.
+ * @return The previous plugin settings object, if it has been
+ *         successfully unregistered; otherwise `undefined`.
  */
-
 function unregisterPlugin(name) {
   if (!api_plugins[name]) {
     console.error('Plugin "' + name + '" is not registered.');
     return;
   }
-
   const oldPlugin = api_plugins[name];
   delete api_plugins[name];
   (0,external_wp_hooks_namespaceObject.doAction)('plugins.pluginUnregistered', oldPlugin, name);
   return oldPlugin;
 }
+
 /**
  * Returns a registered plugin settings.
  *
- * @param {string} name Plugin name.
+ * @param name Plugin name.
  *
- * @return {?WPPlugin} Plugin setting.
+ * @return Plugin setting.
  */
-
 function getPlugin(name) {
   return api_plugins[name];
 }
+
 /**
  * Returns all registered plugins without a scope or for a given scope.
  *
- * @param {string} [scope] The scope to be used when rendering inside
- *                         a plugin area. No scope by default.
+ * @param scope The scope to be used when rendering inside
+ *              a plugin area. No scope by default.
  *
- * @return {WPPlugin[]} The list of plugins without a scope or for a given scope.
+ * @return The list of plugins without a scope or for a given scope.
  */
-
 function getPlugins(scope) {
   return Object.values(api_plugins).filter(plugin => plugin.scope === scope);
 }
 
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/plugin-area/index.js
-
-
 /**
  * External dependencies
  */
@@ -611,6 +548,7 @@
 
 
 
+
 /**
  * Internal dependencies
  */
@@ -618,13 +556,21 @@
 
 
 
+const getPluginContext = memize((icon, name) => ({
+  icon,
+  name
+}));
+
 /**
  * A component that renders all plugin fills in a hidden div.
  *
+ * @param  props
+ * @param  props.scope
+ * @param  props.onError
  * @example
  * ```js
  * // Using ES5 syntax
- * var el = wp.element.createElement;
+ * var el = React.createElement;
  * var PluginArea = wp.plugins.PluginArea;
  *
  * function Layout() {
@@ -650,75 +596,52 @@
  * );
  * ```
  *
- * @return {WPComponent} The component to be rendered.
+ * @return {Component} The component to be rendered.
  */
-
-class PluginArea extends external_wp_element_namespaceObject.Component {
-  constructor() {
-    super(...arguments);
-    this.setPlugins = this.setPlugins.bind(this);
-    this.memoizedContext = memize_default()((name, icon) => {
-      return {
-        name,
-        icon
-      };
-    });
-    this.state = this.getCurrentPluginsState();
-  }
-
-  getCurrentPluginsState() {
+function PluginArea({
+  scope,
+  onError
+}) {
+  const store = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    let lastValue = [];
     return {
-      plugins: (0,external_lodash_namespaceObject.map)(getPlugins(this.props.scope), _ref => {
-        let {
-          icon,
-          name,
-          render
-        } = _ref;
-        return {
-          Plugin: render,
-          context: this.memoizedContext(name, icon)
+      subscribe(listener) {
+        (0,external_wp_hooks_namespaceObject.addAction)('plugins.pluginRegistered', 'core/plugins/plugin-area/plugins-registered', listener);
+        (0,external_wp_hooks_namespaceObject.addAction)('plugins.pluginUnregistered', 'core/plugins/plugin-area/plugins-unregistered', listener);
+        return () => {
+          (0,external_wp_hooks_namespaceObject.removeAction)('plugins.pluginRegistered', 'core/plugins/plugin-area/plugins-registered');
+          (0,external_wp_hooks_namespaceObject.removeAction)('plugins.pluginUnregistered', 'core/plugins/plugin-area/plugins-unregistered');
         };
-      })
+      },
+      getValue() {
+        const nextValue = getPlugins(scope);
+        if (!external_wp_isShallowEqual_default()(lastValue, nextValue)) {
+          lastValue = nextValue;
+        }
+        return lastValue;
+      }
     };
-  }
-
-  componentDidMount() {
-    (0,external_wp_hooks_namespaceObject.addAction)('plugins.pluginRegistered', 'core/plugins/plugin-area/plugins-registered', this.setPlugins);
-    (0,external_wp_hooks_namespaceObject.addAction)('plugins.pluginUnregistered', 'core/plugins/plugin-area/plugins-unregistered', this.setPlugins);
-  }
-
-  componentWillUnmount() {
-    (0,external_wp_hooks_namespaceObject.removeAction)('plugins.pluginRegistered', 'core/plugins/plugin-area/plugins-registered');
-    (0,external_wp_hooks_namespaceObject.removeAction)('plugins.pluginUnregistered', 'core/plugins/plugin-area/plugins-unregistered');
-  }
-
-  setPlugins() {
-    this.setState(this.getCurrentPluginsState);
-  }
-
-  render() {
-    return (0,external_wp_element_namespaceObject.createElement)("div", {
-      style: {
-        display: 'none'
-      }
-    }, (0,external_lodash_namespaceObject.map)(this.state.plugins, _ref2 => {
-      let {
-        context,
-        Plugin
-      } = _ref2;
-      return (0,external_wp_element_namespaceObject.createElement)(Provider, {
-        key: context.name,
-        value: context
-      }, (0,external_wp_element_namespaceObject.createElement)(PluginErrorBoundary, {
-        name: context.name,
-        onError: this.props.onError
-      }, (0,external_wp_element_namespaceObject.createElement)(Plugin, null)));
-    }));
-  }
-
+  }, [scope]);
+  const plugins = (0,external_wp_element_namespaceObject.useSyncExternalStore)(store.subscribe, store.getValue, store.getValue);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    style: {
+      display: 'none'
+    },
+    children: plugins.map(({
+      icon,
+      name,
+      render: Plugin
+    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PluginContextProvider, {
+      value: getPluginContext(icon, name),
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PluginErrorBoundary, {
+        name: name,
+        onError: onError,
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Plugin, {})
+      })
+    }, name))
+  });
 }
-
-/* harmony default export */ var plugin_area = (PluginArea);
+/* harmony default export */ const plugin_area = (PluginArea);
 
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/index.js
 
@@ -728,7 +651,6 @@
 
 
 
-}();
 (window.wp = window.wp || {}).plugins = __webpack_exports__;
 /******/ })()
 ;
\ No newline at end of file