PluginProbe
Gutenberg / 23.6.0
Gutenberg v23.6.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / scripts / widgets / index.js

index.js in Gutenberg 23.6.0, at build/scripts/widgets/index.js

1,463 lines 50.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 })();
1462 //# sourceMappingURL=index.js.map
1463