diff --git a/changelog.txt b/changelog.txt index 138d5eafcb..71e10a5799 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,12 @@ Found a bug? Have a great feature idea? Get on GitHub and tell us about it and w Our GitHub has the full list of all prior releases of Pods: https://github.com/pods-framework/pods/releases += 3.2.6 - July 21st, 2024 = + +* Fixed: Resolve issue with WordPress 6.5 and earlier compatibility by adding polyfill for `react-jsx-runtime` dependency that WP 6.6 related tooling now requires. (@sc0ttkclark) +* Fixed: Resolve `register_meta` issue where it wasn't checking if post type supported revisions before setting meta key as revisionable. (@sc0ttkclark) +* Tweak: Partial work towards a fix for REST API update handling for meta fields which was broken in a previous release. Final fix will be in Pods 3.2.7. (@sc0ttkclark) + = 3.2.5 - July 19th, 2024 = * Fixed: Resolve issue with WordPress 6.6 compatibility that caused Pods Admin > Edit Pod and Pods forms to stop working properly on some sites. (@sc0ttkclark, @swissspidy) diff --git a/classes/PodsInit.php b/classes/PodsInit.php index e7de334658..55a45e1646 100644 --- a/classes/PodsInit.php +++ b/classes/PodsInit.php @@ -688,6 +688,17 @@ public function register_assets() { ); } + // WordPress pre-6.6 compatibility for react-jsx-runtime. + if ( ! wp_script_is( 'react-jsx-runtime', 'registered' ) ) { + wp_register_script( + 'react-jsx-runtime', + PODS_URL . 'ui/js/react-jsx-runtime.js', + [ 'react' ], + '18.3.0', + true + ); + } + // Marionette dependencies for DFV/MV fields. wp_register_script( 'pods-backbone-radio', diff --git a/classes/PodsRESTFields.php b/classes/PodsRESTFields.php index a6a6ab1c30..e44ca0bdbc 100644 --- a/classes/PodsRESTFields.php +++ b/classes/PodsRESTFields.php @@ -23,7 +23,7 @@ class PodsRESTFields { * * @var null|Pod */ - protected $pod; + protected $pod = null; /** * Constructor for class @@ -49,15 +49,24 @@ public function __construct( $pod ) { } /** - * Set the Pods object + * Get the Pod object. * - * @since 2.5.6 + * @since 3.2.6 * - * @access protected + * @return Pod|null The Pod object. + */ + public function get_pod(): ?Pod { + return $this->pod; + } + + /** + * Set the Pod object. + * + * @since 2.5.6 * - * @param string|Pods $pod Pods object or name of Pods object + * @param string|object|Pods|Pod $pod The Pod object which will be normalized and stored. */ - private function set_pod( $pod ) { + public function set_pod( $pod ) { $this->pod = null; // Normalize the $pod object. @@ -127,11 +136,9 @@ public function add_fields() { * * @since 2.5.6 * - * @access protected - * * @param Field $field The field object. */ - protected function register( $field ) { + public function register( $field ) { $rest_read = self::field_allowed_to_extend( $field, $this->pod, 'read' ); $rest_write = self::field_allowed_to_extend( $field, $this->pod, 'write' ); @@ -249,7 +256,7 @@ public static function field_allowed_to_extend( $field, $pod, $mode ) { } $can_use_mode = filter_var( $can_use_mode_value, FILTER_VALIDATE_BOOLEAN ); - $access = filter_var( $field->get_arg( $mode_access_arg, false ), FILTER_VALIDATE_BOOLEAN ); + $access = 'read' === $mode && filter_var( $field->get_arg( $mode_access_arg, false ), FILTER_VALIDATE_BOOLEAN ); // Check if user must be logged in to access field and override whether they can use it. if ( $can_use_mode && $access ) { diff --git a/init.php b/init.php index 6920f7f821..b0d768c1a7 100644 --- a/init.php +++ b/init.php @@ -10,7 +10,7 @@ * Plugin Name: Pods - Custom Content Types and Fields * Plugin URI: https://pods.io/ * Description: Pods is a framework for creating, managing, and deploying customized content types and fields - * Version: 3.2.5 + * Version: 3.2.6-a-1 * Author: Pods Framework Team * Author URI: https://pods.io/about/ * Text Domain: pods @@ -43,7 +43,7 @@ add_action( 'init', 'pods_deactivate_pods_ui' ); } else { // Current version. - define( 'PODS_VERSION', '3.2.5' ); + define( 'PODS_VERSION', '3.2.6-a-1' ); // Current database version, this is the last version the database changed. define( 'PODS_DB_VERSION', '2.3.5' ); diff --git a/package.json b/package.json index 9e6cc11eb3..dadc3d65b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pods", - "version": "3.2.5", + "version": "3.2.6-a-1", "description": "Pods is a development framework for creating, extending, managing, and deploying customized content types in WordPress.", "author": "Pods Foundation, Inc", "homepage": "https://pods.io/", diff --git a/readme.txt b/readme.txt index 7c9b236a41..3971de1bfd 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Tags: pods, custom post types, custom taxonomies, content types, custom fields Requires at least: 6.0 Tested up to: 6.6 Requires PHP: 7.2 -Stable tag: 3.2.5 +Stable tag: 3.2.6-a-1 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -182,6 +182,12 @@ Pods really wouldn't be where it is without all the contributions from our [dono == Changelog == += 3.2.6 - July 21st, 2024 = + +* Fixed: Resolve issue with WordPress 6.5 and earlier compatibility by adding polyfill for `react-jsx-runtime` dependency that WP 6.6 related tooling now requires. (@sc0ttkclark) +* Fixed: Resolve `register_meta` issue where it wasn't checking if post type supported revisions before setting meta key as revisionable. (@sc0ttkclark) +* Tweak: Partial work towards a fix for REST API update handling for meta fields which was broken in a previous release. Final fix will be in Pods 3.2.7. (@sc0ttkclark) + = 3.2.5 - July 19th, 2024 = * Fixed: Resolve issue with WordPress 6.6 compatibility that caused Pods Admin > Edit Pod and Pods forms to stop working properly on some sites. (@sc0ttkclark, @swissspidy) diff --git a/src/Pods/WP/Meta.php b/src/Pods/WP/Meta.php index 93251df26a..95ad18d435 100644 --- a/src/Pods/WP/Meta.php +++ b/src/Pods/WP/Meta.php @@ -115,6 +115,11 @@ public function register_meta() { && filter_var( $pod->get_arg( 'read_all', false ), FILTER_VALIDATE_BOOLEAN ) ); + $pod_has_revisions = ( + 'post_type' === $pod_type + && post_type_supports( $pod_name, 'revisions' ) + ); + foreach ( $fields as $field ) { $field_is_repeatable = $field->is_repeatable(); @@ -134,26 +139,34 @@ public function register_meta() { // Revision field config. $field_has_revisions = ( - $all_fields_have_revisions - || ( - 'post_type' === $pod_type - && 'meta' === $pod_storage - && filter_var( $pod->get_arg( 'revisions_revision_field', false ), FILTER_VALIDATE_BOOLEAN ) + $pod_has_revisions + && ( + $all_fields_have_revisions + || ( + 'post_type' === $pod_type + && 'meta' === $pod_storage + && filter_var( $pod->get_arg( 'revisions_revision_field', false ), FILTER_VALIDATE_BOOLEAN ) + ) ) ); + $meta_args = [ + 'object_subtype' => $pod_name, + 'type' => 'string', + 'description' => $field['label'], + 'default' => $field->get_arg( 'default', '' ), + 'single' => ! $field_is_repeatable, + 'show_in_rest' => $field_has_rest, + ]; + + if ( $field_has_revisions ) { + $meta_args['revisions_enabled'] = true; + } + register_meta( $type, $field['name'], - [ - 'object_subtype' => $pod_name, - 'type' => 'string', - 'description' => $field['label'], - 'default' => $field->get_arg( 'default', '' ), - 'single' => ! $field_is_repeatable, - 'show_in_rest' => $field_has_rest, - 'revisions_enabled' => $field_has_revisions, - ] + $meta_args ); if ( ! isset( $this->registered_meta[ $type ] ) ) { diff --git a/tests/codeception/wpunit/Pods/PodsRESTFieldsTest.php b/tests/codeception/wpunit/Pods/PodsRESTFieldsTest.php new file mode 100644 index 0000000000..5ec67e28ab --- /dev/null +++ b/tests/codeception/wpunit/Pods/PodsRESTFieldsTest.php @@ -0,0 +1,386 @@ +pod_id = $api->save_pod( [ + 'type' => 'post_type', + 'storage' => 'meta', + 'public' => 1, + 'supports_custom_fields' => 1, + 'rest_enable' => 1, + 'name' => $this->pod_name, + ] ); + + $this->save_test_fields( $this->pod_id ); + + $this->pod = $api->load_pod( [ + 'id' => $this->pod_id, + ] ); + + ///////////////////////// + // Full REST read pod + ///////////////////////// + + $this->full_read_pod_id = $api->save_pod( [ + 'type' => 'post_type', + 'storage' => 'meta', + 'public' => 1, + 'supports_custom_fields' => 1, + 'rest_enable' => 1, + 'name' => $this->full_read_pod_name, + ] ); + + $this->save_test_fields( $this->full_read_pod_id ); + + $this->full_read_pod = $api->load_pod( [ + 'id' => $this->full_read_pod_id, + ] ); + + ///////////////////////// + // Full REST write pod + ///////////////////////// + + $this->full_write_pod_id = $api->save_pod( [ + 'type' => 'post_type', + 'storage' => 'meta', + 'public' => 1, + 'supports_custom_fields' => 1, + 'rest_enable' => 1, + 'name' => $this->full_write_pod_name, + ] ); + + $this->save_test_fields( $this->full_write_pod_id ); + + $this->full_write_pod = $api->load_pod( [ + 'id' => $this->full_write_pod_id, + ] ); + } + + protected function save_test_fields( $pod_id ) { + $api = pods_api(); + + $api->save_field( [ + 'pod_id' => $pod_id, + 'name' => 'non_rest_number', + 'type' => 'number', + ] ); + + $api->save_field( [ + 'pod_id' => $pod_id, + 'name' => 'read_rest_number', + 'type' => 'number', + 'rest_read' => 1, + ] ); + + $api->save_field( [ + 'pod_id' => $pod_id, + 'name' => 'read_access_rest_number', + 'type' => 'number', + 'rest_read' => 1, + 'rest_read_access' => 1, + ] ); + + $api->save_field( [ + 'pod_id' => $pod_id, + 'name' => 'write_rest_number', + 'type' => 'number', + 'rest_write' => 1, + ] ); + } + + public function tearDown(): void { + $this->pod_id = null; + $this->pod = null; + $this->full_read_pod_id = null; + $this->full_read_pod = null; + $this->full_write_pod_id = null; + $this->full_write_pod = null; + + // Reset current user. + global $current_user; + + $current_user = null; + + wp_set_current_user( 0 ); + + parent::tearDown(); + } + + public function test_get_pod() { + $sut = $this->sut(); + + $this->assertEquals($this->pod, $sut->get_pod()); + } + + public function test_set_pod() { + $test_pod = new Pod( [ + 'name' => 'test_basic', + 'type' => 'post_type', + 'rest_enable' => 1, + ] ); + + $sut = $this->sut(); + + $sut->set_pod( $test_pod ); + + $this->assertEquals($test_pod, $sut->get_pod()); + } + + public function test_set_pod_for_unsupported_type() { + $test_pod = new Pod( [ + 'name' => 'test_basic', + 'type' => 'unsupported', + 'rest_enable' => 1, + ] ); + + $sut = $this->sut(); + + $sut->set_pod( $test_pod ); + + $this->assertNull( $sut->get_pod() ); + } + + public function test_set_pod_for_non_rest_pod() { + $test_pod = new Pod( [ + 'name' => 'test_basic', + 'type' => 'post_type', + ] ); + + $sut = $this->sut(); + + $sut->set_pod( $test_pod ); + + $this->assertNull( $sut->get_pod() ); + } + + public function test_add_fields() { + $sut = $this->sut(); + + $sut->add_fields(); + + $this->assertEquals( 10, has_filter( 'rest_insert_' . $this->pod_name, [ 'PodsRESTHandlers', 'save_handler' ] ) ); + } + + public function test_register() { + global $wp_rest_additional_fields; + + $sut = $this->sut(); + + $sut->register( $this->pod->get_field( 'read_rest_number' ) ); + + $this->assertTrue( isset( $wp_rest_additional_fields[ $this->pod_name ]['read_rest_number'] ) ); + } + + public function test_register_without_rest() { + global $wp_rest_additional_fields; + + $sut = $this->sut(); + + $sut->register( $this->pod->get_field( 'non_rest_number' ) ); + + $this->assertFalse( isset( $wp_rest_additional_fields[ $this->pod_name ]['non_rest_number'] ) ); + } + + public function test_field_allowed_to_extend_read() { + $this->assertTrue( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'read_rest_number' ), + $this->pod, + 'read' + ) + ); + } + + public function test_field_allowed_to_extend_read_requires_access_while_logged_out() { + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'read_access_rest_number' ), + $this->pod, + 'read' + ) + ); + } + + public function test_field_allowed_to_extend_read_requires_access_with_logged_in_user() { + wp_set_current_user( 1 ); + + $this->assertTrue( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'read_access_rest_number' ), + $this->pod, + 'read' + ) + ); + } + + public function test_field_allowed_to_extend_read_with_field_without_rest() { + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'non_rest_number' ), + $this->pod, + 'read' + ) + ); + + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'write_rest_number' ), + $this->pod, + 'read' + ) + ); + } + + public function test_field_allowed_to_extend_write() { + $this->assertTrue( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'write_rest_number' ), + $this->pod, + 'write' + ) + ); + } + + public function test_field_allowed_to_extend_write_with_field_without_rest() { + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'non_rest_number' ), + $this->pod, + 'write' + ) + ); + + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->pod->get_field( 'read_rest_number' ), + $this->pod, + 'write' + ) + ); + } + + public function test_field_allowed_to_extend_with_full_rest_read() { + $this->assertTrue( + PodsRESTFields::field_allowed_to_extend( + $this->full_read_pod->get_field( 'read_rest_number' ), + $this->full_read_pod, + 'read' + ) + ); + } + + public function test_field_allowed_to_extend_with_full_rest_read_with_field_without_rest() { + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->full_read_pod->get_field( 'non_rest_number' ), + $this->full_read_pod, + 'read' + ) + ); + + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->full_read_pod->get_field( 'write_rest_number' ), + $this->full_read_pod, + 'read' + ) + ); + } + + public function test_field_allowed_to_extend_with_full_rest_write() { + $this->assertTrue( + PodsRESTFields::field_allowed_to_extend( + $this->full_write_pod->get_field( 'write_rest_number' ), + $this->full_write_pod, + 'write' + ) + ); + } + + public function test_field_allowed_to_extend_with_full_rest_write_with_field_without_rest() { + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->full_write_pod->get_field( 'non_rest_number' ), + $this->full_write_pod, + 'write' + ) + ); + + $this->assertFalse( + PodsRESTFields::field_allowed_to_extend( + $this->full_write_pod->get_field( 'read_rest_number' ), + $this->full_write_pod, + 'write' + ) + ); + } + + private function sut( Pod $pod = null ): PodsRESTFields { + return new PodsRESTFields( $pod ?? $this->pod ); + } + +} diff --git a/ui/js/react-jsx-runtime.js b/ui/js/react-jsx-runtime.js new file mode 100644 index 0000000000..20f714e1eb --- /dev/null +++ b/ui/js/react-jsx-runtime.js @@ -0,0 +1,2 @@ +/*! For license information please see react-jsx-runtime.js.LICENSE.txt */ +(()=>{"use strict";var r={20:(r,e,t)=>{var o=t(609),n=Symbol.for("react.element"),s=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,f=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function _(r,e,t){var o,s={},_=null,i=null;for(o in void 0!==t&&(_=""+t),void 0!==e.key&&(_=""+e.key),void 0!==e.ref&&(i=e.ref),e)a.call(e,o)&&!p.hasOwnProperty(o)&&(s[o]=e[o]);if(r&&r.defaultProps)for(o in e=r.defaultProps)void 0===s[o]&&(s[o]=e[o]);return{$$typeof:n,type:r,key:_,ref:i,props:s,_owner:f.current}}e.Fragment=s,e.jsx=_,e.jsxs=_},848:(r,e,t)=>{r.exports=t(20)},609:r=>{r.exports=window.React}},e={},t=function t(o){var n=e[o];if(void 0!==n)return n.exports;var s=e[o]={exports:{}};return r[o](s,s.exports,t),s.exports}(848);window.ReactJSXRuntime=t})(); \ No newline at end of file diff --git a/ui/js/react-jsx-runtime.js.LICENSE.txt b/ui/js/react-jsx-runtime.js.LICENSE.txt new file mode 100644 index 0000000000..e68557b276 --- /dev/null +++ b/ui/js/react-jsx-runtime.js.LICENSE.txt @@ -0,0 +1,9 @@ +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/ui/styles/dist/pods-wizard.css b/ui/styles/dist/pods-wizard.css index b68f7573c1..4790ed1b57 100644 --- a/ui/styles/dist/pods-wizard.css +++ b/ui/styles/dist/pods-wizard.css @@ -1 +1 @@ -#pods-wizard-box{width:782px;color:#555;margin:20px}#pods-wizard-box.pods-wizard-steps-1 #pods-wizard-heading ul li{width:780px}#pods-wizard-box.pods-wizard-steps-2 #pods-wizard-heading ul li{width:390px}#pods-wizard-box.pods-wizard-steps-3 #pods-wizard-heading ul li{width:260px}#pods-wizard-box.pods-wizard-steps-4 #pods-wizard-heading ul li{width:195px}#pods-wizard-box.pods-wizard-steps-5 #pods-wizard-heading ul li{width:156px}#pods-wizard-box #pods-wizard-heading ul{margin:0;padding:0}#pods-wizard-box #pods-wizard-heading ul li{list-style:none;display:block;float:left;height:30px;padding-top:5px;color:#ababab;margin-bottom:0;font:18px "Garamond, Georgia";position:relative;border-top:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf;background:linear-gradient(#f9f9f9, #ededed)}#pods-wizard-box #pods-wizard-heading ul li i{display:block;width:11px;height:35px;position:absolute;top:0;left:0;background:url(../../images/arrow_next.png)}#pods-wizard-box #pods-wizard-heading ul li span{display:inline-block;margin:0 5px 0 20px;width:25px;height:25px;line-height:25px;text-align:center;background:#ababab;color:#f2f2f2;box-shadow:none;font-size:20px;font-weight:bold;-webkit-border-top-left-radius:30px;-webkit-border-top-right-radius:30px;-webkit-border-bottom-right-radius:30px;-webkit-border-bottom-left-radius:30px;-moz-border-radius-topleft:30px;-moz-border-radius-topright:30px;-moz-border-radius-bottomright:30px;-moz-border-radius-bottomleft:30px;border-top-left-radius:30px;border-top-right-radius:30px;border-bottom-right-radius:30px;border-bottom-left-radius:30px}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-current{color:#fff;border-bottom:1px solid #6e6e6e;border-top:1px solid gray;text-shadow:1px 1px 1px rgba(0,0,0,.2);background:linear-gradient(#808080, #6e6e6e)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-current span{text-shadow:none;background:#fff;color:#6f6f6f;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.2);-moz-box-shadow:1px 1px 2px rgba(0,0,0,.2);box-shadow:1px 1px 2px rgba(0,0,0,.2)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-current+li>i{background:url(../../images/arrow_current.png)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete{color:#6f9472;border-bottom:1px solid #bbddbd;background:linear-gradient(#d4f4d6, #bbddbd)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete+li>i{background:url(../../images/arrow_complete.png)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete+li.pods-wizard-menu-complete>i{background:url(../../images/arrow_complete_previous.png)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete span{background:#6f9472;color:#caebcc}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete em{display:block;top:10px;right:5px;background:url(../../images/tick.png) no-repeat right center;width:17px;height:17px;position:absolute}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete:last-child em{right:15px}#pods-wizard-box #pods-wizard-heading ul li:first-child{border-left:1px solid #dfdfdf;-webkit-border-top-left-radius:8px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:8px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:8px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}#pods-wizard-box #pods-wizard-heading ul li:first-child i{background:none}#pods-wizard-box #pods-wizard-heading ul li:last-child{border-right:1px solid #dfdfdf;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:8px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-topright:8px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:0;border-top-right-radius:8px;border-bottom-right-radius:0;border-bottom-left-radius:0}#pods-wizard-box #pods-wizard-main{clear:both;overflow:auto}#pods-wizard-box #pods-wizard-main p{font-size:13px;line-height:22px}#pods-wizard-box #pods-wizard-main p.padded{padding:0 20px 20px}#pods-wizard-box #pods-wizard-main #pods-wizard-choices{margin:15px 20px 25px 20px}#pods-wizard-box #pods-wizard-main .pods-advanced-toggle{display:inline-block;text-decoration:underline;padding-left:15px}#pods-wizard-box #pods-wizard-main .pods-wizard-option-content{display:none}#pods-wizard-box #pods-wizard-main .pods-wizard-option-content .pods-package-import-group .pods-field-option-group{padding-top:0}#pods-wizard-box #pods-wizard-main .pods-wizard-option-content .pods-package-import-group .pods-field-option-group p{margin-top:0}#pods-wizard-box #pods-wizard-main .stuffbox{margin:15px 15px 0 15px;padding:0 10px 10px 10px}#pods-wizard-box #pods-wizard-main .stuffbox h3{font-size:15px;font-weight:normal;line-height:1;padding:7px 10px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif}#pods-wizard-box #pods-wizard-main .stuffbox .qtip-content h3{color:inherit}#pods-wizard-box #pods-wizard-main .stuffbox .qtip-content a{color:inherit}#pods-wizard-box #pods-wizard-main .stuffbox .inside{padding:0}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container{background:#fcfcfc;border-bottom:1px solid #ccd0d4;padding:15px 0}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container label{padding-top:4px;float:left;width:30%;max-width:150px;margin:0 2%}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container label.pods-checkbox-pick__option__label{width:100%;max-width:100%}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-field-option{padding:0}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-field-option__field{width:100%;max-width:25rem}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container input[type=text],#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container select,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container textarea,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-field.pods-boolean,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-pick-values,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-form-ui-field-type-file,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-slider-field{width:100%}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content h3{margin:1.33em 20px;font-size:1.35em}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content h4{margin:1.33em 20px;font-size:1.2em}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content ul.normal{margin:15px 20px;list-style:circle}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content ul.normal li{margin:0 0 8px 30px;padding-left:4px;line-height:22px;font-size:14px;list-style:circle}#pods-wizard-box #pods-wizard-main .pods-wizard-panel{display:none;border-left:1px solid #dfdfdf;border-right:1px solid #dfdfdf;padding-bottom:25px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel:first-child{display:block}#pods-wizard-box #pods-wizard-main .pods-wizard-panel a.button-primary,#pods-wizard-box #pods-wizard-main .pods-wizard-panel a.button-secondary{padding:8px 15px;border-radius:14px 14px 14px 14px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content{padding:20px;margin-bottom:25px;background:#fff}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content.pods-wizard-grey{background:#f9f9f9}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content p{margin-top:0}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content ul.normal{margin:15px 20px;list-style:circle}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content ul.normal li{margin:0 0 8px 30px;padding-left:4px;line-height:22px;font-size:14px;list-style:circle}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table{width:100%}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table th,#pods-wizard-box #pods-wizard-main .pods-wizard-panel table td{height:47px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table th{text-align:left;background:#f9f9f9;text-transform:uppercase;padding-left:53px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td{font-size:20px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-right{text-align:right}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-name{padding-left:20px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-name em{color:#777;font-style:normal;font-size:14px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-name .pods-wizard-info{float:right;text-align:right;font-size:12px;padding-right:15px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td img{display:none}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-complete td{background:#e6f9e6;color:#6f9472;border-top:1px solid #fff}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-complete td i{display:inline-block;width:17px;height:17px;background:url(../../images/tick.png)}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-warning td{background:#ffffe0;border-top:1px solid #e7dd5f;border-bottom:1px solid #e7dd5f}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-warning td:first-child{border-left:1px solid #e7dd5f}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-warning td:last-child{border-right:1px solid #e7dd5f}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-error td{background:#ffebe8;border-top:1px solid #c00;border-bottom:1px solid #c00}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-error td:first-child{border-left:1px solid #c00}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-error td:last-child{border-right:1px solid #c00}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-active td{background:#fff4e0;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;color:#eba600}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-active td img{display:inline}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-pending td{border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;color:#ababab}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options{text-align:center}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-options-list{display:flex;justify-content:space-evenly}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-options-list .pods-wizard-option:first-child{margin-right:0 !important}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option{width:290px;display:inline-block;vertical-align:top}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option:first-child{margin-right:40px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a{min-height:140px;padding:10px 0;display:block;background:#f9f9f9;position:relative;text-decoration:none;-webkit-border-top-left-radius:8px;-webkit-border-top-right-radius:8px;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:8px;-moz-border-radius-topright:8px;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:8px;border-top-right-radius:8px;border-bottom-right-radius:8px;border-bottom-left-radius:8px;-webkit-box-shadow:0px 0px 4px rgba(0,0,0,.3);-moz-box-shadow:0px 0px 4px rgba(0,0,0,.3);box-shadow:0px 0px 4px rgba(0,0,0,.3)}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a h2{color:#21759b;font-weight:bold;font-size:1.5em;padding-right:0}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a p{font-style:normal;font-size:14px;color:#555;margin:7px;line-height:17px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a:hover{background:#feffe0}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a:hover h2{color:#d54e21}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a span{display:none}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a.pods-wizard-option-active{background:#feffe0;color:#d54e21}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a.pods-wizard-option-active span{width:290px;height:30px;background:#d54e21;display:block;position:absolute;bottom:0;left:0;text-align:center;color:#fff;font:13px/30px bold Garamond,Georgia;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a:visited p{color:#555}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option p{font-size:12px;line-height:17px;font-style:italic}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option p em{margin:0;padding:0}#pods-wizard-box #pods-wizard-actions{height:35px;border:1px solid #dfdfdf;position:relative;clear:both;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px;background:linear-gradient(#ededed, #f9f9f9)}#pods-wizard-box #pods-wizard-actions.pods-wizard-button-interface{height:45px}#pods-wizard-box #pods-wizard-actions.pods-wizard-button-interface #pods-wizard-toolbar{height:45px;padding:0 15px;display:flex;justify-content:space-between;align-content:center;align-items:center}#pods-wizard-box #pods-wizard-actions input.button,#pods-wizard-box #pods-wizard-actions a.button{position:absolute;top:2px}#pods-wizard-box #pods-wizard-actions input.button.button-primary{right:2px}#pods-wizard-box #pods-wizard-actions input.button.button-secondary{left:2px}#pods-wizard-box #pods-wizard-actions a.button{display:block;height:35px;width:110px;line-height:35px;text-align:center;font-weight:bold;font-size:15px;padding:0;border:none !important}#pods-wizard-box #pods-wizard-actions a.button.button-primary{right:0;color:#fff;background:linear-gradient(#278ab8, #22789f);-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:0;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:0}#pods-wizard-box #pods-wizard-actions a.button.button-primary:hover{background:#22789f}#pods-wizard-box #pods-wizard-actions a.button.button-secondary{left:0;color:#7b7b7b;background:linear-gradient(#dfdfdf, #b2b2b2);-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:8px}#pods-wizard-box #pods-wizard-actions a.button.button-secondary:hover{background:#b2b2b2}#pods-wizard-box #pods-wizard-actions #pods-wizard-finished{display:none;height:35px;line-height:35px;text-align:center;padding-right:142px;text-transform:uppercase;color:#fff;font-weight:bold;text-shadow:1px 1px 1px rgba(0,0,0,.2);background:linear-gradient(#808080, #6e6e6e);-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px}#pods-wizard-box #pods-wizard-actions #pods-wizard-next.finished{width:150px}#pods-wizard-box.pods-wizard-hide-first #pods-wizard-main{border-bottom:1px solid #dfdfdf;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px}#pods-wizard-box.pods-wizard-hide-first #pods-wizard-actions{display:none} +#pods-wizard-box{width:782px;color:#555;margin:20px}#pods-wizard-box.pods-wizard-steps-1 #pods-wizard-heading ul li{width:780px}#pods-wizard-box.pods-wizard-steps-2 #pods-wizard-heading ul li{width:390px}#pods-wizard-box.pods-wizard-steps-3 #pods-wizard-heading ul li{width:260px}#pods-wizard-box.pods-wizard-steps-4 #pods-wizard-heading ul li{width:195px}#pods-wizard-box.pods-wizard-steps-5 #pods-wizard-heading ul li{width:156px}#pods-wizard-box #pods-wizard-heading ul{margin:0;padding:0}#pods-wizard-box #pods-wizard-heading ul li{list-style:none;display:block;float:left;height:30px;padding-top:5px;color:#ababab;margin-bottom:0;font:18px "Garamond, Georgia";position:relative;border-top:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf;background:linear-gradient(#f9f9f9, #ededed)}#pods-wizard-box #pods-wizard-heading ul li i{display:block;width:11px;height:35px;position:absolute;top:0;left:0;background:url(../../images/arrow_next.png)}#pods-wizard-box #pods-wizard-heading ul li span{display:inline-block;margin:0 5px 0 20px;width:25px;height:25px;line-height:25px;text-align:center;background:#ababab;color:#f2f2f2;box-shadow:none;font-size:20px;font-weight:bold;-webkit-border-top-left-radius:30px;-webkit-border-top-right-radius:30px;-webkit-border-bottom-right-radius:30px;-webkit-border-bottom-left-radius:30px;-moz-border-radius-topleft:30px;-moz-border-radius-topright:30px;-moz-border-radius-bottomright:30px;-moz-border-radius-bottomleft:30px;border-top-left-radius:30px;border-top-right-radius:30px;border-bottom-right-radius:30px;border-bottom-left-radius:30px}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-current{color:#fff;border-bottom:1px solid #6e6e6e;border-top:1px solid gray;text-shadow:1px 1px 1px rgba(0,0,0,.2);background:linear-gradient(#808080, #6e6e6e)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-current span{text-shadow:none;background:#fff;color:#6f6f6f;-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.2);-moz-box-shadow:1px 1px 2px rgba(0,0,0,.2);box-shadow:1px 1px 2px rgba(0,0,0,.2)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-current+li>i{background:url(../../images/arrow_current.png)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete{color:#6f9472;border-bottom:1px solid #bbddbd;background:linear-gradient(#d4f4d6, #bbddbd)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete+li>i{background:url(../../images/arrow_complete.png)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete+li.pods-wizard-menu-complete>i{background:url(../../images/arrow_complete_previous.png)}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete span{background:#6f9472;color:#caebcc}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete em{display:block;top:10px;right:5px;background:url(../../images/tick.png) no-repeat right center;width:17px;height:17px;position:absolute}#pods-wizard-box #pods-wizard-heading ul li.pods-wizard-menu-complete:last-child em{right:15px}#pods-wizard-box #pods-wizard-heading ul li:first-child i{background:none}#pods-wizard-box #pods-wizard-heading ul li:first-child{border-left:1px solid #dfdfdf;-webkit-border-top-left-radius:8px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:8px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:8px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}#pods-wizard-box #pods-wizard-heading ul li:last-child{border-right:1px solid #dfdfdf;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:8px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-topright:8px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;border-top-left-radius:0;border-top-right-radius:8px;border-bottom-right-radius:0;border-bottom-left-radius:0}#pods-wizard-box #pods-wizard-main{clear:both;overflow:auto}#pods-wizard-box #pods-wizard-main p{font-size:13px;line-height:22px}#pods-wizard-box #pods-wizard-main p.padded{padding:0 20px 20px}#pods-wizard-box #pods-wizard-main #pods-wizard-choices{margin:15px 20px 25px 20px}#pods-wizard-box #pods-wizard-main .pods-advanced-toggle{display:inline-block;text-decoration:underline;padding-left:15px}#pods-wizard-box #pods-wizard-main .pods-wizard-option-content{display:none}#pods-wizard-box #pods-wizard-main .pods-wizard-option-content .pods-package-import-group .pods-field-option-group{padding-top:0}#pods-wizard-box #pods-wizard-main .pods-wizard-option-content .pods-package-import-group .pods-field-option-group p{margin-top:0}#pods-wizard-box #pods-wizard-main .stuffbox{margin:15px 15px 0 15px;padding:0 10px 10px 10px}#pods-wizard-box #pods-wizard-main .stuffbox h3{font-size:15px;font-weight:normal;line-height:1;padding:7px 10px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif}#pods-wizard-box #pods-wizard-main .stuffbox .qtip-content h3{color:inherit}#pods-wizard-box #pods-wizard-main .stuffbox .qtip-content a{color:inherit}#pods-wizard-box #pods-wizard-main .stuffbox .inside{padding:0}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container{background:#fcfcfc;border-bottom:1px solid #ccd0d4;padding:15px 0}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container label{padding-top:4px;float:left;width:30%;max-width:150px;margin:0 2%}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container label.pods-checkbox-pick__option__label{width:100%;max-width:100%}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-field-option{padding:0}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-field-option__field{width:100%;max-width:25rem}#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container input[type=text],#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container select,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container textarea,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-field.pods-boolean,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-pick-values,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-form-ui-field-type-file,#pods-wizard-box #pods-wizard-main .stuffbox .inside .pods-field__container .pods-slider-field{width:100%}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content h3{margin:1.33em 20px;font-size:1.35em}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content h4{margin:1.33em 20px;font-size:1.2em}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content ul.normal{margin:15px 20px;list-style:circle}#pods-wizard-box #pods-wizard-main .stuffbox .inside div.pods-wizard-content ul.normal li{margin:0 0 8px 30px;padding-left:4px;line-height:22px;font-size:14px;list-style:circle}#pods-wizard-box #pods-wizard-main .pods-wizard-panel{display:none;border-left:1px solid #dfdfdf;border-right:1px solid #dfdfdf;padding-bottom:25px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel:first-child{display:block}#pods-wizard-box #pods-wizard-main .pods-wizard-panel a.button-primary,#pods-wizard-box #pods-wizard-main .pods-wizard-panel a.button-secondary{padding:8px 15px;border-radius:14px 14px 14px 14px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content{padding:20px;margin-bottom:25px;background:#fff}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content.pods-wizard-grey{background:#f9f9f9}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content p{margin-top:0}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content ul.normal{margin:15px 20px;list-style:circle}#pods-wizard-box #pods-wizard-main .pods-wizard-panel .pods-wizard-content ul.normal li{margin:0 0 8px 30px;padding-left:4px;line-height:22px;font-size:14px;list-style:circle}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table{width:100%}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table th,#pods-wizard-box #pods-wizard-main .pods-wizard-panel table td{height:47px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table th{text-align:left;background:#f9f9f9;text-transform:uppercase;padding-left:53px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td{font-size:20px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-right{text-align:right}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-name{padding-left:20px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-name em{color:#777;font-style:normal;font-size:14px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td.pods-wizard-name .pods-wizard-info{float:right;text-align:right;font-size:12px;padding-right:15px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr td img{display:none}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-complete td{background:#e6f9e6;color:#6f9472;border-top:1px solid #fff}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-complete td i{display:inline-block;width:17px;height:17px;background:url(../../images/tick.png)}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-warning td{background:#ffffe0;border-top:1px solid #e7dd5f;border-bottom:1px solid #e7dd5f}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-warning td:first-child{border-left:1px solid #e7dd5f}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-warning td:last-child{border-right:1px solid #e7dd5f}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-error td{background:#ffebe8;border-top:1px solid #c00;border-bottom:1px solid #c00}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-error td:first-child{border-left:1px solid #c00}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-error td:last-child{border-right:1px solid #c00}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-active td{background:#fff4e0;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;color:#eba600}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-active td img{display:inline}#pods-wizard-box #pods-wizard-main .pods-wizard-panel table tr.pods-wizard-table-pending td{border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;color:#ababab}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options{text-align:center}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-options-list{display:flex;justify-content:space-evenly}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-options-list .pods-wizard-option:first-child{margin-right:0 !important}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option{width:290px;display:inline-block;vertical-align:top}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option:first-child{margin-right:40px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a{min-height:140px;padding:10px 0;display:block;background:#f9f9f9;position:relative;text-decoration:none;-webkit-border-top-left-radius:8px;-webkit-border-top-right-radius:8px;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:8px;-moz-border-radius-topright:8px;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:8px;border-top-right-radius:8px;border-bottom-right-radius:8px;border-bottom-left-radius:8px;-webkit-box-shadow:0px 0px 4px rgba(0,0,0,.3);-moz-box-shadow:0px 0px 4px rgba(0,0,0,.3);box-shadow:0px 0px 4px rgba(0,0,0,.3)}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a h2{color:#21759b;font-weight:bold;font-size:1.5em;padding-right:0}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a p{font-style:normal;font-size:14px;color:#555;margin:7px;line-height:17px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a:hover{background:#feffe0}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a:hover h2{color:#d54e21}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a span{display:none}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a.pods-wizard-option-active{background:#feffe0;color:#d54e21}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a.pods-wizard-option-active span{width:290px;height:30px;background:#d54e21;display:block;position:absolute;bottom:0;left:0;text-align:center;color:#fff;font:13px/30px bold Garamond,Georgia;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option a:visited p{color:#555}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option p{font-size:12px;line-height:17px;font-style:italic}#pods-wizard-box #pods-wizard-main .pods-wizard-panel #pods-wizard-options .pods-wizard-option p em{margin:0;padding:0}#pods-wizard-box #pods-wizard-actions{height:35px;border:1px solid #dfdfdf;position:relative;clear:both;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px;background:linear-gradient(#ededed, #f9f9f9)}#pods-wizard-box #pods-wizard-actions.pods-wizard-button-interface{height:45px}#pods-wizard-box #pods-wizard-actions.pods-wizard-button-interface #pods-wizard-toolbar{height:45px;padding:0 15px;display:flex;justify-content:space-between;align-content:center;align-items:center}#pods-wizard-box #pods-wizard-actions input.button,#pods-wizard-box #pods-wizard-actions a.button{position:absolute;top:2px}#pods-wizard-box #pods-wizard-actions input.button.button-primary{right:2px}#pods-wizard-box #pods-wizard-actions input.button.button-secondary{left:2px}#pods-wizard-box #pods-wizard-actions a.button{display:block;height:35px;width:110px;line-height:35px;text-align:center;font-weight:bold;font-size:15px;padding:0;border:none !important}#pods-wizard-box #pods-wizard-actions a.button.button-primary{right:0;color:#fff;background:linear-gradient(#278ab8, #22789f);-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:0;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:0}#pods-wizard-box #pods-wizard-actions a.button.button-primary:hover{background:#22789f}#pods-wizard-box #pods-wizard-actions a.button.button-secondary{left:0;color:#7b7b7b;background:linear-gradient(#dfdfdf, #b2b2b2);-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:8px}#pods-wizard-box #pods-wizard-actions a.button.button-secondary:hover{background:#b2b2b2}#pods-wizard-box #pods-wizard-actions #pods-wizard-finished{display:none;height:35px;line-height:35px;text-align:center;padding-right:142px;text-transform:uppercase;color:#fff;font-weight:bold;text-shadow:1px 1px 1px rgba(0,0,0,.2);background:linear-gradient(#808080, #6e6e6e);-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px}#pods-wizard-box #pods-wizard-actions #pods-wizard-next.finished{width:150px}#pods-wizard-box.pods-wizard-hide-first #pods-wizard-main{border-bottom:1px solid #dfdfdf;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:8px;-moz-border-radius-bottomleft:8px;border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:8px;border-bottom-left-radius:8px}#pods-wizard-box.pods-wizard-hide-first #pods-wizard-actions{display:none} diff --git a/ui/styles/src/base/_wizard.scss b/ui/styles/src/base/_wizard.scss index b579ace043..0d0dfa64f9 100644 --- a/ui/styles/src/base/_wizard.scss +++ b/ui/styles/src/base/_wizard.scss @@ -107,8 +107,10 @@ i { background: none; } - border-left: 1px solid $grey-border; - @include multi-border-radius(8px, 0, 0, 0); + & { + border-left: 1px solid $grey-border; + @include multi-border-radius(8px, 0, 0, 0); + } } &:last-child { border-right: 1px solid $grey-border; diff --git a/webpack.common.js b/webpack.common.js index e13b08733b..a43dc55c20 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,74 +1,100 @@ -const DependencyExtractionWebpackPlugin = require( '@wordpress/dependency-extraction-webpack-plugin' ); +const DependencyExtractionWebpackPlugin = require('@wordpress/dependency-extraction-webpack-plugin'); +const webpack = require('webpack'); -const path = require( 'path' ); +const path = require('path'); -module.exports = { - entry: { - 'dfv/pods-dfv': './ui/js/dfv/src/pods-dfv.js', - 'blocks/pods-blocks-api': './ui/js/blocks/src/index.js', - }, - output: { - path: path.resolve( __dirname, 'ui/js' ), - filename: '[name].min.js', - }, +module.exports = [ + { + entry: { + 'dfv/pods-dfv': './ui/js/dfv/src/pods-dfv.js', + 'blocks/pods-blocks-api': './ui/js/blocks/src/index.js', + }, + output: { + path: path.resolve(__dirname, 'ui/js'), + filename: '[name].min.js', + }, - externals: { - 'jquery': 'jQuery', - 'underscore': '_', - 'backbone': 'Backbone', - 'backbone.marionette': 'Marionette', - 'react': 'React', - 'react-dom': 'ReactDOM', - 'lodash': 'lodash', - }, + externals: { + 'jquery': 'jQuery', + 'underscore': '_', + 'backbone': 'Backbone', + 'backbone.marionette': 'Marionette', + 'react': 'React', + 'react-dom': 'ReactDOM', + 'lodash': 'lodash', + }, - resolve: { - extensions: [ '*', '.js', '.jsx' ], - modules: [ - 'node_modules', - path.resolve( __dirname, 'ui/js' ) - ], - }, + resolve: { + extensions: ['*', '.js', '.jsx'], + modules: [ + 'node_modules', + path.resolve(__dirname, 'ui/js') + ], + }, - module: { - rules: [ - { - test: /\.(js|jsx)$/, - exclude: /node_modules/, - use: [ 'babel-loader' ], - }, - { - test: /\.scss$/, - exclude: /node_modules/, - use: [ - // creates style nodes from JS strings - { loader: 'style-loader' }, - // translates CSS into CommonJS - { loader: 'css-loader' }, - // compiles Sass to CSS - { - loader: 'sass-loader', - options: { - implementation: require( 'sass' ), + module: { + rules: [ + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: ['babel-loader'], + }, + { + test: /\.scss$/, + exclude: /node_modules/, + use: [ + // creates style nodes from JS strings + {loader: 'style-loader'}, + // translates CSS into CommonJS + {loader: 'css-loader'}, + // compiles Sass to CSS + { + loader: 'sass-loader', + options: { + implementation: require('sass'), + }, }, - }, - ], + ], + }, + { + test: /\.css$/, + use: [ + // creates style nodes from JS strings + {loader: 'style-loader'}, + // translates CSS into CommonJS + {loader: 'css-loader'}, + ], + }, + ], + }, + + plugins: [ + new DependencyExtractionWebpackPlugin({ + outputFormat: 'json', + }), + new webpack.LoaderOptionsPlugin({ + options: { + implementation: require('sass'), + }, + }), + ], + }, + { + entry: { + 'react-jsx-runtime': { + import: 'react/jsx-runtime', }, - { - test: /\.css$/, - use: [ - // creates style nodes from JS strings - { loader: 'style-loader' }, - // translates CSS into CommonJS - { loader: 'css-loader' }, - ], + }, + output: { + path: path.resolve(__dirname, 'ui/js'), + filename: 'react-jsx-runtime.js', + library: { + name: 'ReactJSXRuntime', + type: 'window', }, - ], + }, + externals: { + react: 'React', + }, }, - - plugins: [ - new DependencyExtractionWebpackPlugin( { - outputFormat: 'json', - } ), - ], -}; +]; diff --git a/webpack.dev.js b/webpack.dev.js index 05f1251b64..ce2563e47c 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -2,8 +2,13 @@ const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); -module.exports = merge(common, { - mode: 'development', - devtool: 'eval-source-map', - watch: true, -}); +module.exports = [ + merge( common[ 0 ], { + mode: 'development', + devtool: 'eval-source-map', + watch: true, + } ), + merge( common[ 1 ], { + mode: 'production', + } ), +]; diff --git a/webpack.prod.js b/webpack.prod.js index 31515707de..8921a73352 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -3,22 +3,27 @@ const Terser = require( 'terser-webpack-plugin' ); const common = require( './webpack.common.js' ); -module.exports = merge( common, { - mode: 'production', +module.exports = [ + merge( common[ 0 ], { + mode: 'production', - optimization: { - minimize: true, - minimizer: [ - new Terser( { - parallel: true, - extractComments: false, - terserOptions: { - sourceMap: false, - format: { - comments: false, + optimization: { + minimize: true, + minimizer: [ + new Terser( { + parallel: true, + extractComments: false, + terserOptions: { + sourceMap: false, + format: { + comments: false, + }, }, - }, - } ), - ], - }, -} ); + } ), + ], + }, + } ), + merge( common[ 1 ], { + mode: 'production', + } ), +];