: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
isBlockMoverUpButtonDisabled: isPrevBlockTemplatePart,
isBlockMoverDownButtonDisabled: isNextBlockTemplatePart
}), canMove && canRemove && editorMode === 'zoom-out' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Shuffle, {
as: external_wp_components_namespaceObject.Button
}), canRemove && editorMode === 'zoom-out' && !isBlockTemplatePart && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
}), editorMode === 'navigation' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
onClick: editorMode === 'navigation' ? () => setNavigationMode(false) : undefined,
className: "block-selection-button_select-button",
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTitle, {
/* harmony default export */ const block_selection_button = (BlockSelectionButton);
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/block-toolbar-breadcrumb.js
function BlockToolbarBreadcrumb({
} = useSelectedBlockToolProps(clientId);
const popoverProps = useBlockToolbarPopoverProps({
contentElement: __unstableContentRef?.current,
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
clientId: capturingClientId || clientId,
bottomClientId: lastClientId,
className: dist_clsx('block-editor-block-list__block-popover', {
'is-insertion-point-visible': isInsertionPointVisible
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_selection_button, {
rootClientId: rootClientId
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/zoom-out-mode-inserters.js
function ZoomOutModeInserters() {
const [isReady, setIsReady] = (0,external_wp_element_namespaceObject.useState)(false);
} = (0,external_wp_data_namespaceObject.useSelect)(select => {
sectionRootClientId: root
} = unlock(getSettings());
// To do: move ZoomOutModeInserters to core/editor.
// Or we perhaps we should move the insertion point state to the
// block-editor store. I'm not sure what it was ever moved to the editor
// store, because all the inserter components all live in the
// eslint-disable-next-line @wordpress/data-no-store-string-literals
const editor = select('core/editor');
selectedSection: editor.getSelectedBlock(),
blockOrder: getBlockOrder(root),
insertionPoint: unlock(editor).getInsertionPoint(),
sectionRootClientId: root,
setInserterIsOpened: getSettings().__experimentalSetIsInserterOpened
const isMounted = (0,external_wp_element_namespaceObject.useRef)(false);
(0,external_wp_element_namespaceObject.useEffect)(() => {
if (!isMounted.current) {
isMounted.current = true;
// reset insertion point when the block order changes
setInserterIsOpened(true);
}, [blockOrder, setInserterIsOpened]);
// Defer the initial rendering to avoid the jumps due to the animation.
(0,external_wp_element_namespaceObject.useEffect)(() => {
const timeout = setTimeout(() => {
if (!isReady || !selectedSection) {
return [undefined, ...blockOrder].map((clientId, index) => {
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(inbetween, {
previousClientId: clientId,
nextClientId: blockOrder[index],
children: [insertionPoint.insertionIndex === index && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
transform: 'translateY(-50%)',
className: "block-editor-block-list__insertion-point-indicator"
}), insertionPoint.insertionIndex !== index && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
className: "block-editor-button-pattern-inserter__button",
rootClientId: sectionRootClientId,
label: (0,external_wp_i18n_namespaceObject._x)('Add pattern', 'Generic label for pattern inserter button')
/* harmony default export */ const zoom_out_mode_inserters = (ZoomOutModeInserters);
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-show-block-tools.js
* Source of truth for which block tools are showing in the block editor.
* @return {Object} Object of which block tools will be shown.
function useShowBlockTools() {
return (0,external_wp_data_namespaceObject.useSelect)(select => {
getSelectedBlockClientId,
getFirstMultiSelectedBlockClientId,
const clientId = getSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();
const block = getBlock(clientId) || {
const editorMode = __unstableGetEditorMode();
const hasSelectedBlock = clientId && block?.name;
const isEmptyDefaultBlock = (0,external_wp_blocks_namespaceObject.isUnmodifiedDefaultBlock)(block);
const _showEmptyBlockSideInserter = clientId && !isTyping() && editorMode === 'edit' && isEmptyDefaultBlock;
const maybeShowBreadcrumb = hasSelectedBlock && !hasMultiSelection() && (editorMode === 'navigation' || editorMode === 'zoom-out');
showEmptyBlockSideInserter: _showEmptyBlockSideInserter,
showBreadcrumb: !_showEmptyBlockSideInserter && maybeShowBreadcrumb,
showBlockToolbarPopover: !getSettings().hasFixedToolbar && !_showEmptyBlockSideInserter && hasSelectedBlock && !isEmptyDefaultBlock && !maybeShowBreadcrumb
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/index.js
function block_tools_selector(select) {
getSelectedBlockClientId,
getFirstMultiSelectedBlockClientId,
const clientId = getSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();
const editorMode = __unstableGetEditorMode();
hasFixedToolbar: getSettings().hasFixedToolbar,
isZoomOutMode: editorMode === 'zoom-out'
* Renders block tools (the block toolbar, select/navigation mode toolbar, the
* insertion point and a slot for the inline rich text toolbar). Must be wrapped
* around the block content and editor styles wrapper or iframe.
* @param {Object} $0 Props.
* @param {Object} $0.children The block content and style container.
* @param {Object} $0.__unstableContentRef Ref holding the content scroll container.
} = (0,external_wp_data_namespaceObject.useSelect)(block_tools_selector, []);
const isMatch = (0,external_wp_keyboardShortcuts_namespaceObject.__unstableUseShortcutEventMatch)();
getSelectedBlockClientIds,
} = (0,external_wp_data_namespaceObject.useSelect)(store);
} = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
showEmptyBlockSideInserter,
} = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
function onKeyDown(event) {
if (event.defaultPrevented) {
if (isMatch('core/block-editor/move-up', event)) {
const clientIds = getSelectedBlockClientIds();
const rootClientId = getBlockRootClientId(clientIds[0]);
moveBlocksUp(clientIds, rootClientId);
} else if (isMatch('core/block-editor/move-down', event)) {
const clientIds = getSelectedBlockClientIds();
const rootClientId = getBlockRootClientId(clientIds[0]);
moveBlocksDown(clientIds, rootClientId);
} else if (isMatch('core/block-editor/duplicate', event)) {
const clientIds = getSelectedBlockClientIds();
duplicateBlocks(clientIds);
} else if (isMatch('core/block-editor/remove', event)) {
const clientIds = getSelectedBlockClientIds();
} else if (isMatch('core/block-editor/insert-after', event)) {
const clientIds = getSelectedBlockClientIds();
insertAfterBlock(clientIds[clientIds.length - 1]);
} else if (isMatch('core/block-editor/insert-before', event)) {
const clientIds = getSelectedBlockClientIds();
insertBeforeBlock(clientIds[0]);
} else if (isMatch('core/block-editor/unselect', event)) {
if (event.target.closest('[role=toolbar]')) {
// This shouldn't be necessary, but we have a combination of a few things all combining to create a situation where:
// - Because the block toolbar uses createPortal to populate the block toolbar fills, we can't rely on the React event bubbling to hit the onKeyDown listener for the block toolbar
// - Since we can't use the React tree, we use the DOM tree which _should_ handle the event bubbling correctly from a `createPortal` element.
// - This bubbles via the React tree, which hits this `unselect` escape keypress before the block toolbar DOM event listener has access to it.
// An alternative would be to remove the addEventListener on the navigableToolbar and use this event to handle it directly right here. That feels hacky too though.
const clientIds = getSelectedBlockClientIds();
if (clientIds.length > 1) {
// If there is more than one block selected, select the first
// block so that focus is directed back to the beginning of the selection.
// In effect, to the user this feels like deselecting the multi-selection.
selectBlock(clientIds[0]);
} else if (isMatch('core/block-editor/collapse-list-view', event)) {
// If focus is currently within a text field, such as a rich text block or other editable field,
// skip collapsing the list view, and allow the keyboard shortcut to be handled by the text field.
// This condition checks for both the active element and the active element within an iframed editor.
if ((0,external_wp_dom_namespaceObject.isTextField)(event.target) || (0,external_wp_dom_namespaceObject.isTextField)(event.target?.contentWindow?.document?.activeElement)) {
} else if (isMatch('core/block-editor/group', event)) {
const clientIds = getSelectedBlockClientIds();
if (clientIds.length > 1 && isGroupable(clientIds)) {
const blocks = getBlocksByClientId(clientIds);
const groupingBlockName = getGroupingBlockName();
const newBlocks = (0,external_wp_blocks_namespaceObject.switchToBlockType)(blocks, groupingBlockName);
replaceBlocks(clientIds, newBlocks);
(0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Selected blocks are grouped.'));
const blockToolbarRef = use_popover_scroll(__unstableContentRef);
const blockToolbarAfterRef = use_popover_scroll(__unstableContentRef);
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(insertion_point_InsertionPointOpenRef.Provider, {
value: (0,external_wp_element_namespaceObject.useRef)(false),
children: [!isTyping && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InsertionPoint, {
__unstableContentRef: __unstableContentRef
}), showEmptyBlockSideInserter && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EmptyBlockInserter, {
__unstableContentRef: __unstableContentRef,
}), showBlockToolbarPopover && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockToolbarPopover, {
__unstableContentRef: __unstableContentRef,
}), showBreadcrumb && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockToolbarBreadcrumb, {
__unstableContentRef: __unstableContentRef,
}), !isZoomOutMode && !hasFixedToolbar && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover.Slot, {
}), children, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover.Slot, {
name: "__unstable-block-tools-after",
ref: blockToolbarAfterRef
}), window.__experimentalEnableZoomedOutPatternsTab && isZoomOutMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(zoom_out_mode_inserters, {
__unstableContentRef: __unstableContentRef
;// CONCATENATED MODULE: external ["wp","commands"]
const external_wp_commands_namespaceObject = window["wp"]["commands"];
;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/move-to.js
const move_to_moveTo = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
xmlns: "http://www.w3.org/2000/svg",
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
d: "M19.75 9c0-1.257-.565-2.197-1.39-2.858-.797-.64-1.827-1.017-2.815-1.247-1.802-.42-3.703-.403-4.383-.396L11 4.5V6l.177-.001c.696-.006 2.416-.02 4.028.356.887.207 1.67.518 2.216.957.52.416.829.945.829 1.688 0 .592-.167.966-.407 1.23-.255.281-.656.508-1.236.674-1.19.34-2.82.346-4.607.346h-.077c-1.692 0-3.527 0-4.942.404-.732.209-1.424.545-1.935 1.108-.526.579-.796 1.33-.796 2.238 0 1.257.565 2.197 1.39 2.858.797.64 1.827 1.017 2.815 1.247 1.802.42 3.703.403 4.383.396L13 19.5h.714V22L18 18.5 13.714 15v3H13l-.177.001c-.696.006-2.416.02-4.028-.356-.887-.207-1.67-.518-2.216-.957-.52-.416-.829-.945-.829-1.688 0-.592.167-.966.407-1.23.255-.281.656-.508 1.237-.674 1.189-.34 2.819-.346 4.606-.346h.077c1.692 0 3.527 0 4.941-.404.732-.209 1.425-.545 1.936-1.108.526-.579.796-1.33.796-2.238z"
/* harmony default export */ const move_to = (move_to_moveTo);
;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/ungroup.js
const ungroup = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
xmlns: "http://www.w3.org/2000/svg",
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
d: "M18 4h-7c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2h7c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 9c0 .3-.2.5-.5.5h-7c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h7c.3 0 .5.2.5.5v7zm-5 5c0 .3-.2.5-.5.5H6c-.3 0-.5-.2-.5-.5v-7c0-.3.2-.5.5-.5h1V9H6c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2h7c1.1 0 2-.9 2-2v-1h-1.5v1z"
/* harmony default export */ const library_ungroup = (ungroup);
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-block-commands/index.js
const useTransformCommands = () => {
} = (0,external_wp_data_namespaceObject.useDispatch)(store);
possibleBlockTransformations,
} = (0,external_wp_data_namespaceObject.useSelect)(select => {
getSelectedBlockClientIds,