summaryrefslogtreecommitdiffstats
path: root/wp-includes/js/dist/widgets.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/js/dist/widgets.js
parentInitial commit. (diff)
downloadwordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz
wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/js/dist/widgets.js')
-rw-r--r--wp-includes/js/dist/widgets.js1757
1 files changed, 1757 insertions, 0 deletions
diff --git a/wp-includes/js/dist/widgets.js b/wp-includes/js/dist/widgets.js
new file mode 100644
index 0000000..d968353
--- /dev/null
+++ b/wp-includes/js/dist/widgets.js
@@ -0,0 +1,1757 @@
+/******/ (function() { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ 4403:
+/***/ (function(module, exports) {
+
+var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+ Copyright (c) 2018 Jed Watson.
+ Licensed under the MIT License (MIT), see
+ http://jedwatson.github.io/classnames
+*/
+/* global define */
+
+(function () {
+ 'use strict';
+
+ var hasOwn = {}.hasOwnProperty;
+ var nativeCodeString = '[native code]';
+
+ function classNames() {
+ var classes = [];
+
+ for (var i = 0; i < arguments.length; i++) {
+ var arg = arguments[i];
+ if (!arg) continue;
+
+ var argType = typeof arg;
+
+ if (argType === 'string' || argType === 'number') {
+ classes.push(arg);
+ } else if (Array.isArray(arg)) {
+ if (arg.length) {
+ var inner = classNames.apply(null, arg);
+ if (inner) {
+ classes.push(inner);
+ }
+ }
+ } else if (argType === 'object') {
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
+ classes.push(arg.toString());
+ continue;
+ }
+
+ for (var key in arg) {
+ if (hasOwn.call(arg, key) && arg[key]) {
+ classes.push(key);
+ }
+ }
+ }
+ }
+
+ return classes.join(' ');
+ }
+
+ if ( true && module.exports) {
+ classNames.default = classNames;
+ module.exports = classNames;
+ } else if (true) {
+ // register as 'classnames', consistent with npm package name
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
+ return classNames;
+ }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else {}
+}());
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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__, {
+ MoveToWidgetArea: function() { return /* reexport */ MoveToWidgetArea; },
+ addWidgetIdToBlock: function() { return /* reexport */ addWidgetIdToBlock; },
+ getWidgetIdFromBlock: function() { return /* reexport */ getWidgetIdFromBlock; },
+ registerLegacyWidgetBlock: function() { return /* binding */ registerLegacyWidgetBlock; },
+ registerLegacyWidgetVariations: function() { return /* reexport */ registerLegacyWidgetVariations; },
+ registerWidgetGroupBlock: function() { return /* binding */ registerWidgetGroupBlock; }
+});
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js
+var legacy_widget_namespaceObject = {};
+__webpack_require__.r(legacy_widget_namespaceObject);
+__webpack_require__.d(legacy_widget_namespaceObject, {
+ metadata: function() { return metadata; },
+ name: function() { return legacy_widget_name; },
+ settings: function() { return settings; }
+});
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/index.js
+var widget_group_namespaceObject = {};
+__webpack_require__.r(widget_group_namespaceObject);
+__webpack_require__.d(widget_group_namespaceObject, {
+ metadata: function() { return widget_group_metadata; },
+ name: function() { return widget_group_name; },
+ settings: function() { return widget_group_settings; }
+});
+
+;// CONCATENATED MODULE: external ["wp","blocks"]
+var external_wp_blocks_namespaceObject = window["wp"]["blocks"];
+;// CONCATENATED MODULE: external ["wp","element"]
+var external_wp_element_namespaceObject = window["wp"]["element"];
+;// CONCATENATED MODULE: external ["wp","primitives"]
+var external_wp_primitives_namespaceObject = window["wp"]["primitives"];
+;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/widget.js
+
+/**
+ * WordPress dependencies
+ */
+
+const widget = (0,external_wp_element_namespaceObject.createElement)(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: "M6 3H8V5H16V3H18V5C19.1046 5 20 5.89543 20 7V19C20 20.1046 19.1046 21 18 21H6C4.89543 21 4 20.1046 4 19V7C4 5.89543 4.89543 5 6 5V3ZM18 6.5H6C5.72386 6.5 5.5 6.72386 5.5 7V8H18.5V7C18.5 6.72386 18.2761 6.5 18 6.5ZM18.5 9.5H5.5V19C5.5 19.2761 5.72386 19.5 6 19.5H18C18.2761 19.5 18.5 19.2761 18.5 19V9.5ZM11 11H13V13H11V11ZM7 11V13H9V11H7ZM15 13V11H17V13H15Z"
+}));
+/* harmony default export */ var library_widget = (widget);
+
+// EXTERNAL MODULE: ./node_modules/classnames/index.js
+var classnames = __webpack_require__(4403);
+var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
+;// CONCATENATED MODULE: external ["wp","blockEditor"]
+var external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"];
+;// CONCATENATED MODULE: external ["wp","components"]
+var external_wp_components_namespaceObject = window["wp"]["components"];
+;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/brush.js
+
+/**
+ * WordPress dependencies
+ */
+
+const brush = (0,external_wp_element_namespaceObject.createElement)(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: "M4 20h8v-1.5H4V20zM18.9 3.5c-.6-.6-1.5-.6-2.1 0l-7.2 7.2c-.4-.1-.7 0-1.1.1-.5.2-1.5.7-1.9 2.2-.4 1.7-.8 2.2-1.1 2.7-.1.1-.2.3-.3.4l-.6 1.1H6c2 0 3.4-.4 4.7-1.4.8-.6 1.2-1.4 1.3-2.3 0-.3 0-.5-.1-.7L19 5.7c.5-.6.5-1.6-.1-2.2zM9.7 14.7c-.7.5-1.5.8-2.4 1 .2-.5.5-1.2.8-2.3.2-.6.4-1 .8-1.1.5-.1 1 .1 1.3.3.2.2.3.5.2.8 0 .3-.1.9-.7 1.3z"
+}));
+/* harmony default export */ var library_brush = (brush);
+
+;// CONCATENATED MODULE: external ["wp","i18n"]
+var external_wp_i18n_namespaceObject = window["wp"]["i18n"];
+;// CONCATENATED MODULE: external ["wp","data"]
+var external_wp_data_namespaceObject = window["wp"]["data"];
+;// CONCATENATED MODULE: external ["wp","coreData"]
+var external_wp_coreData_namespaceObject = window["wp"]["coreData"];
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/widget-type-selector.js
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+function WidgetTypeSelector({
+ selectedId,
+ onSelect
+}) {
+ const widgetTypes = (0,external_wp_data_namespaceObject.useSelect)(select => {
+ var _select$getSettings$w;
+ const hiddenIds = (_select$getSettings$w = select(external_wp_blockEditor_namespaceObject.store).getSettings()?.widgetTypesToHideFromLegacyWidgetBlock) !== null && _select$getSettings$w !== void 0 ? _select$getSettings$w : [];
+ return select(external_wp_coreData_namespaceObject.store).getWidgetTypes({
+ per_page: -1
+ })?.filter(widgetType => !hiddenIds.includes(widgetType.id));
+ }, []);
+ if (!widgetTypes) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null);
+ }
+ if (widgetTypes.length === 0) {
+ return (0,external_wp_i18n_namespaceObject.__)('There are no widgets available.');
+ }
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, {
+ __nextHasNoMarginBottom: true,
+ label: (0,external_wp_i18n_namespaceObject.__)('Select a legacy widget to display:'),
+ value: selectedId !== null && selectedId !== void 0 ? selectedId : '',
+ options: [{
+ value: '',
+ label: (0,external_wp_i18n_namespaceObject.__)('Select widget')
+ }, ...widgetTypes.map(widgetType => ({
+ value: widgetType.id,
+ label: widgetType.name
+ }))],
+ onChange: value => {
+ if (value) {
+ const selected = widgetTypes.find(widgetType => widgetType.id === value);
+ onSelect({
+ selectedId: selected.id,
+ isMulti: selected.is_multi
+ });
+ } else {
+ onSelect({
+ selectedId: null
+ });
+ }
+ }
+ });
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/inspector-card.js
+
+function InspectorCard({
+ name,
+ description
+}) {
+ return (0,external_wp_element_namespaceObject.createElement)("div", {
+ className: "wp-block-legacy-widget-inspector-card"
+ }, (0,external_wp_element_namespaceObject.createElement)("h3", {
+ className: "wp-block-legacy-widget-inspector-card__name"
+ }, name), (0,external_wp_element_namespaceObject.createElement)("span", null, description));
+}
+
+;// CONCATENATED MODULE: external ["wp","notices"]
+var external_wp_notices_namespaceObject = window["wp"]["notices"];
+;// CONCATENATED MODULE: external ["wp","compose"]
+var external_wp_compose_namespaceObject = window["wp"]["compose"];
+;// CONCATENATED MODULE: external ["wp","apiFetch"]
+var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
+var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/control.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * An API for creating and loading a widget control (a <div class="widget">
+ * element) that is compatible with most third party widget scripts. By not
+ * using React for this, we ensure that we have complete contorl over the DOM
+ * and do not accidentally remove any elements that a third party widget script
+ * has attached an event listener to.
+ *
+ * @property {Element} element The control's DOM element.
+ */
+class Control {
+ /**
+ * Creates and loads a new control.
+ *
+ * @access public
+ * @param {Object} params
+ * @param {string} params.id
+ * @param {string} params.idBase
+ * @param {Object} params.instance
+ * @param {Function} params.onChangeInstance
+ * @param {Function} params.onChangeHasPreview
+ * @param {Function} params.onError
+ */
+ constructor({
+ id,
+ idBase,
+ instance,
+ onChangeInstance,
+ onChangeHasPreview,
+ onError
+ }) {
+ this.id = id;
+ this.idBase = idBase;
+ this._instance = instance;
+ this._hasPreview = null;
+ this.onChangeInstance = onChangeInstance;
+ this.onChangeHasPreview = onChangeHasPreview;
+ this.onError = onError;
+
+ // We can't use the real widget number as this is calculated by the
+ // server and we may not ever *actually* save this widget. Instead, use
+ // a fake but unique number.
+ this.number = ++lastNumber;
+ this.handleFormChange = (0,external_wp_compose_namespaceObject.debounce)(this.handleFormChange.bind(this), 200);
+ this.handleFormSubmit = this.handleFormSubmit.bind(this);
+ this.initDOM();
+ this.bindEvents();
+ this.loadContent();
+ }
+
+ /**
+ * Clean up the control so that it can be garabge collected.
+ *
+ * @access public
+ */
+ destroy() {
+ this.unbindEvents();
+ this.element.remove();
+ // TODO: How do we make third party widget scripts remove their event
+ // listeners?
+ }
+
+ /**
+ * Creates the control's DOM structure.
+ *
+ * @access private
+ */
+ initDOM() {
+ var _this$id, _this$idBase;
+ this.element = el('div', {
+ class: 'widget open'
+ }, [el('div', {
+ class: 'widget-inside'
+ }, [this.form = el('form', {
+ class: 'form',
+ method: 'post'
+ }, [
+ // These hidden form inputs are what most widgets' scripts
+ // use to access data about the widget.
+ el('input', {
+ class: 'widget-id',
+ type: 'hidden',
+ name: 'widget-id',
+ value: (_this$id = this.id) !== null && _this$id !== void 0 ? _this$id : `${this.idBase}-${this.number}`
+ }), el('input', {
+ class: 'id_base',
+ type: 'hidden',
+ name: 'id_base',
+ value: (_this$idBase = this.idBase) !== null && _this$idBase !== void 0 ? _this$idBase : this.id
+ }), el('input', {
+ class: 'widget-width',
+ type: 'hidden',
+ name: 'widget-width',
+ value: '250'
+ }), el('input', {
+ class: 'widget-height',
+ type: 'hidden',
+ name: 'widget-height',
+ value: '200'
+ }), el('input', {
+ class: 'widget_number',
+ type: 'hidden',
+ name: 'widget_number',
+ value: this.idBase ? this.number.toString() : ''
+ }), this.content = el('div', {
+ class: 'widget-content'
+ }),
+ // Non-multi widgets can be saved via a Save button.
+ this.id && el('button', {
+ class: 'button is-primary',
+ type: 'submit'
+ }, (0,external_wp_i18n_namespaceObject.__)('Save'))])])]);
+ }
+
+ /**
+ * Adds the control's event listeners.
+ *
+ * @access private
+ */
+ bindEvents() {
+ // Prefer jQuery 'change' event instead of the native 'change' event
+ // because many widgets use jQuery's event bus to trigger an update.
+ if (window.jQuery) {
+ const {
+ jQuery: $
+ } = window;
+ $(this.form).on('change', null, this.handleFormChange);
+ $(this.form).on('input', null, this.handleFormChange);
+ $(this.form).on('submit', this.handleFormSubmit);
+ } else {
+ this.form.addEventListener('change', this.handleFormChange);
+ this.form.addEventListener('input', this.handleFormChange);
+ this.form.addEventListener('submit', this.handleFormSubmit);
+ }
+ }
+
+ /**
+ * Removes the control's event listeners.
+ *
+ * @access private
+ */
+ unbindEvents() {
+ if (window.jQuery) {
+ const {
+ jQuery: $
+ } = window;
+ $(this.form).off('change', null, this.handleFormChange);
+ $(this.form).off('input', null, this.handleFormChange);
+ $(this.form).off('submit', this.handleFormSubmit);
+ } else {
+ this.form.removeEventListener('change', this.handleFormChange);
+ this.form.removeEventListener('input', this.handleFormChange);
+ this.form.removeEventListener('submit', this.handleFormSubmit);
+ }
+ }
+
+ /**
+ * Fetches the widget's form HTML from the REST API and loads it into the
+ * control's form.
+ *
+ * @access private
+ */
+ async loadContent() {
+ try {
+ if (this.id) {
+ const {
+ form
+ } = await saveWidget(this.id);
+ this.content.innerHTML = form;
+ } else if (this.idBase) {
+ const {
+ form,
+ preview
+ } = await encodeWidget({
+ idBase: this.idBase,
+ instance: this.instance,
+ number: this.number
+ });
+ this.content.innerHTML = form;
+ this.hasPreview = !isEmptyHTML(preview);
+
+ // If we don't have an instance, perform a save right away. This
+ // happens when creating a new Legacy Widget block.
+ if (!this.instance.hash) {
+ const {
+ instance
+ } = await encodeWidget({
+ idBase: this.idBase,
+ instance: this.instance,
+ number: this.number,
+ formData: serializeForm(this.form)
+ });
+ this.instance = instance;
+ }
+ }
+
+ // Trigger 'widget-added' when widget is ready. This event is what
+ // widgets' scripts use to initialize, attach events, etc. The event
+ // must be fired using jQuery's event bus as this is what widget
+ // scripts expect. If jQuery is not loaded, do nothing - some
+ // widgets will still work regardless.
+ if (window.jQuery) {
+ const {
+ jQuery: $
+ } = window;
+ $(document).trigger('widget-added', [$(this.element)]);
+ }
+ } catch (error) {
+ this.onError(error);
+ }
+ }
+
+ /**
+ * Perform a save when a multi widget's form is changed. Non-multi widgets
+ * are saved manually.
+ *
+ * @access private
+ */
+ handleFormChange() {
+ if (this.idBase) {
+ this.saveForm();
+ }
+ }
+
+ /**
+ * Perform a save when the control's form is manually submitted.
+ *
+ * @access private
+ * @param {Event} event
+ */
+ handleFormSubmit(event) {
+ event.preventDefault();
+ this.saveForm();
+ }
+
+ /**
+ * Serialize the control's form, send it to the REST API, and update the
+ * instance with the encoded instance that the REST API returns.
+ *
+ * @access private
+ */
+ async saveForm() {
+ const formData = serializeForm(this.form);
+ try {
+ if (this.id) {
+ const {
+ form
+ } = await saveWidget(this.id, formData);
+ this.content.innerHTML = form;
+ if (window.jQuery) {
+ const {
+ jQuery: $
+ } = window;
+ $(document).trigger('widget-updated', [$(this.element)]);
+ }
+ } else if (this.idBase) {
+ const {
+ instance,
+ preview
+ } = await encodeWidget({
+ idBase: this.idBase,
+ instance: this.instance,
+ number: this.number,
+ formData
+ });
+ this.instance = instance;
+ this.hasPreview = !isEmptyHTML(preview);
+ }
+ } catch (error) {
+ this.onError(error);
+ }
+ }
+
+ /**
+ * The widget's instance object.
+ *
+ * @access private
+ */
+ get instance() {
+ return this._instance;
+ }
+
+ /**
+ * The widget's instance object.
+ *
+ * @access private
+ */
+ set instance(instance) {
+ if (this._instance !== instance) {
+ this._instance = instance;
+ this.onChangeInstance(instance);
+ }
+ }
+
+ /**
+ * Whether or not the widget can be previewed.
+ *
+ * @access public
+ */
+ get hasPreview() {
+ return this._hasPreview;
+ }
+
+ /**
+ * Whether or not the widget can be previewed.
+ *
+ * @access private
+ */
+ set hasPreview(hasPreview) {
+ if (this._hasPreview !== hasPreview) {
+ this._hasPreview = hasPreview;
+ this.onChangeHasPreview(hasPreview);
+ }
+ }
+}
+let lastNumber = 0;
+function el(tagName, attributes = {}, content = null) {
+ const element = document.createElement(tagName);
+ for (const [attribute, value] of Object.entries(attributes)) {
+ element.setAttribute(attribute, value);
+ }
+ if (Array.isArray(content)) {
+ for (const child of content) {
+ if (child) {
+ element.appendChild(child);
+ }
+ }
+ } else if (typeof content === 'string') {
+ element.innerText = content;
+ }
+ return element;
+}
+async function saveWidget(id, formData = null) {
+ let widget;
+ if (formData) {
+ widget = await external_wp_apiFetch_default()({
+ path: `/wp/v2/widgets/${id}?context=edit`,
+ method: 'PUT',
+ data: {
+ form_data: formData
+ }
+ });
+ } else {
+ widget = await external_wp_apiFetch_default()({
+ path: `/wp/v2/widgets/${id}?context=edit`,
+ method: 'GET'
+ });
+ }
+ return {
+ form: widget.rendered_form
+ };
+}
+async function encodeWidget({
+ idBase,
+ instance,
+ number,
+ formData = null
+}) {
+ const response = await external_wp_apiFetch_default()({
+ path: `/wp/v2/widget-types/${idBase}/encode`,
+ method: 'POST',
+ data: {
+ instance,
+ number,
+ form_data: formData
+ }
+ });
+ return {
+ instance: response.instance,
+ form: response.form,
+ preview: response.preview
+ };
+}
+function isEmptyHTML(html) {
+ const element = document.createElement('div');
+ element.innerHTML = html;
+ return isEmptyNode(element);
+}
+function isEmptyNode(node) {
+ switch (node.nodeType) {
+ case node.TEXT_NODE:
+ // Text nodes are empty if it's entirely whitespace.
+ return node.nodeValue.trim() === '';
+ case node.ELEMENT_NODE:
+ // Elements that are "embedded content" are not empty.
+ // https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0
+ if (['AUDIO', 'CANVAS', 'EMBED', 'IFRAME', 'IMG', 'MATH', 'OBJECT', 'SVG', 'VIDEO'].includes(node.tagName)) {
+ return false;
+ }
+ // Elements with no children are empty.
+ if (!node.hasChildNodes()) {
+ return true;
+ }
+ // Elements with children are empty if all their children are empty.
+ return Array.from(node.childNodes).every(isEmptyNode);
+ default:
+ return true;
+ }
+}
+function serializeForm(form) {
+ return new window.URLSearchParams(Array.from(new window.FormData(form))).toString();
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/form.js
+
+/**
+ * External dependencies
+ */
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+function Form({
+ title,
+ isVisible,
+ id,
+ idBase,
+ instance,
+ isWide,
+ onChangeInstance,
+ onChangeHasPreview
+}) {
+ const ref = (0,external_wp_element_namespaceObject.useRef)();
+ const isMediumLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small');
+
+ // We only want to remount the control when the instance changes
+ // *externally*. For example, if the user performs an undo. To do this, we
+ // keep track of changes made to instance by the control itself and then
+ // ignore those.
+ const outgoingInstances = (0,external_wp_element_namespaceObject.useRef)(new Set());
+ const incomingInstances = (0,external_wp_element_namespaceObject.useRef)(new Set());
+ const {
+ createNotice
+ } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
+ (0,external_wp_element_namespaceObject.useEffect)(() => {
+ if (incomingInstances.current.has(instance)) {
+ incomingInstances.current.delete(instance);
+ return;
+ }
+ const control = new Control({
+ id,
+ idBase,
+ instance,
+ onChangeInstance(nextInstance) {
+ outgoingInstances.current.add(instance);
+ incomingInstances.current.add(nextInstance);
+ onChangeInstance(nextInstance);
+ },
+ onChangeHasPreview,
+ onError(error) {
+ window.console.error(error);
+ createNotice('error', (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: the name of the affected block. */
+ (0,external_wp_i18n_namespaceObject.__)('The "%s" block was affected by errors and may not function properly. Check the developer tools for more details.'), idBase || id));
+ }
+ });
+ ref.current.appendChild(control.element);
+ return () => {
+ if (outgoingInstances.current.has(instance)) {
+ outgoingInstances.current.delete(instance);
+ return;
+ }
+ control.destroy();
+ };
+ }, [id, idBase, instance, onChangeInstance, onChangeHasPreview, isMediumLargeViewport]);
+ if (isWide && isMediumLargeViewport) {
+ return (0,external_wp_element_namespaceObject.createElement)("div", {
+ className: classnames_default()({
+ 'wp-block-legacy-widget__container': isVisible
+ })
+ }, isVisible && (0,external_wp_element_namespaceObject.createElement)("h3", {
+ className: "wp-block-legacy-widget__edit-form-title"
+ }, title), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Popover, {
+ focusOnMount: false,
+ placement: "right",
+ offset: 32,
+ resize: false,
+ flip: false,
+ shift: true
+ }, (0,external_wp_element_namespaceObject.createElement)("div", {
+ ref: ref,
+ className: "wp-block-legacy-widget__edit-form",
+ hidden: !isVisible
+ })));
+ }
+ return (0,external_wp_element_namespaceObject.createElement)("div", {
+ ref: ref,
+ className: "wp-block-legacy-widget__edit-form",
+ hidden: !isVisible
+ }, (0,external_wp_element_namespaceObject.createElement)("h3", {
+ className: "wp-block-legacy-widget__edit-form-title"
+ }, title));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/preview.js
+
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+function Preview({
+ idBase,
+ instance,
+ isVisible
+}) {
+ const [isLoaded, setIsLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
+ const [srcDoc, setSrcDoc] = (0,external_wp_element_namespaceObject.useState)('');
+ (0,external_wp_element_namespaceObject.useEffect)(() => {
+ const abortController = typeof window.AbortController === 'undefined' ? undefined : new window.AbortController();
+ async function fetchPreviewHTML() {
+ const restRoute = `/wp/v2/widget-types/${idBase}/render`;
+ return await external_wp_apiFetch_default()({
+ path: restRoute,
+ method: 'POST',
+ signal: abortController?.signal,
+ data: instance ? {
+ instance
+ } : {}
+ });
+ }
+ fetchPreviewHTML().then(response => {
+ setSrcDoc(response.preview);
+ }).catch(error => {
+ if ('AbortError' === error.name) {
+ // We don't want to log aborted requests.
+ return;
+ }
+ throw error;
+ });
+ return () => abortController?.abort();
+ }, [idBase, instance]);
+
+ // Resize the iframe on either the load event, or when the iframe becomes visible.
+ const ref = (0,external_wp_compose_namespaceObject.useRefEffect)(iframe => {
+ // Only set height if the iframe is loaded,
+ // or it will grow to an unexpected large height in Safari if it's hidden initially.
+ if (!isLoaded) {
+ return;
+ }
+ // If the preview frame has another origin then this won't work.
+ // One possible solution is to add custom script to call `postMessage` in the preview frame.
+ // Or, better yet, we migrate away from iframe.
+ function setHeight() {
+ var _iframe$contentDocume, _iframe$contentDocume2;
+ // Pick the maximum of these two values to account for margin collapsing.
+ const height = Math.max((_iframe$contentDocume = iframe.contentDocument.documentElement?.offsetHeight) !== null && _iframe$contentDocume !== void 0 ? _iframe$contentDocume : 0, (_iframe$contentDocume2 = iframe.contentDocument.body?.offsetHeight) !== null && _iframe$contentDocume2 !== void 0 ? _iframe$contentDocume2 : 0);
+
+ // Fallback to a height of 100px if the height cannot be determined.
+ // This ensures the block is still selectable. 100px should hopefully
+ // be not so big that it's annoying, and not so small that nothing
+ // can be seen.
+ iframe.style.height = `${height !== 0 ? height : 100}px`;
+ }
+ const {
+ IntersectionObserver
+ } = iframe.ownerDocument.defaultView;
+
+ // Observe for intersections that might cause a change in the height of
+ // the iframe, e.g. a Widget Area becoming expanded.
+ const intersectionObserver = new IntersectionObserver(([entry]) => {
+ if (entry.isIntersecting) {
+ setHeight();
+ }
+ }, {
+ threshold: 1
+ });
+ intersectionObserver.observe(iframe);
+ iframe.addEventListener('load', setHeight);
+ return () => {
+ intersectionObserver.disconnect();
+ iframe.removeEventListener('load', setHeight);
+ };
+ }, [isLoaded]);
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, isVisible && !isLoaded && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)), (0,external_wp_element_namespaceObject.createElement)("div", {
+ className: classnames_default()('wp-block-legacy-widget__edit-preview', {
+ 'is-offscreen': !isVisible || !isLoaded
+ })
+ }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Disabled, null, (0,external_wp_element_namespaceObject.createElement)("iframe", {
+ ref: ref,
+ className: "wp-block-legacy-widget__edit-preview-iframe",
+ tabIndex: "-1",
+ title: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget Preview'),
+ srcDoc: srcDoc,
+ onLoad: event => {
+ // To hide the scrollbars of the preview frame for some edge cases,
+ // such as negative margins in the Gallery Legacy Widget.
+ // It can't be scrolled anyway.
+ // TODO: Ideally, this should be fixed in core.
+ event.target.contentDocument.body.style.overflow = 'hidden';
+ setIsLoaded(true);
+ },
+ height: 100
+ }))));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/no-preview.js
+
+/**
+ * WordPress dependencies
+ */
+
+function NoPreview({
+ name
+}) {
+ return (0,external_wp_element_namespaceObject.createElement)("div", {
+ className: "wp-block-legacy-widget__edit-no-preview"
+ }, name && (0,external_wp_element_namespaceObject.createElement)("h3", null, name), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('No preview available.')));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.js
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+function ConvertToBlocksButton({
+ clientId,
+ rawInstance
+}) {
+ const {
+ replaceBlocks
+ } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ToolbarButton, {
+ onClick: () => {
+ if (rawInstance.title) {
+ replaceBlocks(clientId, [(0,external_wp_blocks_namespaceObject.createBlock)('core/heading', {
+ content: rawInstance.title
+ }), ...(0,external_wp_blocks_namespaceObject.rawHandler)({
+ HTML: rawInstance.text
+ })]);
+ } else {
+ replaceBlocks(clientId, (0,external_wp_blocks_namespaceObject.rawHandler)({
+ HTML: rawInstance.text
+ }));
+ }
+ }
+ }, (0,external_wp_i18n_namespaceObject.__)('Convert to blocks'));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/index.js
+
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+function Edit(props) {
+ const {
+ id,
+ idBase
+ } = props.attributes;
+ const {
+ isWide = false
+ } = props;
+ const blockProps = (0,external_wp_blockEditor_namespaceObject.useBlockProps)({
+ className: classnames_default()({
+ 'is-wide-widget': isWide
+ })
+ });
+ return (0,external_wp_element_namespaceObject.createElement)("div", {
+ ...blockProps
+ }, !id && !idBase ? (0,external_wp_element_namespaceObject.createElement)(Empty, {
+ ...props
+ }) : (0,external_wp_element_namespaceObject.createElement)(NotEmpty, {
+ ...props
+ }));
+}
+function Empty({
+ attributes: {
+ id,
+ idBase
+ },
+ setAttributes
+}) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, {
+ icon: (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockIcon, {
+ icon: library_brush
+ }),
+ label: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget')
+ }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexBlock, null, (0,external_wp_element_namespaceObject.createElement)(WidgetTypeSelector, {
+ selectedId: id !== null && id !== void 0 ? id : idBase,
+ onSelect: ({
+ selectedId,
+ isMulti
+ }) => {
+ if (!selectedId) {
+ setAttributes({
+ id: null,
+ idBase: null,
+ instance: null
+ });
+ } else if (isMulti) {
+ setAttributes({
+ id: null,
+ idBase: selectedId,
+ instance: {}
+ });
+ } else {
+ setAttributes({
+ id: selectedId,
+ idBase: null,
+ instance: null
+ });
+ }
+ }
+ }))));
+}
+function NotEmpty({
+ attributes: {
+ id,
+ idBase,
+ instance
+ },
+ setAttributes,
+ clientId,
+ isSelected,
+ isWide = false
+}) {
+ const [hasPreview, setHasPreview] = (0,external_wp_element_namespaceObject.useState)(null);
+ const widgetTypeId = id !== null && id !== void 0 ? id : idBase;
+ const {
+ record: widgetType,
+ hasResolved: hasResolvedWidgetType
+ } = (0,external_wp_coreData_namespaceObject.useEntityRecord)('root', 'widgetType', widgetTypeId);
+ const isNavigationMode = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).isNavigationMode(), []);
+ const setInstance = (0,external_wp_element_namespaceObject.useCallback)(nextInstance => {
+ setAttributes({
+ instance: nextInstance
+ });
+ }, []);
+ if (!widgetType && hasResolvedWidgetType) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, {
+ icon: (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockIcon, {
+ icon: library_brush
+ }),
+ label: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget')
+ }, (0,external_wp_i18n_namespaceObject.__)('Widget is missing.'));
+ }
+ if (!hasResolvedWidgetType) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null));
+ }
+ const mode = idBase && (isNavigationMode || !isSelected) ? 'preview' : 'edit';
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, idBase === 'text' && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockControls, {
+ group: "other"
+ }, (0,external_wp_element_namespaceObject.createElement)(ConvertToBlocksButton, {
+ clientId: clientId,
+ rawInstance: instance.raw
+ })), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.InspectorControls, null, (0,external_wp_element_namespaceObject.createElement)(InspectorCard, {
+ name: widgetType.name,
+ description: widgetType.description
+ })), (0,external_wp_element_namespaceObject.createElement)(Form, {
+ title: widgetType.name,
+ isVisible: mode === 'edit',
+ id: id,
+ idBase: idBase,
+ instance: instance,
+ isWide: isWide,
+ onChangeInstance: setInstance,
+ onChangeHasPreview: setHasPreview
+ }), idBase && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, hasPreview === null && mode === 'preview' && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)), hasPreview === true && (0,external_wp_element_namespaceObject.createElement)(Preview, {
+ idBase: idBase,
+ instance: instance,
+ isVisible: mode === 'preview'
+ }), hasPreview === false && mode === 'preview' && (0,external_wp_element_namespaceObject.createElement)(NoPreview, {
+ name: widgetType.name
+ })));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/transforms.js
+/**
+ * WordPress dependencies
+ */
+
+const legacyWidgetTransforms = [{
+ block: 'core/calendar',
+ widget: 'calendar'
+}, {
+ block: 'core/search',
+ widget: 'search'
+}, {
+ block: 'core/html',
+ widget: 'custom_html',
+ transform: ({
+ content
+ }) => ({
+ content
+ })
+}, {
+ block: 'core/archives',
+ widget: 'archives',
+ transform: ({
+ count,
+ dropdown
+ }) => {
+ return {
+ displayAsDropdown: !!dropdown,
+ showPostCounts: !!count
+ };
+ }
+}, {
+ block: 'core/latest-posts',
+ widget: 'recent-posts',
+ transform: ({
+ show_date: displayPostDate,
+ number
+ }) => {
+ return {
+ displayPostDate: !!displayPostDate,
+ postsToShow: number
+ };
+ }
+}, {
+ block: 'core/latest-comments',
+ widget: 'recent-comments',
+ transform: ({
+ number
+ }) => {
+ return {
+ commentsToShow: number
+ };
+ }
+}, {
+ block: 'core/tag-cloud',
+ widget: 'tag_cloud',
+ transform: ({
+ taxonomy,
+ count
+ }) => {
+ return {
+ showTagCounts: !!count,
+ taxonomy
+ };
+ }
+}, {
+ block: 'core/categories',
+ widget: 'categories',
+ transform: ({
+ count,
+ dropdown,
+ hierarchical
+ }) => {
+ return {
+ displayAsDropdown: !!dropdown,
+ showPostCounts: !!count,
+ showHierarchy: !!hierarchical
+ };
+ }
+}, {
+ block: 'core/audio',
+ widget: 'media_audio',
+ transform: ({
+ url,
+ preload,
+ loop,
+ attachment_id: id
+ }) => {
+ return {
+ src: url,
+ id,
+ preload,
+ loop
+ };
+ }
+}, {
+ block: 'core/video',
+ widget: 'media_video',
+ transform: ({
+ url,
+ preload,
+ loop,
+ attachment_id: id
+ }) => {
+ return {
+ src: url,
+ id,
+ preload,
+ loop
+ };
+ }
+}, {
+ block: 'core/image',
+ widget: 'media_image',
+ transform: ({
+ alt,
+ attachment_id: id,
+ caption,
+ height,
+ link_classes: linkClass,
+ link_rel: rel,
+ link_target_blank: targetBlack,
+ link_type: linkDestination,
+ link_url: link,
+ size: sizeSlug,
+ url,
+ width
+ }) => {
+ return {
+ alt,
+ caption,
+ height,
+ id,
+ link,
+ linkClass,
+ linkDestination,
+ linkTarget: targetBlack ? '_blank' : undefined,
+ rel,
+ sizeSlug,
+ url,
+ width
+ };
+ }
+}, {
+ block: 'core/gallery',
+ widget: 'media_gallery',
+ transform: ({
+ ids,
+ link_type: linkTo,
+ size,
+ number
+ }) => {
+ return {
+ ids,
+ columns: number,
+ linkTo,
+ sizeSlug: size,
+ images: ids.map(id => ({
+ id
+ }))
+ };
+ }
+}, {
+ block: 'core/rss',
+ widget: 'rss',
+ transform: ({
+ url,
+ show_author: displayAuthor,
+ show_date: displayDate,
+ show_summary: displayExcerpt,
+ items
+ }) => {
+ return {
+ feedURL: url,
+ displayAuthor: !!displayAuthor,
+ displayDate: !!displayDate,
+ displayExcerpt: !!displayExcerpt,
+ itemsToShow: items
+ };
+ }
+}].map(({
+ block,
+ widget,
+ transform
+}) => {
+ return {
+ type: 'block',
+ blocks: [block],
+ isMatch: ({
+ idBase,
+ instance
+ }) => {
+ return idBase === widget && !!instance?.raw;
+ },
+ transform: ({
+ instance
+ }) => {
+ const transformedBlock = (0,external_wp_blocks_namespaceObject.createBlock)(block, transform ? transform(instance.raw) : undefined);
+ if (!instance.raw?.title) {
+ return transformedBlock;
+ }
+ return [(0,external_wp_blocks_namespaceObject.createBlock)('core/heading', {
+ content: instance.raw.title
+ }), transformedBlock];
+ }
+ };
+});
+const transforms = {
+ to: legacyWidgetTransforms
+};
+/* harmony default export */ var legacy_widget_transforms = (transforms);
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+const metadata = {
+ apiVersion: 3,
+ name: "core/legacy-widget",
+ title: "Legacy Widget",
+ category: "widgets",
+ description: "Display a legacy widget.",
+ textdomain: "default",
+ attributes: {
+ id: {
+ type: "string",
+ "default": null
+ },
+ idBase: {
+ type: "string",
+ "default": null
+ },
+ instance: {
+ type: "object",
+ "default": null
+ }
+ },
+ supports: {
+ html: false,
+ customClassName: false,
+ reusable: false
+ },
+ editorStyle: "wp-block-legacy-widget-editor"
+};
+
+
+const {
+ name: legacy_widget_name
+} = metadata;
+
+const settings = {
+ icon: library_widget,
+ edit: Edit,
+ transforms: legacy_widget_transforms
+};
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/group.js
+
+/**
+ * WordPress dependencies
+ */
+
+const group = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, {
+ viewBox: "0 0 24 24",
+ xmlns: "http://www.w3.org/2000/svg"
+}, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, {
+ d: "M18 4h-7c-1.1 0-2 .9-2 2v3H6c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2h7c1.1 0 2-.9 2-2v-3h3c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-4.5 14c0 .3-.2.5-.5.5H6c-.3 0-.5-.2-.5-.5v-7c0-.3.2-.5.5-.5h3V13c0 1.1.9 2 2 2h2.5v3zm0-4.5H11c-.3 0-.5-.2-.5-.5v-2.5H13c.3 0 .5.2.5.5v2.5zm5-.5c0 .3-.2.5-.5.5h-3V11c0-1.1-.9-2-2-2h-2.5V6c0-.3.2-.5.5-.5h7c.3 0 .5.2.5.5v7z"
+}));
+/* harmony default export */ var library_group = (group);
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/edit.js
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+function edit_Edit(props) {
+ const {
+ clientId
+ } = props;
+ const {
+ innerBlocks
+ } = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).getBlock(clientId), [clientId]);
+ return (0,external_wp_element_namespaceObject.createElement)("div", {
+ ...(0,external_wp_blockEditor_namespaceObject.useBlockProps)({
+ className: 'widget'
+ })
+ }, innerBlocks.length === 0 ? (0,external_wp_element_namespaceObject.createElement)(PlaceholderContent, {
+ ...props
+ }) : (0,external_wp_element_namespaceObject.createElement)(PreviewContent, {
+ ...props
+ }));
+}
+function PlaceholderContent({
+ clientId
+}) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, {
+ className: "wp-block-widget-group__placeholder",
+ icon: (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockIcon, {
+ icon: library_group
+ }),
+ label: (0,external_wp_i18n_namespaceObject.__)('Widget Group')
+ }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.ButtonBlockAppender, {
+ rootClientId: clientId
+ })), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.InnerBlocks, {
+ renderAppender: false
+ }));
+}
+function PreviewContent({
+ attributes,
+ setAttributes
+}) {
+ var _attributes$title;
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichText, {
+ tagName: "h2",
+ className: "widget-title",
+ allowedFormats: [],
+ placeholder: (0,external_wp_i18n_namespaceObject.__)('Title'),
+ value: (_attributes$title = attributes.title) !== null && _attributes$title !== void 0 ? _attributes$title : '',
+ onChange: title => setAttributes({
+ title
+ })
+ }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.InnerBlocks, null));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/save.js
+
+/**
+ * WordPress dependencies
+ */
+
+function save({
+ attributes
+}) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichText.Content, {
+ tagName: "h2",
+ className: "widget-title",
+ value: attributes.title
+ }), (0,external_wp_element_namespaceObject.createElement)("div", {
+ className: "wp-widget-group__inner-blocks"
+ }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.InnerBlocks.Content, null)));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/deprecated.js
+
+/**
+ * WordPress dependencies
+ */
+
+const v1 = {
+ attributes: {
+ title: {
+ type: 'string'
+ }
+ },
+ supports: {
+ html: false,
+ inserter: true,
+ customClassName: true,
+ reusable: false
+ },
+ save({
+ attributes
+ }) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichText.Content, {
+ tagName: "h2",
+ className: "widget-title",
+ value: attributes.title
+ }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.InnerBlocks.Content, null));
+ }
+};
+/* harmony default export */ var deprecated = ([v1]);
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+const widget_group_metadata = {
+ apiVersion: 3,
+ name: "core/widget-group",
+ category: "widgets",
+ attributes: {
+ title: {
+ type: "string"
+ }
+ },
+ supports: {
+ html: false,
+ inserter: true,
+ customClassName: true,
+ reusable: false
+ },
+ editorStyle: "wp-block-widget-group-editor",
+ style: "wp-block-widget-group"
+};
+
+
+
+const {
+ name: widget_group_name
+} = widget_group_metadata;
+
+const widget_group_settings = {
+ title: (0,external_wp_i18n_namespaceObject.__)('Widget Group'),
+ description: (0,external_wp_i18n_namespaceObject.__)('Create a classic widget layout with a title that’s styled by your theme for your widget areas.'),
+ icon: library_group,
+ __experimentalLabel: ({
+ name: label
+ }) => label,
+ edit: edit_Edit,
+ save: save,
+ transforms: {
+ from: [{
+ type: 'block',
+ isMultiBlock: true,
+ blocks: ['*'],
+ isMatch(attributes, blocks) {
+ // Avoid transforming existing `widget-group` blocks.
+ return !blocks.some(block => block.name === 'core/widget-group');
+ },
+ __experimentalConvert(blocks) {
+ // Put the selected blocks inside the new Widget Group's innerBlocks.
+ let innerBlocks = [...blocks.map(block => {
+ return (0,external_wp_blocks_namespaceObject.createBlock)(block.name, block.attributes, block.innerBlocks);
+ })];
+
+ // If the first block is a heading then assume this is intended
+ // to be the Widget's "title".
+ const firstHeadingBlock = innerBlocks[0].name === 'core/heading' ? innerBlocks[0] : null;
+
+ // Remove the first heading block as we're copying
+ // it's content into the Widget Group's title attribute.
+ innerBlocks = innerBlocks.filter(block => block !== firstHeadingBlock);
+ return (0,external_wp_blocks_namespaceObject.createBlock)('core/widget-group', {
+ ...(firstHeadingBlock && {
+ title: firstHeadingBlock.attributes.content
+ })
+ }, innerBlocks);
+ }
+ }]
+ },
+ deprecated: deprecated
+};
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/move-to.js
+
+/**
+ * WordPress dependencies
+ */
+
+const moveTo = (0,external_wp_element_namespaceObject.createElement)(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: "M19.75 9c0-1.257-.565-2.197-1.39-2.858-.797-.64-1.827-1.017-2.815-1.247-1.802-.42-3.703-.403-4.383-.396L11 4.5V6l.177-.001c.696-.006 2.416-.02 4.028.356.887.207 1.67.518 2.216.957.52.416.829.945.829 1.688 0 .592-.167.966-.407 1.23-.255.281-.656.508-1.236.674-1.19.34-2.82.346-4.607.346h-.077c-1.692 0-3.527 0-4.942.404-.732.209-1.424.545-1.935 1.108-.526.579-.796 1.33-.796 2.238 0 1.257.565 2.197 1.39 2.858.797.64 1.827 1.017 2.815 1.247 1.802.42 3.703.403 4.383.396L13 19.5h.714V22L18 18.5 13.714 15v3H13l-.177.001c-.696.006-2.416.02-4.028-.356-.887-.207-1.67-.518-2.216-.957-.52-.416-.829-.945-.829-1.688 0-.592.167-.966.407-1.23.255-.281.656-.508 1.237-.674 1.189-.34 2.819-.346 4.606-.346h.077c1.692 0 3.527 0 4.941-.404.732-.209 1.425-.545 1.936-1.108.526-.579.796-1.33.796-2.238z"
+}));
+/* harmony default export */ var move_to = (moveTo);
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/components/move-to-widget-area/index.js
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+function MoveToWidgetArea({
+ currentWidgetAreaId,
+ widgetAreas,
+ onSelect
+}) {
+ return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ToolbarGroup, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ToolbarItem, null, toggleProps => (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DropdownMenu, {
+ icon: move_to,
+ label: (0,external_wp_i18n_namespaceObject.__)('Move to widget area'),
+ toggleProps: toggleProps
+ }, ({
+ onClose
+ }) => (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuGroup, {
+ label: (0,external_wp_i18n_namespaceObject.__)('Move to')
+ }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.MenuItemsChoice, {
+ choices: widgetAreas.map(widgetArea => ({
+ value: widgetArea.id,
+ label: widgetArea.name,
+ info: widgetArea.description
+ })),
+ value: currentWidgetAreaId,
+ onSelect: value => {
+ onSelect(value);
+ onClose();
+ }
+ })))));
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/components/index.js
+
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/utils.js
+// @ts-check
+
+/**
+ * Get the internal widget id from block.
+ *
+ * @typedef {Object} Attributes
+ * @property {string} __internalWidgetId The internal widget id.
+ * @typedef {Object} Block
+ * @property {Attributes} attributes The attributes of the block.
+ *
+ * @param {Block} block The block.
+ * @return {string} The internal widget id.
+ */
+function getWidgetIdFromBlock(block) {
+ return block.attributes.__internalWidgetId;
+}
+
+/**
+ * Add internal widget id to block's attributes.
+ *
+ * @param {Block} block The block.
+ * @param {string} widgetId The widget id.
+ * @return {Block} The updated block.
+ */
+function addWidgetIdToBlock(block, widgetId) {
+ return {
+ ...block,
+ attributes: {
+ ...(block.attributes || {}),
+ __internalWidgetId: widgetId
+ }
+ };
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/register-legacy-widget-variations.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+function registerLegacyWidgetVariations(settings) {
+ const unsubscribe = (0,external_wp_data_namespaceObject.subscribe)(() => {
+ var _settings$widgetTypes;
+ const hiddenIds = (_settings$widgetTypes = settings?.widgetTypesToHideFromLegacyWidgetBlock) !== null && _settings$widgetTypes !== void 0 ? _settings$widgetTypes : [];
+ const widgetTypes = (0,external_wp_data_namespaceObject.select)(external_wp_coreData_namespaceObject.store).getWidgetTypes({
+ per_page: -1
+ })?.filter(widgetType => !hiddenIds.includes(widgetType.id));
+ if (widgetTypes) {
+ unsubscribe();
+ (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).addBlockVariations('core/legacy-widget', widgetTypes.map(widgetType => ({
+ name: widgetType.id,
+ title: widgetType.name,
+ description: widgetType.description,
+ attributes: widgetType.is_multi ? {
+ idBase: widgetType.id,
+ instance: {}
+ } : {
+ id: widgetType.id
+ }
+ })));
+ }
+ });
+}
+
+;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+/**
+ * Registers the Legacy Widget block.
+ *
+ * Note that for the block to be useful, any scripts required by a widget must
+ * be loaded into the page.
+ *
+ * @param {Object} supports Block support settings.
+ * @see https://developer.wordpress.org/block-editor/how-to-guides/widgets/legacy-widget-block/
+ */
+function registerLegacyWidgetBlock(supports = {}) {
+ const {
+ metadata,
+ settings,
+ name
+ } = legacy_widget_namespaceObject;
+ (0,external_wp_blocks_namespaceObject.registerBlockType)({
+ name,
+ ...metadata
+ }, {
+ ...settings,
+ supports: {
+ ...settings.supports,
+ ...supports
+ }
+ });
+}
+
+/**
+ * Registers the Widget Group block.
+ *
+ * @param {Object} supports Block support settings.
+ */
+function registerWidgetGroupBlock(supports = {}) {
+ const {
+ metadata,
+ settings,
+ name
+ } = widget_group_namespaceObject;
+ (0,external_wp_blocks_namespaceObject.registerBlockType)({
+ name,
+ ...metadata
+ }, {
+ ...settings,
+ supports: {
+ ...settings.supports,
+ ...supports
+ }
+ });
+}
+
+
+}();
+(window.wp = window.wp || {}).widgets = __webpack_exports__;
+/******/ })()
+; \ No newline at end of file