| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
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 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Mon Aug 3 08:20:19 2026 | Cross-referenced by PHPXref |