diff --git a/assets/css/admin/gutenblock-editor.css b/assets/css/admin/gutenblock-editor.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/assets/css/admin/gutenblock.css b/assets/css/admin/gutenblock.css deleted file mode 100644 index c16578a3f..000000000 --- a/assets/css/admin/gutenblock.css +++ /dev/null @@ -1,102 +0,0 @@ -.wpuf-block-logo{ - max-width: 50px !important; - max-height: 50px; - float: left; - margin-right: 15px; - margin-bottom: 10px; -} - -#wpuf-filter-input-main{ - clear: both; -} - -.wpuf-iframe-container { - position: relative; -} -.wpuf-iframe-overlay { - position: absolute; - top: 0; right: 0; bottom: 0; left: 0; -} -.wpuf-block-form-selector { - background-color: lightgrey; - border-bottom: 1px solid; - margin-bottom: 5px; - padding: 4px; -} - -.wpuf-filter-input { - border: 1px solid #ddd; - border-radius: 5px; - box-shadow: inset 0 1px 2px rgba(0,0,0,.07); - padding: 0; - width: 100%; - margin-top: 10px; - margin-bottom: 10px; - position: relative; -} - -.wpuf-filter-input .blocks-select-control__input { - margin: 0 0 0 0; -} - -.wpuf-filter-input-el { - border: none !important; - box-shadow: none !important; - width: 95%; - position: relative; - display: inline-block; -} - -.wpuf-filter-input-icon { - display: inline-block; - content: '▾'; - color: #999; - font-size: 14px; - right: .77em; - position: absolute; - top: .2em; -} - -#wpuf-formFilter-main { - border-top: none; - border-left: none; - border-bottom: none; -} - -#wpuf-formFilter-sidebar { - border-top: none; - border-left: none; - border-bottom: none; - width: 95%; -} - -#wpuf-filter-input-icon-sidebar { - font-size: 1.4em; - top: .35em; - right: .45em; -} - -.wpuf-filter-input-el.blocks-select-control__input > .components-base-control__field { - margin-bottom: 0; -} - -.wpuf-filter-option-container { - display: none; - position: absolute; - background-color: #edeff0; - z-index: 10000; - padding: 4px; - width: 100%; - border-radius: 5px; - max-height: 200px; - overflow: scroll; - box-shadow: 0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)!important; -} -.wpuf-filter-option { - list-style: none; -} - -.wpuf-filter-option:hover { - background-color: #0073aa; - color: white; -} \ No newline at end of file diff --git a/assets/css/frontend-form/layout2.css b/assets/css/frontend-form/layout2.css index de2252229..9566a6aee 100644 --- a/assets/css/frontend-form/layout2.css +++ b/assets/css/frontend-form/layout2.css @@ -26,7 +26,7 @@ body.mceContentBody{ .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li.has-error { background: transparent; } -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li.has-error .wpuf-fields input, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li.has-error .wpuf-fields input:not([type="file"]):not([type="radio"]):not([type="checkbox"]):not([type="submit"]), .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li.has-error .wpuf-fields textarea, .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li.has-error .wpuf-fields select { border-color: #F20000; @@ -34,10 +34,9 @@ body.mceContentBody{ .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li.has-error .wpuf-fields .wpuf-error-msg { color: #F20000; } -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields input, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields textarea, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields select { - width: 100%; +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields input:not([type="file"]):not([type="radio"]):not([type="checkbox"]):not([type="submit"]), +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields textarea { + width: 100% !important; background: #292C3F; -moz-box-shadow: none; -webkit-box-shadow: none; @@ -52,6 +51,15 @@ body.mceContentBody{ color: #fff; } .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields select { + background: #292C3F; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid #33374D; + border-radius: 5px; + font-size: 14px; + box-sizing: border-box; + color: #fff; padding: 10px; height: inherit; } @@ -156,7 +164,7 @@ body.mceContentBody{ border-radius: 5px; background: transparent; color: #BFC4D1; - width: inherit; + width: auto; position: relative; text-transform: uppercase; box-shadow: none; @@ -191,10 +199,10 @@ body.mceContentBody{ .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li .wpuf-fields .wpuf-help { color: #6F4A70; } -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:active, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:hover, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:focus, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:visited, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:not([type="file"]):not([type="radio"]):not([type="checkbox"]):not([type="submit"]):active, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:not([type="file"]):not([type="radio"]):not([type="checkbox"]):not([type="submit"]):hover, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:not([type="file"]):not([type="radio"]):not([type="checkbox"]):not([type="submit"]):focus, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li input:not([type="file"]):not([type="radio"]):not([type="checkbox"]):not([type="submit"]):visited, .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li textarea:active, .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li textarea:hover, .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li textarea:focus, @@ -203,10 +211,10 @@ body.mceContentBody{ .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li select:hover, .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li select:focus, .wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li select:visited, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:active, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:hover, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:focus, -.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:visited { +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:not(.file-selector):not(.wpuf-insert-image):active, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:not(.file-selector):not(.wpuf-insert-image):hover, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:not(.file-selector):not(.wpuf-insert-image):focus, +.wpuf-form-add.wpuf-form-layout2 ul.wpuf-form li a:not(.file-selector):not(.wpuf-insert-image):visited { outline: none; border-color: #00C14B; } diff --git a/assets/css/frontend-form/layout4.css b/assets/css/frontend-form/layout4.css index bdbc406b5..c7c198888 100644 --- a/assets/css/frontend-form/layout4.css +++ b/assets/css/frontend-form/layout4.css @@ -153,19 +153,6 @@ body.mceContentBody { box-shadow: none; } -.wpuf-form-add.wpuf-form-layout4 ul.wpuf-form li .wpuf-fields a.file-selector:before { - position: absolute; - top: 0; - left: 0; - width: 40px; - height: 40px; - font-size: 36px; - content: "\f317"; - font-family: dashicons; - line-height: 40px; - text-align: center; -} - .wpuf-form-add.wpuf-form-layout4 ul.wpuf-form li .wpuf-fields .wpuf-address-field.city_name, .wpuf-form-add.wpuf-form-layout4 ul.wpuf-form li .wpuf-fields .wpuf-address-field.zip { margin-right: 6%; diff --git a/assets/css/frontend-forms.css b/assets/css/frontend-forms.css index 197b906cf..aa2b660df 100644 --- a/assets/css/frontend-forms.css +++ b/assets/css/frontend-forms.css @@ -427,7 +427,9 @@ body ul.wpuf-form li .wpuf-fields .wpuf-checkbox-inline { } body ul.wpuf-form li .wpuf-fields .wpuf-radio-block, body ul.wpuf-form li .wpuf-fields .wpuf-checkbox-block { - display: block; + display: flex; + align-items: center; + gap: 1rem; margin-bottom: 6px; } body ul.wpuf-form li .wpuf-fields .google-map img { diff --git a/assets/js/admin/blockFrameSetup.js b/assets/js/admin/blockFrameSetup.js deleted file mode 100644 index 08497e309..000000000 --- a/assets/js/admin/blockFrameSetup.js +++ /dev/null @@ -1,15 +0,0 @@ -// moved to separate file so we could enqueue it and make sure jquery was loaded -(function() { - jQuery( document ).ready( function() { - var frameEl = window.frameElement; - - // get the form element - var $form = jQuery('.wpuf-form-add'); - // get the height of the form - var height = $form.find( '.wpuf-form' ).outerHeight(true); - - if (frameEl) { - frameEl.height = height + 200; - } - }); -})(); \ No newline at end of file diff --git a/assets/js/admin/gutenblock.js b/assets/js/admin/gutenblock.js deleted file mode 100644 index 19b5c50b2..000000000 --- a/assets/js/admin/gutenblock.js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * WPUF Block - * - * A block for embedding a wpuf form into a post/page. - */ -( function( blocks, i18n, editor, element, components ) { - - var el = element.createElement, // function to create elements - TextControl = components.TextControl,// text input control - InspectorControls = editor.InspectorControls; // sidebar controls - - // register our block - blocks.registerBlockType( 'wpuf/form', { - title: 'WPUF Forms', - icon: 'feedback', - category: 'common', - - attributes: { - formID: { - type: 'integer', - default: 0 - }, - formName: { - type: 'string', - default: '' - } - }, - - edit: function( props ) { - - var formID = props.attributes.formID; - - var formName = props.attributes.formName; - - var children = []; - - if( ! formID ) formID = ''; // Default. - if( ! formName ) formName = ''; // Default - - // this function is required, but we don't need it to do anything - function wpufOnValueChange( formName ) { } - - // show the dropdown when we click on the input - function wpufFocusClick( event ) { - var elID = event.target.getAttribute( 'id' ); - var idArray = elID.split( '-' ); - var wpufOptions = document.getElementById( 'wpuf-filter-container-' + idArray[ idArray.length -1 ] ); - // get the related input element - var wpufInput = document.getElementById( 'wpuf-formFilter-' + idArray[ idArray.length -1 ] ); - // set focus to the element so the onBlur function runs properly - wpufInput.focus(); - wpufOptions.style.display = 'block'; - } - - // function for select the form on filter drop down item click - function selectForm( event ) { - //set the attributes from the selected for item - props.setAttributes( { - formID: parseInt( event.target.getAttribute( 'data-formid' ) ), - formName: event.target.innerText - } ); - /** - * Get the main div of the filter to tell if this is being - * selected from the sidebar or block so we can hide the dropdown - */ - var elID = event.target.parentNode.parentNode; - var idArray = elID.getAttribute( 'id' ).split( '-' ); - var wpufOptions = document.getElementById( 'wpuf-filter-container-' + idArray[ idArray.length -1 ] ); - var inputEl = document.getElementById( 'wpuf-formFilter-sidebar' ); - - if( inputEl ) { - inputEl.value = ''; - } - wpufOptions.style.display = 'none'; - } - - function wpufHideOptions( event ) { - /** - * Get the main div of the filter to tell if this is being - * selected from the sidebar or block so we can hide the dropdown - */ - var elID = event.target.getAttribute( 'id' ); - var idArray = elID.split( '-' ); - var wpufOptions = document.getElementById( 'wpuf-filter-container-' + idArray[ idArray.length -1 ] ); - wpufOptions.style.display = 'none'; - } - - function wpufInputKeyUp( event ) { - var val = event.target.value; - /** - * Get the main div of the filter to tell if this is being - * selected from the sidebar or block so we can SHOW the dropdown - */ - var filterInputContainer = event.target.parentNode.parentNode.parentNode; - filterInputContainer.querySelector( '.wpuf-filter-option-container' ).style.display = 'block'; - filterInputContainer.style.display = 'block'; - - // Let's filter the forms here - _.each( wpufBlock.forms, function( form, index ) { - var liEl = filterInputContainer.querySelector( "[data-formid='" + form.value + "']" ); - if ( 0 <= form.label.toLowerCase().indexOf( val.toLowerCase() ) ) { - // shows options that DO contain the text entered - liEl.style.display = 'block'; - } else { - // hides options the do not contain the text entered - liEl.style.display = 'none'; - } - }); - } - - // Set up the form items from the localized php variables - var formItems = []; - _.each( wpufBlock.forms, function( form, index ) { - formItems.push( el( 'li', { className: 'wpuf-filter-option', - 'data-formid': form.value, onMouseDown: selectForm}, - form.label + " ( ID: " + form.value + " )" )) - }); - - // Set up form filter for the block - var inputFilterMain = el( 'div', { id: 'wpuf-filter-input-main', - className: 'wpuf-filter-input' }, - el( TextControl, { id: 'wpuf-formFilter-main', - placeHolder: 'Select a Form', - className: 'wpuf-filter-input-el blocks-select-control__input', - onChange: wpufOnValueChange, - onClick: wpufFocusClick, - onKeyUp: wpufInputKeyUp, - onBlur: wpufHideOptions - } ), - el( 'span', { id: 'wpuf-filter-input-icon-main', - className: 'wpuf-filter-input-icon', - onClick: wpufFocusClick, - dangerouslySetInnerHTML: { __html: '▾' } } ), - el( 'div', { id: 'wpuf-filter-container-main', - className: 'wpuf-filter-option-container' }, - el( 'ul', null, formItems ) - ) - ); - // Create filter input for the sidebar blocks settings - var inputFilterSidebar = el( 'div', { id: 'wpuf-filter-input-sidebar', - className: 'wpuf-filter-input' }, - el( TextControl, { id: 'wpuf-formFilter-sidebar', - placeHolder: 'Select a Form', - className: 'wpuf-filter-input-el blocks-select-control__input', - onChange: wpufOnValueChange, - onClick: wpufFocusClick, - onKeyUp: wpufInputKeyUp, - onBlur: wpufHideOptions - } ), - el( 'span', { id: 'wpuf-filter-input-icon-sidebar', - className: 'wpuf-filter-input-icon', - onClick: wpufFocusClick, - dangerouslySetInnerHTML: { __html: '▾' } } ), - el( 'div', { id: 'wpuf-filter-container-sidebar', - className: 'wpuf-filter-option-container' }, - el( 'ul', null, formItems ) - ) - ); - - // Set up the form filter dropdown in the side bar 'block' settings - var inspectorControls = el( InspectorControls, {}, - el( 'span', null, 'Current selected form:' ), - el( 'br', null ), - el( 'span', null, formName ), - el( 'br', null ), - el ('hr', null ), - el ( 'label', { for: 'wpuf-formFilter-sidebar' }, 'Type to' + - ' filter' + - ' forms' ), - inputFilterSidebar - ); - - /** - * Create the div container, add an overlay so the user can interact - * with the form in Gutenberg, then render the iframe with form - */ - if( '' === formID ) { - children.push( el( 'div', {style : {width: '100%'}}, - el( 'img', { className: 'wpuf-block-logo', src: wpufBlock.block_logo}), - el ( 'div', null, 'WPUF Forms'), - inputFilterMain - ) ); - } else { - children.push( - el( 'div', { className: 'wpuf-iframe-container' }, - el( 'div', { className: 'wpuf-iframe-overlay' } ), - el( 'iframe', { src: wpufBlock.siteUrl + '?wpuf_preview=1&wpuf_iframe&form_id=' + formID, height: '0', width: '500', scrolling: 'no' }) - ) - ) - } - children.push(inspectorControls); - return [ - children - ]; - }, - - save: function( props ) { - var formID = props.attributes.formID; - - if( ! formID ) return ''; - /** - * we're essentially just adding a short code, here is where - * it's save in the editor - * - * return content wrapped in DIV b/c raw HTML is unsupported - * going forward - */ - var returnHTML = '[wpuf_form id=' + parseInt( formID ) + ']'; - return el( 'div', null, returnHTML ); - } - } ); - - -} )( - window.wp.blocks, - window.wp.i18n, - window.wp.editor, - window.wp.element, - window.wp.components -); \ No newline at end of file diff --git a/assets/js/blocks/js/blocks/post-form/block.json b/assets/js/blocks/js/blocks/post-form/block.json new file mode 100644 index 000000000..c7c87e544 --- /dev/null +++ b/assets/js/blocks/js/blocks/post-form/block.json @@ -0,0 +1,289 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 3, + "name": "wpuf/post-form", + "version": "1.0.0", + "title": "Post Form", + "category": "wpuf", + "description": "Embed a WPUF post form with customisable styling.", + "textdomain": "wp-user-frontend", + "icon": "feedback", + "keywords": [ + "post", + "submission", + "form", + "wpuf" + ], + "attributes": { + "blockId": { + "type": "string", + "default": "" + }, + "formId": { + "type": "number", + "default": 0 + }, + "activeTemplate": { + "type": "string", + "default": "default" + }, + "labelPosition": { + "type": "string", + "default": "above" + }, + "labelFontSize": { + "type": "string", + "default": "14px" + }, + "labelColor": { + "type": "string", + "default": "" + }, + "labelFontWeight": { + "type": "string", + "default": "normal" + }, + "labelFontFamily": { + "type": "string", + "default": "" + }, + "labelFontStyle": { + "type": "string", + "default": "" + }, + "helpTextColor": { + "type": "string", + "default": "" + }, + "helpTextFontFamily": { + "type": "string", + "default": "" + }, + "helpTextFontSize": { + "type": "string", + "default": "12px" + }, + "helpTextFontStyle": { + "type": "string", + "default": "" + }, + "helpTextFontWeight": { + "type": "string", + "default": "" + }, + "fieldBorder": { + "type": "object", + "default": { + "color": "#dddddd", + "style": "solid", + "width": "1px" + } + }, + "fieldBorderRadius": { + "type": "string", + "default": "4px" + }, + "fieldPaddingV": { + "type": "string", + "default": "8px" + }, + "fieldPaddingH": { + "type": "string", + "default": "12px" + }, + "fieldBackgroundColor": { + "type": "string", + "default": "" + }, + "fieldTextColor": { + "type": "string", + "default": "" + }, + "fieldPlaceholderColor": { + "type": "string", + "default": "" + }, + "fieldFontFamily": { + "type": "string", + "default": "" + }, + "fieldFontSize": { + "type": "string", + "default": "14px" + }, + "fieldFontStyle": { + "type": "string", + "default": "" + }, + "fieldFontWeight": { + "type": "string", + "default": "" + }, + "fieldMarginBottom": { + "type": "string", + "default": "16px" + }, + "fieldFocusBorderColor": { + "type": "string", + "default": "" + }, + "buttonBackgroundColor": { + "type": "string", + "default": "" + }, + "buttonTextColor": { + "type": "string", + "default": "" + }, + "buttonFontFamily": { + "type": "string", + "default": "" + }, + "buttonFontStyle": { + "type": "string", + "default": "" + }, + "buttonFontWeight": { + "type": "string", + "default": "" + }, + "buttonBorderWidth": { + "type": "string", + "default": "0px" + }, + "buttonBorderRadius": { + "type": "string", + "default": "4px" + }, + "buttonFontSize": { + "type": "string", + "default": "14px" + }, + "buttonPaddingV": { + "type": "string", + "default": "10px" + }, + "buttonPaddingH": { + "type": "string", + "default": "20px" + }, + "uploadButtonBackgroundColor": { + "type": "string", + "default": "" + }, + "uploadButtonTextColor": { + "type": "string", + "default": "" + }, + "uploadButtonFontFamily": { + "type": "string", + "default": "" + }, + "uploadButtonFontStyle": { + "type": "string", + "default": "" + }, + "uploadButtonFontWeight": { + "type": "string", + "default": "" + }, + "uploadButtonBorderColor": { + "type": "string", + "default": "#dddddd" + }, + "uploadButtonBorderWidth": { + "type": "string", + "default": "1px" + }, + "uploadButtonBorderRadius": { + "type": "string", + "default": "4px" + }, + "uploadButtonFontSize": { + "type": "string", + "default": "13px" + }, + "uploadButtonPaddingV": { + "type": "string", + "default": "8px" + }, + "uploadButtonPaddingH": { + "type": "string", + "default": "16px" + }, + "msButtonBackgroundColor": { + "type": "string", + "default": "#1e1e1e" + }, + "msButtonTextColor": { + "type": "string", + "default": "#ffffff" + }, + "msButtonFontFamily": { + "type": "string", + "default": "" + }, + "msButtonFontStyle": { + "type": "string", + "default": "" + }, + "msButtonFontWeight": { + "type": "string", + "default": "" + }, + "msButtonBorderColor": { + "type": "string", + "default": "" + }, + "msButtonBorderWidth": { + "type": "string", + "default": "0px" + }, + "msButtonBorderRadius": { + "type": "string", + "default": "4px" + }, + "msButtonFontSize": { + "type": "string", + "default": "14px" + }, + "msButtonPaddingV": { + "type": "string", + "default": "10px" + }, + "msButtonPaddingH": { + "type": "string", + "default": "20px" + }, + "msActiveBgColor": { + "type": "string", + "default": "" + }, + "msActiveTextColor": { + "type": "string", + "default": "" + }, + "msInactiveBgColor": { + "type": "string", + "default": "" + } + }, + "supports": { + "color": { + "background": true, + "text": false, + "gradients": false + }, + "spacing": { + "margin": true, + "padding": true + }, + "align": [ + "wide", + "full" + ], + "html": false + }, + "editorScript": "wpuf-post-form-editor", + "editorStyle": "wpuf-post-form-editor-style" +} \ No newline at end of file diff --git a/assets/js/blocks/post-form-rtl.css b/assets/js/blocks/post-form-rtl.css new file mode 100644 index 000000000..58fae2015 --- /dev/null +++ b/assets/js/blocks/post-form-rtl.css @@ -0,0 +1,152 @@ +/** + * Editor styles for the wpuf/post-form block. + */ + +/* ── Template picker grid ── */ +.wpuf-pf-templates { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + margin-top: 4px; +} + +.components-base-control span.components-base-control__label, +.components-base-control label { + margin-top: .5rem; +} + +/* ── Template card ── */ +.wpuf-pf-template-card { + position: relative; + display: flex; + flex-direction: column; + align-items: stretch; + padding: 0; + border: 2px solid #ddd; + border-radius: 6px; + background: #fff; + cursor: pointer; + transition: border-color 0.15s ease, box-shadow 0.15s ease; + overflow: hidden; + text-align: right; +} + +.wpuf-pf-template-card:hover { + border-color: #949494; +} + +.wpuf-pf-template-card.is-active { + border-color: var(--wp-admin-theme-color, #3858e9); + box-shadow: 0 0 0 1px var(--wp-admin-theme-color, #3858e9); +} + +/* ── Checkmark badge ── */ +.wpuf-pf-template-card__badge { + display: none; + position: absolute; + top: 6px; + left: 6px; + width: 20px; + height: 20px; + border-radius: 50%; + background: var(--wp-admin-theme-color, #3858e9); + color: #fff; + align-items: center; + justify-content: center; + font-size: 12px; + line-height: 1; + z-index: 1; +} + +.wpuf-pf-template-card.is-active .wpuf-pf-template-card__badge { + display: flex; +} + +/* ── Realistic form mini-preview ── */ +.wpuf-pf-template-preview { + padding: 12px 10px 8px; + display: flex; + flex-direction: column; + gap: 6px; + border-radius: 4px 4px 0 0; + transition: background 0.15s ease; +} + +.wpuf-pf-template-preview__row { + display: flex; + flex-direction: column; + gap: 3px; +} + +.wpuf-pf-template-preview__label { + height: 4px; + width: 40%; + border-radius: 2px; + opacity: 0.7; +} + +.wpuf-pf-template-preview__input { + height: 16px; + border-radius: 3px; + border-style: solid; +} + +.wpuf-pf-template-preview__button { + height: 14px; + width: 50%; + border-radius: 3px; + margin-top: 2px; + align-self: flex-start; +} + +/* ── Card text ── */ +.wpuf-pf-template-card__info { + padding: 8px 10px; + border-top: 1px solid #f0f0f0; +} + +.wpuf-pf-template-card__label { + font-size: 12px; + font-weight: 600; + margin: 0; + color: #1e1e1e; + line-height: 1.4; +} + +.wpuf-pf-template-card__desc { + font-size: 11px; + color: #757575; + margin: 2px 0 0; + line-height: 1.3; +} + +/* ── SSR loading overlay ── */ +.wpuf-ssr-loading-overlay { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: rgba(255, 255, 255, 0.7); + z-index: 5; +} + +.wpuf-ssr-loading { + width: 24px; + height: 24px; + border: 3px solid #ddd; + border-top-color: var(--wp-admin-theme-color, #3858e9); + border-radius: 50%; + animation: wpuf-spin 0.6s linear infinite; +} + +@keyframes wpuf-spin { + to { + transform: rotate(-360deg); + } +} + diff --git a/assets/js/blocks/post-form.asset.php b/assets/js/blocks/post-form.asset.php new file mode 100644 index 000000000..9a7914e0e --- /dev/null +++ b/assets/js/blocks/post-form.asset.php @@ -0,0 +1 @@ + array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-server-side-render'), 'version' => '3dfbde7de63cd94bef12'); diff --git a/assets/js/blocks/post-form.css b/assets/js/blocks/post-form.css new file mode 100644 index 000000000..3dc07540b --- /dev/null +++ b/assets/js/blocks/post-form.css @@ -0,0 +1,152 @@ +/** + * Editor styles for the wpuf/post-form block. + */ + +/* ── Template picker grid ── */ +.wpuf-pf-templates { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + margin-top: 4px; +} + +.components-base-control span.components-base-control__label, +.components-base-control label { + margin-top: .5rem; +} + +/* ── Template card ── */ +.wpuf-pf-template-card { + position: relative; + display: flex; + flex-direction: column; + align-items: stretch; + padding: 0; + border: 2px solid #ddd; + border-radius: 6px; + background: #fff; + cursor: pointer; + transition: border-color 0.15s ease, box-shadow 0.15s ease; + overflow: hidden; + text-align: left; +} + +.wpuf-pf-template-card:hover { + border-color: #949494; +} + +.wpuf-pf-template-card.is-active { + border-color: var(--wp-admin-theme-color, #3858e9); + box-shadow: 0 0 0 1px var(--wp-admin-theme-color, #3858e9); +} + +/* ── Checkmark badge ── */ +.wpuf-pf-template-card__badge { + display: none; + position: absolute; + top: 6px; + right: 6px; + width: 20px; + height: 20px; + border-radius: 50%; + background: var(--wp-admin-theme-color, #3858e9); + color: #fff; + align-items: center; + justify-content: center; + font-size: 12px; + line-height: 1; + z-index: 1; +} + +.wpuf-pf-template-card.is-active .wpuf-pf-template-card__badge { + display: flex; +} + +/* ── Realistic form mini-preview ── */ +.wpuf-pf-template-preview { + padding: 12px 10px 8px; + display: flex; + flex-direction: column; + gap: 6px; + border-radius: 4px 4px 0 0; + transition: background 0.15s ease; +} + +.wpuf-pf-template-preview__row { + display: flex; + flex-direction: column; + gap: 3px; +} + +.wpuf-pf-template-preview__label { + height: 4px; + width: 40%; + border-radius: 2px; + opacity: 0.7; +} + +.wpuf-pf-template-preview__input { + height: 16px; + border-radius: 3px; + border-style: solid; +} + +.wpuf-pf-template-preview__button { + height: 14px; + width: 50%; + border-radius: 3px; + margin-top: 2px; + align-self: flex-start; +} + +/* ── Card text ── */ +.wpuf-pf-template-card__info { + padding: 8px 10px; + border-top: 1px solid #f0f0f0; +} + +.wpuf-pf-template-card__label { + font-size: 12px; + font-weight: 600; + margin: 0; + color: #1e1e1e; + line-height: 1.4; +} + +.wpuf-pf-template-card__desc { + font-size: 11px; + color: #757575; + margin: 2px 0 0; + line-height: 1.3; +} + +/* ── SSR loading overlay ── */ +.wpuf-ssr-loading-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: rgba(255, 255, 255, 0.7); + z-index: 5; +} + +.wpuf-ssr-loading { + width: 24px; + height: 24px; + border: 3px solid #ddd; + border-top-color: var(--wp-admin-theme-color, #3858e9); + border-radius: 50%; + animation: wpuf-spin 0.6s linear infinite; +} + +@keyframes wpuf-spin { + to { + transform: rotate(360deg); + } +} + diff --git a/assets/js/blocks/post-form.css.map b/assets/js/blocks/post-form.css.map new file mode 100644 index 000000000..536b9ca8e --- /dev/null +++ b/assets/js/blocks/post-form.css.map @@ -0,0 +1 @@ +{"version":3,"file":"post-form.css","mappings":";;;AAAA;;EAEE;;AAEF,+BAA+B;AAC/B;IACI,aAAa;IACb,8BAA8B;IAC9B,SAAS;IACT,eAAe;AACnB;;AAEA;;IAEI,iBAAiB;AACrB;;AAEA,wBAAwB;AACxB;IACI,kBAAkB;IAClB,aAAa;IACb,sBAAsB;IACtB,oBAAoB;IACpB,UAAU;IACV,sBAAsB;IACtB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,0DAA0D;IAC1D,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,kDAAkD;IAClD,0DAA0D;AAC9D;;AAEA,0BAA0B;AAC1B;IACI,aAAa;IACb,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,gDAAgD;IAChD,WAAW;IACX,mBAAmB;IACnB,uBAAuB;IACvB,eAAe;IACf,cAAc;IACd,UAAU;AACd;;AAEA;IACI,aAAa;AACjB;;AAEA,sCAAsC;AACtC;IACI,sBAAsB;IACtB,aAAa;IACb,sBAAsB;IACtB,QAAQ;IACR,0BAA0B;IAC1B,iCAAiC;AACrC;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;AACZ;;AAEA;IACI,WAAW;IACX,UAAU;IACV,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,YAAY;IACZ,kBAAkB;IAClB,mBAAmB;AACvB;;AAEA;IACI,YAAY;IACZ,UAAU;IACV,kBAAkB;IAClB,eAAe;IACf,sBAAsB;AAC1B;;AAEA,oBAAoB;AACpB;IACI,iBAAiB;IACjB,6BAA6B;AACjC;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,cAAc;IACd,gBAAgB;AACpB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,eAAe;IACf,gBAAgB;AACpB;;AAEA,8BAA8B;AAC9B;IACI,kBAAkB;IAClB,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;IACvB,oCAAoC;IACpC,UAAU;AACd;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,sBAAsB;IACtB,sDAAsD;IACtD,kBAAkB;IAClB,yCAAyC;AAC7C;;AAEA;IACI;QACI,yBAAyB;IAC7B;AACJ","sources":["webpack://wp-user-frontend/./src/js/blocks/post-form/editor.css"],"sourcesContent":["/**\n * Editor styles for the wpuf/post-form block.\n */\n\n/* ── Template picker grid ── */\n.wpuf-pf-templates {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n margin-top: 4px;\n}\n\n.components-base-control span.components-base-control__label,\n.components-base-control label {\n margin-top: .5rem;\n}\n\n/* ── Template card ── */\n.wpuf-pf-template-card {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n padding: 0;\n border: 2px solid #ddd;\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n overflow: hidden;\n text-align: left;\n}\n\n.wpuf-pf-template-card:hover {\n border-color: #949494;\n}\n\n.wpuf-pf-template-card.is-active {\n border-color: var(--wp-admin-theme-color, #3858e9);\n box-shadow: 0 0 0 1px var(--wp-admin-theme-color, #3858e9);\n}\n\n/* ── Checkmark badge ── */\n.wpuf-pf-template-card__badge {\n display: none;\n position: absolute;\n top: 6px;\n right: 6px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--wp-admin-theme-color, #3858e9);\n color: #fff;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n line-height: 1;\n z-index: 1;\n}\n\n.wpuf-pf-template-card.is-active .wpuf-pf-template-card__badge {\n display: flex;\n}\n\n/* ── Realistic form mini-preview ── */\n.wpuf-pf-template-preview {\n padding: 12px 10px 8px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n border-radius: 4px 4px 0 0;\n transition: background 0.15s ease;\n}\n\n.wpuf-pf-template-preview__row {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.wpuf-pf-template-preview__label {\n height: 4px;\n width: 40%;\n border-radius: 2px;\n opacity: 0.7;\n}\n\n.wpuf-pf-template-preview__input {\n height: 16px;\n border-radius: 3px;\n border-style: solid;\n}\n\n.wpuf-pf-template-preview__button {\n height: 14px;\n width: 50%;\n border-radius: 3px;\n margin-top: 2px;\n align-self: flex-start;\n}\n\n/* ── Card text ── */\n.wpuf-pf-template-card__info {\n padding: 8px 10px;\n border-top: 1px solid #f0f0f0;\n}\n\n.wpuf-pf-template-card__label {\n font-size: 12px;\n font-weight: 600;\n margin: 0;\n color: #1e1e1e;\n line-height: 1.4;\n}\n\n.wpuf-pf-template-card__desc {\n font-size: 11px;\n color: #757575;\n margin: 2px 0 0;\n line-height: 1.3;\n}\n\n/* ── SSR loading overlay ── */\n.wpuf-ssr-loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.7);\n z-index: 5;\n}\n\n.wpuf-ssr-loading {\n width: 24px;\n height: 24px;\n border: 3px solid #ddd;\n border-top-color: var(--wp-admin-theme-color, #3858e9);\n border-radius: 50%;\n animation: wpuf-spin 0.6s linear infinite;\n}\n\n@keyframes wpuf-spin {\n to {\n transform: rotate(360deg);\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/assets/js/blocks/post-form.js b/assets/js/blocks/post-form.js new file mode 100644 index 000000000..3b029b4d3 --- /dev/null +++ b/assets/js/blocks/post-form.js @@ -0,0 +1 @@ +(()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var l in o)e.o(o,l)&&!e.o(t,l)&&Object.defineProperty(t,l,{enumerable:!0,get:o[l]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.blocks,o=JSON.parse('{"UU":"wpuf/post-form"}'),l=window.wp.blockEditor,n=window.wp.element,r=window.wp.components,a=window.wp.data,d=window.wp.notices,i=window.wp.serverSideRender;var u=e.n(i);const s=window.wp.i18n,p=[{id:"default",label:"Default",description:"Clean, inherits theme styles",preview:{bg:"#ffffff",border:"#dddddd",button:"#0073aa",text:"#333333"},attributes:{activeTemplate:"default",style:{color:{}},labelFontSize:"14px",labelColor:"#333333",labelFontWeight:"normal",labelFontFamily:"",labelFontStyle:"",helpTextColor:"#767676",helpTextFontFamily:"",helpTextFontSize:"12px",helpTextFontStyle:"",helpTextFontWeight:"",fieldBorder:{color:"#dddddd",style:"solid",width:"1px"},fieldBorderRadius:"4px",fieldPaddingV:"8px",fieldPaddingH:"12px",fieldBackgroundColor:"#ffffff",fieldTextColor:"#333333",fieldPlaceholderColor:"#aaaaaa",fieldFontFamily:"",fieldFontSize:"14px",fieldFontStyle:"",fieldFontWeight:"",fieldMarginBottom:"16px",fieldFocusBorderColor:"#0073aa",buttonBackgroundColor:"#0073aa",buttonTextColor:"#ffffff",buttonBorderColor:"",buttonBorderWidth:"0px",buttonBorderRadius:"4px",buttonFontSize:"14px",buttonFontFamily:"",buttonFontStyle:"",buttonFontWeight:"",buttonPaddingV:"10px",buttonPaddingH:"20px",uploadButtonBackgroundColor:"#f0f0f0",uploadButtonTextColor:"#333333",uploadButtonBorderColor:"#dddddd",uploadButtonBorderWidth:"1px",uploadButtonBorderRadius:"4px",uploadButtonFontSize:"13px",uploadButtonFontFamily:"",uploadButtonFontStyle:"",uploadButtonFontWeight:"",uploadButtonPaddingV:"8px",uploadButtonPaddingH:"16px",errorMessageColor:"#cc0000",successMessageColor:"#00a32a"}},{id:"dark",label:"Dark",description:"Dark background, light text",preview:{bg:"#1e1e2e",border:"#3d3d5c",button:"#7c3aed",text:"#f0f0f0"},attributes:{activeTemplate:"dark",style:{color:{background:"#1e1e2e"}},labelFontSize:"14px",labelColor:"#e0e0e0",labelFontWeight:"normal",labelFontFamily:"",labelFontStyle:"",helpTextColor:"#a0a0b0",helpTextFontFamily:"",helpTextFontSize:"12px",helpTextFontStyle:"",helpTextFontWeight:"",fieldBorder:{color:"#3d3d5c",style:"solid",width:"1px"},fieldBorderRadius:"6px",fieldPaddingV:"10px",fieldPaddingH:"14px",fieldBackgroundColor:"#2a2a3e",fieldTextColor:"#f0f0f0",fieldPlaceholderColor:"#6b6b8a",fieldFontFamily:"",fieldFontSize:"14px",fieldFontStyle:"",fieldFontWeight:"",fieldMarginBottom:"18px",fieldFocusBorderColor:"#7c3aed",buttonBackgroundColor:"#7c3aed",buttonTextColor:"#ffffff",buttonBorderColor:"",buttonBorderWidth:"0px",buttonBorderRadius:"6px",buttonFontSize:"14px",buttonFontFamily:"",buttonFontStyle:"",buttonFontWeight:"",buttonPaddingV:"12px",buttonPaddingH:"24px",uploadButtonBackgroundColor:"#2a2a3e",uploadButtonTextColor:"#e0e0e0",uploadButtonBorderColor:"#3d3d5c",uploadButtonBorderWidth:"1px",uploadButtonBorderRadius:"6px",uploadButtonFontSize:"13px",uploadButtonFontFamily:"",uploadButtonFontStyle:"",uploadButtonFontWeight:"",uploadButtonPaddingV:"8px",uploadButtonPaddingH:"16px",errorMessageColor:"#f87171",successMessageColor:"#34d399"}},{id:"colorful",label:"Colorful",description:"Vibrant purple accent",preview:{bg:"#fdf4ff",border:"#c084fc",button:"#9333ea",text:"#4a044e"},attributes:{activeTemplate:"colorful",style:{color:{}},labelFontSize:"14px",labelColor:"#7e22ce",labelFontWeight:"600",labelFontFamily:"",labelFontStyle:"",helpTextColor:"#a855f7",helpTextFontFamily:"",helpTextFontSize:"12px",helpTextFontStyle:"",helpTextFontWeight:"",fieldBorder:{color:"#c084fc",style:"solid",width:"2px"},fieldBorderRadius:"8px",fieldPaddingV:"10px",fieldPaddingH:"14px",fieldBackgroundColor:"#fdf4ff",fieldTextColor:"#4a044e",fieldPlaceholderColor:"#d8b4fe",fieldFontFamily:"",fieldFontSize:"14px",fieldFontStyle:"",fieldFontWeight:"",fieldMarginBottom:"20px",fieldFocusBorderColor:"#7e22ce",buttonBackgroundColor:"#9333ea",buttonTextColor:"#ffffff",buttonBorderColor:"",buttonBorderWidth:"0px",buttonBorderRadius:"8px",buttonFontSize:"15px",buttonFontFamily:"",buttonFontStyle:"",buttonFontWeight:"",buttonPaddingV:"12px",buttonPaddingH:"28px",uploadButtonBackgroundColor:"#f3e8ff",uploadButtonTextColor:"#7e22ce",uploadButtonBorderColor:"#c084fc",uploadButtonBorderWidth:"2px",uploadButtonBorderRadius:"8px",uploadButtonFontSize:"13px",uploadButtonFontFamily:"",uploadButtonFontStyle:"",uploadButtonFontWeight:"",uploadButtonPaddingV:"8px",uploadButtonPaddingH:"16px",errorMessageColor:"#be123c",successMessageColor:"#16a34a"}},{id:"minimal",label:"Minimal",description:"Borderless fields, understated",preview:{bg:"#ffffff",border:"#e5e5e5",button:"#111111",text:"#111111"},attributes:{activeTemplate:"minimal",style:{color:{}},labelFontSize:"13px",labelColor:"#555555",labelFontWeight:"normal",labelFontFamily:"",labelFontStyle:"",helpTextColor:"#999999",helpTextFontFamily:"",helpTextFontSize:"11px",helpTextFontStyle:"",helpTextFontWeight:"",fieldBorder:{color:"#dddddd",style:"solid",width:"1px"},fieldBorderRadius:"0px",fieldPaddingV:"8px",fieldPaddingH:"4px",fieldBackgroundColor:"#ffffff",fieldTextColor:"#111111",fieldPlaceholderColor:"#cccccc",fieldFontFamily:"",fieldFontSize:"13px",fieldFontStyle:"",fieldFontWeight:"",fieldMarginBottom:"20px",fieldFocusBorderColor:"#111111",buttonBackgroundColor:"#111111",buttonTextColor:"#ffffff",buttonBorderColor:"",buttonBorderWidth:"0px",buttonBorderRadius:"2px",buttonFontSize:"13px",buttonFontFamily:"",buttonFontStyle:"",buttonFontWeight:"",buttonPaddingV:"10px",buttonPaddingH:"24px",uploadButtonBackgroundColor:"#ffffff",uploadButtonTextColor:"#555555",uploadButtonBorderColor:"#e5e5e5",uploadButtonBorderWidth:"0px",uploadButtonBorderRadius:"0px",uploadButtonFontSize:"13px",uploadButtonFontFamily:"",uploadButtonFontStyle:"",uploadButtonFontWeight:"",uploadButtonPaddingV:"8px",uploadButtonPaddingH:"4px",errorMessageColor:"#cc0000",successMessageColor:"#008000"}},{id:"bold",label:"Bold",description:"Strong borders, high contrast",preview:{bg:"#ffffff",border:"#000000",button:"#f59e0b",text:"#000000"},attributes:{activeTemplate:"bold",style:{color:{}},labelFontSize:"15px",labelColor:"#000000",labelFontWeight:"700",labelFontFamily:"",labelFontStyle:"",helpTextColor:"#555555",helpTextFontFamily:"",helpTextFontSize:"13px",helpTextFontStyle:"",helpTextFontWeight:"",fieldBorder:{color:"#000000",style:"solid",width:"2px"},fieldBorderRadius:"0px",fieldPaddingV:"10px",fieldPaddingH:"14px",fieldBackgroundColor:"#ffffff",fieldTextColor:"#000000",fieldPlaceholderColor:"#999999",fieldFontFamily:"",fieldFontSize:"15px",fieldFontStyle:"",fieldFontWeight:"",fieldMarginBottom:"20px",fieldFocusBorderColor:"#f59e0b",buttonBackgroundColor:"#f59e0b",buttonTextColor:"#000000",buttonBorderColor:"#000000",buttonBorderWidth:"2px",buttonBorderRadius:"0px",buttonFontSize:"15px",buttonFontFamily:"",buttonFontStyle:"",buttonFontWeight:"",buttonPaddingV:"12px",buttonPaddingH:"28px",uploadButtonBackgroundColor:"#ffffff",uploadButtonTextColor:"#000000",uploadButtonBorderColor:"#000000",uploadButtonBorderWidth:"2px",uploadButtonBorderRadius:"0px",uploadButtonFontSize:"13px",uploadButtonFontFamily:"",uploadButtonFontStyle:"",uploadButtonFontWeight:"",uploadButtonPaddingV:"8px",uploadButtonPaddingH:"16px",errorMessageColor:"#cc0000",successMessageColor:"#166534"}}],f=window.ReactJSXRuntime,x=[{value:"px",label:"px",default:14},{value:"em",label:"em",default:1},{value:"rem",label:"rem",default:1}],c=[{value:"px",label:"px",default:8},{value:"em",label:"em",default:.5},{value:"rem",label:"rem",default:.5},{value:"%",label:"%",default:5}],g=[{value:"px",label:"px",default:1},{value:"em",label:"em",default:.1},{value:"rem",label:"rem",default:.1}],b=[{value:"px",label:"px",default:4},{value:"em",label:"em",default:.25},{value:"rem",label:"rem",default:.25},{value:"%",label:"%",default:5}];function F(e,t){if(!e||!t?.length)return[];const o=t.find(t=>t.fontFamily===e);return o?.fontFace||[]}function _({template:e,isActive:t,onSelect:o}){const{preview:l,attributes:n}=e;return(0,f.jsxs)("button",{type:"button",className:"wpuf-pf-template-card"+(t?" is-active":""),onClick:()=>o(e),"aria-pressed":t,children:[(0,f.jsx)("span",{className:"wpuf-pf-template-card__badge",children:"✓"}),(0,f.jsxs)("div",{className:"wpuf-pf-template-preview",style:{background:l.bg},children:[(0,f.jsxs)("div",{className:"wpuf-pf-template-preview__row",children:[(0,f.jsx)("div",{className:"wpuf-pf-template-preview__label",style:{background:l.text}}),(0,f.jsx)("div",{className:"wpuf-pf-template-preview__input",style:{background:n.fieldBackgroundColor||l.bg,borderColor:l.border,borderWidth:n.fieldBorder?.width||"1px",borderRadius:n.fieldBorderRadius}})]}),(0,f.jsxs)("div",{className:"wpuf-pf-template-preview__row",children:[(0,f.jsx)("div",{className:"wpuf-pf-template-preview__label",style:{background:l.text}}),(0,f.jsx)("div",{className:"wpuf-pf-template-preview__input",style:{background:n.fieldBackgroundColor||l.bg,borderColor:l.border,borderWidth:n.fieldBorder?.width||"1px",borderRadius:n.fieldBorderRadius}})]}),(0,f.jsx)("div",{className:"wpuf-pf-template-preview__button",style:{background:l.button,borderRadius:n.buttonBorderRadius}})]}),(0,f.jsxs)("div",{className:"wpuf-pf-template-card__info",children:[(0,f.jsx)("p",{className:"wpuf-pf-template-card__label",children:e.label}),(0,f.jsx)("p",{className:"wpuf-pf-template-card__desc",children:e.description})]})]})}(0,t.registerBlockType)(o.UU,{edit:function({attributes:e,setAttributes:t}){const{blockId:o,formId:i,activeTemplate:B,labelPosition:h,labelFontSize:m,labelColor:C,labelFontWeight:y,labelFontFamily:S,labelFontStyle:w,helpTextColor:v,helpTextFontFamily:P,helpTextFontSize:T,helpTextFontStyle:j,helpTextFontWeight:W,fieldBorder:z,fieldBorderRadius:k,fieldPaddingV:R,fieldPaddingH:U,fieldBackgroundColor:H,fieldTextColor:V,fieldPlaceholderColor:N,fieldFontFamily:M,fieldFontSize:O,fieldFontStyle:D,fieldFontWeight:A,fieldMarginBottom:I,fieldFocusBorderColor:E,buttonBackgroundColor:G,buttonTextColor:L,buttonFontFamily:J,buttonFontStyle:X,buttonFontWeight:q,buttonBorderWidth:K,buttonBorderRadius:Q,buttonFontSize:Y,buttonPaddingV:Z,buttonPaddingH:$,uploadButtonBackgroundColor:ee,uploadButtonTextColor:te,uploadButtonFontFamily:oe,uploadButtonFontStyle:le,uploadButtonFontWeight:ne,uploadButtonBorderColor:re,uploadButtonBorderWidth:ae,uploadButtonBorderRadius:de,uploadButtonFontSize:ie,uploadButtonPaddingV:ue,uploadButtonPaddingH:se,msButtonBackgroundColor:pe,msButtonTextColor:fe,msButtonFontFamily:xe,msButtonFontStyle:ce,msButtonFontWeight:ge,msButtonBorderColor:be,msButtonBorderWidth:Fe,msButtonBorderRadius:_e,msButtonFontSize:Be,msButtonPaddingV:he,msButtonPaddingH:me,msActiveBgColor:Ce,msActiveTextColor:ye,msInactiveBgColor:Se}=e,we=(0,l.useBlockProps)(),{createNotice:ve}=(0,a.useDispatch)(d.store),Pe=function(){const[e]=(0,l.useSettings)("typography.fontFamilies");return e?[...e?.default||[],...e?.theme||[],...e?.custom||[]]:[]}(),Te=F(S,Pe),je=F(M,Pe),We=F(P,Pe),ze=F(J,Pe),ke=F(oe,Pe),Re=F(xe,Pe);(0,n.useEffect)(()=>{o||t({blockId:"wpuf-pf-"+Math.random().toString(36).slice(2,9)})},[]);const[Ue,He]=(0,n.useState)(!1),Ve=(0,n.useRef)(null),Ne=(0,n.useRef)(!0);(0,n.useEffect)(()=>{if(!Ne.current)return Ve.current&&clearTimeout(Ve.current),Ve.current=setTimeout(()=>{He(!0)},150),()=>clearTimeout(Ve.current);Ne.current=!1},[e]);const Me=(0,n.useRef)(null),Oe=(0,n.useCallback)(o=>{if(o.id===B)return;const l={...e};Me.current=l,t(o.attributes),ve("info",o.label+" "+(0,s.__)("template applied.","wp-user-frontend"),{type:"snackbar",isDismissible:!0,actions:[{label:(0,s.__)("Undo","wp-user-frontend"),onClick:()=>{Me.current&&(t(Me.current),Me.current=null)}}]})},[B,e,t,ve]),De=(window.wpufPostForm||{}).forms||[],Ae=[{value:"0",label:(0,s.__)("— Select a post form —","wp-user-frontend")},...De.map(e=>({value:String(e.id),label:e.title}))],Ie=De.find(e=>e.id===i),Ee=Ie?.is_multistep||!1;return(0,f.jsxs)("div",{...we,children:[(0,f.jsx)(l.InspectorControls,{children:(0,f.jsx)(r.PanelBody,{title:(0,s.__)("Form Settings","wp-user-frontend"),initialOpen:!0,children:(0,f.jsx)(r.SelectControl,{label:(0,s.__)("Post Form","wp-user-frontend"),value:String(i||0),options:Ae,onChange:e=>{t({formId:parseInt(e,10)})},help:(0,s.__)("Select the post form to display.","wp-user-frontend")})})}),(0,f.jsxs)(l.InspectorControls,{group:"styles",children:[(0,f.jsx)(r.PanelBody,{title:(0,s.__)("Templates","wp-user-frontend"),initialOpen:!0,children:(0,f.jsx)("div",{className:"wpuf-pf-templates",children:p.map(e=>(0,f.jsx)(_,{template:e,isActive:B===e.id,onSelect:Oe},e.id))})}),(0,f.jsxs)(r.PanelBody,{title:(0,s.__)("Label Styles","wp-user-frontend"),initialOpen:!1,children:[(0,f.jsx)(l.__experimentalFontFamilyControl,{__next40pxDefaultSize:!0,fontFamilies:Pe,value:S,onChange:e=>t({labelFontFamily:e})}),(0,f.jsx)(l.__experimentalFontAppearanceControl,{__next40pxDefaultSize:!0,value:{fontStyle:w,fontWeight:y},onChange:({fontStyle:e,fontWeight:o})=>t({labelFontStyle:e,labelFontWeight:o}),fontFamilyFaces:Te,hasFontStyles:!0,hasFontWeights:!0}),(0,f.jsxs)(r.__experimentalToggleGroupControl,{label:(0,s.__)("Label Position","wp-user-frontend"),value:h,className:"wpuf-mt-2",onChange:e=>t({labelPosition:e}),isBlock:!0,children:[(0,f.jsx)(r.__experimentalToggleGroupControlOption,{value:"above",label:(0,s.__)("Above","wp-user-frontend")}),(0,f.jsx)(r.__experimentalToggleGroupControlOption,{value:"left",label:(0,s.__)("Left","wp-user-frontend")}),(0,f.jsx)(r.__experimentalToggleGroupControlOption,{value:"right",label:(0,s.__)("Right","wp-user-frontend")}),(0,f.jsx)(r.__experimentalToggleGroupControlOption,{value:"hidden",label:(0,s.__)("Hidden","wp-user-frontend")})]}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Font Size","wp-user-frontend"),value:m,onChange:e=>t({labelFontSize:e}),units:x})]}),(0,f.jsxs)(r.PanelBody,{title:(0,s.__)("Field Styles","wp-user-frontend"),initialOpen:!1,children:[(0,f.jsx)(l.__experimentalFontFamilyControl,{__next40pxDefaultSize:!0,fontFamilies:Pe,value:M,onChange:e=>t({fieldFontFamily:e})}),(0,f.jsx)(l.__experimentalFontAppearanceControl,{__next40pxDefaultSize:!0,value:{fontStyle:D,fontWeight:A},onChange:({fontStyle:e,fontWeight:o})=>t({fieldFontStyle:e,fieldFontWeight:o}),fontFamilyFaces:je,hasFontStyles:!0,hasFontWeights:!0}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Font Size","wp-user-frontend"),value:O,onChange:e=>t({fieldFontSize:e}),units:x}),(0,f.jsx)(r.BorderBoxControl,{__next40pxDefaultSize:!0,label:(0,s.__)("Border","wp-user-frontend"),value:z,onChange:e=>t({fieldBorder:e||{}})}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Radius","wp-user-frontend"),value:k,onChange:e=>t({fieldBorderRadius:e}),units:b}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Vertical","wp-user-frontend"),value:R,onChange:e=>t({fieldPaddingV:e}),units:c}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Horizontal","wp-user-frontend"),value:U,onChange:e=>t({fieldPaddingH:e}),units:c}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Margin Bottom","wp-user-frontend"),value:I,onChange:e=>t({fieldMarginBottom:e}),units:c})]}),(0,f.jsxs)(r.PanelBody,{title:(0,s.__)("Help Text Styles","wp-user-frontend"),initialOpen:!1,children:[(0,f.jsx)(l.__experimentalFontFamilyControl,{__next40pxDefaultSize:!0,fontFamilies:Pe,value:P,onChange:e=>t({helpTextFontFamily:e})}),(0,f.jsx)(l.__experimentalFontAppearanceControl,{__next40pxDefaultSize:!0,value:{fontStyle:j,fontWeight:W},onChange:({fontStyle:e,fontWeight:o})=>t({helpTextFontStyle:e,helpTextFontWeight:o}),fontFamilyFaces:We,hasFontStyles:!0,hasFontWeights:!0}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Font Size","wp-user-frontend"),value:T,onChange:e=>t({helpTextFontSize:e}),units:x})]}),(0,f.jsxs)(r.PanelBody,{title:(0,s.__)("Button Styles","wp-user-frontend"),initialOpen:!1,children:[(0,f.jsx)(l.__experimentalFontFamilyControl,{__next40pxDefaultSize:!0,fontFamilies:Pe,value:J,onChange:e=>t({buttonFontFamily:e})}),(0,f.jsx)(l.__experimentalFontAppearanceControl,{__next40pxDefaultSize:!0,value:{fontStyle:X,fontWeight:q},onChange:({fontStyle:e,fontWeight:o})=>t({buttonFontStyle:e,buttonFontWeight:o}),fontFamilyFaces:ze,hasFontStyles:!0,hasFontWeights:!0}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Font Size","wp-user-frontend"),value:Y,onChange:e=>t({buttonFontSize:e}),units:x}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Width","wp-user-frontend"),value:K,onChange:e=>t({buttonBorderWidth:e}),units:g}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Radius","wp-user-frontend"),value:Q,onChange:e=>t({buttonBorderRadius:e}),units:b}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Vertical","wp-user-frontend"),value:Z,onChange:e=>t({buttonPaddingV:e}),units:c}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Horizontal","wp-user-frontend"),value:$,onChange:e=>t({buttonPaddingH:e}),units:c})]}),(0,f.jsxs)(r.PanelBody,{title:(0,s.__)("Upload Button Styles","wp-user-frontend"),initialOpen:!1,children:[(0,f.jsx)(l.__experimentalFontFamilyControl,{__next40pxDefaultSize:!0,fontFamilies:Pe,value:oe,onChange:e=>t({uploadButtonFontFamily:e})}),(0,f.jsx)(l.__experimentalFontAppearanceControl,{__next40pxDefaultSize:!0,value:{fontStyle:le,fontWeight:ne},onChange:({fontStyle:e,fontWeight:o})=>t({uploadButtonFontStyle:e,uploadButtonFontWeight:o}),fontFamilyFaces:ke,hasFontStyles:!0,hasFontWeights:!0}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Font Size","wp-user-frontend"),value:ie,onChange:e=>t({uploadButtonFontSize:e}),units:x}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Width","wp-user-frontend"),value:ae,onChange:e=>t({uploadButtonBorderWidth:e}),units:g}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Radius","wp-user-frontend"),value:de,onChange:e=>t({uploadButtonBorderRadius:e}),units:b}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Vertical","wp-user-frontend"),value:ue,onChange:e=>t({uploadButtonPaddingV:e}),units:c}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Horizontal","wp-user-frontend"),value:se,onChange:e=>t({uploadButtonPaddingH:e}),units:c})]}),(0,f.jsx)(l.PanelColorSettings,{title:(0,s.__)("Colors","wp-user-frontend"),initialOpen:!1,colorSettings:[{value:C,onChange:e=>t({labelColor:e||""}),label:(0,s.__)("Label","wp-user-frontend")},{value:v,onChange:e=>t({helpTextColor:e||""}),label:(0,s.__)("Help Text","wp-user-frontend")},{value:E,onChange:e=>t({fieldFocusBorderColor:e||""}),label:(0,s.__)("Field Focus Border","wp-user-frontend")},{value:H,onChange:e=>t({fieldBackgroundColor:e||""}),label:(0,s.__)("Field Background","wp-user-frontend")},{value:V,onChange:e=>t({fieldTextColor:e||""}),label:(0,s.__)("Field Text","wp-user-frontend")},{value:N,onChange:e=>t({fieldPlaceholderColor:e||""}),label:(0,s.__)("Placeholder","wp-user-frontend")},{value:G,onChange:e=>t({buttonBackgroundColor:e||""}),label:(0,s.__)("Button Background","wp-user-frontend")},{value:L,onChange:e=>t({buttonTextColor:e||""}),label:(0,s.__)("Button Text","wp-user-frontend")},{value:ee,onChange:e=>t({uploadButtonBackgroundColor:e||""}),label:(0,s.__)("Upload Button Background","wp-user-frontend")},{value:te,onChange:e=>t({uploadButtonTextColor:e||""}),label:(0,s.__)("Upload Button Text","wp-user-frontend")},{value:re,onChange:e=>t({uploadButtonBorderColor:e||""}),label:(0,s.__)("Upload Button Border","wp-user-frontend")}]}),Ee&&(0,f.jsxs)(r.PanelBody,{title:(0,s.__)("Prev / Next Button Styles","wp-user-frontend"),initialOpen:!1,children:[(0,f.jsx)(l.__experimentalFontFamilyControl,{__next40pxDefaultSize:!0,fontFamilies:Pe,value:xe,onChange:e=>t({msButtonFontFamily:e})}),(0,f.jsx)(l.__experimentalFontAppearanceControl,{__next40pxDefaultSize:!0,value:{fontStyle:ce,fontWeight:ge},onChange:({fontStyle:e,fontWeight:o})=>t({msButtonFontStyle:e,msButtonFontWeight:o}),fontFamilyFaces:Re,hasFontStyles:!0,hasFontWeights:!0}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Font Size","wp-user-frontend"),value:Be,onChange:e=>t({msButtonFontSize:e}),units:x}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Width","wp-user-frontend"),value:Fe,onChange:e=>t({msButtonBorderWidth:e}),units:g}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Border Radius","wp-user-frontend"),value:_e,onChange:e=>t({msButtonBorderRadius:e}),units:b}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Vertical","wp-user-frontend"),value:he,onChange:e=>t({msButtonPaddingV:e}),units:c}),(0,f.jsx)(r.__experimentalUnitControl,{label:(0,s.__)("Padding Horizontal","wp-user-frontend"),value:me,onChange:e=>t({msButtonPaddingH:e}),units:c})]}),Ee&&(0,f.jsx)(l.PanelColorSettings,{title:(0,s.__)("Multistep Colors","wp-user-frontend"),initialOpen:!1,colorSettings:[{value:Ce,onChange:e=>t({msActiveBgColor:e||""}),label:(0,s.__)("Active Step Background","wp-user-frontend")},{value:ye,onChange:e=>t({msActiveTextColor:e||""}),label:(0,s.__)("Active Step Text","wp-user-frontend")},{value:Se,onChange:e=>t({msInactiveBgColor:e||""}),label:(0,s.__)("Inactive Step Background","wp-user-frontend")},{value:pe,onChange:e=>t({msButtonBackgroundColor:e||""}),label:(0,s.__)("Prev / Next Button Background","wp-user-frontend")},{value:fe,onChange:e=>t({msButtonTextColor:e||""}),label:(0,s.__)("Prev / Next Button Text","wp-user-frontend")},{value:be,onChange:e=>t({msButtonBorderColor:e||""}),label:(0,s.__)("Prev / Next Button Border","wp-user-frontend")}]})]}),(0,f.jsx)("div",{style:{position:"relative"},children:i?(0,f.jsxs)(f.Fragment,{children:[Ue&&(0,f.jsxs)("div",{className:"wpuf-ssr-loading-overlay",children:[(0,f.jsx)("div",{className:"wpuf-ssr-loading"}),(0,f.jsx)("p",{style:{marginTop:"12px",fontSize:"13px"},children:(0,s.__)("Updating preview…","wp-user-frontend")})]}),(0,f.jsx)(u(),{block:"wpuf/post-form",attributes:e,LoadingResponsePlaceholder:()=>((0,n.useEffect)(()=>()=>{He(!1)},[]),null),EmptyResponsePlaceholder:()=>(console.warn("[WPUF PostForm] SSR returned empty response",{formId:i}),(0,f.jsx)("p",{style:{padding:"12px",background:"#fff3cd",border:"1px solid #ffeeba"},children:(0,s.__)("SSR returned an empty response. Check the PHP error log.","wp-user-frontend")})),ErrorResponsePlaceholder:({response:e})=>(console.error("[WPUF PostForm] SSR error response",e),(0,f.jsxs)("p",{style:{padding:"12px",background:"#f8d7da",border:"1px solid #f5c6cb"},children:[(0,s.__)("SSR error: ","wp-user-frontend"),e?.errorMsg||JSON.stringify(e)]}))})]}):(0,f.jsx)("p",{style:{padding:"12px",textAlign:"center",color:"#757575"},children:(0,s.__)("Please select a post form to display.","wp-user-frontend")})})]})},save:function(){return null}})})(); \ No newline at end of file diff --git a/assets/js/blocks/post-form.js.map b/assets/js/blocks/post-form.js.map new file mode 100644 index 000000000..f439608c9 --- /dev/null +++ b/assets/js/blocks/post-form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"post-form.js","mappings":"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","sources":["webpack://wp-user-frontend/./src/js/blocks/post-form/edit.js","webpack://wp-user-frontend/./src/js/blocks/post-form/save.js","webpack://wp-user-frontend/./src/js/blocks/post-form/templates.js","webpack://wp-user-frontend/./src/js/blocks/post-form/editor.css","webpack://wp-user-frontend/external window \"ReactJSXRuntime\"","webpack://wp-user-frontend/external window [\"wp\",\"blockEditor\"]","webpack://wp-user-frontend/external window [\"wp\",\"blocks\"]","webpack://wp-user-frontend/external window [\"wp\",\"components\"]","webpack://wp-user-frontend/external window [\"wp\",\"data\"]","webpack://wp-user-frontend/external window [\"wp\",\"element\"]","webpack://wp-user-frontend/external window [\"wp\",\"i18n\"]","webpack://wp-user-frontend/external window [\"wp\",\"notices\"]","webpack://wp-user-frontend/external window [\"wp\",\"serverSideRender\"]","webpack://wp-user-frontend/webpack/bootstrap","webpack://wp-user-frontend/webpack/runtime/compat get default export","webpack://wp-user-frontend/webpack/runtime/define property getters","webpack://wp-user-frontend/webpack/runtime/hasOwnProperty shorthand","webpack://wp-user-frontend/webpack/runtime/make namespace object","webpack://wp-user-frontend/./src/js/blocks/post-form/index.js"],"sourcesContent":["// DESCRIPTION: Editor component for the post form block in wp-user-frontend.\n// Content settings in default InspectorControls, style controls in InspectorControls group=\"styles\".\n\nimport {\n InspectorControls,\n PanelColorSettings,\n useBlockProps,\n useSettings,\n __experimentalFontFamilyControl as FontFamilyControl,\n __experimentalFontAppearanceControl as FontAppearanceControl,\n} from '@wordpress/block-editor';\nimport { useState, useEffect, useRef, useCallback } from '@wordpress/element';\nimport {\n PanelBody,\n SelectControl,\n BorderBoxControl,\n __experimentalUnitControl as UnitControl,\n __experimentalToggleGroupControl as ToggleGroupControl,\n __experimentalToggleGroupControlOption as ToggleGroupControlOption,\n} from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport ServerSideRender from '@wordpress/server-side-render';\nimport { __ } from '@wordpress/i18n';\nimport { TEMPLATES } from './templates';\n\nconst FONT_SIZE_UNITS = [\n { value: 'px', label: 'px', default: 14 },\n { value: 'em', label: 'em', default: 1 },\n { value: 'rem', label: 'rem', default: 1 },\n];\n\nconst SPACING_UNITS = [\n { value: 'px', label: 'px', default: 8 },\n { value: 'em', label: 'em', default: 0.5 },\n { value: 'rem', label: 'rem', default: 0.5 },\n { value: '%', label: '%', default: 5 },\n];\n\nconst BORDER_WIDTH_UNITS = [\n { value: 'px', label: 'px', default: 1 },\n { value: 'em', label: 'em', default: 0.1 },\n { value: 'rem', label: 'rem', default: 0.1 },\n];\n\nconst BORDER_RADIUS_UNITS = [\n { value: 'px', label: 'px', default: 4 },\n { value: 'em', label: 'em', default: 0.25 },\n { value: 'rem', label: 'rem', default: 0.25 },\n { value: '%', label: '%', default: 5 },\n];\n\n/**\n * Get the merged flat array of font families from theme settings.\n *\n * useSettings('typography.fontFamilies') returns an object with\n * { default, theme, custom } keys. FontFamilyControl expects a\n * flat array, so we merge all sources here.\n *\n * @returns {Array} Flat array of font family objects\n */\nfunction useMergedFontFamilies() {\n const [ fontFamilies ] = useSettings( 'typography.fontFamilies' );\n\n if ( ! fontFamilies ) {\n return [];\n }\n\n return [\n ...( fontFamilies?.default || [] ),\n ...( fontFamilies?.theme || [] ),\n ...( fontFamilies?.custom || [] ),\n ];\n}\n\n/**\n * Get the fontFace array for a given font-family value from theme settings.\n *\n * @param {string} fontFamily The selected font-family CSS value\n * @param {Array} mergedFontFamilies Pre-merged flat array from useMergedFontFamilies\n *\n * @returns {Array} Array of font face objects for the selected family\n */\nfunction getFontFamilyFaces( fontFamily, mergedFontFamilies ) {\n if ( ! fontFamily || ! mergedFontFamilies?.length ) {\n return [];\n }\n\n const match = mergedFontFamilies.find( ( f ) => f.fontFamily === fontFamily );\n\n return match?.fontFace || [];\n}\n\n/**\n * Generate a short random string for block scoping.\n *\n * @returns {string}\n */\nfunction generateBlockId() {\n return 'wpuf-pf-' + Math.random().toString(36).slice(2, 9);\n}\n\n/**\n * Template picker card with realistic form mini-preview.\n * Shows a label bar, input field, and button using the template's actual colors.\n */\nfunction TemplateCard({ template, isActive, onSelect }) {\n const { preview, attributes: tplAttrs } = template;\n return (\n onSelect(template)}\n aria-pressed={isActive}\n >\n \n \n {/* First field row */}\n
\n \n \n
\n {/* Second field row */}\n
\n \n \n
\n {/* Button */}\n \n \n
\n

