[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

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

   1  var wp;
   2  (wp ||= {}).widgets = (() => {
   3    var __create = Object.create;
   4    var __defProp = Object.defineProperty;
   5    var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
   6    var __getOwnPropNames = Object.getOwnPropertyNames;
   7    var __getProtoOf = Object.getPrototypeOf;
   8    var __hasOwnProp = Object.prototype.hasOwnProperty;
   9    var __commonJS = (cb, mod) => function __require() {
  10      return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
  11    };
  12    var __export = (target, all) => {
  13      for (var name3 in all)
  14        __defProp(target, name3, { get: all[name3], enumerable: true });
  15    };
  16    var __copyProps = (to, from, except, desc) => {
  17      if (from && typeof from === "object" || typeof from === "function") {
  18        for (let key of __getOwnPropNames(from))
  19          if (!__hasOwnProp.call(to, key) && key !== except)
  20            __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  21      }
  22      return to;
  23    };
  24    var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  25      // If the importer is in node compatibility mode or this is not an ESM
  26      // file that has been converted to a CommonJS file using a Babel-
  27      // compatible transform (i.e. "__esModule" has not been set), then set
  28      // "default" to the CommonJS "module.exports" for node compatibility.
  29      isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  30      mod
  31    ));
  32    var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
  33  
  34    // package-external:@wordpress/blocks
  35    var require_blocks = __commonJS({
  36      "package-external:@wordpress/blocks"(exports, module) {
  37        module.exports = window.wp.blocks;
  38      }
  39    });
  40  
  41    // package-external:@wordpress/element
  42    var require_element = __commonJS({
  43      "package-external:@wordpress/element"(exports, module) {
  44        module.exports = window.wp.element;
  45      }
  46    });
  47  
  48    // package-external:@wordpress/primitives
  49    var require_primitives = __commonJS({
  50      "package-external:@wordpress/primitives"(exports, module) {
  51        module.exports = window.wp.primitives;
  52      }
  53    });
  54  
  55    // vendor-external:react/jsx-runtime
  56    var require_jsx_runtime = __commonJS({
  57      "vendor-external:react/jsx-runtime"(exports, module) {
  58        module.exports = window.ReactJSXRuntime;
  59      }
  60    });
  61  
  62    // package-external:@wordpress/block-editor
  63    var require_block_editor = __commonJS({
  64      "package-external:@wordpress/block-editor"(exports, module) {
  65        module.exports = window.wp.blockEditor;
  66      }
  67    });
  68  
  69    // package-external:@wordpress/components
  70    var require_components = __commonJS({
  71      "package-external:@wordpress/components"(exports, module) {
  72        module.exports = window.wp.components;
  73      }
  74    });
  75  
  76    // package-external:@wordpress/i18n
  77    var require_i18n = __commonJS({
  78      "package-external:@wordpress/i18n"(exports, module) {
  79        module.exports = window.wp.i18n;
  80      }
  81    });
  82  
  83    // package-external:@wordpress/core-data
  84    var require_core_data = __commonJS({
  85      "package-external:@wordpress/core-data"(exports, module) {
  86        module.exports = window.wp.coreData;
  87      }
  88    });
  89  
  90    // package-external:@wordpress/data
  91    var require_data = __commonJS({
  92      "package-external:@wordpress/data"(exports, module) {
  93        module.exports = window.wp.data;
  94      }
  95    });
  96  
  97    // package-external:@wordpress/notices
  98    var require_notices = __commonJS({
  99      "package-external:@wordpress/notices"(exports, module) {
 100        module.exports = window.wp.notices;
 101      }
 102    });
 103  
 104    // package-external:@wordpress/compose
 105    var require_compose = __commonJS({
 106      "package-external:@wordpress/compose"(exports, module) {
 107        module.exports = window.wp.compose;
 108      }
 109    });
 110  
 111    // package-external:@wordpress/api-fetch
 112    var require_api_fetch = __commonJS({
 113      "package-external:@wordpress/api-fetch"(exports, module) {
 114        module.exports = window.wp.apiFetch;
 115      }
 116    });
 117  
 118    // packages/widgets/build-module/index.mjs
 119    var index_exports = {};
 120    __export(index_exports, {
 121      MoveToWidgetArea: () => MoveToWidgetArea,
 122      addWidgetIdToBlock: () => addWidgetIdToBlock,
 123      getWidgetIdFromBlock: () => getWidgetIdFromBlock,
 124      registerLegacyWidgetBlock: () => registerLegacyWidgetBlock,
 125      registerLegacyWidgetVariations: () => registerLegacyWidgetVariations,
 126      registerWidgetGroupBlock: () => registerWidgetGroupBlock
 127    });
 128    var import_blocks5 = __toESM(require_blocks(), 1);
 129  
 130    // packages/widgets/build-module/blocks/legacy-widget/index.mjs
 131    var legacy_widget_exports = {};
 132    __export(legacy_widget_exports, {
 133      metadata: () => block_default,
 134      name: () => name,
 135      settings: () => settings
 136    });
 137  
 138    // packages/icons/build-module/library/brush.mjs
 139    var import_primitives = __toESM(require_primitives(), 1);
 140    var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
 141    var brush_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.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" }) });
 142  
 143    // packages/icons/build-module/library/group.mjs
 144    var import_primitives2 = __toESM(require_primitives(), 1);
 145    var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
 146    var group_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.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" }) });
 147  
 148    // packages/icons/build-module/library/move-to.mjs
 149    var import_primitives3 = __toESM(require_primitives(), 1);
 150    var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
 151    var move_to_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.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" }) });
 152  
 153    // packages/icons/build-module/library/widget.mjs
 154    var import_primitives4 = __toESM(require_primitives(), 1);
 155    var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
 156    var widget_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.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" }) });
 157  
 158    // packages/widgets/build-module/blocks/legacy-widget/block.json
 159    var block_default = {
 160      $schema: "https://schemas.wp.org/trunk/block.json",
 161      apiVersion: 3,
 162      name: "core/legacy-widget",
 163      title: "Legacy Widget",
 164      category: "widgets",
 165      description: "Display a legacy widget.",
 166      textdomain: "default",
 167      attributes: {
 168        id: {
 169          type: "string",
 170          default: null
 171        },
 172        idBase: {
 173          type: "string",
 174          default: null
 175        },
 176        instance: {
 177          type: "object",
 178          default: null
 179        }
 180      },
 181      supports: {
 182        html: false,
 183        customClassName: false,
 184        reusable: false
 185      },
 186      editorStyle: "wp-block-legacy-widget-editor"
 187    };
 188  
 189    // node_modules/clsx/dist/clsx.mjs
 190    function r(e) {
 191      var t, f, n = "";
 192      if ("string" == typeof e || "number" == typeof e) n += e;
 193      else if ("object" == typeof e) if (Array.isArray(e)) {
 194        var o = e.length;
 195        for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
 196      } else for (f in e) e[f] && (n && (n += " "), n += f);
 197      return n;
 198    }
 199    function clsx() {
 200      for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
 201      return n;
 202    }
 203    var clsx_default = clsx;
 204  
 205    // packages/widgets/build-module/blocks/legacy-widget/edit/index.mjs
 206    var import_block_editor3 = __toESM(require_block_editor(), 1);
 207    var import_components5 = __toESM(require_components(), 1);
 208    var import_i18n7 = __toESM(require_i18n(), 1);
 209    var import_element3 = __toESM(require_element(), 1);
 210    var import_core_data2 = __toESM(require_core_data(), 1);
 211  
 212    // packages/widgets/build-module/blocks/legacy-widget/edit/widget-type-selector.mjs
 213    var import_components = __toESM(require_components(), 1);
 214    var import_i18n = __toESM(require_i18n(), 1);
 215    var import_data = __toESM(require_data(), 1);
 216    var import_core_data = __toESM(require_core_data(), 1);
 217    var import_block_editor = __toESM(require_block_editor(), 1);
 218    var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
 219    function WidgetTypeSelector({ selectedId, onSelect }) {
 220      const widgetTypes = (0, import_data.useSelect)((select2) => {
 221        const hiddenIds = select2(import_block_editor.store).getSettings()?.widgetTypesToHideFromLegacyWidgetBlock ?? [];
 222        return select2(import_core_data.store).getWidgetTypes({ per_page: -1 })?.filter((widgetType) => !hiddenIds.includes(widgetType.id));
 223      }, []);
 224      if (!widgetTypes) {
 225        return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_components.Spinner, {});
 226      }
 227      if (widgetTypes.length === 0) {
 228        return (0, import_i18n.__)("There are no widgets available.");
 229      }
 230      return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
 231        import_components.SelectControl,
 232        {
 233          label: (0, import_i18n.__)("Legacy widget"),
 234          value: selectedId ?? "",
 235          options: [
 236            { value: "", label: (0, import_i18n.__)("Select widget") },
 237            ...widgetTypes.map((widgetType) => ({
 238              value: widgetType.id,
 239              label: widgetType.name
 240            }))
 241          ],
 242          onChange: (value) => {
 243            if (value) {
 244              const selected = widgetTypes.find(
 245                (widgetType) => widgetType.id === value
 246              );
 247              onSelect({
 248                selectedId: selected.id,
 249                isMulti: selected.is_multi
 250              });
 251            } else {
 252              onSelect({ selectedId: null });
 253            }
 254          }
 255        }
 256      );
 257    }
 258  
 259    // packages/widgets/build-module/blocks/legacy-widget/edit/inspector-card.mjs
 260    var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
 261    function InspectorCard({ name: name3, description }) {
 262      return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "wp-block-legacy-widget-inspector-card", children: [
 263        /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { className: "wp-block-legacy-widget-inspector-card__name", children: name3 }),
 264        /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: description })
 265      ] });
 266    }
 267  
 268    // packages/widgets/build-module/blocks/legacy-widget/edit/form.mjs
 269    var import_element = __toESM(require_element(), 1);
 270    var import_data2 = __toESM(require_data(), 1);
 271    var import_notices = __toESM(require_notices(), 1);
 272    var import_i18n3 = __toESM(require_i18n(), 1);
 273    var import_components2 = __toESM(require_components(), 1);
 274    var import_compose2 = __toESM(require_compose(), 1);
 275  
 276    // packages/widgets/build-module/blocks/legacy-widget/edit/control.mjs
 277    var import_api_fetch = __toESM(require_api_fetch(), 1);
 278    var import_compose = __toESM(require_compose(), 1);
 279    var import_i18n2 = __toESM(require_i18n(), 1);
 280    var Control = class {
 281      /**
 282       * Creates and loads a new control.
 283       *
 284       * @access public
 285       * @param {Object}   params
 286       * @param {string}   params.id
 287       * @param {string}   params.idBase
 288       * @param {Object}   params.instance
 289       * @param {Function} params.onChangeInstance
 290       * @param {Function} params.onChangeHasPreview
 291       * @param {Function} params.onError
 292       */
 293      constructor({
 294        id,
 295        idBase,
 296        instance,
 297        onChangeInstance,
 298        onChangeHasPreview,
 299        onError
 300      }) {
 301        this.id = id;
 302        this.idBase = idBase;
 303        this._instance = instance;
 304        this._hasPreview = null;
 305        this.onChangeInstance = onChangeInstance;
 306        this.onChangeHasPreview = onChangeHasPreview;
 307        this.onError = onError;
 308        this.number = ++lastNumber;
 309        this.handleFormChange = (0, import_compose.debounce)(
 310          this.handleFormChange.bind(this),
 311          200
 312        );
 313        this.handleFormSubmit = this.handleFormSubmit.bind(this);
 314        this.initDOM();
 315        this.bindEvents();
 316        this.loadContent();
 317      }
 318      /**
 319       * Clean up the control so that it can be garbage collected.
 320       *
 321       * @access public
 322       */
 323      destroy() {
 324        this.unbindEvents();
 325        this.element.remove();
 326      }
 327      /**
 328       * Creates the control's DOM structure.
 329       *
 330       * @access private
 331       */
 332      initDOM() {
 333        this.element = el("div", { class: "widget open" }, [
 334          el("div", { class: "widget-inside" }, [
 335            this.form = el("form", { class: "form", method: "post" }, [
 336              // These hidden form inputs are what most widgets' scripts
 337              // use to access data about the widget.
 338              el("input", {
 339                class: "widget-id",
 340                type: "hidden",
 341                name: "widget-id",
 342                value: this.id ?? `$this.idBase}-$this.number}`
 343              }),
 344              el("input", {
 345                class: "id_base",
 346                type: "hidden",
 347                name: "id_base",
 348                value: this.idBase ?? this.id
 349              }),
 350              el("input", {
 351                class: "widget-width",
 352                type: "hidden",
 353                name: "widget-width",
 354                value: "250"
 355              }),
 356              el("input", {
 357                class: "widget-height",
 358                type: "hidden",
 359                name: "widget-height",
 360                value: "200"
 361              }),
 362              el("input", {
 363                class: "widget_number",
 364                type: "hidden",
 365                name: "widget_number",
 366                value: this.idBase ? this.number.toString() : ""
 367              }),
 368              this.content = el("div", { class: "widget-content" }),
 369              // Non-multi widgets can be saved via a Save button.
 370              this.id && el(
 371                "button",
 372                {
 373                  class: "button is-primary",
 374                  type: "submit"
 375                },
 376                (0, import_i18n2.__)("Save")
 377              )
 378            ])
 379          ])
 380        ]);
 381      }
 382      /**
 383       * Adds the control's event listeners.
 384       *
 385       * @access private
 386       */
 387      bindEvents() {
 388        if (window.jQuery) {
 389          const { jQuery: $ } = window;
 390          $(this.form).on("change", null, this.handleFormChange);
 391          $(this.form).on("input", null, this.handleFormChange);
 392          $(this.form).on("submit", this.handleFormSubmit);
 393        } else {
 394          this.form.addEventListener("change", this.handleFormChange);
 395          this.form.addEventListener("input", this.handleFormChange);
 396          this.form.addEventListener("submit", this.handleFormSubmit);
 397        }
 398      }
 399      /**
 400       * Removes the control's event listeners.
 401       *
 402       * @access private
 403       */
 404      unbindEvents() {
 405        if (window.jQuery) {
 406          const { jQuery: $ } = window;
 407          $(this.form).off("change", null, this.handleFormChange);
 408          $(this.form).off("input", null, this.handleFormChange);
 409          $(this.form).off("submit", this.handleFormSubmit);
 410        } else {
 411          this.form.removeEventListener("change", this.handleFormChange);
 412          this.form.removeEventListener("input", this.handleFormChange);
 413          this.form.removeEventListener("submit", this.handleFormSubmit);
 414        }
 415      }
 416      /**
 417       * Fetches the widget's form HTML from the REST API and loads it into the
 418       * control's form.
 419       *
 420       * @access private
 421       */
 422      async loadContent() {
 423        try {
 424          if (this.id) {
 425            const { form } = await saveWidget(this.id);
 426            this.content.innerHTML = form;
 427          } else if (this.idBase) {
 428            const { form, preview } = await encodeWidget({
 429              idBase: this.idBase,
 430              instance: this.instance,
 431              number: this.number
 432            });
 433            this.content.innerHTML = form;
 434            this.hasPreview = !isEmptyHTML(preview);
 435            if (!this.instance.hash) {
 436              const { instance } = await encodeWidget({
 437                idBase: this.idBase,
 438                instance: this.instance,
 439                number: this.number,
 440                formData: serializeForm(this.form)
 441              });
 442              this.instance = instance;
 443            }
 444          }
 445          if (window.jQuery) {
 446            const { jQuery: $ } = window;
 447            $(document).trigger("widget-added", [$(this.element)]);
 448          }
 449        } catch (error) {
 450          this.onError(error);
 451        }
 452      }
 453      /**
 454       * Perform a save when a multi widget's form is changed. Non-multi widgets
 455       * are saved manually.
 456       *
 457       * @access private
 458       */
 459      handleFormChange() {
 460        if (this.idBase) {
 461          this.saveForm();
 462        }
 463      }
 464      /**
 465       * Perform a save when the control's form is manually submitted.
 466       *
 467       * @access private
 468       * @param {Event} event
 469       */
 470      handleFormSubmit(event) {
 471        event.preventDefault();
 472        this.saveForm();
 473      }
 474      /**
 475       * Serialize the control's form, send it to the REST API, and update the
 476       * instance with the encoded instance that the REST API returns.
 477       *
 478       * @access private
 479       */
 480      async saveForm() {
 481        const formData = serializeForm(this.form);
 482        try {
 483          if (this.id) {
 484            const { form } = await saveWidget(this.id, formData);
 485            this.content.innerHTML = form;
 486            if (window.jQuery) {
 487              const { jQuery: $ } = window;
 488              $(document).trigger("widget-updated", [
 489                $(this.element)
 490              ]);
 491            }
 492          } else if (this.idBase) {
 493            const { instance, preview } = await encodeWidget({
 494              idBase: this.idBase,
 495              instance: this.instance,
 496              number: this.number,
 497              formData
 498            });
 499            this.instance = instance;
 500            this.hasPreview = !isEmptyHTML(preview);
 501          }
 502        } catch (error) {
 503          this.onError(error);
 504        }
 505      }
 506      /**
 507       * The widget's instance object.
 508       *
 509       * @access private
 510       */
 511      get instance() {
 512        return this._instance;
 513      }
 514      /**
 515       * The widget's instance object.
 516       *
 517       * @access private
 518       */
 519      set instance(instance) {
 520        if (this._instance !== instance) {
 521          this._instance = instance;
 522          this.onChangeInstance(instance);
 523        }
 524      }
 525      /**
 526       * Whether or not the widget can be previewed.
 527       *
 528       * @access public
 529       */
 530      get hasPreview() {
 531        return this._hasPreview;
 532      }
 533      /**
 534       * Whether or not the widget can be previewed.
 535       *
 536       * @access private
 537       */
 538      set hasPreview(hasPreview) {
 539        if (this._hasPreview !== hasPreview) {
 540          this._hasPreview = hasPreview;
 541          this.onChangeHasPreview(hasPreview);
 542        }
 543      }
 544    };
 545    var lastNumber = 0;
 546    function el(tagName, attributes = {}, content = null) {
 547      const element = document.createElement(tagName);
 548      for (const [attribute, value] of Object.entries(attributes)) {
 549        element.setAttribute(attribute, value);
 550      }
 551      if (Array.isArray(content)) {
 552        for (const child of content) {
 553          if (child) {
 554            element.appendChild(child);
 555          }
 556        }
 557      } else if (typeof content === "string") {
 558        element.innerText = content;
 559      }
 560      return element;
 561    }
 562    async function saveWidget(id, formData = null) {
 563      let widget;
 564      if (formData) {
 565        widget = await (0, import_api_fetch.default)({
 566          path: `/wp/v2/widgets/$id}?context=edit`,
 567          method: "PUT",
 568          data: {
 569            form_data: formData
 570          }
 571        });
 572      } else {
 573        widget = await (0, import_api_fetch.default)({
 574          path: `/wp/v2/widgets/$id}?context=edit`,
 575          method: "GET"
 576        });
 577      }
 578      return { form: widget.rendered_form };
 579    }
 580    async function encodeWidget({ idBase, instance, number, formData = null }) {
 581      const response = await (0, import_api_fetch.default)({
 582        path: `/wp/v2/widget-types/$idBase}/encode`,
 583        method: "POST",
 584        data: {
 585          instance,
 586          number,
 587          form_data: formData
 588        }
 589      });
 590      return {
 591        instance: response.instance,
 592        form: response.form,
 593        preview: response.preview
 594      };
 595    }
 596    function isEmptyHTML(html) {
 597      const element = document.createElement("div");
 598      element.innerHTML = html;
 599      return isEmptyNode(element);
 600    }
 601    function isEmptyNode(node) {
 602      switch (node.nodeType) {
 603        case node.TEXT_NODE:
 604          return node.nodeValue.trim() === "";
 605        case node.ELEMENT_NODE:
 606          if ([
 607            "AUDIO",
 608            "CANVAS",
 609            "EMBED",
 610            "IFRAME",
 611            "IMG",
 612            "MATH",
 613            "OBJECT",
 614            "SVG",
 615            "VIDEO"
 616          ].includes(node.tagName)) {
 617            return false;
 618          }
 619          if (!node.hasChildNodes()) {
 620            return true;
 621          }
 622          return Array.from(node.childNodes).every(isEmptyNode);
 623        default:
 624          return true;
 625      }
 626    }
 627    function serializeForm(form) {
 628      return new window.URLSearchParams(
 629        Array.from(new window.FormData(form))
 630      ).toString();
 631    }
 632  
 633    // packages/widgets/build-module/blocks/legacy-widget/edit/form.mjs
 634    var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
 635    function Form({
 636      title,
 637      isVisible,
 638      id,
 639      idBase,
 640      instance,
 641      isWide,
 642      onChangeInstance,
 643      onChangeHasPreview
 644    }) {
 645      const ref = (0, import_element.useRef)();
 646      const isMediumLargeViewport = (0, import_compose2.useViewportMatch)("small");
 647      const outgoingInstances = (0, import_element.useRef)(/* @__PURE__ */ new Set());
 648      const incomingInstances = (0, import_element.useRef)(/* @__PURE__ */ new Set());
 649      const { createNotice } = (0, import_data2.useDispatch)(import_notices.store);
 650      (0, import_element.useEffect)(() => {
 651        if (incomingInstances.current.has(instance)) {
 652          incomingInstances.current.delete(instance);
 653          return;
 654        }
 655        const control = new Control({
 656          id,
 657          idBase,
 658          instance,
 659          onChangeInstance(nextInstance) {
 660            outgoingInstances.current.add(instance);
 661            incomingInstances.current.add(nextInstance);
 662            onChangeInstance(nextInstance);
 663          },
 664          onChangeHasPreview,
 665          onError(error) {
 666            window.console.error(error);
 667            createNotice(
 668              "error",
 669              (0, import_i18n3.sprintf)(
 670                /* translators: %s: the name of the affected block. */
 671                (0, import_i18n3.__)(
 672                  'The "%s" block was affected by errors and may not function properly. Check the developer tools for more details.'
 673                ),
 674                idBase || id
 675              )
 676            );
 677          }
 678        });
 679        ref.current.appendChild(control.element);
 680        return () => {
 681          if (outgoingInstances.current.has(instance)) {
 682            outgoingInstances.current.delete(instance);
 683            return;
 684          }
 685          control.destroy();
 686        };
 687      }, [
 688        id,
 689        idBase,
 690        instance,
 691        onChangeInstance,
 692        onChangeHasPreview,
 693        isMediumLargeViewport
 694      ]);
 695      if (isWide && isMediumLargeViewport) {
 696        return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
 697          "div",
 698          {
 699            className: clsx_default({
 700              "wp-block-legacy-widget__container": isVisible
 701            }),
 702            children: [
 703              isVisible && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "wp-block-legacy-widget__edit-form-title", children: title }),
 704              /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
 705                import_components2.Popover,
 706                {
 707                  focusOnMount: false,
 708                  placement: "right",
 709                  offset: 32,
 710                  resize: false,
 711                  flip: false,
 712                  shift: true,
 713                  children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
 714                    "div",
 715                    {
 716                      ref,
 717                      className: "wp-block-legacy-widget__edit-form",
 718                      hidden: !isVisible
 719                    }
 720                  )
 721                }
 722              )
 723            ]
 724          }
 725        );
 726      }
 727      return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
 728        "div",
 729        {
 730          ref,
 731          className: "wp-block-legacy-widget__edit-form",
 732          hidden: !isVisible,
 733          children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "wp-block-legacy-widget__edit-form-title", children: title })
 734        }
 735      );
 736    }
 737  
 738    // packages/widgets/build-module/blocks/legacy-widget/edit/preview.mjs
 739    var import_compose3 = __toESM(require_compose(), 1);
 740    var import_element2 = __toESM(require_element(), 1);
 741    var import_components3 = __toESM(require_components(), 1);
 742    var import_i18n4 = __toESM(require_i18n(), 1);
 743    var import_api_fetch2 = __toESM(require_api_fetch(), 1);
 744    var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
 745    function Preview({ idBase, instance, isVisible }) {
 746      const [isLoaded, setIsLoaded] = (0, import_element2.useState)(false);
 747      const [srcDoc, setSrcDoc] = (0, import_element2.useState)("");
 748      (0, import_element2.useEffect)(() => {
 749        const abortController = typeof window.AbortController === "undefined" ? void 0 : new window.AbortController();
 750        async function fetchPreviewHTML() {
 751          const restRoute = `/wp/v2/widget-types/$idBase}/render`;
 752          return await (0, import_api_fetch2.default)({
 753            path: restRoute,
 754            method: "POST",
 755            signal: abortController?.signal,
 756            data: instance ? { instance } : {}
 757          });
 758        }
 759        fetchPreviewHTML().then((response) => {
 760          setSrcDoc(response.preview);
 761        }).catch((error) => {
 762          if ("AbortError" === error.name) {
 763            return;
 764          }
 765          throw error;
 766        });
 767        return () => abortController?.abort();
 768      }, [idBase, instance]);
 769      const ref = (0, import_compose3.useRefEffect)(
 770        (iframe) => {
 771          if (!isLoaded) {
 772            return;
 773          }
 774          function setHeight() {
 775            const height = Math.max(
 776              iframe.contentDocument.documentElement?.offsetHeight ?? 0,
 777              iframe.contentDocument.body?.offsetHeight ?? 0
 778            );
 779            iframe.style.height = `$height !== 0 ? height : 100}px`;
 780          }
 781          const { IntersectionObserver } = iframe.ownerDocument.defaultView;
 782          const intersectionObserver = new IntersectionObserver(
 783            ([entry]) => {
 784              if (entry.isIntersecting) {
 785                setHeight();
 786              }
 787            },
 788            {
 789              threshold: 1
 790            }
 791          );
 792          intersectionObserver.observe(iframe);
 793          iframe.addEventListener("load", setHeight);
 794          return () => {
 795            intersectionObserver.disconnect();
 796            iframe.removeEventListener("load", setHeight);
 797          };
 798        },
 799        [isLoaded]
 800      );
 801      return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
 802        isVisible && !isLoaded && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_components3.Placeholder, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_components3.Spinner, {}) }),
 803        /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
 804          "div",
 805          {
 806            className: clsx_default("wp-block-legacy-widget__edit-preview", {
 807              "is-offscreen": !isVisible || !isLoaded
 808            }),
 809            children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_components3.Disabled, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
 810              "iframe",
 811              {
 812                ref,
 813                className: "wp-block-legacy-widget__edit-preview-iframe",
 814                tabIndex: "-1",
 815                title: (0, import_i18n4.__)("Legacy Widget Preview"),
 816                srcDoc,
 817                onLoad: (event) => {
 818                  event.target.contentDocument.body.style.overflow = "hidden";
 819                  setIsLoaded(true);
 820                },
 821                height: 100
 822              }
 823            ) })
 824          }
 825        )
 826      ] });
 827    }
 828  
 829    // packages/widgets/build-module/blocks/legacy-widget/edit/no-preview.mjs
 830    var import_i18n5 = __toESM(require_i18n(), 1);
 831    var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
 832    function NoPreview({ name: name3 }) {
 833      return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "wp-block-legacy-widget__edit-no-preview", children: [
 834        name3 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { children: name3 }),
 835        /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { children: (0, import_i18n5.__)("No preview available.") })
 836      ] });
 837    }
 838  
 839    // packages/widgets/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.mjs
 840    var import_data3 = __toESM(require_data(), 1);
 841    var import_block_editor2 = __toESM(require_block_editor(), 1);
 842    var import_components4 = __toESM(require_components(), 1);
 843    var import_blocks = __toESM(require_blocks(), 1);
 844    var import_i18n6 = __toESM(require_i18n(), 1);
 845    var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
 846    function ConvertToBlocksButton({ clientId, rawInstance }) {
 847      const { replaceBlocks } = (0, import_data3.useDispatch)(import_block_editor2.store);
 848      return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
 849        import_components4.ToolbarButton,
 850        {
 851          onClick: () => {
 852            if (rawInstance.title) {
 853              replaceBlocks(clientId, [
 854                (0, import_blocks.createBlock)("core/heading", {
 855                  content: rawInstance.title
 856                }),
 857                ...(0, import_blocks.rawHandler)({ HTML: rawInstance.text })
 858              ]);
 859            } else {
 860              replaceBlocks(
 861                clientId,
 862                (0, import_blocks.rawHandler)({ HTML: rawInstance.text })
 863              );
 864            }
 865          },
 866          children: (0, import_i18n6.__)("Convert to blocks")
 867        }
 868      );
 869    }
 870  
 871    // packages/widgets/build-module/blocks/legacy-widget/edit/index.mjs
 872    var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
 873    function Edit(props) {
 874      const { id, idBase } = props.attributes;
 875      const { isWide = false } = props;
 876      const blockProps = (0, import_block_editor3.useBlockProps)({
 877        className: clsx_default({
 878          "is-wide-widget": isWide
 879        })
 880      });
 881      return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { ...blockProps, children: !id && !idBase ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Empty, { ...props }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(NotEmpty, { ...props }) });
 882    }
 883    function Empty({ attributes: { id, idBase }, setAttributes }) {
 884      return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 885        import_components5.Placeholder,
 886        {
 887          icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_block_editor3.BlockIcon, { icon: brush_default }),
 888          label: (0, import_i18n7.__)("Legacy Widget"),
 889          children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components5.Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components5.FlexBlock, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 890            WidgetTypeSelector,
 891            {
 892              selectedId: id ?? idBase,
 893              onSelect: ({ selectedId, isMulti }) => {
 894                if (!selectedId) {
 895                  setAttributes({
 896                    id: null,
 897                    idBase: null,
 898                    instance: null
 899                  });
 900                } else if (isMulti) {
 901                  setAttributes({
 902                    id: null,
 903                    idBase: selectedId,
 904                    instance: {}
 905                  });
 906                } else {
 907                  setAttributes({
 908                    id: selectedId,
 909                    idBase: null,
 910                    instance: null
 911                  });
 912                }
 913              }
 914            }
 915          ) }) })
 916        }
 917      );
 918    }
 919    function NotEmpty({
 920      attributes: { id, idBase, instance },
 921      setAttributes,
 922      clientId,
 923      isSelected,
 924      isWide = false
 925    }) {
 926      const [hasPreview, setHasPreview] = (0, import_element3.useState)(null);
 927      const widgetTypeId = id ?? idBase;
 928      const { record: widgetType, hasResolved: hasResolvedWidgetType } = (0, import_core_data2.useEntityRecord)("root", "widgetType", widgetTypeId);
 929      const setInstance = (0, import_element3.useCallback)((nextInstance) => {
 930        setAttributes({ instance: nextInstance });
 931      }, []);
 932      if (!widgetType && hasResolvedWidgetType) {
 933        return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 934          import_components5.Placeholder,
 935          {
 936            icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_block_editor3.BlockIcon, { icon: brush_default }),
 937            label: (0, import_i18n7.__)("Legacy Widget"),
 938            children: (0, import_i18n7.__)("Widget is missing.")
 939          }
 940        );
 941      }
 942      if (!hasResolvedWidgetType) {
 943        return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components5.Placeholder, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components5.Spinner, {}) });
 944      }
 945      const mode = idBase && !isSelected ? "preview" : "edit";
 946      return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
 947        idBase === "text" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_block_editor3.BlockControls, { group: "other", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 948          ConvertToBlocksButton,
 949          {
 950            clientId,
 951            rawInstance: instance.raw
 952          }
 953        ) }),
 954        /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_block_editor3.InspectorControls, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 955          InspectorCard,
 956          {
 957            name: widgetType.name,
 958            description: widgetType.description
 959          }
 960        ) }),
 961        /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 962          Form,
 963          {
 964            title: widgetType.name,
 965            isVisible: mode === "edit",
 966            id,
 967            idBase,
 968            instance,
 969            isWide,
 970            onChangeInstance: setInstance,
 971            onChangeHasPreview: setHasPreview
 972          }
 973        ),
 974        idBase && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
 975          hasPreview === null && mode === "preview" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components5.Placeholder, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_components5.Spinner, {}) }),
 976          hasPreview === true && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
 977            Preview,
 978            {
 979              idBase,
 980              instance,
 981              isVisible: mode === "preview"
 982            }
 983          ),
 984          hasPreview === false && mode === "preview" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(NoPreview, { name: widgetType.name })
 985        ] })
 986      ] });
 987    }
 988  
 989    // packages/widgets/build-module/blocks/legacy-widget/transforms.mjs
 990    var import_blocks2 = __toESM(require_blocks(), 1);
 991    var legacyWidgetTransforms = [
 992      {
 993        block: "core/calendar",
 994        widget: "calendar"
 995      },
 996      {
 997        block: "core/search",
 998        widget: "search"
 999      },
1000      {
1001        block: "core/html",
1002        widget: "custom_html",
1003        transformBlock: ({ content }) => (0, import_blocks2.createBlock)("core/html", {}, [], [content])
1004      },
1005      {
1006        block: "core/archives",
1007        widget: "archives",
1008        transform: ({ count, dropdown }) => {
1009          return {
1010            displayAsDropdown: !!dropdown,
1011            showPostCounts: !!count
1012          };
1013        }
1014      },
1015      {
1016        block: "core/latest-posts",
1017        widget: "recent-posts",
1018        transform: ({ show_date: displayPostDate, number }) => {
1019          return {
1020            displayPostDate: !!displayPostDate,
1021            postsToShow: number
1022          };
1023        }
1024      },
1025      {
1026        block: "core/latest-comments",
1027        widget: "recent-comments",
1028        transform: ({ number }) => {
1029          return {
1030            commentsToShow: number
1031          };
1032        }
1033      },
1034      {
1035        block: "core/tag-cloud",
1036        widget: "tag_cloud",
1037        transform: ({ taxonomy, count }) => {
1038          return {
1039            showTagCounts: !!count,
1040            taxonomy
1041          };
1042        }
1043      },
1044      {
1045        block: "core/categories",
1046        widget: "categories",
1047        transform: ({ count, dropdown, hierarchical }) => {
1048          return {
1049            displayAsDropdown: !!dropdown,
1050            showPostCounts: !!count,
1051            showHierarchy: !!hierarchical
1052          };
1053        }
1054      },
1055      {
1056        block: "core/audio",
1057        widget: "media_audio",
1058        transform: ({ url, preload, loop, attachment_id: id }) => {
1059          return {
1060            src: url,
1061            id,
1062            preload,
1063            loop
1064          };
1065        }
1066      },
1067      {
1068        block: "core/video",
1069        widget: "media_video",
1070        transform: ({ url, preload, loop, attachment_id: id }) => {
1071          return {
1072            src: url,
1073            id,
1074            preload,
1075            loop
1076          };
1077        }
1078      },
1079      {
1080        block: "core/image",
1081        widget: "media_image",
1082        transform: ({
1083          alt,
1084          attachment_id: id,
1085          caption,
1086          height,
1087          link_classes: linkClass,
1088          link_rel: rel,
1089          link_target_blank: targetBlack,
1090          link_type: linkDestination,
1091          link_url: link,
1092          size: sizeSlug,
1093          url,
1094          width
1095        }) => {
1096          return {
1097            alt,
1098            caption,
1099            height,
1100            id,
1101            link,
1102            linkClass,
1103            linkDestination,
1104            linkTarget: targetBlack ? "_blank" : void 0,
1105            rel,
1106            sizeSlug,
1107            url,
1108            width
1109          };
1110        }
1111      },
1112      {
1113        block: "core/gallery",
1114        widget: "media_gallery",
1115        transform: ({ ids, link_type: linkTo, size, number }) => {
1116          return {
1117            ids,
1118            columns: number,
1119            linkTo,
1120            sizeSlug: size,
1121            images: ids.map((id) => ({
1122              id
1123            }))
1124          };
1125        }
1126      },
1127      {
1128        block: "core/rss",
1129        widget: "rss",
1130        transform: ({
1131          url,
1132          show_author: displayAuthor,
1133          show_date: displayDate,
1134          show_summary: displayExcerpt,
1135          items
1136        }) => {
1137          return {
1138            feedURL: url,
1139            displayAuthor: !!displayAuthor,
1140            displayDate: !!displayDate,
1141            displayExcerpt: !!displayExcerpt,
1142            itemsToShow: items
1143          };
1144        }
1145      }
1146    ].map(({ block, widget, transform, transformBlock }) => {
1147      return {
1148        type: "block",
1149        blocks: [block],
1150        isMatch: ({ idBase, instance }) => {
1151          return idBase === widget && !!instance?.raw;
1152        },
1153        transform: ({ instance }) => {
1154          const transformedBlock = transformBlock ? transformBlock(instance.raw) : (0, import_blocks2.createBlock)(
1155            block,
1156            transform ? transform(instance.raw) : void 0
1157          );
1158          if (!instance.raw?.title) {
1159            return transformedBlock;
1160          }
1161          return [
1162            (0, import_blocks2.createBlock)("core/heading", {
1163              content: instance.raw.title
1164            }),
1165            transformedBlock
1166          ];
1167        }
1168      };
1169    });
1170    var transforms = {
1171      to: legacyWidgetTransforms
1172    };
1173    var transforms_default = transforms;
1174  
1175    // packages/widgets/build-module/blocks/legacy-widget/index.mjs
1176    var { name } = block_default;
1177    var settings = {
1178      icon: widget_default,
1179      edit: Edit,
1180      transforms: transforms_default
1181    };
1182  
1183    // packages/widgets/build-module/blocks/widget-group/index.mjs
1184    var widget_group_exports = {};
1185    __export(widget_group_exports, {
1186      metadata: () => block_default2,
1187      name: () => name2,
1188      settings: () => settings2
1189    });
1190    var import_i18n9 = __toESM(require_i18n(), 1);
1191    var import_blocks3 = __toESM(require_blocks(), 1);
1192  
1193    // packages/widgets/build-module/blocks/widget-group/block.json
1194    var block_default2 = {
1195      $schema: "https://schemas.wp.org/trunk/block.json",
1196      apiVersion: 3,
1197      name: "core/widget-group",
1198      title: "Widget Group",
1199      category: "widgets",
1200      attributes: {
1201        title: {
1202          type: "string"
1203        }
1204      },
1205      supports: {
1206        html: false,
1207        inserter: true,
1208        customClassName: true,
1209        reusable: false
1210      },
1211      editorStyle: "wp-block-widget-group-editor",
1212      style: "wp-block-widget-group"
1213    };
1214  
1215    // packages/widgets/build-module/blocks/widget-group/edit.mjs
1216    var import_block_editor4 = __toESM(require_block_editor(), 1);
1217    var import_components6 = __toESM(require_components(), 1);
1218    var import_i18n8 = __toESM(require_i18n(), 1);
1219    var import_data4 = __toESM(require_data(), 1);
1220    var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
1221    function Edit2(props) {
1222      const { clientId } = props;
1223      const hasInnerBlocks = (0, import_data4.useSelect)(
1224        (select2) => select2(import_block_editor4.store).getBlockCount(clientId) > 0,
1225        [clientId]
1226      );
1227      return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { ...(0, import_block_editor4.useBlockProps)({ className: "widget" }), children: !hasInnerBlocks ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(PlaceholderContent, { ...props }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(PreviewContent, { ...props }) });
1228    }
1229    function PlaceholderContent({ clientId }) {
1230      return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1231        /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1232          import_components6.Placeholder,
1233          {
1234            className: "wp-block-widget-group__placeholder",
1235            icon: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_block_editor4.BlockIcon, { icon: group_default }),
1236            label: (0, import_i18n8.__)("Widget Group"),
1237            children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_block_editor4.ButtonBlockAppender, { rootClientId: clientId })
1238          }
1239        ),
1240        /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_block_editor4.InnerBlocks, { renderAppender: false })
1241      ] });
1242    }
1243    function PreviewContent({ attributes, setAttributes }) {
1244      return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1245        /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1246          import_block_editor4.RichText,
1247          {
1248            tagName: "h2",
1249            identifier: "title",
1250            className: "widget-title",
1251            allowedFormats: [],
1252            placeholder: (0, import_i18n8.__)("Title"),
1253            value: attributes.title ?? "",
1254            onChange: (title) => setAttributes({ title })
1255          }
1256        ),
1257        /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_block_editor4.InnerBlocks, {})
1258      ] });
1259    }
1260  
1261    // packages/widgets/build-module/blocks/widget-group/save.mjs
1262    var import_block_editor5 = __toESM(require_block_editor(), 1);
1263    var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
1264    function save({ attributes }) {
1265      return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1266        /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1267          import_block_editor5.RichText.Content,
1268          {
1269            tagName: "h2",
1270            className: "widget-title",
1271            value: attributes.title
1272          }
1273        ),
1274        /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "wp-widget-group__inner-blocks", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_block_editor5.InnerBlocks.Content, {}) })
1275      ] });
1276    }
1277  
1278    // packages/widgets/build-module/blocks/widget-group/deprecated.mjs
1279    var import_block_editor6 = __toESM(require_block_editor(), 1);
1280    var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
1281    var v1 = {
1282      attributes: {
1283        title: {
1284          type: "string"
1285        }
1286      },
1287      supports: {
1288        html: false,
1289        inserter: true,
1290        customClassName: true,
1291        reusable: false
1292      },
1293      save({ attributes }) {
1294        return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1295          /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1296            import_block_editor6.RichText.Content,
1297            {
1298              tagName: "h2",
1299              className: "widget-title",
1300              value: attributes.title
1301            }
1302          ),
1303          /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_block_editor6.InnerBlocks.Content, {})
1304        ] });
1305      }
1306    };
1307    var deprecated_default = [v1];
1308  
1309    // packages/widgets/build-module/blocks/widget-group/index.mjs
1310    var { name: name2 } = block_default2;
1311    var settings2 = {
1312      title: (0, import_i18n9.__)("Widget Group"),
1313      description: (0, import_i18n9.__)(
1314        "Create a classic widget layout with a title that\u2019s styled by your theme for your widget areas."
1315      ),
1316      icon: group_default,
1317      __experimentalLabel: ({ name: label }) => label,
1318      edit: Edit2,
1319      save,
1320      transforms: {
1321        from: [
1322          {
1323            type: "block",
1324            isMultiBlock: true,
1325            blocks: ["*"],
1326            isMatch(attributes, blocks) {
1327              return !blocks.some(
1328                (block) => block.name === "core/widget-group"
1329              );
1330            },
1331            __experimentalConvert(blocks) {
1332              let innerBlocks = blocks.map(
1333                (block) => (0, import_blocks3.cloneSanitizedBlock)(block)
1334              );
1335              const firstHeadingBlock = innerBlocks[0].name === "core/heading" ? innerBlocks[0] : null;
1336              innerBlocks = innerBlocks.filter(
1337                (block) => block !== firstHeadingBlock
1338              );
1339              return (0, import_blocks3.createBlock)(
1340                "core/widget-group",
1341                {
1342                  ...firstHeadingBlock && {
1343                    title: firstHeadingBlock.attributes.content
1344                  }
1345                },
1346                innerBlocks
1347              );
1348            }
1349          }
1350        ]
1351      },
1352      deprecated: deprecated_default
1353    };
1354  
1355    // packages/widgets/build-module/components/move-to-widget-area/index.mjs
1356    var import_components7 = __toESM(require_components(), 1);
1357    var import_i18n10 = __toESM(require_i18n(), 1);
1358    var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
1359    function MoveToWidgetArea({
1360      currentWidgetAreaId,
1361      widgetAreas,
1362      onSelect
1363    }) {
1364      return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_components7.ToolbarGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_components7.ToolbarItem, { children: (toggleProps) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1365        import_components7.DropdownMenu,
1366        {
1367          icon: move_to_default,
1368          label: (0, import_i18n10.__)("Move to widget area"),
1369          toggleProps,
1370          children: ({ onClose }) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_components7.MenuGroup, { label: (0, import_i18n10.__)("Move to"), children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1371            import_components7.MenuItemsChoice,
1372            {
1373              choices: widgetAreas.map(
1374                (widgetArea) => ({
1375                  value: widgetArea.id,
1376                  label: widgetArea.name,
1377                  info: widgetArea.description
1378                })
1379              ),
1380              value: currentWidgetAreaId,
1381              onSelect: (value) => {
1382                onSelect(value);
1383                onClose();
1384              }
1385            }
1386          ) })
1387        }
1388      ) }) });
1389    }
1390  
1391    // packages/widgets/build-module/utils.mjs
1392    function getWidgetIdFromBlock(block) {
1393      return block.attributes.__internalWidgetId;
1394    }
1395    function addWidgetIdToBlock(block, widgetId) {
1396      return {
1397        ...block,
1398        attributes: {
1399          ...block.attributes || {},
1400          __internalWidgetId: widgetId
1401        }
1402      };
1403    }
1404  
1405    // packages/widgets/build-module/register-legacy-widget-variations.mjs
1406    var import_data5 = __toESM(require_data(), 1);
1407    var import_core_data3 = __toESM(require_core_data(), 1);
1408    var import_blocks4 = __toESM(require_blocks(), 1);
1409    function registerLegacyWidgetVariations(settings3) {
1410      const unsubscribe = (0, import_data5.subscribe)(() => {
1411        const hiddenIds = settings3?.widgetTypesToHideFromLegacyWidgetBlock ?? [];
1412        const widgetTypes = (0, import_data5.select)(import_core_data3.store).getWidgetTypes({ per_page: -1 })?.filter((widgetType) => !hiddenIds.includes(widgetType.id));
1413        if (widgetTypes) {
1414          unsubscribe();
1415          (0, import_data5.dispatch)(import_blocks4.store).addBlockVariations(
1416            "core/legacy-widget",
1417            widgetTypes.map((widgetType) => ({
1418              name: widgetType.id,
1419              title: widgetType.name,
1420              description: widgetType.description,
1421              attributes: widgetType.is_multi ? {
1422                idBase: widgetType.id,
1423                instance: {}
1424              } : {
1425                id: widgetType.id
1426              }
1427            }))
1428          );
1429        }
1430      });
1431    }
1432  
1433    // packages/widgets/build-module/index.mjs
1434    function registerLegacyWidgetBlock(supports = {}) {
1435      const { metadata, settings: settings3, name: name3 } = legacy_widget_exports;
1436      (0, import_blocks5.registerBlockType)(
1437        { name: name3, ...metadata },
1438        {
1439          ...settings3,
1440          supports: {
1441            ...settings3.supports,
1442            ...supports
1443          }
1444        }
1445      );
1446    }
1447    function registerWidgetGroupBlock(supports = {}) {
1448      const { metadata, settings: settings3, name: name3 } = widget_group_exports;
1449      (0, import_blocks5.registerBlockType)(
1450        { name: name3, ...metadata },
1451        {
1452          ...settings3,
1453          supports: {
1454            ...settings3.supports,
1455            ...supports
1456          }
1457        }
1458      );
1459    }
1460    return __toCommonJS(index_exports);
1461  })();


Generated : Mon Aug 3 08:20:19 2026 Cross-referenced by PHPXref