: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
(0,external_wp_element_namespaceObject.useEffect)(() => {
if (selfStretch === 'fixed' && !flexSize) {
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
children: [parentLayoutType === 'flex' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
isShownByDefault: isShownByDefault,
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
__nextHasNoMarginBottom: true,
size: "__unstable-large",
label: childLayoutOrientation(parentLayout),
value: selfStretch || 'fit',
help: helpText(selfStretch, parentLayout),
const newFlexSize = value !== 'fixed' ? null : flexSize;
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
label: (0,external_wp_i18n_namespaceObject.__)('Fit')
}, "fit"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
label: (0,external_wp_i18n_namespaceObject.__)('Fill')
}, "fill"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
label: (0,external_wp_i18n_namespaceObject.__)('Fixed')
}), selfStretch === 'fixed' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
size: "__unstable-large",
}), parentLayoutType === 'grid' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
label: (0,external_wp_i18n_namespaceObject.__)('Grid span'),
onDeselect: resetGridSpans,
isShownByDefault: isShownByDefault,
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
size: "__unstable-large",
label: (0,external_wp_i18n_namespaceObject.__)('Column span'),
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
size: "__unstable-large",
label: (0,external_wp_i18n_namespaceObject.__)('Row span'),
}), window.__experimentalEnableGridInteractivity &&
// Use Flex with an explicit width on the FlexItem instead of HStack to
// work around an issue in webkit where inputs with a max attribute are
(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
label: (0,external_wp_i18n_namespaceObject.__)('Grid placement'),
onDeselect: resetGridStarts,
children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
size: "__unstable-large",
label: (0,external_wp_i18n_namespaceObject.__)('Column'),
max: parentLayout?.columnCount ? parentLayout.columnCount - (columnSpan !== null && columnSpan !== void 0 ? columnSpan : 1) + 1 : undefined
}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
size: "__unstable-large",
label: (0,external_wp_i18n_namespaceObject.__)('Row'),
max: parentLayout?.rowCount ? parentLayout.rowCount - (rowSpan !== null && rowSpan !== void 0 ? rowSpan : 1) + 1 : undefined
function childLayoutOrientation(parentLayout) {
orientation = 'horizontal'
return orientation === 'horizontal' ? (0,external_wp_i18n_namespaceObject.__)('Width') : (0,external_wp_i18n_namespaceObject.__)('Height');
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/aspect-ratio-tool.js
* @typedef {import('@wordpress/components/build-types/select-control/types').SelectControlProps} SelectControlProps
* @callback AspectRatioToolPropsOnChange
* @param {string} [value] New aspect ratio value.
* @return {void} No return.
* @typedef {Object} AspectRatioToolProps
* @property {string} [panelId] ID of the panel this tool is associated with.
* @property {string} [value] Current aspect ratio value.
* @property {AspectRatioToolPropsOnChange} [onChange] Callback to update the aspect ratio value.
* @property {SelectControlProps[]} [options] Aspect ratio options.
* @property {string} [defaultValue] Default aspect ratio value.
* @property {boolean} [isShownByDefault] Whether the tool is shown by default.
function AspectRatioTool({
// Match the CSS default so if the value is used directly in CSS it will look correct in the control.
const displayValue = value !== null && value !== void 0 ? value : 'auto';
const [defaultRatios, themeRatios, showDefaultRatios] = use_settings_useSettings('dimensions.aspectRatios.default', 'dimensions.aspectRatios.theme', 'dimensions.defaultAspectRatios');
const themeOptions = themeRatios?.map(({
const defaultOptions = defaultRatios?.map(({
const aspectRatioOptions = [{
label: (0,external_wp_i18n_namespaceObject._x)('Original', 'Aspect ratio option for dimensions control'),
}, ...(showDefaultRatios ? defaultOptions : []), ...(themeOptions ? themeOptions : []), {
label: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Aspect ratio option for dimensions control'),
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
hasValue: hasValue ? hasValue : () => displayValue !== defaultValue,
label: (0,external_wp_i18n_namespaceObject.__)('Aspect ratio'),
onDeselect: () => onChange(undefined),
isShownByDefault: isShownByDefault,
children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
label: (0,external_wp_i18n_namespaceObject.__)('Aspect ratio'),
options: options !== null && options !== void 0 ? options : aspectRatioOptions,
size: "__unstable-large",
__nextHasNoMarginBottom: true
;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/dimensions-panel.js
const AXIAL_SIDES = ['horizontal', 'vertical'];
function useHasDimensionsPanel(settings) {
const hasContentSize = useHasContentSize(settings);
const hasWideSize = useHasWideSize(settings);
const hasPadding = useHasPadding(settings);
const hasMargin = useHasMargin(settings);
const hasGap = useHasGap(settings);
const hasMinHeight = useHasMinHeight(settings);
const hasAspectRatio = useHasAspectRatio(settings);
const hasChildLayout = useHasChildLayout(settings);
return external_wp_element_namespaceObject.Platform.OS === 'web' && (hasContentSize || hasWideSize || hasPadding || hasMargin || hasGap || hasMinHeight || hasAspectRatio || hasChildLayout);
function useHasContentSize(settings) {
return settings?.layout?.contentSize;
function useHasWideSize(settings) {
return settings?.layout?.wideSize;
function useHasPadding(settings) {
return settings?.spacing?.padding;
function useHasMargin(settings) {
return settings?.spacing?.margin;
function useHasGap(settings) {
return settings?.spacing?.blockGap;
function useHasMinHeight(settings) {
return settings?.dimensions?.minHeight;
function useHasAspectRatio(settings) {
return settings?.dimensions?.aspectRatio;
function useHasChildLayout(settings) {
var _settings$parentLayou;
type: parentLayoutType = 'default',
type: defaultParentLayoutType = 'default'
allowSizingOnChildren = false
} = (_settings$parentLayou = settings?.parentLayout) !== null && _settings$parentLayou !== void 0 ? _settings$parentLayou : {};
const support = (defaultParentLayoutType === 'flex' || parentLayoutType === 'flex' || defaultParentLayoutType === 'grid' || parentLayoutType === 'grid') && allowSizingOnChildren;
return !!settings?.layout && support;
function useHasSpacingPresets(settings) {
} = settings?.spacing || {};
return defaultSpacingSizes !== false && spacingSizes?.default?.length > 0 || spacingSizes?.theme?.length > 0 || spacingSizes?.custom?.length > 0;
function filterValuesBySides(values, sides) {
// If no custom side configuration, all sides are opted into by default.
// Without any values, we have nothing to filter either.
// Only include sides opted into within filtered values.
const filteredValues = {};
if (side === 'vertical') {
filteredValues.top = values.top;
filteredValues.bottom = values.bottom;
if (side === 'horizontal') {
filteredValues.left = values.left;
filteredValues.right = values.right;
filteredValues[side] = values?.[side];
function splitStyleValue(value) {
// Check for shorthand value (a string value).
if (value && typeof value === 'string') {
// Convert to value for individual sides for BoxControl.
function splitGapValue(value) {
// Check for shorthand value (a string value).
if (value && typeof value === 'string') {
// If the value is a string, treat it as a single side (top) for the spacing controls.
function DimensionsToolsPanel({
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
const updatedValue = resetAllFilter(value);
return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanel, {
label: (0,external_wp_i18n_namespaceObject.__)('Dimensions'),
dropdownMenuProps: dropdownMenuProps,
const dimensions_panel_DEFAULT_CONTROLS = {
function DimensionsPanel({
as: Wrapper = DimensionsToolsPanel,
defaultControls = dimensions_panel_DEFAULT_CONTROLS,
// Special case because the layout controls are not part of the dimensions panel
// in global styles but not in block inspector.
includeLayoutControls = false
var _defaultControls$cont, _defaultControls$wide, _defaultControls$padd, _defaultControls$marg, _defaultControls$bloc, _defaultControls$chil, _defaultControls$minH, _defaultControls$aspe;
const decodeValue = rawValue => {
if (rawValue && typeof rawValue === 'object') {
return Object.keys(rawValue).reduce((acc, key) => {
acc[key] = getValueFromVariable({
return getValueFromVariable({
const showSpacingPresetsControl = useHasSpacingPresets(settings);
const units = (0,external_wp_components_namespaceObject.__experimentalUseCustomUnits)({
availableUnits: settings?.spacing?.units || ['%', 'px', 'em', 'rem', 'vw']
const minimumMargin = -Infinity;
const [minMarginValue, setMinMarginValue] = (0,external_wp_element_namespaceObject.useState)(minimumMargin);
const showContentSizeControl = useHasContentSize(settings) && includeLayoutControls;
const contentSizeValue = decodeValue(inheritedValue?.layout?.contentSize);
const setContentSizeValue = newValue => {
onChange(setImmutably(value, ['layout', 'contentSize'], newValue || undefined));
const hasUserSetContentSizeValue = () => !!value?.layout?.contentSize;
const resetContentSizeValue = () => setContentSizeValue(undefined);
const showWideSizeControl = useHasWideSize(settings) && includeLayoutControls;
const wideSizeValue = decodeValue(inheritedValue?.layout?.wideSize);
const setWideSizeValue = newValue => {
onChange(setImmutably(value, ['layout', 'wideSize'], newValue || undefined));
const hasUserSetWideSizeValue = () => !!value?.layout?.wideSize;
const resetWideSizeValue = () => setWideSizeValue(undefined);
const showPaddingControl = useHasPadding(settings);
const rawPadding = decodeValue(inheritedValue?.spacing?.padding);
const paddingValues = splitStyleValue(rawPadding);
const paddingSides = Array.isArray(settings?.spacing?.padding) ? settings?.spacing?.padding : settings?.spacing?.padding?.sides;
const isAxialPadding = paddingSides && paddingSides.some(side => AXIAL_SIDES.includes(side));
const setPaddingValues = newPaddingValues => {
const padding = filterValuesBySides(newPaddingValues, paddingSides);
onChange(setImmutably(value, ['spacing', 'padding'], padding));
const hasPaddingValue = () => !!value?.spacing?.padding && Object.keys(value?.spacing?.padding).length;
const resetPaddingValue = () => setPaddingValues(undefined);
const onMouseOverPadding = () => onVisualize('padding');
const showMarginControl = useHasMargin(settings);
const rawMargin = decodeValue(inheritedValue?.spacing?.margin);
const marginValues = splitStyleValue(rawMargin);
const marginSides = Array.isArray(settings?.spacing?.margin) ? settings?.spacing?.margin : settings?.spacing?.margin?.sides;
const isAxialMargin = marginSides && marginSides.some(side => AXIAL_SIDES.includes(side));
const setMarginValues = newMarginValues => {
const margin = filterValuesBySides(newMarginValues, marginSides);
onChange(setImmutably(value, ['spacing', 'margin'], margin));
const hasMarginValue = () => !!value?.spacing?.margin && Object.keys(value?.spacing?.margin).length;
const resetMarginValue = () => setMarginValues(undefined);
const onMouseOverMargin = () => onVisualize('margin');
const showGapControl = useHasGap(settings);
const gapValue = decodeValue(inheritedValue?.spacing?.blockGap);
const gapValues = splitGapValue(gapValue);
const gapSides = Array.isArray(settings?.spacing?.blockGap) ? settings?.spacing?.blockGap : settings?.spacing?.blockGap?.sides;
const isAxialGap = gapSides && gapSides.some(side => AXIAL_SIDES.includes(side));
const setGapValue = newGapValue => {
onChange(setImmutably(value, ['spacing', 'blockGap'], newGapValue));
const setGapValues = nextBoxGapValue => {