{template.label}

\n

{template.description}

\n
\n \n );\n}\n\nexport default function Edit({ attributes, setAttributes }) {\n const {\n blockId,\n formId,\n activeTemplate,\n labelPosition,\n labelFontSize,\n labelColor,\n labelFontWeight,\n labelFontFamily,\n labelFontStyle,\n helpTextColor,\n helpTextFontFamily,\n helpTextFontSize,\n helpTextFontStyle,\n helpTextFontWeight,\n fieldBorder,\n fieldBorderRadius,\n fieldPaddingV,\n fieldPaddingH,\n fieldBackgroundColor,\n fieldTextColor,\n fieldPlaceholderColor,\n fieldFontFamily,\n fieldFontSize,\n fieldFontStyle,\n fieldFontWeight,\n fieldMarginBottom,\n fieldFocusBorderColor,\n buttonBackgroundColor,\n buttonTextColor,\n buttonFontFamily,\n buttonFontStyle,\n buttonFontWeight,\n buttonBorderWidth,\n buttonBorderRadius,\n buttonFontSize,\n buttonPaddingV,\n buttonPaddingH,\n uploadButtonBackgroundColor,\n uploadButtonTextColor,\n uploadButtonFontFamily,\n uploadButtonFontStyle,\n uploadButtonFontWeight,\n uploadButtonBorderColor,\n uploadButtonBorderWidth,\n uploadButtonBorderRadius,\n uploadButtonFontSize,\n uploadButtonPaddingV,\n uploadButtonPaddingH,\n msButtonBackgroundColor,\n msButtonTextColor,\n msButtonFontFamily,\n msButtonFontStyle,\n msButtonFontWeight,\n msButtonBorderColor,\n msButtonBorderWidth,\n msButtonBorderRadius,\n msButtonFontSize,\n msButtonPaddingV,\n msButtonPaddingH,\n msActiveBgColor,\n msActiveTextColor,\n msInactiveBgColor,\n } = attributes;\n\n const blockProps = useBlockProps();\n const { createNotice } = useDispatch(noticesStore);\n\n const mergedFontFamilies = useMergedFontFamilies();\n const labelFontFaces = getFontFamilyFaces( labelFontFamily, mergedFontFamilies );\n const fieldFontFaces = getFontFamilyFaces( fieldFontFamily, mergedFontFamilies );\n const helpTextFontFaces = getFontFamilyFaces( helpTextFontFamily, mergedFontFamilies );\n const buttonFontFaces = getFontFamilyFaces( buttonFontFamily, mergedFontFamilies );\n const uploadButtonFontFaces = getFontFamilyFaces( uploadButtonFontFamily, mergedFontFamilies );\n const msButtonFontFaces = getFontFamilyFaces( msButtonFontFamily, mergedFontFamilies );\n\n // Assign blockId once on first insert\n useEffect(() => {\n if (!blockId) {\n setAttributes({ blockId: generateBlockId() });\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // SSR loading overlay state\n const [isUpdating, setIsUpdating] = useState(false);\n const debounceTimerRef = useRef(null);\n const isFirstRender = useRef(true);\n\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n debounceTimerRef.current = setTimeout(() => {\n setIsUpdating(true);\n }, 150);\n return () => clearTimeout(debounceTimerRef.current);\n }, [attributes]);\n\n // Store previous attributes for undo\n const prevAttrsRef = useRef(null);\n\n const handleTemplateSelect = useCallback(\n (template) => {\n if (template.id === activeTemplate) {\n return;\n }\n\n // Save current state for undo\n const snapshot = { ...attributes };\n prevAttrsRef.current = snapshot;\n\n // Apply immediately\n setAttributes(template.attributes);\n\n // Show snackbar with undo\n createNotice(\n 'info',\n template.label + ' ' + __('template applied.', 'wp-user-frontend'),\n {\n type: 'snackbar',\n isDismissible: true,\n actions: [\n {\n label: __('Undo', 'wp-user-frontend'),\n onClick: () => {\n if (prevAttrsRef.current) {\n setAttributes(prevAttrsRef.current);\n prevAttrsRef.current = null;\n }\n },\n },\n ],\n }\n );\n },\n [activeTemplate, attributes, setAttributes, createNotice]\n );\n\n const editorData = window.wpufPostForm || {};\n const forms = editorData.forms || [];\n\n // Build SelectControl options: \"Select a form\" placeholder + all post forms\n const formOptions = [\n { value: '0', label: __('— Select a post form —', 'wp-user-frontend') },\n ...forms.map((f) => ({\n value: String(f.id),\n label: f.title,\n })),\n ];\n\n const selectedForm = forms.find( ( f ) => f.id === formId );\n const isMultistep = selectedForm?.is_multistep || false;\n\n const handleFormChange = (val) => {\n setAttributes({\n formId: parseInt(val, 10),\n });\n };\n\n return (\n
\n \n \n \n \n \n\n \n \n
\n {TEMPLATES.map((tpl) => (\n \n ))}\n
\n \n\n \n setAttributes({ labelFontFamily: val })}\n />\n\n \n setAttributes({ labelFontStyle: fontStyle, labelFontWeight: fontWeight })\n }\n fontFamilyFaces={labelFontFaces}\n hasFontStyles={true}\n hasFontWeights={true}\n />\n\n setAttributes({ labelPosition: val })}\n isBlock\n >\n \n \n \n \n \n\n setAttributes({ labelFontSize: val })}\n units={FONT_SIZE_UNITS}\n />\n \n\n \n setAttributes({ fieldFontFamily: val })}\n />\n\n \n setAttributes({ fieldFontStyle: fontStyle, fieldFontWeight: fontWeight })\n }\n fontFamilyFaces={fieldFontFaces}\n hasFontStyles={true}\n hasFontWeights={true}\n />\n\n setAttributes({ fieldFontSize: val })}\n units={FONT_SIZE_UNITS}\n />\n\n setAttributes({ fieldBorder: val || {} })}\n />\n\n setAttributes({ fieldBorderRadius: val })}\n units={BORDER_RADIUS_UNITS}\n />\n\n setAttributes({ fieldPaddingV: val })}\n units={SPACING_UNITS}\n />\n\n setAttributes({ fieldPaddingH: val })}\n units={SPACING_UNITS}\n />\n\n setAttributes({ fieldMarginBottom: val })}\n units={SPACING_UNITS}\n />\n \n\n \n setAttributes({ helpTextFontFamily: val })}\n />\n\n \n setAttributes({ helpTextFontStyle: fontStyle, helpTextFontWeight: fontWeight })\n }\n fontFamilyFaces={helpTextFontFaces}\n hasFontStyles={true}\n hasFontWeights={true}\n />\n\n setAttributes({ helpTextFontSize: val })}\n units={FONT_SIZE_UNITS}\n />\n \n\n \n setAttributes({ buttonFontFamily: val })}\n />\n\n \n setAttributes({ buttonFontStyle: fontStyle, buttonFontWeight: fontWeight })\n }\n fontFamilyFaces={buttonFontFaces}\n hasFontStyles={true}\n hasFontWeights={true}\n />\n\n setAttributes({ buttonFontSize: val })}\n units={FONT_SIZE_UNITS}\n />\n\n setAttributes({ buttonBorderWidth: val })}\n units={BORDER_WIDTH_UNITS}\n />\n\n setAttributes({ buttonBorderRadius: val })}\n units={BORDER_RADIUS_UNITS}\n />\n\n setAttributes({ buttonPaddingV: val })}\n units={SPACING_UNITS}\n />\n\n setAttributes({ buttonPaddingH: val })}\n units={SPACING_UNITS}\n />\n \n\n \n setAttributes({ uploadButtonFontFamily: val })}\n />\n\n \n setAttributes({ uploadButtonFontStyle: fontStyle, uploadButtonFontWeight: fontWeight })\n }\n fontFamilyFaces={uploadButtonFontFaces}\n hasFontStyles={true}\n hasFontWeights={true}\n />\n\n setAttributes({ uploadButtonFontSize: val })}\n units={FONT_SIZE_UNITS}\n />\n\n setAttributes({ uploadButtonBorderWidth: val })}\n units={BORDER_WIDTH_UNITS}\n />\n\n setAttributes({ uploadButtonBorderRadius: val })}\n units={BORDER_RADIUS_UNITS}\n />\n\n setAttributes({ uploadButtonPaddingV: val })}\n units={SPACING_UNITS}\n />\n\n setAttributes({ uploadButtonPaddingH: val })}\n units={SPACING_UNITS}\n />\n \n\n setAttributes({ labelColor: val || '' }),\n label: __('Label', 'wp-user-frontend'),\n },\n {\n value: helpTextColor,\n onChange: (val) => setAttributes({ helpTextColor: val || '' }),\n label: __('Help Text', 'wp-user-frontend'),\n },\n {\n value: fieldFocusBorderColor,\n onChange: (val) => setAttributes({ fieldFocusBorderColor: val || '' }),\n label: __('Field Focus Border', 'wp-user-frontend'),\n },\n {\n value: fieldBackgroundColor,\n onChange: (val) => setAttributes({ fieldBackgroundColor: val || '' }),\n label: __('Field Background', 'wp-user-frontend'),\n },\n {\n value: fieldTextColor,\n onChange: (val) => setAttributes({ fieldTextColor: val || '' }),\n label: __('Field Text', 'wp-user-frontend'),\n },\n {\n value: fieldPlaceholderColor,\n onChange: (val) => setAttributes({ fieldPlaceholderColor: val || '' }),\n label: __('Placeholder', 'wp-user-frontend'),\n },\n {\n value: buttonBackgroundColor,\n onChange: (val) => setAttributes({ buttonBackgroundColor: val || '' }),\n label: __('Button Background', 'wp-user-frontend'),\n },\n {\n value: buttonTextColor,\n onChange: (val) => setAttributes({ buttonTextColor: val || '' }),\n label: __('Button Text', 'wp-user-frontend'),\n },\n {\n value: uploadButtonBackgroundColor,\n onChange: (val) => setAttributes({ uploadButtonBackgroundColor: val || '' }),\n label: __('Upload Button Background', 'wp-user-frontend'),\n },\n {\n value: uploadButtonTextColor,\n onChange: (val) => setAttributes({ uploadButtonTextColor: val || '' }),\n label: __('Upload Button Text', 'wp-user-frontend'),\n },\n {\n value: uploadButtonBorderColor,\n onChange: (val) => setAttributes({ uploadButtonBorderColor: val || '' }),\n label: __('Upload Button Border', 'wp-user-frontend'),\n },\n ]}\n />\n\n {isMultistep && (\n \n setAttributes({ msButtonFontFamily: val })}\n />\n\n \n setAttributes({ msButtonFontStyle: fontStyle, msButtonFontWeight: fontWeight })\n }\n fontFamilyFaces={msButtonFontFaces}\n hasFontStyles={true}\n hasFontWeights={true}\n />\n\n setAttributes({ msButtonFontSize: val })}\n units={FONT_SIZE_UNITS}\n />\n\n setAttributes({ msButtonBorderWidth: val })}\n units={BORDER_WIDTH_UNITS}\n />\n\n setAttributes({ msButtonBorderRadius: val })}\n units={BORDER_RADIUS_UNITS}\n />\n\n setAttributes({ msButtonPaddingV: val })}\n units={SPACING_UNITS}\n />\n\n setAttributes({ msButtonPaddingH: val })}\n units={SPACING_UNITS}\n />\n \n )}\n\n {isMultistep && (\n setAttributes({ msActiveBgColor: val || '' }),\n label: __('Active Step Background', 'wp-user-frontend'),\n },\n {\n value: msActiveTextColor,\n onChange: (val) => setAttributes({ msActiveTextColor: val || '' }),\n label: __('Active Step Text', 'wp-user-frontend'),\n },\n {\n value: msInactiveBgColor,\n onChange: (val) => setAttributes({ msInactiveBgColor: val || '' }),\n label: __('Inactive Step Background', 'wp-user-frontend'),\n },\n {\n value: msButtonBackgroundColor,\n onChange: (val) => setAttributes({ msButtonBackgroundColor: val || '' }),\n label: __('Prev / Next Button Background', 'wp-user-frontend'),\n },\n {\n value: msButtonTextColor,\n onChange: (val) => setAttributes({ msButtonTextColor: val || '' }),\n label: __('Prev / Next Button Text', 'wp-user-frontend'),\n },\n {\n value: msButtonBorderColor,\n onChange: (val) => setAttributes({ msButtonBorderColor: val || '' }),\n label: __('Prev / Next Button Border', 'wp-user-frontend'),\n },\n ]}\n />\n )}\n
\n\n
\n { ! formId ? (\n

\n { __( 'Please select a post form to display.', 'wp-user-frontend' ) }\n

\n ) : (\n <>\n { isUpdating && (\n
\n
\n

\n { __( 'Updating preview…', 'wp-user-frontend' ) }\n

\n
\n ) }\n {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n return () => {\n setIsUpdating(false);\n };\n }, []);\n return null;\n }}\n EmptyResponsePlaceholder={() => {\n // eslint-disable-next-line no-console\n console.warn( '[WPUF PostForm] SSR returned empty response', { formId } );\n return (\n

\n { __( 'SSR returned an empty response. Check the PHP error log.', 'wp-user-frontend' ) }\n

\n );\n }}\n ErrorResponsePlaceholder={({ response }) => {\n // eslint-disable-next-line no-console\n console.error( '[WPUF PostForm] SSR error response', response );\n return (\n

\n { __( 'SSR error: ', 'wp-user-frontend' ) }\n { response?.errorMsg || JSON.stringify( response ) }\n

\n );\n }}\n />\n \n ) }\n
\n
\n );\n}\n","// DESCRIPTION: Save component for the post form block.\n// Returns null — this is a dynamic block rendered server-side.\n\nexport default function Save() {\n return null;\n}\n","// DESCRIPTION: Predefined visual template presets for the post form block.\n// Each entry maps block attribute names to preset values.\n\nexport const TEMPLATES = [\n {\n id: 'default',\n label: 'Default',\n description: 'Clean, inherits theme styles',\n preview: {\n bg: '#ffffff',\n border: '#dddddd',\n button: '#0073aa',\n text: '#333333',\n },\n attributes: {\n activeTemplate: 'default',\n style: {\n color: {},\n },\n labelFontSize: '14px',\n labelColor: '#333333',\n labelFontWeight: 'normal',\n labelFontFamily: '',\n labelFontStyle: '',\n helpTextColor: '#767676',\n helpTextFontFamily: '',\n helpTextFontSize: '12px',\n helpTextFontStyle: '',\n helpTextFontWeight: '',\n fieldBorder: {\n color: '#dddddd',\n style: 'solid',\n width: '1px',\n },\n fieldBorderRadius: '4px',\n fieldPaddingV: '8px',\n fieldPaddingH: '12px',\n fieldBackgroundColor: '#ffffff',\n fieldTextColor: '#333333',\n fieldPlaceholderColor: '#aaaaaa',\n fieldFontFamily: '',\n fieldFontSize: '14px',\n fieldFontStyle: '',\n fieldFontWeight: '',\n fieldMarginBottom: '16px',\n fieldFocusBorderColor: '#0073aa',\n buttonBackgroundColor: '#0073aa',\n buttonTextColor: '#ffffff',\n buttonBorderColor: '',\n buttonBorderWidth: '0px',\n buttonBorderRadius: '4px',\n buttonFontSize: '14px',\n buttonFontFamily: '',\n buttonFontStyle: '',\n buttonFontWeight: '',\n buttonPaddingV: '10px',\n buttonPaddingH: '20px',\n uploadButtonBackgroundColor: '#f0f0f0',\n uploadButtonTextColor: '#333333',\n uploadButtonBorderColor: '#dddddd',\n uploadButtonBorderWidth: '1px',\n uploadButtonBorderRadius: '4px',\n uploadButtonFontSize: '13px',\n uploadButtonFontFamily: '',\n uploadButtonFontStyle: '',\n uploadButtonFontWeight: '',\n uploadButtonPaddingV: '8px',\n uploadButtonPaddingH: '16px',\n errorMessageColor: '#cc0000',\n successMessageColor: '#00a32a',\n },\n },\n {\n id: 'dark',\n label: 'Dark',\n description: 'Dark background, light text',\n preview: {\n bg: '#1e1e2e',\n border: '#3d3d5c',\n button: '#7c3aed',\n text: '#f0f0f0',\n },\n attributes: {\n activeTemplate: 'dark',\n style: {\n color: {\n background: '#1e1e2e',\n },\n },\n labelFontSize: '14px',\n labelColor: '#e0e0e0',\n labelFontWeight: 'normal',\n labelFontFamily: '',\n labelFontStyle: '',\n helpTextColor: '#a0a0b0',\n helpTextFontFamily: '',\n helpTextFontSize: '12px',\n helpTextFontStyle: '',\n helpTextFontWeight: '',\n fieldBorder: {\n color: '#3d3d5c',\n style: 'solid',\n width: '1px',\n },\n fieldBorderRadius: '6px',\n fieldPaddingV: '10px',\n fieldPaddingH: '14px',\n fieldBackgroundColor: '#2a2a3e',\n fieldTextColor: '#f0f0f0',\n fieldPlaceholderColor: '#6b6b8a',\n fieldFontFamily: '',\n fieldFontSize: '14px',\n fieldFontStyle: '',\n fieldFontWeight: '',\n fieldMarginBottom: '18px',\n fieldFocusBorderColor: '#7c3aed',\n buttonBackgroundColor: '#7c3aed',\n buttonTextColor: '#ffffff',\n buttonBorderColor: '',\n buttonBorderWidth: '0px',\n buttonBorderRadius: '6px',\n buttonFontSize: '14px',\n buttonFontFamily: '',\n buttonFontStyle: '',\n buttonFontWeight: '',\n buttonPaddingV: '12px',\n buttonPaddingH: '24px',\n uploadButtonBackgroundColor: '#2a2a3e',\n uploadButtonTextColor: '#e0e0e0',\n uploadButtonBorderColor: '#3d3d5c',\n uploadButtonBorderWidth: '1px',\n uploadButtonBorderRadius: '6px',\n uploadButtonFontSize: '13px',\n uploadButtonFontFamily: '',\n uploadButtonFontStyle: '',\n uploadButtonFontWeight: '',\n uploadButtonPaddingV: '8px',\n uploadButtonPaddingH: '16px',\n errorMessageColor: '#f87171',\n successMessageColor: '#34d399',\n },\n },\n {\n id: 'colorful',\n label: 'Colorful',\n description: 'Vibrant purple accent',\n preview: {\n bg: '#fdf4ff',\n border: '#c084fc',\n button: '#9333ea',\n text: '#4a044e',\n },\n attributes: {\n activeTemplate: 'colorful',\n style: {\n color: {},\n },\n labelFontSize: '14px',\n labelColor: '#7e22ce',\n labelFontWeight: '600',\n labelFontFamily: '',\n labelFontStyle: '',\n helpTextColor: '#a855f7',\n helpTextFontFamily: '',\n helpTextFontSize: '12px',\n helpTextFontStyle: '',\n helpTextFontWeight: '',\n fieldBorder: {\n color: '#c084fc',\n style: 'solid',\n width: '2px',\n },\n fieldBorderRadius: '8px',\n fieldPaddingV: '10px',\n fieldPaddingH: '14px',\n fieldBackgroundColor: '#fdf4ff',\n fieldTextColor: '#4a044e',\n fieldPlaceholderColor: '#d8b4fe',\n fieldFontFamily: '',\n fieldFontSize: '14px',\n fieldFontStyle: '',\n fieldFontWeight: '',\n fieldMarginBottom: '20px',\n fieldFocusBorderColor: '#7e22ce',\n buttonBackgroundColor: '#9333ea',\n buttonTextColor: '#ffffff',\n buttonBorderColor: '',\n buttonBorderWidth: '0px',\n buttonBorderRadius: '8px',\n buttonFontSize: '15px',\n buttonFontFamily: '',\n buttonFontStyle: '',\n buttonFontWeight: '',\n buttonPaddingV: '12px',\n buttonPaddingH: '28px',\n uploadButtonBackgroundColor: '#f3e8ff',\n uploadButtonTextColor: '#7e22ce',\n uploadButtonBorderColor: '#c084fc',\n uploadButtonBorderWidth: '2px',\n uploadButtonBorderRadius: '8px',\n uploadButtonFontSize: '13px',\n uploadButtonFontFamily: '',\n uploadButtonFontStyle: '',\n uploadButtonFontWeight: '',\n uploadButtonPaddingV: '8px',\n uploadButtonPaddingH: '16px',\n errorMessageColor: '#be123c',\n successMessageColor: '#16a34a',\n },\n },\n {\n id: 'minimal',\n label: 'Minimal',\n description: 'Borderless fields, understated',\n preview: {\n bg: '#ffffff',\n border: '#e5e5e5',\n button: '#111111',\n text: '#111111',\n },\n attributes: {\n activeTemplate: 'minimal',\n style: {\n color: {},\n },\n labelFontSize: '13px',\n labelColor: '#555555',\n labelFontWeight: 'normal',\n labelFontFamily: '',\n labelFontStyle: '',\n helpTextColor: '#999999',\n helpTextFontFamily: '',\n helpTextFontSize: '11px',\n helpTextFontStyle: '',\n helpTextFontWeight: '',\n fieldBorder: {\n color: '#dddddd',\n style: 'solid',\n width: '1px',\n },\n fieldBorderRadius: '0px',\n fieldPaddingV: '8px',\n fieldPaddingH: '4px',\n fieldBackgroundColor: '#ffffff',\n fieldTextColor: '#111111',\n fieldPlaceholderColor: '#cccccc',\n fieldFontFamily: '',\n fieldFontSize: '13px',\n fieldFontStyle: '',\n fieldFontWeight: '',\n fieldMarginBottom: '20px',\n fieldFocusBorderColor: '#111111',\n buttonBackgroundColor: '#111111',\n buttonTextColor: '#ffffff',\n buttonBorderColor: '',\n buttonBorderWidth: '0px',\n buttonBorderRadius: '2px',\n buttonFontSize: '13px',\n buttonFontFamily: '',\n buttonFontStyle: '',\n buttonFontWeight: '',\n buttonPaddingV: '10px',\n buttonPaddingH: '24px',\n uploadButtonBackgroundColor: '#ffffff',\n uploadButtonTextColor: '#555555',\n uploadButtonBorderColor: '#e5e5e5',\n uploadButtonBorderWidth: '0px',\n uploadButtonBorderRadius: '0px',\n uploadButtonFontSize: '13px',\n uploadButtonFontFamily: '',\n uploadButtonFontStyle: '',\n uploadButtonFontWeight: '',\n uploadButtonPaddingV: '8px',\n uploadButtonPaddingH: '4px',\n errorMessageColor: '#cc0000',\n successMessageColor: '#008000',\n },\n },\n {\n id: 'bold',\n label: 'Bold',\n description: 'Strong borders, high contrast',\n preview: {\n bg: '#ffffff',\n border: '#000000',\n button: '#f59e0b',\n text: '#000000',\n },\n attributes: {\n activeTemplate: 'bold',\n style: {\n color: {},\n },\n labelFontSize: '15px',\n labelColor: '#000000',\n labelFontWeight: '700',\n labelFontFamily: '',\n labelFontStyle: '',\n helpTextColor: '#555555',\n helpTextFontFamily: '',\n helpTextFontSize: '13px',\n helpTextFontStyle: '',\n helpTextFontWeight: '',\n fieldBorder: {\n color: '#000000',\n style: 'solid',\n width: '2px',\n },\n fieldBorderRadius: '0px',\n fieldPaddingV: '10px',\n fieldPaddingH: '14px',\n fieldBackgroundColor: '#ffffff',\n fieldTextColor: '#000000',\n fieldPlaceholderColor: '#999999',\n fieldFontFamily: '',\n fieldFontSize: '15px',\n fieldFontStyle: '',\n fieldFontWeight: '',\n fieldMarginBottom: '20px',\n fieldFocusBorderColor: '#f59e0b',\n buttonBackgroundColor: '#f59e0b',\n buttonTextColor: '#000000',\n buttonBorderColor: '#000000',\n buttonBorderWidth: '2px',\n buttonBorderRadius: '0px',\n buttonFontSize: '15px',\n buttonFontFamily: '',\n buttonFontStyle: '',\n buttonFontWeight: '',\n buttonPaddingV: '12px',\n buttonPaddingH: '28px',\n uploadButtonBackgroundColor: '#ffffff',\n uploadButtonTextColor: '#000000',\n uploadButtonBorderColor: '#000000',\n uploadButtonBorderWidth: '2px',\n uploadButtonBorderRadius: '0px',\n uploadButtonFontSize: '13px',\n uploadButtonFontFamily: '',\n uploadButtonFontStyle: '',\n uploadButtonFontWeight: '',\n uploadButtonPaddingV: '8px',\n uploadButtonPaddingH: '16px',\n errorMessageColor: '#cc0000',\n successMessageColor: '#166534',\n },\n },\n];\n","// extracted by mini-css-extract-plugin\nexport {};","module.exports = window[\"ReactJSXRuntime\"];","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"blocks\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"data\"];","module.exports = window[\"wp\"][\"element\"];","module.exports = window[\"wp\"][\"i18n\"];","module.exports = window[\"wp\"][\"notices\"];","module.exports = window[\"wp\"][\"serverSideRender\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// DESCRIPTION: Block registration entry point for the post form block.\n// Registers the block with WordPress using block.json metadata.\n\nimport { registerBlockType } from '@wordpress/blocks';\nimport metadata from './block.json';\nimport Edit from './edit';\nimport Save from './save';\nimport './editor.css';\n\nregisterBlockType( metadata.name, {\n edit: Edit,\n save: Save,\n} );\n"],"names":["InspectorControls","PanelColorSettings","useBlockProps","useSettings","__experimentalFontFamilyControl","FontFamilyControl","__experimentalFontAppearanceControl","FontAppearanceControl","useState","useEffect","useRef","useCallback","PanelBody","SelectControl","BorderBoxControl","__experimentalUnitControl","UnitControl","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","useDispatch","store","noticesStore","ServerSideRender","__","TEMPLATES","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","FONT_SIZE_UNITS","value","label","default","SPACING_UNITS","BORDER_WIDTH_UNITS","BORDER_RADIUS_UNITS","useMergedFontFamilies","fontFamilies","theme","custom","getFontFamilyFaces","fontFamily","mergedFontFamilies","length","match","find","f","fontFace","generateBlockId","Math","random","toString","slice","TemplateCard","template","isActive","onSelect","preview","attributes","tplAttrs","type","className","onClick","children","style","background","bg","text","fieldBackgroundColor","borderColor","border","borderWidth","fieldBorder","width","borderRadius","fieldBorderRadius","button","buttonBorderRadius","description","Edit","setAttributes","blockId","formId","activeTemplate","labelPosition","labelFontSize","labelColor","labelFontWeight","labelFontFamily","labelFontStyle","helpTextColor","helpTextFontFamily","helpTextFontSize","helpTextFontStyle","helpTextFontWeight","fieldPaddingV","fieldPaddingH","fieldTextColor","fieldPlaceholderColor","fieldFontFamily","fieldFontSize","fieldFontStyle","fieldFontWeight","fieldMarginBottom","fieldFocusBorderColor","buttonBackgroundColor","buttonTextColor","buttonFontFamily","buttonFontStyle","buttonFontWeight","buttonBorderWidth","buttonFontSize","buttonPaddingV","buttonPaddingH","uploadButtonBackgroundColor","uploadButtonTextColor","uploadButtonFontFamily","uploadButtonFontStyle","uploadButtonFontWeight","uploadButtonBorderColor","uploadButtonBorderWidth","uploadButtonBorderRadius","uploadButtonFontSize","uploadButtonPaddingV","uploadButtonPaddingH","msButtonBackgroundColor","msButtonTextColor","msButtonFontFamily","msButtonFontStyle","msButtonFontWeight","msButtonBorderColor","msButtonBorderWidth","msButtonBorderRadius","msButtonFontSize","msButtonPaddingV","msButtonPaddingH","msActiveBgColor","msActiveTextColor","msInactiveBgColor","blockProps","createNotice","labelFontFaces","fieldFontFaces","helpTextFontFaces","buttonFontFaces","uploadButtonFontFaces","msButtonFontFaces","isUpdating","setIsUpdating","debounceTimerRef","isFirstRender","current","clearTimeout","setTimeout","prevAttrsRef","handleTemplateSelect","id","snapshot","isDismissible","actions","editorData","window","wpufPostForm","forms","formOptions","map","String","title","selectedForm","isMultistep","is_multistep","handleFormChange","val","parseInt","initialOpen","options","onChange","help","group","tpl","__next40pxDefaultSize","fontStyle","fontWeight","fontFamilyFaces","hasFontStyles","hasFontWeights","isBlock","units","colorSettings","position","padding","textAlign","color","marginTop","fontSize","block","LoadingResponsePlaceholder","EmptyResponsePlaceholder","console","warn","ErrorResponsePlaceholder","response","error","errorMsg","JSON","stringify","Save","buttonBorderColor","errorMessageColor","successMessageColor","registerBlockType","metadata","name","edit","save"],"sourceRoot":""} \ No newline at end of file diff --git a/assets/less/frontend-forms.less b/assets/less/frontend-forms.less index 3eba468a9..9a3eba20d 100644 --- a/assets/less/frontend-forms.less +++ b/assets/less/frontend-forms.less @@ -291,7 +291,9 @@ ul.wpuf-form { .wpuf-radio-block, .wpuf-checkbox-block{ - display: block; + display: flex; + align-items: center; + gap: 1rem; margin-bottom: 6px; } @@ -1291,7 +1293,6 @@ table.wpuf-table { left: 50%; font-size: 12px; font-weight: bold; - text-shadow: 1px 1px 0 #fff; top: 20%; } } diff --git a/includes/Admin.php b/includes/Admin.php index 92373bd58..016a18dcc 100644 --- a/includes/Admin.php +++ b/includes/Admin.php @@ -25,7 +25,6 @@ public function __construct() { $this->container['admin_installer'] = new Admin\Admin_Installer(); $this->container['settings'] = new Admin\Admin_Settings(); $this->container['forms'] = new Admin\Forms\Form_Manager(); - $this->container['gutenberg_block'] = new Frontend\Form_Gutenberg_Block(); $this->container['plugin_upgrade_notice'] = new Admin\Plugin_Upgrade_Notice(); $this->container['posting'] = new Admin\Posting(); $this->container['shortcodes_button'] = new Admin\Shortcodes_Button(); diff --git a/includes/Blocks/PostForm.php b/includes/Blocks/PostForm.php new file mode 100644 index 000000000..e00b90a81 --- /dev/null +++ b/includes/Blocks/PostForm.php @@ -0,0 +1,448 @@ + 'wpuf', + 'title' => __( 'User Frontend', 'wp-user-frontend' ), + ], + ] ); + } + + /** + * Register the Gutenberg block and localise editor data + * + * @since WPUF_SINCE + * + * @return void + */ + public function register_block() { + $asset_file = WPUF_ROOT . '/assets/js/blocks/post-form.asset.php'; + + if ( ! file_exists( $asset_file ) ) { + return; + } + + $asset = require $asset_file; + + wp_register_script( + 'wpuf-post-form-editor', + WPUF_ROOT_URI . '/assets/js/blocks/post-form.js', + $asset['dependencies'], + $asset['version'], + true + ); + + wp_register_style( + 'wpuf-post-form-editor-style', + WPUF_ROOT_URI . '/assets/js/blocks/post-form.css', + [ 'wpuf-frontend-forms', 'wpuf-layout1' ], + $asset['version'] + ); + + // Editor data is only needed in the block editor; avoid the get_posts() + // query on every front-end request. + if ( is_admin() ) { + wp_localize_script( + 'wpuf-post-form-editor', + 'wpufPostForm', + $this->get_editor_data() + ); + } + + $block_json_path = WPUF_ROOT . '/src/js/blocks/post-form'; + + register_block_type( $block_json_path, [ + 'render_callback' => [ $this, 'render' ], + ] ); + } + + /** + * Get data to pass to the block editor via wp_localize_script + * + * @since WPUF_SINCE + * + * @return array + */ + private function get_editor_data() { + $post_forms = get_posts( [ + 'post_type' => 'wpuf_forms', + 'post_status' => 'publish', + 'numberposts' => -1, + 'orderby' => 'title', + 'order' => 'ASC', + ] ); + + $forms_list = []; + + foreach ( $post_forms as $form ) { + $settings = get_post_meta( $form->ID, 'wpuf_form_settings', true ); + $is_multistep = ! empty( $settings['enable_multistep'] ) && in_array( $settings['enable_multistep'], [ 'on', 'yes' ], true ); + + $forms_list[] = [ + 'id' => $form->ID, + 'title' => $form->post_title, + 'is_multistep' => $is_multistep, + ]; + } + + return [ + 'forms' => $forms_list, + ]; + } + + /** + * Sanitize a border object from BorderBoxControl + * + * Handles both flat (linked) and per-side (split) formats. + * Returns a normalized array with top/right/bottom/left keys. + * + * @since WPUF_SINCE + * + * @param array|mixed $border Raw border attribute value + * + * @return array Normalized border array with top/right/bottom/left keys + */ + private function sanitize_border( $border ) { + if ( ! is_array( $border ) ) { + return [ + 'top' => [ 'color' => '', 'style' => 'none', 'width' => '0px' ], + 'right' => [ 'color' => '', 'style' => 'none', 'width' => '0px' ], + 'bottom' => [ 'color' => '', 'style' => 'none', 'width' => '0px' ], + 'left' => [ 'color' => '', 'style' => 'none', 'width' => '0px' ], + ]; + } + + $sides = [ 'top', 'right', 'bottom', 'left' ]; + $allowed_styles = [ 'solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'none' ]; + + // Check if this is a flat (linked) value or per-side (split) value + $is_split = isset( $border['top'] ) || isset( $border['right'] ) || isset( $border['bottom'] ) || isset( $border['left'] ); + + if ( ! $is_split ) { + // Flat format — apply same values to all sides + $sanitized_side = [ + 'color' => sanitize_hex_color( $border['color'] ?? '' ) ?? '', + 'style' => in_array( $border['style'] ?? 'solid', $allowed_styles, true ) ? ( $border['style'] ?? 'solid' ) : 'solid', + 'width' => $this->sanitize_css_length( $border['width'] ?? '0px' ), + ]; + + return array_fill_keys( $sides, $sanitized_side ); + } + + // Per-side format + $result = []; + foreach ( $sides as $side ) { + $side_val = $border[ $side ] ?? []; + $result[ $side ] = [ + 'color' => sanitize_hex_color( $side_val['color'] ?? '' ) ?? '', + 'style' => in_array( $side_val['style'] ?? 'solid', $allowed_styles, true ) ? ( $side_val['style'] ?? 'solid' ) : 'solid', + 'width' => $this->sanitize_css_length( $side_val['width'] ?? '0px' ), + ]; + } + + return $result; + } + + /** + * Sanitize a CSS length value (e.g. '2px', '0.5em') + * + * @since WPUF_SINCE + * + * @param string $value CSS length value + * + * @return string Sanitized CSS length or '0px' + */ + private function sanitize_css_length( $value ) { + $value = trim( (string) $value ); + + if ( preg_match( '/^\d+(\.\d+)?(px|em|rem|%)$/', $value ) ) { + return $value; + } + + return '0px'; + } + + /** + * Sanitize a CSS font-family value + * + * Strips characters that are not valid in CSS font-family declarations + * to prevent CSS injection while allowing any valid font-family value. + * + * @since WPUF_SINCE + * + * @param string $value Raw font-family value + * + * @return string Sanitized font-family value + */ + private function sanitize_font_family( $value ) { + $value = trim( (string) $value ); + + if ( '' === $value ) { + return ''; + } + + // Allow only alphanumeric, spaces, commas, quotes, hyphens, periods + return preg_replace( '/[^a-zA-Z0-9\s,\'".\-]/', '', $value ); + } + + /** + * Sanitize a CSS font-style value + * + * @since WPUF_SINCE + * + * @param string $value Raw font-style value + * + * @return string Sanitized font-style value or empty string + */ + private function sanitize_font_style( $value ) { + $allowed = [ 'normal', 'italic', 'oblique' ]; + + return in_array( (string) $value, $allowed, true ) ? $value : ''; + } + + /** + * Sanitize a CSS font-weight value + * + * @since WPUF_SINCE + * + * @param string $value Raw font-weight value + * + * @return string Sanitized font-weight value or empty string + */ + private function sanitize_font_weight( $value ) { + $value = (string) $value; + $allowed = [ 'normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900' ]; + + return in_array( $value, $allowed, true ) ? $value : ''; + } + + /** + * Server-side render callback for the block + * + * @since WPUF_SINCE + * + * @param array $attributes Block attributes + * + * @return string + */ + public function render( $attributes ) { + $defaults = [ + 'blockId' => '', + 'formId' => 0, + 'activeTemplate' => 'default', + 'labelPosition' => 'above', + 'labelFontSize' => '14px', + 'labelColor' => '', + 'labelFontWeight' => 'normal', + 'labelFontFamily' => '', + 'labelFontStyle' => '', + 'helpTextColor' => '', + 'helpTextFontFamily' => '', + 'helpTextFontSize' => '12px', + 'helpTextFontStyle' => '', + 'helpTextFontWeight' => '', + 'fieldBorder' => [ + 'color' => '#dddddd', + 'style' => 'solid', + 'width' => '1px', + ], + 'fieldBorderRadius' => '4px', + 'fieldPaddingV' => '8px', + 'fieldPaddingH' => '12px', + 'fieldBackgroundColor' => '', + 'fieldTextColor' => '', + 'fieldPlaceholderColor' => '', + 'fieldFontFamily' => '', + 'fieldFontSize' => '14px', + 'fieldFontStyle' => '', + 'fieldFontWeight' => '', + 'fieldMarginBottom' => '16px', + 'fieldFocusBorderColor' => '', + 'buttonBackgroundColor' => '', + 'buttonTextColor' => '', + 'buttonBorderColor' => '', + 'buttonBorderWidth' => '0px', + 'buttonBorderRadius' => '4px', + 'buttonFontSize' => '14px', + 'buttonFontFamily' => '', + 'buttonFontStyle' => '', + 'buttonFontWeight' => '', + 'buttonPaddingV' => '10px', + 'buttonPaddingH' => '20px', + 'uploadButtonBackgroundColor' => '', + 'uploadButtonTextColor' => '', + 'uploadButtonBorderColor' => '', + 'uploadButtonBorderWidth' => '0px', + 'uploadButtonBorderRadius' => '4px', + 'uploadButtonFontSize' => '14px', + 'uploadButtonPaddingV' => '10px', + 'uploadButtonPaddingH' => '20px', + 'uploadButtonFontFamily' => '', + 'uploadButtonFontStyle' => '', + 'uploadButtonFontWeight' => '', + 'errorMessageColor' => '', + 'successMessageColor' => '', + 'msButtonBackgroundColor' => '#1e1e1e', + 'msButtonTextColor' => '#ffffff', + 'msButtonFontFamily' => '', + 'msButtonFontStyle' => '', + 'msButtonFontWeight' => '', + 'msButtonBorderColor' => '', + 'msButtonBorderWidth' => '0px', + 'msButtonBorderRadius' => '4px', + 'msButtonFontSize' => '14px', + 'msButtonPaddingV' => '10px', + 'msButtonPaddingH' => '20px', + 'msActiveBgColor' => '', + 'msActiveTextColor' => '', + 'msInactiveBgColor' => '', + ]; + + $attributes = wp_parse_args( $attributes, $defaults ); + + $block_id = sanitize_html_class( $attributes['blockId'] ); + if ( empty( $block_id ) ) { + $block_id = 'wpuf-pf-fallback'; + } + + $block_config = [ + 'label_font_size' => $this->sanitize_css_length( $attributes['labelFontSize'] ), + 'label_color' => sanitize_hex_color( $attributes['labelColor'] ) ?? '', + 'label_font_weight' => sanitize_text_field( $attributes['labelFontWeight'] ), + 'label_font_family' => $this->sanitize_font_family( $attributes['labelFontFamily'] ), + 'label_font_style' => $this->sanitize_font_style( $attributes['labelFontStyle'] ), + 'help_text_color' => sanitize_hex_color( $attributes['helpTextColor'] ) ?? '', + 'help_text_font_family' => $this->sanitize_font_family( $attributes['helpTextFontFamily'] ), + 'help_text_font_size' => $this->sanitize_css_length( $attributes['helpTextFontSize'] ), + 'help_text_font_style' => $this->sanitize_font_style( $attributes['helpTextFontStyle'] ), + 'help_text_font_weight' => $this->sanitize_font_weight( $attributes['helpTextFontWeight'] ), + 'field_border' => $this->sanitize_border( $attributes['fieldBorder'] ), + 'field_border_radius' => $this->sanitize_css_length( $attributes['fieldBorderRadius'] ), + 'field_padding_v' => $this->sanitize_css_length( $attributes['fieldPaddingV'] ), + 'field_padding_h' => $this->sanitize_css_length( $attributes['fieldPaddingH'] ), + 'field_background_color' => sanitize_hex_color( $attributes['fieldBackgroundColor'] ) ?? '', + 'field_text_color' => sanitize_hex_color( $attributes['fieldTextColor'] ) ?? '', + 'field_placeholder_color' => sanitize_hex_color( $attributes['fieldPlaceholderColor'] ) ?? '', + 'field_font_family' => $this->sanitize_font_family( $attributes['fieldFontFamily'] ), + 'field_font_size' => $this->sanitize_css_length( $attributes['fieldFontSize'] ), + 'field_font_style' => $this->sanitize_font_style( $attributes['fieldFontStyle'] ), + 'field_font_weight' => $this->sanitize_font_weight( $attributes['fieldFontWeight'] ), + 'field_margin_bottom' => $this->sanitize_css_length( $attributes['fieldMarginBottom'] ), + 'field_focus_border_color' => sanitize_hex_color( $attributes['fieldFocusBorderColor'] ) ?? '', + 'button_background_color' => sanitize_hex_color( $attributes['buttonBackgroundColor'] ) ?? '', + 'button_text_color' => sanitize_hex_color( $attributes['buttonTextColor'] ) ?? '', + 'button_border_color' => sanitize_hex_color( $attributes['buttonBorderColor'] ) ?? '', + 'button_border_width' => $this->sanitize_css_length( $attributes['buttonBorderWidth'] ), + 'button_border_radius' => $this->sanitize_css_length( $attributes['buttonBorderRadius'] ), + 'button_font_size' => $this->sanitize_css_length( $attributes['buttonFontSize'] ), + 'button_font_family' => $this->sanitize_font_family( $attributes['buttonFontFamily'] ), + 'button_font_style' => $this->sanitize_font_style( $attributes['buttonFontStyle'] ), + 'button_font_weight' => $this->sanitize_font_weight( $attributes['buttonFontWeight'] ), + 'button_padding_v' => $this->sanitize_css_length( $attributes['buttonPaddingV'] ), + 'button_padding_h' => $this->sanitize_css_length( $attributes['buttonPaddingH'] ), + 'upload_btn_background_color' => sanitize_hex_color( $attributes['uploadButtonBackgroundColor'] ) ?? '', + 'upload_btn_text_color' => sanitize_hex_color( $attributes['uploadButtonTextColor'] ) ?? '', + 'upload_btn_border_color' => sanitize_hex_color( $attributes['uploadButtonBorderColor'] ) ?? '', + 'upload_btn_border_width' => $this->sanitize_css_length( $attributes['uploadButtonBorderWidth'] ), + 'upload_btn_border_radius' => $this->sanitize_css_length( $attributes['uploadButtonBorderRadius'] ), + 'upload_btn_font_size' => $this->sanitize_css_length( $attributes['uploadButtonFontSize'] ), + 'upload_btn_font_family' => $this->sanitize_font_family( $attributes['uploadButtonFontFamily'] ), + 'upload_btn_font_style' => $this->sanitize_font_style( $attributes['uploadButtonFontStyle'] ), + 'upload_btn_font_weight' => $this->sanitize_font_weight( $attributes['uploadButtonFontWeight'] ), + 'upload_btn_padding_v' => $this->sanitize_css_length( $attributes['uploadButtonPaddingV'] ), + 'upload_btn_padding_h' => $this->sanitize_css_length( $attributes['uploadButtonPaddingH'] ), + 'error_message_color' => sanitize_hex_color( $attributes['errorMessageColor'] ) ?? '', + 'success_message_color' => sanitize_hex_color( $attributes['successMessageColor'] ) ?? '', + 'ms_btn_background_color' => sanitize_hex_color( $attributes['msButtonBackgroundColor'] ) ?? '', + 'ms_btn_text_color' => sanitize_hex_color( $attributes['msButtonTextColor'] ) ?? '', + 'ms_btn_font_family' => $this->sanitize_font_family( $attributes['msButtonFontFamily'] ), + 'ms_btn_font_style' => $this->sanitize_font_style( $attributes['msButtonFontStyle'] ), + 'ms_btn_font_weight' => $this->sanitize_font_weight( $attributes['msButtonFontWeight'] ), + 'ms_btn_border_color' => sanitize_hex_color( $attributes['msButtonBorderColor'] ) ?? '', + 'ms_btn_border_width' => $this->sanitize_css_length( $attributes['msButtonBorderWidth'] ), + 'ms_btn_border_radius' => $this->sanitize_css_length( $attributes['msButtonBorderRadius'] ), + 'ms_btn_font_size' => $this->sanitize_css_length( $attributes['msButtonFontSize'] ), + 'ms_btn_padding_v' => $this->sanitize_css_length( $attributes['msButtonPaddingV'] ), + 'ms_btn_padding_h' => $this->sanitize_css_length( $attributes['msButtonPaddingH'] ), + 'ms_active_bg_color' => sanitize_hex_color( $attributes['msActiveBgColor'] ) ?? '', + 'ms_active_text_color' => sanitize_hex_color( $attributes['msActiveTextColor'] ) ?? '', + 'ms_inactive_bg_color' => sanitize_hex_color( $attributes['msInactiveBgColor'] ) ?? '', + ]; + + /** + * Filter the block configuration before rendering + * + * @since WPUF_SINCE + * + * @param array $block_config Block configuration array + * @param array $attributes Raw block attributes + */ + $block_config = apply_filters( 'wpuf_post_form_block_config', $block_config, $attributes ); + + // get_block_wrapper_attributes() outputs id="..." automatically. + // We output our own id for CSS scoping, so strip it from the wrapper attrs. + $wrapper_attributes = preg_replace( + '/\s*id="[^"]*"/', + '', + get_block_wrapper_attributes( [ 'class' => 'wpuf-post-form-block' ] ) + ); + + ob_start(); + + $template_file = WPUF_ROOT . '/includes/templates/blocks/post-form.php'; + + if ( file_exists( $template_file ) ) { + $args = [ + 'block_id' => $block_id, + 'block_config' => $block_config, + 'form_id' => absint( $attributes['formId'] ), + 'label_position' => sanitize_key( $attributes['labelPosition'] ), + 'wrapper_attrs' => $wrapper_attributes, + ]; + + extract( $args ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract + include $template_file; + } + + return ob_get_clean(); + } +} diff --git a/includes/Frontend.php b/includes/Frontend.php index 9785e13bf..cabaa94d4 100644 --- a/includes/Frontend.php +++ b/includes/Frontend.php @@ -54,7 +54,8 @@ public function enqueue_scripts() { || ( isset( $post->ID ) && ( $pay_page == $post->ID ) ) || isset( $_GET['wpuf_preview'] ) || class_exists( '\Elementor\Plugin' ) - || $this->dokan_is_seller_dashboard() ) { + || $this->dokan_is_seller_dashboard() + || ( isset( $post->post_content ) && has_block( 'wpuf/post-form', $post ) ) ) { wp_enqueue_style( 'wpuf-layout1' ); wp_enqueue_style( 'wpuf-frontend-forms' ); wp_enqueue_style( 'wpuf-sweetalert2' ); diff --git a/includes/Frontend/Form_Gutenberg_Block.php b/includes/Frontend/Form_Gutenberg_Block.php deleted file mode 100644 index 3479b4093..000000000 --- a/includes/Frontend/Form_Gutenberg_Block.php +++ /dev/null @@ -1,102 +0,0 @@ -load_dashicons(); - $js_dir = WPUF_ASSET_URI . '/js/admin/'; - $css_dir = WPUF_ASSET_URI . '/css/admin/'; - // Once we have Gutenberg block javascript, we can enqueue our assets - wp_register_script( 'wpuf-forms-block', $js_dir . 'gutenblock.js', - [ 'wp-blocks', 'wp-editor', 'wp-components', 'wp-i18n', 'wp-element', 'underscore' ], WPUF_VERSION ); - wp_register_style( 'wpuf-forms-block-style', $css_dir . 'gutenblock.css', [ 'wp-edit-blocks' ], WPUF_VERSION ); - wp_register_style( 'wpuf-forms-block-editor', $css_dir . 'gutenblock-editor.css', - [ 'wp-edit-blocks', 'wpuf-forms-block-style' ], WPUF_VERSION ); - /* - * we need to get our forms so that the block can build a dropdown - * with the forms - * */ - wp_enqueue_script( 'wpuf-forms-block' ); - $forms = []; - $all_forms = wpuf()->admin->forms->get_forms( [ 'post_status' => 'publish' ] ); - foreach ( $all_forms['forms'] as $form ) { - $forms[] = [ - 'value' => $form->id, - 'label' => $form->get_title(), - ]; - } - $block_logo = WPUF_ASSET_URI . '/images/icon-128x128.png'; - $thumbnail_logo = WPUF_ASSET_URI . '/images/icon-128x128.png'; - wp_localize_script( 'wpuf-forms-block', 'wpufBlock', [ - 'forms' => $forms, - 'siteUrl' => get_home_url(), - 'block_logo' => $block_logo, - 'thumbnail_logo' => $thumbnail_logo, - ] ); - wp_enqueue_style( 'wpuf-forms-block-style' ); - wp_enqueue_style( 'wpuf-forms-block-editor' ); - } - - public function load_preview_data() { - $js_dir = WPUF_ASSET_URI . '/js/admin/'; - // check for preview and iframe get parameters - if ( isset( $_GET['wpuf_preview'] ) && isset( $_GET['wpuf_iframe'] ) ) { - $form_id = intval( $_GET['wpuf_preview'] ); - // Style below: update width and height for particular form ?> - - $form_id, - ] ); - wp_enqueue_script( 'wpuf-block-setup' ); - } - } -} diff --git a/includes/Integrations/Events_Calendar/Compatibility/TEC_V6_Compatibility.php b/includes/Integrations/Events_Calendar/Compatibility/TEC_V6_Compatibility.php index aa677a69e..5ff91b476 100644 --- a/includes/Integrations/Events_Calendar/Compatibility/TEC_V6_Compatibility.php +++ b/includes/Integrations/Events_Calendar/Compatibility/TEC_V6_Compatibility.php @@ -43,9 +43,6 @@ private function convert_form_data_to_orm_format( $form_data, $meta_vars = [] ) $all_data['tags'] = sanitize_text_field( $_POST['tags'] ); } - - - /** * Opportunity to modify form data before converting to TEC ORM format * diff --git a/includes/templates/blocks/post-form.php b/includes/templates/blocks/post-form.php new file mode 100644 index 000000000..22b61bf41 --- /dev/null +++ b/includes/templates/blocks/post-form.php @@ -0,0 +1,444 @@ + block and renders the post form via the [wpuf_form] shortcode. + +/** + * Available variables passed from PostForm::render(): + * + * @var string $block_id Unique block instance ID for CSS scoping. + * @var array $block_config Sanitised block attributes for styling. + * @var int $form_id Post form ID. + * @var string $label_position 'above'|'left'|'right'|'hidden'. + * @var string $wrapper_attrs Extra HTML attributes for the wrapper div (from get_block_wrapper_attributes()). + */ + +$scope = '#' . esc_attr( $block_id ); + +// When rendering inside the block editor (via ServerSideRender REST request), +// skip gating so the admin can see the form preview. +$is_editor_preview = defined( 'REST_REQUEST' ) && REST_REQUEST; + +// Shared selector keys referenced by both the main rules array and label_position overrides. +// Scoped via .wpuf-form to beat theme specificity on the radio/checkbox option labels. +$label_selector = "{$scope} .wpuf-label, {$scope} .wpuf-form label.wpuf-checkbox-block, {$scope} .wpuf-form label.wpuf-radio-block"; + +// Build per-selector CSS rules from block_config +$css_rules = [ + $label_selector => [ + 'font-family' => $block_config['label_font_family'], + 'font-size' => $block_config['label_font_size'], + 'font-weight' => $block_config['label_font_weight'], + 'font-style' => $block_config['label_font_style'], + 'color' => $block_config['label_color'], + ], + "{$scope} .wpuf-form label.wpuf-checkbox-block input, + {$scope} .wpuf-form label.wpuf-radio-block input" => [ + 'width' => $block_config['label_font_size'], + 'height' => $block_config['label_font_size'], + ], + "{$scope} .wpuf-form-sub-label, {$scope} .wpuf-help, {$scope} .wpuf-help-text" => [ + 'font-family' => $block_config['help_text_font_family'], + 'font-size' => $block_config['help_text_font_size'], + 'font-weight' => $block_config['help_text_font_weight'], + 'font-style' => $block_config['help_text_font_style'], + 'color' => $block_config['help_text_color'], + ], + "{$scope} .wpuf-form input[type='text'], + {$scope} .wpuf-form input[type='email'], + {$scope} .wpuf-form input[type='password'], + {$scope} .wpuf-form input[type='url'], + {$scope} .wpuf-form input[type='number'], + {$scope} .wpuf-form textarea" => [ + 'border-top-width' => $block_config['field_border']['top']['width'], + 'border-top-style' => $block_config['field_border']['top']['style'], + 'border-top-color' => $block_config['field_border']['top']['color'], + 'border-right-width' => $block_config['field_border']['right']['width'], + 'border-right-style' => $block_config['field_border']['right']['style'], + 'border-right-color' => $block_config['field_border']['right']['color'], + 'border-bottom-width' => $block_config['field_border']['bottom']['width'], + 'border-bottom-style' => $block_config['field_border']['bottom']['style'], + 'border-bottom-color' => $block_config['field_border']['bottom']['color'], + 'border-left-width' => $block_config['field_border']['left']['width'], + 'border-left-style' => $block_config['field_border']['left']['style'], + 'border-left-color' => $block_config['field_border']['left']['color'], + 'border-radius' => $block_config['field_border_radius'], + 'padding' => $block_config['field_padding_v'] . ' ' . $block_config['field_padding_h'], + 'background-color' => $block_config['field_background_color'], + 'color' => $block_config['field_text_color'], + 'font-family' => $block_config['field_font_family'], + 'font-size' => $block_config['field_font_size'], + 'font-weight' => $block_config['field_font_weight'], + 'font-style' => $block_config['field_font_style'], + 'box-shadow' => 'none', + ], + "{$scope} .wpuf-form select" => [ + 'border-top-width' => $block_config['field_border']['top']['width'], + 'border-top-style' => $block_config['field_border']['top']['style'], + 'border-top-color' => $block_config['field_border']['top']['color'], + 'border-right-width' => $block_config['field_border']['right']['width'], + 'border-right-style' => $block_config['field_border']['right']['style'], + 'border-right-color' => $block_config['field_border']['right']['color'], + 'border-bottom-width' => $block_config['field_border']['bottom']['width'], + 'border-bottom-style' => $block_config['field_border']['bottom']['style'], + 'border-bottom-color' => $block_config['field_border']['bottom']['color'], + 'border-left-width' => $block_config['field_border']['left']['width'], + 'border-left-style' => $block_config['field_border']['left']['style'], + 'border-left-color' => $block_config['field_border']['left']['color'], + 'border-radius' => $block_config['field_border_radius'], + 'background-color' => $block_config['field_background_color'], + 'color' => $block_config['field_text_color'], + 'font-family' => $block_config['field_font_family'], + 'font-size' => $block_config['field_font_size'], + 'font-weight' => $block_config['field_font_weight'], + 'font-style' => $block_config['field_font_style'], + 'box-shadow' => 'none', + ], + "{$scope} .wpuf-form input::placeholder, + {$scope} .wpuf-form textarea::placeholder" => [ + 'color' => $block_config['field_placeholder_color'], + ], + "{$scope} .wpuf-form select[multiple]" => [ + 'background-image' => 'none', + 'padding-right' => $block_config['field_padding_h'], + ], + "{$scope} .wpuf-form input:focus, + {$scope} .wpuf-form select:focus, + {$scope} .wpuf-form textarea:focus" => [ + 'border-color' => $block_config['field_focus_border_color'], + 'outline' => 'none', + ], + "{$scope} .wpuf-form li" => [ + 'margin-bottom' => $block_config['field_margin_bottom'], + ], + "{$scope} .wpuf-form input[type='submit'], + {$scope} .wpuf-form button[type='submit']" => [ + 'font-size' => $block_config['button_font_size'], + 'font-family' => $block_config['button_font_family'], + 'font-weight' => $block_config['button_font_weight'], + 'font-style' => $block_config['button_font_style'], + 'border-width' => $block_config['button_border_width'], + 'border-style' => '0px' !== $block_config['button_border_width'] ? 'solid' : 'none', + 'border-color' => $block_config['button_border_color'], + 'border-radius' => $block_config['button_border_radius'], + 'padding' => $block_config['button_padding_v'] . ' ' . $block_config['button_padding_h'], + 'background-color' => '' !== $block_config['button_background_color'] ? $block_config['button_background_color'] . ' !important' : '', + 'color' => '' !== $block_config['button_text_color'] ? $block_config['button_text_color'] . ' !important' : '', + 'box-shadow' => 'none !important', + 'text-shadow' => 'none !important', + 'cursor' => 'pointer', + ], + "{$scope} .wpuf-form a.file-selector" => [ + 'font-size' => $block_config['upload_btn_font_size'], + 'font-family' => $block_config['upload_btn_font_family'], + 'font-weight' => $block_config['upload_btn_font_weight'], + 'font-style' => $block_config['upload_btn_font_style'], + 'border-width' => $block_config['upload_btn_border_width'], + 'border-style' => '0px' !== $block_config['upload_btn_border_width'] ? 'solid' : 'none', + 'border-color' => $block_config['upload_btn_border_color'], + 'border-radius' => $block_config['upload_btn_border_radius'], + 'padding' => $block_config['upload_btn_padding_v'] . ' ' . $block_config['upload_btn_padding_h'], + 'background-color' => '' !== $block_config['upload_btn_background_color'] ? $block_config['upload_btn_background_color'] . ' !important' : '', + 'color' => '' !== $block_config['upload_btn_text_color'] ? $block_config['upload_btn_text_color'] . ' !important' : '', + 'box-shadow' => 'none !important', + 'text-shadow' => 'none !important', + 'text-decoration' => 'none', + 'cursor' => 'pointer', + 'display' => 'block', + 'width' => '93.5%', + ], + "{$scope} .wpuf-el.featured_image a.file-selector, + {$scope} .wpuf-el.image_upload a.file-selector" => [ + 'background-color' => '' !== $block_config['upload_btn_background_color'] ? $block_config['upload_btn_background_color'] . ' !important' : '#fafafa !important', + 'color' => '' !== $block_config['upload_btn_text_color'] ? $block_config['upload_btn_text_color'] . ' !important' : '#50575e !important', + 'border-color' => '' !== $block_config['upload_btn_border_color'] ? $block_config['upload_btn_border_color'] : '#dddddd', + ], + "{$scope} .wpuf-error" => [ 'color' => $block_config['error_message_color'] ], + "{$scope} .wpuf-success, {$scope} .wpuf-message" => [ 'color' => $block_config['success_message_color'] ], +]; + +// Label position overrides +switch ( $label_position ) { + case 'left': + $css_rules[ "{$scope} .wpuf-form li" ] = array_merge( + $css_rules[ "{$scope} .wpuf-form li" ], + [ + 'display' => 'grid', + 'grid-template-columns' => '30% 1fr', + 'align-items' => 'center', + 'gap' => '8px', + ] + ); + break; + case 'right': + $css_rules[ "{$scope} .wpuf-form li" ] = array_merge( + $css_rules[ "{$scope} .wpuf-form li" ], + [ + 'display' => 'grid', + 'grid-template-columns' => '1fr 30%', + 'align-items' => 'center', + 'gap' => '8px', + ] + ); + $css_rules[ $label_selector ] = array_merge( + $css_rules[ $label_selector ], + [ 'grid-column' => '2', 'grid-row' => '1', 'text-align' => 'left' ] + ); + $css_rules[ "{$scope} .wpuf-fields" ] = [ 'grid-column' => '1', 'grid-row' => '1' ]; + break; + case 'hidden': + // Hide only the field's own label wrapper — NOT label.wpuf-checkbox-block / + // label.wpuf-radio-block, which wrap the actual option inputs + text. + $css_rules[ "{$scope} .wpuf-label" ] = [ + 'position' => 'absolute', + 'width' => '1px', + 'height' => '1px', + 'padding' => '0', + 'margin' => '-1px', + 'overflow' => 'hidden', + 'clip' => 'rect(0,0,0,0)', + 'white-space' => 'nowrap', + 'border' => '0', + ]; + break; +} + +// Multistep progressbar color overrides. +// Block attributes take priority; fall back to form settings; then defaults. +$is_multistep = false; +$ms_active_bg = ''; +$ms_active_txt = ''; +$ms_inactive = ''; + +if ( $form_id > 0 ) { + $form_settings_meta = get_post_meta( $form_id, 'wpuf_form_settings', true ); + $is_multistep = ! empty( $form_settings_meta['enable_multistep'] ) + && in_array( $form_settings_meta['enable_multistep'], [ 'on', 'yes' ], true ); + + if ( $is_multistep ) { + $ms_active_bg = $block_config['ms_active_bg_color'] ?: ( $form_settings_meta['ms_active_bgcolor'] ?? '#00a0d2' ); + $ms_active_txt = $block_config['ms_active_text_color'] ?: ( $form_settings_meta['ms_ac_txt_color'] ?? '#ffffff' ); + $ms_inactive = $block_config['ms_inactive_bg_color'] ?: ( $form_settings_meta['ms_bgcolor'] ?? '#e4e4e4' ); + + // Step-by-step style: inactive step background + arrow + $css_rules["{$scope} .wpuf-multistep-progressbar ul.wpuf-step-wizard li"] = [ + 'background-color' => $ms_inactive . ' !important', + 'background' => $ms_inactive . ' !important', + ]; + $css_rules["{$scope} .wpuf-multistep-progressbar ul.wpuf-step-wizard li::after"] = [ + 'border-left-color' => $ms_inactive . ' !important', + ]; + + // Step-by-step style: active step background, text + arrow + $css_rules["{$scope} .wpuf-multistep-progressbar ul.wpuf-step-wizard li.active-step"] = [ + 'background-color' => $ms_active_bg . ' !important', + 'color' => $ms_active_txt . ' !important', + ]; + $css_rules["{$scope} .wpuf-multistep-progressbar ul.wpuf-step-wizard li.active-step::after"] = [ + 'border-left-color' => $ms_active_bg . ' !important', + ]; + + // Progressive style: bar track (inactive), filled portion (active), percentage text. + // Only apply background on .wpuf-multistep-progressbar for progressive type; + // step-by-step uses circles, not a filled track. + // + // Skip in editor preview — the preview injects its own static bar with an + // inline-styled track, so painting the outer wrapper would show through the + // preview's inner track and create a wrong-colored band. + $ms_progressbar_type = $form_settings_meta['multistep_progressbar_type'] ?? 'progressive'; + + if ( 'progressive' === $ms_progressbar_type && ! $is_editor_preview ) { + $css_rules["{$scope} .wpuf-multistep-progressbar"] = [ + 'background-color' => $ms_inactive . ' !important', + 'background' => $ms_inactive . ' !important', + ]; + } + + $css_rules["{$scope} .wpuf-multistep-progressbar .ui-widget-header"] = [ + 'background' => $ms_active_bg . ' !important', + ]; + $css_rules["{$scope} .wpuf-multistep-progressbar .wpuf-progress-percentage"] = [ + 'color' => $ms_active_txt . ' !important', + ]; + + // Prev / Next button styles + $css_rules["{$scope} .wpuf-form .wpuf-multistep-prev-btn, + {$scope} .wpuf-form .wpuf-multistep-next-btn"] = [ + 'font-size' => $block_config['ms_btn_font_size'], + 'font-family' => $block_config['ms_btn_font_family'], + 'font-weight' => $block_config['ms_btn_font_weight'], + 'font-style' => $block_config['ms_btn_font_style'], + 'border-width' => $block_config['ms_btn_border_width'], + 'border-style' => '0px' !== $block_config['ms_btn_border_width'] ? 'solid' : 'none', + 'border-color' => $block_config['ms_btn_border_color'], + 'border-radius' => $block_config['ms_btn_border_radius'], + 'padding' => $block_config['ms_btn_padding_v'] . ' ' . $block_config['ms_btn_padding_h'], + 'background-color' => '' !== $block_config['ms_btn_background_color'] ? $block_config['ms_btn_background_color'] . ' !important' : '', + 'color' => '' !== $block_config['ms_btn_text_color'] ? $block_config['ms_btn_text_color'] . ' !important' : '', + 'box-shadow' => 'none !important', + 'text-shadow' => 'none !important', + 'cursor' => 'pointer', + ]; + } +} + +// Build scoped CSS string — skip empty values +$style_output = ''; +foreach ( $css_rules as $selector => $properties ) { + $declarations = ''; + foreach ( $properties as $prop => $value ) { + if ( '' !== $value && null !== $value ) { + $declarations .= esc_attr( $prop ) . ':' . esc_attr( $value ) . ';'; + } + } + if ( $declarations ) { + $style_output .= $selector . '{' . $declarations . '}'; + } +} + +$upload_icon_svg = ""; +$upload_icon_url = 'data:image/svg+xml;utf8,' . rawurlencode( $upload_icon_svg ); +$upload_btn_scope = $scope . ' .wpuf-el.featured_image a.file-selector, ' . $scope . ' .wpuf-el.image_upload a.file-selector'; + +$style_output .= $upload_btn_scope . '{padding-left:34px;background-image:url("' . $upload_icon_url . '");background-repeat:no-repeat;background-position:10px center;background-size:18px 18px;}'; +$style_output .= $scope . ' .wpuf-el.post_content .wp-editor-wrap{width:96.5%;}'; +$style_output .= $scope . ' .wpuf-el.dropdown select, ' . $scope . ' .wpuf-el.multi_select select{width:96.5%;}'; +?> + + + + + +
> + + 0 ) : ?> + ]*>.*?<\/script>/is', '', $shortcode_output ); + + // In the editor preview,