: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
const [[hasUndo, hasRedo], setUndoRedo] = (0,external_wp_element_namespaceObject.useState)([sidebar.hasUndo(), sidebar.hasRedo()]);
const shortcut = (0,external_wp_keycodes_namespaceObject.isAppleOS)() ? external_wp_keycodes_namespaceObject.displayShortcut.primaryShift('z') : external_wp_keycodes_namespaceObject.displayShortcut.primary('y');
(0,external_wp_element_namespaceObject.useEffect)(() => {
return sidebar.subscribeHistory(() => {
setUndoRedo([sidebar.hasUndo(), sidebar.hasRedo()]);
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
className: dist_clsx('customize-widgets-header', {
'is-fixed-toolbar-active': isFixedToolbarActive
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_blockEditor_namespaceObject.NavigableToolbar, {
className: "customize-widgets-header-toolbar",
"aria-label": (0,external_wp_i18n_namespaceObject.__)('Document tools'),
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_undo : library_redo
/* translators: button label text should, if possible, be under 16 characters. */,
label: (0,external_wp_i18n_namespaceObject.__)('Undo'),
shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('z')
// If there are no undo levels we don't want to actually disable this
// button, because it will remove focus for keyboard users.
// See: https://github.com/WordPress/gutenberg/issues/3486
"aria-disabled": !hasUndo,
className: "customize-widgets-editor-history-button undo-button"
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_redo : library_undo
/* translators: button label text should, if possible, be under 16 characters. */,
label: (0,external_wp_i18n_namespaceObject.__)('Redo'),
// If there are no undo levels we don't want to actually disable this
// button, because it will remove focus for keyboard users.
// See: https://github.com/WordPress/gutenberg/issues/3486
"aria-disabled": !hasRedo,
className: "customize-widgets-editor-history-button redo-button"
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
className: "customize-widgets-header-toolbar__inserter-toggle",
isPressed: isInserterOpened,
label: (0,external_wp_i18n_namespaceObject._x)('Add block', 'Generic label for block inserter button'),
setIsInserterOpened(isOpen => !isOpen);
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MoreMenu, {})]
}), (0,external_wp_element_namespaceObject.createPortal)( /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(components_inserter, {
setIsOpened: setIsInserterOpened
}), inserter.contentContainer[0])]
/* harmony default export */ const header = (Header);
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/inserter/use-inserter.js
function useInserter(inserter) {
const isInserterOpened = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).isInserterOpened(), []);
} = (0,external_wp_data_namespaceObject.useDispatch)(store);
(0,external_wp_element_namespaceObject.useEffect)(() => {
}, [inserter, isInserterOpened]);
return [isInserterOpened, (0,external_wp_element_namespaceObject.useCallback)(updater => {
if (typeof updater === 'function') {
isOpen = updater((0,external_wp_data_namespaceObject.select)(store).isInserterOpened());
setIsInserterOpened(isOpen);
}, [setIsInserterOpened])];
// EXTERNAL MODULE: ./node_modules/fast-deep-equal/es6/index.js
var es6 = __webpack_require__(7734);
var es6_default = /*#__PURE__*/__webpack_require__.n(es6);
;// CONCATENATED MODULE: external ["wp","isShallowEqual"]
const external_wp_isShallowEqual_namespaceObject = window["wp"]["isShallowEqual"];
var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_namespaceObject);
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/utils.js
* Convert settingId to widgetId.
* @param {string} settingId The setting id.
* @return {string} The widget id.
function settingIdToWidgetId(settingId) {
const matches = settingId.match(/^widget_(.+)(?:\[(\d+)\])$/);
const idBase = matches[1];
const number = parseInt(matches[2], 10);
return `${idBase}-${number}`;
* Transform a block to a customizable widget.
* @param {WPBlock} block The block to be transformed from.
* @param {Object} existingWidget The widget to be extended from.
* @return {Object} The transformed widget.
function blockToWidget(block, existingWidget = null) {
const isValidLegacyWidgetBlock = block.name === 'core/legacy-widget' && (block.attributes.id || block.attributes.instance);
if (isValidLegacyWidgetBlock) {
if (block.attributes.id) {
// Widget that does not extend WP_Widget.
} = block.attributes.instance;
// Widget that extends WP_Widget.
idBase: block.attributes.idBase,
...existingWidget?.instance,
// Required only for the customizer.
is_widget_customizer_js_value: true,
encoded_serialized_instance: encoded,
content: (0,external_wp_blocks_namespaceObject.serialize)(block)
widgetClass: 'WP_Widget_Block',
} = existingWidget || {};
* Transform a widget to a block.
* @param {Object} widget The widget to be transformed from.
* @param {string} widget.id The widget id.
* @param {string} widget.idBase The id base of the widget.
* @param {number} widget.number The number/index of the widget.
* @param {Object} widget.instance The instance of the widget.
* @return {WPBlock} The transformed block.
encoded_serialized_instance: encoded,
if (idBase === 'block') {
const parsedBlocks = (0,external_wp_blocks_namespaceObject.parse)((_raw$content = raw.content) !== null && _raw$content !== void 0 ? _raw$content : '', {
__unstableSkipAutop: true
block = parsedBlocks.length ? parsedBlocks[0] : (0,external_wp_blocks_namespaceObject.createBlock)('core/paragraph', {});
// Widget that extends WP_Widget.
block = (0,external_wp_blocks_namespaceObject.createBlock)('core/legacy-widget', {
// Widget that does not extend WP_Widget.
block = (0,external_wp_blocks_namespaceObject.createBlock)('core/legacy-widget', {
return (0,external_wp_widgets_namespaceObject.addWidgetIdToBlock)(block, id);
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/use-sidebar-block-editor.js
function widgetsToBlocks(widgets) {
return widgets.map(widget => widgetToBlock(widget));
function useSidebarBlockEditor(sidebar) {
const [blocks, setBlocks] = (0,external_wp_element_namespaceObject.useState)(() => widgetsToBlocks(sidebar.getWidgets()));
(0,external_wp_element_namespaceObject.useEffect)(() => {
return sidebar.subscribe((prevWidgets, nextWidgets) => {
setBlocks(prevBlocks => {
const prevWidgetsMap = new Map(prevWidgets.map(widget => [widget.id, widget]));
const prevBlocksMap = new Map(prevBlocks.map(block => [(0,external_wp_widgets_namespaceObject.getWidgetIdFromBlock)(block), block]));
const nextBlocks = nextWidgets.map(nextWidget => {
const prevWidget = prevWidgetsMap.get(nextWidget.id);
if (prevWidget && prevWidget === nextWidget) {
return prevBlocksMap.get(nextWidget.id);
return widgetToBlock(nextWidget);
if (external_wp_isShallowEqual_default()(prevBlocks, nextBlocks)) {
const onChangeBlocks = (0,external_wp_element_namespaceObject.useCallback)(nextBlocks => {
setBlocks(prevBlocks => {
if (external_wp_isShallowEqual_default()(prevBlocks, nextBlocks)) {
const prevBlocksMap = new Map(prevBlocks.map(block => [(0,external_wp_widgets_namespaceObject.getWidgetIdFromBlock)(block), block]));
const nextWidgets = nextBlocks.map(nextBlock => {
const widgetId = (0,external_wp_widgets_namespaceObject.getWidgetIdFromBlock)(nextBlock);
// Update existing widgets.
if (widgetId && prevBlocksMap.has(widgetId)) {
const prevBlock = prevBlocksMap.get(widgetId);
const prevWidget = sidebar.getWidget(widgetId);
// Bail out updates by returning the previous widgets.
// Deep equality is necessary until the block editor's internals changes.
if (es6_default()(nextBlock, prevBlock) && prevWidget) {
return blockToWidget(nextBlock, prevWidget);
return blockToWidget(nextBlock);
// Bail out updates if the updated widgets are the same.
if (external_wp_isShallowEqual_default()(sidebar.getWidgets(), nextWidgets)) {
const addedWidgetIds = sidebar.setWidgets(nextWidgets);
return nextBlocks.reduce((updatedNextBlocks, nextBlock, index) => {
const addedWidgetId = addedWidgetIds[index];
if (addedWidgetId !== null) {
// Only create a new instance if necessary to prevent
// the whole editor from re-rendering on every edit.
if (updatedNextBlocks === nextBlocks) {
updatedNextBlocks = nextBlocks.slice();
updatedNextBlocks[index] = (0,external_wp_widgets_namespaceObject.addWidgetIdToBlock)(nextBlock, addedWidgetId);
return updatedNextBlocks;
return [blocks, onChangeBlocks, onChangeBlocks];
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/focus-control/index.js
const FocusControlContext = (0,external_wp_element_namespaceObject.createContext)();
const [focusedWidgetIdRef, setFocusedWidgetIdRef] = (0,external_wp_element_namespaceObject.useState)({
const focusWidget = (0,external_wp_element_namespaceObject.useCallback)(widgetId => {
for (const sidebarControl of sidebarControls) {
const widgets = sidebarControl.setting.get();
if (widgets.includes(widgetId)) {
sidebarControl.sectionInstance.expand({
// Schedule it after the complete callback so that
// it won't be overridden by the "Back" button focus.
// Create a "ref-like" object every time to ensure
// the same widget id can also triggers the focus control.
(0,external_wp_element_namespaceObject.useEffect)(() => {
function handleFocus(settingId) {
const widgetId = settingIdToWidgetId(settingId);
let previewBound = false;
api.previewer.preview.bind('focus-control-for-setting', handleFocus);
api.previewer.bind('ready', handleReady);
api.previewer.unbind('ready', handleReady);
api.previewer.preview.unbind('focus-control-for-setting', handleFocus);
const context = (0,external_wp_element_namespaceObject.useMemo)(() => [focusedWidgetIdRef, focusWidget], [focusedWidgetIdRef, focusWidget]);
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FocusControlContext.Provider, {
const useFocusControl = () => (0,external_wp_element_namespaceObject.useContext)(FocusControlContext);
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/focus-control/use-blocks-focus-control.js
function useBlocksFocusControl(blocks) {
} = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
const [focusedWidgetIdRef] = useFocusControl();
const blocksRef = (0,external_wp_element_namespaceObject.useRef)(blocks);
(0,external_wp_element_namespaceObject.useEffect)(() => {
blocksRef.current = blocks;
(0,external_wp_element_namespaceObject.useEffect)(() => {
if (focusedWidgetIdRef.current) {
const focusedBlock = blocksRef.current.find(block => (0,external_wp_widgets_namespaceObject.getWidgetIdFromBlock)(block) === focusedWidgetIdRef.current);
selectBlock(focusedBlock.clientId);
// If the block is already being selected, the DOM node won't
// get focused again automatically.
// We select the DOM and focus it manually here.
const blockNode = document.querySelector(`[data-block="${focusedBlock.clientId}"]`);
}, [focusedWidgetIdRef, selectBlock]);
;// CONCATENATED MODULE: external ["wp","privateApis"]
const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/lock-unlock.js
} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/customize-widgets');
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/sidebar-block-editor/sidebar-editor-provider.js
ExperimentalBlockEditorProvider
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function SidebarEditorProvider({
const [blocks, onInput, onChange] = useSidebarBlockEditor(sidebar);
useBlocksFocusControl(blocks);
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ExperimentalBlockEditorProvider, {
;// CONCATENATED MODULE: ./node_modules/@wordpress/customize-widgets/build-module/components/welcome-guide/index.js
} = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
const isEntirelyBlockWidgets = sidebar.getWidgets().every(widget => widget.id.startsWith('block-'));
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {