PluginProbe
Gutenberg / 23.1.0
Gutenberg v23.1.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 / customize-widgets / index.js

index.js in Gutenberg 23.1.0, at build/scripts/customize-widgets/index.js

2,959 lines 107.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var wp;
2 (wp ||= {}).customizeWidgets = (() => {
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 name in all)
14 __defProp(target, name, { get: all[name], 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/element
35 var require_element = __commonJS({
36 "package-external:@wordpress/element"(exports, module) {
37 module.exports = window.wp.element;
38 }
39 });
40
41 // package-external:@wordpress/block-library
42 var require_block_library = __commonJS({
43 "package-external:@wordpress/block-library"(exports, module) {
44 module.exports = window.wp.blockLibrary;
45 }
46 });
47
48 // package-external:@wordpress/widgets
49 var require_widgets = __commonJS({
50 "package-external:@wordpress/widgets"(exports, module) {
51 module.exports = window.wp.widgets;
52 }
53 });
54
55 // package-external:@wordpress/blocks
56 var require_blocks = __commonJS({
57 "package-external:@wordpress/blocks"(exports, module) {
58 module.exports = window.wp.blocks;
59 }
60 });
61
62 // package-external:@wordpress/data
63 var require_data = __commonJS({
64 "package-external:@wordpress/data"(exports, module) {
65 module.exports = window.wp.data;
66 }
67 });
68
69 // package-external:@wordpress/preferences
70 var require_preferences = __commonJS({
71 "package-external:@wordpress/preferences"(exports, module) {
72 module.exports = window.wp.preferences;
73 }
74 });
75
76 // package-external:@wordpress/components
77 var require_components = __commonJS({
78 "package-external:@wordpress/components"(exports, module) {
79 module.exports = window.wp.components;
80 }
81 });
82
83 // package-external:@wordpress/i18n
84 var require_i18n = __commonJS({
85 "package-external:@wordpress/i18n"(exports, module) {
86 module.exports = window.wp.i18n;
87 }
88 });
89
90 // package-external:@wordpress/block-editor
91 var require_block_editor = __commonJS({
92 "package-external:@wordpress/block-editor"(exports, module) {
93 module.exports = window.wp.blockEditor;
94 }
95 });
96
97 // package-external:@wordpress/compose
98 var require_compose = __commonJS({
99 "package-external:@wordpress/compose"(exports, module) {
100 module.exports = window.wp.compose;
101 }
102 });
103
104 // package-external:@wordpress/hooks
105 var require_hooks = __commonJS({
106 "package-external:@wordpress/hooks"(exports, module) {
107 module.exports = window.wp.hooks;
108 }
109 });
110
111 // vendor-external:react/jsx-runtime
112 var require_jsx_runtime = __commonJS({
113 "vendor-external:react/jsx-runtime"(exports, module) {
114 module.exports = window.ReactJSXRuntime;
115 }
116 });
117
118 // package-external:@wordpress/core-data
119 var require_core_data = __commonJS({
120 "package-external:@wordpress/core-data"(exports, module) {
121 module.exports = window.wp.coreData;
122 }
123 });
124
125 // package-external:@wordpress/media-utils
126 var require_media_utils = __commonJS({
127 "package-external:@wordpress/media-utils"(exports, module) {
128 module.exports = window.wp.mediaUtils;
129 }
130 });
131
132 // package-external:@wordpress/keycodes
133 var require_keycodes = __commonJS({
134 "package-external:@wordpress/keycodes"(exports, module) {
135 module.exports = window.wp.keycodes;
136 }
137 });
138
139 // package-external:@wordpress/primitives
140 var require_primitives = __commonJS({
141 "package-external:@wordpress/primitives"(exports, module) {
142 module.exports = window.wp.primitives;
143 }
144 });
145
146 // package-external:@wordpress/keyboard-shortcuts
147 var require_keyboard_shortcuts = __commonJS({
148 "package-external:@wordpress/keyboard-shortcuts"(exports, module) {
149 module.exports = window.wp.keyboardShortcuts;
150 }
151 });
152
153 // vendor-external:react
154 var require_react = __commonJS({
155 "vendor-external:react"(exports, module) {
156 module.exports = window.React;
157 }
158 });
159
160 // package-external:@wordpress/private-apis
161 var require_private_apis = __commonJS({
162 "package-external:@wordpress/private-apis"(exports, module) {
163 module.exports = window.wp.privateApis;
164 }
165 });
166
167 // node_modules/fast-deep-equal/es6/index.js
168 var require_es6 = __commonJS({
169 "node_modules/fast-deep-equal/es6/index.js"(exports, module) {
170 "use strict";
171 module.exports = function equal(a, b) {
172 if (a === b) return true;
173 if (a && b && typeof a == "object" && typeof b == "object") {
174 if (a.constructor !== b.constructor) return false;
175 var length, i, keys;
176 if (Array.isArray(a)) {
177 length = a.length;
178 if (length != b.length) return false;
179 for (i = length; i-- !== 0; )
180 if (!equal(a[i], b[i])) return false;
181 return true;
182 }
183 if (a instanceof Map && b instanceof Map) {
184 if (a.size !== b.size) return false;
185 for (i of a.entries())
186 if (!b.has(i[0])) return false;
187 for (i of a.entries())
188 if (!equal(i[1], b.get(i[0]))) return false;
189 return true;
190 }
191 if (a instanceof Set && b instanceof Set) {
192 if (a.size !== b.size) return false;
193 for (i of a.entries())
194 if (!b.has(i[0])) return false;
195 return true;
196 }
197 if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
198 length = a.length;
199 if (length != b.length) return false;
200 for (i = length; i-- !== 0; )
201 if (a[i] !== b[i]) return false;
202 return true;
203 }
204 if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
205 if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
206 if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
207 keys = Object.keys(a);
208 length = keys.length;
209 if (length !== Object.keys(b).length) return false;
210 for (i = length; i-- !== 0; )
211 if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
212 for (i = length; i-- !== 0; ) {
213 var key = keys[i];
214 if (!equal(a[key], b[key])) return false;
215 }
216 return true;
217 }
218 return a !== a && b !== b;
219 };
220 }
221 });
222
223 // package-external:@wordpress/is-shallow-equal
224 var require_is_shallow_equal = __commonJS({
225 "package-external:@wordpress/is-shallow-equal"(exports, module) {
226 module.exports = window.wp.isShallowEqual;
227 }
228 });
229
230 // package-external:@wordpress/dom
231 var require_dom = __commonJS({
232 "package-external:@wordpress/dom"(exports, module) {
233 module.exports = window.wp.dom;
234 }
235 });
236
237 // packages/customize-widgets/build-module/index.mjs
238 var index_exports = {};
239 __export(index_exports, {
240 initialize: () => initialize,
241 store: () => store
242 });
243 var import_element18 = __toESM(require_element(), 1);
244 var import_block_library2 = __toESM(require_block_library(), 1);
245 var import_widgets5 = __toESM(require_widgets(), 1);
246 var import_blocks2 = __toESM(require_blocks(), 1);
247 var import_data17 = __toESM(require_data(), 1);
248 var import_preferences4 = __toESM(require_preferences(), 1);
249
250 // packages/customize-widgets/build-module/components/customize-widgets/index.mjs
251 var import_element17 = __toESM(require_element(), 1);
252 var import_components8 = __toESM(require_components(), 1);
253
254 // packages/customize-widgets/build-module/components/error-boundary/index.mjs
255 var import_element = __toESM(require_element(), 1);
256 var import_i18n = __toESM(require_i18n(), 1);
257 var import_components = __toESM(require_components(), 1);
258 var import_block_editor = __toESM(require_block_editor(), 1);
259 var import_compose = __toESM(require_compose(), 1);
260 var import_hooks = __toESM(require_hooks(), 1);
261 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
262 function CopyButton({ text, children }) {
263 const ref = (0, import_compose.useCopyToClipboard)(text);
264 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Button, { size: "compact", variant: "secondary", ref, children });
265 }
266 var ErrorBoundary = class extends import_element.Component {
267 constructor() {
268 super(...arguments);
269 this.state = {
270 error: null
271 };
272 }
273 componentDidCatch(error) {
274 this.setState({ error });
275 (0, import_hooks.doAction)("editor.ErrorBoundary.errorLogged", error);
276 }
277 render() {
278 const { error } = this.state;
279 if (!error) {
280 return this.props.children;
281 }
282 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
283 import_block_editor.Warning,
284 {
285 className: "customize-widgets-error-boundary",
286 actions: [
287 /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CopyButton, { text: error.stack, children: (0, import_i18n.__)("Copy Error") }, "copy-error")
288 ],
289 children: (0, import_i18n.__)("The editor has encountered an unexpected error.")
290 }
291 );
292 }
293 };
294
295 // packages/customize-widgets/build-module/components/sidebar-block-editor/index.mjs
296 var import_compose3 = __toESM(require_compose(), 1);
297 var import_core_data = __toESM(require_core_data(), 1);
298 var import_data12 = __toESM(require_data(), 1);
299 var import_element14 = __toESM(require_element(), 1);
300 var import_block_editor8 = __toESM(require_block_editor(), 1);
301 var import_media_utils = __toESM(require_media_utils(), 1);
302 var import_preferences3 = __toESM(require_preferences(), 1);
303 var import_block_library = __toESM(require_block_library(), 1);
304
305 // packages/customize-widgets/build-module/components/block-inspector-button/index.mjs
306 var import_element2 = __toESM(require_element(), 1);
307 var import_i18n2 = __toESM(require_i18n(), 1);
308 var import_components2 = __toESM(require_components(), 1);
309 var import_data = __toESM(require_data(), 1);
310 var import_block_editor2 = __toESM(require_block_editor(), 1);
311 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
312 function BlockInspectorButton({ inspector, closeMenu, ...props }) {
313 const selectedBlockClientId = (0, import_data.useSelect)(
314 (select) => select(import_block_editor2.store).getSelectedBlockClientId(),
315 []
316 );
317 const selectedBlock = (0, import_element2.useMemo)(
318 () => document.getElementById(`block-${selectedBlockClientId}`),
319 [selectedBlockClientId]
320 );
321 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
322 import_components2.MenuItem,
323 {
324 onClick: () => {
325 inspector.open({
326 returnFocusWhenClose: selectedBlock
327 });
328 closeMenu();
329 },
330 ...props,
331 children: (0, import_i18n2.__)("Show more settings")
332 }
333 );
334 }
335 var block_inspector_button_default = BlockInspectorButton;
336
337 // node_modules/clsx/dist/clsx.mjs
338 function r(e) {
339 var t, f, n = "";
340 if ("string" == typeof e || "number" == typeof e) n += e;
341 else if ("object" == typeof e) if (Array.isArray(e)) {
342 var o = e.length;
343 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
344 } else for (f in e) e[f] && (n && (n += " "), n += f);
345 return n;
346 }
347 function clsx() {
348 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
349 return n;
350 }
351 var clsx_default = clsx;
352
353 // packages/customize-widgets/build-module/components/header/index.mjs
354 var import_components6 = __toESM(require_components(), 1);
355 var import_block_editor4 = __toESM(require_block_editor(), 1);
356 var import_element7 = __toESM(require_element(), 1);
357 var import_keycodes3 = __toESM(require_keycodes(), 1);
358 var import_i18n7 = __toESM(require_i18n(), 1);
359
360 // packages/icons/build-module/library/close-small.mjs
361 var import_primitives = __toESM(require_primitives(), 1);
362 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
363 var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) });
364
365 // packages/icons/build-module/library/external.mjs
366 var import_primitives2 = __toESM(require_primitives(), 1);
367 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
368 var external_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives2.Path, { d: "M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z" }) });
369
370 // packages/icons/build-module/library/more-vertical.mjs
371 var import_primitives3 = __toESM(require_primitives(), 1);
372 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
373 var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives3.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) });
374
375 // packages/icons/build-module/library/plus.mjs
376 var import_primitives4 = __toESM(require_primitives(), 1);
377 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
378 var plus_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives4.Path, { d: "M11 12.5V17.5H12.5V12.5H17.5V11H12.5V6H11V11H6V12.5H11Z" }) });
379
380 // packages/icons/build-module/library/redo.mjs
381 var import_primitives5 = __toESM(require_primitives(), 1);
382 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
383 var redo_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives5.Path, { d: "M15.6 6.5l-1.1 1 2.9 3.3H8c-.9 0-1.7.3-2.3.9-1.4 1.5-1.4 4.2-1.4 5.6v.2h1.5v-.3c0-1.1 0-3.5 1-4.5.3-.3.7-.5 1.3-.5h9.2L14.5 15l1.1 1.1 4.6-4.6-4.6-5z" }) });
384
385 // packages/icons/build-module/library/undo.mjs
386 var import_primitives6 = __toESM(require_primitives(), 1);
387 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
388 var undo_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives6.Path, { d: "M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z" }) });
389
390 // packages/customize-widgets/build-module/components/inserter/index.mjs
391 var import_i18n3 = __toESM(require_i18n(), 1);
392 var import_block_editor3 = __toESM(require_block_editor(), 1);
393 var import_components3 = __toESM(require_components(), 1);
394 var import_compose2 = __toESM(require_compose(), 1);
395 var import_data4 = __toESM(require_data(), 1);
396
397 // packages/customize-widgets/build-module/store/index.mjs
398 var import_data3 = __toESM(require_data(), 1);
399
400 // packages/customize-widgets/build-module/store/reducer.mjs
401 var import_data2 = __toESM(require_data(), 1);
402 function blockInserterPanel(state = false, action) {
403 switch (action.type) {
404 case "SET_IS_INSERTER_OPENED":
405 return action.value;
406 }
407 return state;
408 }
409 var reducer_default = (0, import_data2.combineReducers)({
410 blockInserterPanel
411 });
412
413 // packages/customize-widgets/build-module/store/selectors.mjs
414 var selectors_exports = {};
415 __export(selectors_exports, {
416 __experimentalGetInsertionPoint: () => __experimentalGetInsertionPoint,
417 isInserterOpened: () => isInserterOpened
418 });
419 var EMPTY_INSERTION_POINT = {
420 rootClientId: void 0,
421 insertionIndex: void 0
422 };
423 function isInserterOpened(state) {
424 return !!state.blockInserterPanel;
425 }
426 function __experimentalGetInsertionPoint(state) {
427 if (typeof state.blockInserterPanel === "boolean") {
428 return EMPTY_INSERTION_POINT;
429 }
430 return state.blockInserterPanel;
431 }
432
433 // packages/customize-widgets/build-module/store/actions.mjs
434 var actions_exports = {};
435 __export(actions_exports, {
436 setIsInserterOpened: () => setIsInserterOpened
437 });
438 function setIsInserterOpened(value) {
439 return {
440 type: "SET_IS_INSERTER_OPENED",
441 value
442 };
443 }
444
445 // packages/customize-widgets/build-module/store/constants.mjs
446 var STORE_NAME = "core/customize-widgets";
447
448 // packages/customize-widgets/build-module/store/index.mjs
449 var storeConfig = {
450 reducer: reducer_default,
451 selectors: selectors_exports,
452 actions: actions_exports
453 };
454 var store = (0, import_data3.createReduxStore)(STORE_NAME, storeConfig);
455 (0, import_data3.register)(store);
456
457 // packages/customize-widgets/build-module/components/inserter/index.mjs
458 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
459 function Inserter({ setIsOpened }) {
460 const inserterTitleId = (0, import_compose2.useInstanceId)(
461 Inserter,
462 "customize-widget-layout__inserter-panel-title"
463 );
464 const insertionPoint = (0, import_data4.useSelect)(
465 (select) => select(store).__experimentalGetInsertionPoint(),
466 []
467 );
468 return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
469 "div",
470 {
471 className: "customize-widgets-layout__inserter-panel",
472 "aria-labelledby": inserterTitleId,
473 children: [
474 /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "customize-widgets-layout__inserter-panel-header", children: [
475 /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
476 "h2",
477 {
478 id: inserterTitleId,
479 className: "customize-widgets-layout__inserter-panel-header-title",
480 children: (0, import_i18n3.__)("Add a block")
481 }
482 ),
483 /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
484 import_components3.Button,
485 {
486 size: "small",
487 icon: close_small_default,
488 onClick: () => setIsOpened(false),
489 "aria-label": (0, import_i18n3.__)("Close inserter")
490 }
491 )
492 ] }),
493 /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "customize-widgets-layout__inserter-panel-content", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
494 import_block_editor3.__experimentalLibrary,
495 {
496 rootClientId: insertionPoint.rootClientId,
497 __experimentalInsertionIndex: insertionPoint.insertionIndex,
498 showInserterHelpPanel: true,
499 onSelect: () => setIsOpened(false)
500 }
501 ) })
502 ]
503 }
504 );
505 }
506 var inserter_default = Inserter;
507
508 // packages/customize-widgets/build-module/components/more-menu/index.mjs
509 var import_components5 = __toESM(require_components(), 1);
510 var import_element6 = __toESM(require_element(), 1);
511 var import_i18n6 = __toESM(require_i18n(), 1);
512 var import_keycodes2 = __toESM(require_keycodes(), 1);
513 var import_keyboard_shortcuts3 = __toESM(require_keyboard_shortcuts(), 1);
514 var import_preferences = __toESM(require_preferences(), 1);
515
516 // node_modules/@base-ui/utils/esm/useRefWithInit.js
517 var React = __toESM(require_react(), 1);
518 var UNINITIALIZED = {};
519 function useRefWithInit(init, initArg) {
520 const ref = React.useRef(UNINITIALIZED);
521 if (ref.current === UNINITIALIZED) {
522 ref.current = init(initArg);
523 }
524 return ref;
525 }
526
527 // node_modules/@base-ui/utils/esm/warn.js
528 var set;
529 if (true) {
530 set = /* @__PURE__ */ new Set();
531 }
532 function warn(...messages) {
533 if (true) {
534 const messageKey = messages.join(" ");
535 if (!set.has(messageKey)) {
536 set.add(messageKey);
537 console.warn(`Base UI: ${messageKey}`);
538 }
539 }
540 }
541
542 // node_modules/@base-ui/react/esm/internals/useRenderElement.js
543 var React4 = __toESM(require_react(), 1);
544
545 // node_modules/@base-ui/utils/esm/useMergedRefs.js
546 function useMergedRefs(a, b, c, d) {
547 const forkRef = useRefWithInit(createForkRef).current;
548 if (didChange(forkRef, a, b, c, d)) {
549 update(forkRef, [a, b, c, d]);
550 }
551 return forkRef.callback;
552 }
553 function useMergedRefsN(refs) {
554 const forkRef = useRefWithInit(createForkRef).current;
555 if (didChangeN(forkRef, refs)) {
556 update(forkRef, refs);
557 }
558 return forkRef.callback;
559 }
560 function createForkRef() {
561 return {
562 callback: null,
563 cleanup: null,
564 refs: []
565 };
566 }
567 function didChange(forkRef, a, b, c, d) {
568 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d;
569 }
570 function didChangeN(forkRef, newRefs) {
571 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]);
572 }
573 function update(forkRef, refs) {
574 forkRef.refs = refs;
575 if (refs.every((ref) => ref == null)) {
576 forkRef.callback = null;
577 return;
578 }
579 forkRef.callback = (instance) => {
580 if (forkRef.cleanup) {
581 forkRef.cleanup();
582 forkRef.cleanup = null;
583 }
584 if (instance != null) {
585 const cleanupCallbacks = Array(refs.length).fill(null);
586 for (let i = 0; i < refs.length; i += 1) {
587 const ref = refs[i];
588 if (ref == null) {
589 continue;
590 }
591 switch (typeof ref) {
592 case "function": {
593 const refCleanup = ref(instance);
594 if (typeof refCleanup === "function") {
595 cleanupCallbacks[i] = refCleanup;
596 }
597 break;
598 }
599 case "object": {
600 ref.current = instance;
601 break;
602 }
603 default:
604 }
605 }
606 forkRef.cleanup = () => {
607 for (let i = 0; i < refs.length; i += 1) {
608 const ref = refs[i];
609 if (ref == null) {
610 continue;
611 }
612 switch (typeof ref) {
613 case "function": {
614 const cleanupCallback = cleanupCallbacks[i];
615 if (typeof cleanupCallback === "function") {
616 cleanupCallback();
617 } else {
618 ref(null);
619 }
620 break;
621 }
622 case "object": {
623 ref.current = null;
624 break;
625 }
626 default:
627 }
628 }
629 };
630 }
631 };
632 }
633
634 // node_modules/@base-ui/utils/esm/getReactElementRef.js
635 var React3 = __toESM(require_react(), 1);
636
637 // node_modules/@base-ui/utils/esm/reactVersion.js
638 var React2 = __toESM(require_react(), 1);
639 var majorVersion = parseInt(React2.version, 10);
640 function isReactVersionAtLeast(reactVersionToCheck) {
641 return majorVersion >= reactVersionToCheck;
642 }
643
644 // node_modules/@base-ui/utils/esm/getReactElementRef.js
645 function getReactElementRef(element) {
646 if (!/* @__PURE__ */ React3.isValidElement(element)) {
647 return null;
648 }
649 const reactElement = element;
650 const propsWithRef = reactElement.props;
651 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;
652 }
653
654 // node_modules/@base-ui/utils/esm/mergeObjects.js
655 function mergeObjects(a, b) {
656 if (a && !b) {
657 return a;
658 }
659 if (!a && b) {
660 return b;
661 }
662 if (a || b) {
663 return {
664 ...a,
665 ...b
666 };
667 }
668 return void 0;
669 }
670
671 // node_modules/@base-ui/utils/esm/empty.js
672 var EMPTY_ARRAY = Object.freeze([]);
673 var EMPTY_OBJECT = Object.freeze({});
674
675 // node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js
676 function getStateAttributesProps(state, customMapping) {
677 const props = {};
678 for (const key in state) {
679 const value = state[key];
680 if (customMapping?.hasOwnProperty(key)) {
681 const customProps = customMapping[key](value);
682 if (customProps != null) {
683 Object.assign(props, customProps);
684 }
685 continue;
686 }
687 if (value === true) {
688 props[`data-${key.toLowerCase()}`] = "";
689 } else if (value) {
690 props[`data-${key.toLowerCase()}`] = value.toString();
691 }
692 }
693 return props;
694 }
695
696 // node_modules/@base-ui/react/esm/utils/resolveClassName.js
697 function resolveClassName(className, state) {
698 return typeof className === "function" ? className(state) : className;
699 }
700
701 // node_modules/@base-ui/react/esm/utils/resolveStyle.js
702 function resolveStyle(style, state) {
703 return typeof style === "function" ? style(state) : style;
704 }
705
706 // node_modules/@base-ui/react/esm/merge-props/mergeProps.js
707 var EMPTY_PROPS = {};
708 function mergeProps(a, b, c, d, e) {
709 if (!c && !d && !e && !a) {
710 return createInitialMergedProps(b);
711 }
712 let merged = createInitialMergedProps(a);
713 if (b) {
714 merged = mergeInto(merged, b);
715 }
716 if (c) {
717 merged = mergeInto(merged, c);
718 }
719 if (d) {
720 merged = mergeInto(merged, d);
721 }
722 if (e) {
723 merged = mergeInto(merged, e);
724 }
725 return merged;
726 }
727 function mergePropsN(props) {
728 if (props.length === 0) {
729 return EMPTY_PROPS;
730 }
731 if (props.length === 1) {
732 return createInitialMergedProps(props[0]);
733 }
734 let merged = createInitialMergedProps(props[0]);
735 for (let i = 1; i < props.length; i += 1) {
736 merged = mergeInto(merged, props[i]);
737 }
738 return merged;
739 }
740 function createInitialMergedProps(inputProps) {
741 if (isPropsGetter(inputProps)) {
742 return {
743 ...resolvePropsGetter(inputProps, EMPTY_PROPS)
744 };
745 }
746 return copyInitialProps(inputProps);
747 }
748 function mergeInto(merged, inputProps) {
749 if (isPropsGetter(inputProps)) {
750 return resolvePropsGetter(inputProps, merged);
751 }
752 return mutablyMergeInto(merged, inputProps);
753 }
754 function copyInitialProps(inputProps) {
755 const copiedProps = {
756 ...inputProps
757 };
758 for (const propName in copiedProps) {
759 const propValue = copiedProps[propName];
760 if (isEventHandler(propName, propValue)) {
761 copiedProps[propName] = wrapEventHandler(propValue);
762 }
763 }
764 return copiedProps;
765 }
766 function mutablyMergeInto(mergedProps, externalProps) {
767 if (!externalProps) {
768 return mergedProps;
769 }
770 for (const propName in externalProps) {
771 const externalPropValue = externalProps[propName];
772 switch (propName) {
773 case "style": {
774 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue);
775 break;
776 }
777 case "className": {
778 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue);
779 break;
780 }
781 default: {
782 if (isEventHandler(propName, externalPropValue)) {
783 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue);
784 } else {
785 mergedProps[propName] = externalPropValue;
786 }
787 }
788 }
789 }
790 return mergedProps;
791 }
792 function isEventHandler(key, value) {
793 const code0 = key.charCodeAt(0);
794 const code1 = key.charCodeAt(1);
795 const code2 = key.charCodeAt(2);
796 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined");
797 }
798 function isPropsGetter(inputProps) {
799 return typeof inputProps === "function";
800 }
801 function resolvePropsGetter(inputProps, previousProps) {
802 if (isPropsGetter(inputProps)) {
803 return inputProps(previousProps);
804 }
805 return inputProps ?? EMPTY_PROPS;
806 }
807 function mergeEventHandlers(ourHandler, theirHandler) {
808 if (!theirHandler) {
809 return ourHandler;
810 }
811 if (!ourHandler) {
812 return wrapEventHandler(theirHandler);
813 }
814 return (...args) => {
815 const event = args[0];
816 if (isSyntheticEvent(event)) {
817 const baseUIEvent = event;
818 makeEventPreventable(baseUIEvent);
819 const result2 = theirHandler(...args);
820 if (!baseUIEvent.baseUIHandlerPrevented) {
821 ourHandler?.(...args);
822 }
823 return result2;
824 }
825 const result = theirHandler(...args);
826 ourHandler?.(...args);
827 return result;
828 };
829 }
830 function wrapEventHandler(handler) {
831 if (!handler) {
832 return handler;
833 }
834 return (...args) => {
835 const event = args[0];
836 if (isSyntheticEvent(event)) {
837 makeEventPreventable(event);
838 }
839 return handler(...args);
840 };
841 }
842 function makeEventPreventable(event) {
843 event.preventBaseUIHandler = () => {
844 event.baseUIHandlerPrevented = true;
845 };
846 return event;
847 }
848 function mergeClassNames(ourClassName, theirClassName) {
849 if (theirClassName) {
850 if (ourClassName) {
851 return theirClassName + " " + ourClassName;
852 }
853 return theirClassName;
854 }
855 return ourClassName;
856 }
857 function isSyntheticEvent(event) {
858 return event != null && typeof event === "object" && "nativeEvent" in event;
859 }
860
861 // node_modules/@base-ui/react/esm/internals/useRenderElement.js
862 var import_react = __toESM(require_react(), 1);
863 function useRenderElement(element, componentProps, params = {}) {
864 const renderProp = componentProps.render;
865 const outProps = useRenderElementProps(componentProps, params);
866 if (params.enabled === false) {
867 return null;
868 }
869 const state = params.state ?? EMPTY_OBJECT;
870 return evaluateRenderProp(element, renderProp, outProps, state);
871 }
872 function useRenderElementProps(componentProps, params = {}) {
873 const {
874 className: classNameProp,
875 style: styleProp,
876 render: renderProp
877 } = componentProps;
878 const {
879 state = EMPTY_OBJECT,
880 ref,
881 props,
882 stateAttributesMapping,
883 enabled = true
884 } = params;
885 const className = enabled ? resolveClassName(classNameProp, state) : void 0;
886 const style = enabled ? resolveStyle(styleProp, state) : void 0;
887 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT;
888 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0;
889 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;
890 if (typeof document !== "undefined") {
891 if (!enabled) {
892 useMergedRefs(null, null);
893 } else if (Array.isArray(ref)) {
894 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);
895 } else {
896 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);
897 }
898 }
899 if (!enabled) {
900 return EMPTY_OBJECT;
901 }
902 if (className !== void 0) {
903 outProps.className = mergeClassNames(outProps.className, className);
904 }
905 if (style !== void 0) {
906 outProps.style = mergeObjects(outProps.style, style);
907 }
908 return outProps;
909 }
910 function resolveRenderFunctionProps(props) {
911 if (Array.isArray(props)) {
912 return mergePropsN(props);
913 }
914 return mergeProps(void 0, props);
915 }
916 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
917 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;
918 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/;
919 function evaluateRenderProp(element, render, props, state) {
920 if (render) {
921 if (typeof render === "function") {
922 if (true) {
923 warnIfRenderPropLooksLikeComponent(render);
924 }
925 return render(props, state);
926 }
927 const mergedProps = mergeProps(props, render.props);
928 mergedProps.ref = props.ref;
929 let newElement = render;
930 if (newElement?.$$typeof === REACT_LAZY_TYPE) {
931 const children = React4.Children.toArray(render);
932 newElement = children[0];
933 }
934 if (true) {
935 if (!/* @__PURE__ */ React4.isValidElement(newElement)) {
936 throw new Error(["Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.", "A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.", "https://base-ui.com/r/invalid-render-prop"].join("\n"));
937 }
938 }
939 return /* @__PURE__ */ React4.cloneElement(newElement, mergedProps);
940 }
941 if (element) {
942 if (typeof element === "string") {
943 return renderTag(element, props);
944 }
945 }
946 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8));
947 }
948 function warnIfRenderPropLooksLikeComponent(renderFn) {
949 const functionName = renderFn.name;
950 if (functionName.length === 0) {
951 return;
952 }
953 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {
954 return;
955 }
956 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {
957 return;
958 }
959 warn(`The \`render\` prop received a function named \`${functionName}\` that starts with an uppercase letter.`, "This usually means a React component was passed directly as `render={Component}`.", "Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.", "If this is an intentional render callback, rename it to start with a lowercase letter.", "Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.", "https://base-ui.com/r/invalid-render-prop");
960 }
961 function renderTag(Tag, props) {
962 if (Tag === "button") {
963 return /* @__PURE__ */ (0, import_react.createElement)("button", {
964 type: "button",
965 ...props,
966 key: props.key
967 });
968 }
969 if (Tag === "img") {
970 return /* @__PURE__ */ (0, import_react.createElement)("img", {
971 alt: "",
972 ...props,
973 key: props.key
974 });
975 }
976 return /* @__PURE__ */ React4.createElement(Tag, props);
977 }
978
979 // node_modules/@base-ui/react/esm/use-render/useRender.js
980 function useRender(params) {
981 return useRenderElement(params.defaultTagName ?? "div", params, params);
982 }
983
984 // packages/ui/build-module/visually-hidden/visually-hidden.mjs
985 var import_element3 = __toESM(require_element(), 1);
986 if (typeof document !== "undefined" && true && !document.head.querySelector("style[data-wp-hash='c46e8cb841']")) {
987 const style = document.createElement("style");
988 style.setAttribute("data-wp-hash", "c46e8cb841");
989 style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}"));
990 document.head.appendChild(style);
991 }
992 var style_default = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
993 var VisuallyHidden = (0, import_element3.forwardRef)(
994 function VisuallyHidden2({ render, ...restProps }, ref) {
995 const element = useRender({
996 render,
997 ref,
998 props: mergeProps(
999 { className: style_default["visually-hidden"] },
1000 restProps,
1001 {
1002 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
1003 "data-visually-hidden": ""
1004 }
1005 )
1006 });
1007 return element;
1008 }
1009 );
1010
1011 // packages/customize-widgets/build-module/components/keyboard-shortcut-help-modal/index.mjs
1012 var import_components4 = __toESM(require_components(), 1);
1013 var import_i18n5 = __toESM(require_i18n(), 1);
1014 var import_keyboard_shortcuts2 = __toESM(require_keyboard_shortcuts(), 1);
1015 var import_data6 = __toESM(require_data(), 1);
1016 var import_element5 = __toESM(require_element(), 1);
1017
1018 // packages/customize-widgets/build-module/components/keyboard-shortcut-help-modal/config.mjs
1019 var import_i18n4 = __toESM(require_i18n(), 1);
1020 var textFormattingShortcuts = [
1021 {
1022 keyCombination: { modifier: "primary", character: "b" },
1023 description: (0, import_i18n4.__)("Make the selected text bold.")
1024 },
1025 {
1026 keyCombination: { modifier: "primary", character: "i" },
1027 description: (0, import_i18n4.__)("Make the selected text italic.")
1028 },
1029 {
1030 keyCombination: { modifier: "primary", character: "k" },
1031 description: (0, import_i18n4.__)("Convert the selected text into a link.")
1032 },
1033 {
1034 keyCombination: { modifier: "primaryShift", character: "k" },
1035 description: (0, import_i18n4.__)("Remove a link.")
1036 },
1037 {
1038 keyCombination: { character: "[[" },
1039 description: (0, import_i18n4.__)("Insert a link to a post or page.")
1040 },
1041 {
1042 keyCombination: { modifier: "primary", character: "u" },
1043 description: (0, import_i18n4.__)("Underline the selected text.")
1044 },
1045 {
1046 keyCombination: { modifier: "access", character: "d" },
1047 description: (0, import_i18n4.__)("Strikethrough the selected text.")
1048 },
1049 {
1050 keyCombination: { modifier: "access", character: "x" },
1051 description: (0, import_i18n4.__)("Make the selected text inline code.")
1052 },
1053 {
1054 keyCombination: {
1055 modifier: "access",
1056 character: "0"
1057 },
1058 aliases: [
1059 {
1060 modifier: "access",
1061 character: "7"
1062 }
1063 ],
1064 description: (0, import_i18n4.__)("Convert the current heading to a paragraph.")
1065 },
1066 {
1067 keyCombination: { modifier: "access", character: "1-6" },
1068 description: (0, import_i18n4.__)(
1069 "Convert the current paragraph or heading to a heading of level 1 to 6."
1070 )
1071 },
1072 {
1073 keyCombination: { modifier: "primaryShift", character: "SPACE" },
1074 description: (0, import_i18n4.__)("Add non breaking space.")
1075 }
1076 ];
1077
1078 // packages/customize-widgets/build-module/components/keyboard-shortcut-help-modal/shortcut.mjs
1079 var import_element4 = __toESM(require_element(), 1);
1080 var import_keycodes = __toESM(require_keycodes(), 1);
1081 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
1082 function KeyCombination({ keyCombination, forceAriaLabel }) {
1083 const shortcut = keyCombination.modifier ? import_keycodes.displayShortcutList[keyCombination.modifier](
1084 keyCombination.character
1085 ) : keyCombination.character;
1086 const ariaLabel = keyCombination.modifier ? import_keycodes.shortcutAriaLabel[keyCombination.modifier](
1087 keyCombination.character
1088 ) : keyCombination.character;
1089 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1090 "kbd",
1091 {
1092 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination",
1093 "aria-label": forceAriaLabel || ariaLabel,
1094 children: (Array.isArray(shortcut) ? shortcut : [shortcut]).map(
1095 (character, index) => {
1096 if (character === "+") {
1097 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_element4.Fragment, { children: character }, index);
1098 }
1099 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1100 "kbd",
1101 {
1102 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-key",
1103 children: character
1104 },
1105 index
1106 );
1107 }
1108 )
1109 }
1110 );
1111 }
1112 function Shortcut({ description, keyCombination, aliases = [], ariaLabel }) {
1113 return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1114 /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-description", children: description }),
1115 /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-term", children: [
1116 /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1117 KeyCombination,
1118 {
1119 keyCombination,
1120 forceAriaLabel: ariaLabel
1121 }
1122 ),
1123 aliases.map((alias, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1124 KeyCombination,
1125 {
1126 keyCombination: alias,
1127 forceAriaLabel: ariaLabel
1128 },
1129 index
1130 ))
1131 ] })
1132 ] });
1133 }
1134 var shortcut_default = Shortcut;
1135
1136 // packages/customize-widgets/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.mjs
1137 var import_data5 = __toESM(require_data(), 1);
1138 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts(), 1);
1139 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
1140 function DynamicShortcut({ name }) {
1141 const { keyCombination, description, aliases } = (0, import_data5.useSelect)(
1142 (select) => {
1143 const {
1144 getShortcutKeyCombination,
1145 getShortcutDescription,
1146 getShortcutAliases
1147 } = select(import_keyboard_shortcuts.store);
1148 return {
1149 keyCombination: getShortcutKeyCombination(name),
1150 aliases: getShortcutAliases(name),
1151 description: getShortcutDescription(name)
1152 };
1153 },
1154 [name]
1155 );
1156 if (!keyCombination) {
1157 return null;
1158 }
1159 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1160 shortcut_default,
1161 {
1162 keyCombination,
1163 description,
1164 aliases
1165 }
1166 );
1167 }
1168 var dynamic_shortcut_default = DynamicShortcut;
1169
1170 // packages/customize-widgets/build-module/components/keyboard-shortcut-help-modal/index.mjs
1171 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
1172 var ShortcutList = ({ shortcuts }) => (
1173 /*
1174 * Disable reason: The `list` ARIA role is redundant but
1175 * Safari+VoiceOver won't announce the list otherwise.
1176 */
1177 /* eslint-disable jsx-a11y/no-redundant-roles */
1178 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1179 "ul",
1180 {
1181 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut-list",
1182 role: "list",
1183 children: shortcuts.map((shortcut, index) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1184 "li",
1185 {
1186 className: "customize-widgets-keyboard-shortcut-help-modal__shortcut",
1187 children: typeof shortcut === "string" ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(dynamic_shortcut_default, { name: shortcut }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(shortcut_default, { ...shortcut })
1188 },
1189 index
1190 ))
1191 }
1192 )
1193 );
1194 var ShortcutSection = ({ title, shortcuts, className }) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1195 "section",
1196 {
1197 className: clsx_default(
1198 "customize-widgets-keyboard-shortcut-help-modal__section",
1199 className
1200 ),
1201 children: [
1202 !!title && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h2", { className: "customize-widgets-keyboard-shortcut-help-modal__section-title", children: title }),
1203 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ShortcutList, { shortcuts })
1204 ]
1205 }
1206 );
1207 var ShortcutCategorySection = ({
1208 title,
1209 categoryName,
1210 additionalShortcuts = []
1211 }) => {
1212 const categoryShortcuts = (0, import_data6.useSelect)(
1213 (select) => {
1214 return select(import_keyboard_shortcuts2.store).getCategoryShortcuts(
1215 categoryName
1216 );
1217 },
1218 [categoryName]
1219 );
1220 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1221 ShortcutSection,
1222 {
1223 title,
1224 shortcuts: categoryShortcuts.concat(additionalShortcuts)
1225 }
1226 );
1227 };
1228 function KeyboardShortcutHelpModal({
1229 isModalActive,
1230 toggleModal
1231 }) {
1232 const { registerShortcut } = (0, import_data6.useDispatch)(import_keyboard_shortcuts2.store);
1233 (0, import_element5.useEffect)(() => {
1234 registerShortcut({
1235 name: "core/customize-widgets/keyboard-shortcuts",
1236 category: "main",
1237 description: (0, import_i18n5.__)("Display these keyboard shortcuts."),
1238 keyCombination: {
1239 modifier: "access",
1240 character: "h"
1241 }
1242 });
1243 }, [registerShortcut]);
1244 (0, import_keyboard_shortcuts2.useShortcut)("core/customize-widgets/keyboard-shortcuts", toggleModal);
1245 if (!isModalActive) {
1246 return null;
1247 }
1248 return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1249 import_components4.Modal,
1250 {
1251 className: "customize-widgets-keyboard-shortcut-help-modal",
1252 title: (0, import_i18n5.__)("Keyboard shortcuts"),
1253 onRequestClose: toggleModal,
1254 children: [
1255 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1256 ShortcutSection,
1257 {
1258 className: "customize-widgets-keyboard-shortcut-help-modal__main-shortcuts",
1259 shortcuts: ["core/customize-widgets/keyboard-shortcuts"]
1260 }
1261 ),
1262 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1263 ShortcutCategorySection,
1264 {
1265 title: (0, import_i18n5.__)("Global shortcuts"),
1266 categoryName: "global"
1267 }
1268 ),
1269 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1270 ShortcutCategorySection,
1271 {
1272 title: (0, import_i18n5.__)("Selection shortcuts"),
1273 categoryName: "selection"
1274 }
1275 ),
1276 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1277 ShortcutCategorySection,
1278 {
1279 title: (0, import_i18n5.__)("Block shortcuts"),
1280 categoryName: "block",
1281 additionalShortcuts: [
1282 {
1283 keyCombination: { character: "/" },
1284 description: (0, import_i18n5.__)(
1285 "Change the block type after adding a new paragraph."
1286 ),
1287 /* translators: The forward-slash character. e.g. '/'. */
1288 ariaLabel: (0, import_i18n5.__)("Forward-slash")
1289 }
1290 ]
1291 }
1292 ),
1293 /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1294 ShortcutSection,
1295 {
1296 title: (0, import_i18n5.__)("Text formatting"),
1297 shortcuts: textFormattingShortcuts
1298 }
1299 )
1300 ]
1301 }
1302 );
1303 }
1304
1305 // packages/customize-widgets/build-module/components/more-menu/index.mjs
1306 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
1307 function MoreMenu() {
1308 const [
1309 isKeyboardShortcutsModalActive,
1310 setIsKeyboardShortcutsModalVisible
1311 ] = (0, import_element6.useState)(false);
1312 const toggleKeyboardShortcutsModal = () => setIsKeyboardShortcutsModalVisible(!isKeyboardShortcutsModalActive);
1313 (0, import_keyboard_shortcuts3.useShortcut)(
1314 "core/customize-widgets/keyboard-shortcuts",
1315 toggleKeyboardShortcutsModal
1316 );
1317 return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1318 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1319 import_components5.ToolbarDropdownMenu,
1320 {
1321 icon: more_vertical_default,
1322 label: (0, import_i18n6.__)("Options"),
1323 popoverProps: {
1324 placement: "bottom-end",
1325 className: "more-menu-dropdown__content"
1326 },
1327 toggleProps: {
1328 tooltipPosition: "bottom",
1329 size: "compact"
1330 },
1331 children: () => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1332 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_components5.MenuGroup, { label: (0, import_i18n6._x)("View", "noun"), children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1333 import_preferences.PreferenceToggleMenuItem,
1334 {
1335 scope: "core/customize-widgets",
1336 name: "fixedToolbar",
1337 label: (0, import_i18n6.__)("Top toolbar"),
1338 info: (0, import_i18n6.__)(
1339 "Access all block and document tools in a single place"
1340 ),
1341 messageActivated: (0, import_i18n6.__)(
1342 "Top toolbar activated"
1343 ),
1344 messageDeactivated: (0, import_i18n6.__)(
1345 "Top toolbar deactivated"
1346 )
1347 }
1348 ) }),
1349 /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_components5.MenuGroup, { label: (0, import_i18n6.__)("Tools"), children: [
1350 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1351 import_components5.MenuItem,
1352 {
1353 onClick: () => {
1354 setIsKeyboardShortcutsModalVisible(true);
1355 },
1356 shortcut: import_keycodes2.displayShortcut.access("h"),
1357 children: (0, import_i18n6.__)("Keyboard shortcuts")
1358 }
1359 ),
1360 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1361 import_preferences.PreferenceToggleMenuItem,
1362 {
1363 scope: "core/customize-widgets",
1364 name: "welcomeGuide",
1365 label: (0, import_i18n6.__)("Welcome Guide")
1366 }
1367 ),
1368 /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1369 import_components5.MenuItem,
1370 {
1371 role: "menuitem",
1372 icon: external_default,
1373 href: (0, import_i18n6.__)(
1374 "https://wordpress.org/documentation/article/block-based-widgets-editor/"
1375 ),
1376 target: "_blank",
1377 rel: "noopener",
1378 children: [
1379 (0, import_i18n6.__)("Help"),
1380 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(VisuallyHidden, {
1381 render: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", {}),
1382 /* translators: accessibility text */
1383 children: (0, import_i18n6.__)("(opens in a new tab)")
1384 })
1385 ]
1386 }
1387 )
1388 ] }),
1389 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_components5.MenuGroup, { label: (0, import_i18n6.__)("Preferences"), children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1390 import_preferences.PreferenceToggleMenuItem,
1391 {
1392 scope: "core/customize-widgets",
1393 name: "keepCaretInsideBlock",
1394 label: (0, import_i18n6.__)(
1395 "Contain text cursor inside block"
1396 ),
1397 info: (0, import_i18n6.__)(
1398 "Aids screen readers by stopping text caret from leaving blocks."
1399 ),
1400 messageActivated: (0, import_i18n6.__)(
1401 "Contain text cursor inside block activated"
1402 ),
1403 messageDeactivated: (0, import_i18n6.__)(
1404 "Contain text cursor inside block deactivated"
1405 )
1406 }
1407 ) })
1408 ] })
1409 }
1410 ),
1411 /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1412 KeyboardShortcutHelpModal,
1413 {
1414 isModalActive: isKeyboardShortcutsModalActive,
1415 toggleModal: toggleKeyboardShortcutsModal
1416 }
1417 )
1418 ] });
1419 }
1420
1421 // packages/customize-widgets/build-module/components/header/index.mjs
1422 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
1423 function Header({
1424 sidebar,
1425 inserter,
1426 isInserterOpened: isInserterOpened2,
1427 setIsInserterOpened: setIsInserterOpened2,
1428 isFixedToolbarActive
1429 }) {
1430 const [[hasUndo, hasRedo], setUndoRedo] = (0, import_element7.useState)([
1431 sidebar.hasUndo(),
1432 sidebar.hasRedo()
1433 ]);
1434 const shortcut = (0, import_keycodes3.isAppleOS)() ? import_keycodes3.displayShortcut.primaryShift("z") : import_keycodes3.displayShortcut.primary("y");
1435 (0, import_element7.useEffect)(() => {
1436 return sidebar.subscribeHistory(() => {
1437 setUndoRedo([sidebar.hasUndo(), sidebar.hasRedo()]);
1438 });
1439 }, [sidebar]);
1440 return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1441 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1442 "div",
1443 {
1444 className: clsx_default("customize-widgets-header", {
1445 "is-fixed-toolbar-active": isFixedToolbarActive
1446 }),
1447 children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1448 import_block_editor4.NavigableToolbar,
1449 {
1450 className: "customize-widgets-header-toolbar",
1451 "aria-label": (0, import_i18n7.__)("Document tools"),
1452 children: [
1453 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1454 import_components6.ToolbarButton,
1455 {
1456 icon: !(0, import_i18n7.isRTL)() ? undo_default : redo_default,
1457 label: (0, import_i18n7.__)("Undo"),
1458 shortcut: import_keycodes3.displayShortcut.primary("z"),
1459 disabled: !hasUndo,
1460 onClick: sidebar.undo,
1461 className: "customize-widgets-editor-history-button undo-button"
1462 }
1463 ),
1464 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1465 import_components6.ToolbarButton,
1466 {
1467 icon: !(0, import_i18n7.isRTL)() ? redo_default : undo_default,
1468 label: (0, import_i18n7.__)("Redo"),
1469 shortcut,
1470 disabled: !hasRedo,
1471 onClick: sidebar.redo,
1472 className: "customize-widgets-editor-history-button redo-button"
1473 }
1474 ),
1475 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1476 import_components6.ToolbarButton,
1477 {
1478 className: "customize-widgets-header-toolbar__inserter-toggle",
1479 isPressed: isInserterOpened2,
1480 variant: "primary",
1481 icon: plus_default,
1482 label: (0, import_i18n7._x)(
1483 "Add block",
1484 "Generic label for block inserter button"
1485 ),
1486 onClick: () => {
1487 setIsInserterOpened2((isOpen) => !isOpen);
1488 }
1489 }
1490 ),
1491 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MoreMenu, {})
1492 ]
1493 }
1494 )
1495 }
1496 ),
1497 (0, import_element7.createPortal)(
1498 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(inserter_default, { setIsOpened: setIsInserterOpened2 }),
1499 inserter.contentContainer[0]
1500 )
1501 ] });
1502 }
1503 var header_default = Header;
1504
1505 // packages/customize-widgets/build-module/components/inserter/use-inserter.mjs
1506 var import_element8 = __toESM(require_element(), 1);
1507 var import_data7 = __toESM(require_data(), 1);
1508 function useInserter(inserter) {
1509 const isInserterOpened2 = (0, import_data7.useSelect)(
1510 (select) => select(store).isInserterOpened(),
1511 []
1512 );
1513 const { setIsInserterOpened: setIsInserterOpened2 } = (0, import_data7.useDispatch)(store);
1514 (0, import_element8.useEffect)(() => {
1515 if (isInserterOpened2) {
1516 inserter.open();
1517 } else {
1518 inserter.close();
1519 }
1520 }, [inserter, isInserterOpened2]);
1521 return [
1522 isInserterOpened2,
1523 (0, import_element8.useCallback)(
1524 (updater) => {
1525 let isOpen = updater;
1526 if (typeof updater === "function") {
1527 isOpen = updater(
1528 (0, import_data7.select)(store).isInserterOpened()
1529 );
1530 }
1531 setIsInserterOpened2(isOpen);
1532 },
1533 [setIsInserterOpened2]
1534 )
1535 ];
1536 }
1537
1538 // packages/customize-widgets/build-module/components/sidebar-block-editor/sidebar-editor-provider.mjs
1539 var import_block_editor6 = __toESM(require_block_editor(), 1);
1540
1541 // packages/customize-widgets/build-module/components/sidebar-block-editor/use-sidebar-block-editor.mjs
1542 var import_es6 = __toESM(require_es6(), 1);
1543 var import_element9 = __toESM(require_element(), 1);
1544 var import_is_shallow_equal = __toESM(require_is_shallow_equal(), 1);
1545 var import_widgets2 = __toESM(require_widgets(), 1);
1546
1547 // packages/customize-widgets/build-module/utils.mjs
1548 var import_blocks = __toESM(require_blocks(), 1);
1549 var import_widgets = __toESM(require_widgets(), 1);
1550 function settingIdToWidgetId(settingId) {
1551 const matches = settingId.match(/^widget_(.+)(?:\[(\d+)\])$/);
1552 if (matches) {
1553 const idBase = matches[1];
1554 const number = parseInt(matches[2], 10);
1555 return `${idBase}-${number}`;
1556 }
1557 return settingId;
1558 }
1559 function blockToWidget(block, existingWidget = null) {
1560 let widget;
1561 const isValidLegacyWidgetBlock = block.name === "core/legacy-widget" && (block.attributes.id || block.attributes.instance);
1562 if (isValidLegacyWidgetBlock) {
1563 if (block.attributes.id) {
1564 widget = {
1565 id: block.attributes.id
1566 };
1567 } else {
1568 const { encoded, hash, raw, ...rest } = block.attributes.instance;
1569 widget = {
1570 idBase: block.attributes.idBase,
1571 instance: {
1572 ...existingWidget?.instance,
1573 // Required only for the customizer.
1574 is_widget_customizer_js_value: true,
1575 encoded_serialized_instance: encoded,
1576 instance_hash_key: hash,
1577 raw_instance: raw,
1578 ...rest
1579 }
1580 };
1581 }
1582 } else {
1583 const instance = {
1584 content: (0, import_blocks.serialize)(block)
1585 };
1586 widget = {
1587 idBase: "block",
1588 widgetClass: "WP_Widget_Block",
1589 instance: {
1590 raw_instance: instance
1591 }
1592 };
1593 }
1594 const { form, rendered, ...restExistingWidget } = existingWidget || {};
1595 return {
1596 ...restExistingWidget,
1597 ...widget
1598 };
1599 }
1600 function widgetToBlock({ id, idBase, number, instance }) {
1601 let block;
1602 const {
1603 encoded_serialized_instance: encoded,
1604 instance_hash_key: hash,
1605 raw_instance: raw,
1606 ...rest
1607 } = instance;
1608 if (idBase === "block") {
1609 const parsedBlocks = (0, import_blocks.parse)(raw.content ?? "", {
1610 __unstableSkipAutop: true
1611 });
1612 block = parsedBlocks.length ? parsedBlocks[0] : (0, import_blocks.createBlock)("core/paragraph", {});
1613 } else if (number) {
1614 block = (0, import_blocks.createBlock)("core/legacy-widget", {
1615 idBase,
1616 instance: {
1617 encoded,
1618 hash,
1619 raw,
1620 ...rest
1621 }
1622 });
1623 } else {
1624 block = (0, import_blocks.createBlock)("core/legacy-widget", {
1625 id
1626 });
1627 }
1628 return (0, import_widgets.addWidgetIdToBlock)(block, id);
1629 }
1630
1631 // packages/customize-widgets/build-module/components/sidebar-block-editor/use-sidebar-block-editor.mjs
1632 function widgetsToBlocks(widgets) {
1633 return widgets.map((widget) => widgetToBlock(widget));
1634 }
1635 function useSidebarBlockEditor(sidebar) {
1636 const [blocks, setBlocks] = (0, import_element9.useState)(
1637 () => widgetsToBlocks(sidebar.getWidgets())
1638 );
1639 (0, import_element9.useEffect)(() => {
1640 return sidebar.subscribe((prevWidgets, nextWidgets) => {
1641 setBlocks((prevBlocks) => {
1642 const prevWidgetsMap = new Map(
1643 prevWidgets.map((widget) => [widget.id, widget])
1644 );
1645 const prevBlocksMap = new Map(
1646 prevBlocks.map((block) => [
1647 (0, import_widgets2.getWidgetIdFromBlock)(block),
1648 block
1649 ])
1650 );
1651 const nextBlocks = nextWidgets.map((nextWidget) => {
1652 const prevWidget = prevWidgetsMap.get(nextWidget.id);
1653 if (prevWidget && prevWidget === nextWidget) {
1654 return prevBlocksMap.get(nextWidget.id);
1655 }
1656 return widgetToBlock(nextWidget);
1657 });
1658 if ((0, import_is_shallow_equal.isShallowEqual)(prevBlocks, nextBlocks)) {
1659 return prevBlocks;
1660 }
1661 return nextBlocks;
1662 });
1663 });
1664 }, [sidebar]);
1665 const onChangeBlocks = (0, import_element9.useCallback)(
1666 (nextBlocks) => {
1667 setBlocks((prevBlocks) => {
1668 if ((0, import_is_shallow_equal.isShallowEqual)(prevBlocks, nextBlocks)) {
1669 return prevBlocks;
1670 }
1671 const prevBlocksMap = new Map(
1672 prevBlocks.map((block) => [
1673 (0, import_widgets2.getWidgetIdFromBlock)(block),
1674 block
1675 ])
1676 );
1677 const nextWidgets = nextBlocks.map((nextBlock) => {
1678 const widgetId = (0, import_widgets2.getWidgetIdFromBlock)(nextBlock);
1679 if (widgetId && prevBlocksMap.has(widgetId)) {
1680 const prevBlock = prevBlocksMap.get(widgetId);
1681 const prevWidget = sidebar.getWidget(widgetId);
1682 if ((0, import_es6.default)(nextBlock, prevBlock) && prevWidget) {
1683 return prevWidget;
1684 }
1685 return blockToWidget(nextBlock, prevWidget);
1686 }
1687 return blockToWidget(nextBlock);
1688 });
1689 if ((0, import_is_shallow_equal.isShallowEqual)(sidebar.getWidgets(), nextWidgets)) {
1690 return prevBlocks;
1691 }
1692 const addedWidgetIds = sidebar.setWidgets(nextWidgets);
1693 return nextBlocks.reduce(
1694 (updatedNextBlocks, nextBlock, index) => {
1695 const addedWidgetId = addedWidgetIds[index];
1696 if (addedWidgetId !== null) {
1697 if (updatedNextBlocks === nextBlocks) {
1698 updatedNextBlocks = nextBlocks.slice();
1699 }
1700 updatedNextBlocks[index] = (0, import_widgets2.addWidgetIdToBlock)(
1701 nextBlock,
1702 addedWidgetId
1703 );
1704 }
1705 return updatedNextBlocks;
1706 },
1707 nextBlocks
1708 );
1709 });
1710 },
1711 [sidebar]
1712 );
1713 return [blocks, onChangeBlocks, onChangeBlocks];
1714 }
1715
1716 // packages/customize-widgets/build-module/components/focus-control/use-blocks-focus-control.mjs
1717 var import_element11 = __toESM(require_element(), 1);
1718 var import_data8 = __toESM(require_data(), 1);
1719 var import_block_editor5 = __toESM(require_block_editor(), 1);
1720 var import_widgets3 = __toESM(require_widgets(), 1);
1721
1722 // packages/customize-widgets/build-module/components/focus-control/index.mjs
1723 var import_element10 = __toESM(require_element(), 1);
1724 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
1725 var FocusControlContext = (0, import_element10.createContext)();
1726 FocusControlContext.displayName = "FocusControlContext";
1727 function FocusControl({ api, sidebarControls, children }) {
1728 const [focusedWidgetIdRef, setFocusedWidgetIdRef] = (0, import_element10.useState)({
1729 current: null
1730 });
1731 const focusWidget = (0, import_element10.useCallback)(
1732 (widgetId) => {
1733 for (const sidebarControl of sidebarControls) {
1734 const widgets = sidebarControl.setting.get();
1735 if (widgets.includes(widgetId)) {
1736 sidebarControl.sectionInstance.expand({
1737 // Schedule it after the complete callback so that
1738 // it won't be overridden by the "Back" button focus.
1739 completeCallback() {
1740 setFocusedWidgetIdRef({ current: widgetId });
1741 }
1742 });
1743 break;
1744 }
1745 }
1746 },
1747 [sidebarControls]
1748 );
1749 (0, import_element10.useEffect)(() => {
1750 function handleFocus(settingId) {
1751 const widgetId = settingIdToWidgetId(settingId);
1752 focusWidget(widgetId);
1753 }
1754 let previewBound = false;
1755 function handleReady() {
1756 api.previewer.preview.bind(
1757 "focus-control-for-setting",
1758 handleFocus
1759 );
1760 previewBound = true;
1761 }
1762 api.previewer.bind("ready", handleReady);
1763 return () => {
1764 api.previewer.unbind("ready", handleReady);
1765 if (previewBound) {
1766 api.previewer.preview.unbind(
1767 "focus-control-for-setting",
1768 handleFocus
1769 );
1770 }
1771 };
1772 }, [api, focusWidget]);
1773 const context = (0, import_element10.useMemo)(
1774 () => [focusedWidgetIdRef, focusWidget],
1775 [focusedWidgetIdRef, focusWidget]
1776 );
1777 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FocusControlContext.Provider, { value: context, children });
1778 }
1779 var useFocusControl = () => (0, import_element10.useContext)(FocusControlContext);
1780
1781 // packages/customize-widgets/build-module/components/focus-control/use-blocks-focus-control.mjs
1782 function useBlocksFocusControl(blocks) {
1783 const { selectBlock } = (0, import_data8.useDispatch)(import_block_editor5.store);
1784 const [focusedWidgetIdRef] = useFocusControl();
1785 const blocksRef = (0, import_element11.useRef)(blocks);
1786 (0, import_element11.useEffect)(() => {
1787 blocksRef.current = blocks;
1788 }, [blocks]);
1789 (0, import_element11.useEffect)(() => {
1790 if (focusedWidgetIdRef.current) {
1791 const focusedBlock = blocksRef.current.find(
1792 (block) => (0, import_widgets3.getWidgetIdFromBlock)(block) === focusedWidgetIdRef.current
1793 );
1794 if (focusedBlock) {
1795 selectBlock(focusedBlock.clientId);
1796 const blockNode = document.querySelector(
1797 `[data-block="${focusedBlock.clientId}"]`
1798 );
1799 blockNode?.focus();
1800 }
1801 }
1802 }, [focusedWidgetIdRef, selectBlock]);
1803 }
1804
1805 // packages/customize-widgets/build-module/lock-unlock.mjs
1806 var import_private_apis = __toESM(require_private_apis(), 1);
1807 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
1808 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
1809 "@wordpress/customize-widgets"
1810 );
1811
1812 // packages/customize-widgets/build-module/components/sidebar-block-editor/sidebar-editor-provider.mjs
1813 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
1814 var { ExperimentalBlockEditorProvider } = unlock(import_block_editor6.privateApis);
1815 function SidebarEditorProvider({
1816 sidebar,
1817 settings,
1818 children
1819 }) {
1820 const [blocks, onInput, onChange] = useSidebarBlockEditor(sidebar);
1821 useBlocksFocusControl(blocks);
1822 return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1823 ExperimentalBlockEditorProvider,
1824 {
1825 value: blocks,
1826 onInput,
1827 onChange,
1828 settings,
1829 useSubRegistry: false,
1830 children
1831 }
1832 );
1833 }
1834
1835 // packages/customize-widgets/build-module/components/welcome-guide/index.mjs
1836 var import_i18n8 = __toESM(require_i18n(), 1);
1837 var import_components7 = __toESM(require_components(), 1);
1838 var import_data9 = __toESM(require_data(), 1);
1839 var import_preferences2 = __toESM(require_preferences(), 1);
1840 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
1841 function WelcomeGuide({ sidebar }) {
1842 const { toggle } = (0, import_data9.useDispatch)(import_preferences2.store);
1843 const isEntirelyBlockWidgets = sidebar.getWidgets().every((widget) => widget.id.startsWith("block-"));
1844 return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "customize-widgets-welcome-guide", children: [
1845 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "customize-widgets-welcome-guide__image__wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("picture", { children: [
1846 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1847 "source",
1848 {
1849 srcSet: "https://s.w.org/images/block-editor/welcome-editor.svg",
1850 media: "(prefers-reduced-motion: reduce)"
1851 }
1852 ),
1853 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1854 "img",
1855 {
1856 className: "customize-widgets-welcome-guide__image",
1857 src: "https://s.w.org/images/block-editor/welcome-editor.gif",
1858 width: "312",
1859 height: "240",
1860 alt: ""
1861 }
1862 )
1863 ] }) }),
1864 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "customize-widgets-welcome-guide__heading", children: (0, import_i18n8.__)("Welcome to block Widgets") }),
1865 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "customize-widgets-welcome-guide__text", children: isEntirelyBlockWidgets ? (0, import_i18n8.__)(
1866 "Your theme provides different \u201Cblock\u201D areas for you to add and edit content.\xA0Try adding a search bar, social icons, or other types of blocks here and see how they\u2019ll look on your site."
1867 ) : (0, import_i18n8.__)(
1868 "You can now add any block to your site\u2019s widget areas. Don\u2019t worry, all of your favorite widgets still work flawlessly."
1869 ) }),
1870 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1871 import_components7.Button,
1872 {
1873 size: "compact",
1874 variant: "primary",
1875 onClick: () => toggle("core/customize-widgets", "welcomeGuide"),
1876 children: (0, import_i18n8.__)("Got it")
1877 }
1878 ),
1879 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("hr", { className: "customize-widgets-welcome-guide__separator" }),
1880 !isEntirelyBlockWidgets && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "customize-widgets-welcome-guide__more-info", children: [
1881 (0, import_i18n8.__)("Want to stick with the old widgets?"),
1882 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("br", {}),
1883 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1884 import_components7.ExternalLink,
1885 {
1886 href: (0, import_i18n8.__)(
1887 "https://wordpress.org/plugins/classic-widgets/"
1888 ),
1889 children: (0, import_i18n8.__)("Get the Classic Widgets plugin.")
1890 }
1891 )
1892 ] }),
1893 /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "customize-widgets-welcome-guide__more-info", children: [
1894 (0, import_i18n8.__)("New to the block editor?"),
1895 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("br", {}),
1896 /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1897 import_components7.ExternalLink,
1898 {
1899 href: (0, import_i18n8.__)(
1900 "https://wordpress.org/documentation/article/wordpress-block-editor/"
1901 ),
1902 children: (0, import_i18n8.__)("Here's a detailed guide.")
1903 }
1904 )
1905 ] })
1906 ] });
1907 }
1908
1909 // packages/customize-widgets/build-module/components/keyboard-shortcuts/index.mjs
1910 var import_element12 = __toESM(require_element(), 1);
1911 var import_keyboard_shortcuts4 = __toESM(require_keyboard_shortcuts(), 1);
1912 var import_keycodes4 = __toESM(require_keycodes(), 1);
1913 var import_data10 = __toESM(require_data(), 1);
1914 var import_i18n9 = __toESM(require_i18n(), 1);
1915 function KeyboardShortcuts({ undo, redo, save }) {
1916 (0, import_keyboard_shortcuts4.useShortcut)("core/customize-widgets/undo", (event) => {
1917 undo();
1918 event.preventDefault();
1919 });
1920 (0, import_keyboard_shortcuts4.useShortcut)("core/customize-widgets/redo", (event) => {
1921 redo();
1922 event.preventDefault();
1923 });
1924 (0, import_keyboard_shortcuts4.useShortcut)("core/customize-widgets/save", (event) => {
1925 event.preventDefault();
1926 save();
1927 });
1928 return null;
1929 }
1930 function KeyboardShortcutsRegister() {
1931 const { registerShortcut, unregisterShortcut } = (0, import_data10.useDispatch)(
1932 import_keyboard_shortcuts4.store
1933 );
1934 (0, import_element12.useEffect)(() => {
1935 registerShortcut({
1936 name: "core/customize-widgets/undo",
1937 category: "global",
1938 description: (0, import_i18n9.__)("Undo your last changes."),
1939 keyCombination: {
1940 modifier: "primary",
1941 character: "z"
1942 }
1943 });
1944 registerShortcut({
1945 name: "core/customize-widgets/redo",
1946 category: "global",
1947 description: (0, import_i18n9.__)("Redo your last undo."),
1948 keyCombination: {
1949 modifier: "primaryShift",
1950 character: "z"
1951 },
1952 // Disable on Apple OS because it conflicts with the browser's
1953 // history shortcut. It's a fine alias for both Windows and Linux.
1954 // Since there's no conflict for Ctrl+Shift+Z on both Windows and
1955 // Linux, we keep it as the default for consistency.
1956 aliases: (0, import_keycodes4.isAppleOS)() ? [] : [
1957 {
1958 modifier: "primary",
1959 character: "y"
1960 }
1961 ]
1962 });
1963 registerShortcut({
1964 name: "core/customize-widgets/save",
1965 category: "global",
1966 description: (0, import_i18n9.__)("Save your changes."),
1967 keyCombination: {
1968 modifier: "primary",
1969 character: "s"
1970 }
1971 });
1972 return () => {
1973 unregisterShortcut("core/customize-widgets/undo");
1974 unregisterShortcut("core/customize-widgets/redo");
1975 unregisterShortcut("core/customize-widgets/save");
1976 };
1977 }, [registerShortcut]);
1978 return null;
1979 }
1980 KeyboardShortcuts.Register = KeyboardShortcutsRegister;
1981 var keyboard_shortcuts_default = KeyboardShortcuts;
1982
1983 // packages/customize-widgets/build-module/components/block-appender/index.mjs
1984 var import_element13 = __toESM(require_element(), 1);
1985 var import_block_editor7 = __toESM(require_block_editor(), 1);
1986 var import_data11 = __toESM(require_data(), 1);
1987 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
1988 function BlockAppender(props) {
1989 const ref = (0, import_element13.useRef)();
1990 const isBlocksListEmpty = (0, import_data11.useSelect)(
1991 (select) => select(import_block_editor7.store).getBlockCount() === 0
1992 );
1993 (0, import_element13.useEffect)(() => {
1994 if (isBlocksListEmpty && ref.current) {
1995 const { ownerDocument } = ref.current;
1996 if (!ownerDocument.activeElement || ownerDocument.activeElement === ownerDocument.body) {
1997 ref.current.focus();
1998 }
1999 }
2000 }, [isBlocksListEmpty]);
2001 return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_block_editor7.ButtonBlockAppender, { ...props, ref });
2002 }
2003
2004 // packages/customize-widgets/build-module/components/sidebar-block-editor/index.mjs
2005 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
2006 var { ExperimentalBlockCanvas: BlockCanvas } = unlock(
2007 import_block_editor8.privateApis
2008 );
2009 var { BlockKeyboardShortcuts } = unlock(import_block_library.privateApis);
2010 function SidebarBlockEditor({
2011 blockEditorSettings,
2012 sidebar,
2013 inserter,
2014 inspector
2015 }) {
2016 const [isInserterOpened2, setIsInserterOpened2] = useInserter(inserter);
2017 const isMediumViewport = (0, import_compose3.useViewportMatch)("small");
2018 const {
2019 hasUploadPermissions,
2020 isFixedToolbarActive,
2021 keepCaretInsideBlock,
2022 isWelcomeGuideActive
2023 } = (0, import_data12.useSelect)((select) => {
2024 const { get } = select(import_preferences3.store);
2025 return {
2026 hasUploadPermissions: select(import_core_data.store).canUser("create", {
2027 kind: "postType",
2028 name: "attachment"
2029 }) ?? true,
2030 isFixedToolbarActive: !!get(
2031 "core/customize-widgets",
2032 "fixedToolbar"
2033 ),
2034 keepCaretInsideBlock: !!get(
2035 "core/customize-widgets",
2036 "keepCaretInsideBlock"
2037 ),
2038 isWelcomeGuideActive: !!get(
2039 "core/customize-widgets",
2040 "welcomeGuide"
2041 )
2042 };
2043 }, []);
2044 const settings = (0, import_element14.useMemo)(() => {
2045 let mediaUploadBlockEditor;
2046 if (hasUploadPermissions) {
2047 mediaUploadBlockEditor = ({ onError, ...argumentsObject }) => {
2048 (0, import_media_utils.uploadMedia)({
2049 wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes,
2050 onError: ({ message }) => onError(message),
2051 ...argumentsObject
2052 });
2053 };
2054 }
2055 return {
2056 ...blockEditorSettings,
2057 __experimentalSetIsInserterOpened: setIsInserterOpened2,
2058 mediaUpload: mediaUploadBlockEditor,
2059 hasFixedToolbar: isFixedToolbarActive || !isMediumViewport,
2060 keepCaretInsideBlock,
2061 editorTool: "edit",
2062 __unstableHasCustomAppender: true
2063 };
2064 }, [
2065 hasUploadPermissions,
2066 blockEditorSettings,
2067 isFixedToolbarActive,
2068 isMediumViewport,
2069 keepCaretInsideBlock,
2070 setIsInserterOpened2
2071 ]);
2072 if (isWelcomeGuideActive) {
2073 return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(WelcomeGuide, { sidebar });
2074 }
2075 return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
2076 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(keyboard_shortcuts_default.Register, {}),
2077 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(BlockKeyboardShortcuts, {}),
2078 /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(SidebarEditorProvider, { sidebar, settings, children: [
2079 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2080 keyboard_shortcuts_default,
2081 {
2082 undo: sidebar.undo,
2083 redo: sidebar.redo,
2084 save: sidebar.save
2085 }
2086 ),
2087 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2088 header_default,
2089 {
2090 sidebar,
2091 inserter,
2092 isInserterOpened: isInserterOpened2,
2093 setIsInserterOpened: setIsInserterOpened2,
2094 isFixedToolbarActive: isFixedToolbarActive || !isMediumViewport
2095 }
2096 ),
2097 (isFixedToolbarActive || !isMediumViewport) && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_block_editor8.BlockToolbar, { hideDragHandle: true }),
2098 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2099 BlockCanvas,
2100 {
2101 shouldIframe: false,
2102 styles: settings.defaultEditorStyles,
2103 height: "100%",
2104 children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_block_editor8.BlockList, { renderAppender: BlockAppender })
2105 }
2106 ),
2107 (0, import_element14.createPortal)(
2108 // This is a temporary hack to prevent button component inside <BlockInspector>
2109 // from submitting form when type="button" is not specified.
2110 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("form", { onSubmit: (event) => event.preventDefault(), children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_block_editor8.BlockInspector, {}) }),
2111 inspector.contentContainer[0]
2112 )
2113 ] }),
2114 /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_block_editor8.__unstableBlockSettingsMenuFirstItem, { children: ({ onClose }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2115 block_inspector_button_default,
2116 {
2117 inspector,
2118 closeMenu: onClose
2119 }
2120 ) })
2121 ] });
2122 }
2123
2124 // packages/customize-widgets/build-module/components/sidebar-controls/index.mjs
2125 var import_element15 = __toESM(require_element(), 1);
2126 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1);
2127 var SidebarControlsContext = (0, import_element15.createContext)();
2128 SidebarControlsContext.displayName = "SidebarControlsContext";
2129 function SidebarControls({
2130 sidebarControls,
2131 activeSidebarControl,
2132 children
2133 }) {
2134 const context = (0, import_element15.useMemo)(
2135 () => ({
2136 sidebarControls,
2137 activeSidebarControl
2138 }),
2139 [sidebarControls, activeSidebarControl]
2140 );
2141 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SidebarControlsContext.Provider, { value: context, children });
2142 }
2143 function useSidebarControls() {
2144 const { sidebarControls } = (0, import_element15.useContext)(SidebarControlsContext);
2145 return sidebarControls;
2146 }
2147 function useActiveSidebarControl() {
2148 const { activeSidebarControl } = (0, import_element15.useContext)(SidebarControlsContext);
2149 return activeSidebarControl;
2150 }
2151
2152 // packages/customize-widgets/build-module/components/customize-widgets/use-clear-selected-block.mjs
2153 var import_element16 = __toESM(require_element(), 1);
2154 var import_data13 = __toESM(require_data(), 1);
2155 var import_block_editor9 = __toESM(require_block_editor(), 1);
2156 function useClearSelectedBlock(sidebarControl, popoverRef) {
2157 const { hasSelectedBlock, hasMultiSelection } = (0, import_data13.useSelect)(import_block_editor9.store);
2158 const { clearSelectedBlock } = (0, import_data13.useDispatch)(import_block_editor9.store);
2159 (0, import_element16.useEffect)(() => {
2160 if (popoverRef.current && sidebarControl) {
2161 let handleClearSelectedBlock = function(element) {
2162 if (
2163 // 1. Make sure there are blocks being selected.
2164 (hasSelectedBlock() || hasMultiSelection()) && // 2. The element should exist in the DOM (not deleted).
2165 element && ownerDocument.contains(element) && // 3. It should also not exist in the container, the popover, nor the dialog.
2166 !container.contains(element) && !popoverRef.current.contains(element) && !element.closest('[role="dialog"]') && // 4. The inspector should not be opened.
2167 !inspector.expanded()
2168 ) {
2169 clearSelectedBlock();
2170 }
2171 }, handleMouseDown = function(event) {
2172 handleClearSelectedBlock(event.target);
2173 }, handleBlur = function() {
2174 handleClearSelectedBlock(ownerDocument.activeElement);
2175 };
2176 const inspector = sidebarControl.inspector;
2177 const container = sidebarControl.container[0];
2178 const ownerDocument = container.ownerDocument;
2179 const ownerWindow = ownerDocument.defaultView;
2180 ownerDocument.addEventListener("mousedown", handleMouseDown);
2181 ownerWindow.addEventListener("blur", handleBlur);
2182 return () => {
2183 ownerDocument.removeEventListener(
2184 "mousedown",
2185 handleMouseDown
2186 );
2187 ownerWindow.removeEventListener("blur", handleBlur);
2188 };
2189 }
2190 }, [
2191 popoverRef,
2192 sidebarControl,
2193 hasSelectedBlock,
2194 hasMultiSelection,
2195 clearSelectedBlock
2196 ]);
2197 }
2198
2199 // packages/customize-widgets/build-module/components/customize-widgets/index.mjs
2200 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
2201 function CustomizeWidgets({
2202 api,
2203 sidebarControls,
2204 blockEditorSettings
2205 }) {
2206 const [activeSidebarControl, setActiveSidebarControl] = (0, import_element17.useState)(null);
2207 const parentContainer = document.getElementById(
2208 "customize-theme-controls"
2209 );
2210 const popoverRef = (0, import_element17.useRef)();
2211 useClearSelectedBlock(activeSidebarControl, popoverRef);
2212 (0, import_element17.useEffect)(() => {
2213 const unsubscribers = sidebarControls.map(
2214 (sidebarControl) => sidebarControl.subscribe((expanded) => {
2215 if (expanded) {
2216 setActiveSidebarControl(sidebarControl);
2217 }
2218 })
2219 );
2220 return () => {
2221 unsubscribers.forEach((unsubscriber) => unsubscriber());
2222 };
2223 }, [sidebarControls]);
2224 const activeSidebar = activeSidebarControl && (0, import_element17.createPortal)(
2225 /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2226 SidebarBlockEditor,
2227 {
2228 blockEditorSettings,
2229 sidebar: activeSidebarControl.sidebarAdapter,
2230 inserter: activeSidebarControl.inserter,
2231 inspector: activeSidebarControl.inspector
2232 },
2233 activeSidebarControl.id
2234 ) }),
2235 activeSidebarControl.container[0]
2236 );
2237 const popover = parentContainer && (0, import_element17.createPortal)(
2238 /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "customize-widgets-popover", ref: popoverRef, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_components8.Popover.Slot, {}) }),
2239 parentContainer
2240 );
2241 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_components8.SlotFillProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2242 SidebarControls,
2243 {
2244 sidebarControls,
2245 activeSidebarControl,
2246 children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(FocusControl, { api, sidebarControls, children: [
2247 activeSidebar,
2248 popover
2249 ] })
2250 }
2251 ) });
2252 }
2253
2254 // packages/customize-widgets/build-module/controls/sidebar-section.mjs
2255 var import_i18n10 = __toESM(require_i18n(), 1);
2256
2257 // packages/customize-widgets/build-module/controls/inspector-section.mjs
2258 function getInspectorSection() {
2259 const {
2260 wp: { customize }
2261 } = window;
2262 return class InspectorSection extends customize.Section {
2263 constructor(id, options) {
2264 super(id, options);
2265 this.parentSection = options.parentSection;
2266 this.returnFocusWhenClose = null;
2267 this._isOpen = false;
2268 }
2269 get isOpen() {
2270 return this._isOpen;
2271 }
2272 set isOpen(value) {
2273 this._isOpen = value;
2274 this.triggerActiveCallbacks();
2275 }
2276 ready() {
2277 this.contentContainer[0].classList.add(
2278 "customize-widgets-layout__inspector"
2279 );
2280 }
2281 isContextuallyActive() {
2282 return this.isOpen;
2283 }
2284 onChangeExpanded(expanded, args) {
2285 super.onChangeExpanded(expanded, args);
2286 if (this.parentSection && !args.unchanged) {
2287 if (expanded) {
2288 this.parentSection.collapse({
2289 manualTransition: true
2290 });
2291 } else {
2292 this.parentSection.expand({
2293 manualTransition: true,
2294 completeCallback: () => {
2295 if (this.returnFocusWhenClose && !this.contentContainer[0].contains(
2296 this.returnFocusWhenClose
2297 )) {
2298 this.returnFocusWhenClose.focus();
2299 }
2300 }
2301 });
2302 }
2303 }
2304 }
2305 open({ returnFocusWhenClose } = {}) {
2306 this.isOpen = true;
2307 this.returnFocusWhenClose = returnFocusWhenClose;
2308 this.expand({
2309 allowMultiple: true
2310 });
2311 }
2312 close() {
2313 this.collapse({
2314 allowMultiple: true
2315 });
2316 }
2317 collapse(options) {
2318 this.isOpen = false;
2319 super.collapse(options);
2320 }
2321 triggerActiveCallbacks() {
2322 this.active.callbacks.fireWith(this.active, [false, true]);
2323 }
2324 };
2325 }
2326
2327 // packages/customize-widgets/build-module/controls/sidebar-section.mjs
2328 var getInspectorSectionId = (sidebarId) => `widgets-inspector-${sidebarId}`;
2329 function getSidebarSection() {
2330 const {
2331 wp: { customize }
2332 } = window;
2333 const reduceMotionMediaQuery = window.matchMedia(
2334 "(prefers-reduced-motion: reduce)"
2335 );
2336 let isReducedMotion = reduceMotionMediaQuery.matches;
2337 reduceMotionMediaQuery.addEventListener("change", (event) => {
2338 isReducedMotion = event.matches;
2339 });
2340 return class SidebarSection extends customize.Section {
2341 ready() {
2342 const InspectorSection = getInspectorSection();
2343 this.inspector = new InspectorSection(
2344 getInspectorSectionId(this.id),
2345 {
2346 title: (0, import_i18n10.__)("Block Settings"),
2347 parentSection: this,
2348 customizeAction: [
2349 (0, import_i18n10.__)("Customizing"),
2350 (0, import_i18n10.__)("Widgets"),
2351 this.params.title
2352 ].join(" \u25B8 ")
2353 }
2354 );
2355 customize.section.add(this.inspector);
2356 this.contentContainer[0].classList.add(
2357 "customize-widgets__sidebar-section"
2358 );
2359 }
2360 hasSubSectionOpened() {
2361 return this.inspector.expanded();
2362 }
2363 onChangeExpanded(expanded, _args) {
2364 const controls = this.controls();
2365 const args = {
2366 ..._args,
2367 completeCallback() {
2368 controls.forEach((control) => {
2369 control.onChangeSectionExpanded?.(expanded, args);
2370 });
2371 _args.completeCallback?.();
2372 }
2373 };
2374 if (args.manualTransition) {
2375 if (expanded) {
2376 this.contentContainer.addClass(["busy", "open"]);
2377 this.contentContainer.removeClass("is-sub-section-open");
2378 this.contentContainer.closest(".wp-full-overlay").addClass("section-open");
2379 } else {
2380 this.contentContainer.addClass([
2381 "busy",
2382 "is-sub-section-open"
2383 ]);
2384 this.contentContainer.closest(".wp-full-overlay").addClass("section-open");
2385 this.contentContainer.removeClass("open");
2386 }
2387 const handleTransitionEnd = () => {
2388 this.contentContainer.removeClass("busy");
2389 args.completeCallback();
2390 };
2391 if (isReducedMotion) {
2392 handleTransitionEnd();
2393 } else {
2394 this.contentContainer.one(
2395 "transitionend",
2396 handleTransitionEnd
2397 );
2398 }
2399 } else {
2400 super.onChangeExpanded(expanded, args);
2401 }
2402 }
2403 };
2404 }
2405
2406 // packages/customize-widgets/build-module/controls/sidebar-control.mjs
2407 var import_data15 = __toESM(require_data(), 1);
2408
2409 // packages/customize-widgets/build-module/components/sidebar-block-editor/sidebar-adapter.mjs
2410 var { wp } = window;
2411 function parseWidgetId(widgetId) {
2412 const matches = widgetId.match(/^(.+)-(\d+)$/);
2413 if (matches) {
2414 return {
2415 idBase: matches[1],
2416 number: parseInt(matches[2], 10)
2417 };
2418 }
2419 return { idBase: widgetId };
2420 }
2421 function widgetIdToSettingId(widgetId) {
2422 const { idBase, number } = parseWidgetId(widgetId);
2423 if (number) {
2424 return `widget_${idBase}[${number}]`;
2425 }
2426 return `widget_${idBase}`;
2427 }
2428 function debounce(leading, callback, timeout) {
2429 let isLeading = false;
2430 let timerID;
2431 function debounced(...args) {
2432 const result = (isLeading ? callback : leading).apply(this, args);
2433 isLeading = true;
2434 clearTimeout(timerID);
2435 timerID = setTimeout(() => {
2436 isLeading = false;
2437 }, timeout);
2438 return result;
2439 }
2440 debounced.cancel = () => {
2441 isLeading = false;
2442 clearTimeout(timerID);
2443 };
2444 return debounced;
2445 }
2446 var SidebarAdapter = class {
2447 constructor(setting, api) {
2448 this.setting = setting;
2449 this.api = api;
2450 this.locked = false;
2451 this.widgetsCache = /* @__PURE__ */ new WeakMap();
2452 this.subscribers = /* @__PURE__ */ new Set();
2453 this.history = [
2454 this._getWidgetIds().map(
2455 (widgetId) => this.getWidget(widgetId)
2456 )
2457 ];
2458 this.historyIndex = 0;
2459 this.historySubscribers = /* @__PURE__ */ new Set();
2460 this._debounceSetHistory = debounce(
2461 this._pushHistory,
2462 this._replaceHistory,
2463 1e3
2464 );
2465 this.setting.bind(this._handleSettingChange.bind(this));
2466 this.api.bind("change", this._handleAllSettingsChange.bind(this));
2467 this.undo = this.undo.bind(this);
2468 this.redo = this.redo.bind(this);
2469 this.save = this.save.bind(this);
2470 }
2471 subscribe(callback) {
2472 this.subscribers.add(callback);
2473 return () => {
2474 this.subscribers.delete(callback);
2475 };
2476 }
2477 getWidgets() {
2478 return this.history[this.historyIndex];
2479 }
2480 _emit(...args) {
2481 for (const callback of this.subscribers) {
2482 callback(...args);
2483 }
2484 }
2485 _getWidgetIds() {
2486 return this.setting.get();
2487 }
2488 _pushHistory() {
2489 this.history = [
2490 ...this.history.slice(0, this.historyIndex + 1),
2491 this._getWidgetIds().map(
2492 (widgetId) => this.getWidget(widgetId)
2493 )
2494 ];
2495 this.historyIndex += 1;
2496 this.historySubscribers.forEach((listener) => listener());
2497 }
2498 _replaceHistory() {
2499 this.history[this.historyIndex] = this._getWidgetIds().map(
2500 (widgetId) => this.getWidget(widgetId)
2501 );
2502 }
2503 _handleSettingChange() {
2504 if (this.locked) {
2505 return;
2506 }
2507 const prevWidgets = this.getWidgets();
2508 this._pushHistory();
2509 this._emit(prevWidgets, this.getWidgets());
2510 }
2511 _handleAllSettingsChange(setting) {
2512 if (this.locked) {
2513 return;
2514 }
2515 if (!setting.id.startsWith("widget_")) {
2516 return;
2517 }
2518 const widgetId = settingIdToWidgetId(setting.id);
2519 if (!this.setting.get().includes(widgetId)) {
2520 return;
2521 }
2522 const prevWidgets = this.getWidgets();
2523 this._pushHistory();
2524 this._emit(prevWidgets, this.getWidgets());
2525 }
2526 _createWidget(widget) {
2527 const widgetModel = wp.customize.Widgets.availableWidgets.findWhere({
2528 id_base: widget.idBase
2529 });
2530 let number = widget.number;
2531 if (widgetModel.get("is_multi") && !number) {
2532 widgetModel.set(
2533 "multi_number",
2534 widgetModel.get("multi_number") + 1
2535 );
2536 number = widgetModel.get("multi_number");
2537 }
2538 const settingId = number ? `widget_${widget.idBase}[${number}]` : `widget_${widget.idBase}`;
2539 const settingArgs = {
2540 transport: wp.customize.Widgets.data.selectiveRefreshableWidgets[widgetModel.get("id_base")] ? "postMessage" : "refresh",
2541 previewer: this.setting.previewer
2542 };
2543 const setting = this.api.create(
2544 settingId,
2545 settingId,
2546 "",
2547 settingArgs
2548 );
2549 setting.set(widget.instance);
2550 const widgetId = settingIdToWidgetId(settingId);
2551 return widgetId;
2552 }
2553 _removeWidget(widget) {
2554 const settingId = widgetIdToSettingId(widget.id);
2555 const setting = this.api(settingId);
2556 if (setting) {
2557 const instance = setting.get();
2558 this.widgetsCache.delete(instance);
2559 }
2560 this.api.remove(settingId);
2561 }
2562 _updateWidget(widget) {
2563 const prevWidget = this.getWidget(widget.id);
2564 if (prevWidget === widget) {
2565 return widget.id;
2566 }
2567 if (prevWidget.idBase && widget.idBase && prevWidget.idBase === widget.idBase) {
2568 const settingId = widgetIdToSettingId(widget.id);
2569 this.api(settingId).set(widget.instance);
2570 return widget.id;
2571 }
2572 this._removeWidget(widget);
2573 return this._createWidget(widget);
2574 }
2575 getWidget(widgetId) {
2576 if (!widgetId) {
2577 return null;
2578 }
2579 const { idBase, number } = parseWidgetId(widgetId);
2580 const settingId = widgetIdToSettingId(widgetId);
2581 const setting = this.api(settingId);
2582 if (!setting) {
2583 return null;
2584 }
2585 const instance = setting.get();
2586 if (this.widgetsCache.has(instance)) {
2587 return this.widgetsCache.get(instance);
2588 }
2589 const widget = {
2590 id: widgetId,
2591 idBase,
2592 number,
2593 instance
2594 };
2595 this.widgetsCache.set(instance, widget);
2596 return widget;
2597 }
2598 _updateWidgets(nextWidgets) {
2599 this.locked = true;
2600 const addedWidgetIds = [];
2601 const nextWidgetIds = nextWidgets.map((nextWidget) => {
2602 if (nextWidget.id && this.getWidget(nextWidget.id)) {
2603 addedWidgetIds.push(null);
2604 return this._updateWidget(nextWidget);
2605 }
2606 const widgetId = this._createWidget(nextWidget);
2607 addedWidgetIds.push(widgetId);
2608 return widgetId;
2609 });
2610 const deletedWidgets = this.getWidgets().filter(
2611 (widget) => !nextWidgetIds.includes(widget.id)
2612 );
2613 deletedWidgets.forEach((widget) => this._removeWidget(widget));
2614 this.setting.set(nextWidgetIds);
2615 this.locked = false;
2616 return addedWidgetIds;
2617 }
2618 setWidgets(nextWidgets) {
2619 const addedWidgetIds = this._updateWidgets(nextWidgets);
2620 this._debounceSetHistory();
2621 return addedWidgetIds;
2622 }
2623 /**
2624 * Undo/Redo related features
2625 */
2626 hasUndo() {
2627 return this.historyIndex > 0;
2628 }
2629 hasRedo() {
2630 return this.historyIndex < this.history.length - 1;
2631 }
2632 _seek(historyIndex) {
2633 const currentWidgets = this.getWidgets();
2634 this.historyIndex = historyIndex;
2635 const widgets = this.history[this.historyIndex];
2636 this._updateWidgets(widgets);
2637 this._emit(currentWidgets, this.getWidgets());
2638 this.historySubscribers.forEach((listener) => listener());
2639 this._debounceSetHistory.cancel();
2640 }
2641 undo() {
2642 if (!this.hasUndo()) {
2643 return;
2644 }
2645 this._seek(this.historyIndex - 1);
2646 }
2647 redo() {
2648 if (!this.hasRedo()) {
2649 return;
2650 }
2651 this._seek(this.historyIndex + 1);
2652 }
2653 subscribeHistory(listener) {
2654 this.historySubscribers.add(listener);
2655 return () => {
2656 this.historySubscribers.delete(listener);
2657 };
2658 }
2659 save() {
2660 this.api.previewer.save();
2661 }
2662 };
2663
2664 // packages/customize-widgets/build-module/controls/inserter-outer-section.mjs
2665 var import_keycodes5 = __toESM(require_keycodes(), 1);
2666 var import_dom = __toESM(require_dom(), 1);
2667 var import_data14 = __toESM(require_data(), 1);
2668 function getInserterOuterSection() {
2669 const {
2670 wp: { customize }
2671 } = window;
2672 const OuterSection = customize.OuterSection;
2673 customize.OuterSection = class extends OuterSection {
2674 onChangeExpanded(expanded, args) {
2675 if (expanded) {
2676 customize.section.each((section) => {
2677 if (section.params.type === "outer" && section.id !== this.id) {
2678 if (section.expanded()) {
2679 section.collapse();
2680 }
2681 }
2682 });
2683 }
2684 return super.onChangeExpanded(expanded, args);
2685 }
2686 };
2687 customize.sectionConstructor.outer = customize.OuterSection;
2688 return class InserterOuterSection extends customize.OuterSection {
2689 constructor(...args) {
2690 super(...args);
2691 this.params.type = "outer";
2692 this.activeElementBeforeExpanded = null;
2693 const ownerWindow = this.contentContainer[0].ownerDocument.defaultView;
2694 ownerWindow.addEventListener(
2695 "keydown",
2696 (event) => {
2697 if (this.expanded() && (event.keyCode === import_keycodes5.ESCAPE || event.code === "Escape") && !event.defaultPrevented) {
2698 event.preventDefault();
2699 event.stopPropagation();
2700 (0, import_data14.dispatch)(store).setIsInserterOpened(
2701 false
2702 );
2703 }
2704 },
2705 // Use capture mode to make this run before other event listeners.
2706 true
2707 );
2708 this.contentContainer.addClass("widgets-inserter");
2709 this.isFromInternalAction = false;
2710 this.expanded.bind(() => {
2711 if (!this.isFromInternalAction) {
2712 (0, import_data14.dispatch)(store).setIsInserterOpened(
2713 this.expanded()
2714 );
2715 }
2716 this.isFromInternalAction = false;
2717 });
2718 }
2719 open() {
2720 if (!this.expanded()) {
2721 const contentContainer = this.contentContainer[0];
2722 this.activeElementBeforeExpanded = contentContainer.ownerDocument.activeElement;
2723 this.isFromInternalAction = true;
2724 this.expand({
2725 completeCallback() {
2726 const searchBox = import_dom.focus.tabbable.find(contentContainer)[1];
2727 if (searchBox) {
2728 searchBox.focus();
2729 }
2730 }
2731 });
2732 }
2733 }
2734 close() {
2735 if (this.expanded()) {
2736 const contentContainer = this.contentContainer[0];
2737 const activeElement = contentContainer.ownerDocument.activeElement;
2738 this.isFromInternalAction = true;
2739 this.collapse({
2740 completeCallback() {
2741 if (contentContainer.contains(activeElement)) {
2742 if (this.activeElementBeforeExpanded) {
2743 this.activeElementBeforeExpanded.focus();
2744 }
2745 }
2746 }
2747 });
2748 }
2749 }
2750 };
2751 }
2752
2753 // packages/customize-widgets/build-module/controls/sidebar-control.mjs
2754 var getInserterId = (controlId) => `widgets-inserter-${controlId}`;
2755 function getSidebarControl() {
2756 const {
2757 wp: { customize }
2758 } = window;
2759 return class SidebarControl extends customize.Control {
2760 constructor(...args) {
2761 super(...args);
2762 this.subscribers = /* @__PURE__ */ new Set();
2763 }
2764 ready() {
2765 const InserterOuterSection = getInserterOuterSection();
2766 this.inserter = new InserterOuterSection(
2767 getInserterId(this.id),
2768 {}
2769 );
2770 customize.section.add(this.inserter);
2771 this.sectionInstance = customize.section(this.section());
2772 this.inspector = this.sectionInstance.inspector;
2773 this.sidebarAdapter = new SidebarAdapter(this.setting, customize);
2774 }
2775 subscribe(callback) {
2776 this.subscribers.add(callback);
2777 return () => {
2778 this.subscribers.delete(callback);
2779 };
2780 }
2781 onChangeSectionExpanded(expanded, args) {
2782 if (!args.unchanged) {
2783 if (!expanded) {
2784 (0, import_data15.dispatch)(store).setIsInserterOpened(
2785 false
2786 );
2787 }
2788 this.subscribers.forEach(
2789 (subscriber) => subscriber(expanded, args)
2790 );
2791 }
2792 }
2793 };
2794 }
2795
2796 // packages/customize-widgets/build-module/filters/move-to-sidebar.mjs
2797 var import_block_editor10 = __toESM(require_block_editor(), 1);
2798 var import_compose4 = __toESM(require_compose(), 1);
2799 var import_data16 = __toESM(require_data(), 1);
2800 var import_hooks2 = __toESM(require_hooks(), 1);
2801 var import_widgets4 = __toESM(require_widgets(), 1);
2802 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1);
2803 var withMoveToSidebarToolbarItem = (0, import_compose4.createHigherOrderComponent)(
2804 (BlockEdit) => (props) => {
2805 let widgetId = (0, import_widgets4.getWidgetIdFromBlock)(props);
2806 const sidebarControls = useSidebarControls();
2807 const activeSidebarControl = useActiveSidebarControl();
2808 const hasMultipleSidebars = sidebarControls?.length > 1;
2809 const blockName = props.name;
2810 const clientId = props.clientId;
2811 const canInsertBlockInSidebar = (0, import_data16.useSelect)(
2812 (select) => {
2813 return select(import_block_editor10.store).canInsertBlockType(
2814 blockName,
2815 ""
2816 );
2817 },
2818 [blockName]
2819 );
2820 const block = (0, import_data16.useSelect)(
2821 (select) => select(import_block_editor10.store).getBlock(clientId),
2822 [clientId]
2823 );
2824 const { removeBlock } = (0, import_data16.useDispatch)(import_block_editor10.store);
2825 const [, focusWidget] = useFocusControl();
2826 function moveToSidebar(sidebarControlId) {
2827 const newSidebarControl = sidebarControls.find(
2828 (sidebarControl) => sidebarControl.id === sidebarControlId
2829 );
2830 if (widgetId) {
2831 const oldSetting = activeSidebarControl.setting;
2832 const newSetting = newSidebarControl.setting;
2833 oldSetting(oldSetting().filter((id) => id !== widgetId));
2834 newSetting([...newSetting(), widgetId]);
2835 } else {
2836 const sidebarAdapter = newSidebarControl.sidebarAdapter;
2837 removeBlock(clientId);
2838 const addedWidgetIds = sidebarAdapter.setWidgets([
2839 ...sidebarAdapter.getWidgets(),
2840 blockToWidget(block)
2841 ]);
2842 widgetId = addedWidgetIds.reverse().find((id) => !!id);
2843 }
2844 focusWidget(widgetId);
2845 }
2846 return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
2847 /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(BlockEdit, { ...props }, "edit"),
2848 hasMultipleSidebars && canInsertBlockInSidebar && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_block_editor10.BlockControls, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2849 import_widgets4.MoveToWidgetArea,
2850 {
2851 widgetAreas: sidebarControls.map(
2852 (sidebarControl) => ({
2853 id: sidebarControl.id,
2854 name: sidebarControl.params.label,
2855 description: sidebarControl.params.description
2856 })
2857 ),
2858 currentWidgetAreaId: activeSidebarControl?.id,
2859 onSelect: moveToSidebar
2860 }
2861 ) })
2862 ] });
2863 },
2864 "withMoveToSidebarToolbarItem"
2865 );
2866 (0, import_hooks2.addFilter)(
2867 "editor.BlockEdit",
2868 "core/customize-widgets/block-edit",
2869 withMoveToSidebarToolbarItem
2870 );
2871
2872 // packages/customize-widgets/build-module/filters/replace-media-upload.mjs
2873 var import_hooks3 = __toESM(require_hooks(), 1);
2874 var import_media_utils2 = __toESM(require_media_utils(), 1);
2875 var replaceMediaUpload = () => import_media_utils2.MediaUpload;
2876 (0, import_hooks3.addFilter)(
2877 "editor.MediaUpload",
2878 "core/edit-widgets/replace-media-upload",
2879 replaceMediaUpload
2880 );
2881
2882 // packages/customize-widgets/build-module/filters/wide-widget-display.mjs
2883 var import_compose5 = __toESM(require_compose(), 1);
2884 var import_hooks4 = __toESM(require_hooks(), 1);
2885 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1);
2886 var { wp: wp2 } = window;
2887 var withWideWidgetDisplay = (0, import_compose5.createHigherOrderComponent)(
2888 (BlockEdit) => (props) => {
2889 const { idBase } = props.attributes;
2890 const isWide = wp2.customize.Widgets.data.availableWidgets.find(
2891 (widget) => widget.id_base === idBase
2892 )?.is_wide ?? false;
2893 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(BlockEdit, { ...props, isWide }, "edit");
2894 },
2895 "withWideWidgetDisplay"
2896 );
2897 (0, import_hooks4.addFilter)(
2898 "editor.BlockEdit",
2899 "core/customize-widgets/wide-widget-display",
2900 withWideWidgetDisplay
2901 );
2902
2903 // packages/customize-widgets/build-module/index.mjs
2904 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
2905 var { wp: wp3 } = window;
2906 var DISABLED_BLOCKS = [
2907 "core/more",
2908 "core/block",
2909 "core/freeform",
2910 "core/template-part"
2911 ];
2912 var ENABLE_EXPERIMENTAL_FSE_BLOCKS = false;
2913 function initialize(editorName, blockEditorSettings) {
2914 (0, import_data17.dispatch)(import_preferences4.store).setDefaults("core/customize-widgets", {
2915 fixedToolbar: false,
2916 welcomeGuide: true
2917 });
2918 (0, import_data17.dispatch)(import_blocks2.store).reapplyBlockTypeFilters();
2919 const coreBlocks = (0, import_block_library2.__experimentalGetCoreBlocks)().filter((block) => {
2920 return !(DISABLED_BLOCKS.includes(block.name) || block.name.startsWith("core/post") || block.name.startsWith("core/query") || block.name.startsWith("core/site") || block.name.startsWith("core/navigation") || block.name.startsWith("core/term"));
2921 });
2922 (0, import_block_library2.registerCoreBlocks)(coreBlocks);
2923 (0, import_widgets5.registerLegacyWidgetBlock)();
2924 if (true) {
2925 (0, import_block_library2.__experimentalRegisterExperimentalCoreBlocks)({
2926 enableFSEBlocks: ENABLE_EXPERIMENTAL_FSE_BLOCKS
2927 });
2928 }
2929 (0, import_widgets5.registerLegacyWidgetVariations)(blockEditorSettings);
2930 (0, import_widgets5.registerWidgetGroupBlock)();
2931 (0, import_blocks2.setFreeformContentHandlerName)("core/html");
2932 const SidebarControl = getSidebarControl(blockEditorSettings);
2933 wp3.customize.sectionConstructor.sidebar = getSidebarSection();
2934 wp3.customize.controlConstructor.sidebar_block_editor = SidebarControl;
2935 const container = document.createElement("div");
2936 document.body.appendChild(container);
2937 wp3.customize.bind("ready", () => {
2938 const sidebarControls = [];
2939 wp3.customize.control.each((control) => {
2940 if (control instanceof SidebarControl) {
2941 sidebarControls.push(control);
2942 }
2943 });
2944 (0, import_element18.createRoot)(container).render(
2945 /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_element18.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2946 CustomizeWidgets,
2947 {
2948 api: wp3.customize,
2949 sidebarControls,
2950 blockEditorSettings
2951 }
2952 ) })
2953 );
2954 });
2955 }
2956 return __toCommonJS(index_exports);
2957 })();
2958 //# sourceMappingURL=index.js.map
2959