[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

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

   1  /******/ (() => { // webpackBootstrap
   2  /******/     "use strict";
   3  /******/     // The require scope
   4  /******/     var __webpack_require__ = {};
   5  /******/     
   6  /************************************************************************/
   7  /******/     /* webpack/runtime/compat get default export */
   8  /******/     (() => {
   9  /******/         // getDefaultExport function for compatibility with non-harmony modules
  10  /******/         __webpack_require__.n = (module) => {
  11  /******/             var getter = module && module.__esModule ?
  12  /******/                 () => (module['default']) :
  13  /******/                 () => (module);
  14  /******/             __webpack_require__.d(getter, { a: getter });
  15  /******/             return getter;
  16  /******/         };
  17  /******/     })();
  18  /******/     
  19  /******/     /* webpack/runtime/define property getters */
  20  /******/     (() => {
  21  /******/         // define getter functions for harmony exports
  22  /******/         __webpack_require__.d = (exports, definition) => {
  23  /******/             for(var key in definition) {
  24  /******/                 if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  25  /******/                     Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
  26  /******/                 }
  27  /******/             }
  28  /******/         };
  29  /******/     })();
  30  /******/     
  31  /******/     /* webpack/runtime/hasOwnProperty shorthand */
  32  /******/     (() => {
  33  /******/         __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  34  /******/     })();
  35  /******/     
  36  /******/     /* webpack/runtime/make namespace object */
  37  /******/     (() => {
  38  /******/         // define __esModule on exports
  39  /******/         __webpack_require__.r = (exports) => {
  40  /******/             if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  41  /******/                 Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  42  /******/             }
  43  /******/             Object.defineProperty(exports, '__esModule', { value: true });
  44  /******/         };
  45  /******/     })();
  46  /******/     
  47  /************************************************************************/
  48  var __webpack_exports__ = {};
  49  // ESM COMPAT FLAG
  50  __webpack_require__.r(__webpack_exports__);
  51  
  52  // EXPORTS
  53  __webpack_require__.d(__webpack_exports__, {
  54    MoveToWidgetArea: () => (/* reexport */ MoveToWidgetArea),
  55    addWidgetIdToBlock: () => (/* reexport */ addWidgetIdToBlock),
  56    getWidgetIdFromBlock: () => (/* reexport */ getWidgetIdFromBlock),
  57    registerLegacyWidgetBlock: () => (/* binding */ registerLegacyWidgetBlock),
  58    registerLegacyWidgetVariations: () => (/* reexport */ registerLegacyWidgetVariations),
  59    registerWidgetGroupBlock: () => (/* binding */ registerWidgetGroupBlock)
  60  });
  61  
  62  // NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js
  63  var legacy_widget_namespaceObject = {};
  64  __webpack_require__.r(legacy_widget_namespaceObject);
  65  __webpack_require__.d(legacy_widget_namespaceObject, {
  66    yu: () => (metadata),
  67    UU: () => (legacy_widget_name),
  68    W0: () => (settings)
  69  });
  70  
  71  // NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/index.js
  72  var widget_group_namespaceObject = {};
  73  __webpack_require__.r(widget_group_namespaceObject);
  74  __webpack_require__.d(widget_group_namespaceObject, {
  75    yu: () => (widget_group_metadata),
  76    UU: () => (widget_group_name),
  77    W0: () => (widget_group_settings)
  78  });
  79  
  80  ;// external ["wp","blocks"]
  81  const external_wp_blocks_namespaceObject = window["wp"]["blocks"];
  82  ;// external ["wp","primitives"]
  83  const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
  84  ;// external "ReactJSXRuntime"
  85  const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
  86  ;// ./node_modules/@wordpress/icons/build-module/library/widget.js
  87  /**
  88   * WordPress dependencies
  89   */
  90  
  91  
  92  const widget = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  93    xmlns: "http://www.w3.org/2000/svg",
  94    viewBox: "0 0 24 24",
  95    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
  96      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"
  97    })
  98  });
  99  /* harmony default export */ const library_widget = (widget);
 100  
 101  ;// ./node_modules/clsx/dist/clsx.mjs
 102  function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const dist_clsx = (clsx);
 103  ;// external ["wp","blockEditor"]
 104  const external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"];
 105  ;// external ["wp","components"]
 106  const external_wp_components_namespaceObject = window["wp"]["components"];
 107  ;// ./node_modules/@wordpress/icons/build-module/library/brush.js
 108  /**
 109   * WordPress dependencies
 110   */
 111  
 112  
 113  const brush = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
 114    xmlns: "http://www.w3.org/2000/svg",
 115    viewBox: "0 0 24 24",
 116    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
 117      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"
 118    })
 119  });
 120  /* harmony default export */ const library_brush = (brush);
 121  
 122  ;// external ["wp","i18n"]
 123  const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
 124  ;// external ["wp","element"]
 125  const external_wp_element_namespaceObject = window["wp"]["element"];
 126  ;// external ["wp","coreData"]
 127  const external_wp_coreData_namespaceObject = window["wp"]["coreData"];
 128  ;// external ["wp","data"]
 129  const external_wp_data_namespaceObject = window["wp"]["data"];
 130  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/widget-type-selector.js
 131  /* wp:polyfill */
 132  /**
 133   * WordPress dependencies
 134   */
 135  
 136  
 137  
 138  
 139  
 140  
 141  function WidgetTypeSelector({
 142    selectedId,
 143    onSelect
 144  }) {
 145    const widgetTypes = (0,external_wp_data_namespaceObject.useSelect)(select => {
 146      var _select$getSettings$w;
 147      const hiddenIds = (_select$getSettings$w = select(external_wp_blockEditor_namespaceObject.store).getSettings()?.widgetTypesToHideFromLegacyWidgetBlock) !== null && _select$getSettings$w !== void 0 ? _select$getSettings$w : [];
 148      return select(external_wp_coreData_namespaceObject.store).getWidgetTypes({
 149        per_page: -1
 150      })?.filter(widgetType => !hiddenIds.includes(widgetType.id));
 151    }, []);
 152    if (!widgetTypes) {
 153      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {});
 154    }
 155    if (widgetTypes.length === 0) {
 156      return (0,external_wp_i18n_namespaceObject.__)('There are no widgets available.');
 157    }
 158    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
 159      __next40pxDefaultSize: true,
 160      __nextHasNoMarginBottom: true,
 161      label: (0,external_wp_i18n_namespaceObject.__)('Legacy widget'),
 162      value: selectedId !== null && selectedId !== void 0 ? selectedId : '',
 163      options: [{
 164        value: '',
 165        label: (0,external_wp_i18n_namespaceObject.__)('Select widget')
 166      }, ...widgetTypes.map(widgetType => ({
 167        value: widgetType.id,
 168        label: widgetType.name
 169      }))],
 170      onChange: value => {
 171        if (value) {
 172          const selected = widgetTypes.find(widgetType => widgetType.id === value);
 173          onSelect({
 174            selectedId: selected.id,
 175            isMulti: selected.is_multi
 176          });
 177        } else {
 178          onSelect({
 179            selectedId: null
 180          });
 181        }
 182      }
 183    });
 184  }
 185  
 186  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/inspector-card.js
 187  
 188  function InspectorCard({
 189    name,
 190    description
 191  }) {
 192    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
 193      className: "wp-block-legacy-widget-inspector-card",
 194      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", {
 195        className: "wp-block-legacy-widget-inspector-card__name",
 196        children: name
 197      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
 198        children: description
 199      })]
 200    });
 201  }
 202  
 203  ;// external ["wp","notices"]
 204  const external_wp_notices_namespaceObject = window["wp"]["notices"];
 205  ;// external ["wp","compose"]
 206  const external_wp_compose_namespaceObject = window["wp"]["compose"];
 207  ;// external ["wp","apiFetch"]
 208  const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
 209  var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
 210  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/control.js
 211  /* wp:polyfill */
 212  /**
 213   * WordPress dependencies
 214   */
 215  
 216  
 217  
 218  
 219  /**
 220   * An API for creating and loading a widget control (a <div class="widget">
 221   * element) that is compatible with most third party widget scripts. By not
 222   * using React for this, we ensure that we have complete control over the DOM
 223   * and do not accidentally remove any elements that a third party widget script
 224   * has attached an event listener to.
 225   *
 226   * @property {Element} element The control's DOM element.
 227   */
 228  class Control {
 229    /**
 230     * Creates and loads a new control.
 231     *
 232     * @access public
 233     * @param {Object}   params
 234     * @param {string}   params.id
 235     * @param {string}   params.idBase
 236     * @param {Object}   params.instance
 237     * @param {Function} params.onChangeInstance
 238     * @param {Function} params.onChangeHasPreview
 239     * @param {Function} params.onError
 240     */
 241    constructor({
 242      id,
 243      idBase,
 244      instance,
 245      onChangeInstance,
 246      onChangeHasPreview,
 247      onError
 248    }) {
 249      this.id = id;
 250      this.idBase = idBase;
 251      this._instance = instance;
 252      this._hasPreview = null;
 253      this.onChangeInstance = onChangeInstance;
 254      this.onChangeHasPreview = onChangeHasPreview;
 255      this.onError = onError;
 256  
 257      // We can't use the real widget number as this is calculated by the
 258      // server and we may not ever *actually* save this widget. Instead, use
 259      // a fake but unique number.
 260      this.number = ++lastNumber;
 261      this.handleFormChange = (0,external_wp_compose_namespaceObject.debounce)(this.handleFormChange.bind(this), 200);
 262      this.handleFormSubmit = this.handleFormSubmit.bind(this);
 263      this.initDOM();
 264      this.bindEvents();
 265      this.loadContent();
 266    }
 267  
 268    /**
 269     * Clean up the control so that it can be garbage collected.
 270     *
 271     * @access public
 272     */
 273    destroy() {
 274      this.unbindEvents();
 275      this.element.remove();
 276      // TODO: How do we make third party widget scripts remove their event
 277      // listeners?
 278    }
 279  
 280    /**
 281     * Creates the control's DOM structure.
 282     *
 283     * @access private
 284     */
 285    initDOM() {
 286      var _this$id, _this$idBase;
 287      this.element = el('div', {
 288        class: 'widget open'
 289      }, [el('div', {
 290        class: 'widget-inside'
 291      }, [this.form = el('form', {
 292        class: 'form',
 293        method: 'post'
 294      }, [
 295      // These hidden form inputs are what most widgets' scripts
 296      // use to access data about the widget.
 297      el('input', {
 298        class: 'widget-id',
 299        type: 'hidden',
 300        name: 'widget-id',
 301        value: (_this$id = this.id) !== null && _this$id !== void 0 ? _this$id : `$this.idBase}-$this.number}`
 302      }), el('input', {
 303        class: 'id_base',
 304        type: 'hidden',
 305        name: 'id_base',
 306        value: (_this$idBase = this.idBase) !== null && _this$idBase !== void 0 ? _this$idBase : this.id
 307      }), el('input', {
 308        class: 'widget-width',
 309        type: 'hidden',
 310        name: 'widget-width',
 311        value: '250'
 312      }), el('input', {
 313        class: 'widget-height',
 314        type: 'hidden',
 315        name: 'widget-height',
 316        value: '200'
 317      }), el('input', {
 318        class: 'widget_number',
 319        type: 'hidden',
 320        name: 'widget_number',
 321        value: this.idBase ? this.number.toString() : ''
 322      }), this.content = el('div', {
 323        class: 'widget-content'
 324      }),
 325      // Non-multi widgets can be saved via a Save button.
 326      this.id && el('button', {
 327        class: 'button is-primary',
 328        type: 'submit'
 329      }, (0,external_wp_i18n_namespaceObject.__)('Save'))])])]);
 330    }
 331  
 332    /**
 333     * Adds the control's event listeners.
 334     *
 335     * @access private
 336     */
 337    bindEvents() {
 338      // Prefer jQuery 'change' event instead of the native 'change' event
 339      // because many widgets use jQuery's event bus to trigger an update.
 340      if (window.jQuery) {
 341        const {
 342          jQuery: $
 343        } = window;
 344        $(this.form).on('change', null, this.handleFormChange);
 345        $(this.form).on('input', null, this.handleFormChange);
 346        $(this.form).on('submit', this.handleFormSubmit);
 347      } else {
 348        this.form.addEventListener('change', this.handleFormChange);
 349        this.form.addEventListener('input', this.handleFormChange);
 350        this.form.addEventListener('submit', this.handleFormSubmit);
 351      }
 352    }
 353  
 354    /**
 355     * Removes the control's event listeners.
 356     *
 357     * @access private
 358     */
 359    unbindEvents() {
 360      if (window.jQuery) {
 361        const {
 362          jQuery: $
 363        } = window;
 364        $(this.form).off('change', null, this.handleFormChange);
 365        $(this.form).off('input', null, this.handleFormChange);
 366        $(this.form).off('submit', this.handleFormSubmit);
 367      } else {
 368        this.form.removeEventListener('change', this.handleFormChange);
 369        this.form.removeEventListener('input', this.handleFormChange);
 370        this.form.removeEventListener('submit', this.handleFormSubmit);
 371      }
 372    }
 373  
 374    /**
 375     * Fetches the widget's form HTML from the REST API and loads it into the
 376     * control's form.
 377     *
 378     * @access private
 379     */
 380    async loadContent() {
 381      try {
 382        if (this.id) {
 383          const {
 384            form
 385          } = await saveWidget(this.id);
 386          this.content.innerHTML = form;
 387        } else if (this.idBase) {
 388          const {
 389            form,
 390            preview
 391          } = await encodeWidget({
 392            idBase: this.idBase,
 393            instance: this.instance,
 394            number: this.number
 395          });
 396          this.content.innerHTML = form;
 397          this.hasPreview = !isEmptyHTML(preview);
 398  
 399          // If we don't have an instance, perform a save right away. This
 400          // happens when creating a new Legacy Widget block.
 401          if (!this.instance.hash) {
 402            const {
 403              instance
 404            } = await encodeWidget({
 405              idBase: this.idBase,
 406              instance: this.instance,
 407              number: this.number,
 408              formData: serializeForm(this.form)
 409            });
 410            this.instance = instance;
 411          }
 412        }
 413  
 414        // Trigger 'widget-added' when widget is ready. This event is what
 415        // widgets' scripts use to initialize, attach events, etc. The event
 416        // must be fired using jQuery's event bus as this is what widget
 417        // scripts expect. If jQuery is not loaded, do nothing - some
 418        // widgets will still work regardless.
 419        if (window.jQuery) {
 420          const {
 421            jQuery: $
 422          } = window;
 423          $(document).trigger('widget-added', [$(this.element)]);
 424        }
 425      } catch (error) {
 426        this.onError(error);
 427      }
 428    }
 429  
 430    /**
 431     * Perform a save when a multi widget's form is changed. Non-multi widgets
 432     * are saved manually.
 433     *
 434     * @access private
 435     */
 436    handleFormChange() {
 437      if (this.idBase) {
 438        this.saveForm();
 439      }
 440    }
 441  
 442    /**
 443     * Perform a save when the control's form is manually submitted.
 444     *
 445     * @access private
 446     * @param {Event} event
 447     */
 448    handleFormSubmit(event) {
 449      event.preventDefault();
 450      this.saveForm();
 451    }
 452  
 453    /**
 454     * Serialize the control's form, send it to the REST API, and update the
 455     * instance with the encoded instance that the REST API returns.
 456     *
 457     * @access private
 458     */
 459    async saveForm() {
 460      const formData = serializeForm(this.form);
 461      try {
 462        if (this.id) {
 463          const {
 464            form
 465          } = await saveWidget(this.id, formData);
 466          this.content.innerHTML = form;
 467          if (window.jQuery) {
 468            const {
 469              jQuery: $
 470            } = window;
 471            $(document).trigger('widget-updated', [$(this.element)]);
 472          }
 473        } else if (this.idBase) {
 474          const {
 475            instance,
 476            preview
 477          } = await encodeWidget({
 478            idBase: this.idBase,
 479            instance: this.instance,
 480            number: this.number,
 481            formData
 482          });
 483          this.instance = instance;
 484          this.hasPreview = !isEmptyHTML(preview);
 485        }
 486      } catch (error) {
 487        this.onError(error);
 488      }
 489    }
 490  
 491    /**
 492     * The widget's instance object.
 493     *
 494     * @access private
 495     */
 496    get instance() {
 497      return this._instance;
 498    }
 499  
 500    /**
 501     * The widget's instance object.
 502     *
 503     * @access private
 504     */
 505    set instance(instance) {
 506      if (this._instance !== instance) {
 507        this._instance = instance;
 508        this.onChangeInstance(instance);
 509      }
 510    }
 511  
 512    /**
 513     * Whether or not the widget can be previewed.
 514     *
 515     * @access public
 516     */
 517    get hasPreview() {
 518      return this._hasPreview;
 519    }
 520  
 521    /**
 522     * Whether or not the widget can be previewed.
 523     *
 524     * @access private
 525     */
 526    set hasPreview(hasPreview) {
 527      if (this._hasPreview !== hasPreview) {
 528        this._hasPreview = hasPreview;
 529        this.onChangeHasPreview(hasPreview);
 530      }
 531    }
 532  }
 533  let lastNumber = 0;
 534  function el(tagName, attributes = {}, content = null) {
 535    const element = document.createElement(tagName);
 536    for (const [attribute, value] of Object.entries(attributes)) {
 537      element.setAttribute(attribute, value);
 538    }
 539    if (Array.isArray(content)) {
 540      for (const child of content) {
 541        if (child) {
 542          element.appendChild(child);
 543        }
 544      }
 545    } else if (typeof content === 'string') {
 546      element.innerText = content;
 547    }
 548    return element;
 549  }
 550  async function saveWidget(id, formData = null) {
 551    let widget;
 552    if (formData) {
 553      widget = await external_wp_apiFetch_default()({
 554        path: `/wp/v2/widgets/$id}?context=edit`,
 555        method: 'PUT',
 556        data: {
 557          form_data: formData
 558        }
 559      });
 560    } else {
 561      widget = await external_wp_apiFetch_default()({
 562        path: `/wp/v2/widgets/$id}?context=edit`,
 563        method: 'GET'
 564      });
 565    }
 566    return {
 567      form: widget.rendered_form
 568    };
 569  }
 570  async function encodeWidget({
 571    idBase,
 572    instance,
 573    number,
 574    formData = null
 575  }) {
 576    const response = await external_wp_apiFetch_default()({
 577      path: `/wp/v2/widget-types/$idBase}/encode`,
 578      method: 'POST',
 579      data: {
 580        instance,
 581        number,
 582        form_data: formData
 583      }
 584    });
 585    return {
 586      instance: response.instance,
 587      form: response.form,
 588      preview: response.preview
 589    };
 590  }
 591  function isEmptyHTML(html) {
 592    const element = document.createElement('div');
 593    element.innerHTML = html;
 594    return isEmptyNode(element);
 595  }
 596  function isEmptyNode(node) {
 597    switch (node.nodeType) {
 598      case node.TEXT_NODE:
 599        // Text nodes are empty if it's entirely whitespace.
 600        return node.nodeValue.trim() === '';
 601      case node.ELEMENT_NODE:
 602        // Elements that are "embedded content" are not empty.
 603        // https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0
 604        if (['AUDIO', 'CANVAS', 'EMBED', 'IFRAME', 'IMG', 'MATH', 'OBJECT', 'SVG', 'VIDEO'].includes(node.tagName)) {
 605          return false;
 606        }
 607        // Elements with no children are empty.
 608        if (!node.hasChildNodes()) {
 609          return true;
 610        }
 611        // Elements with children are empty if all their children are empty.
 612        return Array.from(node.childNodes).every(isEmptyNode);
 613      default:
 614        return true;
 615    }
 616  }
 617  function serializeForm(form) {
 618    return new window.URLSearchParams(Array.from(new window.FormData(form))).toString();
 619  }
 620  
 621  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/form.js
 622  /**
 623   * External dependencies
 624   */
 625  
 626  /**
 627   * WordPress dependencies
 628   */
 629  
 630  
 631  
 632  
 633  
 634  
 635  /**
 636   * Internal dependencies
 637   */
 638  
 639  
 640  function Form({
 641    title,
 642    isVisible,
 643    id,
 644    idBase,
 645    instance,
 646    isWide,
 647    onChangeInstance,
 648    onChangeHasPreview
 649  }) {
 650    const ref = (0,external_wp_element_namespaceObject.useRef)();
 651    const isMediumLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small');
 652  
 653    // We only want to remount the control when the instance changes
 654    // *externally*. For example, if the user performs an undo. To do this, we
 655    // keep track of changes made to instance by the control itself and then
 656    // ignore those.
 657    const outgoingInstances = (0,external_wp_element_namespaceObject.useRef)(new Set());
 658    const incomingInstances = (0,external_wp_element_namespaceObject.useRef)(new Set());
 659    const {
 660      createNotice
 661    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
 662    (0,external_wp_element_namespaceObject.useEffect)(() => {
 663      if (incomingInstances.current.has(instance)) {
 664        incomingInstances.current.delete(instance);
 665        return;
 666      }
 667      const control = new Control({
 668        id,
 669        idBase,
 670        instance,
 671        onChangeInstance(nextInstance) {
 672          outgoingInstances.current.add(instance);
 673          incomingInstances.current.add(nextInstance);
 674          onChangeInstance(nextInstance);
 675        },
 676        onChangeHasPreview,
 677        onError(error) {
 678          window.console.error(error);
 679          createNotice('error', (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: the name of the affected block. */
 680          (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));
 681        }
 682      });
 683      ref.current.appendChild(control.element);
 684      return () => {
 685        if (outgoingInstances.current.has(instance)) {
 686          outgoingInstances.current.delete(instance);
 687          return;
 688        }
 689        control.destroy();
 690      };
 691    }, [id, idBase, instance, onChangeInstance, onChangeHasPreview, isMediumLargeViewport]);
 692    if (isWide && isMediumLargeViewport) {
 693      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
 694        className: dist_clsx({
 695          'wp-block-legacy-widget__container': isVisible
 696        }),
 697        children: [isVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", {
 698          className: "wp-block-legacy-widget__edit-form-title",
 699          children: title
 700        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
 701          focusOnMount: false,
 702          placement: "right",
 703          offset: 32,
 704          resize: false,
 705          flip: false,
 706          shift: true,
 707          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
 708            ref: ref,
 709            className: "wp-block-legacy-widget__edit-form",
 710            hidden: !isVisible
 711          })
 712        })]
 713      });
 714    }
 715    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
 716      ref: ref,
 717      className: "wp-block-legacy-widget__edit-form",
 718      hidden: !isVisible,
 719      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", {
 720        className: "wp-block-legacy-widget__edit-form-title",
 721        children: title
 722      })
 723    });
 724  }
 725  
 726  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/preview.js
 727  /**
 728   * External dependencies
 729   */
 730  
 731  
 732  /**
 733   * WordPress dependencies
 734   */
 735  
 736  
 737  
 738  
 739  
 740  
 741  function Preview({
 742    idBase,
 743    instance,
 744    isVisible
 745  }) {
 746    const [isLoaded, setIsLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
 747    const [srcDoc, setSrcDoc] = (0,external_wp_element_namespaceObject.useState)('');
 748    (0,external_wp_element_namespaceObject.useEffect)(() => {
 749      const abortController = typeof window.AbortController === 'undefined' ? undefined : new window.AbortController();
 750      async function fetchPreviewHTML() {
 751        const restRoute = `/wp/v2/widget-types/$idBase}/render`;
 752        return await external_wp_apiFetch_default()({
 753          path: restRoute,
 754          method: 'POST',
 755          signal: abortController?.signal,
 756          data: instance ? {
 757            instance
 758          } : {}
 759        });
 760      }
 761      fetchPreviewHTML().then(response => {
 762        setSrcDoc(response.preview);
 763      }).catch(error => {
 764        if ('AbortError' === error.name) {
 765          // We don't want to log aborted requests.
 766          return;
 767        }
 768        throw error;
 769      });
 770      return () => abortController?.abort();
 771    }, [idBase, instance]);
 772  
 773    // Resize the iframe on either the load event, or when the iframe becomes visible.
 774    const ref = (0,external_wp_compose_namespaceObject.useRefEffect)(iframe => {
 775      // Only set height if the iframe is loaded,
 776      // or it will grow to an unexpected large height in Safari if it's hidden initially.
 777      if (!isLoaded) {
 778        return;
 779      }
 780      // If the preview frame has another origin then this won't work.
 781      // One possible solution is to add custom script to call `postMessage` in the preview frame.
 782      // Or, better yet, we migrate away from iframe.
 783      function setHeight() {
 784        var _iframe$contentDocume, _iframe$contentDocume2;
 785        // Pick the maximum of these two values to account for margin collapsing.
 786        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);
 787  
 788        // Fallback to a height of 100px if the height cannot be determined.
 789        // This ensures the block is still selectable. 100px should hopefully
 790        // be not so big that it's annoying, and not so small that nothing
 791        // can be seen.
 792        iframe.style.height = `$height !== 0 ? height : 100}px`;
 793      }
 794      const {
 795        IntersectionObserver
 796      } = iframe.ownerDocument.defaultView;
 797  
 798      // Observe for intersections that might cause a change in the height of
 799      // the iframe, e.g. a Widget Area becoming expanded.
 800      const intersectionObserver = new IntersectionObserver(([entry]) => {
 801        if (entry.isIntersecting) {
 802          setHeight();
 803        }
 804      }, {
 805        threshold: 1
 806      });
 807      intersectionObserver.observe(iframe);
 808      iframe.addEventListener('load', setHeight);
 809      return () => {
 810        intersectionObserver.disconnect();
 811        iframe.removeEventListener('load', setHeight);
 812      };
 813    }, [isLoaded]);
 814    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
 815      children: [isVisible && !isLoaded && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
 816        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
 817      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
 818        className: dist_clsx('wp-block-legacy-widget__edit-preview', {
 819          'is-offscreen': !isVisible || !isLoaded
 820        }),
 821        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Disabled, {
 822          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("iframe", {
 823            ref: ref,
 824            className: "wp-block-legacy-widget__edit-preview-iframe",
 825            tabIndex: "-1",
 826            title: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget Preview'),
 827            srcDoc: srcDoc,
 828            onLoad: event => {
 829              // To hide the scrollbars of the preview frame for some edge cases,
 830              // such as negative margins in the Gallery Legacy Widget.
 831              // It can't be scrolled anyway.
 832              // TODO: Ideally, this should be fixed in core.
 833              event.target.contentDocument.body.style.overflow = 'hidden';
 834              setIsLoaded(true);
 835            },
 836            height: 100
 837          })
 838        })
 839      })]
 840    });
 841  }
 842  
 843  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/no-preview.js
 844  /**
 845   * WordPress dependencies
 846   */
 847  
 848  
 849  function NoPreview({
 850    name
 851  }) {
 852    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
 853      className: "wp-block-legacy-widget__edit-no-preview",
 854      children: [name && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", {
 855        children: name
 856      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
 857        children: (0,external_wp_i18n_namespaceObject.__)('No preview available.')
 858      })]
 859    });
 860  }
 861  
 862  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.js
 863  /**
 864   * WordPress dependencies
 865   */
 866  
 867  
 868  
 869  
 870  
 871  
 872  function ConvertToBlocksButton({
 873    clientId,
 874    rawInstance
 875  }) {
 876    const {
 877      replaceBlocks
 878    } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
 879    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
 880      onClick: () => {
 881        if (rawInstance.title) {
 882          replaceBlocks(clientId, [(0,external_wp_blocks_namespaceObject.createBlock)('core/heading', {
 883            content: rawInstance.title
 884          }), ...(0,external_wp_blocks_namespaceObject.rawHandler)({
 885            HTML: rawInstance.text
 886          })]);
 887        } else {
 888          replaceBlocks(clientId, (0,external_wp_blocks_namespaceObject.rawHandler)({
 889            HTML: rawInstance.text
 890          }));
 891        }
 892      },
 893      children: (0,external_wp_i18n_namespaceObject.__)('Convert to blocks')
 894    });
 895  }
 896  
 897  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/index.js
 898  /**
 899   * External dependencies
 900   */
 901  
 902  
 903  /**
 904   * WordPress dependencies
 905   */
 906  
 907  
 908  
 909  
 910  
 911  
 912  
 913  /**
 914   * Internal dependencies
 915   */
 916  
 917  
 918  
 919  
 920  
 921  
 922  
 923  function Edit(props) {
 924    const {
 925      id,
 926      idBase
 927    } = props.attributes;
 928    const {
 929      isWide = false
 930    } = props;
 931    const blockProps = (0,external_wp_blockEditor_namespaceObject.useBlockProps)({
 932      className: dist_clsx({
 933        'is-wide-widget': isWide
 934      })
 935    });
 936    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
 937      ...blockProps,
 938      children: !id && !idBase ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Empty, {
 939        ...props
 940      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NotEmpty, {
 941        ...props
 942      })
 943    });
 944  }
 945  function Empty({
 946    attributes: {
 947      id,
 948      idBase
 949    },
 950    setAttributes
 951  }) {
 952    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
 953      icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, {
 954        icon: library_brush
 955      }),
 956      label: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget'),
 957      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
 958        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexBlock, {
 959          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WidgetTypeSelector, {
 960            selectedId: id !== null && id !== void 0 ? id : idBase,
 961            onSelect: ({
 962              selectedId,
 963              isMulti
 964            }) => {
 965              if (!selectedId) {
 966                setAttributes({
 967                  id: null,
 968                  idBase: null,
 969                  instance: null
 970                });
 971              } else if (isMulti) {
 972                setAttributes({
 973                  id: null,
 974                  idBase: selectedId,
 975                  instance: {}
 976                });
 977              } else {
 978                setAttributes({
 979                  id: selectedId,
 980                  idBase: null,
 981                  instance: null
 982                });
 983              }
 984            }
 985          })
 986        })
 987      })
 988    });
 989  }
 990  function NotEmpty({
 991    attributes: {
 992      id,
 993      idBase,
 994      instance
 995    },
 996    setAttributes,
 997    clientId,
 998    isSelected,
 999    isWide = false
1000  }) {
1001    const [hasPreview, setHasPreview] = (0,external_wp_element_namespaceObject.useState)(null);
1002    const widgetTypeId = id !== null && id !== void 0 ? id : idBase;
1003    const {
1004      record: widgetType,
1005      hasResolved: hasResolvedWidgetType
1006    } = (0,external_wp_coreData_namespaceObject.useEntityRecord)('root', 'widgetType', widgetTypeId);
1007    const setInstance = (0,external_wp_element_namespaceObject.useCallback)(nextInstance => {
1008      setAttributes({
1009        instance: nextInstance
1010      });
1011    }, []);
1012    if (!widgetType && hasResolvedWidgetType) {
1013      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
1014        icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, {
1015          icon: library_brush
1016        }),
1017        label: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget'),
1018        children: (0,external_wp_i18n_namespaceObject.__)('Widget is missing.')
1019      });
1020    }
1021    if (!hasResolvedWidgetType) {
1022      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
1023        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
1024      });
1025    }
1026    const mode = idBase && !isSelected ? 'preview' : 'edit';
1027    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
1028      children: [idBase === 'text' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockControls, {
1029        group: "other",
1030        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ConvertToBlocksButton, {
1031          clientId: clientId,
1032          rawInstance: instance.raw
1033        })
1034      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InspectorControls, {
1035        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorCard, {
1036          name: widgetType.name,
1037          description: widgetType.description
1038        })
1039      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Form, {
1040        title: widgetType.name,
1041        isVisible: mode === 'edit',
1042        id: id,
1043        idBase: idBase,
1044        instance: instance,
1045        isWide: isWide,
1046        onChangeInstance: setInstance,
1047        onChangeHasPreview: setHasPreview
1048      }), idBase && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
1049        children: [hasPreview === null && mode === 'preview' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
1050          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
1051        }), hasPreview === true && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Preview, {
1052          idBase: idBase,
1053          instance: instance,
1054          isVisible: mode === 'preview'
1055        }), hasPreview === false && mode === 'preview' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NoPreview, {
1056          name: widgetType.name
1057        })]
1058      })]
1059    });
1060  }
1061  
1062  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/transforms.js
1063  /* wp:polyfill */
1064  /**
1065   * WordPress dependencies
1066   */
1067  
1068  const legacyWidgetTransforms = [{
1069    block: 'core/calendar',
1070    widget: 'calendar'
1071  }, {
1072    block: 'core/search',
1073    widget: 'search'
1074  }, {
1075    block: 'core/html',
1076    widget: 'custom_html',
1077    transform: ({
1078      content
1079    }) => ({
1080      content
1081    })
1082  }, {
1083    block: 'core/archives',
1084    widget: 'archives',
1085    transform: ({
1086      count,
1087      dropdown
1088    }) => {
1089      return {
1090        displayAsDropdown: !!dropdown,
1091        showPostCounts: !!count
1092      };
1093    }
1094  }, {
1095    block: 'core/latest-posts',
1096    widget: 'recent-posts',
1097    transform: ({
1098      show_date: displayPostDate,
1099      number
1100    }) => {
1101      return {
1102        displayPostDate: !!displayPostDate,
1103        postsToShow: number
1104      };
1105    }
1106  }, {
1107    block: 'core/latest-comments',
1108    widget: 'recent-comments',
1109    transform: ({
1110      number
1111    }) => {
1112      return {
1113        commentsToShow: number
1114      };
1115    }
1116  }, {
1117    block: 'core/tag-cloud',
1118    widget: 'tag_cloud',
1119    transform: ({
1120      taxonomy,
1121      count
1122    }) => {
1123      return {
1124        showTagCounts: !!count,
1125        taxonomy
1126      };
1127    }
1128  }, {
1129    block: 'core/categories',
1130    widget: 'categories',
1131    transform: ({
1132      count,
1133      dropdown,
1134      hierarchical
1135    }) => {
1136      return {
1137        displayAsDropdown: !!dropdown,
1138        showPostCounts: !!count,
1139        showHierarchy: !!hierarchical
1140      };
1141    }
1142  }, {
1143    block: 'core/audio',
1144    widget: 'media_audio',
1145    transform: ({
1146      url,
1147      preload,
1148      loop,
1149      attachment_id: id
1150    }) => {
1151      return {
1152        src: url,
1153        id,
1154        preload,
1155        loop
1156      };
1157    }
1158  }, {
1159    block: 'core/video',
1160    widget: 'media_video',
1161    transform: ({
1162      url,
1163      preload,
1164      loop,
1165      attachment_id: id
1166    }) => {
1167      return {
1168        src: url,
1169        id,
1170        preload,
1171        loop
1172      };
1173    }
1174  }, {
1175    block: 'core/image',
1176    widget: 'media_image',
1177    transform: ({
1178      alt,
1179      attachment_id: id,
1180      caption,
1181      height,
1182      link_classes: linkClass,
1183      link_rel: rel,
1184      link_target_blank: targetBlack,
1185      link_type: linkDestination,
1186      link_url: link,
1187      size: sizeSlug,
1188      url,
1189      width
1190    }) => {
1191      return {
1192        alt,
1193        caption,
1194        height,
1195        id,
1196        link,
1197        linkClass,
1198        linkDestination,
1199        linkTarget: targetBlack ? '_blank' : undefined,
1200        rel,
1201        sizeSlug,
1202        url,
1203        width
1204      };
1205    }
1206  }, {
1207    block: 'core/gallery',
1208    widget: 'media_gallery',
1209    transform: ({
1210      ids,
1211      link_type: linkTo,
1212      size,
1213      number
1214    }) => {
1215      return {
1216        ids,
1217        columns: number,
1218        linkTo,
1219        sizeSlug: size,
1220        images: ids.map(id => ({
1221          id
1222        }))
1223      };
1224    }
1225  }, {
1226    block: 'core/rss',
1227    widget: 'rss',
1228    transform: ({
1229      url,
1230      show_author: displayAuthor,
1231      show_date: displayDate,
1232      show_summary: displayExcerpt,
1233      items
1234    }) => {
1235      return {
1236        feedURL: url,
1237        displayAuthor: !!displayAuthor,
1238        displayDate: !!displayDate,
1239        displayExcerpt: !!displayExcerpt,
1240        itemsToShow: items
1241      };
1242    }
1243  }].map(({
1244    block,
1245    widget,
1246    transform
1247  }) => {
1248    return {
1249      type: 'block',
1250      blocks: [block],
1251      isMatch: ({
1252        idBase,
1253        instance
1254      }) => {
1255        return idBase === widget && !!instance?.raw;
1256      },
1257      transform: ({
1258        instance
1259      }) => {
1260        const transformedBlock = (0,external_wp_blocks_namespaceObject.createBlock)(block, transform ? transform(instance.raw) : undefined);
1261        if (!instance.raw?.title) {
1262          return transformedBlock;
1263        }
1264        return [(0,external_wp_blocks_namespaceObject.createBlock)('core/heading', {
1265          content: instance.raw.title
1266        }), transformedBlock];
1267      }
1268    };
1269  });
1270  const transforms = {
1271    to: legacyWidgetTransforms
1272  };
1273  /* harmony default export */ const legacy_widget_transforms = (transforms);
1274  
1275  ;// ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js
1276  /**
1277   * WordPress dependencies
1278   */
1279  
1280  
1281  /**
1282   * Internal dependencies
1283   */
1284  const metadata = {
1285    $schema: "https://schemas.wp.org/trunk/block.json",
1286    apiVersion: 3,
1287    name: "core/legacy-widget",
1288    title: "Legacy Widget",
1289    category: "widgets",
1290    description: "Display a legacy widget.",
1291    textdomain: "default",
1292    attributes: {
1293      id: {
1294        type: "string",
1295        "default": null
1296      },
1297      idBase: {
1298        type: "string",
1299        "default": null
1300      },
1301      instance: {
1302        type: "object",
1303        "default": null
1304      }
1305    },
1306    supports: {
1307      html: false,
1308      customClassName: false,
1309      reusable: false
1310    },
1311    editorStyle: "wp-block-legacy-widget-editor"
1312  };
1313  
1314  
1315  const {
1316    name: legacy_widget_name
1317  } = metadata;
1318  
1319  const settings = {
1320    icon: library_widget,
1321    edit: Edit,
1322    transforms: legacy_widget_transforms
1323  };
1324  
1325  ;// ./node_modules/@wordpress/icons/build-module/library/group.js
1326  /**
1327   * WordPress dependencies
1328   */
1329  
1330  
1331  const group = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
1332    viewBox: "0 0 24 24",
1333    xmlns: "http://www.w3.org/2000/svg",
1334    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
1335      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"
1336    })
1337  });
1338  /* harmony default export */ const library_group = (group);
1339  
1340  ;// ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/edit.js
1341  /**
1342   * WordPress dependencies
1343   */
1344  
1345  
1346  
1347  
1348  
1349  
1350  function edit_Edit(props) {
1351    const {
1352      clientId
1353    } = props;
1354    const {
1355      innerBlocks
1356    } = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).getBlock(clientId), [clientId]);
1357    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
1358      ...(0,external_wp_blockEditor_namespaceObject.useBlockProps)({
1359        className: 'widget'
1360      }),
1361      children: innerBlocks.length === 0 ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PlaceholderContent, {
1362        ...props
1363      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewContent, {
1364        ...props
1365      })
1366    });
1367  }
1368  function PlaceholderContent({
1369    clientId
1370  }) {
1371    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
1372      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
1373        className: "wp-block-widget-group__placeholder",
1374        icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, {
1375          icon: library_group
1376        }),
1377        label: (0,external_wp_i18n_namespaceObject.__)('Widget Group'),
1378        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.ButtonBlockAppender, {
1379          rootClientId: clientId
1380        })
1381      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks, {
1382        renderAppender: false
1383      })]
1384    });
1385  }
1386  function PreviewContent({
1387    attributes,
1388    setAttributes
1389  }) {
1390    var _attributes$title;
1391    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
1392      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.RichText, {
1393        tagName: "h2",
1394        identifier: "title",
1395        className: "widget-title",
1396        allowedFormats: [],
1397        placeholder: (0,external_wp_i18n_namespaceObject.__)('Title'),
1398        value: (_attributes$title = attributes.title) !== null && _attributes$title !== void 0 ? _attributes$title : '',
1399        onChange: title => setAttributes({
1400          title
1401        })
1402      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks, {})]
1403    });
1404  }
1405  
1406  ;// ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/save.js
1407  /**
1408   * WordPress dependencies
1409   */
1410  
1411  
1412  function save({
1413    attributes
1414  }) {
1415    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
1416      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.RichText.Content, {
1417        tagName: "h2",
1418        className: "widget-title",
1419        value: attributes.title
1420      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
1421        className: "wp-widget-group__inner-blocks",
1422        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks.Content, {})
1423      })]
1424    });
1425  }
1426  
1427  ;// ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/deprecated.js
1428  /**
1429   * WordPress dependencies
1430   */
1431  
1432  
1433  const v1 = {
1434    attributes: {
1435      title: {
1436        type: 'string'
1437      }
1438    },
1439    supports: {
1440      html: false,
1441      inserter: true,
1442      customClassName: true,
1443      reusable: false
1444    },
1445    save({
1446      attributes
1447    }) {
1448      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
1449        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.RichText.Content, {
1450          tagName: "h2",
1451          className: "widget-title",
1452          value: attributes.title
1453        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks.Content, {})]
1454      });
1455    }
1456  };
1457  /* harmony default export */ const deprecated = ([v1]);
1458  
1459  ;// ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/index.js
1460  /* wp:polyfill */
1461  /**
1462   * WordPress dependencies
1463   */
1464  
1465  
1466  
1467  
1468  /**
1469   * Internal dependencies
1470   */
1471  const widget_group_metadata = {
1472    $schema: "https://schemas.wp.org/trunk/block.json",
1473    apiVersion: 3,
1474    name: "core/widget-group",
1475    title: "Widget Group",
1476    category: "widgets",
1477    attributes: {
1478      title: {
1479        type: "string"
1480      }
1481    },
1482    supports: {
1483      html: false,
1484      inserter: true,
1485      customClassName: true,
1486      reusable: false
1487    },
1488    editorStyle: "wp-block-widget-group-editor",
1489    style: "wp-block-widget-group"
1490  };
1491  
1492  
1493  
1494  const {
1495    name: widget_group_name
1496  } = widget_group_metadata;
1497  
1498  const widget_group_settings = {
1499    title: (0,external_wp_i18n_namespaceObject.__)('Widget Group'),
1500    description: (0,external_wp_i18n_namespaceObject.__)('Create a classic widget layout with a title that’s styled by your theme for your widget areas.'),
1501    icon: library_group,
1502    __experimentalLabel: ({
1503      name: label
1504    }) => label,
1505    edit: edit_Edit,
1506    save: save,
1507    transforms: {
1508      from: [{
1509        type: 'block',
1510        isMultiBlock: true,
1511        blocks: ['*'],
1512        isMatch(attributes, blocks) {
1513          // Avoid transforming existing `widget-group` blocks.
1514          return !blocks.some(block => block.name === 'core/widget-group');
1515        },
1516        __experimentalConvert(blocks) {
1517          // Put the selected blocks inside the new Widget Group's innerBlocks.
1518          let innerBlocks = [...blocks.map(block => {
1519            return (0,external_wp_blocks_namespaceObject.createBlock)(block.name, block.attributes, block.innerBlocks);
1520          })];
1521  
1522          // If the first block is a heading then assume this is intended
1523          // to be the Widget's "title".
1524          const firstHeadingBlock = innerBlocks[0].name === 'core/heading' ? innerBlocks[0] : null;
1525  
1526          // Remove the first heading block as we're copying
1527          // it's content into the Widget Group's title attribute.
1528          innerBlocks = innerBlocks.filter(block => block !== firstHeadingBlock);
1529          return (0,external_wp_blocks_namespaceObject.createBlock)('core/widget-group', {
1530            ...(firstHeadingBlock && {
1531              title: firstHeadingBlock.attributes.content
1532            })
1533          }, innerBlocks);
1534        }
1535      }]
1536    },
1537    deprecated: deprecated
1538  };
1539  
1540  ;// ./node_modules/@wordpress/icons/build-module/library/move-to.js
1541  /**
1542   * WordPress dependencies
1543   */
1544  
1545  
1546  const moveTo = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
1547    xmlns: "http://www.w3.org/2000/svg",
1548    viewBox: "0 0 24 24",
1549    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
1550      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"
1551    })
1552  });
1553  /* harmony default export */ const move_to = (moveTo);
1554  
1555  ;// ./node_modules/@wordpress/widgets/build-module/components/move-to-widget-area/index.js
1556  /* wp:polyfill */
1557  /**
1558   * WordPress dependencies
1559   */
1560  
1561  
1562  
1563  
1564  function MoveToWidgetArea({
1565    currentWidgetAreaId,
1566    widgetAreas,
1567    onSelect
1568  }) {
1569    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
1570      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarItem, {
1571        children: toggleProps => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
1572          icon: move_to,
1573          label: (0,external_wp_i18n_namespaceObject.__)('Move to widget area'),
1574          toggleProps: toggleProps,
1575          children: ({
1576            onClose
1577          }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
1578            label: (0,external_wp_i18n_namespaceObject.__)('Move to'),
1579            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItemsChoice, {
1580              choices: widgetAreas.map(widgetArea => ({
1581                value: widgetArea.id,
1582                label: widgetArea.name,
1583                info: widgetArea.description
1584              })),
1585              value: currentWidgetAreaId,
1586              onSelect: value => {
1587                onSelect(value);
1588                onClose();
1589              }
1590            })
1591          })
1592        })
1593      })
1594    });
1595  }
1596  
1597  ;// ./node_modules/@wordpress/widgets/build-module/components/index.js
1598  
1599  
1600  ;// ./node_modules/@wordpress/widgets/build-module/utils.js
1601  // @ts-check
1602  
1603  /**
1604   * Get the internal widget id from block.
1605   *
1606   * @typedef  {Object} Attributes
1607   * @property {string}     __internalWidgetId The internal widget id.
1608   * @typedef  {Object} Block
1609   * @property {Attributes} attributes         The attributes of the block.
1610   *
1611   * @param    {Block}      block              The block.
1612   * @return {string} The internal widget id.
1613   */
1614  function getWidgetIdFromBlock(block) {
1615    return block.attributes.__internalWidgetId;
1616  }
1617  
1618  /**
1619   * Add internal widget id to block's attributes.
1620   *
1621   * @param {Block}  block    The block.
1622   * @param {string} widgetId The widget id.
1623   * @return {Block} The updated block.
1624   */
1625  function addWidgetIdToBlock(block, widgetId) {
1626    return {
1627      ...block,
1628      attributes: {
1629        ...(block.attributes || {}),
1630        __internalWidgetId: widgetId
1631      }
1632    };
1633  }
1634  
1635  ;// ./node_modules/@wordpress/widgets/build-module/register-legacy-widget-variations.js
1636  /* wp:polyfill */
1637  /**
1638   * WordPress dependencies
1639   */
1640  
1641  
1642  
1643  function registerLegacyWidgetVariations(settings) {
1644    const unsubscribe = (0,external_wp_data_namespaceObject.subscribe)(() => {
1645      var _settings$widgetTypes;
1646      const hiddenIds = (_settings$widgetTypes = settings?.widgetTypesToHideFromLegacyWidgetBlock) !== null && _settings$widgetTypes !== void 0 ? _settings$widgetTypes : [];
1647      const widgetTypes = (0,external_wp_data_namespaceObject.select)(external_wp_coreData_namespaceObject.store).getWidgetTypes({
1648        per_page: -1
1649      })?.filter(widgetType => !hiddenIds.includes(widgetType.id));
1650      if (widgetTypes) {
1651        unsubscribe();
1652        (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).addBlockVariations('core/legacy-widget', widgetTypes.map(widgetType => ({
1653          name: widgetType.id,
1654          title: widgetType.name,
1655          description: widgetType.description,
1656          attributes: widgetType.is_multi ? {
1657            idBase: widgetType.id,
1658            instance: {}
1659          } : {
1660            id: widgetType.id
1661          }
1662        })));
1663      }
1664    });
1665  }
1666  
1667  ;// ./node_modules/@wordpress/widgets/build-module/index.js
1668  /**
1669   * WordPress dependencies
1670   */
1671  
1672  
1673  /**
1674   * Internal dependencies
1675   */
1676  
1677  
1678  
1679  
1680  
1681  /**
1682   * Registers the Legacy Widget block.
1683   *
1684   * Note that for the block to be useful, any scripts required by a widget must
1685   * be loaded into the page.
1686   *
1687   * @param {Object} supports Block support settings.
1688   * @see https://developer.wordpress.org/block-editor/how-to-guides/widgets/legacy-widget-block/
1689   */
1690  function registerLegacyWidgetBlock(supports = {}) {
1691    const {
1692      /* metadata */ "yu": metadata,
1693      /* settings */ "W0": settings,
1694      /* name */ "UU": name
1695    } = legacy_widget_namespaceObject;
1696    (0,external_wp_blocks_namespaceObject.registerBlockType)({
1697      name,
1698      ...metadata
1699    }, {
1700      ...settings,
1701      supports: {
1702        ...settings.supports,
1703        ...supports
1704      }
1705    });
1706  }
1707  
1708  /**
1709   * Registers the Widget Group block.
1710   *
1711   * @param {Object} supports Block support settings.
1712   */
1713  function registerWidgetGroupBlock(supports = {}) {
1714    const {
1715      /* metadata */ "yu": metadata,
1716      /* settings */ "W0": settings,
1717      /* name */ "UU": name
1718    } = widget_group_namespaceObject;
1719    (0,external_wp_blocks_namespaceObject.registerBlockType)({
1720      name,
1721      ...metadata
1722    }, {
1723      ...settings,
1724      supports: {
1725        ...settings.supports,
1726        ...supports
1727      }
1728    });
1729  }
1730  
1731  
1732  (window.wp = window.wp || {}).widgets = __webpack_exports__;
1733  /******/ })()
1734  ;


Generated : Sat Feb 22 08:20:01 2025 Cross-referenced by PHPXref