: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
children: (0,external_wp_i18n_namespaceObject.__)('Rows')
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNumberControl, {
size: "__unstable-large",
label: (0,external_wp_i18n_namespaceObject.__)('Rows'),
hideLabelFromVision: true
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
value: parseInt(rowCount, 10) // RangeControl can't deal with strings.
onChange: value => onChange({
label: (0,external_wp_i18n_namespaceObject.__)('Rows'),
hideLabelFromVision: true
// Enables switching between grid types
function GridLayoutTypeControl({
* When switching, temporarily save any custom values set on the
* previous type so we can switch back without loss.
const [tempColumnCount, setTempColumnCount] = (0,external_wp_element_namespaceObject.useState)(columnCount || 3);
const [tempMinimumColumnWidth, setTempMinimumColumnWidth] = (0,external_wp_element_namespaceObject.useState)(minimumColumnWidth || '12rem');
const isManual = !!columnCount ? 'manual' : 'auto';
const onChangeType = value => {
if (value === 'manual') {
setTempMinimumColumnWidth(minimumColumnWidth || '12rem');
setTempColumnCount(columnCount || 3);
columnCount: value === 'manual' ? tempColumnCount : null,
minimumColumnWidth: value === 'auto' ? tempMinimumColumnWidth : null
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
__nextHasNoMarginBottom: true,
label: (0,external_wp_i18n_namespaceObject.__)('Type'),
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
label: (0,external_wp_i18n_namespaceObject.__)('Auto')
}, "auto"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
label: (0,external_wp_i18n_namespaceObject.__)('Manual')
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/index.js
const layoutTypes = [flow, flex, constrained, grid];
* Retrieves a layout type by name.
* @param {string} name - The name of the layout type.
* @return {Object} Layout type.
function getLayoutType(name = 'default') {
return layoutTypes.find(layoutType => layoutType.name === name);
* Retrieves the available layout types.
* @return {Array} Layout types.
function getLayoutTypes() {
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/layout.js
const Layout = (0,external_wp_element_namespaceObject.createContext)(defaultLayout);
* Allows to define the layout.
const LayoutProvider = Layout.Provider;
* React hook used to retrieve the layout config.
return (0,external_wp_element_namespaceObject.useContext)(Layout);
const layoutType = getLayoutType(layout.type);
const [blockGapSupport] = use_settings_useSettings('spacing.blockGap');
const hasBlockGapSupport = blockGapSupport !== null;
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("style", {
const layoutStyle = layoutType.getLayoutStyle?.({
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("style", {
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/use-available-alignments.js
const use_available_alignments_EMPTY_ARRAY = [];
const use_available_alignments_DEFAULT_CONTROLS = ['none', 'left', 'center', 'right', 'wide', 'full'];
const WIDE_CONTROLS = ['wide', 'full'];
function useAvailableAlignments(controls = use_available_alignments_DEFAULT_CONTROLS) {
// Always add the `none` option if not exists.
if (!controls.includes('none')) {
controls = ['none', ...controls];
const isNoneOnly = controls.length === 1 && controls[0] === 'none';
const [wideControlsEnabled, themeSupportsLayout, isBlockBasedTheme] = (0,external_wp_data_namespaceObject.useSelect)(select => {
// If `isNoneOnly` is true, we'll be returning early because there is
// nothing to filter on an empty array. We won't need the info from
// the `useSelect` but we must call it anyway because Rules of Hooks.
// So the callback returns early to avoid block editor subscription.
return [false, false, false];
const settings = select(store).getSettings();
return [(_settings$alignWide = settings.alignWide) !== null && _settings$alignWide !== void 0 ? _settings$alignWide : false, settings.supportsLayout, settings.__unstableIsBlockBasedTheme];
const layout = useLayout();
return use_available_alignments_EMPTY_ARRAY;
const layoutType = getLayoutType(layout?.type);
if (themeSupportsLayout) {
const layoutAlignments = layoutType.getAlignments(layout, isBlockBasedTheme);
const alignments = layoutAlignments.filter(alignment => controls.includes(alignment.name));
// While we treat `none` as an alignment, we shouldn't return it if no
// other alignments exist.
if (alignments.length === 1 && alignments[0].name === 'none') {
return use_available_alignments_EMPTY_ARRAY;
// Starting here, it's the fallback for themes not supporting the layout config.
if (layoutType.name !== 'default' && layoutType.name !== 'constrained') {
return use_available_alignments_EMPTY_ARRAY;
const alignments = controls.filter(control => {
return layout.alignments.includes(control);
if (!wideControlsEnabled && WIDE_CONTROLS.includes(control)) {
return use_available_alignments_DEFAULT_CONTROLS.includes(control);
// While we treat `none` as an alignment, we shouldn't return it if no
// other alignments exist.
if (alignments.length === 1 && alignments[0].name === 'none') {
return use_available_alignments_EMPTY_ARRAY;
;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/align-none.js
const alignNone = /*#__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 5.5H5V4h14v1.5ZM19 20H5v-1.5h14V20ZM5 9h14v6H5V9Z"
/* harmony default export */ const align_none = (alignNone);
;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/position-left.js
const positionLeft = /*#__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: "M5 5.5h8V4H5v1.5ZM5 20h8v-1.5H5V20ZM19 9H5v6h14V9Z"
/* harmony default export */ const position_left = (positionLeft);
;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/position-right.js
const positionRight = /*#__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 5.5h-8V4h8v1.5ZM19 20h-8v-1.5h8V20ZM5 9h14v6H5V9Z"
/* harmony default export */ const position_right = (positionRight);
;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/stretch-full-width.js
const stretchFullWidth = /*#__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: "M5 4h14v11H5V4Zm11 16H8v-1.5h8V20Z"
/* harmony default export */ const stretch_full_width = (stretchFullWidth);
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/constants.js
const constants_BLOCK_ALIGNMENTS_CONTROLS = {
title: (0,external_wp_i18n_namespaceObject._x)('None', 'Alignment option')
title: (0,external_wp_i18n_namespaceObject.__)('Align left')
title: (0,external_wp_i18n_namespaceObject.__)('Align center')
title: (0,external_wp_i18n_namespaceObject.__)('Align right')
title: (0,external_wp_i18n_namespaceObject.__)('Wide width')
icon: stretch_full_width,
title: (0,external_wp_i18n_namespaceObject.__)('Full width')
const constants_DEFAULT_CONTROL = 'none';
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/ui.js
function BlockAlignmentUI({
const enabledControls = useAvailableAlignments(controls);
const hasEnabledControls = !!enabledControls.length;
if (!hasEnabledControls) {
function onChangeAlignment(align) {
onChange([value, 'none'].includes(align) ? undefined : align);
const activeAlignmentControl = constants_BLOCK_ALIGNMENTS_CONTROLS[value];
const defaultAlignmentControl = constants_BLOCK_ALIGNMENTS_CONTROLS[constants_DEFAULT_CONTROL];
const UIComponent = isToolbar ? external_wp_components_namespaceObject.ToolbarGroup : external_wp_components_namespaceObject.ToolbarDropdownMenu;
icon: activeAlignmentControl ? activeAlignmentControl.icon : defaultAlignmentControl.icon,
label: (0,external_wp_i18n_namespaceObject.__)('Align')
const extraProps = isToolbar ? {
controls: enabledControls.map(({
...constants_BLOCK_ALIGNMENTS_CONTROLS[controlName],
isActive: value === controlName || !value && controlName === 'none',
role: isCollapsed ? 'menuitemradio' : undefined,
onClick: () => onChangeAlignment(controlName)
describedBy: (0,external_wp_i18n_namespaceObject.__)('Change alignment')
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
className: "block-editor-block-alignment-control__menu-group",
children: enabledControls.map(({
} = constants_BLOCK_ALIGNMENTS_CONTROLS[controlName];
// If no value is provided, mark as selected the `none` option.
const isSelected = controlName === value || !value && controlName === 'none';
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
className: dist_clsx('components-dropdown-menu__menu-item', {
onChangeAlignment(controlName);
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(UIComponent, {
/* harmony default export */ const block_alignment_control_ui = (BlockAlignmentUI);
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/index.js
const BlockAlignmentControl = props => {
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_alignment_control_ui, {
const BlockAlignmentToolbar = props => {
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_alignment_control_ui, {
* @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-alignment-control/README.md
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-editing-mode/index.js
* @typedef {'disabled'|'contentOnly'|'default'} BlockEditingMode
* Allows a block to restrict the user interface that is displayed for editing
* that block and its inner blocks.
* function MyBlock( { attributes, setAttributes } ) {
* useBlockEditingMode( 'disabled' );
* return <div { ...useBlockProps() }></div>;
* `mode` can be one of three options:
* - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be
* - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the
* toolbar, the block movers, block settings.
* - `'default'`: Allows editing the block as normal.
* The mode is inherited by all of the block's inner blocks, unless they have