: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @param {Object} props Block properties.
* @param {Object} handlers Block event handlers.
* @param {Object} sizeOptions Size selector options.
* @return {Object} Label styles JSX code.
getLabelStyles: function getLabelStyles(props, handlers, sizeOptions) {
return /*#__PURE__*/React.createElement(PanelBody, {
className: app.getPanelClass(props),
title: strings.label_styles
}, /*#__PURE__*/React.createElement(SelectControl, {
value: props.attributes.labelSize,
className: "wpforms-gutenberg-form-selector-fix-bottom-margin",
onChange: function onChange(value) {
return handlers.styleAttrChange('labelSize', value);
}), /*#__PURE__*/React.createElement("div", {
className: "wpforms-gutenberg-form-selector-color-picker"
}, /*#__PURE__*/React.createElement("div", {
className: "wpforms-gutenberg-form-selector-control-label"
}, strings.colors), /*#__PURE__*/React.createElement(PanelColorSettings, {
__experimentalIsRenderedInSidebar: true,
className: "wpforms-gutenberg-form-selector-color-panel",
value: props.attributes.labelColor,
onChange: function onChange(value) {
return handlers.styleAttrChange('labelColor', value);
value: props.attributes.labelSublabelColor,
onChange: function onChange(value) {
return handlers.styleAttrChange('labelSublabelColor', value);
label: strings.sublabel_hints.replace('&', '&')
value: props.attributes.labelErrorColor,
onChange: function onChange(value) {
return handlers.styleAttrChange('labelErrorColor', value);
label: strings.error_message
* Get Button styles JSX code.
* @param {Object} props Block properties.
* @param {Object} handlers Block event handlers.
* @param {Object} sizeOptions Size selector options.
* @return {Object} Button styles JSX code.
getButtonStyles: function getButtonStyles(props, handlers, sizeOptions) {
return /*#__PURE__*/React.createElement(PanelBody, {
className: app.getPanelClass(props),
title: strings.button_styles
}, /*#__PURE__*/React.createElement(Flex, {
className: 'wpforms-gutenberg-form-selector-flex',
}, /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(SelectControl, {
value: props.attributes.buttonSize,
onChange: function onChange(value) {
return handlers.styleAttrChange('buttonSize', value);
})), /*#__PURE__*/React.createElement(FlexBlock, null, /*#__PURE__*/React.createElement(__experimentalUnitControl, {
onChange: function onChange(value) {
return handlers.styleAttrChange('buttonBorderRadius', value);
label: strings.border_radius,
isUnitSelectTabbable: true,
value: props.attributes.buttonBorderRadius
}))), /*#__PURE__*/React.createElement("div", {
className: "wpforms-gutenberg-form-selector-color-picker"
}, /*#__PURE__*/React.createElement("div", {
className: "wpforms-gutenberg-form-selector-control-label"
}, strings.colors), /*#__PURE__*/React.createElement(PanelColorSettings, {
__experimentalIsRenderedInSidebar: true,
className: "wpforms-gutenberg-form-selector-color-panel",
value: props.attributes.buttonBackgroundColor,
onChange: function onChange(value) {
return handlers.styleAttrChange('buttonBackgroundColor', value);
label: strings.background
value: props.attributes.buttonTextColor,
onChange: function onChange(value) {
return handlers.styleAttrChange('buttonTextColor', value);
}), /*#__PURE__*/React.createElement("div", {
className: "wpforms-gutenberg-form-selector-legend wpforms-button-color-notice"
}, strings.button_color_notice)));
* Get style settings JSX code.
* @param {Object} props Block properties.
* @param {Object} handlers Block event handlers.
* @param {Object} sizeOptions Size selector options.
* @return {Object} Inspector controls JSX code.
getStyleSettings: function getStyleSettings(props, handlers, sizeOptions) {
return /*#__PURE__*/React.createElement(InspectorControls, {
key: "wpforms-gutenberg-form-selector-style-settings"
}, app.jsxParts.getFieldStyles(props, handlers, sizeOptions), app.jsxParts.getLabelStyles(props, handlers, sizeOptions), app.jsxParts.getButtonStyles(props, handlers, sizeOptions));
* Get advanced settings JSX code.
* @param {Object} props Block properties.
* @param {Object} handlers Block event handlers.
* @return {Object} Inspector advanced controls JSX code.
getAdvancedSettings: function getAdvancedSettings(props, handlers) {
// eslint-disable-next-line react-hooks/rules-of-hooks
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
var openModal = function openModal() {
var closeModal = function closeModal() {
return /*#__PURE__*/React.createElement(InspectorAdvancedControls, null, /*#__PURE__*/React.createElement("div", {
className: app.getPanelClass(props)
}, /*#__PURE__*/React.createElement(TextareaControl, {
label: strings.copy_paste_settings,
value: props.attributes.copyPasteJsonValue,
onChange: function onChange(value) {
return handlers.pasteSettings(value);
}), /*#__PURE__*/React.createElement("div", {
className: "wpforms-gutenberg-form-selector-legend",
dangerouslySetInnerHTML: {
__html: strings.copy_paste_notice
}), /*#__PURE__*/React.createElement(Button, {
className: "wpforms-gutenberg-form-selector-reset-button",
}, strings.reset_style_settings)), isOpen && /*#__PURE__*/React.createElement(Modal, {
className: "wpforms-gutenberg-modal",
title: strings.reset_style_settings,
onRequestClose: closeModal
}, /*#__PURE__*/React.createElement("p", null, strings.reset_settings_confirm_text), /*#__PURE__*/React.createElement(Flex, {
}, /*#__PURE__*/React.createElement(Button, {
}, strings.btn_no), /*#__PURE__*/React.createElement(Button, {
onClick: function onClick() {
handlers.resetSettings();
}, strings.btn_yes_reset))));
* Get block content JSX code.
* @param {Object} props Block properties.
* @return {JSX.Element} Block content JSX code.
getBlockFormContent: function getBlockFormContent(props) {
if (triggerServerRender) {
return /*#__PURE__*/React.createElement(ServerSideRender, {
key: "wpforms-gutenberg-form-selector-server-side-renderer",
block: "wpforms/form-selector",
attributes: props.attributes
var clientId = props.clientId;
var block = app.getBlockContainer(props);
// In the case of empty content, use server side renderer.
// This happens when the block is duplicated or converted to a reusable block.
if (!block || !block.innerHTML) {
triggerServerRender = true;
return app.jsxParts.getBlockFormContent(props);
blocks[clientId] = blocks[clientId] || {};
blocks[clientId].blockHTML = block.innerHTML;
blocks[clientId].loadedFormId = props.attributes.formId;
return /*#__PURE__*/React.createElement(Fragment, {
key: "wpforms-gutenberg-form-selector-fragment-form-html"
}, /*#__PURE__*/React.createElement("div", {
dangerouslySetInnerHTML: {
__html: blocks[clientId].blockHTML
* Get block preview JSX code.
* @return {JSX.Element} Block preview JSX code.
getBlockPreview: function getBlockPreview() {
return /*#__PURE__*/React.createElement(Fragment, {
key: "wpforms-gutenberg-form-selector-fragment-block-preview"
}, /*#__PURE__*/React.createElement("img", {
src: wpforms_gutenberg_form_selector.block_preview_url,
* Get block empty JSX code.
* @param {Object} props Block properties.
* @return {JSX.Element} Block empty JSX code.
getEmptyFormsPreview: function getEmptyFormsPreview(props) {
var clientId = props.clientId;
return /*#__PURE__*/React.createElement(Fragment, {
key: "wpforms-gutenberg-form-selector-fragment-block-empty"
}, /*#__PURE__*/React.createElement("div", {
className: "wpforms-no-form-preview"
}, /*#__PURE__*/React.createElement("img", {
src: wpforms_gutenberg_form_selector.block_empty_url,
}), /*#__PURE__*/React.createElement("p", null, createInterpolateElement(__('You can use <b>WPForms</b> to build contact forms, surveys, payment forms, and more with just a few clicks.', 'wpforms-lite'), {
b: /*#__PURE__*/React.createElement("strong", null)
})), /*#__PURE__*/React.createElement("button", {
className: "get-started-button components-button is-primary",
onClick: function onClick() {
app.openBuilderPopup(clientId);
}, __('Get Started', 'wpforms-lite')), /*#__PURE__*/React.createElement("p", {
}, createInterpolateElement(__('Need some help? Check out our <a>comprehensive guide.</a>', 'wpforms-lite'), {
// eslint-disable-next-line jsx-a11y/anchor-has-content
a: /*#__PURE__*/React.createElement("a", {
href: wpforms_gutenberg_form_selector.wpforms_guide,
rel: "noopener noreferrer"
})), /*#__PURE__*/React.createElement("div", {
id: "wpforms-gutenberg-popup",
className: "wpforms-builder-popup"
}, /*#__PURE__*/React.createElement("iframe", {
id: "wpforms-builder-iframe",
title: "WPForms Builder Popup"
* Get block placeholder (form selector) JSX code.
* @param {Object} attributes Block attributes.
* @param {Object} handlers Block event handlers.
* @param {Object} formOptions Form selector options.
* @return {JSX.Element} Block placeholder JSX code.
getBlockPlaceholder: function getBlockPlaceholder(attributes, handlers, formOptions) {
return /*#__PURE__*/React.createElement(Placeholder, {
key: "wpforms-gutenberg-form-selector-wrap",
className: "wpforms-gutenberg-form-selector-wrap"
}, /*#__PURE__*/React.createElement("img", {
src: wpforms_gutenberg_form_selector.logo_url,
}), /*#__PURE__*/React.createElement(SelectControl, {
key: "wpforms-gutenberg-form-selector-select-control",
value: attributes.formId,
onChange: function onChange(value) {
return handlers.attrChange('formId', value);
* Get Style Settings panel class.
* @param {Object} props Block properties.
* @return {string} Style Settings panel class.
getPanelClass: function getPanelClass(props) {
var cssClass = 'wpforms-gutenberg-panel wpforms-block-settings-' + props.clientId;
if (!app.isFullStylingEnabled()) {
cssClass += ' disabled_panel';
* Determine whether the full styling is enabled.
* @return {boolean} Whether the full styling is enabled.
isFullStylingEnabled: function isFullStylingEnabled() {
return wpforms_gutenberg_form_selector.is_modern_markup && wpforms_gutenberg_form_selector.is_full_styling;
* Get block container DOM element.
* @param {Object} props Block properties.
* @return {Element} Block container.
getBlockContainer: function getBlockContainer(props) {
var blockSelector = "#block-".concat(props.clientId, " > div");
var block = document.querySelector(blockSelector);
// For FSE / Gutenberg plugin we need to take a look inside the iframe.
var editorCanvas = document.querySelector('iframe[name="editor-canvas"]');
block = editorCanvas && editorCanvas.contentWindow.document.querySelector(blockSelector);
* Get settings fields event handlers.
* @param {Object} props Block properties.
* @return {Object} Object that contains event handlers for the settings fields.
getSettingsFieldsHandlers: function getSettingsFieldsHandlers(props) {
// eslint-disable-line max-lines-per-function
* Field style attribute change event handler.
* @param {string} attribute Attribute name.
* @param {string} value New attribute value.
styleAttrChange: function styleAttrChange(attribute, value) {
var block = app.getBlockContainer(props),
container = block.querySelector("#wpforms-".concat(props.attributes.formId)),
property = attribute.replace(/[A-Z]/g, function (letter) {
return "-".concat(letter.toLowerCase());
for (var key in sizes[property][value]) {
container.style.setProperty("--wpforms-".concat(property, "-").concat(key), sizes[property][value][key]);
container.style.setProperty("--wpforms-".concat(property), value);
setAttr[attribute] = value;
props.setAttributes(setAttr);
triggerServerRender = false;
this.updateCopyPasteContent();
$(window).trigger('wpformsFormSelectorStyleAttrChange', [block, props, attribute, value]);
* Field regular attribute change event handler.
* @param {string} attribute Attribute name.
* @param {string} value New attribute value.
attrChange: function attrChange(attribute, value) {
setAttr[attribute] = value;
props.setAttributes(setAttr);
triggerServerRender = true;
this.updateCopyPasteContent();
* Reset Form Styles settings to defaults.
resetSettings: function resetSettings() {
for (var key in defaultStyleSettings) {
this.styleAttrChange(key, defaultStyleSettings[key]);
* Update content of the "Copy/Paste" fields.
updateCopyPasteContent: function updateCopyPasteContent() {
var atts = wp.data.select('core/block-editor').getBlockAttributes(props.clientId);
for (var key in defaultStyleSettings) {
content[key] = atts[key];
copyPasteJsonValue: JSON.stringify(content)
* Paste settings handler.
* @param {string} value New attribute value.
pasteSettings: function pasteSettings(value) {
var pasteAttributes = app.parseValidateJson(value);
wp.data.dispatch('core/notices').createErrorNotice(strings.copy_paste_error, {
id: 'wpforms-json-parse-error'
this.updateCopyPasteContent();
pasteAttributes.copyPasteJsonValue = value;
props.setAttributes(pasteAttributes);
triggerServerRender = true;
* Parse and validate JSON string.
* @param {string} value JSON string.
* @return {boolean|object} Parsed JSON object OR false on error.
parseValidateJson: function parseValidateJson(value) {
if (typeof value !== 'string') {
atts = JSON.parse(value);
* Get WPForms icon DOM element.
* @return {DOM.element} WPForms icon DOM element.
getIcon: function getIcon() {
return createElement('svg', {