Version Description
Added: Gutenberg Template Library updated to the new Extendify library. See more information here about this upgrade and how to access the legacy library: https://redux.io/gutenberg-template-library-upgrade. Added: Option to enable/disable Template libraries. Found under Settings > Redux > Templates Added: Redux debug data moved to WordPress Site Health Info screen. Removed: Redux Framework Health Screen. Modified: Tools > Redux Framework screen moved to Settings > Redux Modified: Redux Templates disabled by default. Release date: September 21, 2021
Download this release
Release Info
Developer | dovyp |
Plugin | Redux Framework |
Version | 4.3.0 |
Comparing to | |
See all releases |
Code changes from version 4.2.14 to 4.3.0
- class-redux-framework-plugin.php +40 -31
- extendify-sdk/.eslintrc.js +74 -0
- extendify-sdk/.github/workflows/build-and-test.yml +62 -0
- extendify-sdk/.github/workflows/build-development-zip.yml +70 -0
- extendify-sdk/.github/workflows/force-production-on-main.yml +66 -0
- extendify-sdk/.phpcs.xml.dist +179 -0
- extendify-sdk/app/Admin.php +121 -0
- extendify-sdk/app/ApiRouter.php +137 -0
- extendify-sdk/app/App.php +111 -0
- extendify-sdk/app/Controllers/AuthController.php +43 -0
- extendify-sdk/app/Controllers/MetaController.php +30 -0
- extendify-sdk/app/Controllers/PingController.php +30 -0
- extendify-sdk/app/Controllers/PluginController.php +68 -0
- extendify-sdk/app/Controllers/TaxonomyController.php +30 -0
- extendify-sdk/app/Controllers/TemplateController.php +55 -0
- extendify-sdk/app/Controllers/UserController.php +68 -0
- extendify-sdk/app/Http.php +148 -0
- extendify-sdk/app/Plugin.php +335 -0
- extendify-sdk/app/User.php +141 -0
- extendify-sdk/bootstrap.php +35 -0
- extendify-sdk/config.json +7 -0
- extendify-sdk/editorplus/EditorPlus.php +224 -0
- extendify-sdk/editorplus/editorplus-template.php +60 -0
- extendify-sdk/editorplus/editorplus.js +244 -0
- extendify-sdk/extendify-sdk.php +52 -0
- extendify-sdk/loader.php +61 -0
- extendify-sdk/public/.gitkeep +0 -0
- extendify-sdk/public/build/extendify-sdk.css +1 -0
- extendify-sdk/public/build/extendify-sdk.js +2 -0
- extendify-sdk/public/build/extendify-sdk.js.LICENSE.txt +20 -0
- extendify-sdk/public/editorplus/editorplus.min.js +1 -0
- extendify-sdk/public/mix-manifest.json +5 -0
- extendify-sdk/readme.md +51 -0
- extendify-sdk/readme.txt +5 -0
- extendify-sdk/routes/api.php +43 -0
- extendify-sdk/src/ExtendifyLibrary.js +38 -0
- extendify-sdk/src/api/General.js +12 -0
- extendify-sdk/src/api/Plugins.js +21 -0
- extendify-sdk/src/api/Taxonomies.js +7 -0
- extendify-sdk/src/api/Templates.js +65 -0
- extendify-sdk/src/api/User.js +59 -0
- extendify-sdk/src/api/axios.js +60 -0
- extendify-sdk/src/app.css +52 -0
- extendify-sdk/src/app.js +31 -0
- extendify-sdk/src/buttons.js +115 -0
- extendify-sdk/src/components/ImportButton.js +88 -0
- extendify-sdk/src/components/LoginInterface.js +114 -0
- extendify-sdk/src/components/Loginbutton.js +25 -0
- extendify-sdk/src/components/SearchPredict.js +89 -0
- extendify-sdk/src/components/TaxonomyBreadcrumbs.js +26 -0
- extendify-sdk/src/components/TaxonomyList.js +39 -0
- extendify-sdk/src/components/TaxonomySection.js +178 -0
- extendify-sdk/src/components/TemplateButton.js +66 -0
- extendify-sdk/src/components/TypeSelect.js +47 -0
- extendify-sdk/src/config.js +4 -0
- extendify-sdk/src/hooks/helpers.js +11 -0
- extendify-sdk/src/hooks/useBeacon.js +73 -0
- extendify-sdk/src/hooks/useTaxonomies.js +25 -0
- extendify-sdk/src/listeners/index.js +7 -0
- extendify-sdk/src/listeners/softerror-encountered.js +21 -0
- extendify-sdk/src/listeners/template-inserted.js +26 -0
- extendify-sdk/src/middleware/NeedsPermissionModal.js +41 -0
- extendify-sdk/src/middleware/NeedsRegistrationModal.js +77 -0
- extendify-sdk/src/middleware/ReloadRequiredModal.js +43 -0
- extendify-sdk/src/middleware/hasPluginsActivated/ActivatePluginsModal.js +57 -0
- extendify-sdk/src/middleware/hasPluginsActivated/ActivatingModal.js +47 -0
- extendify-sdk/src/middleware/hasPluginsActivated/ErrorActivating.js +29 -0
- extendify-sdk/src/middleware/hasPluginsActivated/index.js +16 -0
- extendify-sdk/src/middleware/hasRequiredPlugins/ErrorInstalling.js +25 -0
- extendify-sdk/src/middleware/hasRequiredPlugins/InstallingModal.js +40 -0
- extendify-sdk/src/middleware/hasRequiredPlugins/RequiredPluginsModal.js +60 -0
- extendify-sdk/src/middleware/hasRequiredPlugins/index.js +16 -0
- extendify-sdk/src/middleware/helpers.js +61 -0
- extendify-sdk/src/middleware/index.js +42 -0
- extendify-sdk/src/pages/CuratedView.js +71 -0
- extendify-sdk/src/pages/GridView.js +33 -0
- extendify-sdk/src/pages/Login.js +37 -0
- extendify-sdk/src/pages/MainContent.js +47 -0
- extendify-sdk/src/pages/Router.js +39 -0
- extendify-sdk/src/pages/SingleView.js +26 -0
- extendify-sdk/src/pages/guide/GuideStart.js +149 -0
- extendify-sdk/src/pages/guide/GuideSteps.js +231 -0
- extendify-sdk/src/pages/guide/Welcome.js +166 -0
- extendify-sdk/src/pages/modals/WaitingCrunchingModal.js +22 -0
- extendify-sdk/src/pages/parts/Grid.js +144 -0
- extendify-sdk/src/pages/parts/HasSidebar.js +43 -0
- extendify-sdk/src/pages/parts/MainWindow.js +77 -0
- extendify-sdk/src/pages/parts/RowByTax.js +70 -0
- extendify-sdk/src/pages/parts/Single.js +121 -0
- extendify-sdk/src/pages/parts/Toolbar.js +71 -0
- extendify-sdk/src/pages/parts/sidebars/SidebarMain.js +51 -0
- extendify-sdk/src/pages/parts/sidebars/SidebarSingle.js +59 -0
- extendify-sdk/src/state/GlobalState.js +17 -0
- extendify-sdk/src/state/Importing.js +16 -0
- extendify-sdk/src/state/Taxonomies.js +16 -0
- extendify-sdk/src/state/Templates.js +103 -0
- extendify-sdk/src/state/User.js +66 -0
- extendify-sdk/src/util/airtable.js +18 -0
- extendify-sdk/src/util/blocks.js +26 -0
- extendify-sdk/src/util/general.js +45 -0
- extendify-sdk/src/util/templateInjection.js +27 -0
- extendify-sdk/support/notices.php +85 -0
- extendify-sdk/tailwind.config.js +93 -0
- extendify-sdk/vendor/autoload.php +7 -0
- extendify-sdk/vendor/composer/ClassLoader.php +445 -0
- extendify-sdk/vendor/composer/InstalledVersions.php +654 -0
- extendify-sdk/vendor/composer/LICENSE +21 -0
- extendify-sdk/vendor/composer/autoload_classmap.php +9 -0
- extendify-sdk/vendor/composer/autoload_namespaces.php +9 -0
- extendify-sdk/vendor/composer/autoload_psr4.php +10 -0
- extendify-sdk/vendor/composer/autoload_real.php +55 -0
- extendify-sdk/vendor/composer/autoload_static.php +31 -0
- extendify-sdk/vendor/composer/installed.json +1 -0
- extendify-sdk/vendor/composer/installed.php +395 -0
- extendify-sdk/webpack.mix.js +62 -0
- readme.txt +138 -157
- redux-core/assets/css/redux-fields.min.css +1 -1
- redux-core/assets/css/redux-fields.min.css.map +1 -1
- redux-core/assets/css/vendor.css +77 -1
class-redux-framework-plugin.php
CHANGED
@@ -73,7 +73,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
73 |
* @since 3.1.3
|
74 |
* @return self::$instance The one true Redux_Framework_Plugin
|
75 |
*/
|
76 |
-
public static function instance() {
|
77 |
$path = REDUX_PLUGIN_FILE;
|
78 |
|
79 |
if ( function_exists( 'get_plugin_data' ) && file_exists( $path ) ) {
|
@@ -85,7 +85,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
85 |
|
86 |
if ( is_plugin_active( 'redux-framework/redux-framework.php' ) && true === $res ) {
|
87 |
echo '<div class="error"><p>' . esc_html__( 'Redux Framework version 4 is activated but not loaded. Redux Framework version 3 is still installed and activated. Please deactivate Redux Framework version 3.', 'redux-framework' ) . '</p></div>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
88 |
-
return;
|
89 |
}
|
90 |
}
|
91 |
|
@@ -110,7 +110,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
110 |
* @since 4.0.1
|
111 |
* @return self::$instance The one true Redux_Framework_Plugin
|
112 |
*/
|
113 |
-
public static function get_instance() {
|
114 |
return self::instance();
|
115 |
}
|
116 |
|
@@ -162,6 +162,14 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
162 |
require_once dirname( __FILE__ ) . '/redux-core/framework.php';
|
163 |
}
|
164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
if ( file_exists( dirname( __FILE__ ) . '/redux-templates/redux-templates.php' ) ) {
|
166 |
require_once dirname( __FILE__ ) . '/redux-templates/redux-templates.php';
|
167 |
}
|
@@ -266,7 +274,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
266 |
*
|
267 |
* @return void
|
268 |
*/
|
269 |
-
public static function activate( $network_wide ) {
|
270 |
// phpcs:disable
|
271 |
//if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
272 |
// if ( $network_wide ) {
|
@@ -299,7 +307,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
299 |
*
|
300 |
* @return void
|
301 |
*/
|
302 |
-
public static function deactivate( $network_wide ) {
|
303 |
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
304 |
if ( $network_wide ) {
|
305 |
// Get all blog IDs.
|
@@ -325,13 +333,13 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
325 |
* Fired when a new WPMU site is activated
|
326 |
*
|
327 |
* @access public
|
328 |
-
* @since 3.0.0
|
329 |
*
|
330 |
* @param int $blog_id The ID of the new blog.
|
331 |
*
|
332 |
* @return void
|
|
|
333 |
*/
|
334 |
-
public function activate_new_site( $blog_id ) {
|
335 |
if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
|
336 |
return;
|
337 |
}
|
@@ -354,7 +362,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
354 |
|
355 |
$var = '0';
|
356 |
|
357 |
-
// Get an array of IDs (We have to do it this way because WordPress
|
358 |
$result = wp_cache_get( 'redux-blog-ids' );
|
359 |
if ( false === $result ) {
|
360 |
|
@@ -429,17 +437,15 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
429 |
|
430 |
if ( isset( $_GET['nonce'] ) && wp_verify_nonce( sanitize_key( $_GET['nonce'] ), 'redux_framework_demo' ) ) {
|
431 |
if ( isset( $_GET['redux-framework-plugin'] ) && 'demo' === $_GET['redux-framework-plugin'] ) {
|
432 |
-
$url = admin_url( add_query_arg( array( 'page' => 'redux-framework' ), '
|
433 |
-
|
434 |
-
if ( 'demo' === $_GET['redux-framework-plugin'] ) {
|
435 |
-
if ( false === $this->options['demo'] ) {
|
436 |
-
$this->options['demo'] = true;
|
437 |
-
$url = admin_url( add_query_arg( array( 'page' => 'redux_demo' ), 'admin.php' ) );
|
438 |
-
} else {
|
439 |
-
$this->options['demo'] = false;
|
440 |
|
441 |
-
|
|
|
|
|
|
|
|
|
442 |
}
|
|
|
443 |
if ( is_multisite() && $this->plugin_network_activated ) {
|
444 |
update_site_option( 'ReduxFrameworkPlugin', $this->options );
|
445 |
} else {
|
@@ -458,13 +464,13 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
458 |
* Add a settings link to the Redux entry in the plugin overview screen
|
459 |
*
|
460 |
* @param array $links Links array.
|
461 |
-
* @param string $file
|
462 |
*
|
463 |
* @return array
|
464 |
* @see filter:plugin_action_links
|
465 |
* @since 1.0
|
466 |
*/
|
467 |
-
public function add_settings_link( $links, $file ) {
|
468 |
|
469 |
if ( strpos( REDUX_PLUGIN_FILE, $file ) === false ) {
|
470 |
return $links;
|
@@ -491,7 +497,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
491 |
*
|
492 |
* @return string
|
493 |
*/
|
494 |
-
private function get_site_url( $path = '' ) {
|
495 |
$url = 'https://redux.io';
|
496 |
|
497 |
if ( ! empty( $path ) ) {
|
@@ -504,14 +510,14 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
504 |
/**
|
505 |
* Url with utm tags
|
506 |
*
|
507 |
-
* @param string
|
508 |
-
* @param string
|
509 |
-
* @param string $utm_content
|
510 |
-
* @param bool
|
511 |
*
|
512 |
* @return string
|
513 |
*/
|
514 |
-
public function get_site_utm_url( $path, $utm_medium, $utm_content = null, $utm_campaign = false ) {
|
515 |
$url = self::get_site_url( $path );
|
516 |
|
517 |
if ( ! $utm_campaign ) {
|
@@ -541,17 +547,20 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
|
|
541 |
* Edit plugin metalinks
|
542 |
*
|
543 |
* @access public
|
544 |
-
* @since 3.0.0
|
545 |
*
|
546 |
-
* @param
|
547 |
-
* @param
|
548 |
*
|
549 |
* @return array The modified array of links
|
|
|
550 |
*/
|
551 |
-
public function plugin_metalinks( $links, $file ) {
|
552 |
if ( strpos( $file, 'redux-framework.php' ) !== false && is_plugin_active( $file ) ) {
|
553 |
-
$links[] = '<a href="' . esc_url( admin_url( add_query_arg( array( 'page' => 'redux-framework' ), '
|
554 |
-
|
|
|
|
|
|
|
555 |
}
|
556 |
|
557 |
return $links;
|
73 |
* @since 3.1.3
|
74 |
* @return self::$instance The one true Redux_Framework_Plugin
|
75 |
*/
|
76 |
+
public static function instance(): ?Redux_Framework_Plugin {
|
77 |
$path = REDUX_PLUGIN_FILE;
|
78 |
|
79 |
if ( function_exists( 'get_plugin_data' ) && file_exists( $path ) ) {
|
85 |
|
86 |
if ( is_plugin_active( 'redux-framework/redux-framework.php' ) && true === $res ) {
|
87 |
echo '<div class="error"><p>' . esc_html__( 'Redux Framework version 4 is activated but not loaded. Redux Framework version 3 is still installed and activated. Please deactivate Redux Framework version 3.', 'redux-framework' ) . '</p></div>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
88 |
+
return null;
|
89 |
}
|
90 |
}
|
91 |
|
110 |
* @since 4.0.1
|
111 |
* @return self::$instance The one true Redux_Framework_Plugin
|
112 |
*/
|
113 |
+
public static function get_instance(): ?Redux_Framework_Plugin {
|
114 |
return self::instance();
|
115 |
}
|
116 |
|
162 |
require_once dirname( __FILE__ ) . '/redux-core/framework.php';
|
163 |
}
|
164 |
|
165 |
+
// Including extendify sdk.
|
166 |
+
if ( true === (bool) get_option( 'use_extendify_templates', true ) ) {
|
167 |
+
if ( file_exists( plugin_dir_path( REDUX_PLUGIN_FILE ) . 'extendify-sdk/loader.php' ) ) {
|
168 |
+
$GLOBALS['extendifySdkSourcePlugin'] = 'Redux';
|
169 |
+
require_once dirname( __FILE__ ) . '/extendify-sdk/loader.php';
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
if ( file_exists( dirname( __FILE__ ) . '/redux-templates/redux-templates.php' ) ) {
|
174 |
require_once dirname( __FILE__ ) . '/redux-templates/redux-templates.php';
|
175 |
}
|
274 |
*
|
275 |
* @return void
|
276 |
*/
|
277 |
+
public static function activate( bool $network_wide ) {
|
278 |
// phpcs:disable
|
279 |
//if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
280 |
// if ( $network_wide ) {
|
307 |
*
|
308 |
* @return void
|
309 |
*/
|
310 |
+
public static function deactivate( bool $network_wide ) {
|
311 |
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
312 |
if ( $network_wide ) {
|
313 |
// Get all blog IDs.
|
333 |
* Fired when a new WPMU site is activated
|
334 |
*
|
335 |
* @access public
|
|
|
336 |
*
|
337 |
* @param int $blog_id The ID of the new blog.
|
338 |
*
|
339 |
* @return void
|
340 |
+
* @since 3.0.0
|
341 |
*/
|
342 |
+
public function activate_new_site( int $blog_id ) {
|
343 |
if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
|
344 |
return;
|
345 |
}
|
362 |
|
363 |
$var = '0';
|
364 |
|
365 |
+
// Get an array of IDs (We have to do it this way because WordPress says so, however reduntant).
|
366 |
$result = wp_cache_get( 'redux-blog-ids' );
|
367 |
if ( false === $result ) {
|
368 |
|
437 |
|
438 |
if ( isset( $_GET['nonce'] ) && wp_verify_nonce( sanitize_key( $_GET['nonce'] ), 'redux_framework_demo' ) ) {
|
439 |
if ( isset( $_GET['redux-framework-plugin'] ) && 'demo' === $_GET['redux-framework-plugin'] ) {
|
440 |
+
$url = admin_url( add_query_arg( array( 'page' => 'redux-framework' ), 'options-general.php' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
441 |
|
442 |
+
if ( false === $this->options['demo'] ) {
|
443 |
+
$this->options['demo'] = true;
|
444 |
+
$url = admin_url( add_query_arg( array( 'page' => 'redux_demo' ), 'admin.php' ) );
|
445 |
+
} else {
|
446 |
+
$this->options['demo'] = false;
|
447 |
}
|
448 |
+
|
449 |
if ( is_multisite() && $this->plugin_network_activated ) {
|
450 |
update_site_option( 'ReduxFrameworkPlugin', $this->options );
|
451 |
} else {
|
464 |
* Add a settings link to the Redux entry in the plugin overview screen
|
465 |
*
|
466 |
* @param array $links Links array.
|
467 |
+
* @param string $file Plugin filename/slug.
|
468 |
*
|
469 |
* @return array
|
470 |
* @see filter:plugin_action_links
|
471 |
* @since 1.0
|
472 |
*/
|
473 |
+
public function add_settings_link( array $links, string $file ): array {
|
474 |
|
475 |
if ( strpos( REDUX_PLUGIN_FILE, $file ) === false ) {
|
476 |
return $links;
|
497 |
*
|
498 |
* @return string
|
499 |
*/
|
500 |
+
private function get_site_url( string $path = '' ): string {
|
501 |
$url = 'https://redux.io';
|
502 |
|
503 |
if ( ! empty( $path ) ) {
|
510 |
/**
|
511 |
* Url with utm tags
|
512 |
*
|
513 |
+
* @param string $path Path on site.
|
514 |
+
* @param string $utm_medium Medium var.
|
515 |
+
* @param string|null $utm_content Content var.
|
516 |
+
* @param bool $utm_campaign Campaign var.
|
517 |
*
|
518 |
* @return string
|
519 |
*/
|
520 |
+
public function get_site_utm_url( string $path, string $utm_medium, string $utm_content = null, bool $utm_campaign = false ): string {
|
521 |
$url = self::get_site_url( $path );
|
522 |
|
523 |
if ( ! $utm_campaign ) {
|
547 |
* Edit plugin metalinks
|
548 |
*
|
549 |
* @access public
|
|
|
550 |
*
|
551 |
+
* @param array $links The current array of links.
|
552 |
+
* @param string $file A specific plugin row.
|
553 |
*
|
554 |
* @return array The modified array of links
|
555 |
+
* @since 3.0.0
|
556 |
*/
|
557 |
+
public function plugin_metalinks( array $links, string $file ): array {
|
558 |
if ( strpos( $file, 'redux-framework.php' ) !== false && is_plugin_active( $file ) ) {
|
559 |
+
$links[] = '<a href="' . esc_url( admin_url( add_query_arg( array( 'page' => 'redux-framework' ), 'options-general.php' ) ) ) . '">' . esc_html__( 'What is this?', 'redux-framework' ) . '</a>';
|
560 |
+
|
561 |
+
if ( true === Redux_Core::$redux_templates_enabled ) {
|
562 |
+
$links[] = '<a href="' . esc_url( admin_url( add_query_arg( array( 'post_type' => 'page' ), 'post-new.php' ) ) ) . '#redux_templates=1">' . esc_html__( 'Template Library', 'redux-framework' ) . '</a>';
|
563 |
+
}
|
564 |
}
|
565 |
|
566 |
return $links;
|
extendify-sdk/.eslintrc.js
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
module.exports = {
|
2 |
+
env: {
|
3 |
+
browser: true,
|
4 |
+
es2021: true,
|
5 |
+
jest: true,
|
6 |
+
node: true,
|
7 |
+
},
|
8 |
+
extends: ['eslint:recommended', 'plugin:react/recommended', 'plugin:react-hooks/recommended'],
|
9 |
+
parserOptions: {
|
10 |
+
ecmaFeatures: { jsx: true },
|
11 |
+
sourceType: 'module',
|
12 |
+
},
|
13 |
+
plugins: ['react'],
|
14 |
+
rules: {
|
15 |
+
indent: ['error', 4, { SwitchCase: 1 }],
|
16 |
+
'require-await': 'error',
|
17 |
+
quotes: ['error', 'single'],
|
18 |
+
'comma-dangle': ['error', 'always-multiline'],
|
19 |
+
'multiline-ternary': ['error', 'always-multiline'],
|
20 |
+
'array-element-newline': ['error', 'consistent'],
|
21 |
+
'no-constant-condition': ['error', { checkLoops: false }],
|
22 |
+
'no-multi-spaces': ['error'],
|
23 |
+
semi: ['error', 'never'],
|
24 |
+
'space-in-parens': ['error', 'never'],
|
25 |
+
'space-unary-ops': [
|
26 |
+
2, {
|
27 |
+
words: true,
|
28 |
+
nonwords: false,
|
29 |
+
overrides: {},
|
30 |
+
}],
|
31 |
+
'space-before-function-paren': [
|
32 |
+
'error',
|
33 |
+
{
|
34 |
+
anonymous: 'always',
|
35 |
+
named: 'never',
|
36 |
+
asyncArrow: 'always',
|
37 |
+
},
|
38 |
+
],
|
39 |
+
'react/react-in-jsx-scope': 'off',
|
40 |
+
'function-paren-newline': [
|
41 |
+
'error',
|
42 |
+
{ minItems: 3 },
|
43 |
+
],
|
44 |
+
'quote-props': ['error', 'as-needed'],
|
45 |
+
'object-curly-spacing': ['error', 'always', { objectsInObjects: false }],
|
46 |
+
'no-multiple-empty-lines': [
|
47 |
+
'error',
|
48 |
+
{ max: 1 },
|
49 |
+
],
|
50 |
+
'react/prop-types': 0, // TODO: Do we want this required?
|
51 |
+
'lines-around-comment': [
|
52 |
+
'error',
|
53 |
+
{
|
54 |
+
beforeBlockComment: true,
|
55 |
+
allowBlockStart: true,
|
56 |
+
},
|
57 |
+
],
|
58 |
+
'object-curly-newline': [
|
59 |
+
'error',
|
60 |
+
{
|
61 |
+
ObjectExpression: {
|
62 |
+
consistent: true, multiline: true, minProperties: 3,
|
63 |
+
},
|
64 |
+
ObjectPattern: { consistent: true, multiline: true },
|
65 |
+
ImportDeclaration: { multiline: true, minProperties: 3 },
|
66 |
+
ExportDeclaration: {
|
67 |
+
multiline: true,
|
68 |
+
minProperties: 3,
|
69 |
+
},
|
70 |
+
},
|
71 |
+
],
|
72 |
+
},
|
73 |
+
settings: { react: { version: 'detect' }},
|
74 |
+
}
|
extendify-sdk/.github/workflows/build-and-test.yml
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Build and test
|
2 |
+
on: [push, pull_request]
|
3 |
+
jobs:
|
4 |
+
# TODO: create another job for integration testing that includes Cypress, booting up WPO, etc
|
5 |
+
# Reference wp-cli: https://github.com/wp-cli/wp-cli/blob/master/.github/workflows/testing.yml
|
6 |
+
unit: #-------------------------------------------
|
7 |
+
name: PHP ${{ matrix.php }}
|
8 |
+
runs-on: ubuntu-latest
|
9 |
+
strategy:
|
10 |
+
fail-fast: false
|
11 |
+
matrix:
|
12 |
+
php: ['7.4']
|
13 |
+
steps:
|
14 |
+
- name: Check out source code
|
15 |
+
uses: actions/checkout@v2
|
16 |
+
|
17 |
+
- name: Setup PHP
|
18 |
+
uses: shivammathur/setup-php@v2
|
19 |
+
with:
|
20 |
+
php-version: '${{ matrix.php }}'
|
21 |
+
extensions: mysql, zip
|
22 |
+
coverage: none
|
23 |
+
tools: composer:v1, wp-cli, cs2pr, phpcs
|
24 |
+
|
25 |
+
- name: Get Composer cache directory
|
26 |
+
id: composer-cache
|
27 |
+
run: |
|
28 |
+
echo "::set-output name=dir::$(composer config cache-files-dir)"
|
29 |
+
|
30 |
+
- name: Use Composer cache
|
31 |
+
uses: actions/cache@master
|
32 |
+
with:
|
33 |
+
path: ${{ steps['composer-cache'].outputs.dir }}
|
34 |
+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
35 |
+
restore-keys: |
|
36 |
+
${{ runner.os }}-composer-
|
37 |
+
|
38 |
+
- name: Install dependencies
|
39 |
+
run: composer install --prefer-dist --no-progress --no-suggest
|
40 |
+
|
41 |
+
- name: Install PHPCS
|
42 |
+
run: git clone -b master https://github.com/WordPress/WordPress-Coding-Standards.git ${{ github.workspace }}/wpcs
|
43 |
+
|
44 |
+
- name: PHPCS check
|
45 |
+
run: |
|
46 |
+
phpcs --config-set installed_paths ${{ github.workspace }}/vendor/phpcompatibility/phpcompatibility-wp/PHPCompatibilityWP,${{ github.workspace }}/vendor/phpcompatibility/php-compatibility/PHPCompatibility,${{ github.workspace }}/vendor/phpcompatibility/phpcompatibility-paragonie/PHPCompatibilityParagonieSodiumCompat,${{ github.workspace }}/vendor/phpcompatibility/phpcompatibility-paragonie/PHPCompatibilityParagonieRandomCompat,${{ github.workspace }}/wpcs
|
47 |
+
phpcs -i
|
48 |
+
phpcs -q --report=checkstyle . | cs2pr
|
49 |
+
|
50 |
+
- name: Install NPM packages
|
51 |
+
run: npm ci
|
52 |
+
env:
|
53 |
+
CYPRESS_INSTALL_BINARY: "0"
|
54 |
+
|
55 |
+
- name: Build assets
|
56 |
+
run: npm run build
|
57 |
+
|
58 |
+
- name: Test JavaScript
|
59 |
+
run: npm run test
|
60 |
+
|
61 |
+
- name: Lint JavaScript
|
62 |
+
run: npm run lint
|
extendify-sdk/.github/workflows/build-development-zip.yml
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Build development zip file
|
2 |
+
on: push
|
3 |
+
jobs:
|
4 |
+
build:
|
5 |
+
name: Build test, and zip
|
6 |
+
runs-on: ubuntu-latest
|
7 |
+
strategy:
|
8 |
+
fail-fast: false
|
9 |
+
matrix:
|
10 |
+
php: [8.0]
|
11 |
+
node-version: [14.x]
|
12 |
+
steps:
|
13 |
+
- name: Checkout code
|
14 |
+
uses: actions/checkout@v1
|
15 |
+
|
16 |
+
- name: Setup PHP
|
17 |
+
uses: shivammathur/setup-php@v2
|
18 |
+
with:
|
19 |
+
php-version: '${{ matrix.php }}'
|
20 |
+
tools: composer:v1
|
21 |
+
|
22 |
+
- name: Get Composer cache directory
|
23 |
+
id: composer-cache
|
24 |
+
run: |
|
25 |
+
echo "::set-output name=dir::$(composer config cache-files-dir)"
|
26 |
+
- name: Use Composer cache
|
27 |
+
uses: actions/cache@master
|
28 |
+
with:
|
29 |
+
path: ${{ steps['composer-cache'].outputs.dir }}
|
30 |
+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
31 |
+
restore-keys: |
|
32 |
+
${{ runner.os }}-composer-
|
33 |
+
- name: Build autoloader
|
34 |
+
run: composer install --prefer-dist --no-progress --no-suggest --no-dev
|
35 |
+
|
36 |
+
- name: Using Node version ${{ matrix.node-version }}
|
37 |
+
uses: actions/setup-node@v1
|
38 |
+
with:
|
39 |
+
node-version: ${{ matrix.node-version }}
|
40 |
+
- name: npm install, build, and test
|
41 |
+
run: |
|
42 |
+
npm ci
|
43 |
+
npm run dev
|
44 |
+
touch .devbuild
|
45 |
+
env:
|
46 |
+
CI: true
|
47 |
+
- name: Package
|
48 |
+
uses: actions/upload-artifact@v2
|
49 |
+
with:
|
50 |
+
name: extendify-sdk
|
51 |
+
retention-days: 5
|
52 |
+
path: |
|
53 |
+
${{ github.workspace }}/
|
54 |
+
!${{ github.workspace }}/node_modules/
|
55 |
+
!${{ github.workspace }}/.github/
|
56 |
+
!${{ github.workspace }}/.git/
|
57 |
+
!${{ github.workspace }}/src/
|
58 |
+
!${{ github.workspace }}/.editorconfig
|
59 |
+
!${{ github.workspace }}/.eslintrc.js
|
60 |
+
!${{ github.workspace }}/.eslintignore
|
61 |
+
!${{ github.workspace }}/.gitignore
|
62 |
+
!${{ github.workspace }}/.svgrrc
|
63 |
+
!${{ github.workspace }}/.prettierrc.js
|
64 |
+
!${{ github.workspace }}/.phpcs.xml.dist
|
65 |
+
!${{ github.workspace }}/webpack.config.js
|
66 |
+
!${{ github.workspace }}/composer.json
|
67 |
+
!${{ github.workspace }}/composer.lock
|
68 |
+
!${{ github.workspace }}/package.json
|
69 |
+
!${{ github.workspace }}/package-lock.json
|
70 |
+
!${{ github.workspace }}/readme.md
|
extendify-sdk/.github/workflows/force-production-on-main.yml
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Build production assets
|
2 |
+
on:
|
3 |
+
push:
|
4 |
+
branches:
|
5 |
+
- main
|
6 |
+
jobs:
|
7 |
+
build:
|
8 |
+
name: Build and commit
|
9 |
+
runs-on: ubuntu-latest
|
10 |
+
strategy:
|
11 |
+
fail-fast: false
|
12 |
+
matrix:
|
13 |
+
php: [8.0]
|
14 |
+
node-version: [14.x]
|
15 |
+
steps:
|
16 |
+
- name: Checkout code
|
17 |
+
uses: actions/checkout@v1
|
18 |
+
|
19 |
+
- name: Set up git user
|
20 |
+
run: git config --global user.name extendify
|
21 |
+
- name: Set up git email
|
22 |
+
run: git config --global user.name extendify@users.noreply.github.com
|
23 |
+
|
24 |
+
- name: Setup PHP
|
25 |
+
uses: shivammathur/setup-php@v2
|
26 |
+
with:
|
27 |
+
php-version: '${{ matrix.php }}'
|
28 |
+
extensions: mysql, zip
|
29 |
+
coverage: none
|
30 |
+
tools: composer:v1, wp-cli, cs2pr, phpcs
|
31 |
+
|
32 |
+
- name: Get Composer cache directory
|
33 |
+
id: composer-cache
|
34 |
+
run: |
|
35 |
+
echo "::set-output name=dir::$(composer config cache-files-dir)"
|
36 |
+
- name: Use Composer cache
|
37 |
+
uses: actions/cache@master
|
38 |
+
with:
|
39 |
+
path: ${{ steps['composer-cache'].outputs.dir }}
|
40 |
+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
41 |
+
restore-keys: |
|
42 |
+
${{ runner.os }}-composer-
|
43 |
+
- name: Build autoloader
|
44 |
+
run: composer install --prefer-dist --no-progress --no-suggest --no-dev
|
45 |
+
|
46 |
+
- name: Using Node version ${{ matrix.node-version }}
|
47 |
+
uses: actions/setup-node@v1
|
48 |
+
with:
|
49 |
+
node-version: ${{ matrix.node-version }}
|
50 |
+
- name: npm install, build, and test
|
51 |
+
run: |
|
52 |
+
npm ci
|
53 |
+
npm run build
|
54 |
+
env:
|
55 |
+
CI: true
|
56 |
+
- name: Increment version number
|
57 |
+
run: |
|
58 |
+
perl -i -pe 's/(Stable tag: )([\d.]+)$/$1.($2+.1)/e' readme.txt
|
59 |
+
- name: Commit dist folder if needed #it fails if nothing has changed so we allow an error
|
60 |
+
run: git commit -am 'Build produciton assets'
|
61 |
+
continue-on-error: true
|
62 |
+
- name: Push changed files to main
|
63 |
+
uses: ad-m/github-push-action@master
|
64 |
+
with:
|
65 |
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
66 |
+
branch: main
|
extendify-sdk/.phpcs.xml.dist
ADDED
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="extendify-sdk" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">
|
3 |
+
|
4 |
+
<description>WP Plugin checks</description>
|
5 |
+
|
6 |
+
<!-- Exclude the Composer Vendor directory. -->
|
7 |
+
<exclude-pattern>/vendor/*</exclude-pattern>
|
8 |
+
|
9 |
+
<exclude-pattern>/cypress/*</exclude-pattern>
|
10 |
+
<exclude-pattern>/.github/*</exclude-pattern>
|
11 |
+
<exclude-pattern>/tests/*</exclude-pattern>
|
12 |
+
<exclude-pattern>/public/*</exclude-pattern>
|
13 |
+
<exclude-pattern>/wpcs/*</exclude-pattern>
|
14 |
+
|
15 |
+
<!-- Exclude the Node Modules directory. -->
|
16 |
+
<exclude-pattern>/node_modules/*</exclude-pattern>
|
17 |
+
|
18 |
+
<!-- Exclude CSS and Javascript files. -->
|
19 |
+
<exclude-pattern>*.css</exclude-pattern>
|
20 |
+
<exclude-pattern>*.js</exclude-pattern>
|
21 |
+
|
22 |
+
<!-- Include the WordPress-Extra standard. -->
|
23 |
+
<rule ref="WordPress-Extra">
|
24 |
+
<!--
|
25 |
+
We may want a middle ground though. The best way to do this is add the
|
26 |
+
entire ruleset, then rule by rule, remove ones that don't suit a project.
|
27 |
+
We can do this by running `phpcs` with the '-s' flag, which allows us to
|
28 |
+
see the names of the sniffs reporting errors.
|
29 |
+
Once we know the sniff names, we can opt to exclude sniffs which don't
|
30 |
+
suit our project like so.
|
31 |
+
|
32 |
+
The below two examples just show how you can exclude rules.
|
33 |
+
They are not intended as advice about which sniffs to exclude.
|
34 |
+
-->
|
35 |
+
|
36 |
+
<!--
|
37 |
+
<exclude name="WordPress.WhiteSpace.ControlStructureSpacing"/>
|
38 |
+
<exclude name="WordPress.Security.EscapeOutput"/>
|
39 |
+
-->
|
40 |
+
</rule>
|
41 |
+
|
42 |
+
<rule ref="WordPress">
|
43 |
+
<exclude name="WordPress.Files.FileName.NotHyphenatedLowercase" />
|
44 |
+
<exclude name="WordPress.Files.FileName.InvalidClassFileName" />
|
45 |
+
<exclude name="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedNamespaceFound" />
|
46 |
+
<exclude name="WordPress.WhiteSpace.ControlStructureSpacing.NoSpaceAfterOpenParenthesis" />
|
47 |
+
<exclude name="WordPress.WhiteSpace.ControlStructureSpacing.NoSpaceBeforeCloseParenthesis" />
|
48 |
+
<exclude name="WordPress.WhiteSpace.OperatorSpacing.NoSpaceBefore" />
|
49 |
+
<exclude name="WordPress.WhiteSpace.OperatorSpacing.NoSpaceAfter" />
|
50 |
+
<exclude name="WordPress.WhiteSpace.ControlStructureSpacing.ExtraSpaceAfterCloseParenthesis" />
|
51 |
+
<exclude name="WordPress.Arrays.ArrayDeclarationSpacing.NoSpaceAfterArrayOpener" />
|
52 |
+
<exclude name="WordPress.Arrays.ArrayDeclarationSpacing.NoSpaceBeforeArrayCloser" />
|
53 |
+
<exclude name="WordPress.Arrays.MultipleStatementAlignment.DoubleArrowNotAligned" />
|
54 |
+
<exclude name="WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase" />
|
55 |
+
<exclude name="WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid" />
|
56 |
+
<exclude name="WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase" />
|
57 |
+
<exclude name="WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase" />
|
58 |
+
<exclude name="WordPress.Arrays.ArrayKeySpacingRestrictions.NoSpacesAroundArrayKeys" />
|
59 |
+
<exclude name="WordPress.PHP.YodaConditions.NotYoda" />
|
60 |
+
<exclude name="WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid" />
|
61 |
+
<exclude name="WordPress.NamingConventions.ValidVariableName.InterpolatedVariableNotSnakeCase" />
|
62 |
+
</rule>
|
63 |
+
|
64 |
+
<rule ref="Generic">
|
65 |
+
<exclude name="Generic.WhiteSpace.DisallowSpaceIndent.SpacesUsed" />
|
66 |
+
<exclude name="Generic.WhiteSpace.DisallowSpaceIndent.SpacesUsed" />
|
67 |
+
<exclude name="Generic.PHP.ClosingPHPTag.NotFound" />
|
68 |
+
<exclude name="Generic.Files.LowercasedFilename.NotFound" />
|
69 |
+
<exclude name="Generic.Formatting.SpaceAfterNot.Incorrect" />
|
70 |
+
<exclude name="Generic.Classes.OpeningBraceSameLine.BraceOnNewLine" />
|
71 |
+
<exclude name="Generic.Files.EndFileNoNewline.Found" />
|
72 |
+
<exclude name="Generic.Functions.OpeningFunctionBraceKernighanRitchie.BraceOnNewLine" />
|
73 |
+
<exclude name="Generic.Files.LineLength.TooLong" />
|
74 |
+
<exclude name="Generic.Arrays.DisallowShortArraySyntax.Found" />
|
75 |
+
<exclude name="Generic.Commenting.Todo.TaskFound" />
|
76 |
+
<exclude name="Generic.Formatting.NoSpaceAfterCast.SpaceFound" />
|
77 |
+
<exclude name="Generic.Formatting.MultipleStatementAlignment.NotSame" />
|
78 |
+
<exclude name="Generic.PHP.RequireStrictTypes.MissingDeclaration" />
|
79 |
+
<exclude name="Generic.PHP.UpperCaseConstant.Found" />
|
80 |
+
<exclude name="Generic.WhiteSpace.ArbitraryParenthesesSpacing.SpaceBeforeOpen" />
|
81 |
+
<exclude name="Generic.WhiteSpace.ArbitraryParenthesesSpacing.SpaceBeforeClose" />
|
82 |
+
<exclude name="Generic.WhiteSpace.ArbitraryParenthesesSpacing.SpaceAfterOpen" />
|
83 |
+
<exclude name="Generic.WhiteSpace.ArbitraryParenthesesSpacing.SpaceAfterClose" />
|
84 |
+
<exclude name="Generic.PHP.ForbiddenFunctions.Found" />
|
85 |
+
<exclude name="Generic.Files.InlineHTML.Found" />
|
86 |
+
</rule>
|
87 |
+
<rule ref="Squiz">
|
88 |
+
<exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterOpen" />
|
89 |
+
<exclude name="Squiz.ControlStructures.ElseIfDeclaration.NotAllowed" />
|
90 |
+
<exclude name="Squiz.WhiteSpace.FunctionClosingBraceSpace.SpacingBeforeClose" />
|
91 |
+
<exclude name="Squiz.WhiteSpace.FunctionSpacing.AfterLast" />
|
92 |
+
<exclude name="Squiz.Files.FileExtension.ClassFound" />
|
93 |
+
<exclude name="Squiz.Commenting.FileComment.MissingPackageTag" />
|
94 |
+
<exclude name="Squiz.Operators.ComparisonOperatorUsage.NotAllowed" />
|
95 |
+
<exclude name="Squiz.WhiteSpace.FunctionSpacing.BeforeFirst" />
|
96 |
+
<exclude name="Squiz.Operators.ComparisonOperatorUsage.ImplicitTrue" />
|
97 |
+
<exclude name="Squiz.WhiteSpace.FunctionSpacing.After" />
|
98 |
+
<exclude name="Squiz.Arrays.ArrayDeclaration.DoubleArrowNotAligned" />
|
99 |
+
<exclude name="Squiz.WhiteSpace.FunctionSpacing.Before" />
|
100 |
+
<exclude name="Squiz.PHP.DisallowBooleanStatement.Found" />
|
101 |
+
<exclude name="Squiz.ControlStructures.InlineIfDeclaration.NoBrackets" />
|
102 |
+
<exclude name="Squiz.PHP.DisallowInlineIf.Found" />
|
103 |
+
<exclude name="Squiz.PHP.DisallowComparisonAssignment.AssignedComparison" />
|
104 |
+
<exclude name="Squiz.PHP.DiscouragedFunctions.Discouraged" />
|
105 |
+
<exclude name="Squiz.Functions.GlobalFunction.Found" />
|
106 |
+
<exclude name="Squiz.PHP.EmbeddedPhp.ContentBeforeEnd" />
|
107 |
+
</rule>
|
108 |
+
<rule ref="PEAR">
|
109 |
+
<exclude name="PEAR.Functions.FunctionCallSignature.CloseBracketLine" />
|
110 |
+
<exclude name="PEAR.Functions.FunctionCallSignature.SpaceAfterOpenBracket" />
|
111 |
+
<exclude name="PEAR.Functions.FunctionCallSignature.SpaceBeforeCloseBracket" />
|
112 |
+
<exclude name="PEAR.Commenting.FileComment.MissingPackageTag" />
|
113 |
+
<exclude name="PEAR.Commenting.FileComment.MissingAuthorTag" />
|
114 |
+
<exclude name="PEAR.Commenting.FileComment.MissingCategoryTag" />
|
115 |
+
<exclude name="PEAR.Commenting.FileComment.MissingLinkTag" />
|
116 |
+
<exclude name="PEAR.Commenting.FileComment.MissingLicenseTag" />
|
117 |
+
<exclude name="PEAR.Commenting.FileComment.MissingVersion" />
|
118 |
+
<exclude name="PEAR.Commenting.ClassComment.MissingPackageTag" />
|
119 |
+
<exclude name="PEAR.Commenting.ClassComment.MissingAuthorTag" />
|
120 |
+
<exclude name="PEAR.Commenting.ClassComment.MissingCategoryTag" />
|
121 |
+
<exclude name="PEAR.Commenting.ClassComment.MissingLinkTag" />
|
122 |
+
<exclude name="PEAR.Commenting.ClassComment.MissingLicenseTag" />
|
123 |
+
<exclude name="PEAR.Commenting.ClassComment.MissingVersion" />
|
124 |
+
<exclude name="PEAR.NamingConventions.ValidFunctionName.PrivateNoUnderscore" />
|
125 |
+
<exclude name="PEAR.Commenting.FileComment.WrongStyle" />
|
126 |
+
<exclude name="PEAR.Commenting.FileComment.Missing" />
|
127 |
+
<exclude name="PEAR.WhiteSpace.ScopeIndent.IncorrectExact" />
|
128 |
+
</rule>
|
129 |
+
|
130 |
+
<!-- Let's also check that everything is properly documented. -->
|
131 |
+
<rule ref="WordPress-Docs"/>
|
132 |
+
|
133 |
+
<!-- Add in some extra rules from other standards. -->
|
134 |
+
<rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
|
135 |
+
<!-- <rule ref="Generic.Commenting.Todo"/> -->
|
136 |
+
|
137 |
+
<!-- Check for PHP cross-version compatibility. -->
|
138 |
+
<!--
|
139 |
+
To enable this, the PHPCompatibilityWP standard needs
|
140 |
+
to be installed.
|
141 |
+
See the readme for installation instructions:
|
142 |
+
https://github.com/PHPCompatibility/PHPCompatibilityWP
|
143 |
+
For more information, also see:
|
144 |
+
https://github.com/PHPCompatibility/PHPCompatibility
|
145 |
+
-->
|
146 |
+
|
147 |
+
<config name="testVersion" value="5.6-"/>
|
148 |
+
<rule ref="PHPCompatibilityWP"/>
|
149 |
+
|
150 |
+
|
151 |
+
<!--
|
152 |
+
To get the optimal benefits of using WPCS, we should add a couple of
|
153 |
+
custom properties.
|
154 |
+
Adjust the values of these properties to fit our needs.
|
155 |
+
|
156 |
+
For information on additional custom properties available, check out
|
157 |
+
the wiki:
|
158 |
+
https://github.com/WordPress/WordPress-Coding-Standards/wiki/Customizable-sniff-properties
|
159 |
+
-->
|
160 |
+
<config name="minimum_supported_wp_version" value="5.4"/>
|
161 |
+
|
162 |
+
<rule ref="WordPress.WP.I18n">
|
163 |
+
<properties>
|
164 |
+
<property name="text_domain" type="array">
|
165 |
+
<element value="extendify-sdk"/>
|
166 |
+
</property>
|
167 |
+
</properties>
|
168 |
+
</rule>
|
169 |
+
|
170 |
+
<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
|
171 |
+
<properties>
|
172 |
+
<property name="prefixes" type="array">
|
173 |
+
<element value="extendifysdk"/>
|
174 |
+
</property>
|
175 |
+
</properties>
|
176 |
+
</rule>
|
177 |
+
|
178 |
+
|
179 |
+
</ruleset>
|
extendify-sdk/app/Admin.php
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Admin.
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\App;
|
9 |
+
use Extendify\ExtendifySdk\User;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* This class handles any file loading for the admin area.
|
13 |
+
*/
|
14 |
+
class Admin
|
15 |
+
{
|
16 |
+
|
17 |
+
/**
|
18 |
+
* The instance
|
19 |
+
*
|
20 |
+
* @var $instance
|
21 |
+
*/
|
22 |
+
public static $instance = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Adds various actions to set up the page
|
26 |
+
*
|
27 |
+
* @return self|void
|
28 |
+
*/
|
29 |
+
public function __construct()
|
30 |
+
{
|
31 |
+
if (self::$instance) {
|
32 |
+
return self::$instance;
|
33 |
+
}
|
34 |
+
|
35 |
+
self::$instance = $this;
|
36 |
+
$this->loadScripts();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Adds scripts to the admin
|
41 |
+
*
|
42 |
+
* @return void
|
43 |
+
*/
|
44 |
+
public function loadScripts()
|
45 |
+
{
|
46 |
+
\add_action(
|
47 |
+
'admin_enqueue_scripts',
|
48 |
+
function ($hook) {
|
49 |
+
if (!current_user_can(App::$requiredCapability)) {
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
|
53 |
+
if (!$this->checkItsGutenbergPost($hook)) {
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
|
57 |
+
$this->addScopedScriptsAndStyles();
|
58 |
+
}
|
59 |
+
);
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Makes sure we are on the correct page
|
64 |
+
*
|
65 |
+
* @param string $hook - An optional hook provided by WP to identify the page.
|
66 |
+
* @return boolean
|
67 |
+
*/
|
68 |
+
public function checkItsGutenbergPost($hook = '')
|
69 |
+
{
|
70 |
+
if (isset($GLOBALS['typenow']) && \use_block_editor_for_post_type($GLOBALS['typenow'])) {
|
71 |
+
return $hook && in_array($hook, ['post.php', 'post-new.php'], true);
|
72 |
+
}
|
73 |
+
|
74 |
+
return false;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Adds various JS scripts
|
79 |
+
*
|
80 |
+
* @return void
|
81 |
+
*/
|
82 |
+
public function addScopedScriptsAndStyles()
|
83 |
+
{
|
84 |
+
$version = App::$environment === 'PRODUCTION' ? App::$version : uniqid();
|
85 |
+
|
86 |
+
\wp_register_script(
|
87 |
+
App::$slug . '-scripts',
|
88 |
+
EXTENDIFYSDK_BASE_URL . 'public/build/extendify-sdk.js',
|
89 |
+
[
|
90 |
+
'wp-api',
|
91 |
+
'wp-i18n',
|
92 |
+
'wp-components',
|
93 |
+
'wp-element',
|
94 |
+
'wp-editor',
|
95 |
+
],
|
96 |
+
$version,
|
97 |
+
true
|
98 |
+
);
|
99 |
+
\wp_localize_script(
|
100 |
+
App::$slug . '-scripts',
|
101 |
+
'extendifySdkData',
|
102 |
+
[
|
103 |
+
'root' => \esc_url_raw(rest_url(APP::$slug . '/' . APP::$apiVersion)),
|
104 |
+
'nonce' => \wp_create_nonce('wp_rest'),
|
105 |
+
'user' => json_decode(User::data('extendifysdk_user_data'), true),
|
106 |
+
'source' => \esc_attr(APP::$sourcePlugin),
|
107 |
+
]
|
108 |
+
);
|
109 |
+
\wp_enqueue_script(App::$slug . '-scripts');
|
110 |
+
|
111 |
+
\wp_set_script_translations(App::$slug . '-scripts', App::$textDomain);
|
112 |
+
|
113 |
+
\wp_enqueue_style(
|
114 |
+
App::$slug . '-theme',
|
115 |
+
EXTENDIFYSDK_BASE_URL . 'public/build/extendify-sdk.css',
|
116 |
+
[],
|
117 |
+
$version,
|
118 |
+
'all'
|
119 |
+
);
|
120 |
+
}
|
121 |
+
}
|
extendify-sdk/app/ApiRouter.php
ADDED
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* API router
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\App;
|
9 |
+
use Extendify\ExtendifySdk\Http;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Simple router for the REST Endpoints
|
13 |
+
*/
|
14 |
+
class ApiRouter extends \WP_REST_Controller
|
15 |
+
{
|
16 |
+
|
17 |
+
/**
|
18 |
+
* The class instance.
|
19 |
+
*
|
20 |
+
* @var $instance
|
21 |
+
*/
|
22 |
+
protected static $instance = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* The capablity required for access.
|
26 |
+
*
|
27 |
+
* @var $capability
|
28 |
+
*/
|
29 |
+
protected $capability;
|
30 |
+
|
31 |
+
|
32 |
+
/**
|
33 |
+
* The constructor
|
34 |
+
*/
|
35 |
+
public function __construct()
|
36 |
+
{
|
37 |
+
$this->capability = App::$requiredCapability;
|
38 |
+
add_filter(
|
39 |
+
'rest_request_before_callbacks',
|
40 |
+
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
|
41 |
+
function ($response, $handler, $request) {
|
42 |
+
// Add the request to our helper class.
|
43 |
+
if ($request->get_header('x_extendify')) {
|
44 |
+
Http::init($request);
|
45 |
+
}
|
46 |
+
|
47 |
+
return $response;
|
48 |
+
},
|
49 |
+
10,
|
50 |
+
3
|
51 |
+
);
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Check the authorization of the request
|
56 |
+
*
|
57 |
+
* @return boolean
|
58 |
+
*/
|
59 |
+
public function checkPermission()
|
60 |
+
{
|
61 |
+
// Check for the nonce on the server (used by WP REST).
|
62 |
+
if (isset($_SERVER['HTTP_X_WP_NONCE']) && \wp_verify_nonce(sanitize_text_field(wp_unslash($_SERVER['HTTP_X_WP_NONCE'])), 'wp_rest')) {
|
63 |
+
return \current_user_can($this->capability);
|
64 |
+
}
|
65 |
+
|
66 |
+
return false;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Register dynamic routes
|
71 |
+
*
|
72 |
+
* @param string $namespace - The api name space.
|
73 |
+
* @param string $endpoint - The endpoint.
|
74 |
+
* @param function $callback - The callback to run.
|
75 |
+
*
|
76 |
+
* @return void
|
77 |
+
*/
|
78 |
+
public function getHandler($namespace, $endpoint, $callback)
|
79 |
+
{
|
80 |
+
\register_rest_route(
|
81 |
+
$namespace,
|
82 |
+
$endpoint,
|
83 |
+
[
|
84 |
+
'methods' => 'GET',
|
85 |
+
'callback' => $callback,
|
86 |
+
'permission_callback' => [
|
87 |
+
$this,
|
88 |
+
'checkPermission',
|
89 |
+
],
|
90 |
+
]
|
91 |
+
);
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* The post handler
|
96 |
+
*
|
97 |
+
* @param string $namespace - The api name space.
|
98 |
+
* @param string $endpoint - The endpoint.
|
99 |
+
* @param string $callback - The callback to run.
|
100 |
+
*
|
101 |
+
* @return void
|
102 |
+
*/
|
103 |
+
public function postHandler($namespace, $endpoint, $callback)
|
104 |
+
{
|
105 |
+
\register_rest_route(
|
106 |
+
$namespace,
|
107 |
+
$endpoint,
|
108 |
+
[
|
109 |
+
'methods' => 'POST',
|
110 |
+
'callback' => $callback,
|
111 |
+
'permission_callback' => [
|
112 |
+
$this,
|
113 |
+
'checkPermission',
|
114 |
+
],
|
115 |
+
]
|
116 |
+
);
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* The caller
|
121 |
+
*
|
122 |
+
* @param string $name - The name of the method to call.
|
123 |
+
* @param array $arguments - The arguments to pass in.
|
124 |
+
*
|
125 |
+
* @return mixed
|
126 |
+
*/
|
127 |
+
public static function __callStatic($name, array $arguments)
|
128 |
+
{
|
129 |
+
$name = "{$name}Handler";
|
130 |
+
if (is_null(self::$instance)) {
|
131 |
+
self::$instance = new static();
|
132 |
+
}
|
133 |
+
|
134 |
+
$r = self::$instance;
|
135 |
+
return $r->$name(APP::$slug . '/' . APP::$apiVersion, ...$arguments);
|
136 |
+
}
|
137 |
+
}
|
extendify-sdk/app/App.php
ADDED
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* The App details file
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Plugin;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Controller for handling various app data
|
12 |
+
*/
|
13 |
+
class App
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Plugin name
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
public static $name = '';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Plugin slug
|
25 |
+
*
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
public static $slug = '';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Plugin version
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
public static $version = '';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Plugin API REST version
|
39 |
+
*
|
40 |
+
* @var string
|
41 |
+
*/
|
42 |
+
public static $apiVersion = 'v1';
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Plugin text domain
|
46 |
+
*
|
47 |
+
* @var string
|
48 |
+
*/
|
49 |
+
public static $textDomain = '';
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Plugin environment
|
53 |
+
*
|
54 |
+
* @var string
|
55 |
+
*/
|
56 |
+
public static $environment = '';
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Host plugin
|
60 |
+
*
|
61 |
+
* @var string
|
62 |
+
*/
|
63 |
+
public static $sourcePlugin = 'Not set';
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Host plugin
|
67 |
+
*
|
68 |
+
* @var string
|
69 |
+
*/
|
70 |
+
public static $requiredCapability = 'upload_files';
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Plugin config
|
74 |
+
*
|
75 |
+
* @var array
|
76 |
+
*/
|
77 |
+
public static $config = [];
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Process the readme file to get version and name
|
81 |
+
*
|
82 |
+
* @return void
|
83 |
+
*/
|
84 |
+
public function __construct()
|
85 |
+
{
|
86 |
+
if (isset($GLOBALS['extendifySdkSourcePlugin'])) {
|
87 |
+
self::$sourcePlugin = $GLOBALS['extendifySdkSourcePlugin'];
|
88 |
+
}
|
89 |
+
|
90 |
+
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
|
91 |
+
$readme = file_get_contents(dirname(__DIR__) . '/readme.txt');
|
92 |
+
|
93 |
+
preg_match('/=== (.+) ===/', $readme, $matches);
|
94 |
+
self::$name = $matches[1];
|
95 |
+
self::$slug = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', self::$name), '-'));
|
96 |
+
|
97 |
+
preg_match('/Stable tag: ([0-9.:]+)/', $readme, $matches);
|
98 |
+
self::$version = $matches[1];
|
99 |
+
|
100 |
+
// An easy way to check if we are in dev mode is to look for a dev specific file.
|
101 |
+
$isDev = is_readable(EXTENDIFYSDK_PATH . 'node_modules') || is_readable(EXTENDIFYSDK_PATH . '.devbuild');
|
102 |
+
self::$environment = $isDev ? 'DEVELOPMENT' : 'PRODUCTION';
|
103 |
+
|
104 |
+
self::$textDomain = Plugin::getPluginInfo('TextDomain', self::$slug);
|
105 |
+
|
106 |
+
// Add the config.
|
107 |
+
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
|
108 |
+
$config = file_get_contents(dirname(__DIR__) . '/config.json');
|
109 |
+
self::$config = json_decode($config, true);
|
110 |
+
}
|
111 |
+
}
|
extendify-sdk/app/Controllers/AuthController.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls Auth
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Http;
|
9 |
+
|
10 |
+
if (!defined('ABSPATH')) {
|
11 |
+
die('No direct access.');
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The controller for dealing registration and authentication
|
16 |
+
*/
|
17 |
+
class AuthController
|
18 |
+
{
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Login a user to extendify - it will return the API key
|
22 |
+
*
|
23 |
+
* @param \WP_REST_Request $request - The request.
|
24 |
+
* @return WP_REST_Response|WP_Error
|
25 |
+
*/
|
26 |
+
public static function login($request)
|
27 |
+
{
|
28 |
+
$response = Http::post('/login', $request->get_params());
|
29 |
+
return new \WP_REST_Response($response);
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Handle registration - It will return the API key.
|
34 |
+
*
|
35 |
+
* @param \WP_REST_Request $request - The request.
|
36 |
+
* @return WP_REST_Response|WP_Error
|
37 |
+
*/
|
38 |
+
public static function register($request)
|
39 |
+
{
|
40 |
+
$response = Http::post('/register', $request->get_params());
|
41 |
+
return new \WP_REST_Response($response);
|
42 |
+
}
|
43 |
+
}
|
extendify-sdk/app/Controllers/MetaController.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls Http requests
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Http;
|
9 |
+
|
10 |
+
if (!defined('ABSPATH')) {
|
11 |
+
die('No direct access.');
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The controller for sending little bits of info
|
16 |
+
*/
|
17 |
+
class MetaController
|
18 |
+
{
|
19 |
+
/**
|
20 |
+
* Send data about a specific topic
|
21 |
+
*
|
22 |
+
* @param \WP_REST_Request $request - The request.
|
23 |
+
* @return WP_REST_Response|WP_Error
|
24 |
+
*/
|
25 |
+
public static function getAll($request)
|
26 |
+
{
|
27 |
+
$response = Http::get('/meta-data', $request->get_params());
|
28 |
+
return new \WP_REST_Response($response);
|
29 |
+
}
|
30 |
+
}
|
extendify-sdk/app/Controllers/PingController.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls Http requests
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Http;
|
9 |
+
|
10 |
+
if (!defined('ABSPATH')) {
|
11 |
+
die('No direct access.');
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The controller for sending little bits of info
|
16 |
+
*/
|
17 |
+
class PingController
|
18 |
+
{
|
19 |
+
/**
|
20 |
+
* Send data about a specific topic
|
21 |
+
*
|
22 |
+
* @param \WP_REST_Request $request - The request.
|
23 |
+
* @return WP_REST_Response|WP_Error
|
24 |
+
*/
|
25 |
+
public static function ping($request)
|
26 |
+
{
|
27 |
+
$response = Http::post('/ping', $request->get_params());
|
28 |
+
return new \WP_REST_Response($response);
|
29 |
+
}
|
30 |
+
}
|
extendify-sdk/app/Controllers/PluginController.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls Plugins
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Plugin;
|
9 |
+
|
10 |
+
if (!defined('ABSPATH')) {
|
11 |
+
die('No direct access.');
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The controller for plugin dependency checking, etc
|
16 |
+
*/
|
17 |
+
class PluginController
|
18 |
+
{
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Return all plugins
|
22 |
+
*
|
23 |
+
* @return array
|
24 |
+
*/
|
25 |
+
public static function index()
|
26 |
+
{
|
27 |
+
if (! function_exists('get_plugins')) {
|
28 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
29 |
+
}
|
30 |
+
|
31 |
+
return \get_plugins();
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* List active plugins
|
36 |
+
*
|
37 |
+
* @return array
|
38 |
+
*/
|
39 |
+
public static function active()
|
40 |
+
{
|
41 |
+
return \get_option('active_plugins');
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Install plugins
|
46 |
+
*
|
47 |
+
* @param \WP_REST_Request $request - The request.
|
48 |
+
* @return bool
|
49 |
+
*/
|
50 |
+
public static function install($request)
|
51 |
+
{
|
52 |
+
if (!\current_user_can('activate_plugins')) {
|
53 |
+
return new \WP_Error('not_allowed', \__('You are not allowed to activate plugins on this site.', 'extendify-sdk'));
|
54 |
+
}
|
55 |
+
|
56 |
+
$requiredPlugins = json_decode($request->get_param('plugins'), true);
|
57 |
+
|
58 |
+
foreach ($requiredPlugins as $plugin) {
|
59 |
+
$status = Plugin::install_and_activate_plugin($plugin);
|
60 |
+
if (\is_wp_error($status)) {
|
61 |
+
// Return first error encountered.
|
62 |
+
return $status;
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
return true;
|
67 |
+
}
|
68 |
+
}
|
extendify-sdk/app/Controllers/TaxonomyController.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls Taxonomies
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Http;
|
9 |
+
|
10 |
+
if (!defined('ABSPATH')) {
|
11 |
+
die('No direct access.');
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The controller for dealing with taxonomies
|
16 |
+
*/
|
17 |
+
class TaxonomyController
|
18 |
+
{
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Return all taxonomies
|
22 |
+
*
|
23 |
+
* @return WP_REST_Response|WP_Error
|
24 |
+
*/
|
25 |
+
public static function index()
|
26 |
+
{
|
27 |
+
$response = Http::get('/airtable-taxonomies', []);
|
28 |
+
return new \WP_REST_Response($response);
|
29 |
+
}
|
30 |
+
}
|
extendify-sdk/app/Controllers/TemplateController.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls Http requests
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Http;
|
9 |
+
|
10 |
+
if (!defined('ABSPATH')) {
|
11 |
+
die('No direct access.');
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The controller for dealing with templates
|
16 |
+
*/
|
17 |
+
class TemplateController
|
18 |
+
{
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Return info about a template
|
22 |
+
*
|
23 |
+
* @param \WP_REST_Request $request - The request.
|
24 |
+
* @return WP_REST_Response|WP_Error
|
25 |
+
*/
|
26 |
+
public static function index($request)
|
27 |
+
{
|
28 |
+
$response = Http::post('/airtable-data', $request->get_params());
|
29 |
+
return new \WP_REST_Response($response);
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Get related templates
|
34 |
+
*
|
35 |
+
* @param \WP_REST_Request $request - The request.
|
36 |
+
* @return WP_REST_Response|WP_Error
|
37 |
+
*/
|
38 |
+
public static function related($request)
|
39 |
+
{
|
40 |
+
$response = Http::post('/templates/related', $request->get_params());
|
41 |
+
return new \WP_REST_Response($response);
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Send data about a specific template
|
46 |
+
*
|
47 |
+
* @param \WP_REST_Request $request - The request.
|
48 |
+
* @return WP_REST_Response|WP_Error
|
49 |
+
*/
|
50 |
+
public static function ping($request)
|
51 |
+
{
|
52 |
+
$response = Http::post('/airtable-data', $request->get_params());
|
53 |
+
return new \WP_REST_Response($response);
|
54 |
+
}
|
55 |
+
}
|
extendify-sdk/app/Controllers/UserController.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Controls User info
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk\Controllers;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\Http;
|
9 |
+
use Extendify\ExtendifySdk\User;
|
10 |
+
|
11 |
+
if (!defined('ABSPATH')) {
|
12 |
+
die('No direct access.');
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* The controller for managing user data like API keys, etc
|
17 |
+
*/
|
18 |
+
class UserController
|
19 |
+
{
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Return the current user state
|
23 |
+
*
|
24 |
+
* @return array
|
25 |
+
*/
|
26 |
+
public static function show()
|
27 |
+
{
|
28 |
+
return new \WP_REST_Response(User::state());
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Return meta info about the current user
|
33 |
+
*
|
34 |
+
* @param \WP_REST_Request $request - The request.
|
35 |
+
* @return array
|
36 |
+
*/
|
37 |
+
public static function meta($request)
|
38 |
+
{
|
39 |
+
$key = \sanitize_text_field(\wp_unslash($request->get_param('key')));
|
40 |
+
return new \WP_REST_Response(User::data($key));
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Persist the data
|
45 |
+
*
|
46 |
+
* @param \WP_REST_Request $request - The request.
|
47 |
+
* @return array
|
48 |
+
*/
|
49 |
+
public static function store($request)
|
50 |
+
{
|
51 |
+
$userData = json_decode($request->get_param('data'), true);
|
52 |
+
\update_user_meta(\get_current_user_id(), 'extendifysdk_user_data', $userData);
|
53 |
+
|
54 |
+
return new \WP_REST_Response(User::state());
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Sign up the user to the mailing list.
|
59 |
+
*
|
60 |
+
* @param \WP_REST_Request $request - The request.
|
61 |
+
* @return WP_REST_Response|WP_Error
|
62 |
+
*/
|
63 |
+
public static function mailingList($request)
|
64 |
+
{
|
65 |
+
$response = Http::post('/register-mailing-list', $request->get_params());
|
66 |
+
return new \WP_REST_Response($response);
|
67 |
+
}
|
68 |
+
}
|
extendify-sdk/app/Http.php
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Helper class for making http requests
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk;
|
7 |
+
|
8 |
+
use Extendify\ExtendifySdk\App;
|
9 |
+
use Extendify\ExtendifySdk\User;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Controller for http communication
|
13 |
+
*/
|
14 |
+
class Http
|
15 |
+
{
|
16 |
+
|
17 |
+
/**
|
18 |
+
* The api endpoint
|
19 |
+
*
|
20 |
+
* @var string
|
21 |
+
*/
|
22 |
+
public $baseUrl = '';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Request data sent to the server
|
26 |
+
*
|
27 |
+
* @var array
|
28 |
+
*/
|
29 |
+
public $data = [];
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Any headers required
|
33 |
+
*
|
34 |
+
* @var array
|
35 |
+
*/
|
36 |
+
public $headers = [];
|
37 |
+
|
38 |
+
/**
|
39 |
+
* The class instance.
|
40 |
+
*
|
41 |
+
* @var $instance
|
42 |
+
*/
|
43 |
+
protected static $instance = null;
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Set up the base object to send with every request
|
47 |
+
*
|
48 |
+
* @param \WP_REST_Request $request - The request.
|
49 |
+
* @return void
|
50 |
+
*/
|
51 |
+
public function __construct($request)
|
52 |
+
{
|
53 |
+
// Redundant, but extra prodection!
|
54 |
+
if (!\wp_verify_nonce(sanitize_text_field(wp_unslash($request->get_header('x_wp_nonce'))), 'wp_rest')) {
|
55 |
+
return;
|
56 |
+
}
|
57 |
+
|
58 |
+
// Some special cases for development.
|
59 |
+
$this->baseUrl = $request->get_header('x_extendify_dev_mode') !== 'false' ? App::$config['api']['dev'] : App::$config['api']['live'];
|
60 |
+
$this->baseUrl = $request->get_header('x_extendify_local_mode') !== 'false' ? App::$config['api']['local'] : $this->baseUrl;
|
61 |
+
|
62 |
+
$this->data = [
|
63 |
+
'mode' => App::$environment,
|
64 |
+
'uuid' => User::data('uuid'),
|
65 |
+
'sdk_version' => App::$version,
|
66 |
+
'wp_plugins' => $request->get_method() === 'POST' ? array_keys(\get_plugins()) : [],
|
67 |
+
];
|
68 |
+
|
69 |
+
$this->headers = [
|
70 |
+
'Accept' => 'application/json',
|
71 |
+
'referer' => $request->get_header('referer'),
|
72 |
+
'user_agent' => $request->get_header('user_agent'),
|
73 |
+
];
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Register dynamic routes
|
78 |
+
*
|
79 |
+
* @param string $endpoint - The endpoint.
|
80 |
+
* @param array $data - The data to include.
|
81 |
+
* @param array $headers - The headers to include.
|
82 |
+
*
|
83 |
+
* @return array
|
84 |
+
*/
|
85 |
+
public function getHandler($endpoint, $data = [], $headers = [])
|
86 |
+
{
|
87 |
+
$url = \esc_url_raw(
|
88 |
+
\add_query_arg(
|
89 |
+
\urlencode_deep(\urldecode_deep(array_merge($this->data, $data))),
|
90 |
+
$this->baseUrl . $endpoint
|
91 |
+
)
|
92 |
+
);
|
93 |
+
|
94 |
+
$response = \wp_remote_get(
|
95 |
+
$url,
|
96 |
+
[
|
97 |
+
'headers' => array_merge($this->headers, $headers),
|
98 |
+
]
|
99 |
+
);
|
100 |
+
|
101 |
+
$responseBody = \wp_remote_retrieve_body($response);
|
102 |
+
return json_decode($responseBody, true);
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Register dynamic routes
|
107 |
+
*
|
108 |
+
* @param string $endpoint - The endpoint.
|
109 |
+
* @param array $data - The arguments to include.
|
110 |
+
* @param array $headers - The headers to include.
|
111 |
+
*
|
112 |
+
* @return array
|
113 |
+
*/
|
114 |
+
public function postHandler($endpoint, $data = [], $headers = [])
|
115 |
+
{
|
116 |
+
$response = \wp_remote_post(
|
117 |
+
$this->baseUrl . $endpoint,
|
118 |
+
[
|
119 |
+
'headers' => array_merge($this->headers, $headers),
|
120 |
+
'body' => array_merge($this->data, $data),
|
121 |
+
]
|
122 |
+
);
|
123 |
+
|
124 |
+
$responseBody = \wp_remote_retrieve_body($response);
|
125 |
+
return json_decode($responseBody, true);
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* The caller
|
130 |
+
*
|
131 |
+
* @param string $name - The name of the method to call.
|
132 |
+
* @param array $arguments - The arguments to pass in.
|
133 |
+
*
|
134 |
+
* @return mixed
|
135 |
+
*/
|
136 |
+
public static function __callStatic($name, array $arguments)
|
137 |
+
{
|
138 |
+
if ($name === 'init') {
|
139 |
+
self::$instance = new static($arguments[0]);
|
140 |
+
return;
|
141 |
+
}
|
142 |
+
|
143 |
+
$name = "{$name}Handler";
|
144 |
+
$r = self::$instance;
|
145 |
+
|
146 |
+
return $r->$name(...$arguments);
|
147 |
+
}
|
148 |
+
}
|
extendify-sdk/app/Plugin.php
ADDED
@@ -0,0 +1,335 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile
|
3 |
+
// This class was copied from JetPack (mostly)
|
4 |
+
// so will be a bit of work to refactor
|
5 |
+
/**
|
6 |
+
* Manage plugin dependencies
|
7 |
+
*/
|
8 |
+
|
9 |
+
namespace Extendify\ExtendifySdk;
|
10 |
+
|
11 |
+
class Plugin
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* Install and activate a plugin.
|
15 |
+
*
|
16 |
+
* @param string $slug Plugin slug.
|
17 |
+
*
|
18 |
+
* @return bool|WP_Error True if installation succeeded, error object otherwise.
|
19 |
+
*/
|
20 |
+
public static function install_and_activate_plugin($slug)
|
21 |
+
{
|
22 |
+
$plugin_id = self::get_plugin_id_by_slug($slug);
|
23 |
+
if (! $plugin_id) {
|
24 |
+
$installed = self::install_plugin($slug);
|
25 |
+
if (is_wp_error($installed)) {
|
26 |
+
return $installed;
|
27 |
+
}
|
28 |
+
$plugin_id = self::get_plugin_id_by_slug($slug);
|
29 |
+
} elseif (is_plugin_active($plugin_id)) {
|
30 |
+
return true; // Already installed and active.
|
31 |
+
}
|
32 |
+
|
33 |
+
if (! current_user_can('activate_plugins')) {
|
34 |
+
return new \WP_Error('not_allowed', __('You are not allowed to activate plugins on this site.', 'templates_sdk'));
|
35 |
+
}
|
36 |
+
|
37 |
+
$activated = \activate_plugin($plugin_id);
|
38 |
+
if (\is_wp_error($activated)) {
|
39 |
+
return $activated;
|
40 |
+
}
|
41 |
+
|
42 |
+
return true;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Install a plugin.
|
47 |
+
*
|
48 |
+
* @param string $slug Plugin slug.
|
49 |
+
*
|
50 |
+
* @return bool|WP_Error True if installation succeeded, error object otherwise.
|
51 |
+
*/
|
52 |
+
public static function install_plugin($slug)
|
53 |
+
{
|
54 |
+
if (\is_multisite() && !\current_user_can('manage_network')) {
|
55 |
+
return new \WP_Error('not_allowed', __('You are not allowed to install plugins on this site.', 'templates_sdk'));
|
56 |
+
}
|
57 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
58 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
59 |
+
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
60 |
+
require_once ABSPATH . 'wp-admin/includes/file.php';
|
61 |
+
require_once ABSPATH . 'wp-admin/includes/misc.php';
|
62 |
+
$installer = new \Plugin_Upgrader(new Skin());
|
63 |
+
$zip_url = self::generate_wordpress_org_plugin_download_link($slug);
|
64 |
+
|
65 |
+
$result = $installer->install($zip_url);
|
66 |
+
|
67 |
+
if (is_wp_error($result)) {
|
68 |
+
return $result;
|
69 |
+
}
|
70 |
+
|
71 |
+
$plugin = self::get_plugin_id_by_slug($slug);
|
72 |
+
$error_code = 'install_error';
|
73 |
+
if (! $plugin) {
|
74 |
+
$error = __('There was an error installing your plugin', 'templates_sdk');
|
75 |
+
}
|
76 |
+
|
77 |
+
if (! $result) {
|
78 |
+
$error_code = $installer->skin->get_main_error_code();
|
79 |
+
$message = $installer->skin->get_main_error_message();
|
80 |
+
$error = $message ? $message : __('An unknown error occurred during installation', 'templates_sdk');
|
81 |
+
}
|
82 |
+
|
83 |
+
if (! empty($error)) {
|
84 |
+
return new \WP_Error($error_code, $error, 400);
|
85 |
+
}
|
86 |
+
|
87 |
+
return (array) $installer->skin->get_upgrade_messages();
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Get WordPress.org zip download link from a plugin slug
|
92 |
+
*
|
93 |
+
* @param string $plugin_slug Plugin slug.
|
94 |
+
*/
|
95 |
+
protected static function generate_wordpress_org_plugin_download_link($plugin_slug)
|
96 |
+
{
|
97 |
+
return "https://downloads.wordpress.org/plugin/$plugin_slug.latest-stable.zip";
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Get the plugin ID (composed of the plugin slug and the name of the main plugin file) from a plugin slug.
|
102 |
+
*
|
103 |
+
* @param string $slug Plugin slug.
|
104 |
+
*/
|
105 |
+
public static function get_plugin_id_by_slug($slug)
|
106 |
+
{
|
107 |
+
// Check if get_plugins() function exists. This is required on the front end of the
|
108 |
+
// site, since it is in a file that is normally only loaded in the admin.
|
109 |
+
if (! function_exists('get_plugins')) {
|
110 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
111 |
+
}
|
112 |
+
|
113 |
+
/** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
|
114 |
+
$plugins = apply_filters('all_plugins', get_plugins());
|
115 |
+
if (! is_array($plugins)) {
|
116 |
+
return false;
|
117 |
+
}
|
118 |
+
|
119 |
+
foreach ($plugins as $plugin_file => $plugin_data) {
|
120 |
+
if (self::get_slug_from_file_path($plugin_file) === $slug) {
|
121 |
+
return $plugin_file;
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
return false;
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Get the plugin slug from the plugin ID (composed of the plugin slug and the name of the main plugin file)
|
130 |
+
*
|
131 |
+
* @param string $plugin_file Plugin file (ID -- e.g. hello-dolly/hello.php).
|
132 |
+
*/
|
133 |
+
protected static function get_slug_from_file_path($plugin_file)
|
134 |
+
{
|
135 |
+
// Similar to get_plugin_slug() method.
|
136 |
+
$slug = dirname($plugin_file);
|
137 |
+
if ('.' === $slug) {
|
138 |
+
$slug = preg_replace('/(.+)\.php$/', '$1', $plugin_file);
|
139 |
+
}
|
140 |
+
|
141 |
+
return $slug;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Get the activation status for a plugin.
|
146 |
+
*
|
147 |
+
* @since 8.9.0
|
148 |
+
*
|
149 |
+
* @param string $plugin_file The plugin file to check.
|
150 |
+
* @return string Either 'network-active', 'active' or 'inactive'.
|
151 |
+
*/
|
152 |
+
public static function get_plugin_status($plugin_file)
|
153 |
+
{
|
154 |
+
if (is_plugin_active_for_network($plugin_file)) {
|
155 |
+
return 'network-active';
|
156 |
+
}
|
157 |
+
|
158 |
+
if (is_plugin_active($plugin_file)) {
|
159 |
+
return 'active';
|
160 |
+
}
|
161 |
+
|
162 |
+
return 'inactive';
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Returns a list of all plugins in the site.
|
167 |
+
*
|
168 |
+
* @since 8.9.0
|
169 |
+
* @uses get_plugins()
|
170 |
+
*
|
171 |
+
* @return array
|
172 |
+
*/
|
173 |
+
public static function get_plugins()
|
174 |
+
{
|
175 |
+
if (! function_exists('get_plugins')) {
|
176 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
177 |
+
}
|
178 |
+
/** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
|
179 |
+
$plugins = apply_filters('all_plugins', get_plugins());
|
180 |
+
|
181 |
+
if (is_array($plugins) && ! empty($plugins)) {
|
182 |
+
foreach ($plugins as $plugin_slug => $plugin_data) {
|
183 |
+
$plugins[ $plugin_slug ]['active'] = in_array(
|
184 |
+
self::get_plugin_status($plugin_slug),
|
185 |
+
array( 'active', 'network-active' ),
|
186 |
+
true
|
187 |
+
);
|
188 |
+
}
|
189 |
+
return $plugins;
|
190 |
+
}
|
191 |
+
|
192 |
+
return array();
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Will return info about a plugin
|
197 |
+
*
|
198 |
+
* @param string $identifier The key of the plugin info.
|
199 |
+
* @param string $plugin_id The plugin identifier string 'editorplus-sdk.
|
200 |
+
* @return string
|
201 |
+
*/
|
202 |
+
public static function getPluginInfo($identifier, $plugin_id)
|
203 |
+
{
|
204 |
+
if (!function_exists('get_plugins')) {
|
205 |
+
include_once ABSPATH . 'wp-admin/includes/plugin.php';
|
206 |
+
}
|
207 |
+
|
208 |
+
foreach (get_plugins() as $plugin => $data) {
|
209 |
+
if ($data[$identifier] === $plugin_id) {
|
210 |
+
return $plugin;
|
211 |
+
}
|
212 |
+
}
|
213 |
+
|
214 |
+
return false;
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
219 |
+
require_once ABSPATH . 'wp-admin/includes/file.php';
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Allows us to capture that the site doesn't have proper file system access.
|
223 |
+
* In order to update the plugin.
|
224 |
+
*/
|
225 |
+
class Skin extends \Automatic_Upgrader_Skin
|
226 |
+
{
|
227 |
+
/**
|
228 |
+
* Stores the last error key;
|
229 |
+
**/
|
230 |
+
protected $main_error_code = 'install_error';
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Stores the last error message.
|
234 |
+
**/
|
235 |
+
protected $main_error_message = 'An unknown error occurred during installation';
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Overwrites the set_upgrader to be able to tell if we e ven have the ability to write to the files.
|
239 |
+
*
|
240 |
+
* @param WP_Upgrader $upgrader
|
241 |
+
*
|
242 |
+
*/
|
243 |
+
public function set_upgrader(&$upgrader)
|
244 |
+
{
|
245 |
+
parent::set_upgrader($upgrader);
|
246 |
+
|
247 |
+
// Check if we even have permission to.
|
248 |
+
$result = $upgrader->fs_connect(array( WP_CONTENT_DIR, WP_PLUGIN_DIR ));
|
249 |
+
if (! $result) {
|
250 |
+
// set the string here since they are not available just yet
|
251 |
+
$upgrader->generic_strings();
|
252 |
+
$this->feedback('fs_unavailable');
|
253 |
+
}
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Overwrites the error function
|
258 |
+
*/
|
259 |
+
public function error($error)
|
260 |
+
{
|
261 |
+
if (is_wp_error($error)) {
|
262 |
+
$this->feedback($error);
|
263 |
+
}
|
264 |
+
}
|
265 |
+
|
266 |
+
private function set_main_error_code($code)
|
267 |
+
{
|
268 |
+
// Don't set the process_failed as code since it is not that helpful unless we don't have one already set.
|
269 |
+
$this->main_error_code = ($code === 'process_failed' && $this->main_error_code ? $this->main_error_code : $code);
|
270 |
+
}
|
271 |
+
|
272 |
+
private function set_main_error_message($message, $code)
|
273 |
+
{
|
274 |
+
// Don't set the process_failed as message since it is not that helpful unless we don't have one already set.
|
275 |
+
$this->main_error_message = ($code === 'process_failed' && $this->main_error_code ? $this->main_error_code : $message);
|
276 |
+
}
|
277 |
+
|
278 |
+
public function get_main_error_code()
|
279 |
+
{
|
280 |
+
return $this->main_error_code;
|
281 |
+
}
|
282 |
+
|
283 |
+
public function get_main_error_message()
|
284 |
+
{
|
285 |
+
return $this->main_error_message;
|
286 |
+
}
|
287 |
+
|
288 |
+
/**
|
289 |
+
* Overwrites the feedback function
|
290 |
+
*
|
291 |
+
* @param string|array|WP_Error $data Data.
|
292 |
+
* @param mixed ...$args Optional text replacements.
|
293 |
+
*/
|
294 |
+
public function feedback($data, ...$args)
|
295 |
+
{
|
296 |
+
$current_error = null;
|
297 |
+
if (is_wp_error($data)) {
|
298 |
+
$this->set_main_error_code($data->get_error_code());
|
299 |
+
$string = $data->get_error_message();
|
300 |
+
} elseif (is_array($data)) {
|
301 |
+
return;
|
302 |
+
} else {
|
303 |
+
$string = $data;
|
304 |
+
}
|
305 |
+
|
306 |
+
if (! empty($this->upgrader->strings[$string])) {
|
307 |
+
$this->set_main_error_code($string);
|
308 |
+
|
309 |
+
$current_error = $string;
|
310 |
+
$string = $this->upgrader->strings[$string];
|
311 |
+
}
|
312 |
+
|
313 |
+
if (strpos($string, '%') !== false) {
|
314 |
+
if (! empty($args)) {
|
315 |
+
$string = vsprintf($string, $args);
|
316 |
+
}
|
317 |
+
}
|
318 |
+
|
319 |
+
$string = trim($string);
|
320 |
+
$string = wp_kses(
|
321 |
+
$string,
|
322 |
+
array(
|
323 |
+
'a' => array(
|
324 |
+
'href' => true
|
325 |
+
),
|
326 |
+
'br' => true,
|
327 |
+
'em' => true,
|
328 |
+
'strong' => true,
|
329 |
+
)
|
330 |
+
);
|
331 |
+
|
332 |
+
$this->set_main_error_message($string, $current_error);
|
333 |
+
$this->messages[] = $string;
|
334 |
+
}
|
335 |
+
}
|
extendify-sdk/app/User.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Helper class for interacting with the user
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace Extendify\ExtendifySdk;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Helper class for interacting with the user
|
10 |
+
*/
|
11 |
+
class User
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* User unique, anonymous identifier
|
16 |
+
*
|
17 |
+
* @var string
|
18 |
+
*/
|
19 |
+
public $uuid = '';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* A WP user
|
23 |
+
*
|
24 |
+
* @var \WP_User
|
25 |
+
*/
|
26 |
+
protected $user = null;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* The DB key for scoping
|
30 |
+
*
|
31 |
+
* @var string
|
32 |
+
*/
|
33 |
+
protected $key = 'extendifysdk_';
|
34 |
+
|
35 |
+
/**
|
36 |
+
* The class instance.
|
37 |
+
*
|
38 |
+
* @var $instance
|
39 |
+
*/
|
40 |
+
protected static $instance = null;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Set up the user
|
44 |
+
*
|
45 |
+
* @param WP_User $user - A WP User object.
|
46 |
+
* @return void
|
47 |
+
*/
|
48 |
+
public function __construct($user)
|
49 |
+
{
|
50 |
+
$this->user = $user;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Return the user ID
|
55 |
+
*
|
56 |
+
* @return void
|
57 |
+
*/
|
58 |
+
private function setupUuid()
|
59 |
+
{
|
60 |
+
$uuid = \get_user_meta($this->user->ID, $this->key . 'uuid', true);
|
61 |
+
if (!$uuid) {
|
62 |
+
$id = \wp_hash(\wp_json_encode($this->user));
|
63 |
+
\update_user_meta($this->user->ID, $this->key . 'uuid', $id);
|
64 |
+
}
|
65 |
+
|
66 |
+
$this->uuid = $uuid;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Returns data about the user
|
71 |
+
* Use it like User::data('ID') to get the user id
|
72 |
+
*
|
73 |
+
* @param string $arguments - Right now a string of arguments, like ID.
|
74 |
+
* @return mixed - Data about the user.
|
75 |
+
*/
|
76 |
+
private function dataHandler($arguments)
|
77 |
+
{
|
78 |
+
// Right now assume a single argument, but could expand to multiple.
|
79 |
+
if (isset($this->user->$arguments)) {
|
80 |
+
return $this->user->$arguments;
|
81 |
+
}
|
82 |
+
|
83 |
+
return \get_user_meta($this->user->ID, $this->key . $arguments, true);
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Returns the application state for he current user
|
88 |
+
* Use it like User::data('ID') to get the user id
|
89 |
+
*
|
90 |
+
* @return string - JSON representation of the current state
|
91 |
+
*/
|
92 |
+
private function stateHandler()
|
93 |
+
{
|
94 |
+
$state = \get_user_meta($this->user->ID, $this->key . 'user_data');
|
95 |
+
|
96 |
+
// Add some state boilerplate code for the first load.
|
97 |
+
if (!isset($state[0])) {
|
98 |
+
$state[0] = '{}';
|
99 |
+
}
|
100 |
+
|
101 |
+
$userData = json_decode($state[0], true);
|
102 |
+
if (!isset($userData['version'])) {
|
103 |
+
$userData['version'] = 0;
|
104 |
+
}
|
105 |
+
|
106 |
+
// Get the current default number of imports allowed.
|
107 |
+
if (!isset($userData['state']['allowedImports'])) {
|
108 |
+
$currentImports = Http::get('/max-free-imports');
|
109 |
+
$userData['state']['allowedImports'] = is_numeric($currentImports) && $currentImports > 0 ? $currentImports : 3;
|
110 |
+
}
|
111 |
+
|
112 |
+
$userData['state']['uuid'] = self::data('uuid');
|
113 |
+
$userData['state']['canInstallPlugins'] = \current_user_can('install_plugins');
|
114 |
+
$userData['state']['canActivatePlugins'] = \current_user_can('activate_plugins');
|
115 |
+
|
116 |
+
return \wp_json_encode($userData);
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Allows to dynamically setup the user with uuid
|
121 |
+
* Use it like User::data('ID') to get the user id
|
122 |
+
*
|
123 |
+
* @param string $name - The name of the method to call.
|
124 |
+
* @param array $arguments - The arguments to pass in.
|
125 |
+
*
|
126 |
+
* @return mixed
|
127 |
+
*/
|
128 |
+
public static function __callStatic($name, array $arguments)
|
129 |
+
{
|
130 |
+
$name = "{$name}Handler";
|
131 |
+
if (is_null(self::$instance)) {
|
132 |
+
require_once ABSPATH . 'wp-includes/pluggable.php';
|
133 |
+
self::$instance = new static(\wp_get_current_user());
|
134 |
+
$r = self::$instance;
|
135 |
+
$r->setupUuid();
|
136 |
+
}
|
137 |
+
|
138 |
+
$r = self::$instance;
|
139 |
+
return $r->$name(...$arguments);
|
140 |
+
}
|
141 |
+
}
|
extendify-sdk/bootstrap.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Bootstrap the application
|
4 |
+
*/
|
5 |
+
|
6 |
+
use Extendify\ExtendifySdk\Admin;
|
7 |
+
|
8 |
+
if (!defined('ABSPATH')) {
|
9 |
+
die('No direct access.');
|
10 |
+
}
|
11 |
+
|
12 |
+
if (!defined('EXTENDIFYSDK_PATH')) {
|
13 |
+
define('EXTENDIFYSDK_PATH', \plugin_dir_path(__FILE__));
|
14 |
+
}
|
15 |
+
|
16 |
+
if (is_readable(EXTENDIFYSDK_PATH . 'vendor/autoload.php')) {
|
17 |
+
require EXTENDIFYSDK_PATH . 'vendor/autoload.php';
|
18 |
+
}
|
19 |
+
|
20 |
+
$extendifysdkAdmin = new Admin();
|
21 |
+
|
22 |
+
require EXTENDIFYSDK_PATH . 'routes/api.php';
|
23 |
+
require EXTENDIFYSDK_PATH . 'editorplus/EditorPlus.php';
|
24 |
+
|
25 |
+
\add_action(
|
26 |
+
'init',
|
27 |
+
function () {
|
28 |
+
// Hard-coded to run only within Editor Plus for now.
|
29 |
+
if (isset($GLOBALS['extendifySdkSourcePlugin']) && in_array($GLOBALS['extendifySdkSourcePlugin'], ['Editor Plus'], true)) {
|
30 |
+
require EXTENDIFYSDK_PATH . 'support/notices.php';
|
31 |
+
}
|
32 |
+
|
33 |
+
\load_plugin_textdomain('extendify-sdk', false, EXTENDIFYSDK_PATH . 'languages');
|
34 |
+
}
|
35 |
+
);
|
extendify-sdk/config.json
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"api": {
|
3 |
+
"live": "https://dashboard.extendify.com/api",
|
4 |
+
"dev": "https://testing.extendify.com/api",
|
5 |
+
"local": "http://templates.test/api"
|
6 |
+
}
|
7 |
+
}
|
extendify-sdk/editorplus/EditorPlus.php
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles editor related changes.
|
4 |
+
* Loaded (or not) in /bootstrap.php
|
5 |
+
*/
|
6 |
+
|
7 |
+
if (!class_exists('edpl__EditorPlus')) {
|
8 |
+
// phpcs:ignore Squiz.Classes.ClassFileName.NoMatch,Squiz.Commenting.ClassComment.Missing,PEAR.Commenting.ClassComment.Missing
|
9 |
+
final class ExtendifySdkEditorPlus
|
10 |
+
{
|
11 |
+
|
12 |
+
/**
|
13 |
+
* A reference to an instance of this class.
|
14 |
+
*
|
15 |
+
* @var $instance
|
16 |
+
*/
|
17 |
+
public static $instance;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The array of templates that this plugin tracks.
|
21 |
+
*
|
22 |
+
* @var array $templates
|
23 |
+
*/
|
24 |
+
protected $templates;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Returns an instance of this class.
|
28 |
+
*
|
29 |
+
* @return self
|
30 |
+
*/
|
31 |
+
public static function getInstance()
|
32 |
+
{
|
33 |
+
if (!current_user_can('install_plugins')) {
|
34 |
+
return;
|
35 |
+
}
|
36 |
+
|
37 |
+
if (is_null(self::$instance)) {
|
38 |
+
self::$instance = new ExtendifySdkEditorPlus();
|
39 |
+
}
|
40 |
+
|
41 |
+
return self::$instance;
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Initializes the plugin by setting filters and administration functions.
|
46 |
+
*/
|
47 |
+
public function __construct()
|
48 |
+
{
|
49 |
+
if ($this->isSupported()) {
|
50 |
+
$this->templates = [];
|
51 |
+
|
52 |
+
\add_action(
|
53 |
+
'admin_enqueue_scripts',
|
54 |
+
function () {
|
55 |
+
// phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NoExplicitVersion
|
56 |
+
\wp_enqueue_script(
|
57 |
+
'extendifysdk-editorplus-scripts',
|
58 |
+
EXTENDIFYSDK_BASE_URL . 'public/editorplus/editorplus.min.js',
|
59 |
+
[],
|
60 |
+
false,
|
61 |
+
true
|
62 |
+
);
|
63 |
+
}
|
64 |
+
);
|
65 |
+
|
66 |
+
add_action('wp_head', [$this, 'enqueueStylesheet']);
|
67 |
+
|
68 |
+
add_filter(
|
69 |
+
'theme_page_templates',
|
70 |
+
[
|
71 |
+
$this,
|
72 |
+
'addNewTemplate',
|
73 |
+
]
|
74 |
+
);
|
75 |
+
|
76 |
+
// Add a filter to the save post to inject out template into the page cache.
|
77 |
+
add_filter(
|
78 |
+
'wp_insert_post_data',
|
79 |
+
[
|
80 |
+
$this,
|
81 |
+
'registerProjectTemplates',
|
82 |
+
]
|
83 |
+
);
|
84 |
+
// Add a filter to the template include to determine if the page has our template assigned and return it's path.
|
85 |
+
add_filter(
|
86 |
+
'template_include',
|
87 |
+
[
|
88 |
+
$this,
|
89 |
+
'viewProjectTemplate',
|
90 |
+
]
|
91 |
+
);
|
92 |
+
|
93 |
+
$this->templates = ['editorplus-template.php' => 'Extendify Template'];
|
94 |
+
add_filter(
|
95 |
+
'body_class',
|
96 |
+
function ($classes) {
|
97 |
+
$classes[] = 'eplus_styles';
|
98 |
+
return $classes;
|
99 |
+
}
|
100 |
+
);
|
101 |
+
|
102 |
+
// Registering meta data to store editorplus generated stylesheet of template.
|
103 |
+
$postTypes = get_post_types(['_builtin' => false], 'names', 'and');
|
104 |
+
$postTypes['post'] = 'post';
|
105 |
+
foreach ($postTypes as $postType) {
|
106 |
+
register_meta(
|
107 |
+
$postType,
|
108 |
+
'extendify_custom_stylesheet',
|
109 |
+
[
|
110 |
+
'show_in_rest' => true,
|
111 |
+
'single' => true,
|
112 |
+
'type' => 'string',
|
113 |
+
'default' => '',
|
114 |
+
]
|
115 |
+
);
|
116 |
+
}
|
117 |
+
}//end if
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Used to echo out page template stylesheet if the page template is not active.
|
122 |
+
*
|
123 |
+
* @return void
|
124 |
+
*/
|
125 |
+
public function enqueueStylesheet()
|
126 |
+
{
|
127 |
+
if (!isset($GLOBALS['post']) || !$GLOBALS['post']) {
|
128 |
+
return;
|
129 |
+
}
|
130 |
+
|
131 |
+
$post = $GLOBALS['post'];
|
132 |
+
$cssContent = apply_filters(
|
133 |
+
'extendifysdk_template_css',
|
134 |
+
get_post_meta($post->ID, 'extendify_custom_stylesheet', true),
|
135 |
+
$post
|
136 |
+
);
|
137 |
+
|
138 |
+
// Note that esc_html() cannot be used because `div > span` is not interpreted properly.
|
139 |
+
// See: https://github.com/WordPress/WordPress/blob/ccdb1766aead26d4cef79badb015bb2727fefd59/wp-includes/theme.php#L1824-L1833 for reference.
|
140 |
+
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
141 |
+
echo "<style id='extendify-custom-stylesheet' type='text/css'>" . wp_strip_all_tags($cssContent) . '</style>';
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Will check if page templates are supported in the installed wp version.
|
146 |
+
*
|
147 |
+
* @return bool
|
148 |
+
*/
|
149 |
+
public function isSupported()
|
150 |
+
{
|
151 |
+
return version_compare(floatval(get_bloginfo('version')), '4.7', '>');
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Adds our template to the page dropdown for v4.7+
|
156 |
+
*
|
157 |
+
* @param array $postsTemplates - Array of page templates.
|
158 |
+
* @return array
|
159 |
+
*/
|
160 |
+
public function addNewTemplate($postsTemplates)
|
161 |
+
{
|
162 |
+
return array_merge($postsTemplates, $this->templates);
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Adds our template to the pages cache in order to trick WordPress,
|
167 |
+
* into thinking the template file exists where it doens't really exist.
|
168 |
+
*
|
169 |
+
* @param array $attributes - The attributes.
|
170 |
+
* @return array
|
171 |
+
*/
|
172 |
+
public function registerProjectTemplates($attributes)
|
173 |
+
{
|
174 |
+
// Create the key used for the themes cache.
|
175 |
+
$cacheKey = 'page_templates-' . \wp_hash(get_theme_root() . '/' . get_stylesheet());
|
176 |
+
// Retrieve the cache list.
|
177 |
+
// If it doesn't exist, or it's empty prepare an array.
|
178 |
+
$templates = wp_get_theme()->get_page_templates();
|
179 |
+
if (empty($templates)) {
|
180 |
+
$templates = [];
|
181 |
+
}
|
182 |
+
|
183 |
+
// New cache, therefore remove the old one.
|
184 |
+
wp_cache_delete($cacheKey, 'themes');
|
185 |
+
// Now add our template to the list of templates by merging our templates.
|
186 |
+
// with the existing templates array from the cache.
|
187 |
+
$templates = array_merge($templates, $this->templates);
|
188 |
+
// Add the modified cache to allow WordPress to pick it up for listing available templates.
|
189 |
+
wp_cache_add($cacheKey, $templates, 'themes', 1800);
|
190 |
+
return $attributes;
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Checks if the template is assigned to the page.
|
195 |
+
*
|
196 |
+
* @param string $template - The template.
|
197 |
+
* @return string
|
198 |
+
*/
|
199 |
+
public function viewProjectTemplate($template)
|
200 |
+
{
|
201 |
+
$post = $GLOBALS['post'];
|
202 |
+
if (!$post) {
|
203 |
+
return $template;
|
204 |
+
}
|
205 |
+
|
206 |
+
$currentTemplate = get_post_meta($post->ID, '_wp_page_template', true);
|
207 |
+
|
208 |
+
// Check that the set template is one we have defined.
|
209 |
+
if (!is_string($currentTemplate) || !array_key_exists($currentTemplate, $this->templates)) {
|
210 |
+
return $template;
|
211 |
+
}
|
212 |
+
|
213 |
+
$file = plugin_dir_path(__FILE__) . $currentTemplate;
|
214 |
+
if (!file_exists($file)) {
|
215 |
+
return $template;
|
216 |
+
}
|
217 |
+
|
218 |
+
return $file;
|
219 |
+
}
|
220 |
+
// phpcs:ignore Squiz.Classes.ClassDeclaration.SpaceBeforeCloseBrace
|
221 |
+
}
|
222 |
+
|
223 |
+
add_action('after_setup_theme', ['ExtendifySdkEditorPlus', 'getInstance']);
|
224 |
+
}//end if
|
extendify-sdk/editorplus/editorplus-template.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Template Name: Extendify Template
|
4 |
+
* Template Post Type: post, page
|
5 |
+
*/
|
6 |
+
|
7 |
+
$extendifysdkCustomStyles = get_post_meta(
|
8 |
+
isset($GLOBALS['post']) ? $GLOBALS['post']->ID : 0,
|
9 |
+
'extendify_custom_stylesheet',
|
10 |
+
true
|
11 |
+
);
|
12 |
+
|
13 |
+
?>
|
14 |
+
<?php wp_head(); ?>
|
15 |
+
<body <?php body_class(); ?>>
|
16 |
+
<div class="ep-temp-container ep-container">
|
17 |
+
|
18 |
+
<div class="ep-temp-entry-content">
|
19 |
+
<?php
|
20 |
+
if (have_posts()) {
|
21 |
+
while (have_posts()) {
|
22 |
+
the_post();
|
23 |
+
the_content();
|
24 |
+
}
|
25 |
+
}
|
26 |
+
?>
|
27 |
+
|
28 |
+
</div>
|
29 |
+
|
30 |
+
|
31 |
+
</div><!-- #site-content -->
|
32 |
+
<style>
|
33 |
+
.ep-temp-container {
|
34 |
+
margin-left: auto;
|
35 |
+
margin-right: auto;
|
36 |
+
min-width: 1280px;
|
37 |
+
}
|
38 |
+
.ep-temp-container .alignfull {
|
39 |
+
min-width: 1280px !important;
|
40 |
+
}
|
41 |
+
@media(min-width: 700px) {
|
42 |
+
.ep-temp-container [class*=extendify-] [class*=wp-block] > * {
|
43 |
+
margin-top: 0px;
|
44 |
+
}
|
45 |
+
.ep-temp-container [class*=wp-block] > * .wp-block-button__link {
|
46 |
+
border-radius: 0px !important;
|
47 |
+
}
|
48 |
+
.ep-temp-container .wp-block-image:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.aligncenter) {
|
49 |
+
margin-top:0px;
|
50 |
+
}
|
51 |
+
body {background-color: #fff;}
|
52 |
+
html, body {
|
53 |
+
font-size: 16px !important;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
</style>
|
57 |
+
</body>
|
58 |
+
|
59 |
+
<?php
|
60 |
+
wp_footer();
|
extendify-sdk/editorplus/editorplus.js
ADDED
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { select, dispatch } from '@wordpress/data'
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Will check if the given CSSRule contains malicious 3rd party URL to secure against XSS
|
5 |
+
* @param {CSSRule} rule
|
6 |
+
* @return {boolean} isMalicious
|
7 |
+
*/
|
8 |
+
|
9 |
+
function _hasMaliciousURL(rule) {
|
10 |
+
|
11 |
+
let isMalicious = false
|
12 |
+
|
13 |
+
if (!(rule instanceof CSSRule)) return false
|
14 |
+
|
15 |
+
// only allowing airtable API origin
|
16 |
+
let allowedOrigins = [ 'https://dl.airtable.com' ]
|
17 |
+
|
18 |
+
let urlRegex = /[(http(s)?)://(www.)?a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g
|
19 |
+
|
20 |
+
let matchedURLS = rule.cssText.match(urlRegex) ?? []
|
21 |
+
|
22 |
+
for (const requestURL of matchedURLS) {
|
23 |
+
|
24 |
+
try {
|
25 |
+
let parsedURL = new URL(requestURL)
|
26 |
+
let isNotAllowed = !allowedOrigins.includes(parsedURL.origin)
|
27 |
+
|
28 |
+
if (isNotAllowed) {
|
29 |
+
isMalicious = true
|
30 |
+
break
|
31 |
+
}
|
32 |
+
} catch (e) {
|
33 |
+
|
34 |
+
// verifying if the regex matched a URL, because regex can mess up due to URL in between other strings
|
35 |
+
let isUrl = ['https://', 'http://', '.com'].some(urlPart => requestURL.indexOf(urlPart) !== -1)
|
36 |
+
let isVerifiedOrigin = requestURL.indexOf(allowedOrigins[0]) !== -1
|
37 |
+
|
38 |
+
if (isUrl && !isVerifiedOrigin) {
|
39 |
+
isMalicious = true
|
40 |
+
break
|
41 |
+
}
|
42 |
+
|
43 |
+
}
|
44 |
+
|
45 |
+
}
|
46 |
+
|
47 |
+
return isMalicious
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Will inject the given css as an stylesheet in the editor
|
52 |
+
* @param {string} css
|
53 |
+
* @return {void}
|
54 |
+
*/
|
55 |
+
|
56 |
+
function injectStyleSheetInEditor(css = window.wp.data.select('core/editor').getEditedPostAttribute('meta')?.extendify_custom_stylesheet ?? '') {
|
57 |
+
if (typeof css !== 'string') return
|
58 |
+
|
59 |
+
css = css.replace(/(.eplus_styles)/g, '')
|
60 |
+
|
61 |
+
let extendifyRoot = document.querySelector('#extendify-root')
|
62 |
+
let styleID = 'extendify-custom-stylesheet'
|
63 |
+
|
64 |
+
if (document.getElementById(styleID)) {
|
65 |
+
// stylesheet already exists
|
66 |
+
document.getElementById(styleID).innerHTML = css
|
67 |
+
} else {
|
68 |
+
let styleElement = document.createElement('style')
|
69 |
+
|
70 |
+
styleElement.id = styleID
|
71 |
+
styleElement.type = 'text/css'
|
72 |
+
|
73 |
+
styleElement.appendChild(document.createTextNode(css))
|
74 |
+
extendifyRoot.appendChild(styleElement)
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Will provide filtered css from the given sheet
|
80 |
+
* @param {CSSStyleSheet} sheet
|
81 |
+
* @param {string[]} prefix
|
82 |
+
* @return {string} css - filtered css
|
83 |
+
*/
|
84 |
+
|
85 |
+
function filterStylesheetWithPrefix(sheet, allowedPrefixes) {
|
86 |
+
let filteredCSS = ''
|
87 |
+
|
88 |
+
let isPrefixed = selector => {
|
89 |
+
return allowedPrefixes.some(allowedPrefix => selector.startsWith(allowedPrefix))
|
90 |
+
}
|
91 |
+
|
92 |
+
for (const rule of sheet?.cssRules ?? []) {
|
93 |
+
// if it's a media rule we need to also process the nested rule list
|
94 |
+
if (rule instanceof CSSMediaRule) {
|
95 |
+
|
96 |
+
if (_hasMaliciousURL(rule)) continue
|
97 |
+
|
98 |
+
let processedMediaRule = rule?.cssRules ?? []
|
99 |
+
let rulesToDelete = [] // because deleting them in the loop can disturb the index
|
100 |
+
|
101 |
+
for (const mediaRuleIndex of Object.keys(processedMediaRule)) {
|
102 |
+
let mediaRule = mediaRuleIndex in processedMediaRule
|
103 |
+
? processedMediaRule[mediaRuleIndex]
|
104 |
+
: {}
|
105 |
+
|
106 |
+
if (!isPrefixed(mediaRule.selectorText)) {
|
107 |
+
rulesToDelete.push(mediaRuleIndex)
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
for (const mediaRuleIndexToDelete of rulesToDelete) {
|
112 |
+
rule.deleteRule(mediaRuleIndexToDelete)
|
113 |
+
}
|
114 |
+
|
115 |
+
filteredCSS += rule.cssText
|
116 |
+
}
|
117 |
+
|
118 |
+
if (rule instanceof CSSStyleRule) {
|
119 |
+
if (_hasMaliciousURL(rule)) continue
|
120 |
+
|
121 |
+
filteredCSS += isPrefixed(rule.selectorText)
|
122 |
+
? rule.cssText
|
123 |
+
: ''
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
return filteredCSS
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Listener to enable page template
|
132 |
+
*/
|
133 |
+
window._wpLoadBlockEditor && window.addEventListener('extendify-sdk::template-inserted', (event) => {
|
134 |
+
const { template } = event.detail
|
135 |
+
const wpTemplateName = 'editorplus-template.php'
|
136 |
+
|
137 |
+
// check if the instruction has command to enable page
|
138 |
+
if (!template?.fields?.instructions?.includes('enable_page_template')) {
|
139 |
+
return
|
140 |
+
}
|
141 |
+
|
142 |
+
// Get a list of templates from the editor
|
143 |
+
const selector = select('core/editor')
|
144 |
+
const availablePageTemplates = selector.getEditorSettings()?.availableTemplates ?? {}
|
145 |
+
if (!Object.keys(availablePageTemplates).includes(wpTemplateName)) {
|
146 |
+
return
|
147 |
+
}
|
148 |
+
|
149 |
+
// Finally, set the template
|
150 |
+
dispatch('core/editor').editPost({
|
151 |
+
template: wpTemplateName,
|
152 |
+
})
|
153 |
+
})
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Listener to inject stylesheet
|
157 |
+
*/
|
158 |
+
window._wpLoadBlockEditor && window.addEventListener('extendify-sdk::template-inserted', async (event) => {
|
159 |
+
|
160 |
+
// TODO: use better approach which does not use require additional network request
|
161 |
+
|
162 |
+
const { template } = event.detail
|
163 |
+
const stylesheetURL = template?.fields?.stylesheet ?? ''
|
164 |
+
|
165 |
+
if (!stylesheetURL) {
|
166 |
+
return
|
167 |
+
}
|
168 |
+
|
169 |
+
try {
|
170 |
+
let generatedCSS = await (await fetch(stylesheetURL)).text()
|
171 |
+
let appendedCSS = select('core/editor').getEditedPostAttribute('meta')?.extendify_custom_stylesheet ?? ''
|
172 |
+
|
173 |
+
let createdStyleElement = document.createElement('style')
|
174 |
+
let createdStyleID = 'extendify-stylesheet'
|
175 |
+
|
176 |
+
// webkit hack: appending stylesheet to let DOM process rules
|
177 |
+
|
178 |
+
createdStyleElement.id = createdStyleID
|
179 |
+
createdStyleElement.type = 'text/css'
|
180 |
+
createdStyleElement.appendChild(document.createTextNode(generatedCSS))
|
181 |
+
|
182 |
+
document.querySelector('#extendify-root').appendChild(createdStyleElement)
|
183 |
+
|
184 |
+
let processedStyleSheet = document.getElementById(createdStyleID)
|
185 |
+
|
186 |
+
// disabling the stylesheet
|
187 |
+
processedStyleSheet.sheet.disable = true
|
188 |
+
|
189 |
+
// accessing processed CSSStyleSheet
|
190 |
+
let filteredCSS = filterStylesheetWithPrefix(processedStyleSheet?.sheet, ['.extendify-', '.eplus_styles', '.eplus-', '[class*="extendify-"]', '[class*="extendify"]'])
|
191 |
+
|
192 |
+
// merging existing styles
|
193 |
+
filteredCSS += appendedCSS
|
194 |
+
|
195 |
+
// deleting the generated stylesheet
|
196 |
+
processedStyleSheet.parentNode.removeChild(processedStyleSheet)
|
197 |
+
|
198 |
+
// injecting the stylesheet to style the editor view
|
199 |
+
injectStyleSheetInEditor(filteredCSS)
|
200 |
+
|
201 |
+
// finally, updating the metadata
|
202 |
+
await dispatch('core/editor').editPost({
|
203 |
+
meta: {
|
204 |
+
extendify_custom_stylesheet: filteredCSS,
|
205 |
+
},
|
206 |
+
})
|
207 |
+
|
208 |
+
} catch (error) {
|
209 |
+
console.error(error)
|
210 |
+
}
|
211 |
+
})
|
212 |
+
|
213 |
+
// loading stylesheet in the editor after page load
|
214 |
+
window._wpLoadBlockEditor && window.wp.domReady(() => {
|
215 |
+
setTimeout(() => injectStyleSheetInEditor(), 0)
|
216 |
+
})
|
217 |
+
|
218 |
+
// Quick method to hide the title if the template is active
|
219 |
+
let extendifyCurrentPageTemplate
|
220 |
+
window._wpLoadBlockEditor && window.wp.data.subscribe(() => {
|
221 |
+
// Nothing changed
|
222 |
+
if (extendifyCurrentPageTemplate && extendifyCurrentPageTemplate === window.wp.data.select('core/editor').getEditedPostAttribute('template')) {
|
223 |
+
return
|
224 |
+
}
|
225 |
+
const epTemplateSelected = window.wp.data.select('core/editor').getEditedPostAttribute('template') === 'editorplus-template.php'
|
226 |
+
const title = document.querySelector('.edit-post-visual-editor__post-title-wrapper')
|
227 |
+
const wrapper = document.querySelector('.editor-styles-wrapper')
|
228 |
+
|
229 |
+
// Too early
|
230 |
+
if (!title || !wrapper) {
|
231 |
+
return
|
232 |
+
}
|
233 |
+
|
234 |
+
if (epTemplateSelected) {
|
235 |
+
// GB needs to compute the height first
|
236 |
+
Promise.resolve().then(() => title.style.display = 'none')
|
237 |
+
wrapper.style.paddingTop = '0'
|
238 |
+
wrapper.style.backgroundColor = '#ffffff'
|
239 |
+
} else {
|
240 |
+
title.style.removeProperty('display')
|
241 |
+
wrapper.style.removeProperty('padding-top')
|
242 |
+
wrapper.style.removeProperty('background-color')
|
243 |
+
}
|
244 |
+
})
|
extendify-sdk/extendify-sdk.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!defined('ABSPATH')) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if (!class_exists('ExtendifySdk')) :
|
8 |
+
|
9 |
+
/**
|
10 |
+
* The Extendify Sdk
|
11 |
+
*/
|
12 |
+
// phpcs:ignore Squiz.Classes.ClassFileName.NoMatch,Squiz.Commenting.ClassComment.Missing,PEAR.Commenting.ClassComment.Missing
|
13 |
+
final class ExtendifySdk
|
14 |
+
{
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Var to make sure we only load once
|
18 |
+
*
|
19 |
+
* @var boolean $loaded
|
20 |
+
*/
|
21 |
+
public static $loaded = false;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Set up the SDK
|
25 |
+
*
|
26 |
+
* @return void
|
27 |
+
*/
|
28 |
+
public function __invoke()
|
29 |
+
{
|
30 |
+
if (!apply_filters('extendifysdk_load_library', true)) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
|
34 |
+
if (version_compare(PHP_VERSION, '5.6', '<') || version_compare($GLOBALS['wp_version'], '5.5', '<')) {
|
35 |
+
return;
|
36 |
+
}
|
37 |
+
|
38 |
+
if (!self::$loaded) {
|
39 |
+
self::$loaded = true;
|
40 |
+
require dirname(__FILE__) . '/bootstrap.php';
|
41 |
+
$app = new Extendify\ExtendifySdk\App();
|
42 |
+
if (!defined('EXTENDIFYSDK_BASE_URL')) {
|
43 |
+
define('EXTENDIFYSDK_BASE_URL', plugin_dir_url(__FILE__));
|
44 |
+
}
|
45 |
+
}
|
46 |
+
}
|
47 |
+
// phpcs:ignore Squiz.Classes.ClassDeclaration.SpaceBeforeCloseBrace
|
48 |
+
}
|
49 |
+
|
50 |
+
$extendifySdk = new ExtendifySdk();
|
51 |
+
$extendifySdk();
|
52 |
+
endif;
|
extendify-sdk/loader.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Use this file to load in the SDK from another plugin
|
4 |
+
* Example: require_once plugin_dir_path(__FILE__) . 'extendify-templates-sdk/loader.php';
|
5 |
+
*/
|
6 |
+
|
7 |
+
if (!defined('ABSPATH')) {
|
8 |
+
exit;
|
9 |
+
}
|
10 |
+
|
11 |
+
if (!function_exists('extendifysdkCheckPluginInstalled')) {
|
12 |
+
/**
|
13 |
+
* Will be truthy if the plugin is installed.
|
14 |
+
*
|
15 |
+
* @param string $name name of the plugin 'extendify-sdk'.
|
16 |
+
* @return bool|string - will return path, ex. 'extendify-sdk/extendify-sdk.php'.
|
17 |
+
*/
|
18 |
+
function extendifysdkCheckPluginInstalled($name)
|
19 |
+
{
|
20 |
+
if (!function_exists('get_plugins')) {
|
21 |
+
include_once ABSPATH . 'wp-admin/includes/plugin.php';
|
22 |
+
}
|
23 |
+
|
24 |
+
foreach (get_plugins() as $plugin => $data) {
|
25 |
+
if ($data['TextDomain'] === $name) {
|
26 |
+
return $plugin;
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
return false;
|
31 |
+
}
|
32 |
+
}//end if
|
33 |
+
|
34 |
+
// If the template SDK development build is installed, default to that.
|
35 |
+
$extendifysdkSdk = extendifysdkCheckPluginInstalled('extendify-sdk');
|
36 |
+
|
37 |
+
if ($extendifysdkSdk) {
|
38 |
+
// Only if it's deactivated.
|
39 |
+
if (is_plugin_active($extendifysdkSdk)) {
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
// If Editor Plus is installed, next default to that.
|
45 |
+
$extendifysdkEditorPlus = extendifysdkCheckPluginInstalled('editor_plus');
|
46 |
+
if ($extendifysdkEditorPlus) {
|
47 |
+
// Only if it's deactivated.
|
48 |
+
if (is_plugin_active($extendifysdkEditorPlus)) {
|
49 |
+
// Only if we aren't currently inside Editor Plus.
|
50 |
+
if (strpos(basename(dirname(__DIR__)), 'editorplus') === false) {
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
// Next is first come, first serve.
|
57 |
+
if (class_exists('ExtendifySdk')) {
|
58 |
+
return false;
|
59 |
+
}
|
60 |
+
|
61 |
+
require_once plugin_dir_path(__FILE__) . 'extendify-sdk.php';
|
extendify-sdk/public/.gitkeep
ADDED
File without changes
|
extendify-sdk/public/build/extendify-sdk.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
*,:after,:before{--tw-border-opacity:1;border-color:rgba(224,224,224,var(--tw-border-opacity))}.aspect-w-1{padding-bottom:calc(var(--tw-aspect-h)/var(--tw-aspect-w)*100%);position:relative}.aspect-w-1>*{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.aspect-w-1{--tw-aspect-w:1}.aspect-h-1{--tw-aspect-h:1}.extendify-sdk .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.extendify-sdk .focus\:not-sr-only:focus{clip:auto;height:auto;margin:0;overflow:visible;padding:0;position:static;white-space:normal;width:auto}.extendify-sdk .pointer-events-none{pointer-events:none}.extendify-sdk .static{position:static}.extendify-sdk .fixed{position:fixed}.extendify-sdk .absolute{position:absolute}.extendify-sdk .relative{position:relative}.extendify-sdk .sticky{position:sticky}.extendify-sdk .inset-0{bottom:0;left:0;right:0;top:0}.extendify-sdk .top-0{top:0}.extendify-sdk .top-1{top:.25rem}.extendify-sdk .top-3{top:.75rem}.extendify-sdk .top-16{top:4rem}.extendify-sdk .-top-3{top:-.75rem}.extendify-sdk .right-0{right:0}.extendify-sdk .right-6{right:1.5rem}.extendify-sdk .bottom-0{bottom:0}.extendify-sdk .left-0{left:0}.extendify-sdk .left-1{left:.25rem}.extendify-sdk .left-px{left:1px}.extendify-sdk .z-0{z-index:0}.extendify-sdk .z-10{z-index:10}.extendify-sdk .z-20{z-index:20}.extendify-sdk .z-30{z-index:30}.extendify-sdk .z-50{z-index:50}.extendify-sdk .z-high{z-index:99999}.extendify-sdk .m-0{margin:0}.extendify-sdk .m-6{margin:1.5rem}.extendify-sdk .m-auto{margin:auto}.extendify-sdk .-m-4{margin:-1rem}.extendify-sdk .mx-6{margin-left:1.5rem;margin-right:1.5rem}.extendify-sdk .mx-auto{margin-left:auto;margin-right:auto}.extendify-sdk .my-2{margin-bottom:.5rem;margin-top:.5rem}.extendify-sdk .my-4{margin-bottom:1rem;margin-top:1rem}.extendify-sdk .mt-0{margin-top:0}.extendify-sdk .mt-1{margin-top:.25rem}.extendify-sdk .mt-4{margin-top:1rem}.extendify-sdk .mt-5{margin-top:1.25rem}.extendify-sdk .mt-16{margin-top:4rem}.extendify-sdk .mt-px{margin-top:1px}.extendify-sdk .-mt-2{margin-top:-.5rem}.extendify-sdk .-mt-6{margin-top:-1.5rem}.extendify-sdk .mb-1{margin-bottom:.25rem}.extendify-sdk .mb-2{margin-bottom:.5rem}.extendify-sdk .mb-4{margin-bottom:1rem}.extendify-sdk .mb-5{margin-bottom:1.25rem}.extendify-sdk .mb-6{margin-bottom:1.5rem}.extendify-sdk .mb-8{margin-bottom:2rem}.extendify-sdk .mb-10{margin-bottom:2.5rem}.extendify-sdk .mb-12{margin-bottom:3rem}.extendify-sdk .mb-16{margin-bottom:4rem}.extendify-sdk .mb-24{margin-bottom:6rem}.extendify-sdk .mb-2\.5{margin-bottom:.625rem}.extendify-sdk .ml-4{margin-left:1rem}.extendify-sdk .ml-8{margin-left:2rem}.extendify-sdk .-ml-px{margin-left:-1px}.extendify-sdk .block{display:block}.extendify-sdk .inline-block{display:inline-block}.extendify-sdk .flex{display:flex}.extendify-sdk .inline-flex{display:inline-flex}.extendify-sdk .table{display:table}.extendify-sdk .grid{display:grid}.extendify-sdk .hidden{display:none}.extendify-sdk .h-8{height:2rem}.extendify-sdk .h-16{height:4rem}.extendify-sdk .h-80{height:20rem}.extendify-sdk .h-auto{height:auto}.extendify-sdk .h-px{height:1px}.extendify-sdk .h-full{height:100%}.extendify-sdk .h-screen{height:100vh}.extendify-sdk .max-h-64{max-height:16rem}.extendify-sdk .min-h-0{min-height:0}.extendify-sdk .min-h-60{min-height:15rem}.extendify-sdk .min-h-screen{min-height:100vh}.extendify-sdk .w-32{width:8rem}.extendify-sdk .w-72{width:18rem}.extendify-sdk .w-80{width:20rem}.extendify-sdk .w-96{width:24rem}.extendify-sdk .w-full{width:100%}.extendify-sdk .w-screen{width:100vw}.extendify-sdk .max-w-xs{max-width:20rem}.extendify-sdk .max-w-md{max-width:28rem}.extendify-sdk .max-w-lg{max-width:32rem}.extendify-sdk .max-w-xl{max-width:36rem}.extendify-sdk .max-w-2xl{max-width:42rem}.extendify-sdk .max-w-full{max-width:100%}.extendify-sdk .max-w-screen-xl{max-width:1280px}.extendify-sdk .max-w-screen-2xl{max-width:1440px}.extendify-sdk .max-w-screen-4xl{max-width:1920px}.extendify-sdk .flex-1{flex:1 1 0%}.extendify-sdk .flex-shrink-0{flex-shrink:0}.extendify-sdk .flex-grow{flex-grow:1}.extendify-sdk .transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.extendify-sdk .-translate-x-3{--tw-translate-x:-0.75rem}.extendify-sdk .translate-x-full{--tw-translate-x:100%}.extendify-sdk .-translate-x-full{--tw-translate-x:-100%}.extendify-sdk .translate-y-0{--tw-translate-y:0px}.extendify-sdk .translate-y-2{--tw-translate-y:0.5rem}.extendify-sdk .translate-y-4{--tw-translate-y:1rem}.extendify-sdk .translate-y-0\.5{--tw-translate-y:0.125rem}.extendify-sdk .-translate-y-full{--tw-translate-y:-100%}.extendify-sdk .rotate-180{--tw-rotate:180deg}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.extendify-sdk .cursor-pointer{cursor:pointer}.extendify-sdk .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.extendify-sdk .flex-col{flex-direction:column}.extendify-sdk .items-start{align-items:flex-start}.extendify-sdk .items-end{align-items:flex-end}.extendify-sdk .items-center{align-items:center}.extendify-sdk .justify-start{justify-content:flex-start}.extendify-sdk .justify-end{justify-content:flex-end}.extendify-sdk .justify-center{justify-content:center}.extendify-sdk .justify-between{justify-content:space-between}.extendify-sdk .justify-items-center{justify-items:center}.extendify-sdk .gap-4{gap:1rem}.extendify-sdk .gap-6{gap:1.5rem}.extendify-sdk .space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.extendify-sdk .space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-12>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(3rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(3rem*var(--tw-space-x-reverse))}.extendify-sdk .space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.375rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.375rem*var(--tw-space-x-reverse))}.extendify-sdk .space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.extendify-sdk .space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.extendify-sdk .space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.extendify-sdk .space-y-16>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(4rem*var(--tw-space-y-reverse));margin-top:calc(4rem*(1 - var(--tw-space-y-reverse)))}.extendify-sdk .divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.extendify-sdk .divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.extendify-sdk .overflow-hidden{overflow:hidden}.extendify-sdk .overflow-scroll{overflow:scroll}.extendify-sdk .overflow-y-auto{overflow-y:auto}.extendify-sdk .overflow-x-hidden{overflow-x:hidden}.extendify-sdk .overflow-y-scroll{overflow-y:scroll}.extendify-sdk .whitespace-nowrap{white-space:nowrap}.extendify-sdk .rounded-none{border-radius:0}.extendify-sdk .border-0{border-width:0}.extendify-sdk .border{border-width:1px}.extendify-sdk .border-t-0{border-top-width:0}.extendify-sdk .border-t{border-top-width:1px}.extendify-sdk .border-b-0{border-bottom-width:0}.extendify-sdk .border-b{border-bottom-width:1px}.extendify-sdk .border-l{border-left-width:1px}.extendify-sdk .border-solid{border-style:solid}.extendify-sdk .border-transparent{border-color:transparent}.extendify-sdk .border-black{--tw-border-opacity:1;border-color:rgba(0,0,0,var(--tw-border-opacity))}.extendify-sdk .border-gray-200{--tw-border-opacity:1;border-color:rgba(224,224,224,var(--tw-border-opacity))}.extendify-sdk .border-gray-300{--tw-border-opacity:1;border-color:rgba(221,221,221,var(--tw-border-opacity))}.extendify-sdk .border-gray-900{--tw-border-opacity:1;border-color:rgba(30,30,30,var(--tw-border-opacity))}.extendify-sdk .border-extendify-main{--tw-border-opacity:1;border-color:rgba(0,129,96,var(--tw-border-opacity))}.extendify-sdk .border-wp-alert-red{--tw-border-opacity:1;border-color:rgba(204,24,24,var(--tw-border-opacity))}.extendify-sdk .group:hover .group-hover\:border-wp-theme-500,.extendify-sdk .hover\:border-wp-theme-500:hover{border-color:var(--wp-admin-theme-color)}.extendify-sdk .focus\:border-transparent:focus{border-color:transparent}.extendify-sdk .bg-transparent{background-color:transparent}.extendify-sdk .bg-black{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.extendify-sdk .bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.extendify-sdk .bg-gray-50{--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity))}.extendify-sdk .bg-gray-100{--tw-bg-opacity:1;background-color:rgba(240,240,240,var(--tw-bg-opacity))}.extendify-sdk .bg-gray-200{--tw-bg-opacity:1;background-color:rgba(224,224,224,var(--tw-bg-opacity))}.extendify-sdk .bg-gray-900{--tw-bg-opacity:1;background-color:rgba(30,30,30,var(--tw-bg-opacity))}.extendify-sdk .bg-extendify-lightest{--tw-bg-opacity:1;background-color:rgba(248,255,254,var(--tw-bg-opacity))}.extendify-sdk .bg-extendify-light{--tw-bg-opacity:1;background-color:rgba(231,248,245,var(--tw-bg-opacity))}.extendify-sdk .bg-extendify-main{--tw-bg-opacity:1;background-color:rgba(0,129,96,var(--tw-bg-opacity))}.extendify-sdk .group:hover .group-hover\:bg-transparent{background-color:transparent}.extendify-sdk .hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity))}.extendify-sdk .hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(240,240,240,var(--tw-bg-opacity))}.extendify-sdk .hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgba(30,30,30,var(--tw-bg-opacity))}.extendify-sdk .focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.extendify-sdk .focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgba(240,240,240,var(--tw-bg-opacity))}.extendify-sdk .active\:bg-gray-900:active{--tw-bg-opacity:1;background-color:rgba(30,30,30,var(--tw-bg-opacity))}.extendify-sdk .bg-opacity-30{--tw-bg-opacity:0.3}.extendify-sdk .fill-current{fill:currentColor}.extendify-sdk .stroke-current{stroke:currentColor}.extendify-sdk .object-cover{-o-object-fit:cover;object-fit:cover}.extendify-sdk .p-0{padding:0}.extendify-sdk .p-1{padding:.25rem}.extendify-sdk .p-2{padding:.5rem}.extendify-sdk .p-3{padding:.75rem}.extendify-sdk .p-4{padding:1rem}.extendify-sdk .p-6{padding:1.5rem}.extendify-sdk .p-8{padding:2rem}.extendify-sdk .p-14{padding:3.5rem}.extendify-sdk .p-1\.5{padding:.375rem}.extendify-sdk .p-3\.5{padding:.875rem}.extendify-sdk .px-1{padding-left:.25rem;padding-right:.25rem}.extendify-sdk .px-2{padding-left:.5rem;padding-right:.5rem}.extendify-sdk .px-3{padding-left:.75rem;padding-right:.75rem}.extendify-sdk .px-4{padding-left:1rem;padding-right:1rem}.extendify-sdk .px-6{padding-left:1.5rem;padding-right:1.5rem}.extendify-sdk .py-0{padding-bottom:0;padding-top:0}.extendify-sdk .py-1{padding-bottom:.25rem;padding-top:.25rem}.extendify-sdk .py-2{padding-bottom:.5rem;padding-top:.5rem}.extendify-sdk .py-4{padding-bottom:1rem;padding-top:1rem}.extendify-sdk .py-6{padding-bottom:1.5rem;padding-top:1.5rem}.extendify-sdk .py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.extendify-sdk .pt-4{padding-top:1rem}.extendify-sdk .pt-6{padding-top:1.5rem}.extendify-sdk .pt-14{padding-top:3.5rem}.extendify-sdk .pt-16{padding-top:4rem}.extendify-sdk .pt-px{padding-top:1px}.extendify-sdk .pr-2{padding-right:.5rem}.extendify-sdk .pr-4{padding-right:1rem}.extendify-sdk .pb-0{padding-bottom:0}.extendify-sdk .pb-2{padding-bottom:.5rem}.extendify-sdk .pb-3{padding-bottom:.75rem}.extendify-sdk .pb-4{padding-bottom:1rem}.extendify-sdk .pb-6{padding-bottom:1.5rem}.extendify-sdk .pb-16{padding-bottom:4rem}.extendify-sdk .pb-20{padding-bottom:5rem}.extendify-sdk .pb-32{padding-bottom:8rem}.extendify-sdk .pb-40{padding-bottom:10rem}.extendify-sdk .pb-60{padding-bottom:15rem}.extendify-sdk .pl-6{padding-left:1.5rem}.extendify-sdk .pl-12{padding-left:3rem}.extendify-sdk .text-left{text-align:left}.extendify-sdk .text-center{text-align:center}.extendify-sdk .text-xs{font-size:.75rem;line-height:1rem}.extendify-sdk .text-sm{font-size:.875rem;line-height:1.25rem}.extendify-sdk .text-base{font-size:1rem;line-height:1.5rem}.extendify-sdk .text-lg{font-size:1.125rem;line-height:1.75rem}.extendify-sdk .text-xl{font-size:1.25rem;line-height:1.75rem}.extendify-sdk .text-2xl{font-size:1.5rem;line-height:2rem}.extendify-sdk .text-5xl{font-size:3rem;line-height:1}.extendify-sdk .text-7xl{font-size:4.5rem;line-height:1}.extendify-sdk .font-normal{font-weight:400}.extendify-sdk .font-medium{font-weight:500}.extendify-sdk .font-semibold{font-weight:600}.extendify-sdk .font-bold{font-weight:700}.extendify-sdk .uppercase{text-transform:uppercase}.extendify-sdk .leading-none{line-height:1}.extendify-sdk .leading-tight{line-height:1.25}.extendify-sdk .leading-loose{line-height:2}.extendify-sdk .text-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.extendify-sdk .text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.extendify-sdk .text-gray-900{--tw-text-opacity:1;color:rgba(30,30,30,var(--tw-text-opacity))}.extendify-sdk .text-extendify-main{--tw-text-opacity:1;color:rgba(0,129,96,var(--tw-text-opacity))}.extendify-sdk .text-extendify-link{--tw-text-opacity:1;color:rgba(41,152,117,var(--tw-text-opacity))}.extendify-sdk .text-extendify-bright{--tw-text-opacity:1;color:rgba(48,168,80,var(--tw-text-opacity))}.extendify-sdk .text-wp-theme-500{color:var(--wp-admin-theme-color)}.extendify-sdk .text-wp-alert-red{--tw-text-opacity:1;color:rgba(204,24,24,var(--tw-text-opacity))}.extendify-sdk .hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.extendify-sdk .hover\:text-wp-theme-500:hover{color:var(--wp-admin-theme-color)}.extendify-sdk .focus\:text-white:focus{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.extendify-sdk .focus\:text-blue-500:focus{--tw-text-opacity:1;color:rgba(59,130,246,var(--tw-text-opacity))}.extendify-sdk .active\:text-white:active{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.extendify-sdk .underline{text-decoration:underline}.extendify-sdk .no-underline{text-decoration:none}.extendify-sdk .placeholder-transparent::-moz-placeholder{color:transparent}.extendify-sdk .placeholder-transparent:-ms-input-placeholder{color:transparent}.extendify-sdk .placeholder-transparent::placeholder{color:transparent}.extendify-sdk .opacity-0{opacity:0}.extendify-sdk .focus\:opacity-100:focus,.extendify-sdk .group:hover .group-hover\:opacity-100,.extendify-sdk .opacity-100{opacity:1}*,:after,:before{--tw-shadow:0 0 #0000}.extendify-sdk .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.extendify-sdk .shadow-md,.extendify-sdk .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.extendify-sdk .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)}.extendify-sdk .outline-none{outline:2px solid transparent;outline-offset:2px}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.extendify-sdk .ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.extendify-sdk .focus\:ring-2:focus,.extendify-sdk .ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.extendify-sdk .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.extendify-sdk .focus\:ring-4:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.extendify-sdk .focus\:ring-extendify-main:focus,.extendify-sdk .ring-extendify-main{--tw-ring-opacity:1;--tw-ring-color:rgba(0,129,96,var(--tw-ring-opacity))}.extendify-sdk .focus\:ring-wp-theme-500:focus{--tw-ring-color:var(--wp-admin-theme-color)}.extendify-sdk .ring-offset-1{--tw-ring-offset-width:1px}.extendify-sdk .focus\:ring-offset-4:focus,.extendify-sdk .ring-offset-4{--tw-ring-offset-width:4px}.extendify-sdk .filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.extendify-sdk .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.extendify-sdk .transition{transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.extendify-sdk .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.extendify-sdk .delay-300{transition-delay:.3s}.extendify-sdk .duration-150{transition-duration:.15s}.extendify-sdk .duration-200{transition-duration:.2s}.extendify-sdk .duration-300{transition-duration:.3s}.extendify-sdk .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.extendify-sdk *,.extendify-sdk :after,.extendify-sdk :before{border:0 solid #e5e7eb;box-sizing:border-box}.extendify-sdk .button-focus{outline:2px solid transparent;outline-offset:2px}.extendify-sdk .button-focus:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--wp-admin-theme-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.extendify-sdk .button-focus{--tw-ring-offset-width:1px}.extendify-sdk .button-focus-big-green{outline:2px solid transparent;outline-offset:2px}.extendify-sdk .button-focus-big-green:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(0,129,96,var(--tw-ring-opacity));--tw-ring-offset-width:4px;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.button-extendify-main{--tw-bg-opacity:1;background-color:rgba(0,129,96,var(--tw-bg-opacity));cursor:pointer;white-space:nowrap}.button-extendify-main:active,.button-extendify-main:hover{--tw-bg-opacity:1;background-color:rgba(30,30,30,var(--tw-bg-opacity))}.button-extendify-main{padding:.375rem .75rem}.button-extendify-main,.button-extendify-main:active,.button-extendify-main:focus,.button-extendify-main:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.button-extendify-main{text-decoration:none;transition-duration:.15s;transition-duration:.2s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.extendify-sdk .button-extendify-main{outline:2px solid transparent;outline-offset:2px}.extendify-sdk .button-extendify-main:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--wp-admin-theme-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.extendify-sdk .button-extendify-main{--tw-ring-offset-width:1px}.extendify-sdk input.button-extendify-main:focus,.extendify-sdk input.button-focus:focus,.extendify-sdk select.button-extendify-main:focus,.extendify-sdk select.button-focus:focus{border-color:transparent;outline:2px solid transparent;outline-offset:2px}#extendify-search-input:not(:-moz-placeholder-shown)~svg{display:none}#extendify-search-input:not(:-ms-input-placeholder)~svg{display:none}#extendify-search-input:focus~svg,#extendify-search-input:not(:placeholder-shown)~svg{display:none}#extendify-search-input::-webkit-textfield-decoration-container{margin-right:.75rem}.extendify-sdk .components-panel__body>.components-panel__body-title{background-color:transparent;border-bottom:1px solid #e0e0e0!important}.extendify-sdk .components-modal__header{--tw-border-opacity:1;border-bottom-width:1px;border-color:rgba(221,221,221,var(--tw-border-opacity))}.extendify-special-input:-moz-placeholder-shown~label{--tw-text-opacity:1;color:rgba(148,148,148,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;top:.375rem}.extendify-special-input:-ms-input-placeholder~label{--tw-text-opacity:1;color:rgba(148,148,148,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;top:.375rem}.extendify-special-input:placeholder-shown~label{--tw-text-opacity:1;color:rgba(148,148,148,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem;top:.375rem}.extendify-special-input:focus~label{--tw-text-opacity:1;color:rgba(0,129,96,var(--tw-text-opacity));font-size:.75rem;line-height:1rem;top:-1rem}@media (min-width:600px){.extendify-sdk .sm\:top-auto{top:auto}.extendify-sdk .sm\:m-0{margin:0}.extendify-sdk .sm\:my-6{margin-bottom:1.5rem;margin-top:1.5rem}.extendify-sdk .sm\:mt-64{margin-top:16rem}.extendify-sdk .sm\:mb-8{margin-bottom:2rem}.extendify-sdk .sm\:block{display:block}.extendify-sdk .sm\:flex{display:flex}.extendify-sdk .sm\:hidden{display:none}.extendify-sdk .sm\:h-auto{height:auto}.extendify-sdk .sm\:min-h-0{min-height:0}.extendify-sdk .sm\:w-56{width:14rem}.extendify-sdk .sm\:w-auto{width:auto}.extendify-sdk .sm\:w-full{width:100%}.extendify-sdk .sm\:translate-x-6{--tw-translate-x:1.5rem}.extendify-sdk .sm\:translate-x-8{--tw-translate-x:2rem}.extendify-sdk .sm\:translate-y-5{--tw-translate-y:1.25rem}.extendify-sdk .sm\:space-x-12>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(3rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(3rem*var(--tw-space-x-reverse))}.extendify-sdk .sm\:border-0{border-width:0}.extendify-sdk .sm\:p-0{padding:0}.extendify-sdk .sm\:px-0{padding-left:0;padding-right:0}.extendify-sdk .sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.extendify-sdk .sm\:px-12{padding-left:3rem;padding-right:3rem}.extendify-sdk .sm\:py-2{padding-bottom:.5rem;padding-top:.5rem}.extendify-sdk .sm\:py-6{padding-bottom:1.5rem;padding-top:1.5rem}.extendify-sdk .sm\:py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.extendify-sdk .sm\:pt-0{padding-top:0}.extendify-sdk .sm\:pt-6{padding-top:1.5rem}.extendify-sdk .sm\:pr-8{padding-right:2rem}.extendify-sdk .sm\:pb-6{padding-bottom:1.5rem}.extendify-sdk .sm\:pl-0{padding-left:0}.extendify-sdk .sm\:pl-12{padding-left:3rem}.extendify-sdk .sm\:text-2xl{font-size:1.5rem;line-height:2rem}.extendify-sdk .sm\:text-3xl{font-size:2rem;line-height:2.5rem}.extendify-sdk .sm\:opacity-0{opacity:0}}@media (min-width:782px){.extendify-sdk .md\:-mt-32{margin-top:-8rem}.extendify-sdk .md\:flex{display:flex}.extendify-sdk .md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.extendify-sdk .md\:p-16{padding:4rem}.extendify-sdk .md\:pb-0{padding-bottom:0}}@media (min-width:1080px){.extendify-sdk .lg\:static{position:static}.extendify-sdk .lg\:absolute{position:absolute}.extendify-sdk .lg\:sticky{position:sticky}.extendify-sdk .lg\:mx-0{margin-left:0;margin-right:0}.extendify-sdk .lg\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.extendify-sdk .lg\:-ml-px{margin-left:-1px}.extendify-sdk .lg\:block{display:block}.extendify-sdk .lg\:flex{display:flex}.extendify-sdk .lg\:h-full{height:100%}.extendify-sdk .lg\:w-72{width:18rem}.extendify-sdk .lg\:w-1\/2{width:50%}.extendify-sdk .lg\:flex-row{flex-direction:row}.extendify-sdk .lg\:items-center{align-items:center}.extendify-sdk .lg\:justify-between{justify-content:space-between}.extendify-sdk .lg\:space-x-16>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(4rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(4rem*var(--tw-space-x-reverse))}.extendify-sdk .lg\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.extendify-sdk .lg\:divide-x-2>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(2px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(2px*var(--tw-divide-x-reverse))}.extendify-sdk .lg\:overflow-hidden{overflow:hidden}.extendify-sdk .lg\:border-t-0{border-top-width:0}.extendify-sdk .lg\:border-b{border-bottom-width:1px}.extendify-sdk .lg\:p-5{padding:1.25rem}.extendify-sdk .lg\:px-0{padding-left:0;padding-right:0}.extendify-sdk .lg\:px-2{padding-left:.5rem;padding-right:.5rem}.extendify-sdk .lg\:px-20{padding-left:5rem;padding-right:5rem}.extendify-sdk .lg\:pt-0{padding-top:0}.extendify-sdk .lg\:pl-px{padding-left:1px}.extendify-sdk .lg\:leading-none{line-height:1}}@media (min-width:1280px){.extendify-sdk .xl\:w-1\/2{width:50%}.extendify-sdk .xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.extendify-sdk .xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.extendify-sdk .xl\:space-x-32>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(8rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(8rem*var(--tw-space-x-reverse))}.extendify-sdk .xl\:space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}}@media (min-width:1440px){.extendify-sdk .\32xl\:mb-16{margin-bottom:4rem}.extendify-sdk .\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.extendify-sdk .\32xl\:p-28{padding:7rem}.extendify-sdk .\32xl\:pb-0{padding-bottom:0}}@media (min-width:1600px){.extendify-sdk .\33xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}
|
extendify-sdk/public/build/extendify-sdk.js
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
/*! For license information please see extendify-sdk.js.LICENSE.txt */
|
2 |
+
(()=>{var e,t={135:(e,t,n)=>{e.exports=n(248)},206:(e,t,n)=>{e.exports=n(57)},387:(e,t,n)=>{"use strict";var r=n(485),i=n(570),o=n(940),a=n(581),s=n(574),u=n(845),l=n(338),c=n(524);e.exports=function(e){return new Promise((function(t,n){var f=e.data,d=e.headers,p=e.responseType;r.isFormData(f)&&delete d["Content-Type"];var m=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic "+btoa(h+":"+v)}var y=s(e.baseURL,e.url);function x(){if(m){var r="getAllResponseHeaders"in m?u(m.getAllResponseHeaders()):null,o={data:p&&"text"!==p&&"json"!==p?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m};i(t,n,o),m=null}}if(m.open(e.method.toUpperCase(),a(y,e.params,e.paramsSerializer),!0),m.timeout=e.timeout,"onloadend"in m?m.onloadend=x:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(x)},m.onabort=function(){m&&(n(c("Request aborted",e,"ECONNABORTED",m)),m=null)},m.onerror=function(){n(c("Network Error",e,null,m)),m=null},m.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,e.transitional&&e.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",m)),m=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||l(y))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}"setRequestHeader"in m&&r.forEach(d,(function(e,t){void 0===f&&"content-type"===t.toLowerCase()?delete d[t]:m.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(m.withCredentials=!!e.withCredentials),p&&"json"!==p&&(m.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&m.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&m.upload&&m.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){m&&(m.abort(),n(e),m=null)})),f||(f=null),m.send(f)}))}},57:(e,t,n)=>{"use strict";var r=n(485),i=n(875),o=n(29),a=n(941);function s(e){var t=new o(e),n=i(o.prototype.request,t);return r.extend(n,o.prototype,t),r.extend(n,t),n}var u=s(n(141));u.Axios=o,u.create=function(e){return s(a(u.defaults,e))},u.Cancel=n(132),u.CancelToken=n(603),u.isCancel=n(475),u.all=function(e){return Promise.all(e)},u.spread=n(739),u.isAxiosError=n(835),e.exports=u,e.exports.default=u},132:e=>{"use strict";function t(e){this.message=e}t.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},t.prototype.__CANCEL__=!0,e.exports=t},603:(e,t,n)=>{"use strict";var r=n(132);function i(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var e;return{token:new i((function(t){e=t})),cancel:e}},e.exports=i},475:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},29:(e,t,n)=>{"use strict";var r=n(485),i=n(581),o=n(96),a=n(9),s=n(941),u=n(144),l=u.validators;function c(e){this.defaults=e,this.interceptors={request:new o,response:new o}}c.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=e.transitional;void 0!==t&&u.assertOptions(t,{silentJSONParsing:l.transitional(l.boolean,"1.0.0"),forcedJSONParsing:l.transitional(l.boolean,"1.0.0"),clarifyTimeoutError:l.transitional(l.boolean,"1.0.0")},!1);var n=[],r=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(r=r&&t.synchronous,n.unshift(t.fulfilled,t.rejected))}));var i,o=[];if(this.interceptors.response.forEach((function(e){o.push(e.fulfilled,e.rejected)})),!r){var c=[a,void 0];for(Array.prototype.unshift.apply(c,n),c=c.concat(o),i=Promise.resolve(e);c.length;)i=i.then(c.shift(),c.shift());return i}for(var f=e;n.length;){var d=n.shift(),p=n.shift();try{f=d(f)}catch(e){p(e);break}}try{i=a(f)}catch(e){return Promise.reject(e)}for(;o.length;)i=i.then(o.shift(),o.shift());return i},c.prototype.getUri=function(e){return e=s(this.defaults,e),i(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(e){c.prototype[e]=function(t,n){return this.request(s(n||{},{method:e,url:t,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(e){c.prototype[e]=function(t,n,r){return this.request(s(r||{},{method:e,url:t,data:n}))}})),e.exports=c},96:(e,t,n)=>{"use strict";var r=n(485);function i(){this.handlers=[]}i.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},i.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=i},574:(e,t,n)=>{"use strict";var r=n(642),i=n(288);e.exports=function(e,t){return e&&!r(t)?i(e,t):t}},524:(e,t,n)=>{"use strict";var r=n(953);e.exports=function(e,t,n,i,o){var a=new Error(e);return r(a,t,n,i,o)}},9:(e,t,n)=>{"use strict";var r=n(485),i=n(212),o=n(475),a=n(141);function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.headers=e.headers||{},e.data=i.call(e,e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||a.adapter)(e).then((function(t){return s(e),t.data=i.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(s(e),t&&t.response&&(t.response.data=i.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},953:e=>{"use strict";e.exports=function(e,t,n,r,i){return e.config=t,n&&(e.code=n),e.request=r,e.response=i,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},941:(e,t,n)=>{"use strict";var r=n(485);e.exports=function(e,t){t=t||{};var n={},i=["url","method","data"],o=["headers","auth","proxy","params"],a=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],s=["validateStatus"];function u(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function l(i){r.isUndefined(t[i])?r.isUndefined(e[i])||(n[i]=u(void 0,e[i])):n[i]=u(e[i],t[i])}r.forEach(i,(function(e){r.isUndefined(t[e])||(n[e]=u(void 0,t[e]))})),r.forEach(o,l),r.forEach(a,(function(i){r.isUndefined(t[i])?r.isUndefined(e[i])||(n[i]=u(void 0,e[i])):n[i]=u(void 0,t[i])})),r.forEach(s,(function(r){r in t?n[r]=u(e[r],t[r]):r in e&&(n[r]=u(void 0,e[r]))}));var c=i.concat(o).concat(a).concat(s),f=Object.keys(e).concat(Object.keys(t)).filter((function(e){return-1===c.indexOf(e)}));return r.forEach(f,l),n}},570:(e,t,n)=>{"use strict";var r=n(524);e.exports=function(e,t,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},212:(e,t,n)=>{"use strict";var r=n(485),i=n(141);e.exports=function(e,t,n){var o=this||i;return r.forEach(n,(function(n){e=n.call(o,e,t)})),e}},141:(e,t,n)=>{"use strict";var r=n(61),i=n(485),o=n(895),a=n(953),s={"Content-Type":"application/x-www-form-urlencoded"};function u(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var l,c={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==r&&"[object process]"===Object.prototype.toString.call(r))&&(l=n(387)),l),transformRequest:[function(e,t){return o(t,"Accept"),o(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(u(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)||t&&"application/json"===t["Content-Type"]?(u(t,"application/json"),function(e,t,n){if(i.isString(e))try{return(t||JSON.parse)(e),i.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional,n=t&&t.silentJSONParsing,r=t&&t.forcedJSONParsing,o=!n&&"json"===this.responseType;if(o||r&&i.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw a(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){c.headers[e]=i.merge(s)})),e.exports=c},875:e=>{"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},581:(e,t,n)=>{"use strict";var r=n(485);function i(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(r.isURLSearchParams(t))o=t.toString();else{var a=[];r.forEach(t,(function(e,t){null!=e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),a.push(i(t)+"="+i(e))})))})),o=a.join("&")}if(o){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}},288:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},940:(e,t,n)=>{"use strict";var r=n(485);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,i,o,a){var s=[];s.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},642:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},835:e=>{"use strict";e.exports=function(e){return"object"==typeof e&&!0===e.isAxiosError}},338:(e,t,n)=>{"use strict";var r=n(485);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=i(window.location.href),function(t){var n=r.isString(t)?i(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},895:(e,t,n)=>{"use strict";var r=n(485);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},845:(e,t,n)=>{"use strict";var r=n(485),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,o,a={};return e?(r.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t){if(a[t]&&i.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},739:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},144:(e,t,n)=>{"use strict";var r=n(995),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var o={},a=r.version.split(".");function s(e,t){for(var n=t?t.split("."):a,r=e.split("."),i=0;i<3;i++){if(n[i]>r[i])return!0;if(n[i]<r[i])return!1}return!1}i.transitional=function(e,t,n){var i=t&&s(t);function a(e,t){return"[Axios v"+r.version+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,s){if(!1===e)throw new Error(a(r," has been removed in "+t));return i&&!o[r]&&(o[r]=!0,console.warn(a(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,s)}},e.exports={isOlderVersion:s,assertOptions:function(e,t,n){if("object"!=typeof e)throw new TypeError("options must be an object");for(var r=Object.keys(e),i=r.length;i-- >0;){var o=r[i],a=t[o];if(a){var s=e[o],u=void 0===s||a(s,o,e);if(!0!==u)throw new TypeError("option "+o+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+o)}},validators:i}},485:(e,t,n)=>{"use strict";var r=n(875),i=Object.prototype.toString;function o(e){return"[object Array]"===i.call(e)}function a(e){return void 0===e}function s(e){return null!==e&&"object"==typeof e}function u(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Function]"===i.call(e)}function c(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),o(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}e.exports={isArray:o,isArrayBuffer:function(e){return"[object ArrayBuffer]"===i.call(e)},isBuffer:function(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"undefined"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:s,isPlainObject:u,isUndefined:a,isDate:function(e){return"[object Date]"===i.call(e)},isFile:function(e){return"[object File]"===i.call(e)},isBlob:function(e){return"[object Blob]"===i.call(e)},isFunction:l,isStream:function(e){return s(e)&&l(e.pipe)},isURLSearchParams:function(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:c,merge:function e(){var t={};function n(n,r){u(t[r])&&u(n)?t[r]=e(t[r],n):u(n)?t[r]=e({},n):o(n)?t[r]=n.slice():t[r]=n}for(var r=0,i=arguments.length;r<i;r++)c(arguments[r],n);return t},extend:function(e,t,n){return c(t,(function(t,i){e[i]=n&&"function"==typeof t?r(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}}},995:e=>{"use strict";e.exports=JSON.parse('{"name":"axios","version":"0.21.4","description":"Promise based HTTP client for the browser and node.js","main":"index.js","scripts":{"test":"grunt test","start":"node ./sandbox/server.js","build":"NODE_ENV=production grunt build","preversion":"npm test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json","postversion":"git push && git push --tags","examples":"node ./examples/server.js","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","fix":"eslint --fix lib/**/*.js"},"repository":{"type":"git","url":"https://github.com/axios/axios.git"},"keywords":["xhr","http","ajax","promise","node"],"author":"Matt Zabriskie","license":"MIT","bugs":{"url":"https://github.com/axios/axios/issues"},"homepage":"https://axios-http.com","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"jsdelivr":"dist/axios.min.js","unpkg":"dist/axios.min.js","typings":"./index.d.ts","dependencies":{"follow-redirects":"^1.14.0"},"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}],"_resolved":"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz","_integrity":"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==","_from":"axios@0.21.4"}')},446:(e,t,n)=>{"use strict";const r=wp.element;var i=n(804),o=n.n(i);function a(e){let t;const n=new Set,r=(e,r)=>{const i="function"==typeof e?e(t):e;if(i!==t){const e=t;t=r?i:Object.assign({},t,i),n.forEach((n=>n(t,e)))}},i=()=>t,o={setState:r,getState:i,subscribe:(e,r,o)=>r||o?((e,r=i,o=Object.is)=>{let a=r(t);function s(){const n=r(t);if(!o(a,n)){const t=a;e(a=n,t)}}return n.add(s),()=>n.delete(s)})(e,r,o):(n.add(e),()=>n.delete(e)),destroy:()=>n.clear()};return t=e(r,i,o),o}const s="undefined"==typeof window||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent)?i.useEffect:i.useLayoutEffect;function u(e){const t="function"==typeof e?a(e):e,n=(e=t.getState,n=Object.is)=>{const[,r]=(0,i.useReducer)((e=>e+1),0),o=t.getState(),a=(0,i.useRef)(o),u=(0,i.useRef)(e),l=(0,i.useRef)(n),c=(0,i.useRef)(!1),f=(0,i.useRef)();let d;void 0===f.current&&(f.current=e(o));let p=!1;(a.current!==o||u.current!==e||l.current!==n||c.current)&&(d=e(o),p=!n(f.current,d)),s((()=>{p&&(f.current=d),a.current=o,u.current=e,l.current=n,c.current=!1}));const m=(0,i.useRef)(o);return s((()=>{const e=()=>{try{const e=t.getState(),n=u.current(e);l.current(f.current,n)||(a.current=e,f.current=n,r())}catch(e){c.current=!0,r()}},n=t.subscribe(e);return t.getState()!==m.current&&e(),n}),[]),p?d:f.current};return Object.assign(n,t),n[Symbol.iterator]=function(){console.warn("[useStore, api] = create() is deprecated and will be removed in v4");const e=[n,t];return{next(){const t=e.length<=0;return{value:e.shift(),done:t}}}},n}var l="pattern",c=12;function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=window.wp.blocks.createBlock;return e.map((function(e){var n=f(Array.isArray(e)?e:[e.name,e.attributes,e.innerBlocks],3),r=n[0],i=n[1],o=n[2];return t(r,i,p(void 0===o?[]:o))}))}function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m(Object(n),!0).forEach((function(t){v(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){return function(e){if(Array.isArray(e))return x(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return x(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return x(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var g=function(e,t){return"pattern"===e&&"tax_categories"===t?"Default":""},b=u((function(e,t){return{templates:[],skipNextFetch:!1,fetchToken:null,activeTemplate:{},activeTemplateBlocks:{},taxonomyDefaultState:{},searchParams:{taxonomies:{},type:l,search:""},nextPage:"",removeTemplates:function(){return e({nextPage:"",templates:[]})},appendTemplates:function(n){return e({templates:y(new Map([].concat(y(t().templates),y(n)).map((function(e){return[e.id,e]}))).values())})},setupDefaultTaxonomies:function(n){var r=Object.keys(n).reduce((function(e,n){return e[n]=function(e){return g(t().searchParams.type,e)}(n),e}),{}),i={};i.taxonomies=Object.assign({},r,t().searchParams.taxonomies),e({taxonomyDefaultState:r,searchParams:h({},Object.assign(t().searchParams,i))})},setActive:function(t){var n;if(e({activeTemplate:t}),Object.keys(t).length>0&&w.setState({currentPage:"single"}),null!=t&&null!==(n=t.fields)&&void 0!==n&&n.code){var r=window.wp.blocks.parse;e({activeTemplateBlocks:p(r(t.fields.code))})}},resetTaxonomy:function(e){var n;t().updateTaxonomies(v({},e,null!==(n=t().taxonomyDefaultState[e])&&void 0!==n?n:""))},updateTaxonomies:function(e){var n={};n.taxonomies=Object.assign({},t().searchParams.taxonomies,e),t().updateSearchParams(n)},updateSearchParams:function(n){var r,i;null!=n&&n.taxonomies&&!Object.keys(n.taxonomies).length&&(n.taxonomies=t().taxonomyDefaultState),null!=n&&n.type&&["","Default"].includes(null===(r=t().searchParams)||void 0===r||null===(i=r.taxonomies)||void 0===i?void 0:i.tax_categories)&&t().updateTaxonomies({tax_categories:g(n.type,"tax_categories")});var o=Object.assign({},t().searchParams,n);JSON.stringify(o)!==JSON.stringify(t().searchParams)&&e({templates:[],nextPage:"",searchParams:o})}}})),w=u((function(e){return{open:!1,metaData:{},currentPage:"main",setOpen:function(t){e({open:t}),t&&b.getState().removeTemplates()}}})),j=n(135),k=n.n(j),S=Object.defineProperty,_=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable,N=(e,t,n)=>t in e?S(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,C=(e,t)=>{for(var n in t||(t={}))O.call(t,n)&&N(e,n,t[n]);if(_)for(var n of _(t))E.call(t,n)&&N(e,n,t[n]);return e};const P=e=>t=>{try{const n=e(t);return n instanceof Promise?n:{then:e=>P(e)(n),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>P(t)(e)}}},A=(e,t)=>(n,r,i)=>{const{name:o,getStorage:a=(()=>localStorage),serialize:s=JSON.stringify,deserialize:u=JSON.parse,blacklist:l,whitelist:c,onRehydrateStorage:f,version:d=0,migrate:p,merge:m=((e,t)=>C(C({},t),e))}=t||{};let h;try{h=a()}catch(e){}if(!h)return e(((...e)=>{console.warn(`Persist middleware: unable to update ${o}, the given storage is currently unavailable.`),n(...e)}),r,i);const v=P(s),y=()=>{const e=C({},r());let t;c&&Object.keys(e).forEach((t=>{!c.includes(t)&&delete e[t]})),l&&l.forEach((t=>delete e[t]));const n=v({state:e,version:d}).then((e=>h.setItem(o,e))).catch((e=>{t=e}));if(t)throw t;return n},x=i.setState;i.setState=(e,t)=>{x(e,t),y()};const g=e(((...e)=>{n(...e),y()}),r,i);let b;const w=(null==f?void 0:f(r()))||void 0;return P(h.getItem.bind(h))(o).then((e=>{if(e)return u(e)})).then((e=>{if(e){if("number"!=typeof e.version||e.version===d)return e.state;if(p)return p(e.state,e.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}})).then((e=>(b=m(e,g),n(b,!0),y()))).then((()=>{null==w||w(b,void 0)})).catch((e=>{null==w||w(void 0,e)})),b||g};var T=n(206),F=n.n(T)().create({baseURL:window.extendifySdkData.root,headers:{"X-WP-Nonce":window.extendifySdkData.nonce,"X-Requested-With":"XMLHttpRequest","X-Extendify":!0}});function L(e){return Object.prototype.hasOwnProperty.call(e,"data")?e.data:e}F.interceptors.response.use((function(e){return function(e){return Object.prototype.hasOwnProperty.call(e,"soft_error")&&window.dispatchEvent(new CustomEvent("extendify-sdk::softerror-encountered",{detail:e.soft_error,bubbles:!0})),e}(L(e))}),(function(e){return function(e){if(e.response)return console.error(e.response),Promise.reject(L(e.response))}(e)})),F.interceptors.request.use((function(e){return function(e){return e.headers["X-Extendify-Dev-Mode"]=window.location.search.indexOf("DEVMODE")>-1,e.headers["X-Extendify-Local-Mode"]=window.location.search.indexOf("LOCALMODE")>-1,e}(function(e){return e.data&&(e.data.remaining_imports=K.getState().remainingImports(),e.data.entry_point=K.getState().entryPoint,e.data.total_imports=K.getState().imports),e}(e))}),(function(e){return e}));var I=function(){return F.get("user")},D=function(e){return F.get("user-meta",{params:{key:e}})},R=function(e,t){var n=new FormData;return n.append("email",e),n.append("key",t),F.post("login",n,{headers:{"Content-Type":"multipart/form-data"}})},M=function(e){var t=new FormData;return t.append("data",JSON.stringify(e)),F.post("user",t,{headers:{"Content-Type":"multipart/form-data"}})},V=function(e){var t=new FormData;return t.append("email",e),F.post("register-mailing-list",t,{headers:{"Content-Type":"multipart/form-data"}})};function H(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?H(Object(n),!0).forEach((function(t){U(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):H(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function q(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function z(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){q(o,r,i,a,s,"next",e)}function s(e){q(o,r,i,a,s,"throw",e)}a(void 0)}))}}var W,Z,$,G,J={getItem:(Z=z(k().mark((function e(){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I();case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)}))),function(){return Z.apply(this,arguments)}),setItem:(W=z(k().mark((function e(t,n){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,M(n);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)}))),function(e,t){return W.apply(this,arguments)})},K=u(A((function(e,t){return{email:"",apiKey:"",imports:0,uuid:"",registration:{email:""},allowedImports:0,entryPoint:"not-set",enabled:!0,hasClickedThroughWelcomePage:!1,canInstallPlugins:!1,canActivatePlugins:!1,preferredOptions:{taxonomies:{},type:"",search:""},incrementImports:function(){return e({imports:t().imports+1})},canImport:function(){return!!t().apiKey||Number(t().imports)<Number(t().allowedImports)},remainingImports:function(){if(t().apiKey)return"unlimited";var e=Number(t().allowedImports)-Number(t().imports);return e>0?e:0},updatePreferredOption:function(n,r){var i,o,a;Object.prototype.hasOwnProperty.call(t().preferredOptions,n)||(r=Object.assign({},null!==(o=null===(a=t().preferredOptions)||void 0===a?void 0:a.taxonomies)&&void 0!==o?o:{},U({},n,r)),n="taxonomies");var s="type"==n&&r!==(null===(i=t().preferredOptions)||void 0===i?void 0:i.type);e({preferredOptions:B({},Object.assign({},t().preferredOptions,U({},n,r),s?{taxonomies:{}}:{}))})}}}),{name:"extendify-user",getStorage:function(){return J}}));function Y(){return(Y=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function X(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ee(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Q(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Q(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function te(e,t){if(e in t){for(var n=t[e],r=arguments.length,i=new Array(r>2?r-2:0),o=2;o<r;o++)i[o-2]=arguments[o];return"function"==typeof n?n.apply(void 0,i):n}var a=new Error('Tried to handle "'+e+'" but there is no handler defined. Only defined handlers are: '+Object.keys(t).map((function(e){return'"'+e+'"'})).join(", ")+".");throw Error.captureStackTrace&&Error.captureStackTrace(a,te),a}function ne(e){var t=e.props,n=e.slot,r=e.defaultTag,i=e.features,o=e.visible,a=void 0===o||o,s=e.name;if(a)return re(t,n,r,s);var u=null!=i?i:$.None;if(u&$.Static){var l=t.static,c=void 0!==l&&l,f=X(t,["static"]);if(c)return re(f,n,r,s)}if(u&$.RenderStrategy){var d,p=t.unmount,m=void 0===p||p,h=X(t,["unmount"]);return te(m?G.Unmount:G.Hidden,((d={})[G.Unmount]=function(){return null},d[G.Hidden]=function(){return re(Y({},h,{hidden:!0,style:{display:"none"}}),n,r,s)},d))}return re(t,n,r,s)}function re(e,t,n,r){var o;void 0===t&&(t={});var a=oe(e,["unmount","static"]),s=a.as,u=void 0===s?n:s,l=a.children,c=a.refName,f=void 0===c?"ref":c,d=X(a,["as","children","refName"]),p=void 0!==e.ref?((o={})[f]=e.ref,o):{},m="function"==typeof l?l(t):l;if(d.className&&"function"==typeof d.className&&(d.className=d.className(t)),u===i.Fragment&&Object.keys(d).length>0){if(!(0,i.isValidElement)(m)||Array.isArray(m)&&m.length>1)throw new Error(['Passing props on "Fragment"!',"","The current component <"+r+' /> is rendering a "Fragment".',"However we need to passthrough the following props:",Object.keys(d).map((function(e){return" - "+e})).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map((function(e){return" - "+e})).join("\n")].join("\n"));return(0,i.cloneElement)(m,Object.assign({},function(e,t,n){for(var r,i=Object.assign({},e),o=function(){var n,o=r.value;void 0!==e[o]&&void 0!==t[o]&&Object.assign(i,((n={})[o]=function(n){n.defaultPrevented||e[o](n),n.defaultPrevented||t[o](n)},n))},a=ee(n);!(r=a()).done;)o();return i}(function(e){var t=Object.assign({},e);for(var n in t)void 0===t[n]&&delete t[n];return t}(oe(d,["ref"])),m.props,["onClick"]),p))}return(0,i.createElement)(u,Object.assign({},oe(d,["ref"]),u!==i.Fragment&&p),m)}function ie(e){var t;return Object.assign((0,i.forwardRef)(e),{displayName:null!=(t=e.displayName)?t:e.name})}function oe(e,t){void 0===t&&(t=[]);for(var n,r=Object.assign({},e),i=ee(t);!(n=i()).done;){var o=n.value;o in r&&delete r[o]}return r}!function(e){e[e.None=0]="None",e[e.RenderStrategy=1]="RenderStrategy",e[e.Static=2]="Static"}($||($={})),function(e){e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden"}(G||(G={}));var ae="undefined"!=typeof window?i.useLayoutEffect:i.useEffect,se={serverHandoffComplete:!1};function ue(){var e=(0,i.useState)(se.serverHandoffComplete),t=e[0],n=e[1];return(0,i.useEffect)((function(){!0!==t&&n(!0)}),[t]),(0,i.useEffect)((function(){!1===se.serverHandoffComplete&&(se.serverHandoffComplete=!0)}),[]),t}var le=0;function ce(){return++le}function fe(){var e=ue(),t=(0,i.useState)(e?ce:null),n=t[0],r=t[1];return ae((function(){null===n&&r(ce())}),[n]),null!=n?""+n:void 0}function de(){var e=(0,i.useRef)(!1);return(0,i.useEffect)((function(){return e.current=!0,function(){e.current=!1}}),[]),e}var pe,me,he=(0,i.createContext)(null);function ve(){return(0,i.useContext)(he)}function ye(e){var t=e.value,n=e.children;return o().createElement(he.Provider,{value:t},n)}function xe(){var e=(0,i.useRef)(!0);return(0,i.useEffect)((function(){e.current=!1}),[]),e.current}function ge(){var e=[],t={requestAnimationFrame:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(){var e=requestAnimationFrame.apply(void 0,arguments);t.add((function(){return cancelAnimationFrame(e)}))})),nextFrame:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.requestAnimationFrame((function(){t.requestAnimationFrame.apply(t,n)}))},setTimeout:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(){var e=setTimeout.apply(void 0,arguments);t.add((function(){return clearTimeout(e)}))})),add:function(t){e.push(t)},dispose:function(){for(var t,n=ee(e.splice(0));!(t=n()).done;){var r=t.value;r()}}};return t}function be(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];e&&r.length>0&&(t=e.classList).add.apply(t,r)}function we(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];e&&r.length>0&&(t=e.classList).remove.apply(t,r)}function je(e,t,n,r,i,o){var a=ge(),s=void 0!==o?function(e){var t={called:!1};return function(){if(!t.called)return t.called=!0,e.apply(void 0,arguments)}}(o):function(){};return we.apply(void 0,[e].concat(i)),be.apply(void 0,[e].concat(t,n)),a.nextFrame((function(){we.apply(void 0,[e].concat(n)),be.apply(void 0,[e].concat(r)),a.add(function(e,t){var n=ge();if(!e)return n.dispose;var r=getComputedStyle(e),i=[r.transitionDuration,r.transitionDelay].map((function(e){var t=e.split(",").filter(Boolean).map((function(e){return e.includes("ms")?parseFloat(e):1e3*parseFloat(e)})).sort((function(e,t){return t-e}))[0];return void 0===t?0:t})),o=i[0],a=i[1];return 0!==o?n.setTimeout((function(){t(me.Finished)}),o+a):t(me.Finished),n.add((function(){return t(me.Cancelled)})),n.dispose}(e,(function(n){return we.apply(void 0,[e].concat(r,t)),be.apply(void 0,[e].concat(i)),s(n)})))})),a.add((function(){return we.apply(void 0,[e].concat(t,n,r,i))})),a.add((function(){return s(me.Cancelled)})),a.dispose}function ke(e){return void 0===e&&(e=""),(0,i.useMemo)((function(){return e.split(" ").filter((function(e){return e.trim().length>1}))}),[e])}he.displayName="OpenClosedContext",function(e){e[e.Open=0]="Open",e[e.Closed=1]="Closed"}(pe||(pe={})),function(e){e.Finished="finished",e.Cancelled="cancelled"}(me||(me={}));var Se,_e=(0,i.createContext)(null);_e.displayName="TransitionContext",function(e){e.Visible="visible",e.Hidden="hidden"}(Se||(Se={}));var Oe=(0,i.createContext)(null);function Ee(e){return"children"in e?Ee(e.children):e.current.filter((function(e){return e.state===Se.Visible})).length>0}function Ne(e){var t=(0,i.useRef)(e),n=(0,i.useRef)([]),r=de();(0,i.useEffect)((function(){t.current=e}),[e]);var o=(0,i.useCallback)((function(e,i){var o;void 0===i&&(i=G.Hidden);var a=n.current.findIndex((function(t){return t.id===e}));-1!==a&&(te(i,((o={})[G.Unmount]=function(){n.current.splice(a,1)},o[G.Hidden]=function(){n.current[a].state=Se.Hidden},o)),!Ee(n)&&r.current&&(null==t.current||t.current()))}),[t,r,n]),a=(0,i.useCallback)((function(e){var t=n.current.find((function(t){return t.id===e}));return t?t.state!==Se.Visible&&(t.state=Se.Visible):n.current.push({id:e,state:Se.Visible}),function(){return o(e,G.Unmount)}}),[n,o]);return(0,i.useMemo)((function(){return{children:n,register:a,unregister:o}}),[a,o,n])}function Ce(){}Oe.displayName="NestingContext";var Pe=["beforeEnter","afterEnter","beforeLeave","afterLeave"];function Ae(e){for(var t,n={},r=ee(Pe);!(t=r()).done;){var i,o=t.value;n[o]=null!=(i=e[o])?i:Ce}return n}var Te,Fe=$.RenderStrategy;function Le(e){var t,n=e.beforeEnter,r=e.afterEnter,a=e.beforeLeave,s=e.afterLeave,u=e.enter,l=e.enterFrom,c=e.enterTo,f=e.entered,d=e.leave,p=e.leaveFrom,m=e.leaveTo,h=X(e,["beforeEnter","afterEnter","beforeLeave","afterLeave","enter","enterFrom","enterTo","entered","leave","leaveFrom","leaveTo"]),v=(0,i.useRef)(null),y=(0,i.useState)(Se.Visible),x=y[0],g=y[1],b=h.unmount?G.Unmount:G.Hidden,w=function(){var e=(0,i.useContext)(_e);if(null===e)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return e}(),j=w.show,k=w.appear,S=function(){var e=(0,i.useContext)(Oe);if(null===e)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return e}(),_=S.register,O=S.unregister,E=xe(),N=fe(),C=(0,i.useRef)(!1),P=Ne((function(){C.current||(g(Se.Hidden),O(N),M.current.afterLeave())}));ae((function(){if(N)return _(N)}),[_,N]),ae((function(){var e;b===G.Hidden&&N&&(j&&x!==Se.Visible?g(Se.Visible):te(x,((e={})[Se.Hidden]=function(){return O(N)},e[Se.Visible]=function(){return _(N)},e)))}),[x,N,_,O,j,b]);var A=ke(u),T=ke(l),F=ke(c),L=ke(f),I=ke(d),D=ke(p),R=ke(m),M=function(e){var t=(0,i.useRef)(Ae(e));return(0,i.useEffect)((function(){t.current=Ae(e)}),[e]),t}({beforeEnter:n,afterEnter:r,beforeLeave:a,afterLeave:s}),V=ue();(0,i.useEffect)((function(){if(V&&x===Se.Visible&&null===v.current)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")}),[v,x,V]);var H=E&&!k;ae((function(){var e=v.current;if(e&&!H)return C.current=!0,j&&M.current.beforeEnter(),j||M.current.beforeLeave(),j?je(e,A,T,F,L,(function(e){C.current=!1,e===me.Finished&&M.current.afterEnter()})):je(e,I,D,R,L,(function(e){C.current=!1,e===me.Finished&&(Ee(P)||(g(Se.Hidden),O(N),M.current.afterLeave()))}))}),[M,N,C,O,P,v,H,j,A,T,F,I,D,R]);var B={ref:v},U=h;return o().createElement(Oe.Provider,{value:P},o().createElement(ye,{value:te(x,(t={},t[Se.Visible]=pe.Open,t[Se.Hidden]=pe.Closed,t))},ne({props:Y({},U,B),defaultTag:"div",features:Fe,visible:x===Se.Visible,name:"Transition.Child"})))}function Ie(e){var t,n=e.show,r=e.appear,a=void 0!==r&&r,s=e.unmount,u=X(e,["show","appear","unmount"]),l=ve();void 0===n&&null!==l&&(n=te(l,((t={})[pe.Open]=!0,t[pe.Closed]=!1,t)));if(![!0,!1].includes(n))throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");var c=(0,i.useState)(n?Se.Visible:Se.Hidden),f=c[0],d=c[1],p=Ne((function(){d(Se.Hidden)})),m=xe(),h=(0,i.useMemo)((function(){return{show:n,appear:a||!m}}),[n,a,m]);(0,i.useEffect)((function(){n?d(Se.Visible):Ee(p)||d(Se.Hidden)}),[n,p]);var v={unmount:s};return o().createElement(Oe.Provider,{value:p},o().createElement(_e.Provider,{value:h},ne({props:Y({},v,{as:i.Fragment,children:o().createElement(Le,Object.assign({},v,u))}),defaultTag:i.Fragment,features:Fe,visible:f===Se.Visible,name:"Transition"})))}function De(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=(0,i.useRef)(t);return(0,i.useEffect)((function(){r.current=t}),[t]),(0,i.useCallback)((function(e){for(var t,n=ee(r.current);!(t=n()).done;){var i=t.value;null!=i&&("function"==typeof i?i(e):i.current=e)}}),[r])}function Re(e){for(var t,n,r=e.parentElement,i=null;r&&!(r instanceof HTMLFieldSetElement);)r instanceof HTMLLegendElement&&(i=r),r=r.parentElement;var o=null!=(t=""===(null==(n=r)?void 0:n.getAttribute("disabled")))&&t;return(!o||!function(e){if(!e)return!1;var t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(i))&&o}function Me(e,t,n){var r=(0,i.useRef)(t);r.current=t,(0,i.useEffect)((function(){function t(e){r.current.call(window,e)}return window.addEventListener(e,t,n),function(){return window.removeEventListener(e,t,n)}}),[e,n])}Ie.Child=function(e){var t=null!==(0,i.useContext)(_e),n=null!==ve();return!t&&n?o().createElement(Ie,Object.assign({},e)):o().createElement(Le,Object.assign({},e))},Ie.Root=Ie,function(e){e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab"}(Te||(Te={}));var Ve,He,Be,Ue,qe,ze=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((function(e){return e+":not([tabindex='-1'])"})).join(",");function We(e){null==e||e.focus({preventScroll:!0})}function Ze(e,t){var n=Array.isArray(e)?e:function(e){return void 0===e&&(e=document.body),null==e?[]:Array.from(e.querySelectorAll(ze))}(e),r=document.activeElement,i=function(){if(t&(Ve.First|Ve.Next))return Be.Next;if(t&(Ve.Previous|Ve.Last))return Be.Previous;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")}(),o=function(){if(t&Ve.First)return 0;if(t&Ve.Previous)return Math.max(0,n.indexOf(r))-1;if(t&Ve.Next)return Math.max(0,n.indexOf(r))+1;if(t&Ve.Last)return n.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")}(),a=t&Ve.NoScroll?{preventScroll:!0}:{},s=0,u=n.length,l=void 0;do{var c;if(s>=u||s+u<=0)return He.Error;var f=o+s;if(t&Ve.WrapAround)f=(f+u)%u;else{if(f<0)return He.Underflow;if(f>=u)return He.Overflow}null==(c=l=n[f])||c.focus(a),s+=i}while(l!==document.activeElement);return l.hasAttribute("tabindex")||l.setAttribute("tabindex","0"),He.Success}function $e(e,t,n){void 0===t&&(t=qe.All);var r=void 0===n?{}:n,o=r.initialFocus,a=r.containers,s=(0,i.useRef)("undefined"!=typeof window?document.activeElement:null),u=(0,i.useRef)(null),l=de(),c=Boolean(t&qe.RestoreFocus),f=Boolean(t&qe.InitialFocus);(0,i.useEffect)((function(){c&&(s.current=document.activeElement)}),[c]),(0,i.useEffect)((function(){if(c)return function(){We(s.current),s.current=null}}),[c]),(0,i.useEffect)((function(){if(f&&e.current){var t=document.activeElement;if(null==o?void 0:o.current){if((null==o?void 0:o.current)===t)return void(u.current=t)}else if(e.current.contains(t))return void(u.current=t);(null==o?void 0:o.current)?We(o.current):Ze(e.current,Ve.First)===He.Error&&console.warn("There are no focusable elements inside the <FocusTrap />"),u.current=document.activeElement}}),[e,o,f]),Me("keydown",(function(n){t&qe.TabLock&&e.current&&n.key===Te.Tab&&(n.preventDefault(),Ze(e.current,(n.shiftKey?Ve.Previous:Ve.Next)|Ve.WrapAround)===He.Success&&(u.current=document.activeElement))})),Me("focus",(function(n){if(t&qe.FocusLock){var r=new Set(null==a?void 0:a.current);if(r.add(e),r.size){var i=u.current;if(i&&l.current){var o=n.target;o&&o instanceof HTMLElement?!function(e,t){for(var n,r=ee(e);!(n=r()).done;){var i;if(null==(i=n.value.current)?void 0:i.contains(t))return!0}return!1}(r,o)?(n.preventDefault(),n.stopPropagation(),We(i)):(u.current=o,We(o)):We(u.current)}}}}),!0)}!function(e){e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll"}(Ve||(Ve={})),function(e){e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow"}(He||(He={})),function(e){e[e.Previous=-1]="Previous",e[e.Next=1]="Next"}(Be||(Be={})),function(e){e[e.Strict=0]="Strict",e[e.Loose=1]="Loose"}(Ue||(Ue={})),function(e){e[e.None=1]="None",e[e.InitialFocus=2]="InitialFocus",e[e.TabLock=4]="TabLock",e[e.FocusLock=8]="FocusLock",e[e.RestoreFocus=16]="RestoreFocus",e[e.All=30]="All"}(qe||(qe={}));var Ge=new Set,Je=new Map;function Ke(e){e.setAttribute("aria-hidden","true"),e.inert=!0}function Ye(e){var t=Je.get(e);t&&(null===t["aria-hidden"]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",t["aria-hidden"]),e.inert=t.inert)}var Xe=(0,i.createContext)(!1);function Qe(e){return o().createElement(Xe.Provider,{value:e.force},e.children)}const et=ReactDOM;function tt(){var e=(0,i.useContext)(Xe),t=(0,i.useContext)(ot),n=(0,i.useState)((function(){if(!e&&null!==t)return null;if("undefined"==typeof window)return null;var n=document.getElementById("headlessui-portal-root");if(n)return n;var r=document.createElement("div");return r.setAttribute("id","headlessui-portal-root"),document.body.appendChild(r)})),r=n[0],o=n[1];return(0,i.useEffect)((function(){e||null!==t&&o(t.current)}),[t,o,e]),r}var nt=i.Fragment;function rt(e){var t=e,n=tt(),r=(0,i.useState)((function(){return"undefined"==typeof window?null:document.createElement("div")}))[0],o=ue();return ae((function(){if(n&&r)return n.appendChild(r),function(){var e;n&&(r&&(n.removeChild(r),n.childNodes.length<=0&&(null==(e=n.parentElement)||e.removeChild(n))))}}),[n,r]),o&&n&&r?(0,et.createPortal)(ne({props:t,defaultTag:nt,name:"Portal"}),r):null}var it=i.Fragment,ot=(0,i.createContext)(null);rt.Group=function(e){var t=e.target,n=X(e,["target"]);return o().createElement(ot.Provider,{value:t},ne({props:n,defaultTag:it,name:"Popover.Group"}))};var at=(0,i.createContext)(null);function st(){var e=(0,i.useContext)(at);if(null===e){var t=new Error("You used a <Description /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,st),t}return e}var ut,lt,ct,ft,dt=(0,i.createContext)((function(){}));function pt(e){var t=e.children,n=e.onUpdate,r=e.type,a=e.element,s=(0,i.useContext)(dt),u=(0,i.useCallback)((function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];null==n||n.apply(void 0,t),s.apply(void 0,t)}),[s,n]);return ae((function(){return u(ut.Add,r,a),function(){return u(ut.Remove,r,a)}}),[u,r,a]),o().createElement(dt.Provider,{value:u},t)}dt.displayName="StackContext",function(e){e[e.Add=0]="Add",e[e.Remove=1]="Remove"}(ut||(ut={})),function(e){e[e.Open=0]="Open",e[e.Closed=1]="Closed"}(ct||(ct={})),function(e){e[e.SetTitleId=0]="SetTitleId"}(ft||(ft={}));var mt=((lt={})[ft.SetTitleId]=function(e,t){return e.titleId===t.id?e:Y({},e,{titleId:t.id})},lt),ht=(0,i.createContext)(null);function vt(e){var t=(0,i.useContext)(ht);if(null===t){var n=new Error("<"+e+" /> is missing a parent <"+wt.displayName+" /> component.");throw Error.captureStackTrace&&Error.captureStackTrace(n,vt),n}return t}function yt(e,t){return te(t.type,mt,e,t)}ht.displayName="DialogContext";var xt=$.RenderStrategy|$.Static,gt=ie((function(e,t){var n,r=e.open,a=e.onClose,s=e.initialFocus,u=X(e,["open","onClose","initialFocus"]),l=(0,i.useState)(0),c=l[0],f=l[1],d=ve();void 0===r&&null!==d&&(r=te(d,((n={})[pe.Open]=!0,n[pe.Closed]=!1,n)));var p=(0,i.useRef)(new Set),m=(0,i.useRef)(null),h=De(m,t),v=e.hasOwnProperty("open")||null!==d,y=e.hasOwnProperty("onClose");if(!v&&!y)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!v)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!y)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if("boolean"!=typeof r)throw new Error("You provided an `open` prop to the `Dialog`, but the value is not a boolean. Received: "+r);if("function"!=typeof a)throw new Error("You provided an `onClose` prop to the `Dialog`, but the value is not a function. Received: "+a);var x=r?ct.Open:ct.Closed,g=null!==d?d===pe.Open:x===ct.Open,b=(0,i.useReducer)(yt,{titleId:null,descriptionId:null}),w=b[0],j=b[1],k=(0,i.useCallback)((function(){return a(!1)}),[a]),S=(0,i.useCallback)((function(e){return j({type:ft.SetTitleId,id:e})}),[j]),_=ue()&&x===ct.Open,O=c>1,E=null!==(0,i.useContext)(ht);$e(m,_?te(O?"parent":"leaf",{parent:qe.RestoreFocus,leaf:qe.All}):qe.None,{initialFocus:s,containers:p}),function(e,t){void 0===t&&(t=!0),ae((function(){if(t&&e.current){var n=e.current;Ge.add(n);for(var r,i=ee(Je.keys());!(r=i()).done;){var o=r.value;o.contains(n)&&(Ye(o),Je.delete(o))}return document.querySelectorAll("body > *").forEach((function(e){if(e instanceof HTMLElement){for(var t,n=ee(Ge);!(t=n()).done;){var r=t.value;if(e.contains(r))return}1===Ge.size&&(Je.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),Ke(e))}})),function(){if(Ge.delete(n),Ge.size>0)document.querySelectorAll("body > *").forEach((function(e){if(e instanceof HTMLElement&&!Je.has(e)){for(var t,n=ee(Ge);!(t=n()).done;){var r=t.value;if(e.contains(r))return}Je.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),Ke(e)}}));else for(var e,t=ee(Je.keys());!(e=t()).done;){var r=e.value;Ye(r),Je.delete(r)}}}}),[t])}(m,!!O&&_),Me("mousedown",(function(e){var t,n=e.target;x===ct.Open&&(O||(null==(t=m.current)?void 0:t.contains(n))||k())})),Me("keydown",(function(e){e.key===Te.Escape&&x===ct.Open&&(O||(e.preventDefault(),e.stopPropagation(),k()))})),(0,i.useEffect)((function(){if(x===ct.Open&&!E){var e=document.documentElement.style.overflow,t=document.documentElement.style.paddingRight,n=window.innerWidth-document.documentElement.clientWidth;return document.documentElement.style.overflow="hidden",document.documentElement.style.paddingRight=n+"px",function(){document.documentElement.style.overflow=e,document.documentElement.style.paddingRight=t}}}),[x,E]),(0,i.useEffect)((function(){if(x===ct.Open&&m.current){var e=new IntersectionObserver((function(e){for(var t,n=ee(e);!(t=n()).done;){var r=t.value;0===r.boundingClientRect.x&&0===r.boundingClientRect.y&&0===r.boundingClientRect.width&&0===r.boundingClientRect.height&&k()}}));return e.observe(m.current),function(){return e.disconnect()}}}),[x,m,k]);var N=function(){var e=(0,i.useState)([]),t=e[0],n=e[1];return[t.length>0?t.join(" "):void 0,(0,i.useMemo)((function(){return function(e){var t=(0,i.useCallback)((function(e){return n((function(t){return[].concat(t,[e])})),function(){return n((function(t){var n=t.slice(),r=n.indexOf(e);return-1!==r&&n.splice(r,1),n}))}}),[]),r=(0,i.useMemo)((function(){return{register:t,slot:e.slot,name:e.name,props:e.props}}),[t,e.slot,e.name,e.props]);return o().createElement(at.Provider,{value:r},e.children)}}),[n])]}(),C=N[0],P=N[1],A="headlessui-dialog-"+fe(),T=(0,i.useMemo)((function(){return[{dialogState:x,close:k,setTitleId:S},w]}),[x,w,k,S]),F=(0,i.useMemo)((function(){return{open:x===ct.Open}}),[x]),L={ref:h,id:A,role:"dialog","aria-modal":x===ct.Open||void 0,"aria-labelledby":w.titleId,"aria-describedby":C,onClick:function(e){e.stopPropagation()}},I=u;return o().createElement(pt,{type:"Dialog",element:m,onUpdate:(0,i.useCallback)((function(e,t,n){var r;"Dialog"===t&&te(e,((r={})[ut.Add]=function(){p.current.add(n),f((function(e){return e+1}))},r[ut.Remove]=function(){p.current.add(n),f((function(e){return e-1}))},r))}),[])},o().createElement(Qe,{force:!0},o().createElement(rt,null,o().createElement(ht.Provider,{value:T},o().createElement(rt.Group,{target:m},o().createElement(Qe,{force:!1},o().createElement(P,{slot:F,name:"Dialog.Description"},ne({props:Y({},I,L),slot:F,defaultTag:"div",features:xt,visible:g,name:"Dialog"}))))))))})),bt=ie((function e(t,n){var r=vt([wt.displayName,e.name].join("."))[0],o=r.dialogState,a=r.close,s=De(n),u="headlessui-dialog-overlay-"+fe(),l=(0,i.useCallback)((function(e){if(Re(e.currentTarget))return e.preventDefault();e.preventDefault(),e.stopPropagation(),a()}),[a]),c=(0,i.useMemo)((function(){return{open:o===ct.Open}}),[o]);return ne({props:Y({},t,{ref:s,id:u,"aria-hidden":!0,onClick:l}),slot:c,defaultTag:"div",name:"Dialog.Overlay"})}));var wt=Object.assign(gt,{Overlay:bt,Title:function e(t){var n=vt([wt.displayName,e.name].join("."))[0],r=n.dialogState,o=n.setTitleId,a="headlessui-dialog-title-"+fe();(0,i.useEffect)((function(){return o(a),function(){return o(null)}}),[a,o]);var s=(0,i.useMemo)((function(){return{open:r===ct.Open}}),[r]);return ne({props:Y({},t,{id:a}),slot:s,defaultTag:"h2",name:"Dialog.Title"})},Description:function(e){var t=st(),n="headlessui-description-"+fe();ae((function(){return t.register(n)}),[n,t.register]);var r=e,i=Y({},t.props,{id:n});return ne({props:Y({},r,i),slot:t.slot||{},defaultTag:"p",name:t.name||"Description"})}});const jt=wp.i18n;var kt=function(){return F.get("meta-data")},St=function(e){return F.post("simple-ping",{action:e})},_t=n(246);function Ot(){var e=b((function(e){return e.updateSearchParams})),t=function(t){St("welcome-".concat(null!=t?t:"closed")),K.setState({hasClickedThroughWelcomePage:!0}),e({type:null!=t?t:"pattern"}),w.setState({currentPage:"main"})};(0,r.useEffect)((function(){St("welcome-opened")}),[]);var n=(0,_t.jsx)("div",{className:"w-full h-16 relative z-10 border-solid border-0 flex-shrink-0",children:(0,_t.jsxs)("div",{className:"flex justify-between items-center px-6 sm:px-12 h-full",children:[(0,_t.jsx)("div",{className:"flex space-x-12 h-full"}),(0,_t.jsx)("div",{className:"space-x-2 transform sm:translate-x-8",children:(0,_t.jsxs)("button",{type:"button",className:"components-button has-icon",onClick:function(){return t()},children:[(0,_t.jsx)("svg",{width:"24",height:"24",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",size:"24",role:"img","aria-hidden":"true",focusable:"false",children:(0,_t.jsx)("path",{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"})}),(0,_t.jsx)("span",{className:"sr-only",children:(0,jt.__)("Close library","extendify-sdk")})]})})]})}),i="Redux"===window.extendifySdkData.source?(0,jt.__)("Welcome to the Redux Library by Extendify","extendify-sdk"):(0,jt.__)("Welcome to the Extendify library","extendify-sdk");return(0,_t.jsxs)("div",{className:"w-full h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto bg-white",children:[n,(0,_t.jsxs)("section",{className:"flex-grow w-full justify-between flex flex-col overflow-y-scroll",children:[(0,_t.jsx)("div",{className:"flex items-center flex-grow",children:(0,_t.jsxs)("div",{className:"w-full p-8 max-w-screen-2xl mx-auto lg:space-x-16 lg:flex space-y-16 lg:space-y-0",children:[(0,_t.jsxs)("div",{className:"flex-grow text-left",children:[(0,_t.jsx)("h1",{className:"m-0 mb-10 text-5xl",children:i}),(0,_t.jsxs)("div",{className:"max-w-2xl mb-24",children:[(0,_t.jsx)("p",{className:"mb-10 leading-loose",children:(0,jt.__)("Congratulations! You have access to our entire library of Gutenberg patterns and templates. You can add up to 3 templates or patterns to your site completely free.","extendify-sdk")}),(0,_t.jsx)("p",{className:"mb-6 leading-loose",children:(0,jt.__)("All patterns and templates are pre-designed to look beautiful with options to fit your style. They also keep your site running lightning fast by using only core blocks with no 3rd party page builder required.","extendify-sdk")}),(0,_t.jsx)("a",{className:"text-sm text-extendify-link underline",href:"https://extendify.com?utm_source=".concat(window.extendifySdkData.source,"&utm_medium=library&utm_campaign=welcome"),target:"_blank",rel:"noreferrer",children:(0,jt.__)("Learn more about Extendify","extendify-sdk")})]}),(0,_t.jsx)("h2",{className:"font-bold border-b border-black max-w-lg pb-2 mb-1",children:(0,jt.__)("Don't want the library in your editor?","extendify-sdk")}),(0,_t.jsxs)("div",{className:"",children:[(0,_t.jsx)("p",{children:(0,jt.sprintf)((0,jt.__)("Extendify was included with the %s plugin.","extendify-sdk"),window.extendifySdkData.source)}),(0,_t.jsx)("a",{className:"text-xs text-extendify-link underline",href:"https://extendify.com/how-to-disable-the-extendify-library/?utm_source=".concat(window.extendifySdkData.source,"&utm_medium=library&utm_campaign=welcome"),target:"_blank",rel:"noreferrer",children:(0,jt.__)("Learn how to remove the library","extendify-sdk")})]})]}),(0,_t.jsx)("div",{className:"flex-shrink-0 flex items-end",children:(0,_t.jsxs)("div",{className:"flex-grow flex items-center space-y-4 xl:space-y-8 flex-col",children:[(0,_t.jsxs)("button",{type:"button",onClick:function(){return t("pattern")},className:"bg-white hover:bg-gray-50 cursor-pointer border border-gray-300 flex space-y-4 flex-col items-center justify-center p-8 lg:px-0 w-80",children:[(0,_t.jsx)("h3",{className:"m-0 text-gray-900",children:(0,jt.__)("Sections","extendify-sdk")}),(0,_t.jsx)("span",{children:(0,_t.jsxs)("svg",{className:"mt-1",xmlns:"http://www.w3.org/2000/svg",width:"206",height:"122",viewBox:"0 0 206 122",fill:"none",children:[(0,_t.jsx)("path",{d:"M69 0H0V59H69V0Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M204 0H79V60H204V0Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M62.166 25H9.16602V28H62.166V25Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M63.166 18H10.166V21H63.166V18Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M62.166 34H9.16602V39H62.166V34Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M62.166 43H9.16602V48H62.166V43Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M140.166 25H87.166V28H140.166V25Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M140.166 34H87.166V39H140.166V34Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M140.166 43H87.166V48H140.166V43Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M197.166 25H151.166V28H197.166V25Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M141.166 17H88.166V20H141.166V17Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M198.166 17H152.166V20H198.166V17Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M62.166 10H9.16602V13H62.166V10Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M140.166 9H87.166V12H140.166V9Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M197.166 9H151.166V12H197.166V9Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M197.166 34H151.166V39H197.166V34Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M197.166 43H151.166V48H197.166V43Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M154.172 77.8088H0V121.216H154.172V77.8088Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M133.637 110.446C141.077 110.446 147.109 104.75 147.109 97.7229C147.109 90.6963 141.077 85 133.637 85C126.197 85 120.166 90.6963 120.166 97.7229C120.166 104.75 126.197 110.446 133.637 110.446Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M205.166 78H162.166V121H205.166V78Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M183.803 111.637C191.243 111.637 197.275 105.941 197.275 98.9141C197.275 91.8874 191.243 86.1912 183.803 86.1912C176.363 86.1912 170.332 91.8874 170.332 98.9141C170.332 105.941 176.363 111.637 183.803 111.637Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M113.695 88.7898H13.4082V100.764H113.695V88.7898Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M113.695 105.255H13.4082V109.745H113.695V105.255Z",fill:"#F9F9F9"})]})}),(0,_t.jsx)("span",{className:"text-extendify-bright underline text-base font-bold",children:(0,jt.__)("View patterns","extendify-sdk")})]}),(0,_t.jsxs)("button",{type:"button",onClick:function(){return t("template")},className:"bg-white hover:bg-gray-50 cursor-pointer border border-gray-300 flex space-y-4 flex-col items-center justify-center p-8 lg:px-0 w-80",children:[(0,_t.jsx)("h3",{className:"m-0 text-gray-900",children:(0,jt.__)("Full pages","extendify-sdk")}),(0,_t.jsx)("span",{children:(0,_t.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"156",height:"128",viewBox:"0 0 156 128",fill:"none",children:[(0,_t.jsx)("path",{d:"M155.006 38.4395H0.833984V81.8471H155.006V38.4395Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M155 0H1V36H155V0Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M148 7H10V28H148V7Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M147.521 47.4204H9.81445V50.414H147.521V47.4204Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M147.521 56.4012H9.81445V60.8917H147.521V56.4012Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M147.521 65.3821H9.81445V69.8726H147.521V65.3821Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M155.006 83.8089H0.833984V127.217H155.006V83.8089Z",fill:"#DFDFDF"}),(0,_t.jsx)("path",{d:"M21.7897 118.236C29.2297 118.236 35.261 112.539 35.261 105.513C35.261 98.486 29.2297 92.7898 21.7897 92.7898C14.3497 92.7898 8.31836 98.486 8.31836 105.513C8.31836 112.539 14.3497 118.236 21.7897 118.236Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M144.529 92.7898H44.2422V104.764H144.529V92.7898Z",fill:"#F9F9F9"}),(0,_t.jsx)("path",{d:"M144.529 109.255H44.2422V113.745H144.529V109.255Z",fill:"#F9F9F9"})]})}),(0,_t.jsx)("span",{className:"text-extendify-bright underline text-base font-bold",children:(0,jt.__)("View templates","extendify-sdk")})]})]})})]})}),(0,_t.jsxs)("footer",{className:"flex justify-between p-14 w-full",children:[(0,_t.jsx)("div",{children:(0,_t.jsxs)("svg",{className:"block",width:"64",height:"64",viewBox:"0 0 103 103",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,_t.jsx)("rect",{y:"25.75",width:"70.8125",height:"77.25",fill:"#000000"}),(0,_t.jsx)("rect",{x:"45.0625",width:"57.9375",height:"57.9375",fill:"#37C2A2"})]})}),(0,_t.jsx)("button",{type:"button",onClick:function(){return t()},className:"bg-transparent cursor-pointer text-lg text-extendify-link underline",children:(0,jt.__)("Go to library","extendify-sdk")})]})]})]})}const Et=lodash,Nt=wp.components;var Ct=n(42),Pt=n.n(Ct);function At(e){return function(e){if(Array.isArray(e))return Tt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Tt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Tt(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Tt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Ft=u((function(e,t){return{taxonomies:{},openedTaxonomies:[],setTaxonomies:function(t){return e({taxonomies:t})},toggleOpenedTaxonomy:function(n,r){var i=t().openedTaxonomies;e({openedTaxonomies:r?[].concat(At(i),[n]):At(i.filter((function(e){return e!=n})))})}}}));function Lt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function It(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Dt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Rt(e){var t,n=It(e.taxonomy,2),i=n[0],o=n[1],a=b((function(e){return e.updateTaxonomies})),s=b((function(e){return e.resetTaxonomy})),u=b((function(e){return e.searchParams})),l=Ft((function(e){return e.openedTaxonomies})),c=Ft((function(e){return e.toggleOpenedTaxonomy})),f=It((0,r.useState)({}),2),d=f[0],p=f[1],m=It((0,r.useState)({}),2),h=m[0],v=m[1],y=(0,r.useRef)(),x=(0,r.useRef)(),g=(0,r.useRef)(),w=(0,r.useRef)(!0),j=function(e){var t;return(null==u?void 0:u.taxonomies[i])===e.term||(null===(t=e.children)||void 0===t?void 0:t.filter((function(e){return e.term===(null==u?void 0:u.taxonomies[i])})).length)>0},k=(0,r.useCallback)((function(e){var t;return Object.prototype.hasOwnProperty.call(e,"children")?e.children.filter((function(e){return null==e?void 0:e.type.includes(u.type)})).length:null==e||null===(t=e.type)||void 0===t?void 0:t.includes(u.type)}),[u.type]);if((0,r.useEffect)((function(){w.current?w.current=!1:p({})}),[u.type]),(0,r.useEffect)((function(){Object.keys(d).length?setTimeout((function(){requestAnimationFrame((function(){v(y.current.clientHeight),g.current.focus()}))}),200):v("auto")}),[d]),(0,r.useEffect)((function(){!Object.values(o).filter((function(e){return k(e)})).length&&s(i)}),[s,i,k,o]),!Object.keys(o).length||!Object.values(o).filter((function(e){return k(e)})).length)return"";var S=i.replace("tax_","").replace(/_/g," ").replace(/\b\w/g,(function(e){return e.toUpperCase()}));return(0,_t.jsx)(Nt.PanelBody,{title:S,initialOpen:l.includes(i),onToggle:function(e){return c(i,e)},children:(0,_t.jsx)(Nt.PanelRow,{children:(0,_t.jsxs)("div",{className:"overflow-hidden w-full relative",style:{height:h},children:[(0,_t.jsxs)("ul",{className:Pt()("p-1 m-0 w-full transform transition duration-200",{"-translate-x-full":Object.keys(d).length}),children:[(0,_t.jsx)("li",{className:"m-0",children:(0,_t.jsx)("button",{type:"button",className:"text-left cursor-pointer w-full flex justify-between items-center py-1.5 m-0 leading-none hover:text-wp-theme-500 bg-transparent transition duration-200 button-focus",ref:x,onClick:function(){a(Lt({},i,"pattern"===u.type&&"tax_categories"===i?"Default":""))},children:(0,_t.jsx)("span",{className:Pt()({"text-wp-theme-500":!(null!==(t=u.taxonomies[i])&&void 0!==t&&t.length)||"Default"===(null==u?void 0:u.taxonomies[i])}),children:"pattern"===u.type&&"tax_categories"===i?(0,jt.__)("Default","extendify-sdk"):(0,jt.__)("All","extendify-sdk")})})}),Object.values(o).filter((function(e){return k(e)})).sort((function(e,t){return e.term.localeCompare(t.term)})).map((function(e){return(0,_t.jsx)("li",{className:"m-0 w-full",children:(0,_t.jsxs)("button",{type:"button",className:"text-left cursor-pointer w-full flex justify-between items-center py-1.5 m-0 leading-none bg-transparent hover:text-wp-theme-500 transition duration-200 button-focus",onClick:function(){Object.prototype.hasOwnProperty.call(e,"children")?p(e):a(Lt({},i,e.term))},children:[(0,_t.jsx)("span",{className:Pt()({"text-wp-theme-500":j(e)}),children:e.term}),Object.prototype.hasOwnProperty.call(e,"children")&&(0,_t.jsx)("span",{className:"text-black",children:(0,_t.jsx)("svg",{width:"8",height:"14",viewBox:"0 0 8 14",className:"stroke-current",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,_t.jsx)("path",{d:"M1 12.5L6 6.99998L1 1.5",strokeWidth:"1.5"})})})]})},e.term)}))]}),(0,_t.jsxs)("ul",{ref:y,className:Pt()("p-1 m-0 w-full transform transition duration-200 absolute top-0 right-0",{"translate-x-full":!Object.keys(d).length}),children:[Object.values(d).length>0&&(0,_t.jsx)("li",{className:"m-0",children:(0,_t.jsxs)("button",{type:"button",className:"text-left cursor-pointer font-bold flex space-x-4 items-center py-2 pr-4 m-0leading-none hover:text-wp-theme-500 bg-transparent transition duration-200 button-focus",ref:g,onClick:function(){p({}),x.current.focus()},children:[(0,_t.jsx)("svg",{className:"stroke-current transform rotate-180",width:"8",height:"14",viewBox:"0 0 8 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,_t.jsx)("path",{d:"M1 12.5L6 6.99998L1 1.5",strokeWidth:"1.5"})}),(0,_t.jsx)("span",{children:d.term})]})}),Object.values(d).length&&Object.values(d.children).filter((function(e){return k(e)})).sort((function(e,t){return e.term.localeCompare(t.term)})).map((function(e){return(0,_t.jsx)("li",{className:"m-0 pl-6 w-full flex justify-between items-center",children:(0,_t.jsx)("button",{type:"button",className:"text-left cursor-pointer w-full flex justify-between items-center py-1.5 m-0 leading-none bg-transparent hover:text-wp-theme-500 transition duration-200 button-focus",onClick:function(){a(Lt({},i,e.term))},children:(0,_t.jsx)("span",{className:Pt()({"text-wp-theme-500":j(e)}),children:e.term})})},e.term)}))]})]})})})}function Mt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Vt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Vt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ht(){var e,t=b((function(e){return e.updateSearchParams})),n=Ft((function(e){return e.taxonomies})),i=b((function(e){return e.searchParams})),o=(0,Et.debounce)((function(e){return t({taxonomies:{},search:e})}),500),a=Mt((0,r.useState)(null!==(e=null==i?void 0:i.search)&&void 0!==e?e:""),2),s=a[0],u=a[1];return(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsxs)("div",{className:"mt-px bg-white mb-6 mx-6 pt-6 lg:mx-0 lg:pt-0",children:[(0,_t.jsx)("label",{className:"sr-only",htmlFor:"extendify-search-input",children:(0,jt.__)("What are you looking for?","extendify-sdk")}),(0,_t.jsx)("input",{id:"extendify-search-input",type:"search",placeholder:(0,jt.__)("What are you looking for?","extendify-sdk"),onChange:function(e){b.setState({nextPage:""}),u(e.target.value),o(e.target.value)},value:s,className:"button-focus bg-gray-100 focus:bg-white border-0 m-0 p-3.5 pb-3 rounded-none text-sm w-full",autoComplete:"off"}),(0,_t.jsx)("svg",{className:"absolute top-3 right-6 hidden lg:block pointer-events-none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24",role:"img","aria-hidden":"true",focusable:"false",children:(0,_t.jsx)("path",{d:"M13.5 6C10.5 6 8 8.5 8 11.5c0 1.1.3 2.1.9 3l-3.4 3 1 1.1 3.4-2.9c1 .9 2.2 1.4 3.6 1.4 3 0 5.5-2.5 5.5-5.5C19 8.5 16.5 6 13.5 6zm0 9.5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"})})]}),(0,_t.jsx)("div",{className:"mt-px flex-grow hidden overflow-y-auto pb-32 pr-2 pt-px sm:block",children:(0,_t.jsx)(Nt.Panel,{children:Object.entries(n).map((function(e){return(0,_t.jsx)(Rt,{taxonomy:e},e[0])}))})})]})}function Bt(e){var t=e.taxonomies,n=e.search,r=e.type,i=[],o=Object.entries(t).filter((function(e){return Boolean(e[1].length)})).map((function(e){return"".concat(e[0],' = "').concat(e[1],'"')})).join(", ");return o.length&&i.push(o),(null==n?void 0:n.length)&&i.push('OR(FIND(LOWER("'.concat(n,'"), LOWER(title))!= 0, FIND(LOWER("').concat(n,'"), LOWER({tax_categories})) != 0)')),r.length&&i.push('{type}="'.concat(r,'"')),i.length?"AND(".concat(i.join(", "),")").replace(/\r?\n|\r/g,""):""}function Ut(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function qt(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){Ut(o,r,i,a,s,"next",e)}function s(e){Ut(o,r,i,a,s,"throw",e)}a(void 0)}))}}var zt=0,Wt=function(e){var t=arguments;return qt(k().mark((function n(){var r,i,o,a;return k().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o=t.length>1&&void 0!==t[1]?t[1]:{},zt++,n.next=4,F.post("templates",{filterByFormula:Bt(e),pageSize:null!==(r=null==o?void 0:o.pageSize)&&void 0!==r?r:c,categories:e.taxonomies,search:e.search,type:e.type,offset:null!==(i=o.offset)&&void 0!==i?i:"",initial:1===zt,request_count:zt});case 4:return a=n.sent,n.abrupt("return",a);case 6:case"end":return n.stop()}}),n)})))()},Zt=function(e,t,n){var r,i,o,a;return F.post("related",{pageSize:4,query_type:t,wanted_type:n,categories:null==e||null===(r=e.fields)||void 0===r?void 0:r.tax_categories,pattern_types:null==e||null===(i=e.fields)||void 0===i?void 0:i.tax_pattern_types,style:null==e||null===(o=e.fields)||void 0===o?void 0:o.tax_style,type:null==e||null===(a=e.fields)||void 0===a?void 0:a.type,template_id:null==e?void 0:e.id})},$t=function(e){var t;return F.post("templates/".concat(e.id),{template_id:e.id,maybe_import:!0,type:e.fields.type,pageSize:c,template_name:null===(t=e.fields)||void 0===t?void 0:t.title})},Gt=function(e){var t;return F.post("templates/".concat(e.id),{template_id:e.id,single:!0,type:e.fields.type,pageSize:c,template_name:null===(t=e.fields)||void 0===t?void 0:t.title})},Jt=function(e){var t;return F.post("templates/".concat(e.id),{template_id:e.id,imported:!0,type:e.fields.type,pageSize:c,template_name:null===(t=e.fields)||void 0===t?void 0:t.title})};function Kt(){return(Kt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var Yt=new Map,Xt=new WeakMap,Qt=0;function en(e){return Object.keys(e).sort().filter((function(t){return void 0!==e[t]})).map((function(t){return t+"_"+("root"===t?(n=e.root)?(Xt.has(n)||(Qt+=1,Xt.set(n,Qt.toString())),Xt.get(n)):"0":e[t]);var n})).toString()}function tn(e,t,n){if(void 0===n&&(n={}),!e)return function(){};var r=function(e){var t=en(e),n=Yt.get(t);if(!n){var r,i=new Map,o=new IntersectionObserver((function(t){t.forEach((function(t){var n,o=t.isIntersecting&&r.some((function(e){return t.intersectionRatio>=e}));e.trackVisibility&&void 0===t.isVisible&&(t.isVisible=o),null==(n=i.get(t.target))||n.forEach((function(e){e(o,t)}))}))}),e);r=o.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:o,elements:i},Yt.set(t,n)}return n}(n),i=r.id,o=r.observer,a=r.elements,s=a.get(e)||[];return a.has(e)||a.set(e,s),s.push(t),o.observe(e),function(){s.splice(s.indexOf(t),1),0===s.length&&(a.delete(e),o.unobserve(e)),0===a.size&&(o.disconnect(),Yt.delete(i))}}function nn(e){return"function"!=typeof e.children}var rn=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).node=null,n._unobserveCb=null,n.handleNode=function(e){n.node&&(n.unobserve(),e||n.props.triggerOnce||n.props.skip||n.setState({inView:!!n.props.initialInView,entry:void 0})),n.node=e||null,n.observeNode()},n.handleChange=function(e,t){e&&n.props.triggerOnce&&n.unobserve(),nn(n.props)||n.setState({inView:e,entry:t}),n.props.onChange&&n.props.onChange(e,t)},n.state={inView:!!t.initialInView,entry:void 0},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=r.prototype;return o.componentDidUpdate=function(e){e.rootMargin===this.props.rootMargin&&e.root===this.props.root&&e.threshold===this.props.threshold&&e.skip===this.props.skip&&e.trackVisibility===this.props.trackVisibility&&e.delay===this.props.delay||(this.unobserve(),this.observeNode())},o.componentWillUnmount=function(){this.unobserve(),this.node=null},o.observeNode=function(){if(this.node&&!this.props.skip){var e=this.props,t=e.threshold,n=e.root,r=e.rootMargin,i=e.trackVisibility,o=e.delay;this._unobserveCb=tn(this.node,this.handleChange,{threshold:t,root:n,rootMargin:r,trackVisibility:i,delay:o})}},o.unobserve=function(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)},o.render=function(){if(!nn(this.props)){var e=this.state,t=e.inView,n=e.entry;return this.props.children({inView:t,entry:n,ref:this.handleNode})}var r=this.props,o=r.children,a=r.as,s=r.tag,u=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(r,["children","as","tag","triggerOnce","threshold","root","rootMargin","onChange","skip","trackVisibility","delay","initialInView"]);return(0,i.createElement)(a||s||"div",Kt({ref:this.handleNode},u),o)},r}(i.Component);rn.displayName="InView",rn.defaultProps={threshold:0,triggerOnce:!1,initialInView:!1};function on(){var e=(0,r.useRef)(!1);return(0,r.useEffect)((function(){return e.current=!0,function(){return e.current=!1}})),e}function an(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return sn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function sn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var un=function(){return(0,_t.jsx)("div",{className:"aspect-w-1 aspect-h-1",children:(0,_t.jsx)("div",{className:"w-full h-full flex items-center justify-center bg-gray-100",children:(0,_t.jsx)(Nt.Spinner,{})})})};function ln(e){var t,n,i=e.template,o=e.imageLoaded,a=e.setActiveTemplate,s=an((0,r.useState)(!1),2),u=s[0],l=s[1],c=(0,r.useRef)(),f=on();return(0,r.useEffect)((function(){var e,t,n,r,a,s,d;if(!u&&f.current){var p=new Image;p.role="button",p.className="max-w-full block m-auto object-cover",p.onload=function(){f.current&&(l(!0),c.current&&c.current.appendChild(p),o(i.id))},p.src=null!==(e=null==i||null===(t=i.fields)||void 0===t||null===(n=t.screenshot[0])||void 0===n||null===(r=n.thumbnails)||void 0===r||null===(a=r.large)||void 0===a?void 0:a.url)&&void 0!==e?e:null==i||null===(s=i.fields)||void 0===s||null===(d=s.screenshot[0])||void 0===d?void 0:d.url}}),[i,o,u,f]),u?(0,_t.jsxs)("div",{className:"flex flex-col justify-between group overflow-hidden max-w-lg",children:[(0,_t.jsx)("div",{className:"flex justify-items-center flex-grow h-80 border-gray-200 bg-white border border-b-0 group-hover:border-wp-theme-500 transition duration-150 cursor-pointer overflow-hidden",onClick:a,ref:c}),(0,_t.jsx)("span",{role:"img","aria-hidden":"true",className:"h-px w-full bg-gray-200 border group-hover:bg-transparent border-t-0 border-b-0 border-gray-200 group-hover:border-wp-theme-500 transition duration-150"}),(0,_t.jsxs)("div",{className:"bg-transparent text-left bg-white flex items-center justify-between p-4 border border-t-0 border-transparent group-hover:border-wp-theme-500 transition duration-150 cursor-pointer",role:"button",onClick:a,children:[(0,_t.jsxs)("div",{children:[(0,_t.jsx)("h4",{className:"m-0 font-bold",children:i.fields.display_title}),(0,_t.jsx)("p",{className:"m-0",children:null==i||null===(t=i.fields)||void 0===t||null===(n=t.tax_categories)||void 0===n?void 0:n.filter((function(e){return"default"!==e.toLowerCase()})).join(", ")})]}),(0,_t.jsx)(Nt.Button,{isSecondary:!0,className:"sm:opacity-0 group-hover:opacity-100 transition duration-150 focus:opacity-100",onClick:function(e){e.stopPropagation(),a()},children:(0,jt.__)("View","extendify-sdk")})]})]}):(0,_t.jsx)(un,{})}function cn(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function fn(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){cn(o,r,i,a,s,"next",e)}function s(e){cn(o,r,i,a,s,"throw",e)}a(void 0)}))}}function dn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return pn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function mn(){var e=on(),t=b((function(e){return e.templates})),n=b((function(e){return e.setActive})),o=b((function(e){return e.appendTemplates})),a=dn((0,r.useState)(""),2),s=a[0],u=a[1],l=dn((0,r.useState)(!1),2),c=l[0],f=l[1],d=dn(function(e){var t=void 0===e?{}:e,n=t.threshold,r=t.delay,o=t.trackVisibility,a=t.rootMargin,s=t.root,u=t.triggerOnce,l=t.skip,c=t.initialInView,f=(0,i.useRef)(),d=(0,i.useState)({inView:!!c}),p=d[0],m=d[1],h=(0,i.useCallback)((function(e){void 0!==f.current&&(f.current(),f.current=void 0),l||e&&(f.current=tn(e,(function(e,t){m({inView:e,entry:t}),t.isIntersecting&&u&&f.current&&(f.current(),f.current=void 0)}),{root:s,rootMargin:a,threshold:n,trackVisibility:o,delay:r}))}),[Array.isArray(n)?n.toString():n,s,a,u,l,o,r]);(0,i.useEffect)((function(){f.current||!p.entry||u||l||m({inView:!!c})}));var v=[h,p.inView,p.entry];return v.ref=v[0],v.inView=v[1],v.entry=v[2],v}(),2),p=d[0],m=d[1],h=b((function(e){return e.updateSearchParams})),v=b((function(e){return e.searchParams})),y=(0,r.useRef)(b.getState().nextPage),x=(0,r.useRef)(b.getState().searchParams);(0,r.useEffect)((function(){return b.subscribe((function(e){return y.current=e}),(function(e){return e.nextPage}))}),[]),(0,r.useEffect)((function(){return b.subscribe((function(e){return x.current=e}),(function(e){return e.searchParams}))}),[]);var g=(0,r.useCallback)(fn(k().mark((function t(){var n,r;return k().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return u(""),f(!1),t.next=4,Wt(x.current,{offset:y.current}).catch((function(e){console.error(e),u(e&&e.message?e.message:(0,jt.__)("Unknown error occured. Check browser console or contact support.","extendify-sdk"))}));case 4:if(r=t.sent,e.current){t.next=7;break}return t.abrupt("return");case 7:null!=r&&null!==(n=r.error)&&void 0!==n&&n.length&&u(null==r?void 0:r.error),null!=r&&r.records&&v===x.current&&(b.setState({nextPage:r.offset}),o(r.records),f(r.records.length<=0));case 9:case"end":return t.stop()}}),t)}))),[v,o,e]);return(0,r.useEffect)((function(){Object.keys(x.current.taxonomies).length&&(b.getState().skipNextFetch?b.setState({skipNextFetch:!1}):g())}),[g,x]),(0,r.useEffect)((function(){m&&g()}),[m,g]),s.length?(0,_t.jsxs)("div",{className:"text-left",children:[(0,_t.jsx)("h2",{className:"text-left",children:(0,jt.__)("Server error","extendify-sdk")}),(0,_t.jsx)("code",{className:"block max-w-xl p-4 mb-4",style:{minHeight:"10rem"},children:s}),(0,_t.jsx)(Nt.Button,{isTertiary:!0,onClick:function(){h({taxonomies:{},search:""}),g()},children:(0,jt.__)("Press here to reload experience")})]}):c?null!=v&&v.search.length?(0,_t.jsx)("h2",{className:"text-left",children:(0,jt.sprintf)((0,jt.__)("No results for %s.","extendify-sdk"),null==v?void 0:v.search)}):(0,_t.jsx)("h2",{className:"text-left",children:(0,jt.__)("No results found.","extendify-sdk")}):t.length?(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsx)("ul",{className:"flex-grow gap-6 grid xl:grid-cols-2 2xl:grid-cols-3 pb-32 m-0",children:t.map((function(e){return(0,_t.jsx)("li",{children:(0,_t.jsx)(ln,{template:e,setActiveTemplate:function(){return n(e)},imageLoaded:function(){}})},e.id)}))}),b.getState().nextPage&&(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsx)("div",{className:"-translate-y-full flex flex-col h-80 items-end justify-end my-2 relative transform z-0 text",ref:p,style:{zIndex:-1}}),(0,_t.jsx)("div",{className:"my-4",children:(0,_t.jsx)(Nt.Spinner,{})})]})]}):(0,_t.jsx)("div",{className:"flex items-center justify-center w-full sm:mt-64",children:(0,_t.jsx)(Nt.Spinner,{})})}function hn(){return 0===K((function(e){return e.apiKey})).length?(0,_t.jsx)("button",{type:"button",className:"components-button inline-block flex-1 text-center hover:bg-gray-100",onClick:function(){return w.setState({currentPage:"login"})},children:(0,jt.__)("Log into account","extendify-sdk")}):(0,_t.jsx)("button",{type:"button",className:"components-button inline-block flex-1 text-center hover:bg-gray-100",onClick:function(){return K.setState({apiKey:""})},children:(0,jt.__)("Log out","extendify-sdk")})}function vn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return yn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return yn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function xn(e){var t=e.children,n=K((function(e){return e.apiKey})),i=vn((0,r.useState)(!1),2),o=i[0],a=i[1];return(0,r.useEffect)((function(){a(!n.length||window.location.search.indexOf("DEVMODE")>-1)}),[n]),(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsxs)("aside",{className:"flex-shrink-0 sm:pl-12 py-0 sm:py-6 relative",children:[(0,_t.jsx)("div",{className:"sm:w-56 lg:w-72 sticky flex flex-col lg:h-full",children:t[0]}),(0,_t.jsx)("div",{className:"hidden sm:flex flex-col absolute bottom-0 bg-white mb-4 w-72 text-left space-y-4",children:(0,_t.jsx)("div",{className:"border-t border-gray-300 flex divide-x",children:o&&(0,_t.jsx)(hn,{})})})]}),(0,_t.jsx)("main",{id:"extendify-templates",className:"w-full smp:l-12 sm:pt-6 h-full overflow-hidden",children:t[1]})]})}function gn(){var e=b((function(e){return e.updateSearchParams})),t=b((function(e){return e.searchParams})),n=function(t){return e({type:t})};return(0,_t.jsxs)("div",{className:"text-left w-full bg-white px-6 sm:px-0 pb-4 sm:pb-6 mt-px border-b sm:border-0",children:[(0,_t.jsx)("h4",{className:"sr-only",children:(0,jt.__)("Type select","extendify-sdk")}),(0,_t.jsxs)("button",{type:"button",className:Pt()({"cursor-pointer p-3.5 space-x-2 inline-flex items-center border border-black button-focus":!0,"bg-gray-900 text-white":"pattern"===t.type,"bg-transparent text-black":"pattern"!==t.type}),onClick:function(){return n("pattern")},children:[(0,_t.jsx)("svg",{width:"17",height:"13",viewBox:"0 0 17 13",className:"fill-current",xmlns:"http://www.w3.org/2000/svg",children:(0,_t.jsx)("path",{d:"M1 13H16C16.55 13 17 12.55 17 12V8C17 7.45 16.55 7 16 7H1C0.45 7 0 7.45 0 8V12C0 12.55 0.45 13 1 13ZM0 1V5C0 5.55 0.45 6 1 6H16C16.55 6 17 5.55 17 5V1C17 0.45 16.55 0 16 0H1C0.45 0 0 0.45 0 1Z"})}),(0,_t.jsx)("span",{className:"",children:(0,jt.__)("Patterns","extendify-sdk")})]}),(0,_t.jsxs)("button",{type:"button",className:Pt()({"cursor-pointer p-3.5 px-4 space-x-2 inline-flex items-center border border-black focus:ring-2 focus:ring-wp-theme-500 ring-offset-1 outline-none -ml-px":!0,"bg-gray-900 text-white":"template"===t.type,"bg-transparent text-black":"template"!==t.type}),onClick:function(){return n("template")},children:[(0,_t.jsx)("svg",{width:"17",height:"13",viewBox:"0 0 17 13",className:"fill-current",xmlns:"http://www.w3.org/2000/svg",children:(0,_t.jsx)("path",{d:"M7 13H10C10.55 13 11 12.55 11 12V8C11 7.45 10.55 7 10 7H7C6.45 7 6 7.45 6 8V12C6 12.55 6.45 13 7 13ZM1 13H4C4.55 13 5 12.55 5 12V1C5 0.45 4.55 0 4 0H1C0.45 0 0 0.45 0 1V12C0 12.55 0.45 13 1 13ZM13 13H16C16.55 13 17 12.55 17 12V8C17 7.45 16.55 7 16 7H13C12.45 7 12 7.45 12 8V12C12 12.55 12.45 13 13 13ZM6 1V5C6 5.55 6.45 6 7 6H16C16.55 6 17 5.55 17 5V1C17 0.45 16.55 0 16 0H7C6.45 0 6 0.45 6 1Z"})}),(0,_t.jsx)("span",{className:"",children:(0,jt.__)("Page templates","extendify-sdk")})]})]})}function bn(){var e=b((function(e){return e.searchParams}));return(0,_t.jsx)("div",{className:"hidden sm:flex items-start flex-col lg:flex-row -mt-2 lg:-mx-2 mb-4 lg:divide-x-2 lg:leading-none",children:Object.entries(e.taxonomies).map((function(t){return"template"===e.type&&"tax_pattern_types"===t[0]||"template"===e.type&&"tax_features"===t[0]||"pattern"===e.type&&"tax_page_types"===t[0]?"":(0,_t.jsxs)("div",{className:"lg:px-2 text-left",children:[(0,_t.jsx)("span",{className:"font-bold",children:(n=t[0],n.replace("tax_","").replace(/_/g," ").replace(/\b\w/g,(function(e){return e.toUpperCase()})))}),": ",(0,_t.jsx)("span",{children:t[1]?t[1]:"All"})]},t[0]);var n}))})}function wn(e){var t,n,r,i,o,a,s=e.className,u=K((function(e){return e.remainingImports})),l=K((function(e){return e.apiKey})),c=K((function(e){return e.allowedImports})),f=w((function(e){return e.metaData})),d=w((function(e){return e.setOpen}));return(0,_t.jsx)("div",{className:s,children:(0,_t.jsxs)("div",{className:"flex justify-between items-center px-6 sm:px-12 h-full",children:[(0,_t.jsxs)("div",{className:"flex space-x-12 h-full",children:[(0,_t.jsxs)("div",{className:"bg-transparent font-bold flex items-center space-x-1.5 lg:w-72",children:[(0,_t.jsxs)("svg",{className:"",width:"30",height:"30",viewBox:"0 0 103 103",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,_t.jsx)("rect",{y:"25.75",width:"70.8125",height:"77.25",fill:"#000000"}),(0,_t.jsx)("rect",{x:"45.0625",width:"57.9375",height:"57.9375",fill:"#37C2A2"})]}),(0,_t.jsx)("span",{className:"text-sm transform translate-y-0.5 whitespace-nowrap",children:(0,jt.__)("Extendify Library","extendify-sdk")})]}),!l.length&&(0,_t.jsx)(_t.Fragment,{children:(0,_t.jsxs)("div",{className:"items-center ml-8 h-full hidden md:flex",children:[(0,_t.jsx)("div",{className:"m-0 p-0 px-6 text-sm bg-gray-50 border-l border-gray-300 h-full flex items-center whitespace-nowrap",children:(0,jt.sprintf)((0,jt.__)("Imports left: %s / %s"),u(),Number(c))}),(0,_t.jsx)("div",{className:"h-full items-center border-l hidden lg:flex",children:(null==f||null===(t=f.banners)||void 0===t?void 0:t.library_header)&&(0,_t.jsxs)(_t.Fragment,{children:[(null===(n=f.banners.library_header)||void 0===n?void 0:n.image)&&(0,_t.jsx)("a",{className:"h-full block",target:"_blank",rel:"noreferrer",href:f.banners.library_header.url,children:(0,_t.jsx)("img",{src:f.banners.library_header.image,alt:"Extendify notice"})}),!(null!==(r=f.banners.library_header)&&void 0!==r&&r.image)&&(0,_t.jsxs)("div",{className:"text-gray-900 space-x-6 bg-extendify-light px-6 p-2 h-full flex items-center",children:[(0,_t.jsx)("span",{className:"font-bold text-left",children:f.banners.library_header.text_backup}),(null===(i=f.banners.library_header)||void 0===i?void 0:i.url)&&(0,_t.jsx)("div",{children:(0,_t.jsx)("a",{className:"button-extendify-main",target:"_blank",rel:"noreferrer",href:"".concat(f.banners.library_header.url,"&utm_source=").concat(encodeURIComponent(window.extendifySdkData.source),"&utm_medium=library&utm_campaign=banner"),children:null!==(o=null===(a=f.banners.library_header)||void 0===a?void 0:a.button_text)&&void 0!==o?o:(0,jt.__)("Get it now","extendify-sdk")})})]})]})})]})})]}),(0,_t.jsx)("div",{className:"space-x-2 transform sm:translate-x-6",children:(0,_t.jsxs)("button",{type:"button",className:"components-button has-icon",onClick:function(){return d(!1)},children:[(0,_t.jsx)("svg",{width:"24",height:"24",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",size:"24",role:"img","aria-hidden":"true",focusable:"false",children:(0,_t.jsx)("path",{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"})}),(0,_t.jsx)("span",{className:"sr-only",children:(0,jt.__)("Close library","extendify-sdk")})]})})]})})}function jn(){return(0,_t.jsxs)("div",{className:"bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto",children:[(0,_t.jsx)(wn,{className:"w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"}),(0,_t.jsxs)("div",{className:"w-full flex-grow overflow-hidden",children:[(0,_t.jsx)("a",{href:"#extendify-templates",className:"sr-only focus:not-sr-only focus:text-blue-500",children:(0,jt.__)("Skip to content","extendify-sdk")}),(0,_t.jsx)("div",{className:"sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full",children:(0,_t.jsxs)(xn,{children:[(0,_t.jsx)(Ht,{}),(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsx)(gn,{}),(0,_t.jsx)(bn,{}),(0,_t.jsx)("div",{className:"relative h-full z-30 bg-white",children:(0,_t.jsx)("div",{className:"absolute z-20 inset-0 lg:static h-screen overflow-y-auto pt-4 sm:pt-0 px-6 sm:pl-0 sm:pr-8 pb-40",children:(0,_t.jsx)(mn,{})})})]})]})})]})]})}function kn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Sn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Sn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Sn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var _n=new Map;function On(e){var t=e.searchParams,n=e.title,i=e.tax,o=b((function(e){return e.updateTaxonomies})),a=Ft((function(e){return e.toggleOpenedTaxonomy})),s=kn((0,r.useState)([]),2),u=s[0],l=s[1],c=kn((0,r.useState)(),2),f=c[0],d=c[1],p=b((function(e){return e.setActive})),m=w((function(e){return e.open})),h=on();return(0,r.useEffect)((function(){d(window.innerWidth<1600?3:4)}),[]),(0,r.useEffect)((function(){if(h.current&&f&&m){var e=JSON.stringify(Object.assign(t,{pageSize:f,force:!0}));_n.has(e)?l(_n.get(e)):Wt(t,{pageSize:f,force:!0}).then((function(t){var n;null!=t&&null!==(n=t.records)&&void 0!==n&&n.length&&h.current&&(_n.set(e,t.records),l(t.records))}))}}),[t,h,f,m]),(0,_t.jsxs)("section",{children:[(0,_t.jsxs)("div",{className:"flex justify-between",children:[(0,_t.jsx)("h2",{className:"text-2xl mb-2 text-extendify-main uppercase m-0 text-left font-bold",children:n}),(0,_t.jsx)("button",{onClick:function(){var e,t,r;o((r=n,(t=i)in(e={})?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e)),a("tax_pattern_types",!0)},type:"button",className:"components-button",children:(0,jt.__)("View all","extendify-sdk")})]}),(0,_t.jsxs)("ul",{className:"flex-grow gap-6 grid xl:grid-cols-2 2xl:grid-cols-3 3xl:grid-cols-4 pb-16 m-0",children:[0===u.length&&Array.from({length:f},(function(e,t){return(0,_t.jsx)(un,{},t)})),u.map((function(e){return(0,_t.jsx)("li",{children:(0,_t.jsx)(ln,{template:e,setActiveTemplate:function(){return p(e)},imageLoaded:function(){}})},e.id)}))]})]})}function En(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Nn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Cn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Pn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Pn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function An(){var e=Cn((0,r.useState)([]),2),t=e[0],n=e[1],i=(0,r.useRef)(),o=Ft((function(e){return e.taxonomies})),a=b((function(e){return e.searchParams})),s=function(e,t){var n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?En(Object(n),!0).forEach((function(t){Nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):En(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},a);return n.taxonomies=Object.assign({},a.taxonomies,Nn({},e,t)),n};return(0,r.useEffect)((function(){var e,t;Object.keys(null!==(e=null==o?void 0:o.tax_pattern_types)&&void 0!==e?e:{}).length&&n((t=o.tax_pattern_types,Object.values(t).filter((function(e){return e.type.includes("pattern")})).map((function(e){return e.term}))))}),[o]),(0,r.useEffect)((function(){i.current.scrollTop=0}),[a]),(0,_t.jsxs)("div",{className:"bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto",children:[(0,_t.jsx)(wn,{className:"w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"}),(0,_t.jsxs)("div",{className:"w-full flex-grow overflow-hidden",children:[(0,_t.jsx)("a",{href:"#extendify-templates",className:"sr-only focus:not-sr-only focus:text-blue-500",children:(0,jt.__)("Skip to content","extendify-sdk")}),(0,_t.jsx)("div",{className:"sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full",children:(0,_t.jsxs)(xn,{children:[(0,_t.jsx)(Ht,{}),(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsx)(gn,{}),(0,_t.jsx)(bn,{}),(0,_t.jsx)("div",{className:"relative h-full z-30 bg-white",children:(0,_t.jsx)("div",{ref:i,className:"absolute z-20 inset-0 lg:static h-screen overflow-y-auto pt-16 px-6 sm:pl-0 sm:pr-8 pb-60",children:t.length>0&&t.map((function(e){return(0,_t.jsx)(On,{title:e,tax:"tax_pattern_types",searchParams:s("tax_pattern_types",e)},e)}))})})]})]})})]})]})}var Tn=function(){return F.get("plugins")},Fn=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=new FormData;return t.append("plugins",JSON.stringify(e)),F.post("plugins",t,{headers:{"Content-Type":"multipart/form-data"}})},Ln=function(){return F.get("active-plugins")};function In(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function Dn(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){In(o,r,i,a,s,"next",e)}function s(e){In(o,r,i,a,s,"throw",e)}a(void 0)}))}}var Rn=[],Mn=[];function Vn(e){return Hn.apply(this,arguments)}function Hn(){return(Hn=Dn(k().mark((function e(t){var n,r,i,o;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((i=(i=null!==(n=null==t||null===(r=t.fields)||void 0===r?void 0:r.required_plugins)&&void 0!==n?n:[]).filter((function(e){return"editorplus"!==e}))).length){e.next=4;break}return e.abrupt("return",!1);case 4:if(Rn.length){e.next=10;break}return e.t0=Object,e.next=8,Tn();case 8:e.t1=e.sent,Rn=e.t0.keys.call(e.t0,e.t1);case 10:return o=!!i.length&&i.filter((function(e){return!Rn.some((function(t){return t.includes(e)}))})),e.abrupt("return",o.length);case 12:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Bn(e){return Un.apply(this,arguments)}function Un(){return(Un=Dn(k().mark((function e(t){var n,r,i,o;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((i=(i=null!==(n=null==t||null===(r=t.fields)||void 0===r?void 0:r.required_plugins)&&void 0!==n?n:[]).filter((function(e){return"editorplus"!==e}))).length){e.next=4;break}return e.abrupt("return",!1);case 4:if(Mn.length){e.next=10;break}return e.t0=Object,e.next=8,Ln();case 8:e.t1=e.sent,Mn=e.t0.values.call(e.t0,e.t1);case 10:if(!(o=!!i.length&&i.filter((function(e){return!Mn.some((function(t){return t.includes(e)}))})))){e.next=16;break}return e.next=14,Vn(t);case 14:if(!e.sent){e.next=16;break}return e.abrupt("return",!1);case 16:return e.abrupt("return",o.length);case 17:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var qn=u(A((function(e){return{wantedTemplate:{},importOnLoad:!1,setWanted:function(t){return e({wantedTemplate:t})},removeWanted:function(){return e({wantedTemplate:{}})}}}),{name:"extendify-wanted-template"}));function zn(e){var t=e.msg;return(0,_t.jsxs)(Nt.Modal,{style:{maxWidth:"500px"},title:(0,jt.__)("Error installing plugins","extendify-sdk"),isDismissible:!1,children:[(0,jt.__)("You have encountered an error that we cannot recover from. Please try again.","extendify-sdk"),(0,_t.jsx)("br",{}),(0,_t.jsx)(Nt.Notice,{isDismissible:!1,status:"error",children:t}),(0,_t.jsx)(Nt.Button,{isPrimary:!0,onClick:function(){return(0,r.render)((0,_t.jsx)(tr,{}),document.getElementById("extendify-root"))},children:(0,jt.__)("Go back","extendify-sdk")})]})}const Wn=wp.data;function Zn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return $n(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Gn(){var e=Zn((0,r.useState)(!1),2),t=e[0],n=e[1],i=function(){location.reload()};return(0,(0,Wn.select)("core/editor").isEditedPostDirty)()?(0,_t.jsxs)(Nt.Modal,{title:(0,jt.__)("Reload required","extendify-sdk"),isDismissible:!1,children:[(0,_t.jsx)("p",{style:{maxWidth:"400px"},children:(0,jt.__)("Just one more thing! We need to reload the page to continue.","extendify-sdk")}),(0,_t.jsxs)(Nt.ButtonGroup,{children:[(0,_t.jsx)(Nt.Button,{isPrimary:!0,onClick:i,disabled:t,children:(0,jt.__)("Reload page","extendify-sdk")}),(0,_t.jsx)(Nt.Button,{isSecondary:!0,onClick:function(){n(!0),(0,Wn.dispatch)("core/editor").savePost(),n(!1)},isBusy:t,style:{margin:"0 4px"},children:(0,jt.__)("Save changes","extendify-sdk")})]})]}):(i(),null)}function Jn(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Kn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kn(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Kn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yn(){var e,t=Jn((0,r.useState)(""),2),n=t[0],i=t[1],o=qn((function(e){return e.wantedTemplate})),a=null==o||null===(e=o.fields)||void 0===e?void 0:e.required_plugins.filter((function(e){return"editorplus"!==e}));return Fn(a).then((function(){qn.setState({importOnLoad:!0}),(0,r.render)((0,_t.jsx)(Gn,{}),document.getElementById("extendify-root"))})).catch((function(e){var t=e.message;i(t)})),n?(0,_t.jsx)(zn,{msg:n}):(0,_t.jsx)(Nt.Modal,{title:(0,jt.__)("Installing plugins","extendify-sdk"),isDismissible:!1,children:(0,_t.jsx)(Nt.Button,{style:{width:"100%"},disabled:!0,isPrimary:!0,isBusy:!0,onClick:function(){},children:(0,jt.__)("Installing...","extendify-sdk")})})}var Xn=function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"broken-event",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"open";K.setState({entryPoint:e}),window.dispatchEvent(new CustomEvent("extendify-sdk::".concat(t,"-library"),{detail:e,bubbles:!0}))}(e,"open")};function Qn(e){switch(e){case"editorplus":return"Editor Plus";case"ml-slider":return"MetaSlider"}return e}function er(){var e,t,n,i=qn((function(e){return e.wantedTemplate})),o=(null==i||null===(e=i.fields)||void 0===e?void 0:e.required_plugins)||[];return(0,_t.jsxs)(Nt.Modal,{title:(0,jt.__)("Plugins required","extendify-sdk"),isDismissible:!1,children:[(0,_t.jsx)("p",{style:{maxWidth:"400px"},children:(0,jt.sprintf)((0,jt.__)("In order to add this %s to your site, the following plugins are required to be installed and activated.","extendify-sdk"),null!==(t=null==i||null===(n=i.fields)||void 0===n?void 0:n.type)&&void 0!==t?t:"template")}),(0,_t.jsx)("ul",{children:o.filter((function(e){return"editorplus"!==e})).map((function(e){return(0,_t.jsx)("li",{children:Qn(e)},e)}))}),(0,_t.jsx)("p",{style:{maxWidth:"400px",fontWeight:"bold"},children:(0,jt.__)("Please contact a site admin for assistance in adding these plugins to your site.","extendify-sdk")}),(0,_t.jsx)(Nt.Button,{isPrimary:!0,onClick:function(){return(0,r.render)((0,_t.jsx)(ei,{show:!0}),document.getElementById("extendify-root"))},style:{boxShadow:"none"},children:(0,jt.__)("Return to library","extendify-sdk")})]})}function tr(e){var t,n,i,o,a,s,u,l,c=qn((function(e){return e.wantedTemplate})),f=(null==c||null===(t=c.fields)||void 0===t?void 0:t.required_plugins)||[];return null!==(n=K.getState())&&void 0!==n&&n.canInstallPlugins?(0,_t.jsxs)(Nt.Modal,{title:null!==(i=e.title)&&void 0!==i?i:(0,jt.__)("Install required plugins","extendify-sdk"),isDismissible:!1,children:[(0,_t.jsx)("p",{style:{maxWidth:"400px"},children:null!==(o=e.message)&&void 0!==o?o:(0,jt.__)((0,jt.sprintf)("There is just one more step. This %s requires the following to be automatically installed and activated:",null!==(a=null==c||null===(s=c.fields)||void 0===s?void 0:s.type)&&void 0!==a?a:"template"),"extendify-sdk")}),(null===(u=e.message)||void 0===u?void 0:u.length)>0||(0,_t.jsx)("ul",{children:f.filter((function(e){return"editorplus"!==e})).map((function(e){return(0,_t.jsx)("li",{children:Qn(e)},e)}))}),(0,_t.jsxs)(Nt.ButtonGroup,{children:[(0,_t.jsx)(Nt.Button,{isPrimary:!0,onClick:function(){return(0,r.render)((0,_t.jsx)(Yn,{}),document.getElementById("extendify-root"))},children:null!==(l=e.buttonLabel)&&void 0!==l?l:(0,jt.__)("Install Plugins","extendify-sdk")}),e.forceOpen||(0,_t.jsx)(Nt.Button,{isTertiary:!0,onClick:function(){e.forceOpen||(0,r.render)((0,_t.jsx)(ei,{show:!0}),document.getElementById("extendify-root"))},style:{boxShadow:"none",margin:"0 4px"},children:(0,jt.__)("No thanks, take me back","extendify-sdk")})]})]}):(0,_t.jsx)(er,{})}function nr(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}var rr=function(){var e,t=(e=k().mark((function e(t){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Vn(t);case 2:return e.t0=!e.sent,e.t1=function(){},e.t2=function(){return new Promise((function(){(0,r.render)((0,_t.jsx)(tr,{}),document.getElementById("extendify-root"))}))},e.abrupt("return",{id:"hasRequiredPlugins",pass:e.t0,allow:e.t1,deny:e.t2});case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){nr(o,r,i,a,s,"next",e)}function s(e){nr(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e){return t.apply(this,arguments)}}();function ir(e){var t=e.msg;return(0,_t.jsxs)(Nt.Modal,{style:{maxWidth:"500px"},title:(0,jt.__)("Error Activating plugins","extendify-sdk"),isDismissible:!1,children:[(0,jt.__)("You have encountered an error that we cannot recover from. Please try again.","extendify-sdk"),(0,_t.jsx)("br",{}),(0,_t.jsx)(Nt.Notice,{isDismissible:!1,status:"error",children:t}),(0,_t.jsx)(Nt.Button,{isPrimary:!0,onClick:function(){(0,r.render)((0,_t.jsx)(cr,{}),document.getElementById("extendify-root"))},children:(0,jt.__)("Go back","extendify-sdk")})]})}function or(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function ar(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){or(o,r,i,a,s,"next",e)}function s(e){or(o,r,i,a,s,"throw",e)}a(void 0)}))}}function sr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return ur(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ur(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ur(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function lr(){var e,t=sr((0,r.useState)(""),2),n=t[0],i=t[1],o=qn((function(e){return e.wantedTemplate})),a=null==o||null===(e=o.fields)||void 0===e?void 0:e.required_plugins.filter((function(e){return"editorplus"!==e}));return Fn(a).then((function(){qn.setState({importOnLoad:!0})})).then(ar(k().mark((function e(){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,new Promise((function(e){return setTimeout(e,1e3)}));case 2:(0,r.render)((0,_t.jsx)(Gn,{}),document.getElementById("extendify-root"));case 3:case"end":return e.stop()}}),e)})))).catch((function(e){var t=e.response;i(t.data.message)})),n?(0,_t.jsx)(ir,{msg:n}):(0,_t.jsx)(Nt.Modal,{title:(0,jt.__)("Activating plugins","extendify-sdk"),isDismissible:!1,children:(0,_t.jsx)(Nt.Button,{style:{width:"100%"},disabled:!0,isPrimary:!0,isBusy:!0,onClick:function(){},children:(0,jt.__)("Activating...","extendify-sdk")})})}function cr(e){var t,n,i,o,a,s=qn((function(e){return e.wantedTemplate})),u=(null==s||null===(t=s.fields)||void 0===t?void 0:t.required_plugins)||[];return null!==(n=K.getState())&&void 0!==n&&n.canActivatePlugins?(0,_t.jsx)(Nt.Modal,{title:(0,jt.__)("Activate required plugins","extendify-sdk"),isDismissible:!1,children:(0,_t.jsxs)("div",{children:[(0,_t.jsx)("p",{style:{maxWidth:"400px"},children:null!==(i=e.message)&&void 0!==i?i:(0,jt.__)((0,jt.sprintf)("There is just one more step. This %s requires the following plugins to be installed and activated:",null!==(o=null==s||null===(a=s.fields)||void 0===a?void 0:a.type)&&void 0!==o?o:"template"),"extendify-sdk")}),(0,_t.jsx)("ul",{children:u.filter((function(e){return"editorplus"!==e})).map((function(e){return(0,_t.jsx)("li",{children:Qn(e)},e)}))}),(0,_t.jsxs)(Nt.ButtonGroup,{children:[(0,_t.jsx)(Nt.Button,{isPrimary:!0,onClick:function(){return(0,r.render)((0,_t.jsx)(lr,{}),document.getElementById("extendify-root"))},children:(0,jt.__)("Activate Plugins","extendify-sdk")}),e.showClose&&(0,_t.jsx)(Nt.Button,{isTertiary:!0,onClick:function(){return(0,r.render)((0,_t.jsx)(ei,{show:!0}),document.getElementById("extendify-root"))},style:{boxShadow:"none",margin:"0 4px"},children:(0,jt.__)("No thanks, return to library","extendify-sdk")})]})]})}):(0,_t.jsx)(er,{})}function fr(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}var dr=function(){var e,t=(e=k().mark((function e(t){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Bn(t);case 2:return e.t0=!e.sent,e.t1=function(){},e.t2=function(){return new Promise((function(){(0,r.render)((0,_t.jsx)(cr,{showClose:!0}),document.getElementById("extendify-root"))}))},e.abrupt("return",{id:"hasPluginsActivated",pass:e.t0,allow:e.t1,deny:e.t2});case 6:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){fr(o,r,i,a,s,"next",e)}function s(e){fr(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e){return t.apply(this,arguments)}}();function pr(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function mr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return hr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return hr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function hr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function vr(e){var t=e.finished,n=mr((0,r.useState)(""),2),i=n[0],o=n[1],a=(0,r.useRef)(),s=function(){var e,n=(e=k().mark((function e(n){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.preventDefault(),e.next=3,V(i);case 3:K.setState({registration:{email:i}}),t();case 5:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){pr(o,r,i,a,s,"next",e)}function s(e){pr(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e){return n.apply(this,arguments)}}();return(0,r.useEffect)((function(){D("user_email").then((function(e){return o(null!=e?e:"")})),a.current.focus()}),[]),(0,_t.jsxs)(Nt.Modal,{className:"extendify-sdk",title:(0,jt.__)("One last step...","extendify-sdk"),isDismissible:!1,children:[(0,_t.jsx)("p",{className:"m-0 mb-4 max-w-md",children:(0,jt.__)("Register now to receive updates and special offers from Extendify","extendify-sdk")}),(0,_t.jsxs)("form",{onSubmit:s,className:"flex space-x-4 mb-8",children:[(0,_t.jsxs)("div",{className:"relative w-full max-w-xs",children:[(0,_t.jsx)("input",{id:"extendify-email-register",value:i,required:!0,onChange:function(e){return o(e.target.value)},type:"text",className:"extendify-special-input button-focus text-sm h-8 min-h-0 border border-gray-900 special-input placeholder-transparent rounded-none w-full px-2",placeholder:(0,jt.__)("Email","extendify-sdk")}),(0,_t.jsx)("label",{htmlFor:"extendify-email-register",className:"-top-3 bg-white absolute left-1 px-1 transition-all",children:(0,jt.__)("Email","extendify-sdk")})]}),(0,_t.jsx)("input",{type:"submit",className:"hidden"})]}),(0,_t.jsxs)(Nt.ButtonGroup,{children:[(0,_t.jsx)(Nt.Button,{ref:a,isPrimary:!0,onClick:s,children:(0,jt.__)("Submit and import","extendify-sdk")}),(0,_t.jsx)(Nt.Button,{isTertiary:!0,onClick:t,style:{boxShadow:"none",margin:"0 4px"},children:(0,jt.__)("Skip and import","extendify-sdk")})]})]})}function yr(){var e;return{id:"NeedsRegistrationModal",pass:(null===(e=K.getState().registration)||void 0===e?void 0:e.email)||K.getState().apiKey,allow:function(){},deny:function(){return new Promise((function(e){(0,r.render)((0,_t.jsx)(vr,{finished:e}),document.getElementById("extendify-root"))}))}}}function xr(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return gr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return gr(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function gr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function br(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function wr(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){br(o,r,i,a,s,"next",e)}function s(e){br(o,r,i,a,s,"throw",e)}a(void 0)}))}}function jr(e){return function(){return new kr(e.apply(this,arguments))}}function kr(e){var t,n;function r(t,n){try{var o=e[t](n),a=o.value,s=a instanceof Sr;Promise.resolve(s?a.wrapped:a).then((function(e){s?r("return"===t?"return":"next",e):i(o.done?"return":"normal",e)}),(function(e){r("throw",e)}))}catch(e){i("throw",e)}}function i(e,i){switch(e){case"return":t.resolve({value:i,done:!0});break;case"throw":t.reject(i);break;default:t.resolve({value:i,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise((function(o,a){var s={key:e,arg:i,resolve:o,reject:a,next:null};n?n=n.next=s:(t=n=s,r(e,i))}))},"function"!=typeof e.return&&(this.return=void 0)}function Sr(e){this.wrapped=e}kr.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},kr.prototype.next=function(e){return this._invoke("next",e)},kr.prototype.throw=function(e){return this._invoke("throw",e)},kr.prototype.return=function(e){return this._invoke("return",e)};function _r(){return(_r=wr(k().mark((function e(t){var n;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Or(t);case 1:return e.next=4,n.next();case 4:if(!e.sent.done){e.next=7;break}return e.abrupt("break",9);case 7:e.next=1;break;case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Or(e){return Er.apply(this,arguments)}function Er(){return(Er=jr(k().mark((function e(t){var n,r,i;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=xr(t),e.prev=1,n.s();case 3:if((r=n.n()).done){e.next=9;break}return i=r.value,e.next=7,i();case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[1,11,14,17]])})))).apply(this,arguments)}function Nr(e,t){return(0,(0,Wn.dispatch)("core/block-editor").insertBlocks)(e).then((function(){window.dispatchEvent(new CustomEvent("extendify-sdk::template-inserted",{detail:{template:t},bubbles:!0}))}))}function Cr(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Pr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Pr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Ar=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{hasRequiredPlugins:rr,hasPluginsActivated:dr,NeedsRegistrationModal:yr,stack:[],check:function(t){var n=this;return wr(k().mark((function r(){var i,o,a;return k().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:i=xr(e),r.prev=1,a=k().mark((function e(){var r,i;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=o.value,e.next=3,n["".concat(r)](t);case 3:i=e.sent,setTimeout((function(){n.stack.push(i.pass?i.allow:i.deny)}),0);case 5:case"end":return e.stop()}}),e)})),i.s();case 4:if((o=i.n()).done){r.next=8;break}return r.delegateYield(a(),"t0",6);case 6:r.next=4;break;case 8:r.next=13;break;case 10:r.prev=10,r.t1=r.catch(1),i.e(r.t1);case 13:return r.prev=13,i.f(),r.finish(13);case 16:case"end":return r.stop()}}),r,null,[[1,10,13,16]])})))()},reset:function(){this.stack=[]}}}(["NeedsRegistrationModal","hasRequiredPlugins","hasPluginsActivated"]);function Tr(e){var t=e.template,n=(0,r.useRef)(null),i=b((function(e){return e.activeTemplateBlocks})),o=K((function(e){return e.canImport})),a=K((function(e){return e.apiKey})),s=w((function(e){return e.setOpen})),u=Cr((0,r.useState)(!1),2),l=u[0],c=u[1],f=Cr((0,r.useState)(!1),2),d=f[0],p=f[1],m=qn((function(e){return e.setWanted})),h=function(){(function(e){return _r.apply(this,arguments)})(Ar.stack).then((function(){setTimeout((function(){Nr(i,t).then((function(){return s(!1)})).then((function(){return(0,r.render)((0,_t.jsx)(ei,{}),document.getElementById("extendify-root"))}))}),100)}))};(0,r.useEffect)((function(){return Ar.check(t).then((function(){return p(!0)})),function(){return Ar.reset()&&p(!1)}}),[t]),(0,r.useEffect)((function(){!l&&n.current&&n.current.focus()}),[n,l,d]);return d&&Object.keys(i).length?a||o()?l?(0,_t.jsx)("button",{type:"button",disabled:!0,className:"components-button is-secondary text-lg sm:text-2xl h-auto py-1.5 px-3 sm:py-2.5 sm:px-5",onClick:function(){},children:(0,jt.__)("Importing...","extendify-sdk")}):(0,_t.jsx)("button",{ref:n,type:"button",className:"components-button is-primary text-lg sm:text-2xl h-auto py-1.5 px-3 sm:py-2.5 sm:px-5",onClick:function(){return $t(t),c(!0),m(t),void h()},children:(0,jt.sprintf)((0,jt.__)("Add %s","extendify-sdk"),t.fields.type)}):(0,_t.jsx)("a",{ref:n,className:"button-extendify-main text-lg sm:text-2xl py-1.5 px-3 sm:py-2.5 sm:px-5",target:"_blank",href:"https://extendify.com/pricing?utm_source=".concat(window.extendifySdkData.source,"&utm_medium=library&utm_campaign=sign_up&utm_content=single_page"),rel:"noreferrer",children:(0,jt.__)("Sign up now","extendify-sdk")}):""}function Fr(e){var t=e.categories,n=e.styles,r=e.types,i=e.requiredPlugins;return(0,_t.jsxs)(_t.Fragment,{children:[t&&(0,_t.jsxs)("div",{className:"w-full pb-4",children:[(0,_t.jsx)("h3",{className:"text-sm m-0 mb-2",children:(0,jt.__)("Categories:","extendify-sdk")}),(0,_t.jsx)("div",{children:t.join(", ")})]}),n&&(0,_t.jsxs)("div",{className:"w-full py-4",children:[(0,_t.jsx)("h3",{className:"text-sm m-0 my-2",children:(0,jt.__)("Styles:","extendify-sdk")}),(0,_t.jsx)("div",{children:n.join(", ")})]}),r&&(0,_t.jsxs)("div",{className:"w-full py-4",children:[(0,_t.jsx)("h3",{className:"text-sm m-0 my-2",children:(0,jt.__)("Types:","extendify-sdk")}),(0,_t.jsx)("div",{children:r.join(", ")})]}),i.filter((function(e){return"editorplus"!==e})).length>0&&(0,_t.jsxs)("div",{className:"pt-4 w-full",children:[(0,_t.jsx)("h3",{className:"text-sm m-0 my-2",children:(0,jt.__)("Required Plugins:","extendify-sdk")}),(0,_t.jsx)("div",{children:i.filter((function(e){return"editorplus"!==e})).map((function(e){return Qn(e)})).join(", ")})]}),(0,_t.jsx)("div",{className:"py-4 mt-4",children:(0,_t.jsx)("a",{href:"https://extendify.com/what-happens-when-a-template-is-added?utm_source=".concat(window.extendifySdkData.source,"&utm_medium=library&utm_campaign=sidebar"),rel:"noreferrer",target:"_blank",children:(0,jt.__)("What happens when a template is added?","extendify-sdk")})})]})}function Lr(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function Ir(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Dr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Rr=new Map;function Mr(e){var t,n,i,o,a,s,u,l=e.template,c=l.fields,f=c.tax_categories,d=c.required_plugins,p=c.tax_style,m=c.tax_pattern_types,h=K((function(e){return e.apiKey})),v=Ir((0,r.useState)([]),2),y=v[0],x=v[1],g=Ir((0,r.useState)([]),2),w=g[0],j=g[1],S=on(),_=b((function(e){return e.setActive})),O=function(e){x([]),j([]),requestAnimationFrame((function(){return _(e)}))},E=(0,r.useCallback)(function(){var e,t=(e=k().mark((function e(t,n){var r,i;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r="".concat(l.id,"|").concat(t,"|").concat(n),!Rr.has(r)){e.next=3;break}return e.abrupt("return",Rr.get(r));case 3:return e.next=5,Zt(l,t,n);case 5:return i=e.sent,Rr.set(r,i),e.abrupt("return",i);case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){Lr(o,r,i,a,s,"next",e)}function s(e){Lr(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e,n){return t.apply(this,arguments)}}(),[l]);return(0,r.useEffect)((function(){Gt(l)}),[l]),(0,r.useEffect)((function(){E("related","pattern").then((function(e){S.current&&x(e)}))}),[l,E,S]),(0,_t.jsxs)("div",{className:"flex flex-col min-h-screen bg-white sm:min-h-0 items-start overflow-y-auto h-full sm:pr-8 lg:pl-px lg:-ml-px",children:[(0,_t.jsxs)("div",{className:"lg:sticky top-0 bg-white flex flex-col lg:flex-row items-start justify-start lg:items-center lg:justify-between w-full max-w-screen-xl lg:border-b border-gray-300",children:[(0,_t.jsxs)("div",{className:"text-left m-0 h-full px-6 sm:p-0",children:[(0,_t.jsx)("h1",{className:"leading-tight text-left mb-2.5 mt-0 sm:text-3xl font-normal",children:l.fields.display_title}),(0,_t.jsx)(Nt.ExternalLink,{href:l.fields.url,children:(0,jt.__)("Demo","extendify-sdk")})]}),(0,_t.jsx)("div",{className:Pt()({"inline-flex sm:top-auto right-0 m-6 sm:m-0 sm:my-6 space-x-3":!0,"top-16 mt-5":!h.length,"top-0":h.length>0}),children:(0,_t.jsx)(Tr,{template:l})})]}),(0,_t.jsx)("div",{className:"max-w-screen-xl sm:w-full sm:m-0 sm:mb-8 m-6 border lg:border-t-0 border-gray-300 m-46",children:(0,_t.jsx)("img",{className:"max-w-full w-full block",src:null!==(t=null==l||null===(n=l.fields)||void 0===n||null===(i=n.screenshot[0])||void 0===i||null===(o=i.thumbnails)||void 0===o||null===(a=o.full)||void 0===a?void 0:a.url)&&void 0!==t?t:null==l||null===(s=l.fields)||void 0===s||null===(u=s.screenshot[0])||void 0===u?void 0:u.url})}),(0,_t.jsxs)("div",{className:"divide-y p-6 sm:p-0 mb-16",children:[y.length>0&&(0,_t.jsxs)("section",{className:"mb-4",children:[(0,_t.jsx)("h4",{className:"text-lg m-0 mb-4 text-left font-semibold",children:(0,jt.__)("Related","extendify-sdk")}),(0,_t.jsx)("div",{className:"grid md:grid-cols-2 xl:grid-cols-4 gap-6",children:y.map((function(e){var t,n,r,i,o,a,s;return(0,_t.jsx)("button",{type:"button",className:"min-h-60 border border-transparent hover:border-wp-theme-500 transition duration-150 p-0 m-0 cursor-pointer",onClick:function(){return O(e)},children:(0,_t.jsx)("img",{className:"max-w-full block p-0 m-0 object-cover",src:null!==(t=null==e||null===(n=e.fields)||void 0===n||null===(r=n.screenshot[0])||void 0===r||null===(i=r.thumbnails)||void 0===i||null===(o=i.large)||void 0===o?void 0:o.url)&&void 0!==t?t:null==e||null===(a=e.fields)||void 0===a||null===(s=a.screenshot[0])||void 0===s?void 0:s.url})},e.id)}))})]}),w.length>0&&(0,_t.jsxs)("section",{className:"mb-4 pt-6",children:[(0,_t.jsx)("h4",{className:"text-lg m-0 mb-4 text-left font-semibold",children:(0,jt.__)("Alternatives","extendify-sdk")}),(0,_t.jsx)("div",{className:"grid md:grid-cols-2 xl:grid-cols-4 gap-6",children:w.map((function(e){var t,n,r,i,o,a,s;return(0,_t.jsx)("button",{type:"button",className:"min-h-60 border border-transparent hover:border-wp-theme-500 transition duration-150 p-0 m-0 cursor-pointer",onClick:function(){return O(e)},children:(0,_t.jsx)("img",{className:"max-w-full block p-0 m-0 object-cover",src:null!==(t=null==e||null===(n=e.fields)||void 0===n||null===(r=n.screenshot[0])||void 0===r||null===(i=r.thumbnails)||void 0===i||null===(o=i.large)||void 0===o?void 0:o.url)&&void 0!==t?t:null==e||null===(a=e.fields)||void 0===a||null===(s=a.screenshot[0])||void 0===s?void 0:s.url})},e.id)}))})]})]}),(0,_t.jsx)("div",{className:"text-xs text-left p-6 w-full block sm:hidden divide-y",children:(0,_t.jsx)(Fr,{categories:f,types:m,requiredPlugins:d,styles:p})})]})}function Vr(e){var t=e.template,n=b((function(e){return e.setActive})),r=t.fields,i=r.tax_categories,o=r.required_plugins,a=r.tax_style,s=r.tax_pattern_types,u=K((function(e){return e.apiKey}));return(0,_t.jsxs)("div",{className:"flex flex-col items-start justify-start",children:[!u.length&&(0,_t.jsxs)("div",{className:"h-full flex sm:hidden w-full p-4 justify-between border items-center border-gray-300 bg-extendify-lightest",children:[(0,_t.jsx)("a",{className:"button-extendify-main",target:"_blank",href:"https://extendify.com/pricing?utm_source=".concat(window.extendifySdkData.source,"&utm_medium=library&utm_campaign=sign_up&utm_content=main"),rel:"noreferrer",children:(0,jt.__)("Sign up today to get unlimited access","extendify-sdk")}),(0,_t.jsx)("button",{className:"components-button",onClick:function(){return w.setState({currentPage:"login"})},children:(0,jt.__)("Log in","extendify-sdk")})]}),(0,_t.jsx)("div",{className:"p-6 sm:p-0",children:(0,_t.jsxs)("button",{type:"button",className:"cursor-pointer text-black bg-transparent font-medium flex items-center p-3 transform -translate-x-3 button-focus",onClick:function(){w.setState({currentPage:"main"}),n({})},children:[(0,_t.jsx)("svg",{className:"fill-current",width:"8",height:"12",viewBox:"0 0 8 12",xmlns:"http://www.w3.org/2000/svg",children:(0,_t.jsx)("path",{d:"M6.70998 9.88047L2.82998 6.00047L6.70998 2.12047C7.09998 1.73047 7.09998 1.10047 6.70998 0.710469C6.31998 0.320469 5.68998 0.320469 5.29998 0.710469L0.70998 5.30047C0.31998 5.69047 0.31998 6.32047 0.70998 6.71047L5.29998 11.3005C5.68998 11.6905 6.31998 11.6905 6.70998 11.3005C7.08998 10.9105 7.09998 10.2705 6.70998 9.88047Z"})}),(0,_t.jsx)("span",{className:"ml-4",children:(0,jt.__)("Go back","extendify-sdk")})]})}),(0,_t.jsx)("div",{className:"text-left pt-14 divide-y w-full hidden sm:block",children:(0,_t.jsx)(Fr,{categories:i,types:s,requiredPlugins:o,styles:a})})]})}function Hr(){var e=b((function(e){return e.activeTemplate}));return(0,_t.jsxs)("div",{className:"bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto",children:[(0,_t.jsx)(wn,{className:"w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"}),(0,_t.jsxs)("div",{className:"w-full flex-grow overflow-hidden",children:[(0,_t.jsx)("a",{href:"#extendify-templates",className:"sr-only focus:not-sr-only focus:text-blue-500",children:(0,jt.__)("Skip to content","extendify-sdk")}),(0,_t.jsx)("div",{className:"sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full",children:(0,_t.jsx)("div",{className:"absolute bg-white sm:flex inset-0 z-50 sm:space-x-12",children:(0,_t.jsxs)(xn,{children:[(0,_t.jsx)(Vr,{template:e}),(0,_t.jsx)(Mr,{template:e})]})})})]})]})}function Br(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function Ur(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return qr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qr(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function zr(){var e=Ur((0,r.useState)(K.getState().apiKey),2),t=e[0],n=e[1],i=Ur((0,r.useState)(K.getState().email),2),o=i[0],a=i[1],s=Ur((0,r.useState)(""),2),u=s[0],l=s[1],c=Ur((0,r.useState)("info"),2),f=c[0],d=c[1],p=Ur((0,r.useState)(""),2),m=p[0],h=p[1];(0,r.useEffect)((function(){return function(){return d("info")}}),[]);var v=function(){var e,n=(e=k().mark((function e(n){var r,i,a,s,u,c;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.preventDefault(),l(""),r=o.length?o:m,e.next=5,R(r,t);case 5:if(i=e.sent,a=i.token,s=i.error,u=i.exception,void 0===(c=i.message)){e.next=13;break}return d("error"),e.abrupt("return",l(c.length?c:"Error: Are you interacting with the wrong server?"));case 13:if(!s&&!u){e.next=16;break}return d("error"),e.abrupt("return",l(s.length?s:u));case 16:if(a&&"string"==typeof a){e.next=19;break}return d("error"),e.abrupt("return",l((0,jt.__)("Something went wrong","extendify-sdk")));case 19:return d("success"),l("Success!"),e.next=23,new Promise((function(e){return setTimeout(e,1500)}));case 23:K.setState({apiKey:a}),w.setState({currentPage:"main"});case 25:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){Br(o,r,i,a,s,"next",e)}function s(e){Br(o,r,i,a,s,"throw",e)}a(void 0)}))});return function(e){return n.apply(this,arguments)}}();return(0,r.useEffect)((function(){o||D("user_email").then((function(e){return h(e)}))}),[o]),(0,_t.jsxs)("section",{className:"w-96 text-left md:-mt-32",children:[(0,_t.jsx)("h1",{className:"border-b border-gray-900 mb-12 pb-4",children:(0,jt.__)("Welcome","extendify-sdk")}),u&&(0,_t.jsx)("div",{className:Pt()({"border-b pb-6 mb-6 -mt-6":!0,"border-gray-900 text-gray-900":"info"===f,"border-wp-alert-red text-wp-alert-red":"error"===f,"border-extendify-main text-extendify-main":"success"===f}),children:u}),(0,_t.jsxs)("form",{onSubmit:v,className:" space-y-6",children:[(0,_t.jsxs)("div",{className:"flex items-center",children:[(0,_t.jsx)("label",{htmlFor:"extendifysdk-login-email",className:"w-32 font-bold",children:(0,jt.__)("Email:","extendify-sdk")}),(0,_t.jsx)("input",{id:"extendifysdk-login-email",name:"extendifysdk-login-email",type:"email",className:"border px-2 w-full",placeholder:"Email",value:o.length?o:m,onChange:function(e){return a(e.target.value)}})]}),(0,_t.jsxs)("div",{className:"flex items-center",children:[(0,_t.jsx)("label",{htmlFor:"extendifysdk-login-license",className:"w-32 font-bold",children:(0,jt.__)("License:","extendify-sdk")}),(0,_t.jsx)("input",{id:"extendifysdk-login-license",name:"extendifysdk-login-email",type:"text",className:"border px-2 w-full",placeholder:"License key",value:t,onChange:function(e){return n(e.target.value)}})]}),(0,_t.jsx)("div",{className:"flex justify-end",children:(0,_t.jsx)("button",{type:"submit",className:"button-extendify-main p-3 px-4",children:(0,jt.__)("Sign in","extendify-sdk")})})]})]})}function Wr(){return(0,_t.jsxs)("div",{className:"bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto",children:[(0,_t.jsx)(wn,{className:"w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"}),(0,_t.jsxs)("div",{className:"w-full flex-grow overflow-hidden bg-extendify-light",children:[(0,_t.jsx)("a",{href:"#extendify-templates",className:"sr-only focus:not-sr-only focus:text-blue-500",children:(0,jt.__)("Skip to content","extendify-sdk")}),(0,_t.jsx)("div",{className:"flex sm:space-x-12 relative mx-auto max-w-screen-4xl h-full",children:(0,_t.jsxs)("div",{className:"absolute flex inset-0 items-center justify-center z-20 sm:space-x-12",children:[(0,_t.jsx)("div",{className:"pl-12 py-6 absolute top-0 left-0",children:(0,_t.jsxs)("button",{type:"button",className:"cursor-pointer text-black bg-transparent font-medium flex items-center p-3 transform -translate-x-3 button-focus",onClick:function(){return w.setState({currentPage:"main"})},children:[(0,_t.jsx)("svg",{className:"fill-current",width:"8",height:"12",viewBox:"0 0 8 12",xmlns:"http://www.w3.org/2000/svg",children:(0,_t.jsx)("path",{d:"M6.70998 9.88047L2.82998 6.00047L6.70998 2.12047C7.09998 1.73047 7.09998 1.10047 6.70998 0.710469C6.31998 0.320469 5.68998 0.320469 5.29998 0.710469L0.70998 5.30047C0.31998 5.69047 0.31998 6.32047 0.70998 6.71047L5.29998 11.3005C5.68998 11.6905 6.31998 11.6905 6.70998 11.3005C7.08998 10.9105 7.09998 10.2705 6.70998 9.88047Z"})}),(0,_t.jsx)("span",{className:"ml-4",children:(0,jt.__)("Go back","extendify-sdk")})]})}),(0,_t.jsx)("div",{className:"flex justify-center",children:(0,_t.jsx)(zr,{})})]})})]})]})}function Zr(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function $r(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){Zr(o,r,i,a,s,"next",e)}function s(e){Zr(o,r,i,a,s,"throw",e)}a(void 0)}))}}function Gr(e){var t=e.action,n=e.callback,i=e.text;return(0,r.useEffect)((function(){t.then($r(k().mark((function e(){return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,n();case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)}))))})),(0,_t.jsx)(Nt.Modal,{title:i,isDismissible:!1,children:(0,_t.jsx)(Nt.Button,{style:{width:"100%"},disabled:!0,isPrimary:!0,isBusy:!0,onClick:function(){},children:(0,jt.__)("Please wait...","extendify-sdk")})})}function Jr(e){var t,n,r=e.page,i=b((function(e){return e.searchParams}));switch("main"!==r||Object.keys(null!==(t=null==i?void 0:i.taxonomies)&&void 0!==t?t:{}).length||(r="curated"),"main"===r&&"pattern"===(null==i?void 0:i.type)&&""===(null==i||null===(n=i.taxonomies)||void 0===n?void 0:n.tax_pattern_types)&&(r="curated"),r){case"welcome":return(0,_t.jsx)(Ot,{});case"waiting-crunching":return(0,_t.jsx)(Gr,{});case"curated":return(0,_t.jsx)(An,{});case"main":return(0,_t.jsx)(jn,{});case"single":return(0,_t.jsx)(Hr,{});case"login":return(0,_t.jsx)(Wr,{})}}var Kr=function(){return F.get("taxonomies")};function Yr(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function Xr(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){Yr(o,r,i,a,s,"next",e)}function s(e){Yr(o,r,i,a,s,"throw",e)}a(void 0)}))}}function Qr(){var e,t,n,i=(0,r.useRef)(null),o=w((function(e){return e.open})),a=w((function(e){return e.metaData})),s=w((function(e){return e.currentPage}));return e=o,t=function(){var e=document.getElementById("beacon-container");e&&(e.style.position="relative",e.style.zIndex=Number.MAX_SAFE_INTEGER,e.style.display="block")},n=function(){var e=document.getElementById("beacon-container");e&&(e.style.display="none",window.Beacon("close"))},(0,r.useEffect)((function(){if(e)return window.Beacon?(t(),function(){return n()}):(function(e,t,n){function r(){var e,n=t.getElementsByTagName("script")[0],r=t.createElement("script");r.async=!0,r.src="https://beacon-v2.helpscout.net",null===(e=n.parentNode)||void 0===e||e.insertBefore(r,n)}if(e.Beacon=n=function(t,n,r){e.Beacon.readyQueue.push({method:t,options:n,data:r})},n.readyQueue=[],"complete"===t.readyState)return r();e.attachEvent?e.attachEvent("onload",r):e.addEventListener("load",r,!1)}(window,document,window.Beacon||function(){}),window.Beacon("init","2b8c11c0-5afc-4cb9-bee0-a5cb76b2fc91"),window.Beacon("on","ready",t),function(){window.Beacon("off","ready",t),n()})}),[e]),function(e){var t=b((function(e){return e.setupDefaultTaxonomies})),n=Ft((function(e){return e.setTaxonomies})),i=(0,r.useCallback)(Xr(k().mark((function e(){var r;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Kr();case 2:r=e.sent,r=Object.keys(r).filter((function(e){return e.startsWith("tax_")})).reduce((function(e,t){return e[t]=r[t],e}),{}),t(r),n(r);case 6:case"end":return e.stop()}}),e)}))),[t,n]);(0,r.useEffect)((function(){e&&i()}),[i,e])}(o),(0,r.useEffect)((function(){o&&(K.getState().hasClickedThroughWelcomePage||w.setState({currentPage:"welcome"}))}),[o]),(0,r.useEffect)((function(){o&&!Object.keys(a).length&&kt().then((function(e){return w.setState({metaData:e})}))}),[o,a]),(0,_t.jsx)(Ie.Root,{show:o,as:r.Fragment,children:(0,_t.jsx)(wt,{as:"div",static:!0,className:"extendify-sdk",initialFocus:i,onClose:function(){},children:(0,_t.jsx)("div",{className:"h-screen w-screen sm:h-auto sm:w-auto fixed z-high inset-0 overflow-y-auto",children:(0,_t.jsxs)("div",{className:"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0",children:[(0,_t.jsx)(Ie.Child,{as:r.Fragment,enter:"ease-out duration-300",enterFrom:"opacity-0",enterTo:"opacity-100",children:(0,_t.jsx)(wt.Overlay,{className:"fixed inset-0 bg-black bg-opacity-30 transition-opacity"})}),(0,_t.jsx)(Ie.Child,{as:r.Fragment,enter:"ease-out duration-300",enterFrom:"opacity-0 translate-y-4 sm:translate-y-5",enterTo:"opacity-100 translate-y-0",children:(0,_t.jsx)("div",{ref:i,tabIndex:"0",className:"fixed lg:absolute inset-0 lg:overflow-hidden transform transition-all lg:p-5",children:(0,_t.jsx)(Jr,{page:s})})})]})})})})}function ei(e){var t=e.show,n=void 0!==t&&t,i=w((function(e){return e.setOpen})),o=(0,r.useCallback)((function(){return i(!0)}),[i]),a=(0,r.useCallback)((function(){i(!1)}),[i]);return(0,r.useEffect)((function(){n&&i(!0)}),[n,i]),(0,r.useEffect)((function(){return window.localStorage.getItem("etfy_library__key")&&K.setState({apiKey:"any-key-will-work-during-beta"}),function(){return window.localStorage.removeItem("etfy_library__key")}}),[]),(0,r.useEffect)((function(){return window.addEventListener("extendify-sdk::open-library",o),window.addEventListener("extendify-sdk::close-library",a),function(){window.removeEventListener("extendify-sdk::open-library",o),window.removeEventListener("extendify-sdk::close-library",a)}}),[a,o]),(0,_t.jsx)(Qr,{})}const ti=wp.plugins,ni=wp.editPost;function ri(e,t,n,r,i,o,a){try{var s=e[o](a),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,i)}function ii(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var o=e.apply(t,n);function a(e){ri(o,r,i,a,s,"next",e)}function s(e){ri(o,r,i,a,s,"throw",e)}a(void 0)}))}}var oi=function(e){var t,n;Xn(null===(t=e.target.closest("[data-extendify-identifier]"))||void 0===t||null===(n=t.dataset)||void 0===n?void 0:n.extendifyIdentifier)},ai=function(){var e,t,n;return null===window.extendifySdkData.user||(null===(e=window.extendifySdkData)||void 0===e||null===(t=e.user)||void 0===t||null===(n=t.state)||void 0===n?void 0:n.enabled)},si=(0,_t.jsx)("div",{id:"extendify-templates-inserter",children:(0,_t.jsxs)("button",{style:"background:#D9F1EE;color:#1e1e1e;border:1px solid #949494;font-weight:bold;font-size:14px;padding:8px;margin-right:8px",type:"button","data-extendify-identifier":"main-button",id:"extendify-templates-inserter-btn",className:"components-button",children:[(0,_t.jsxs)("svg",{style:"margin-right:0.5rem",width:"20",height:"20",viewBox:"0 0 103 103",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,_t.jsx)("rect",{y:"25.75",width:"70.8125",height:"77.25",fill:"#000000"}),(0,_t.jsx)("rect",{x:"45.0625",width:"57.9375",height:"57.9375",fill:"#37C2A2"})]}),(0,jt.__)("Library","extendify-sdk")]})});window._wpLoadBlockEditor&&window.wp.data.subscribe((function(){setTimeout((function(){ai()&&(document.getElementById("extendify-templates-inserter-btn")||document.querySelector(".edit-post-header-toolbar")&&(document.querySelector(".edit-post-header-toolbar").insertAdjacentHTML("beforeend",(0,r.renderToString)(si)),document.getElementById("extendify-templates-inserter-btn").addEventListener("click",oi)))}),0)})),window._wpLoadBlockEditor&&window.wp.data.subscribe((function(){setTimeout((function(){if(ai()&&document.querySelector("[id$=patterns-view]")&&!document.getElementById("extendify-cta-button")){var e=(0,_t.jsx)("div",{children:(0,_t.jsx)("button",{id:"extendify-cta-button",style:"margin:1rem 1rem 0","data-extendify-identifier":"patterns-cta",className:"components-button is-secondary",children:(0,jt.__)("Discover more patterns in Extendify Library","extendify-sdk")})});document.querySelector("[id$=patterns-view]").insertAdjacentHTML("afterbegin",(0,r.renderToString)(e)),document.getElementById("extendify-cta-button").addEventListener("click",oi)}}),0)}));window._wpLoadBlockEditor&&ai()&&(0,ti.registerPlugin)("extendify-temps-more-menu-trigger",{render:function(){return(0,_t.jsx)(ni.PluginSidebarMoreMenuItem,{"data-extendify-identifier":"sidebar-button",onClick:oi,icon:(0,_t.jsx)("span",{className:"components-menu-items__item-icon",children:(0,_t.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 103 103",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,_t.jsx)("rect",{y:"25.75",width:"70.8125",height:"77.25",fill:"#000000"}),(0,_t.jsx)("rect",{x:"45.0625",width:"57.9375",height:"57.9375",fill:"#37C2A2"})]})}),children:(0,jt.__)("Library","extendify-sdk")})}});window._wpLoadBlockEditor&&(0,ti.registerPlugin)("extendify-settings-enable-disable",{render:function(){return(0,_t.jsx)(ni.PluginSidebarMoreMenuItem,{onClick:ii(k().mark((function e(){var t;return k().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,I();case 2:return t=e.sent,(t=JSON.parse(t)).state.enabled=!ai(),e.next=7,M(JSON.stringify(Object.assign({},t)));case 7:location.reload();case 8:case"end":return e.stop()}}),e)}))),icon:(0,_t.jsx)(_t.Fragment,{}),children:ai()?(0,jt.__)("Disable Extendify","extendify-sdk"):(0,jt.__)("Enable Extendify","extendify-sdk")})}}),[{register:function(){var e=(0,Wn.dispatch)("core/notices").createNotice,t=K.getState().incrementImports;window.addEventListener("extendify-sdk::template-inserted",(function(n){e("info",(0,jt.__)("Template Added"),{isDismissible:!0,type:"snackbar"}),setTimeout((function(){var e;t(),Jt(null===(e=n.detail)||void 0===e?void 0:e.template)}),0)}))}},{register:function(){var e=this;window.addEventListener("extendify-sdk::softerror-encountered",(function(t){e[(0,Et.camelCase)(t.detail.type)](t.detail)}))},versionOutdated:function(e){(0,r.render)((0,_t.jsx)(tr,{title:e.data.title,message:e.data.message,buttonLabel:e.data.buttonLabel,forceOpen:!0}),document.getElementById("extendify-root"))}}].forEach((function(e){return e.register()})),window._wpLoadBlockEditor&&window.wp.domReady((function(){var e=Object.assign(document.createElement("div"),{id:"extendify-root"});if(document.body.append(e),(0,r.render)((0,_t.jsx)(ei,{}),e),e.parentNode.insertBefore(Object.assign(document.createElement("div"),{id:"extendify-util"}),e.nextSibling),qn.getState().importOnLoad){var t=qn.getState().wantedTemplate;setTimeout((function(){!function(e){if(!e)throw Error("Template not found");Nr(p((0,window.wp.blocks.parse)((0,Et.get)(e,"fields.code"))),e)}(t)}),0)}qn.setState({importOnLoad:!1,wantedTemplate:{}})}))},42:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function i(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var o=typeof n;if("string"===o||"number"===o)e.push(n);else if(Array.isArray(n)){if(n.length){var a=i.apply(null,n);a&&e.push(a)}}else if("object"===o)if(n.toString===Object.prototype.toString)for(var s in n)r.call(n,s)&&n[s]&&e.push(s);else e.push(n.toString())}}return e.join(" ")}e.exports?(i.default=i,e.exports=i):void 0===(n=function(){return i}.apply(t,[]))||(e.exports=n)}()},716:()=>{},525:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function i(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var a,s,u=i(e),l=1;l<arguments.length;l++){for(var c in a=Object(arguments[l]))n.call(a,c)&&(u[c]=a[c]);if(t){s=t(a);for(var f=0;f<s.length;f++)r.call(a,s[f])&&(u[s[f]]=a[s[f]])}}return u}},61:e=>{var t,n,r=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function a(e){if(t===setTimeout)return setTimeout(e,0);if((t===i||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:i}catch(e){t=i}try{n="function"==typeof clearTimeout?clearTimeout:o}catch(e){n=o}}();var s,u=[],l=!1,c=-1;function f(){l&&s&&(l=!1,s.length?u=s.concat(u):c=-1,u.length&&d())}function d(){if(!l){var e=a(f);l=!0;for(var t=u.length;t;){for(s=u,u=[];++c<t;)s&&s[c].run();c=-1,t=u.length}s=null,l=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===o||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function m(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new p(e,t)),1!==u.length||l||a(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=m,r.addListener=m,r.once=m,r.off=m,r.removeListener=m,r.removeAllListeners=m,r.emit=m,r.prependListener=m,r.prependOnceListener=m,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},426:(e,t,n)=>{"use strict";n(525);var r=n(804),i=60103;if(t.Fragment=60107,"function"==typeof Symbol&&Symbol.for){var o=Symbol.for;i=o("react.element"),t.Fragment=o("react.fragment")}var a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s=Object.prototype.hasOwnProperty,u={key:!0,ref:!0,__self:!0,__source:!0};function l(e,t,n){var r,o={},l=null,c=null;for(r in void 0!==n&&(l=""+n),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(c=t.ref),t)s.call(t,r)&&!u.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:i,type:e,key:l,ref:c,props:o,_owner:a.current}}t.jsx=l,t.jsxs=l},246:(e,t,n)=>{"use strict";e.exports=n(426)},248:e=>{var t=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var i=t&&t.prototype instanceof v?t:v,o=Object.create(i.prototype),a=new N(r||[]);return o._invoke=function(e,t,n){var r=f;return function(i,o){if(r===p)throw new Error("Generator is already running");if(r===m){if("throw"===i)throw o;return P()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===h)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=p;var u=c(e,t,n);if("normal"===u.type){if(r=n.done?m:d,u.arg===h)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r=m,n.method="throw",n.arg=u.arg)}}}(e,n,a),o}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var f="suspendedStart",d="suspendedYield",p="executing",m="completed",h={};function v(){}function y(){}function x(){}var g={};g[o]=function(){return this};var b=Object.getPrototypeOf,w=b&&b(b(C([])));w&&w!==n&&r.call(w,o)&&(g=w);var j=x.prototype=v.prototype=Object.create(g);function k(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function n(i,o,a,s){var u=c(e[i],e,o);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return n("throw",e,a,s)}))}s(u.arg)}var i;this._invoke=function(e,r){function o(){return new t((function(t,i){n(e,r,t,i)}))}return i=i?i.then(o,o):o()}}function _(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,_(e,n),"throw"===n.method))return h;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var i=c(r,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,h;var o=i.arg;return o?o.done?(n[e.resultName]=o.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,h):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function C(e){if(e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function n(){for(;++i<e.length;)if(r.call(e,i))return n.value=e[i],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}return{next:P}}function P(){return{value:t,done:!0}}return y.prototype=j.constructor=x,x.constructor=y,y.displayName=u(x,s,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,x):(e.__proto__=x,u(e,s,"GeneratorFunction")),e.prototype=Object.create(j),e},e.awrap=function(e){return{__await:e}},k(S.prototype),S.prototype[a]=function(){return this},e.AsyncIterator=S,e.async=function(t,n,r,i,o){void 0===o&&(o=Promise);var a=new S(l(t,n,r,i),o);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},k(j),u(j,s,"Generator"),j[o]=function(){return this},j.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=C,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(E),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function i(r,i){return s.type="throw",s.arg=e,n.next=r,i&&(n.method="next",n.arg=t),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,h):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),h},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;E(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:C(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),h}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},804:e=>{"use strict";e.exports=React}},n={};function r(e){var i=n[e];if(void 0!==i)return i.exports;var o=n[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=(t,n,i,o)=>{if(!n){var a=1/0;for(l=0;l<e.length;l++){for(var[n,i,o]=e[l],s=!0,u=0;u<n.length;u++)(!1&o||a>=o)&&Object.keys(r.O).every((e=>r.O[e](n[u])))?n.splice(u--,1):(s=!1,o<a&&(a=o));s&&(e.splice(l--,1),t=i())}return t}o=o||0;for(var l=e.length;l>0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[n,i,o]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={172:0,106:0};r.O.j=t=>0===e[t];var t=(t,n)=>{var i,o,[a,s,u]=n,l=0;for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(u)var c=u(r);for(t&&t(n);l<a.length;l++)o=a[l],r.o(e,o)&&e[o]&&e[o][0](),e[a[l]]=0;return r.O(c)},n=self.webpackChunk=self.webpackChunk||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),r.O(void 0,[106],(()=>r(446)));var i=r.O(void 0,[106],(()=>r(716)));i=r.O(i)})();
|
extendify-sdk/public/build/extendify-sdk.js.LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
object-assign
|
3 |
+
(c) Sindre Sorhus
|
4 |
+
@license MIT
|
5 |
+
*/
|
6 |
+
|
7 |
+
/*!
|
8 |
+
Copyright (c) 2018 Jed Watson.
|
9 |
+
Licensed under the MIT License (MIT), see
|
10 |
+
http://jedwatson.github.io/classnames
|
11 |
+
*/
|
12 |
+
|
13 |
+
/** @license React v17.0.2
|
14 |
+
* react-jsx-runtime.production.min.js
|
15 |
+
*
|
16 |
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
17 |
+
*
|
18 |
+
* This source code is licensed under the MIT license found in the
|
19 |
+
* LICENSE file in the root directory of this source tree.
|
20 |
+
*/
|
extendify-sdk/public/editorplus/editorplus.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
(()=>{var t={135:(t,e,r)=>{t.exports=r(248)},248:t=>{var e=function(t){"use strict";var e,r=Object.prototype,n=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function l(t,e,r,n){var o=e&&e.prototype instanceof v?e:v,i=Object.create(o.prototype),a=new P(n||[]);return i._invoke=function(t,e,r){var n=f;return function(o,i){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw i;return T()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=k(a,r);if(c){if(c===y)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=h;var u=s(t,e,r);if("normal"===u.type){if(n=r.done?p:d,u.arg===y)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n=p,r.method="throw",r.arg=u.arg)}}}(t,r,a),i}function s(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=l;var f="suspendedStart",d="suspendedYield",h="executing",p="completed",y={};function v(){}function m(){}function w(){}var g={};g[i]=function(){return this};var x=Object.getPrototypeOf,b=x&&x(x(j([])));b&&b!==r&&n.call(b,i)&&(g=b);var E=w.prototype=v.prototype=Object.create(g);function L(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function r(o,i,a,c){var u=s(t[o],t,i);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==typeof f&&n.call(f,"__await")?e.resolve(f.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(f).then((function(t){l.value=t,a(l)}),(function(t){return r("throw",t,a,c)}))}c(u.arg)}var o;this._invoke=function(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return o=o?o.then(i,i):i()}}function k(t,r){var n=t.iterator[r.method];if(n===e){if(r.delegate=null,"throw"===r.method){if(t.iterator.return&&(r.method="return",r.arg=e,k(t,r),"throw"===r.method))return y;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var o=s(n,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,y;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,y):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function S(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(S,this),this.reset(!0)}function j(t){if(t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}return{next:T}}function T(){return{value:e,done:!0}}return m.prototype=E.constructor=w,w.constructor=m,m.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===m||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,u(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},t.awrap=function(t){return{__await:t}},L(_.prototype),_.prototype[a]=function(){return this},t.AsyncIterator=_,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new _(l(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},L(E),u(E,c,"Generator"),E[i]=function(){return this},E.toString=function(){return"[object Generator]"},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=j,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(O),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function o(n,o){return c.type="throw",c.arg=t,r.next=n,o&&(r.method="next",r.arg=e),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),y},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),O(r),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:j(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),y}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function("r","regeneratorRuntime = r")(e)}}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=r(135),e=r.n(t);const n=wp.data;function o(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function i(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return a(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return a(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,i=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw i}}}}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function c(t){var e,r=!1;if(!(t instanceof CSSRule))return!1;var n,o=["https://dl.airtable.com"],a=i(null!==(e=t.cssText.match(/[(http(s)?)://(www.)?a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g))&&void 0!==e?e:[]);try{var c=function(){var t=n.value;try{var e=new URL(t);if(!o.includes(e.origin))return r=!0,"break"}catch(e){var i=["https://","http://",".com"].some((function(e){return-1!==t.indexOf(e)})),a=-1!==t.indexOf(o[0]);if(i&&!a)return r=!0,"break"}};for(a.s();!(n=a.n()).done;){if("break"===c())break}}catch(t){a.e(t)}finally{a.f()}return r}function u(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null!==(t=null===(e=window.wp.data.select("core/editor").getEditedPostAttribute("meta"))||void 0===e?void 0:e.extendify_custom_stylesheet)&&void 0!==t?t:"";if("string"==typeof r){r=r.replace(/(.eplus_styles)/g,"");var n=document.querySelector("#extendify-root"),o="extendify-custom-stylesheet";if(document.getElementById(o))document.getElementById(o).innerHTML=r;else{var i=document.createElement("style");i.id=o,i.type="text/css",i.appendChild(document.createTextNode(r)),n.appendChild(i)}}}function l(t,e){var r,n,o="",a=function(t){return e.some((function(e){return t.startsWith(e)}))},u=i(null!==(r=null==t?void 0:t.cssRules)&&void 0!==r?r:[]);try{for(u.s();!(n=u.n()).done;){var l=n.value;if(l instanceof CSSMediaRule){var s;if(c(l))continue;for(var f=null!==(s=null==l?void 0:l.cssRules)&&void 0!==s?s:[],d=[],h=0,p=Object.keys(f);h<p.length;h++){var y=p[h];a((y in f?f[y]:{}).selectorText)||d.push(y)}for(var v=0,m=d;v<m.length;v++){var w=m[v];l.deleteRule(w)}o+=l.cssText}if(l instanceof CSSStyleRule){if(c(l))continue;o+=a(l.selectorText)?l.cssText:""}}}catch(t){u.e(t)}finally{u.f()}return o}window._wpLoadBlockEditor&&window.addEventListener("extendify-sdk::template-inserted",(function(t){var e,r,o,i,a=t.detail.template,c="editorplus-template.php";if(null!=a&&null!==(e=a.fields)&&void 0!==e&&null!==(r=e.instructions)&&void 0!==r&&r.includes("enable_page_template")){var u=null!==(o=null===(i=(0,n.select)("core/editor").getEditorSettings())||void 0===i?void 0:i.availableTemplates)&&void 0!==o?o:{};Object.keys(u).includes(c)&&(0,n.dispatch)("core/editor").editPost({template:c})}})),window._wpLoadBlockEditor&&window.addEventListener("extendify-sdk::template-inserted",function(){var t,r=(t=e().mark((function t(r){var o,i,a,c,s,f,d,h,p,y,v,m;return e().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r.detail.template,c=null!==(o=null==a||null===(i=a.fields)||void 0===i?void 0:i.stylesheet)&&void 0!==o?o:""){t.next=4;break}return t.abrupt("return");case 4:return t.prev=4,t.next=7,fetch(c);case 7:return t.next=9,t.sent.text();case 9:return d=t.sent,h=null!==(s=null===(f=(0,n.select)("core/editor").getEditedPostAttribute("meta"))||void 0===f?void 0:f.extendify_custom_stylesheet)&&void 0!==s?s:"",p=document.createElement("style"),y="extendify-stylesheet",p.id=y,p.type="text/css",p.appendChild(document.createTextNode(d)),document.querySelector("#extendify-root").appendChild(p),(v=document.getElementById(y)).sheet.disable=!0,m=l(null==v?void 0:v.sheet,[".extendify-",".eplus_styles",".eplus-",'[class*="extendify-"]','[class*="extendify"]']),m+=h,v.parentNode.removeChild(v),u(m),t.next=25,(0,n.dispatch)("core/editor").editPost({meta:{extendify_custom_stylesheet:m}});case 25:t.next=30;break;case 27:t.prev=27,t.t0=t.catch(4),console.error(t.t0);case 30:case"end":return t.stop()}}),t,null,[[4,27]])})),function(){var e=this,r=arguments;return new Promise((function(n,i){var a=t.apply(e,r);function c(t){o(a,n,i,c,u,"next",t)}function u(t){o(a,n,i,c,u,"throw",t)}c(void 0)}))});return function(t){return r.apply(this,arguments)}}()),window._wpLoadBlockEditor&&window.wp.domReady((function(){setTimeout((function(){return u()}),0)})),window._wpLoadBlockEditor&&window.wp.data.subscribe((function(){var t="editorplus-template.php"===window.wp.data.select("core/editor").getEditedPostAttribute("template"),e=document.querySelector(".edit-post-visual-editor__post-title-wrapper"),r=document.querySelector(".editor-styles-wrapper");e&&r&&(t?(Promise.resolve().then((function(){return e.style.display="none"})),r.style.paddingTop="0",r.style.backgroundColor="#ffffff"):(e.style.removeProperty("display"),r.style.removeProperty("padding-top"),r.style.removeProperty("background-color")))}))})()})();
|
extendify-sdk/public/mix-manifest.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"/build/extendify-sdk.js": "/build/extendify-sdk.js",
|
3 |
+
"/editorplus/editorplus.min.js": "/editorplus/editorplus.min.js",
|
4 |
+
"/build/extendify-sdk.css": "/build/extendify-sdk.css"
|
5 |
+
}
|
extendify-sdk/readme.md
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Extendify SDK
|
2 |
+
|
3 |
+
Notable additional tools used:
|
4 |
+
- [Laravel Mix](https://laravel-mix.com/) - A webpack wrapper + dev server
|
5 |
+
- [TailwindCSS](https://tailwindcss.com/) - A utility framework for styling. Also their [Headless UI](https://headlessui.dev/) package.
|
6 |
+
- [Zustand](https://github.com/pmndrs/zustand) - A not-opinionated state management solution
|
7 |
+
|
8 |
+
<!-- TODO: Write doc on integration into other plugins -->
|
9 |
+
|
10 |
+
## Development guide
|
11 |
+
|
12 |
+
To get started, run `npm ci` then `npm run watch` to start a server. It's designed to proxy a server at `wordpres.test` to `localhost:3000` but we can extend that to be customizable via an environment variable or the like.
|
13 |
+
|
14 |
+
## Project structure
|
15 |
+
Below is a short description of the main files and directories of the application.
|
16 |
+
| Directory/File | Description |
|
17 |
+
| --- | --- |
|
18 |
+
| `/routes/api.php` | This file contains exposed REST endpoints. It's a custom router and essentially lets you define a route pattern and assign a class to handle it. |
|
19 |
+
| `/app` | This contains the server related files. It could even be renamed to `server` for clarity. |
|
20 |
+
| `/app/Controllers` | This directory contains controllers for various parts of the applications, like requesting templates or plugins. |
|
21 |
+
| `/app/App.php` | This file contains information about the application. The intent is to make it dynamically generated from the readme, configs, etc |
|
22 |
+
| `/app/ApiRouter.php` | An abstraction for making interfacing with the REST api a little less painless |
|
23 |
+
| `/app/Admin.php` | Loads in our script and styles to the admin area |
|
24 |
+
| `/app/Http.php` | Handles making external API calls. Every call exits here so it's a good place to add anything you want sent on every request |
|
25 |
+
| `/app/Plugin.php` | This file was taken from JetPack. Stylistically it doens't fit th rest of the application, so it proabably needs to be refactored |
|
26 |
+
| `/app/User.php` | Helper class to set up information about the user, like create a anonymous-ish uuid |
|
27 |
+
| `/public` | Assets are compiled to the build folder. Everything else should be static. The mix-manifest.json is a list of the compiled files. It's not in use today but we could use it for dynamic script versioning |
|
28 |
+
| `/loader.php` | This file is to be used by 3rd party plugins to decide who gets to load the SDK. The SDK while in develop mode doesn't use this file. |
|
29 |
+
| `/extendify-sdk.php` | This file decides whetehr to load the applocation, then loads it. This file shoudl probably remain withoug much logic. |
|
30 |
+
| `/bootstrap.php` | This file essentially does the loading. It could probably be combined with extendify-sdk, but it's an abstraction (and used to be much larger). |
|
31 |
+
|
32 |
+
|
33 |
+
## React application
|
34 |
+
The React part of the application starts by injecting a few buttons through the editor. You can find these in `buttons.js`. The app itself however is comprised of the main modal view, the api, some listeners to handle button clicks, and a "middleware" type section that will cycle through checks then take action based on pass/fail (this part was written quickly so will need tweaking with every addition).
|
35 |
+
|
36 |
+
TODO: complete this
|
37 |
+
| Directory/File | Description |
|
38 |
+
| --- | --- |
|
39 |
+
| `/src` | This is where the components are, as well as global listeners and helpers |
|
40 |
+
## Build files and configurations
|
41 |
+
Below is a just a few notes on the various build files we are currenly using
|
42 |
+
| Directory/File | Description |
|
43 |
+
| --- | --- |
|
44 |
+
| `/webpack.mix.js` | This handles the build process and starts the dev server. Handled by Laravel mix. Important to note here is that it includes a listing of the WP components we ignore and configure as global objects. TODO: maybe that can be dynamic instead of populating a list |
|
45 |
+
| `/tailwind.config.js` | This contains anything style related. Instead of creating a custom class, you should add the the config and let Tailwind build the class |
|
46 |
+
| `/phpcs.xml.dist` | This does some basic linting and security linting on PHP files. The config is highly customized. |
|
47 |
+
| `/.editorconfig` | Your editor should be able to auto adapt to these settings. |
|
48 |
+
| `/.eslintrc.js` | A very opinionated style guide. |
|
49 |
+
|
50 |
+
## Testing
|
51 |
+
Coming soon!
|
extendify-sdk/readme.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Extendify Sdk ===
|
2 |
+
Requires at least: 5.4
|
3 |
+
Stable tag: 7.1
|
4 |
+
Requires PHP: 5.6
|
5 |
+
Tested up to: 5.7.0
|
extendify-sdk/routes/api.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Api routes
|
4 |
+
*/
|
5 |
+
|
6 |
+
if (!defined('ABSPATH')) {
|
7 |
+
die('No direct access.');
|
8 |
+
}
|
9 |
+
|
10 |
+
use Extendify\ExtendifySdk\ApiRouter;
|
11 |
+
use Extendify\ExtendifySdk\Controllers\AuthController;
|
12 |
+
use Extendify\ExtendifySdk\Controllers\MetaController;
|
13 |
+
use Extendify\ExtendifySdk\Controllers\PingController;
|
14 |
+
use Extendify\ExtendifySdk\Controllers\UserController;
|
15 |
+
use Extendify\ExtendifySdk\Controllers\PluginController;
|
16 |
+
use Extendify\ExtendifySdk\Controllers\TaxonomyController;
|
17 |
+
use Extendify\ExtendifySdk\Controllers\TemplateController;
|
18 |
+
|
19 |
+
\add_action(
|
20 |
+
'rest_api_init',
|
21 |
+
function () {
|
22 |
+
ApiRouter::get('/active-plugins', [PluginController::class, 'active']);
|
23 |
+
ApiRouter::get('/plugins', [PluginController::class, 'index']);
|
24 |
+
ApiRouter::post('/plugins', [PluginController::class, 'install']);
|
25 |
+
|
26 |
+
ApiRouter::get('/taxonomies', [TaxonomyController::class, 'index']);
|
27 |
+
|
28 |
+
ApiRouter::post('/templates', [TemplateController::class, 'index']);
|
29 |
+
ApiRouter::post('/templates/(?P<template_id>[a-zA-Z0-9-]+)', [TemplateController::class, 'ping']);
|
30 |
+
ApiRouter::post('/related', [TemplateController::class, 'related']);
|
31 |
+
|
32 |
+
ApiRouter::get('/user', [UserController::class, 'show']);
|
33 |
+
ApiRouter::post('/user', [UserController::class, 'store']);
|
34 |
+
ApiRouter::get('/user-meta', [UserController::class, 'meta']);
|
35 |
+
ApiRouter::post('/register-mailing-list', [UserController::class, 'mailingList']);
|
36 |
+
|
37 |
+
ApiRouter::post('/register', [AuthController::class, 'register']);
|
38 |
+
ApiRouter::post('/login', [AuthController::class, 'login']);
|
39 |
+
|
40 |
+
ApiRouter::get('/meta-data', [MetaController::class, 'getAll']);
|
41 |
+
ApiRouter::post('/simple-ping', [PingController::class, 'ping']);
|
42 |
+
}
|
43 |
+
);
|
extendify-sdk/src/ExtendifyLibrary.js
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useEffect, useCallback } from '@wordpress/element'
|
2 |
+
import { useGlobalStore } from './state/GlobalState'
|
3 |
+
import { useUserStore } from './state/User'
|
4 |
+
import MainWindow from './pages/parts/MainWindow'
|
5 |
+
|
6 |
+
export default function ExtendifyLibrary({ show = false }) {
|
7 |
+
const setOpen = useGlobalStore(state => state.setOpen)
|
8 |
+
const showLibrary = useCallback(() => setOpen(true), [setOpen])
|
9 |
+
const hideLibrary = useCallback(() => {
|
10 |
+
setOpen(false)
|
11 |
+
}, [setOpen])
|
12 |
+
|
13 |
+
useEffect(() => {
|
14 |
+
show && setOpen(true)
|
15 |
+
}, [show, setOpen])
|
16 |
+
|
17 |
+
// Here for legacy reasons, we're checking if they have the old key stored
|
18 |
+
useEffect(() => {
|
19 |
+
if (window.localStorage.getItem('etfy_library__key')) {
|
20 |
+
useUserStore.setState({
|
21 |
+
apiKey: 'any-key-will-work-during-beta',
|
22 |
+
})
|
23 |
+
}
|
24 |
+
return () => window.localStorage.removeItem('etfy_library__key')
|
25 |
+
}, [])
|
26 |
+
|
27 |
+
// Let the visibility to be controlled from outside the application
|
28 |
+
useEffect(() => {
|
29 |
+
window.addEventListener('extendify-sdk::open-library', showLibrary)
|
30 |
+
window.addEventListener('extendify-sdk::close-library', hideLibrary)
|
31 |
+
return () => {
|
32 |
+
window.removeEventListener('extendify-sdk::open-library', showLibrary)
|
33 |
+
window.removeEventListener('extendify-sdk::close-library', hideLibrary)
|
34 |
+
}
|
35 |
+
}, [hideLibrary, showLibrary])
|
36 |
+
|
37 |
+
return <MainWindow/>
|
38 |
+
}
|
extendify-sdk/src/api/General.js
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Axios as api } from './axios'
|
2 |
+
|
3 |
+
export const General = {
|
4 |
+
metaData() {
|
5 |
+
return api.get('meta-data')
|
6 |
+
},
|
7 |
+
ping(action) {
|
8 |
+
return api.post('simple-ping', {
|
9 |
+
action,
|
10 |
+
})
|
11 |
+
},
|
12 |
+
}
|
extendify-sdk/src/api/Plugins.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Axios as api } from './axios'
|
2 |
+
|
3 |
+
export const Plugins = {
|
4 |
+
getInstalled() {
|
5 |
+
return api.get('plugins')
|
6 |
+
},
|
7 |
+
installAndActivate(plugins = []) {
|
8 |
+
const formData = new FormData()
|
9 |
+
formData.append('plugins', JSON.stringify(plugins))
|
10 |
+
return api.post(
|
11 |
+
'plugins', formData, {
|
12 |
+
headers: {
|
13 |
+
'Content-Type': 'multipart/form-data',
|
14 |
+
},
|
15 |
+
},
|
16 |
+
)
|
17 |
+
},
|
18 |
+
getActivated() {
|
19 |
+
return api.get('active-plugins')
|
20 |
+
},
|
21 |
+
}
|
extendify-sdk/src/api/Taxonomies.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Axios as api } from './axios'
|
2 |
+
|
3 |
+
export const Taxonomies = {
|
4 |
+
get() {
|
5 |
+
return api.get('taxonomies')
|
6 |
+
},
|
7 |
+
}
|
extendify-sdk/src/api/Templates.js
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { createTemplatesFilterFormula } from '../util/airtable'
|
2 |
+
import { Axios as api } from './axios'
|
3 |
+
import { templates as config } from '../config'
|
4 |
+
|
5 |
+
let count = 0
|
6 |
+
|
7 |
+
export const Templates = {
|
8 |
+
async get(searchParams, options = {}) {
|
9 |
+
count++
|
10 |
+
const templates = await api.post('templates', {
|
11 |
+
filterByFormula: createTemplatesFilterFormula(searchParams),
|
12 |
+
pageSize: options?.pageSize ?? config.templatesPerRequest,
|
13 |
+
categories: searchParams.taxonomies,
|
14 |
+
search: searchParams.search,
|
15 |
+
type: searchParams.type,
|
16 |
+
offset: options.offset ?? '',
|
17 |
+
initial: count === 1,
|
18 |
+
request_count: count,
|
19 |
+
})
|
20 |
+
return templates
|
21 |
+
},
|
22 |
+
related(
|
23 |
+
template, queryType, wantedType,
|
24 |
+
) {
|
25 |
+
return api.post('related', {
|
26 |
+
pageSize: 4,
|
27 |
+
query_type: queryType,
|
28 |
+
wanted_type: wantedType,
|
29 |
+
categories: template?.fields?.tax_categories,
|
30 |
+
pattern_types: template?.fields?.tax_pattern_types,
|
31 |
+
style: template?.fields?.tax_style,
|
32 |
+
type: template?.fields?.type,
|
33 |
+
template_id: template?.id,
|
34 |
+
})
|
35 |
+
},
|
36 |
+
|
37 |
+
// TODO: Refactor this later to combine the following three
|
38 |
+
maybeImport(template) {
|
39 |
+
return api.post(`templates/${template.id}`, {
|
40 |
+
template_id: template.id,
|
41 |
+
maybe_import: true,
|
42 |
+
type: template.fields.type,
|
43 |
+
pageSize: config.templatesPerRequest,
|
44 |
+
template_name: template.fields?.title,
|
45 |
+
})
|
46 |
+
},
|
47 |
+
single(template) {
|
48 |
+
return api.post(`templates/${template.id}`, {
|
49 |
+
template_id: template.id,
|
50 |
+
single: true,
|
51 |
+
type: template.fields.type,
|
52 |
+
pageSize: config.templatesPerRequest,
|
53 |
+
template_name: template.fields?.title,
|
54 |
+
})
|
55 |
+
},
|
56 |
+
import(template) {
|
57 |
+
return api.post(`templates/${template.id}`, {
|
58 |
+
template_id: template.id,
|
59 |
+
imported: true,
|
60 |
+
type: template.fields.type,
|
61 |
+
pageSize: config.templatesPerRequest,
|
62 |
+
template_name: template.fields?.title,
|
63 |
+
})
|
64 |
+
},
|
65 |
+
}
|
extendify-sdk/src/api/User.js
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Axios as api } from './axios'
|
2 |
+
|
3 |
+
export const User = {
|
4 |
+
getData() {
|
5 |
+
return api.get('user')
|
6 |
+
},
|
7 |
+
getMeta(key) {
|
8 |
+
return api.get('user-meta', {
|
9 |
+
params: {
|
10 |
+
key,
|
11 |
+
},
|
12 |
+
})
|
13 |
+
},
|
14 |
+
authenticate(email, key) {
|
15 |
+
const formData = new FormData()
|
16 |
+
formData.append('email', email)
|
17 |
+
formData.append('key', key)
|
18 |
+
return api.post(
|
19 |
+
'login', formData, {
|
20 |
+
headers: {
|
21 |
+
'Content-Type': 'multipart/form-data',
|
22 |
+
},
|
23 |
+
},
|
24 |
+
)
|
25 |
+
},
|
26 |
+
register(email) {
|
27 |
+
const formData = new FormData()
|
28 |
+
formData.append('data', email)
|
29 |
+
return api.post(
|
30 |
+
'register', formData, {
|
31 |
+
headers: {
|
32 |
+
'Content-Type': 'multipart/form-data',
|
33 |
+
},
|
34 |
+
},
|
35 |
+
)
|
36 |
+
},
|
37 |
+
setData(data) {
|
38 |
+
const formData = new FormData()
|
39 |
+
formData.append('data', JSON.stringify(data))
|
40 |
+
return api.post(
|
41 |
+
'user', formData, {
|
42 |
+
headers: {
|
43 |
+
'Content-Type': 'multipart/form-data',
|
44 |
+
},
|
45 |
+
},
|
46 |
+
)
|
47 |
+
},
|
48 |
+
registerMailingList(email) {
|
49 |
+
const formData = new FormData()
|
50 |
+
formData.append('email', email)
|
51 |
+
return api.post(
|
52 |
+
'register-mailing-list', formData, {
|
53 |
+
headers: {
|
54 |
+
'Content-Type': 'multipart/form-data',
|
55 |
+
},
|
56 |
+
},
|
57 |
+
)
|
58 |
+
},
|
59 |
+
}
|
extendify-sdk/src/api/axios.js
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import axios from 'axios'
|
2 |
+
import { useUserStore } from '../state/User'
|
3 |
+
|
4 |
+
const Axios = axios.create({
|
5 |
+
baseURL: window.extendifySdkData.root,
|
6 |
+
headers: {
|
7 |
+
'X-WP-Nonce': window.extendifySdkData.nonce,
|
8 |
+
'X-Requested-With': 'XMLHttpRequest',
|
9 |
+
'X-Extendify': true,
|
10 |
+
},
|
11 |
+
})
|
12 |
+
|
13 |
+
function findResponse(response) {
|
14 |
+
return Object.prototype.hasOwnProperty.call(response, 'data')
|
15 |
+
? response.data
|
16 |
+
: response
|
17 |
+
}
|
18 |
+
|
19 |
+
function handleErrors(error) {
|
20 |
+
if (!error.response) {
|
21 |
+
return
|
22 |
+
}
|
23 |
+
console.error(error.response)
|
24 |
+
// TODO: add a global error message system
|
25 |
+
return Promise.reject(findResponse(error.response))
|
26 |
+
}
|
27 |
+
|
28 |
+
function addDefaults(request) {
|
29 |
+
if (request.data) {
|
30 |
+
request.data.remaining_imports = useUserStore.getState().remainingImports()
|
31 |
+
request.data.entry_point = useUserStore.getState().entryPoint
|
32 |
+
request.data.total_imports = useUserStore.getState().imports
|
33 |
+
}
|
34 |
+
return request
|
35 |
+
}
|
36 |
+
|
37 |
+
function checkDevMode(request) {
|
38 |
+
request.headers['X-Extendify-Dev-Mode'] = window.location.search.indexOf('DEVMODE') > -1
|
39 |
+
request.headers['X-Extendify-Local-Mode'] = window.location.search.indexOf('LOCALMODE') > -1
|
40 |
+
return request
|
41 |
+
}
|
42 |
+
|
43 |
+
function checkForSoftError(response) {
|
44 |
+
if (Object.prototype.hasOwnProperty.call(response, 'soft_error')) {
|
45 |
+
window.dispatchEvent(new CustomEvent('extendify-sdk::softerror-encountered', {
|
46 |
+
detail: response.soft_error,
|
47 |
+
bubbles: true,
|
48 |
+
}))
|
49 |
+
}
|
50 |
+
return response
|
51 |
+
}
|
52 |
+
|
53 |
+
Axios.interceptors.response.use((response) => checkForSoftError(findResponse(response)),
|
54 |
+
(error) => handleErrors(error))
|
55 |
+
|
56 |
+
// TODO: setup a pipe function instead of this nested pattern
|
57 |
+
Axios.interceptors.request.use((request) => checkDevMode(addDefaults(request)),
|
58 |
+
(error) => error)
|
59 |
+
|
60 |
+
export { Axios }
|
extendify-sdk/src/app.css
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@tailwind base;
|
2 |
+
@tailwind components;
|
3 |
+
@tailwind utilities;
|
4 |
+
|
5 |
+
/* Adding CSS classes should be done with consideration and rarely */
|
6 |
+
.extendify-sdk *, .extendify-sdk *:after, .extendify-sdk *:before {
|
7 |
+
box-sizing: border-box;
|
8 |
+
border: 0 solid #e5e7eb;
|
9 |
+
}
|
10 |
+
.extendify-sdk .button-focus {
|
11 |
+
@apply focus:ring-2 focus:ring-wp-theme-500 ring-offset-1 outline-none;
|
12 |
+
}
|
13 |
+
.extendify-sdk .button-focus-big-green {
|
14 |
+
@apply focus:ring-4 focus:ring-offset-4 focus:ring-extendify-main outline-none;
|
15 |
+
}
|
16 |
+
.extendify-sdk select.button-focus,
|
17 |
+
.extendify-sdk input.button-focus {
|
18 |
+
@apply focus:border-transparent focus:outline-none;
|
19 |
+
}
|
20 |
+
|
21 |
+
.button-extendify-main {
|
22 |
+
@apply bg-extendify-main button-focus cursor-pointer transition duration-200 p-1.5 px-3 text-white hover:text-white no-underline hover:bg-gray-900 active:bg-gray-900 active:text-white focus:text-white whitespace-nowrap;
|
23 |
+
}
|
24 |
+
#extendify-search-input:focus ~ svg,
|
25 |
+
#extendify-search-input:not(:placeholder-shown) ~ svg {
|
26 |
+
@apply hidden;
|
27 |
+
}
|
28 |
+
#extendify-search-input::-webkit-textfield-decoration-container {
|
29 |
+
@apply mr-3;
|
30 |
+
}
|
31 |
+
|
32 |
+
/* WP tweaks and overrides */
|
33 |
+
.extendify-sdk .components-panel__body > .components-panel__body-title {
|
34 |
+
/* Override WP aggressive boder:none and border:0 */
|
35 |
+
border-bottom: 1px solid #e0e0e0 !important;
|
36 |
+
@apply bg-transparent;
|
37 |
+
}
|
38 |
+
.extendify-sdk .components-modal__header {
|
39 |
+
@apply border-b border-gray-300;
|
40 |
+
}
|
41 |
+
|
42 |
+
/* Special input animation */
|
43 |
+
.extendify-special-input:placeholder-shown ~ label {
|
44 |
+
@apply top-1.5;
|
45 |
+
@apply text-sm;
|
46 |
+
@apply text-gray-600;
|
47 |
+
}
|
48 |
+
.extendify-special-input:focus ~ label {
|
49 |
+
@apply -top-4;
|
50 |
+
@apply text-xs;
|
51 |
+
@apply text-extendify-main;
|
52 |
+
}
|
extendify-sdk/src/app.js
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import ExtendifyLibrary from './ExtendifyLibrary'
|
2 |
+
import { render } from '@wordpress/element'
|
3 |
+
import { useWantedTemplateStore } from './state/Importing'
|
4 |
+
import { injectTemplate } from './util/templateInjection'
|
5 |
+
import './buttons'
|
6 |
+
import './listeners'
|
7 |
+
|
8 |
+
window._wpLoadBlockEditor && window.wp.domReady(() => {
|
9 |
+
// Insert into the editor (note: Modal opens in a portal)
|
10 |
+
const extendify = Object.assign(document.createElement('div'), { id: 'extendify-root' })
|
11 |
+
document.body.append(extendify)
|
12 |
+
render(<ExtendifyLibrary/>, extendify)
|
13 |
+
|
14 |
+
// Add an extra div to use for utility modals, etc
|
15 |
+
extendify.parentNode.insertBefore(Object.assign(document.createElement('div'), { id: 'extendify-util' }),
|
16 |
+
extendify.nextSibling)
|
17 |
+
|
18 |
+
// Insert a template on page load if it exists in localstorage
|
19 |
+
// Note 6/28/21 - this was moved to after the render to possibly
|
20 |
+
// fix a bug where imports would go from 3->0.
|
21 |
+
if (useWantedTemplateStore.getState().importOnLoad) {
|
22 |
+
const template = useWantedTemplateStore.getState().wantedTemplate
|
23 |
+
setTimeout(() => { injectTemplate(template) }, 0)
|
24 |
+
}
|
25 |
+
|
26 |
+
// Reset template state after checking if we need an import
|
27 |
+
useWantedTemplateStore.setState({
|
28 |
+
importOnLoad: false,
|
29 |
+
wantedTemplate: {},
|
30 |
+
})
|
31 |
+
})
|
extendify-sdk/src/buttons.js
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import { renderToString } from '@wordpress/element'
|
3 |
+
import { registerPlugin } from '@wordpress/plugins'
|
4 |
+
import { openModal } from './util/general'
|
5 |
+
import { PluginSidebarMoreMenuItem } from '@wordpress/edit-post'
|
6 |
+
import { User } from './api/User'
|
7 |
+
|
8 |
+
const openLibrary = (event) => {
|
9 |
+
openModal(event.target.closest('[data-extendify-identifier]')?.dataset?.extendifyIdentifier)
|
10 |
+
}
|
11 |
+
|
12 |
+
// This returns true if the user object is null (Library never opened), or if it's enabled in the user settings
|
13 |
+
const isLibraryEnabled = () => window.extendifySdkData.user === null || window.extendifySdkData?.user?.state?.enabled
|
14 |
+
|
15 |
+
const mainButton = <div id="extendify-templates-inserter">
|
16 |
+
<button
|
17 |
+
style="background:#D9F1EE;color:#1e1e1e;border:1px solid #949494;font-weight:bold;font-size:14px;padding:8px;margin-right:8px"
|
18 |
+
type="button"
|
19 |
+
data-extendify-identifier="main-button"
|
20 |
+
id="extendify-templates-inserter-btn"
|
21 |
+
className="components-button">
|
22 |
+
<svg style="margin-right:0.5rem" width="20" height="20" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
23 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="#000000"/>
|
24 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2"/>
|
25 |
+
</svg>
|
26 |
+
{__('Library', 'extendify-sdk')}
|
27 |
+
</button>
|
28 |
+
</div>
|
29 |
+
|
30 |
+
// Add the MAIN button when Gutenberg is available and ready
|
31 |
+
window._wpLoadBlockEditor && window.wp.data.subscribe(() => {
|
32 |
+
setTimeout(() => {
|
33 |
+
// Redundant extra check added because of a bug where the above check wasn't working
|
34 |
+
if (!isLibraryEnabled()) {
|
35 |
+
return
|
36 |
+
}
|
37 |
+
if (document.getElementById('extendify-templates-inserter-btn')) {
|
38 |
+
return
|
39 |
+
}
|
40 |
+
if (!document.querySelector('.edit-post-header-toolbar')) {
|
41 |
+
return
|
42 |
+
}
|
43 |
+
document.querySelector('.edit-post-header-toolbar').insertAdjacentHTML('beforeend', renderToString(mainButton))
|
44 |
+
document.getElementById('extendify-templates-inserter-btn').addEventListener('click', openLibrary)
|
45 |
+
}, 0)
|
46 |
+
})
|
47 |
+
|
48 |
+
// The CTA button inside patterns
|
49 |
+
window._wpLoadBlockEditor && window.wp.data.subscribe(() => {
|
50 |
+
setTimeout(() => {
|
51 |
+
// Redundant extra check added because of a bug where the above check wasn't working
|
52 |
+
if (!isLibraryEnabled()) {
|
53 |
+
return
|
54 |
+
}
|
55 |
+
if (!document.querySelector('[id$=patterns-view]')) {
|
56 |
+
return
|
57 |
+
}
|
58 |
+
if (document.getElementById('extendify-cta-button')) {
|
59 |
+
return
|
60 |
+
}
|
61 |
+
const ctaButton = <div>
|
62 |
+
<button
|
63 |
+
id="extendify-cta-button"
|
64 |
+
style="margin:1rem 1rem 0"
|
65 |
+
data-extendify-identifier="patterns-cta"
|
66 |
+
className="components-button is-secondary">
|
67 |
+
{__('Discover more patterns in Extendify Library', 'extendify-sdk')}
|
68 |
+
</button>
|
69 |
+
</div>
|
70 |
+
document.querySelector('[id$=patterns-view]').insertAdjacentHTML('afterbegin', renderToString(ctaButton))
|
71 |
+
document.getElementById('extendify-cta-button').addEventListener('click', openLibrary)
|
72 |
+
}, 0)
|
73 |
+
})
|
74 |
+
|
75 |
+
// The right dropdown side menu
|
76 |
+
const SideMenuButton = () => <PluginSidebarMoreMenuItem
|
77 |
+
data-extendify-identifier="sidebar-button"
|
78 |
+
onClick={openLibrary}
|
79 |
+
icon={
|
80 |
+
<span className="components-menu-items__item-icon">
|
81 |
+
<svg width="20" height="20" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
82 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="#000000"/>
|
83 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2"/>
|
84 |
+
</svg>
|
85 |
+
</span>
|
86 |
+
}
|
87 |
+
>
|
88 |
+
{__('Library', 'extendify-sdk')}
|
89 |
+
</PluginSidebarMoreMenuItem>
|
90 |
+
window._wpLoadBlockEditor && isLibraryEnabled() && registerPlugin('extendify-temps-more-menu-trigger', {
|
91 |
+
render: SideMenuButton,
|
92 |
+
})
|
93 |
+
|
94 |
+
// This will add a button to enable or disable the library button
|
95 |
+
const LibraryEnableDisable = () => <PluginSidebarMoreMenuItem
|
96 |
+
onClick={async () => {
|
97 |
+
// This works even when the Library hasn't been opened yet
|
98 |
+
// because User.getData() will build a barebones User object
|
99 |
+
let userData = await User.getData()
|
100 |
+
userData = JSON.parse(userData)
|
101 |
+
userData.state.enabled = !isLibraryEnabled()
|
102 |
+
await User.setData(JSON.stringify(Object.assign({}, userData)))
|
103 |
+
location.reload()
|
104 |
+
}}
|
105 |
+
icon={<></>}
|
106 |
+
>
|
107 |
+
{isLibraryEnabled()
|
108 |
+
? __('Disable Extendify', 'extendify-sdk')
|
109 |
+
: __('Enable Extendify', 'extendify-sdk')}
|
110 |
+
</PluginSidebarMoreMenuItem>
|
111 |
+
|
112 |
+
// Load this button always, which is used to enable or disable
|
113 |
+
window._wpLoadBlockEditor && registerPlugin('extendify-settings-enable-disable', {
|
114 |
+
render: LibraryEnableDisable,
|
115 |
+
})
|
extendify-sdk/src/components/ImportButton.js
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {
|
2 |
+
useEffect, useState, useRef,
|
3 |
+
} from '@wordpress/element'
|
4 |
+
import { useTemplatesStore } from '../state/Templates'
|
5 |
+
import { AuthorizationCheck, Middleware } from '../middleware'
|
6 |
+
import { injectTemplateBlocks } from '../util/templateInjection'
|
7 |
+
import { useWantedTemplateStore } from '../state/Importing'
|
8 |
+
import { useUserStore } from '../state/User'
|
9 |
+
import { useGlobalStore } from '../state/GlobalState'
|
10 |
+
import { __, sprintf } from '@wordpress/i18n'
|
11 |
+
import { Templates as TemplatesApi } from '../api/Templates'
|
12 |
+
import { render } from '@wordpress/element'
|
13 |
+
import ExtendifyLibrary from '../ExtendifyLibrary'
|
14 |
+
|
15 |
+
const canImportMiddleware = Middleware(['NeedsRegistrationModal', 'hasRequiredPlugins', 'hasPluginsActivated'])
|
16 |
+
export function ImportButton({ template }) {
|
17 |
+
const importButtonRef = useRef(null)
|
18 |
+
const activeTemplateBlocks = useTemplatesStore(state => state.activeTemplateBlocks)
|
19 |
+
const canImport = useUserStore(state => state.canImport)
|
20 |
+
const apiKey = useUserStore(state => state.apiKey)
|
21 |
+
const setOpen = useGlobalStore(state => state.setOpen)
|
22 |
+
const [importing, setImporting] = useState(false)
|
23 |
+
const [middlewareChecked, setMiddlewareChecked] = useState(false)
|
24 |
+
const setWanted = useWantedTemplateStore(state => state.setWanted)
|
25 |
+
const importTemplates = () => {
|
26 |
+
AuthorizationCheck(canImportMiddleware.stack).then(() => {
|
27 |
+
// Give it a bit of time for the importing state to render
|
28 |
+
setTimeout(() => {
|
29 |
+
injectTemplateBlocks(activeTemplateBlocks, template)
|
30 |
+
.then(() => setOpen(false))
|
31 |
+
.then(() => render(<ExtendifyLibrary/>, document.getElementById('extendify-root')))
|
32 |
+
}, 100)
|
33 |
+
})
|
34 |
+
}
|
35 |
+
|
36 |
+
useEffect(() => {
|
37 |
+
canImportMiddleware.check(template).then(() => setMiddlewareChecked(true))
|
38 |
+
return () => canImportMiddleware.reset() && setMiddlewareChecked(false)
|
39 |
+
}, [template])
|
40 |
+
|
41 |
+
useEffect(() => {
|
42 |
+
if (!importing && importButtonRef.current) {
|
43 |
+
importButtonRef.current.focus()
|
44 |
+
}
|
45 |
+
}, [importButtonRef, importing, middlewareChecked])
|
46 |
+
|
47 |
+
const importTemplate = () => {
|
48 |
+
// This was added here to make the call fire before rendering is finished.
|
49 |
+
// This is because some users would drop this call otherwise.
|
50 |
+
TemplatesApi.maybeImport(template)
|
51 |
+
setImporting(true)
|
52 |
+
setWanted(template)
|
53 |
+
importTemplates()
|
54 |
+
}
|
55 |
+
|
56 |
+
if (!middlewareChecked || !Object.keys(activeTemplateBlocks).length) {
|
57 |
+
return ''
|
58 |
+
}
|
59 |
+
|
60 |
+
if (!apiKey && !canImport()) {
|
61 |
+
return <a
|
62 |
+
ref={importButtonRef}
|
63 |
+
className="button-extendify-main text-lg sm:text-2xl py-1.5 px-3 sm:py-2.5 sm:px-5"
|
64 |
+
target="_blank"
|
65 |
+
href={`https://extendify.com/pricing?utm_source=${window.extendifySdkData.source}&utm_medium=library&utm_campaign=sign_up&utm_content=single_page`}
|
66 |
+
rel="noreferrer">
|
67 |
+
{__('Sign up now', 'extendify-sdk')}
|
68 |
+
</a>
|
69 |
+
}
|
70 |
+
|
71 |
+
if (importing) {
|
72 |
+
return <button
|
73 |
+
type="button"
|
74 |
+
disabled
|
75 |
+
className="components-button is-secondary text-lg sm:text-2xl h-auto py-1.5 px-3 sm:py-2.5 sm:px-5"
|
76 |
+
onClick={() => {}}>
|
77 |
+
{__('Importing...', 'extendify-sdk')}
|
78 |
+
</button>
|
79 |
+
}
|
80 |
+
|
81 |
+
return <button
|
82 |
+
ref={importButtonRef}
|
83 |
+
type="button"
|
84 |
+
className="components-button is-primary text-lg sm:text-2xl h-auto py-1.5 px-3 sm:py-2.5 sm:px-5"
|
85 |
+
onClick={() => importTemplate()}>
|
86 |
+
{sprintf(__('Add %s', 'extendify-sdk'), template.fields.type)}
|
87 |
+
</button>
|
88 |
+
}
|
extendify-sdk/src/components/LoginInterface.js
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useUserStore } from '../state/User'
|
2 |
+
import { useState, useEffect } from '@wordpress/element'
|
3 |
+
import { User as UserApi } from '../api/User'
|
4 |
+
import { __ } from '@wordpress/i18n'
|
5 |
+
import { useGlobalStore } from '../state/GlobalState'
|
6 |
+
import classNames from 'classnames'
|
7 |
+
|
8 |
+
export default function LoginInterface() {
|
9 |
+
const [apiKey, setApiKey] = useState(useUserStore.getState().apiKey)
|
10 |
+
const [email, setEmail] = useState(useUserStore.getState().email)
|
11 |
+
const [feedback, setFeedback] = useState('')
|
12 |
+
const [feedbackType, setFeedbackType] = useState('info')
|
13 |
+
const [possibleEmail, setPossibleEmail] = useState('')
|
14 |
+
|
15 |
+
// This will reset the default error state to info
|
16 |
+
useEffect(() => () => setFeedbackType('info'), [])
|
17 |
+
|
18 |
+
const confirmKey = async (event) => {
|
19 |
+
event.preventDefault()
|
20 |
+
setFeedback('')
|
21 |
+
const emailToSend = email.length
|
22 |
+
? email
|
23 |
+
: possibleEmail
|
24 |
+
const { token, error, exception, message } = await UserApi.authenticate(emailToSend, apiKey)
|
25 |
+
|
26 |
+
if (typeof message !== 'undefined') {
|
27 |
+
setFeedbackType('error')
|
28 |
+
return setFeedback(message.length
|
29 |
+
? message
|
30 |
+
: 'Error: Are you interacting with the wrong server?')
|
31 |
+
}
|
32 |
+
|
33 |
+
if (error || exception) {
|
34 |
+
setFeedbackType('error')
|
35 |
+
return setFeedback(error.length
|
36 |
+
? error
|
37 |
+
: exception)
|
38 |
+
}
|
39 |
+
|
40 |
+
if (!token || typeof token !== 'string') {
|
41 |
+
setFeedbackType('error')
|
42 |
+
return setFeedback(__('Something went wrong', 'extendify-sdk'))
|
43 |
+
}
|
44 |
+
|
45 |
+
setFeedbackType('success')
|
46 |
+
setFeedback('Success!')
|
47 |
+
await new Promise((resolve) => setTimeout(resolve, 1500))
|
48 |
+
useUserStore.setState({
|
49 |
+
// email: emailToSend,
|
50 |
+
apiKey: token,
|
51 |
+
})
|
52 |
+
useGlobalStore.setState({
|
53 |
+
currentPage: 'main',
|
54 |
+
})
|
55 |
+
}
|
56 |
+
|
57 |
+
useEffect(() => {
|
58 |
+
if (!email) {
|
59 |
+
UserApi.getMeta('user_email')
|
60 |
+
.then((value) => setPossibleEmail(value))
|
61 |
+
}
|
62 |
+
}, [email])
|
63 |
+
|
64 |
+
return <section className="w-96 text-left md:-mt-32">
|
65 |
+
<h1 className="border-b border-gray-900 mb-12 pb-4">{__('Welcome', 'extendify-sdk')}</h1>
|
66 |
+
{feedback &&
|
67 |
+
<div className={classNames({
|
68 |
+
'border-b pb-6 mb-6 -mt-6': true,
|
69 |
+
'border-gray-900 text-gray-900': feedbackType === 'info',
|
70 |
+
'border-wp-alert-red text-wp-alert-red': feedbackType === 'error',
|
71 |
+
'border-extendify-main text-extendify-main': feedbackType === 'success',
|
72 |
+
})}>
|
73 |
+
{feedback}
|
74 |
+
</div>
|
75 |
+
}
|
76 |
+
<form onSubmit={confirmKey} className=" space-y-6">
|
77 |
+
<div className="flex items-center">
|
78 |
+
<label htmlFor="extendifysdk-login-email" className="w-32 font-bold">
|
79 |
+
{__('Email:', 'extendify-sdk')}
|
80 |
+
</label>
|
81 |
+
<input
|
82 |
+
id="extendifysdk-login-email"
|
83 |
+
name="extendifysdk-login-email"
|
84 |
+
type="email"
|
85 |
+
className="border px-2 w-full"
|
86 |
+
placeholder="Email"
|
87 |
+
value={email.length
|
88 |
+
? email
|
89 |
+
: possibleEmail}
|
90 |
+
onChange={(event) => setEmail(event.target.value)}/>
|
91 |
+
</div>
|
92 |
+
<div className="flex items-center">
|
93 |
+
<label htmlFor="extendifysdk-login-license" className="w-32 font-bold">
|
94 |
+
{__('License:', 'extendify-sdk')}
|
95 |
+
</label>
|
96 |
+
<input
|
97 |
+
id="extendifysdk-login-license"
|
98 |
+
name="extendifysdk-login-email"
|
99 |
+
type="text"
|
100 |
+
className="border px-2 w-full"
|
101 |
+
placeholder="License key"
|
102 |
+
value={apiKey}
|
103 |
+
onChange={(event) => setApiKey(event.target.value)}/>
|
104 |
+
</div>
|
105 |
+
<div className="flex justify-end">
|
106 |
+
<button
|
107 |
+
type="submit"
|
108 |
+
className="button-extendify-main p-3 px-4">
|
109 |
+
{__('Sign in', 'extendify-sdk')}
|
110 |
+
</button>
|
111 |
+
</div>
|
112 |
+
</form>
|
113 |
+
</section>
|
114 |
+
}
|
extendify-sdk/src/components/Loginbutton.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useGlobalStore } from '../state/GlobalState'
|
2 |
+
import { useUserStore } from '../state/User'
|
3 |
+
import { __ } from '@wordpress/i18n'
|
4 |
+
|
5 |
+
export default function LoginButton() {
|
6 |
+
const apiKey = useUserStore(state => state.apiKey)
|
7 |
+
if (apiKey.length === 0) {
|
8 |
+
return <button
|
9 |
+
type="button"
|
10 |
+
className="components-button inline-block flex-1 text-center hover:bg-gray-100"
|
11 |
+
onClick={() => useGlobalStore.setState({
|
12 |
+
currentPage: 'login',
|
13 |
+
})}>
|
14 |
+
{__('Log into account', 'extendify-sdk')}
|
15 |
+
</button>
|
16 |
+
}
|
17 |
+
|
18 |
+
// This code currently won't render unless in DEVMODE
|
19 |
+
return <button
|
20 |
+
type="button"
|
21 |
+
className="components-button inline-block flex-1 text-center hover:bg-gray-100"
|
22 |
+
onClick={() => useUserStore.setState({
|
23 |
+
apiKey: '',
|
24 |
+
})}>{__('Log out', 'extendify-sdk')}</button>
|
25 |
+
}
|
extendify-sdk/src/components/SearchPredict.js
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {
|
2 |
+
useEffect, useState, useRef,
|
3 |
+
} from '@wordpress/element'
|
4 |
+
import Fuse from 'fuse.js'
|
5 |
+
|
6 |
+
export default function SearchPredict({ value, setValue, list, label, touched }) {
|
7 |
+
const searchRef = useRef()
|
8 |
+
const wasFocused = useRef(false)
|
9 |
+
const [componentId] = useState('extendify-label' + Date.now() + Math.floor(Math.random() * 1000000))
|
10 |
+
const [fuzzy, setFuzzy] = useState({})
|
11 |
+
const [tempValue, setTempValue] = useState('')
|
12 |
+
const [visibleChoices, setVisibleChoices] = useState([])
|
13 |
+
|
14 |
+
const updateSearch = (term) => {
|
15 |
+
wasFocused.current = true
|
16 |
+
setTempValue(term)
|
17 |
+
filter(term)
|
18 |
+
}
|
19 |
+
|
20 |
+
const filter = (term = '') => {
|
21 |
+
if (!term) {
|
22 |
+
setVisibleChoices(list)
|
23 |
+
}
|
24 |
+
const results = fuzzy.search(term)
|
25 |
+
if (!results || !results.length) {
|
26 |
+
return
|
27 |
+
}
|
28 |
+
setVisibleChoices(results.length ? results.map(t => t.item) : list)
|
29 |
+
}
|
30 |
+
|
31 |
+
useEffect(() => {
|
32 |
+
setTempValue(value)
|
33 |
+
}, [value])
|
34 |
+
|
35 |
+
useEffect(() => {
|
36 |
+
setFuzzy(new Fuse(list, {}))
|
37 |
+
}, [list])
|
38 |
+
|
39 |
+
useEffect(() => {
|
40 |
+
if (!list.length) {
|
41 |
+
return
|
42 |
+
}
|
43 |
+
const handle = (event) => {
|
44 |
+
if (searchRef.current.isSameNode(event.target)) {
|
45 |
+
return
|
46 |
+
}
|
47 |
+
if (event.target.classList.contains(`extendify-predict-${componentId}`)) {
|
48 |
+
return setVisibleChoices([])
|
49 |
+
}
|
50 |
+
setVisibleChoices([])
|
51 |
+
if (!list.includes(searchRef.current.value)) {
|
52 |
+
setValue('')
|
53 |
+
}
|
54 |
+
|
55 |
+
// Consider the component touched when clicked away
|
56 |
+
wasFocused.current && touched()
|
57 |
+
}
|
58 |
+
document.addEventListener('click', handle)
|
59 |
+
return () => document.removeEventListener('click', handle)
|
60 |
+
}, [componentId, touched, setValue, list])
|
61 |
+
|
62 |
+
return <div className="relative max-w-md">
|
63 |
+
<input
|
64 |
+
ref={searchRef}
|
65 |
+
id={componentId}
|
66 |
+
value={tempValue || ''}
|
67 |
+
onChange={(event) => updateSearch(event.target.value)}
|
68 |
+
onFocus={() => updateSearch('')}
|
69 |
+
type="text"
|
70 |
+
disabled={!Object.keys(fuzzy).length}
|
71 |
+
className="extendify-special-input button-focus text-sm h-8 min-h-0 border border-gray-900 special-input placeholder-transparent rounded-none w-full px-2 button-focus-big-green"
|
72 |
+
placeholder={label} />
|
73 |
+
<label htmlFor={componentId} className="-top-3 bg-white absolute left-1 px-1 transition-all delay-300">
|
74 |
+
{label}
|
75 |
+
</label>
|
76 |
+
{/* TODO: this could use some accessability updates like keyboard nav, etc */}
|
77 |
+
{visibleChoices && <div className="absolute top-100 flex flex-col w-full shadow-md bg-white overflow-x-hidden left-px divide-y max-h-64 overflow-scroll">
|
78 |
+
{visibleChoices.map((cat =>
|
79 |
+
<button
|
80 |
+
key={cat}
|
81 |
+
type="button"
|
82 |
+
className={`outline-none focus:bg-gray-100 bg-white text-left p-4 text-sm border-gray-300 hover:bg-gray-100 extendify-predict-${componentId}`}
|
83 |
+
onClick={() => { setValue(cat); setTempValue(cat)}}>
|
84 |
+
{cat}
|
85 |
+
</button>
|
86 |
+
))}
|
87 |
+
</div>}
|
88 |
+
</div>
|
89 |
+
}
|
extendify-sdk/src/components/TaxonomyBreadcrumbs.js
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useTemplatesStore } from '../state/Templates'
|
2 |
+
|
3 |
+
export default function TaxonomyBreadcrumbs() {
|
4 |
+
const searchParams = useTemplatesStore(state => state.searchParams)
|
5 |
+
const formatTitle = (title) => title.replace('tax_', '').replace(/_/g , ' ').replace(/\b\w/g, l => l.toUpperCase())
|
6 |
+
return <div className="hidden sm:flex items-start flex-col lg:flex-row -mt-2 lg:-mx-2 mb-4 lg:divide-x-2 lg:leading-none">
|
7 |
+
{Object.entries(searchParams.taxonomies).map((tax) => {
|
8 |
+
// Special exception for page templates
|
9 |
+
if (searchParams.type === 'template' && tax[0] === 'tax_pattern_types') {
|
10 |
+
return ''
|
11 |
+
}
|
12 |
+
// Special exception for plugins (like metaslider) that won't have full page templates
|
13 |
+
if (searchParams.type === 'template' && tax[0] === 'tax_features') {
|
14 |
+
return ''
|
15 |
+
}
|
16 |
+
// Special exception for page types
|
17 |
+
if (searchParams.type === 'pattern' && tax[0] === 'tax_page_types') {
|
18 |
+
return ''
|
19 |
+
}
|
20 |
+
return <div key={tax[0]} className="lg:px-2 text-left">
|
21 |
+
<span className="font-bold">{formatTitle(tax[0])}</span>: <span>{tax[1]
|
22 |
+
? tax[1]
|
23 |
+
: 'All'}</span>
|
24 |
+
</div>
|
25 |
+
})}</div>
|
26 |
+
}
|
extendify-sdk/src/components/TaxonomyList.js
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { getPluginDescription } from '../util/general'
|
2 |
+
import { __ } from '@wordpress/i18n'
|
3 |
+
|
4 |
+
export default function TaxonomyList({ categories, styles, types, requiredPlugins }) {
|
5 |
+
return <>
|
6 |
+
{categories && <div className="w-full pb-4">
|
7 |
+
<h3 className="text-sm m-0 mb-2">{__('Categories:', 'extendify-sdk')}</h3>
|
8 |
+
<div>{categories.join(', ')}</div>
|
9 |
+
</div>}
|
10 |
+
{styles && <div className="w-full py-4">
|
11 |
+
<h3 className="text-sm m-0 my-2">{__('Styles:', 'extendify-sdk')}</h3>
|
12 |
+
<div>{styles.join(', ')}</div>
|
13 |
+
</div>}
|
14 |
+
{types && <div className="w-full py-4">
|
15 |
+
<h3 className="text-sm m-0 my-2">{__('Types:', 'extendify-sdk')}</h3>
|
16 |
+
<div>{types.join(', ')}</div>
|
17 |
+
</div>}
|
18 |
+
{/* // Hardcoded temporarily to not force EP install */}
|
19 |
+
{/* {requiredPlugins && <div className="pt-4 w-full"> */}
|
20 |
+
{requiredPlugins.filter((p) => p !== 'editorplus').length > 0 && <div className="pt-4 w-full">
|
21 |
+
<h3 className="text-sm m-0 my-2">{__('Required Plugins:', 'extendify-sdk')}</h3>
|
22 |
+
<div>
|
23 |
+
{
|
24 |
+
// Hardcoded temporarily to not force EP install
|
25 |
+
// requiredPlugins.map(p => getPluginDescription(p)).join(', ')
|
26 |
+
requiredPlugins.filter((p) => p !== 'editorplus').map(p => getPluginDescription(p)).join(', ')
|
27 |
+
}
|
28 |
+
</div>
|
29 |
+
</div>}
|
30 |
+
<div className="py-4 mt-4">
|
31 |
+
<a
|
32 |
+
href={`https://extendify.com/what-happens-when-a-template-is-added?utm_source=${window.extendifySdkData.source}&utm_medium=library&utm_campaign=sidebar`}
|
33 |
+
rel="noreferrer"
|
34 |
+
target="_blank">
|
35 |
+
{__('What happens when a template is added?', 'extendify-sdk')}
|
36 |
+
</a>
|
37 |
+
</div>
|
38 |
+
</>
|
39 |
+
}
|
extendify-sdk/src/components/TaxonomySection.js
ADDED
@@ -0,0 +1,178 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { PanelBody, PanelRow } from '@wordpress/components'
|
2 |
+
import classNames from 'classnames'
|
3 |
+
import { useTemplatesStore } from '../state/Templates'
|
4 |
+
import { __ } from '@wordpress/i18n'
|
5 |
+
import {
|
6 |
+
useState, useEffect, useRef, useCallback,
|
7 |
+
} from '@wordpress/element'
|
8 |
+
import { useTaxonomyStore } from '../state/Taxonomies'
|
9 |
+
|
10 |
+
export default function TaxonomySection({ taxonomy: [title, data] }) {
|
11 |
+
const updateTaxonomies = useTemplatesStore(state => state.updateTaxonomies)
|
12 |
+
const resetTaxonomy = useTemplatesStore(state => state.resetTaxonomy)
|
13 |
+
const searchParams = useTemplatesStore(state => state.searchParams)
|
14 |
+
const openedTaxonomies = useTaxonomyStore(state => state.openedTaxonomies)
|
15 |
+
const toggleOpenedTaxonomy = useTaxonomyStore(state => state.toggleOpenedTaxonomy)
|
16 |
+
const [pageTwoTerms, setPageTwoTerms] = useState({})
|
17 |
+
const [taxListHeight, setTaxListHeight] = useState({})
|
18 |
+
const pageTwo = useRef()
|
19 |
+
const pageOneFocus = useRef()
|
20 |
+
const pageTwoFocus = useRef()
|
21 |
+
const firstUpdate = useRef(true)
|
22 |
+
|
23 |
+
// This will check whether the term is current (either child or top level/has no child)
|
24 |
+
// And then it will search children so the parent is also marked as selected
|
25 |
+
const isCurrentTax = (tax) => searchParams?.taxonomies[title] === tax.term
|
26 |
+
|| tax.children?.filter((t) => {
|
27 |
+
return t.term === searchParams?.taxonomies[title]
|
28 |
+
}).length > 0
|
29 |
+
|
30 |
+
// Todo: memo this
|
31 |
+
const isAvailableOnCurrentType = useCallback((tax) => {
|
32 |
+
if (Object.prototype.hasOwnProperty.call(tax, 'children')) {
|
33 |
+
return tax.children.filter((t) => t?.type.includes(searchParams.type)).length
|
34 |
+
}
|
35 |
+
return tax?.type?.includes(searchParams.type)
|
36 |
+
}, [searchParams.type])
|
37 |
+
|
38 |
+
useEffect(() => {
|
39 |
+
if (firstUpdate.current) {
|
40 |
+
firstUpdate.current = false
|
41 |
+
return
|
42 |
+
}
|
43 |
+
setPageTwoTerms({})
|
44 |
+
}, [searchParams.type])
|
45 |
+
|
46 |
+
useEffect(() => {
|
47 |
+
if (Object.keys(pageTwoTerms).length) {
|
48 |
+
setTimeout(() => {
|
49 |
+
requestAnimationFrame(() => {
|
50 |
+
setTaxListHeight(pageTwo.current.clientHeight)
|
51 |
+
pageTwoFocus.current.focus()
|
52 |
+
})
|
53 |
+
}, 200)
|
54 |
+
return
|
55 |
+
}
|
56 |
+
setTaxListHeight('auto')
|
57 |
+
}, [pageTwoTerms])
|
58 |
+
|
59 |
+
useEffect(() => {
|
60 |
+
const notSupported = !Object.values(data).filter((tax) => isAvailableOnCurrentType(tax)).length
|
61 |
+
// Reset taxonomies that aren't supported on a type
|
62 |
+
notSupported && resetTaxonomy(title)
|
63 |
+
}, [resetTaxonomy, title, isAvailableOnCurrentType, data])
|
64 |
+
|
65 |
+
// Return early if 1. No data or 2. Children don't match this type
|
66 |
+
if (!Object.keys(data).length || !Object.values(data).filter((tax) => isAvailableOnCurrentType(tax)).length) {
|
67 |
+
return ''
|
68 |
+
}
|
69 |
+
|
70 |
+
const theTitle = title.replace('tax_', '').replace(/_/g , ' ').replace(/\b\w/g, l => l.toUpperCase())
|
71 |
+
return <PanelBody
|
72 |
+
title={theTitle}
|
73 |
+
initialOpen={openedTaxonomies.includes(title)}
|
74 |
+
onToggle={(value) => toggleOpenedTaxonomy(title, value)}>
|
75 |
+
<PanelRow>
|
76 |
+
<div className="overflow-hidden w-full relative" style={{
|
77 |
+
height: taxListHeight,
|
78 |
+
}}>
|
79 |
+
<ul className={classNames('p-1 m-0 w-full transform transition duration-200', {
|
80 |
+
'-translate-x-full': Object.keys(pageTwoTerms).length,
|
81 |
+
})}>
|
82 |
+
<li className="m-0">
|
83 |
+
<button
|
84 |
+
type="button"
|
85 |
+
className="text-left cursor-pointer w-full flex justify-between items-center py-1.5 m-0 leading-none hover:text-wp-theme-500 bg-transparent transition duration-200 button-focus"
|
86 |
+
ref={pageOneFocus}
|
87 |
+
onClick={() => {
|
88 |
+
updateTaxonomies({
|
89 |
+
[title]: searchParams.type === 'pattern' && title === 'tax_categories'
|
90 |
+
? 'Default'
|
91 |
+
: '',
|
92 |
+
})
|
93 |
+
}}>
|
94 |
+
<span className={classNames({
|
95 |
+
'text-wp-theme-500': (!searchParams.taxonomies[title]?.length || searchParams?.taxonomies[title] === 'Default'),
|
96 |
+
})}>
|
97 |
+
{searchParams.type === 'pattern' && title === 'tax_categories'
|
98 |
+
? __('Default', 'extendify-sdk')
|
99 |
+
: __('All', 'extendify-sdk')}
|
100 |
+
</span>
|
101 |
+
</button>
|
102 |
+
</li>
|
103 |
+
{Object.values(data)
|
104 |
+
.filter((tax) => isAvailableOnCurrentType(tax))
|
105 |
+
.sort((prev, next) => prev.term.localeCompare(next.term))
|
106 |
+
.map((tax) =>
|
107 |
+
<li className="m-0 w-full" key={tax.term}>
|
108 |
+
<button
|
109 |
+
type="button"
|
110 |
+
className="text-left cursor-pointer w-full flex justify-between items-center py-1.5 m-0 leading-none bg-transparent hover:text-wp-theme-500 transition duration-200 button-focus"
|
111 |
+
onClick={() => {
|
112 |
+
if (Object.prototype.hasOwnProperty.call(tax, 'children')) {
|
113 |
+
setPageTwoTerms(tax)
|
114 |
+
return
|
115 |
+
}
|
116 |
+
updateTaxonomies({
|
117 |
+
[title]: tax.term,
|
118 |
+
})
|
119 |
+
}}>
|
120 |
+
<span className={classNames({
|
121 |
+
'text-wp-theme-500': isCurrentTax(tax),
|
122 |
+
})}>
|
123 |
+
{tax.term}
|
124 |
+
</span>
|
125 |
+
{Object.prototype.hasOwnProperty.call(tax, 'children') && <span className="text-black">
|
126 |
+
<svg width="8" height="14" viewBox="0 0 8 14" className="stroke-current" fill="none" xmlns="http://www.w3.org/2000/svg">
|
127 |
+
<path d="M1 12.5L6 6.99998L1 1.5" strokeWidth="1.5"/>
|
128 |
+
</svg>
|
129 |
+
</span>}
|
130 |
+
</button>
|
131 |
+
</li>)
|
132 |
+
}
|
133 |
+
</ul>
|
134 |
+
<ul ref={pageTwo} className={classNames('p-1 m-0 w-full transform transition duration-200 absolute top-0 right-0', {
|
135 |
+
'translate-x-full': !Object.keys(pageTwoTerms).length,
|
136 |
+
})}>
|
137 |
+
{Object.values(pageTwoTerms).length > 0 && <li className="m-0">
|
138 |
+
<button
|
139 |
+
type="button"
|
140 |
+
className="text-left cursor-pointer font-bold flex space-x-4 items-center py-2 pr-4 m-0leading-none hover:text-wp-theme-500 bg-transparent transition duration-200 button-focus"
|
141 |
+
ref={pageTwoFocus}
|
142 |
+
onClick={() => {
|
143 |
+
setPageTwoTerms({})
|
144 |
+
pageOneFocus.current.focus()
|
145 |
+
}}>
|
146 |
+
<svg className="stroke-current transform rotate-180" width="8" height="14" viewBox="0 0 8 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
147 |
+
<path d="M1 12.5L6 6.99998L1 1.5" strokeWidth="1.5"/>
|
148 |
+
</svg>
|
149 |
+
<span>{pageTwoTerms.term}</span>
|
150 |
+
</button>
|
151 |
+
</li> }
|
152 |
+
{Object.values(pageTwoTerms).length
|
153 |
+
&& Object.values(pageTwoTerms.children)
|
154 |
+
.filter((tax) => isAvailableOnCurrentType(tax))
|
155 |
+
.sort((prev, next) => prev.term.localeCompare(next.term))
|
156 |
+
.map((childTax) =>
|
157 |
+
<li className="m-0 pl-6 w-full flex justify-between items-center" key={childTax.term}>
|
158 |
+
<button
|
159 |
+
type="button"
|
160 |
+
className="text-left cursor-pointer w-full flex justify-between items-center py-1.5 m-0 leading-none bg-transparent hover:text-wp-theme-500 transition duration-200 button-focus"
|
161 |
+
onClick={() => {
|
162 |
+
updateTaxonomies({
|
163 |
+
[title]: childTax.term,
|
164 |
+
})
|
165 |
+
}}>
|
166 |
+
<span className={classNames({
|
167 |
+
'text-wp-theme-500': isCurrentTax(childTax),
|
168 |
+
})}>
|
169 |
+
{childTax.term}
|
170 |
+
</span>
|
171 |
+
</button>
|
172 |
+
</li>)
|
173 |
+
}
|
174 |
+
</ul>
|
175 |
+
</div>
|
176 |
+
</PanelRow>
|
177 |
+
</PanelBody>
|
178 |
+
}
|
extendify-sdk/src/components/TemplateButton.js
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Spinner, Button } from '@wordpress/components'
|
2 |
+
import {
|
3 |
+
useState, useEffect, useRef,
|
4 |
+
} from '@wordpress/element'
|
5 |
+
import { __ } from '@wordpress/i18n'
|
6 |
+
import { useIsMounted } from '../hooks/helpers'
|
7 |
+
|
8 |
+
export const TemplateButtonSkeleton = () => <div className="aspect-w-1 aspect-h-1">
|
9 |
+
<div className="w-full h-full flex items-center justify-center bg-gray-100">
|
10 |
+
<Spinner/>
|
11 |
+
</div>
|
12 |
+
</div>
|
13 |
+
|
14 |
+
export default function TemplateButton({ template, imageLoaded, setActiveTemplate }) {
|
15 |
+
const [loaded, setLoaded] = useState(false)
|
16 |
+
const imageContainerRef = useRef()
|
17 |
+
const isMounted = useIsMounted()
|
18 |
+
|
19 |
+
useEffect(() => {
|
20 |
+
if (loaded || !isMounted.current) {
|
21 |
+
return
|
22 |
+
}
|
23 |
+
const img = new Image()
|
24 |
+
img.role = 'button'
|
25 |
+
img.className = 'max-w-full block m-auto object-cover'
|
26 |
+
img.onload = () => {
|
27 |
+
if (isMounted.current) {
|
28 |
+
setLoaded(true)
|
29 |
+
imageContainerRef.current && imageContainerRef.current.appendChild(img)
|
30 |
+
imageLoaded(template.id)
|
31 |
+
}
|
32 |
+
}
|
33 |
+
img.src = template?.fields?.screenshot[0]?.thumbnails?.large?.url ?? template?.fields?.screenshot[0]?.url
|
34 |
+
}, [template, imageLoaded, loaded, isMounted])
|
35 |
+
|
36 |
+
if (!loaded) {
|
37 |
+
return <TemplateButtonSkeleton/>
|
38 |
+
}
|
39 |
+
return <div className="flex flex-col justify-between group overflow-hidden max-w-lg">
|
40 |
+
{/* Note: This doesn't have tabindex nor keyboard event on purpose. a11y tabs to the button only */}
|
41 |
+
<div
|
42 |
+
className="flex justify-items-center flex-grow h-80 border-gray-200 bg-white border border-b-0 group-hover:border-wp-theme-500 transition duration-150 cursor-pointer overflow-hidden"
|
43 |
+
onClick={setActiveTemplate}
|
44 |
+
ref={imageContainerRef}>
|
45 |
+
</div>
|
46 |
+
<span
|
47 |
+
role="img"
|
48 |
+
aria-hidden="true"
|
49 |
+
className="h-px w-full bg-gray-200 border group-hover:bg-transparent border-t-0 border-b-0 border-gray-200 group-hover:border-wp-theme-500 transition duration-150"></span>
|
50 |
+
<div
|
51 |
+
className="bg-transparent text-left bg-white flex items-center justify-between p-4 border border-t-0 border-transparent group-hover:border-wp-theme-500 transition duration-150 cursor-pointer"
|
52 |
+
role="button"
|
53 |
+
onClick={setActiveTemplate}>
|
54 |
+
<div>
|
55 |
+
<h4 className="m-0 font-bold">{template.fields.display_title}</h4>
|
56 |
+
<p className="m-0">{template?.fields?.tax_categories?.filter(c => c.toLowerCase() !== 'default').join(', ')}</p>
|
57 |
+
</div>
|
58 |
+
<Button
|
59 |
+
isSecondary
|
60 |
+
className="sm:opacity-0 group-hover:opacity-100 transition duration-150 focus:opacity-100"
|
61 |
+
onClick={(e) => {e.stopPropagation();setActiveTemplate()}}>
|
62 |
+
{__('View', 'extendify-sdk')}
|
63 |
+
</Button>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
}
|
extendify-sdk/src/components/TypeSelect.js
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import { useTemplatesStore } from '../state/Templates'
|
3 |
+
import classNames from 'classnames'
|
4 |
+
|
5 |
+
export default function TypeSelect() {
|
6 |
+
const updateSearchParams = useTemplatesStore(state => state.updateSearchParams)
|
7 |
+
const searchParams = useTemplatesStore(state => state.searchParams)
|
8 |
+
const updateType = (type) => updateSearchParams({
|
9 |
+
type: type,
|
10 |
+
})
|
11 |
+
return <div className="text-left w-full bg-white px-6 sm:px-0 pb-4 sm:pb-6 mt-px border-b sm:border-0">
|
12 |
+
<h4 className="sr-only">{__('Type select', 'extendify-sdk')}</h4>
|
13 |
+
<button type="button" className={classNames({
|
14 |
+
'cursor-pointer p-3.5 space-x-2 inline-flex items-center border border-black button-focus': true,
|
15 |
+
'bg-gray-900 text-white': searchParams.type === 'pattern',
|
16 |
+
'bg-transparent text-black': searchParams.type !== 'pattern',
|
17 |
+
})}
|
18 |
+
onClick={() => updateType('pattern')}>
|
19 |
+
<svg width="17" height="13" viewBox="0 0 17 13" className="fill-current" xmlns="http://www.w3.org/2000/svg">
|
20 |
+
<path d="M1 13H16C16.55 13 17 12.55 17 12V8C17 7.45 16.55 7 16 7H1C0.45 7 0 7.45 0 8V12C0 12.55 0.45 13 1 13ZM0 1V5C0 5.55 0.45 6 1 6H16C16.55 6 17 5.55 17 5V1C17 0.45 16.55 0 16 0H1C0.45 0 0 0.45 0 1Z"/>
|
21 |
+
</svg>
|
22 |
+
<span className="">{__('Patterns', 'extendify-sdk')}</span>
|
23 |
+
</button>
|
24 |
+
<button type="button" className={classNames({
|
25 |
+
'cursor-pointer p-3.5 px-4 space-x-2 inline-flex items-center border border-black focus:ring-2 focus:ring-wp-theme-500 ring-offset-1 outline-none -ml-px': true,
|
26 |
+
'bg-gray-900 text-white': searchParams.type === 'template',
|
27 |
+
'bg-transparent text-black': searchParams.type !== 'template',
|
28 |
+
})}
|
29 |
+
onClick={() => updateType('template')}>
|
30 |
+
<svg width="17" height="13" viewBox="0 0 17 13" className="fill-current" xmlns="http://www.w3.org/2000/svg">
|
31 |
+
<path d="M7 13H10C10.55 13 11 12.55 11 12V8C11 7.45 10.55 7 10 7H7C6.45 7 6 7.45 6 8V12C6 12.55 6.45 13 7 13ZM1 13H4C4.55 13 5 12.55 5 12V1C5 0.45 4.55 0 4 0H1C0.45 0 0 0.45 0 1V12C0 12.55 0.45 13 1 13ZM13 13H16C16.55 13 17 12.55 17 12V8C17 7.45 16.55 7 16 7H13C12.45 7 12 7.45 12 8V12C12 12.55 12.45 13 13 13ZM6 1V5C6 5.55 6.45 6 7 6H16C16.55 6 17 5.55 17 5V1C17 0.45 16.55 0 16 0H7C6.45 0 6 0.45 6 1Z"/>
|
32 |
+
</svg>
|
33 |
+
<span className="">{__('Page templates', 'extendify-sdk')}</span>
|
34 |
+
</button>
|
35 |
+
{/* <button type="button" className={classNames({
|
36 |
+
'cursor-pointer p-3.5 px-4 space-x-2 inline-flex items-center border border-black focus:ring-2 focus:ring-wp-theme-500 ring-offset-1 outline-none -ml-px': true,
|
37 |
+
'bg-gray-900 text-white': searchParams.type === 'sitekit',
|
38 |
+
'bg-transparent text-black': searchParams.type !== 'sitekit',
|
39 |
+
})}
|
40 |
+
onClick={() => updateType('sitekit')}>
|
41 |
+
<svg width="17" height="13" viewBox="0 0 17 13" className="fill-current" xmlns="http://www.w3.org/2000/svg">
|
42 |
+
<path d="M1 6H4C4.55 6 5 5.55 5 5V1C5 0.45 4.55 0 4 0H1C0.45 0 0 0.45 0 1V5C0 5.55 0.45 6 1 6ZM1 13H4C4.55 13 5 12.55 5 12V8C5 7.45 4.55 7 4 7H1C0.45 7 0 7.45 0 8V12C0 12.55 0.45 13 1 13ZM7 13H10C10.55 13 11 12.55 11 12V8C11 7.45 10.55 7 10 7H7C6.45 7 6 7.45 6 8V12C6 12.55 6.45 13 7 13ZM13 13H16C16.55 13 17 12.55 17 12V8C17 7.45 16.55 7 16 7H13C12.45 7 12 7.45 12 8V12C12 12.55 12.45 13 13 13ZM7 6H10C10.55 6 11 5.55 11 5V1C11 0.45 10.55 0 10 0H7C6.45 0 6 0.45 6 1V5C6 5.55 6.45 6 7 6ZM12 1V5C12 5.55 12.45 6 13 6H16C16.55 6 17 5.55 17 5V1C17 0.45 16.55 0 16 0H13C12.45 0 12 0.45 12 1Z"/>
|
43 |
+
</svg>
|
44 |
+
<span className="">{__('Site kits', 'extendify-sdk')}</span>
|
45 |
+
</button> */}
|
46 |
+
</div>
|
47 |
+
}
|
extendify-sdk/src/config.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
export const templates = {
|
2 |
+
defaultType: 'pattern',
|
3 |
+
templatesPerRequest: 12,
|
4 |
+
}
|
extendify-sdk/src/hooks/helpers.js
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useRef, useEffect } from '@wordpress/element'
|
2 |
+
|
3 |
+
export function useIsMounted() {
|
4 |
+
const isMounted = useRef(false)
|
5 |
+
|
6 |
+
useEffect(() => {
|
7 |
+
isMounted.current = true
|
8 |
+
return () => isMounted.current = false
|
9 |
+
})
|
10 |
+
return isMounted
|
11 |
+
}
|
extendify-sdk/src/hooks/useBeacon.js
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useEffect } from '@wordpress/element'
|
2 |
+
|
3 |
+
export default function useBeacon(show) {
|
4 |
+
const showBeacon = () => {
|
5 |
+
const container = document.getElementById('beacon-container')
|
6 |
+
if (container) {
|
7 |
+
container.style.position = 'relative'
|
8 |
+
container.style.zIndex = Number.MAX_SAFE_INTEGER
|
9 |
+
container.style.display = 'block'
|
10 |
+
}
|
11 |
+
}
|
12 |
+
|
13 |
+
const hideBeacon = () => {
|
14 |
+
const container = document.getElementById('beacon-container')
|
15 |
+
if (container) {
|
16 |
+
container.style.display = 'none'
|
17 |
+
window.Beacon('close')
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
useEffect(() => {
|
22 |
+
if (!show) {
|
23 |
+
return
|
24 |
+
}
|
25 |
+
|
26 |
+
if (window.Beacon) {
|
27 |
+
showBeacon()
|
28 |
+
return () => hideBeacon()
|
29 |
+
}
|
30 |
+
|
31 |
+
// Code direct from HS
|
32 |
+
(function (
|
33 |
+
e, t, n,
|
34 |
+
) {
|
35 |
+
function a() {
|
36 |
+
const e = t.getElementsByTagName('script')[0],
|
37 |
+
n = t.createElement('script')
|
38 |
+
;(n.async = !0), (n.src = 'https://beacon-v2.helpscout.net'), e.parentNode?.insertBefore(n, e)
|
39 |
+
}
|
40 |
+
if (
|
41 |
+
((e.Beacon = n = function (
|
42 |
+
t, n, a,
|
43 |
+
) {
|
44 |
+
e.Beacon.readyQueue.push({
|
45 |
+
method: t, options: n, data: a,
|
46 |
+
})
|
47 |
+
}),
|
48 |
+
(n.readyQueue = []),
|
49 |
+
'complete' === t.readyState)
|
50 |
+
)
|
51 |
+
return a()
|
52 |
+
e.attachEvent
|
53 |
+
? e.attachEvent('onload', a)
|
54 |
+
: e.addEventListener(
|
55 |
+
'load', a, !1,
|
56 |
+
)
|
57 |
+
})(
|
58 |
+
window, document, window.Beacon || function () {},
|
59 |
+
)
|
60 |
+
|
61 |
+
window.Beacon('init', '2b8c11c0-5afc-4cb9-bee0-a5cb76b2fc91')
|
62 |
+
window.Beacon(
|
63 |
+
'on', 'ready', showBeacon,
|
64 |
+
)
|
65 |
+
return () => {
|
66 |
+
window.Beacon(
|
67 |
+
'off', 'ready', showBeacon,
|
68 |
+
)
|
69 |
+
hideBeacon()
|
70 |
+
}
|
71 |
+
}, [show])
|
72 |
+
|
73 |
+
}
|
extendify-sdk/src/hooks/useTaxonomies.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useEffect, useCallback } from '@wordpress/element'
|
2 |
+
import { Taxonomies as TaxonomiesApi } from '../api/Taxonomies'
|
3 |
+
import { useTemplatesStore } from '../state/Templates'
|
4 |
+
import { useTaxonomyStore } from '../state/Taxonomies'
|
5 |
+
|
6 |
+
export default function useTaxonomies(open) {
|
7 |
+
const setupDefaultTaxonomies = useTemplatesStore(state => state.setupDefaultTaxonomies)
|
8 |
+
const setTaxonomies = useTaxonomyStore(state => state.setTaxonomies)
|
9 |
+
const fetchTaxonomies = useCallback(async () => {
|
10 |
+
let tax = await TaxonomiesApi.get()
|
11 |
+
// Only allow items that have the 'tax_' prefix
|
12 |
+
tax = Object.keys(tax)
|
13 |
+
.filter((t) => t.startsWith('tax_'))
|
14 |
+
.reduce((taxFiltered, key) => {
|
15 |
+
taxFiltered[key] = tax[key]
|
16 |
+
return taxFiltered
|
17 |
+
}, {})
|
18 |
+
setupDefaultTaxonomies(tax)
|
19 |
+
setTaxonomies(tax)
|
20 |
+
}, [setupDefaultTaxonomies, setTaxonomies])
|
21 |
+
|
22 |
+
useEffect(() => {
|
23 |
+
open && fetchTaxonomies()
|
24 |
+
}, [fetchTaxonomies, open])
|
25 |
+
}
|
extendify-sdk/src/listeners/index.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { templateHandler } from './template-inserted'
|
2 |
+
import { softErrorHandler } from './softerror-encountered'
|
3 |
+
|
4 |
+
[
|
5 |
+
templateHandler,
|
6 |
+
softErrorHandler,
|
7 |
+
].forEach(listener => listener.register())
|
extendify-sdk/src/listeners/softerror-encountered.js
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { camelCase } from 'lodash'
|
2 |
+
import { render } from '@wordpress/element'
|
3 |
+
import RequiredPluginsModal from '../middleware/hasRequiredPlugins/RequiredPluginsModal'
|
4 |
+
|
5 |
+
// use this to trigger an error from outside the application
|
6 |
+
export const softErrorHandler = {
|
7 |
+
register() {
|
8 |
+
window.addEventListener('extendify-sdk::softerror-encountered', (event) => {
|
9 |
+
this[camelCase(event.detail.type)](event.detail)
|
10 |
+
})
|
11 |
+
},
|
12 |
+
versionOutdated(error) {
|
13 |
+
render(<RequiredPluginsModal
|
14 |
+
title={error.data.title}
|
15 |
+
message={error.data.message}
|
16 |
+
buttonLabel={error.data.buttonLabel}
|
17 |
+
forceOpen={true}
|
18 |
+
/>,
|
19 |
+
document.getElementById('extendify-root'))
|
20 |
+
},
|
21 |
+
}
|
extendify-sdk/src/listeners/template-inserted.js
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Templates } from '../api/Templates'
|
2 |
+
import { useUserStore } from '../state/User'
|
3 |
+
import { dispatch } from '@wordpress/data'
|
4 |
+
import { __ } from '@wordpress/i18n'
|
5 |
+
|
6 |
+
// This fires after a template is inserted
|
7 |
+
export const templateHandler = {
|
8 |
+
register() {
|
9 |
+
const { createNotice } = dispatch('core/notices')
|
10 |
+
const increaseImports = useUserStore.getState().incrementImports
|
11 |
+
window.addEventListener('extendify-sdk::template-inserted', (event) => {
|
12 |
+
createNotice(
|
13 |
+
'info', __('Template Added'), {
|
14 |
+
isDismissible: true,
|
15 |
+
type: 'snackbar',
|
16 |
+
},
|
17 |
+
)
|
18 |
+
// This is put off to the stack in attempt to fix a bug where
|
19 |
+
// some users are having their imports go from 3->0 in an instant
|
20 |
+
setTimeout(() => {
|
21 |
+
increaseImports()
|
22 |
+
Templates.import(event.detail?.template)
|
23 |
+
},0)
|
24 |
+
})
|
25 |
+
},
|
26 |
+
}
|
extendify-sdk/src/middleware/NeedsPermissionModal.js
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __, sprintf } from '@wordpress/i18n'
|
2 |
+
import { Modal, Button } from '@wordpress/components'
|
3 |
+
import { render } from '@wordpress/element'
|
4 |
+
import ExtendifyLibrary from '../ExtendifyLibrary'
|
5 |
+
import { useWantedTemplateStore } from '../state/Importing'
|
6 |
+
import { getPluginDescription } from '../util/general'
|
7 |
+
|
8 |
+
export default function NeedsPermissionModal() {
|
9 |
+
const wantedTemplate = useWantedTemplateStore(store => store.wantedTemplate)
|
10 |
+
const closeModal = () => render(<ExtendifyLibrary show={true}/>, document.getElementById('extendify-root'))
|
11 |
+
const requiredPlugins = wantedTemplate?.fields?.required_plugins || []
|
12 |
+
return <Modal
|
13 |
+
title={__('Plugins required', 'extendify-sdk')}
|
14 |
+
isDismissible={false}>
|
15 |
+
<p style={{
|
16 |
+
maxWidth: '400px',
|
17 |
+
}}>
|
18 |
+
{sprintf(__('In order to add this %s to your site, the following plugins are required to be installed and activated.', 'extendify-sdk'), wantedTemplate?.fields?.type ?? 'template')}
|
19 |
+
</p>
|
20 |
+
<ul>
|
21 |
+
{
|
22 |
+
// Hardcoded temporarily to not force EP install
|
23 |
+
// requiredPlugins.map((plugin) =>
|
24 |
+
requiredPlugins.filter((p) => p !== 'editorplus').map((plugin) =>
|
25 |
+
<li key={plugin}>
|
26 |
+
{getPluginDescription(plugin)}
|
27 |
+
</li>)
|
28 |
+
}
|
29 |
+
</ul>
|
30 |
+
<p style={{
|
31 |
+
maxWidth: '400px',fontWeight: 'bold',
|
32 |
+
}}>
|
33 |
+
{__('Please contact a site admin for assistance in adding these plugins to your site.', 'extendify-sdk')}
|
34 |
+
</p>
|
35 |
+
<Button isPrimary onClick={closeModal} style={{
|
36 |
+
boxShadow: 'none',
|
37 |
+
}}>
|
38 |
+
{__('Return to library', 'extendify-sdk')}
|
39 |
+
</Button>
|
40 |
+
</Modal>
|
41 |
+
}
|
extendify-sdk/src/middleware/NeedsRegistrationModal.js
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import {
|
3 |
+
Modal, Button, ButtonGroup,
|
4 |
+
} from '@wordpress/components'
|
5 |
+
import {
|
6 |
+
render, useEffect, useRef,
|
7 |
+
} from '@wordpress/element'
|
8 |
+
import { useUserStore } from '../state/User'
|
9 |
+
import { useState } from '@wordpress/element'
|
10 |
+
import { User as UserApi } from '../api/User'
|
11 |
+
|
12 |
+
export default function NeedsRegistrationModal({ finished }) {
|
13 |
+
const [email, setEmail] = useState('')
|
14 |
+
const submitRef = useRef()
|
15 |
+
|
16 |
+
const registerAndContinue = async (event) => {
|
17 |
+
event.preventDefault()
|
18 |
+
await UserApi.registerMailingList(email)
|
19 |
+
useUserStore.setState({
|
20 |
+
registration: { email },
|
21 |
+
})
|
22 |
+
finished()
|
23 |
+
}
|
24 |
+
|
25 |
+
useEffect(() => {
|
26 |
+
UserApi.getMeta('user_email')
|
27 |
+
.then((value) => setEmail(value ?? ''))
|
28 |
+
submitRef.current.focus()
|
29 |
+
}, [])
|
30 |
+
|
31 |
+
return <Modal
|
32 |
+
className="extendify-sdk"
|
33 |
+
title={__('One last step...', 'extendify-sdk')}
|
34 |
+
isDismissible={false}>
|
35 |
+
<p className="m-0 mb-4 max-w-md">
|
36 |
+
{__('Register now to receive updates and special offers from Extendify', 'extendify-sdk')}
|
37 |
+
</p>
|
38 |
+
<form onSubmit={registerAndContinue} className="flex space-x-4 mb-8">
|
39 |
+
<div className="relative w-full max-w-xs">
|
40 |
+
<input
|
41 |
+
id="extendify-email-register"
|
42 |
+
value={email}
|
43 |
+
required
|
44 |
+
onChange={(event) => setEmail(event.target.value)}
|
45 |
+
type="text"
|
46 |
+
className="extendify-special-input button-focus text-sm h-8 min-h-0 border border-gray-900 special-input placeholder-transparent rounded-none w-full px-2"
|
47 |
+
placeholder={__('Email', 'extendify-sdk')} />
|
48 |
+
<label htmlFor="extendify-email-register" className="-top-3 bg-white absolute left-1 px-1 transition-all">{__('Email', 'extendify-sdk')}</label>
|
49 |
+
</div>
|
50 |
+
<input type="submit" className="hidden" />
|
51 |
+
</form>
|
52 |
+
|
53 |
+
<ButtonGroup>
|
54 |
+
<Button ref={submitRef} isPrimary onClick={registerAndContinue}>
|
55 |
+
{__('Submit and import', 'extendify-sdk')}
|
56 |
+
</Button>
|
57 |
+
<Button isTertiary onClick={finished} style={{
|
58 |
+
boxShadow: 'none', margin: '0 4px',
|
59 |
+
}}>
|
60 |
+
{__('Skip and import', 'extendify-sdk')}
|
61 |
+
</Button>
|
62 |
+
</ButtonGroup>
|
63 |
+
</Modal>
|
64 |
+
}
|
65 |
+
|
66 |
+
export function check() {
|
67 |
+
return {
|
68 |
+
id: 'NeedsRegistrationModal',
|
69 |
+
pass: (useUserStore.getState().registration?.email || useUserStore.getState().apiKey),
|
70 |
+
allow() {},
|
71 |
+
deny() {
|
72 |
+
return new Promise((finished) => {
|
73 |
+
render(<NeedsRegistrationModal finished={finished}/>, document.getElementById('extendify-root'))
|
74 |
+
})
|
75 |
+
},
|
76 |
+
}
|
77 |
+
}
|
extendify-sdk/src/middleware/ReloadRequiredModal.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import {
|
3 |
+
Modal, Button, ButtonGroup,
|
4 |
+
} from '@wordpress/components'
|
5 |
+
import { useState } from '@wordpress/element'
|
6 |
+
import { dispatch, select } from '@wordpress/data'
|
7 |
+
|
8 |
+
export default function ReloadRequiredModal() {
|
9 |
+
const [isSaving, setSaving] = useState(false)
|
10 |
+
const { isEditedPostDirty } = select('core/editor')
|
11 |
+
const hasUnsavedChanges = isEditedPostDirty()
|
12 |
+
const saveChanges = () => {
|
13 |
+
setSaving(true)
|
14 |
+
dispatch('core/editor').savePost()
|
15 |
+
setSaving(false)
|
16 |
+
}
|
17 |
+
const reload = () => {
|
18 |
+
location.reload()
|
19 |
+
}
|
20 |
+
if (!hasUnsavedChanges) {
|
21 |
+
reload()
|
22 |
+
return null
|
23 |
+
}
|
24 |
+
return <Modal
|
25 |
+
title={__('Reload required', 'extendify-sdk')}
|
26 |
+
isDismissible={false}>
|
27 |
+
<p style={{
|
28 |
+
maxWidth: '400px',
|
29 |
+
}}>
|
30 |
+
{__('Just one more thing! We need to reload the page to continue.', 'extendify-sdk')}
|
31 |
+
</p>
|
32 |
+
<ButtonGroup>
|
33 |
+
<Button isPrimary onClick={reload} disabled={isSaving}>
|
34 |
+
{__('Reload page', 'extendify-sdk')}
|
35 |
+
</Button>
|
36 |
+
<Button isSecondary onClick={saveChanges} isBusy={isSaving} style={{
|
37 |
+
margin: '0 4px',
|
38 |
+
}}>
|
39 |
+
{__('Save changes', 'extendify-sdk')}
|
40 |
+
</Button>
|
41 |
+
</ButtonGroup>
|
42 |
+
</Modal>
|
43 |
+
}
|
extendify-sdk/src/middleware/hasPluginsActivated/ActivatePluginsModal.js
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __, sprintf } from '@wordpress/i18n'
|
2 |
+
import {
|
3 |
+
Modal, Button, ButtonGroup,
|
4 |
+
} from '@wordpress/components'
|
5 |
+
import { render } from '@wordpress/element'
|
6 |
+
import ActivatingModal from './ActivatingModal'
|
7 |
+
import ExtendifyLibrary from '../../ExtendifyLibrary'
|
8 |
+
import { useWantedTemplateStore } from '../../state/Importing'
|
9 |
+
import { getPluginDescription } from '../../util/general'
|
10 |
+
import { useUserStore } from '../../state/User'
|
11 |
+
import NeedsPermissionModal from '../NeedsPermissionModal'
|
12 |
+
|
13 |
+
export default function ActivatePluginsModal(props) {
|
14 |
+
const wantedTemplate = useWantedTemplateStore(store => store.wantedTemplate)
|
15 |
+
const closeModal = () => render(<ExtendifyLibrary show={true}/>, document.getElementById('extendify-root'))
|
16 |
+
const installPlugins = () => render(<ActivatingModal />, document.getElementById('extendify-root'))
|
17 |
+
const requiredPlugins = wantedTemplate?.fields?.required_plugins || []
|
18 |
+
|
19 |
+
if (!useUserStore.getState()?.canActivatePlugins) {
|
20 |
+
return <NeedsPermissionModal/>
|
21 |
+
}
|
22 |
+
|
23 |
+
return <Modal
|
24 |
+
title={__('Activate required plugins', 'extendify-sdk')}
|
25 |
+
isDismissible={false}
|
26 |
+
>
|
27 |
+
<div>
|
28 |
+
<p style={{
|
29 |
+
maxWidth: '400px',
|
30 |
+
}}>
|
31 |
+
{props.message ?? __(sprintf('There is just one more step. This %s requires the following plugins to be installed and activated:',
|
32 |
+
wantedTemplate?.fields?.type ?? 'template'),
|
33 |
+
'extendify-sdk')}
|
34 |
+
</p>
|
35 |
+
<ul>
|
36 |
+
{
|
37 |
+
// Hardcoded temporarily to not force EP install
|
38 |
+
// requiredPlugins.map((plugin) =>
|
39 |
+
requiredPlugins.filter((p) => p !== 'editorplus').map((plugin) =>
|
40 |
+
<li key={plugin}>
|
41 |
+
{getPluginDescription(plugin)}
|
42 |
+
</li>)
|
43 |
+
}
|
44 |
+
</ul>
|
45 |
+
<ButtonGroup>
|
46 |
+
<Button isPrimary onClick={installPlugins}>
|
47 |
+
{__('Activate Plugins', 'extendify-sdk')}
|
48 |
+
</Button>
|
49 |
+
{props.showClose && <Button isTertiary onClick={closeModal} style={{
|
50 |
+
boxShadow: 'none', margin: '0 4px',
|
51 |
+
}}>
|
52 |
+
{__('No thanks, return to library', 'extendify-sdk')}
|
53 |
+
</Button>}
|
54 |
+
</ButtonGroup>
|
55 |
+
</div>
|
56 |
+
</Modal>
|
57 |
+
}
|
extendify-sdk/src/middleware/hasPluginsActivated/ActivatingModal.js
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import { Modal, Button } from '@wordpress/components'
|
3 |
+
import { useState, render } from '@wordpress/element'
|
4 |
+
import { Plugins } from '../../api/Plugins'
|
5 |
+
import { useWantedTemplateStore } from '../../state/Importing'
|
6 |
+
import ErrorActivating from './ErrorActivating'
|
7 |
+
import ReloadRequiredModal from '../ReloadRequiredModal'
|
8 |
+
|
9 |
+
export default function ActivatingModal() {
|
10 |
+
const [errorMessage, setErrorMessage] = useState('')
|
11 |
+
const wantedTemplate = useWantedTemplateStore(store => store.wantedTemplate)
|
12 |
+
|
13 |
+
// Hardcoded temporarily to not force EP install
|
14 |
+
// const required = wantedTemplate?.fields?.required_plugins
|
15 |
+
const required = wantedTemplate?.fields?.required_plugins.filter(p => p !== 'editorplus')
|
16 |
+
|
17 |
+
Plugins.installAndActivate(required).then(() => {
|
18 |
+
useWantedTemplateStore.setState({
|
19 |
+
importOnLoad: true,
|
20 |
+
})
|
21 |
+
}).then(async () => {
|
22 |
+
await new Promise((resolve) => setTimeout(resolve, 1000))
|
23 |
+
render(<ReloadRequiredModal />, document.getElementById('extendify-root'))
|
24 |
+
})
|
25 |
+
.catch(({ response }) => {
|
26 |
+
setErrorMessage(response.data.message)
|
27 |
+
})
|
28 |
+
|
29 |
+
if (errorMessage) {
|
30 |
+
return <ErrorActivating msg={errorMessage}/>
|
31 |
+
}
|
32 |
+
|
33 |
+
return <Modal
|
34 |
+
title={__('Activating plugins', 'extendify-sdk')}
|
35 |
+
isDismissible={false}>
|
36 |
+
<Button
|
37 |
+
style={{
|
38 |
+
width: '100%',
|
39 |
+
}}
|
40 |
+
disabled
|
41 |
+
isPrimary
|
42 |
+
isBusy
|
43 |
+
onClick={() => {}}>
|
44 |
+
{__('Activating...', 'extendify-sdk')}
|
45 |
+
</Button>
|
46 |
+
</Modal>
|
47 |
+
}
|
extendify-sdk/src/middleware/hasPluginsActivated/ErrorActivating.js
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import {
|
3 |
+
Modal, Button, Notice,
|
4 |
+
} from '@wordpress/components'
|
5 |
+
import { render } from '@wordpress/element'
|
6 |
+
import ActivatePluginsModal from './ActivatePluginsModal'
|
7 |
+
|
8 |
+
export default function ErrorActivating({ msg }) {
|
9 |
+
const goBack = () => {
|
10 |
+
render(<ActivatePluginsModal />, document.getElementById('extendify-root'))
|
11 |
+
}
|
12 |
+
|
13 |
+
return <Modal
|
14 |
+
style={{
|
15 |
+
maxWidth: '500px',
|
16 |
+
}}
|
17 |
+
title={__('Error Activating plugins', 'extendify-sdk')}
|
18 |
+
isDismissible={false}
|
19 |
+
>
|
20 |
+
{__('You have encountered an error that we cannot recover from. Please try again.', 'extendify-sdk')}
|
21 |
+
<br />
|
22 |
+
<Notice isDismissible={false} status="error">
|
23 |
+
{msg}
|
24 |
+
</Notice>
|
25 |
+
<Button isPrimary onClick={goBack}>
|
26 |
+
{__('Go back', 'extendify-sdk')}
|
27 |
+
</Button>
|
28 |
+
</Modal>
|
29 |
+
}
|
extendify-sdk/src/middleware/hasPluginsActivated/index.js
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { checkIfUserNeedsToActivatePlugins } from '../helpers'
|
2 |
+
import ActivatePluginsModal from './ActivatePluginsModal'
|
3 |
+
import { render } from '@wordpress/element'
|
4 |
+
|
5 |
+
export const hasPluginsActivated = async (template) => {
|
6 |
+
return {
|
7 |
+
id: 'hasPluginsActivated',
|
8 |
+
pass: !(await checkIfUserNeedsToActivatePlugins(template)),
|
9 |
+
allow() {},
|
10 |
+
deny() {
|
11 |
+
return new Promise(() => {
|
12 |
+
render(<ActivatePluginsModal showClose={true}/>, document.getElementById('extendify-root'))
|
13 |
+
})
|
14 |
+
},
|
15 |
+
}
|
16 |
+
}
|
extendify-sdk/src/middleware/hasRequiredPlugins/ErrorInstalling.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import {
|
3 |
+
Modal, Button, Notice,
|
4 |
+
} from '@wordpress/components'
|
5 |
+
import { render } from '@wordpress/element'
|
6 |
+
import RequiredPluginsModal from './RequiredPluginsModal'
|
7 |
+
|
8 |
+
export default function ErrorInstalling({ msg }) {
|
9 |
+
const goBack = () => render(<RequiredPluginsModal/>, document.getElementById('extendify-root'))
|
10 |
+
|
11 |
+
return <Modal
|
12 |
+
style={{
|
13 |
+
maxWidth: '500px',
|
14 |
+
}}
|
15 |
+
title={__('Error installing plugins', 'extendify-sdk')}
|
16 |
+
isDismissible={false}
|
17 |
+
>
|
18 |
+
{__('You have encountered an error that we cannot recover from. Please try again.', 'extendify-sdk')}
|
19 |
+
<br />
|
20 |
+
<Notice isDismissible={false} status="error">{msg}</Notice>
|
21 |
+
<Button isPrimary onClick={goBack}>
|
22 |
+
{__('Go back', 'extendify-sdk')}
|
23 |
+
</Button>
|
24 |
+
</Modal>
|
25 |
+
}
|
extendify-sdk/src/middleware/hasRequiredPlugins/InstallingModal.js
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import { Modal, Button } from '@wordpress/components'
|
3 |
+
import { useState, render } from '@wordpress/element'
|
4 |
+
import { Plugins } from '../../api/Plugins'
|
5 |
+
import { useWantedTemplateStore } from '../../state/Importing'
|
6 |
+
import ErrorInstalling from './ErrorInstalling'
|
7 |
+
import ReloadRequiredModal from '../ReloadRequiredModal'
|
8 |
+
|
9 |
+
export default function InstallingModal() {
|
10 |
+
const [errorMessage, setErrorMessage] = useState('')
|
11 |
+
const wantedTemplate = useWantedTemplateStore(store => store.wantedTemplate)
|
12 |
+
|
13 |
+
// Hardcoded temporarily to not force EP install
|
14 |
+
// const required = wantedTemplate?.fields?.required_plugins
|
15 |
+
const required = wantedTemplate?.fields?.required_plugins.filter(p => p !== 'editorplus')
|
16 |
+
|
17 |
+
Plugins.installAndActivate(required).then(() => {
|
18 |
+
useWantedTemplateStore.setState({
|
19 |
+
importOnLoad: true,
|
20 |
+
})
|
21 |
+
render(<ReloadRequiredModal />, document.getElementById('extendify-root'))
|
22 |
+
})
|
23 |
+
.catch(({ message }) => {
|
24 |
+
setErrorMessage(message)
|
25 |
+
})
|
26 |
+
|
27 |
+
if (errorMessage) {
|
28 |
+
return <ErrorInstalling msg={errorMessage}/>
|
29 |
+
}
|
30 |
+
|
31 |
+
return <Modal
|
32 |
+
title={__('Installing plugins', 'extendify-sdk')}
|
33 |
+
isDismissible={false}>
|
34 |
+
<Button style={{
|
35 |
+
width: '100%',
|
36 |
+
}} disabled isPrimary isBusy onClick={() => {}}>
|
37 |
+
{__('Installing...', 'extendify-sdk')}
|
38 |
+
</Button>
|
39 |
+
</Modal>
|
40 |
+
}
|
extendify-sdk/src/middleware/hasRequiredPlugins/RequiredPluginsModal.js
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __, sprintf } from '@wordpress/i18n'
|
2 |
+
import ExtendifyLibrary from '../../ExtendifyLibrary'
|
3 |
+
import {
|
4 |
+
Modal, Button, ButtonGroup,
|
5 |
+
} from '@wordpress/components'
|
6 |
+
import { render } from '@wordpress/element'
|
7 |
+
import InstallingModal from './InstallingModal'
|
8 |
+
import { useWantedTemplateStore } from '../../state/Importing'
|
9 |
+
import { getPluginDescription } from '../../util/general'
|
10 |
+
import { useUserStore } from '../../state/User'
|
11 |
+
import NeedsPermissionModal from '../NeedsPermissionModal'
|
12 |
+
|
13 |
+
export default function RequiredPluginsModal(props) {
|
14 |
+
const wantedTemplate = useWantedTemplateStore(store => store.wantedTemplate)
|
15 |
+
const closeModal = () => {
|
16 |
+
if (props.forceOpen) {
|
17 |
+
return
|
18 |
+
}
|
19 |
+
render(<ExtendifyLibrary show={true} />, document.getElementById('extendify-root'))
|
20 |
+
}
|
21 |
+
const installPlugins = () => render(<InstallingModal />, document.getElementById('extendify-root'))
|
22 |
+
const requiredPlugins = wantedTemplate?.fields?.required_plugins || []
|
23 |
+
|
24 |
+
if (!useUserStore.getState()?.canInstallPlugins) {
|
25 |
+
return <NeedsPermissionModal/>
|
26 |
+
}
|
27 |
+
|
28 |
+
return <Modal
|
29 |
+
title={props.title ?? __('Install required plugins', 'extendify-sdk')}
|
30 |
+
isDismissible={false}
|
31 |
+
>
|
32 |
+
<p style={{
|
33 |
+
maxWidth: '400px',
|
34 |
+
}}>
|
35 |
+
{props.message ?? __(sprintf('There is just one more step. This %s requires the following to be automatically installed and activated:',
|
36 |
+
wantedTemplate?.fields?.type ?? 'template'),
|
37 |
+
'extendify-sdk')}
|
38 |
+
</p>
|
39 |
+
{props.message?.length > 0 || <ul>
|
40 |
+
{
|
41 |
+
// Hardcoded temporarily to not force EP install
|
42 |
+
// requiredPlugins.map((plugin) =>
|
43 |
+
requiredPlugins.filter((p) => p !== 'editorplus').map((plugin) =>
|
44 |
+
<li key={plugin}>
|
45 |
+
{getPluginDescription(plugin)}
|
46 |
+
</li>)
|
47 |
+
}
|
48 |
+
</ul>}
|
49 |
+
<ButtonGroup>
|
50 |
+
<Button isPrimary onClick={installPlugins}>
|
51 |
+
{props.buttonLabel ?? __('Install Plugins', 'extendify-sdk')}
|
52 |
+
</Button>
|
53 |
+
{props.forceOpen || <Button isTertiary onClick={closeModal} style={{
|
54 |
+
boxShadow: 'none', margin: '0 4px',
|
55 |
+
}}>
|
56 |
+
{__('No thanks, take me back', 'extendify-sdk')}
|
57 |
+
</Button>}
|
58 |
+
</ButtonGroup>
|
59 |
+
</Modal>
|
60 |
+
}
|
extendify-sdk/src/middleware/hasRequiredPlugins/index.js
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { checkIfUserNeedsToInstallPlugins } from '../helpers'
|
2 |
+
import RequiredPluginsModal from './RequiredPluginsModal'
|
3 |
+
import { render } from '@wordpress/element'
|
4 |
+
|
5 |
+
export const hasRequiredPlugins = async (template) => {
|
6 |
+
return {
|
7 |
+
id: 'hasRequiredPlugins',
|
8 |
+
pass: !(await checkIfUserNeedsToInstallPlugins(template)),
|
9 |
+
allow() {},
|
10 |
+
deny() {
|
11 |
+
return new Promise(() => {
|
12 |
+
render(<RequiredPluginsModal/>, document.getElementById('extendify-root'))
|
13 |
+
})
|
14 |
+
},
|
15 |
+
}
|
16 |
+
}
|
extendify-sdk/src/middleware/helpers.js
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Plugins } from '../api/Plugins'
|
2 |
+
|
3 |
+
let installedPlugins = []
|
4 |
+
let activatedPlugins = []
|
5 |
+
|
6 |
+
export async function checkIfUserNeedsToInstallPlugins(template) {
|
7 |
+
let required = template?.fields?.required_plugins ?? []
|
8 |
+
// Hardcoded temporarily to not force EP install
|
9 |
+
required = required.filter((p) => p !== 'editorplus')
|
10 |
+
if (!required.length) {
|
11 |
+
return false
|
12 |
+
}
|
13 |
+
|
14 |
+
if (!installedPlugins.length) {
|
15 |
+
installedPlugins = Object.keys(await Plugins.getInstalled())
|
16 |
+
}
|
17 |
+
// if no dependencies are required, then this will be false automatically
|
18 |
+
const weNeedInstalls = required.length
|
19 |
+
? required.filter((plugin) => {
|
20 |
+
// TODO: if we have better data to work with this can be more literal
|
21 |
+
return !installedPlugins.some((k) => {
|
22 |
+
return k.includes(plugin)
|
23 |
+
})
|
24 |
+
})
|
25 |
+
: false
|
26 |
+
|
27 |
+
return weNeedInstalls.length
|
28 |
+
}
|
29 |
+
|
30 |
+
export async function checkIfUserNeedsToActivatePlugins(template) {
|
31 |
+
let required = template?.fields?.required_plugins ?? []
|
32 |
+
|
33 |
+
// Hardcoded temporarily to not force EP install
|
34 |
+
required = required.filter((p) => p !== 'editorplus')
|
35 |
+
if (!required.length) {
|
36 |
+
return false
|
37 |
+
}
|
38 |
+
|
39 |
+
if (!activatedPlugins.length) {
|
40 |
+
activatedPlugins = Object.values(await Plugins.getActivated())
|
41 |
+
}
|
42 |
+
|
43 |
+
// if no dependencies are required, then this will be false automatically
|
44 |
+
const weNeedActivations = required.length
|
45 |
+
? required.filter((plugin) => {
|
46 |
+
// TODO: if we have better data to work with this can be more literal
|
47 |
+
return !activatedPlugins.some((k) => {
|
48 |
+
return k.includes(plugin)
|
49 |
+
})
|
50 |
+
})
|
51 |
+
: false
|
52 |
+
|
53 |
+
// if the plugins we need to have activated are not even installed, handle them elsewhere
|
54 |
+
if (weNeedActivations) {
|
55 |
+
// This call is a bit more expensive so only run it if needed
|
56 |
+
if (await checkIfUserNeedsToInstallPlugins(template)) {
|
57 |
+
return false
|
58 |
+
}
|
59 |
+
}
|
60 |
+
return weNeedActivations.length
|
61 |
+
}
|
extendify-sdk/src/middleware/index.js
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { hasRequiredPlugins } from './hasRequiredPlugins'
|
2 |
+
import { hasPluginsActivated } from './hasPluginsActivated'
|
3 |
+
import { check as checkNeedsRegistrationModal } from './NeedsRegistrationModal'
|
4 |
+
|
5 |
+
export const Middleware = (middleware = []) => {
|
6 |
+
return {
|
7 |
+
hasRequiredPlugins: hasRequiredPlugins,
|
8 |
+
hasPluginsActivated: hasPluginsActivated,
|
9 |
+
NeedsRegistrationModal: checkNeedsRegistrationModal,
|
10 |
+
stack: [],
|
11 |
+
async check(template) {
|
12 |
+
for (const m of middleware) {
|
13 |
+
const cb = await this[`${m}`](template)
|
14 |
+
setTimeout(() => {
|
15 |
+
this.stack.push(cb.pass
|
16 |
+
? cb.allow
|
17 |
+
: cb.deny)
|
18 |
+
}, 0)
|
19 |
+
}
|
20 |
+
},
|
21 |
+
reset() {
|
22 |
+
this.stack = []
|
23 |
+
},
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
export async function AuthorizationCheck(pipes) {
|
28 |
+
const middleware = MiddlewareGenerator(pipes)
|
29 |
+
while (true) {
|
30 |
+
const result = await middleware.next()
|
31 |
+
|
32 |
+
// TODO: Could probably have a check for errors here
|
33 |
+
if (result.done) {
|
34 |
+
break
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
38 |
+
export async function* MiddlewareGenerator(middleware) {
|
39 |
+
for (const m of middleware) {
|
40 |
+
yield await m()
|
41 |
+
}
|
42 |
+
}
|
extendify-sdk/src/pages/CuratedView.js
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {
|
2 |
+
useEffect, useRef, useState,
|
3 |
+
} from '@wordpress/element'
|
4 |
+
import { __ } from '@wordpress/i18n'
|
5 |
+
import { useTaxonomyStore } from '../state/Taxonomies'
|
6 |
+
import SidebarMain from './parts/sidebars/SidebarMain'
|
7 |
+
import RowByTax from './parts/RowByTax'
|
8 |
+
import HasSidebar from './parts/HasSidebar'
|
9 |
+
import TypeSelect from '../components/TypeSelect'
|
10 |
+
import TaxonomyBreadcrumbs from '../components/TaxonomyBreadcrumbs'
|
11 |
+
import Toolbar from './parts/Toolbar'
|
12 |
+
import { useTemplatesStore } from '../state/Templates'
|
13 |
+
|
14 |
+
export default function CuratedView() {
|
15 |
+
const [terms, setTerms] = useState([])
|
16 |
+
const scrollableArea = useRef()
|
17 |
+
const taxonomies = useTaxonomyStore(state => state.taxonomies)
|
18 |
+
const searchParams = useTemplatesStore(state => state.searchParams)
|
19 |
+
const termsFiltered = (t) => Object.values(t)
|
20 |
+
.filter((term) => term.type.includes('pattern'))
|
21 |
+
.map((term) => term.term)
|
22 |
+
const mergeTerm = (tax, term) => {
|
23 |
+
const params = { ...searchParams }
|
24 |
+
params.taxonomies = Object.assign(
|
25 |
+
{}, searchParams.taxonomies, { [tax]: term },
|
26 |
+
)
|
27 |
+
return params
|
28 |
+
}
|
29 |
+
|
30 |
+
useEffect(() => {
|
31 |
+
if (Object.keys(taxonomies?.tax_pattern_types ?? {}).length) {
|
32 |
+
setTerms(termsFiltered(taxonomies.tax_pattern_types))
|
33 |
+
}
|
34 |
+
}, [taxonomies])
|
35 |
+
|
36 |
+
useEffect(() => {
|
37 |
+
scrollableArea.current.scrollTop = 0
|
38 |
+
}, [searchParams])
|
39 |
+
|
40 |
+
return <div className="bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto">
|
41 |
+
<Toolbar className="w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"/>
|
42 |
+
<div className="w-full flex-grow overflow-hidden">
|
43 |
+
<a href="#extendify-templates" className="sr-only focus:not-sr-only focus:text-blue-500">
|
44 |
+
{__('Skip to content', 'extendify-sdk')}
|
45 |
+
</a>
|
46 |
+
<div className="sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full">
|
47 |
+
<HasSidebar>
|
48 |
+
<SidebarMain/>
|
49 |
+
<>
|
50 |
+
<TypeSelect/>
|
51 |
+
{/* TODO: we may want to inject this as a portal so it can directly share state with SidebarMain.js */}
|
52 |
+
<TaxonomyBreadcrumbs/>
|
53 |
+
<div className="relative h-full z-30 bg-white">
|
54 |
+
<div
|
55 |
+
ref={scrollableArea}
|
56 |
+
className="absolute z-20 inset-0 lg:static h-screen overflow-y-auto pt-16 px-6 sm:pl-0 sm:pr-8 pb-60">
|
57 |
+
{terms.length > 0 && terms.map((term) => {
|
58 |
+
return <RowByTax
|
59 |
+
key={term}
|
60 |
+
title={term}
|
61 |
+
tax="tax_pattern_types"
|
62 |
+
searchParams={mergeTerm('tax_pattern_types', term)}/>
|
63 |
+
})}
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
</>
|
67 |
+
</HasSidebar>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
</div>
|
71 |
+
}
|
extendify-sdk/src/pages/GridView.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import SidebarMain from './parts/sidebars/SidebarMain'
|
2 |
+
import Grid from './parts/Grid'
|
3 |
+
import HasSidebar from './parts/HasSidebar'
|
4 |
+
import TypeSelect from '../components/TypeSelect'
|
5 |
+
import { __ } from '@wordpress/i18n'
|
6 |
+
import TaxonomyBreadcrumbs from '../components/TaxonomyBreadcrumbs'
|
7 |
+
import Toolbar from './parts/Toolbar'
|
8 |
+
|
9 |
+
export default function GridView() {
|
10 |
+
return <div className="bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto">
|
11 |
+
<Toolbar className="w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"/>
|
12 |
+
<div className="w-full flex-grow overflow-hidden">
|
13 |
+
<a href="#extendify-templates" className="sr-only focus:not-sr-only focus:text-blue-500">
|
14 |
+
{__('Skip to content', 'extendify-sdk')}
|
15 |
+
</a>
|
16 |
+
<div className="sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full">
|
17 |
+
<HasSidebar>
|
18 |
+
<SidebarMain/>
|
19 |
+
<>
|
20 |
+
<TypeSelect/>
|
21 |
+
{/* TODO: we may want to inject this as a portal so it can directly share state with SidebarMain.js */}
|
22 |
+
<TaxonomyBreadcrumbs/>
|
23 |
+
<div className="relative h-full z-30 bg-white">
|
24 |
+
<div className="absolute z-20 inset-0 lg:static h-screen overflow-y-auto pt-4 sm:pt-0 px-6 sm:pl-0 sm:pr-8 pb-40">
|
25 |
+
<Grid/>
|
26 |
+
</div>
|
27 |
+
</div>
|
28 |
+
</>
|
29 |
+
</HasSidebar>
|
30 |
+
</div>
|
31 |
+
</div>
|
32 |
+
</div>
|
33 |
+
}
|
extendify-sdk/src/pages/Login.js
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// import { useEffect } from '@wordpress/element'
|
2 |
+
import LoginInterface from '../components/LoginInterface'
|
3 |
+
import { __ } from '@wordpress/i18n'
|
4 |
+
import { useGlobalStore } from '../state/GlobalState'
|
5 |
+
import Toolbar from './parts/Toolbar'
|
6 |
+
|
7 |
+
export default function Login() {
|
8 |
+
|
9 |
+
return <div className="bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto">
|
10 |
+
<Toolbar className="w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"/>
|
11 |
+
<div className="w-full flex-grow overflow-hidden bg-extendify-light">
|
12 |
+
<a href="#extendify-templates" className="sr-only focus:not-sr-only focus:text-blue-500">
|
13 |
+
{__('Skip to content', 'extendify-sdk')}
|
14 |
+
</a>
|
15 |
+
<div className="flex sm:space-x-12 relative mx-auto max-w-screen-4xl h-full">
|
16 |
+
<div className="absolute flex inset-0 items-center justify-center z-20 sm:space-x-12">
|
17 |
+
<div className="pl-12 py-6 absolute top-0 left-0">
|
18 |
+
<button
|
19 |
+
type="button"
|
20 |
+
className="cursor-pointer text-black bg-transparent font-medium flex items-center p-3 transform -translate-x-3 button-focus"
|
21 |
+
onClick={() => useGlobalStore.setState({
|
22 |
+
currentPage: 'main',
|
23 |
+
})}>
|
24 |
+
<svg className="fill-current" width="8" height="12" viewBox="0 0 8 12" xmlns="http://www.w3.org/2000/svg">
|
25 |
+
<path d="M6.70998 9.88047L2.82998 6.00047L6.70998 2.12047C7.09998 1.73047 7.09998 1.10047 6.70998 0.710469C6.31998 0.320469 5.68998 0.320469 5.29998 0.710469L0.70998 5.30047C0.31998 5.69047 0.31998 6.32047 0.70998 6.71047L5.29998 11.3005C5.68998 11.6905 6.31998 11.6905 6.70998 11.3005C7.08998 10.9105 7.09998 10.2705 6.70998 9.88047Z"/>
|
26 |
+
</svg>
|
27 |
+
<span className="ml-4">{__('Go back', 'extendify-sdk')}</span>
|
28 |
+
</button>
|
29 |
+
</div>
|
30 |
+
<div className="flex justify-center">
|
31 |
+
<LoginInterface/>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
</div>
|
37 |
+
}
|
extendify-sdk/src/pages/MainContent.js
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useTemplatesStore } from '../state/Templates'
|
2 |
+
import SidebarMain from '../layout/sidebars/SidebarMain'
|
3 |
+
import TemplatesList from './TemplatesList'
|
4 |
+
import TemplatesSingle from './TemplatesSingle'
|
5 |
+
import HasSidebar from '../layout/HasSidebar'
|
6 |
+
import TypeSelect from '../components/TypeSelect'
|
7 |
+
import { __ } from '@wordpress/i18n'
|
8 |
+
import SidebarSingle from '../layout/sidebars/SidebarSingle'
|
9 |
+
import TaxonomyBreadcrumbs from '../components/TaxonomyBreadcrumbs'
|
10 |
+
import Toolbar from '../layout/Toolbar'
|
11 |
+
|
12 |
+
export default function MainContent({ setOpen }) {
|
13 |
+
const activeTemplate = useTemplatesStore(state => state.activeTemplate)
|
14 |
+
return <div className="bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto">
|
15 |
+
<Toolbar
|
16 |
+
className="w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"
|
17 |
+
hideLibrary={() => setOpen(false)}/>
|
18 |
+
<div className="w-full flex-grow overflow-hidden">
|
19 |
+
<a href="#extendify-templates" className="sr-only focus:not-sr-only focus:text-blue-500">
|
20 |
+
{__('Skip to content', 'extendify-sdk')}
|
21 |
+
</a>
|
22 |
+
<div className="sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full">
|
23 |
+
{!!Object.keys(activeTemplate).length &&
|
24 |
+
<div className="absolute bg-white sm:flex inset-0 z-50 sm:space-x-12">
|
25 |
+
<HasSidebar>
|
26 |
+
<SidebarSingle template={activeTemplate}/>
|
27 |
+
<TemplatesSingle template={activeTemplate}/>
|
28 |
+
</HasSidebar>
|
29 |
+
</div>
|
30 |
+
}
|
31 |
+
<HasSidebar>
|
32 |
+
<SidebarMain/>
|
33 |
+
<>
|
34 |
+
<TypeSelect/>
|
35 |
+
{/* TODO: we may want to inject this as a portal so it can directly share state with SidebarMain.js */}
|
36 |
+
<TaxonomyBreadcrumbs/>
|
37 |
+
<div className="relative h-full z-30 bg-white">
|
38 |
+
<div className="absolute z-20 inset-0 lg:static h-screen overflow-y-auto pt-4 sm:pt-0 px-6 sm:pl-0 sm:pr-8 pb-40">
|
39 |
+
<TemplatesList/>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
</>
|
43 |
+
</HasSidebar>
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
}
|
extendify-sdk/src/pages/Router.js
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import Welcome from './guide/Welcome.js'
|
2 |
+
// import GuideStart from './guide/GuideStart.js'
|
3 |
+
// import GuideSteps from './guide/GuideSteps.js'
|
4 |
+
import GridView from './GridView.js'
|
5 |
+
import CuratedView from './CuratedView.js'
|
6 |
+
import SingleView from './SingleView.js'
|
7 |
+
import Login from './Login.js'
|
8 |
+
import WaitingCrunching from './modals/WaitingCrunchingModal.js'
|
9 |
+
import { useTemplatesStore } from '../state/Templates.js'
|
10 |
+
|
11 |
+
// Probably the most basic router you can imagine
|
12 |
+
export default function Router({ page }) {
|
13 |
+
const searchParams = useTemplatesStore(state => state.searchParams)
|
14 |
+
|
15 |
+
// TODO: Possibly we can have a loading screen while we fetch terms, etc
|
16 |
+
if (page === 'main' && !Object.keys(searchParams?.taxonomies ?? {}).length) {
|
17 |
+
page = 'curated'
|
18 |
+
}
|
19 |
+
|
20 |
+
// Reroute the main page depending on the taxonomy and type choices
|
21 |
+
// If no pattern types are selected, show a curated page
|
22 |
+
if (page === 'main' &&
|
23 |
+
searchParams?.type === 'pattern' &&
|
24 |
+
searchParams?.taxonomies?.tax_pattern_types === '')
|
25 |
+
{
|
26 |
+
page = 'curated'
|
27 |
+
}
|
28 |
+
|
29 |
+
switch (page) {
|
30 |
+
case 'welcome': return <Welcome/>
|
31 |
+
// case 'guide-start': return <GuideStart/>
|
32 |
+
// case 'guide-steps': return <GuideSteps/>
|
33 |
+
case 'waiting-crunching': return <WaitingCrunching/>
|
34 |
+
case 'curated': return <CuratedView/>
|
35 |
+
case 'main': return <GridView/>
|
36 |
+
case 'single': return <SingleView/>
|
37 |
+
case 'login': return <Login/>
|
38 |
+
}
|
39 |
+
}
|
extendify-sdk/src/pages/SingleView.js
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useTemplatesStore } from '../state/Templates'
|
2 |
+
import Single from './parts/Single'
|
3 |
+
import HasSidebar from './parts/HasSidebar'
|
4 |
+
import { __ } from '@wordpress/i18n'
|
5 |
+
import SidebarSingle from './parts/sidebars/SidebarSingle'
|
6 |
+
import Toolbar from './parts/Toolbar'
|
7 |
+
|
8 |
+
export default function SingleView() {
|
9 |
+
const activeTemplate = useTemplatesStore(state => state.activeTemplate)
|
10 |
+
return <div className="bg-white h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto">
|
11 |
+
<Toolbar className="w-full h-16 border-solid border-0 border-b border-gray-300 flex-shrink-0"/>
|
12 |
+
<div className="w-full flex-grow overflow-hidden">
|
13 |
+
<a href="#extendify-templates" className="sr-only focus:not-sr-only focus:text-blue-500">
|
14 |
+
{__('Skip to content', 'extendify-sdk')}
|
15 |
+
</a>
|
16 |
+
<div className="sm:flex sm:space-x-12 relative bg-white mx-auto max-w-screen-4xl h-full">
|
17 |
+
<div className="absolute bg-white sm:flex inset-0 z-50 sm:space-x-12">
|
18 |
+
<HasSidebar>
|
19 |
+
<SidebarSingle template={activeTemplate}/>
|
20 |
+
<Single template={activeTemplate}/>
|
21 |
+
</HasSidebar>
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
}
|
extendify-sdk/src/pages/guide/GuideStart.js
ADDED
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// import { useEffect } from '@wordpress/element'
|
2 |
+
import { __ } from '@wordpress/i18n'
|
3 |
+
import { useGlobalStore } from '../../state/GlobalState'
|
4 |
+
import { useUserStore } from '../../state/User'
|
5 |
+
import { General as GeneralApi } from '../../api/General'
|
6 |
+
import { useEffect, useRef } from '@wordpress/element'
|
7 |
+
import { useTemplatesStore } from '../../state/Templates'
|
8 |
+
|
9 |
+
export default function GuideStart() {
|
10 |
+
const preferred = useUserStore(state => state.preferredOptions)
|
11 |
+
const templates = useTemplatesStore(state => state.templates)
|
12 |
+
const closeGuide = () => {
|
13 |
+
GeneralApi.ping('guide-cancelled')
|
14 |
+
templates.length && useTemplatesStore.setState({ skipNextFetch: true })
|
15 |
+
useGlobalStore.setState({ currentPage: 'main' })
|
16 |
+
}
|
17 |
+
const goToWelcome = () => {
|
18 |
+
useGlobalStore.setState({ currentPage: 'welcome' })
|
19 |
+
}
|
20 |
+
const setTypeAndProgress = (type) => {
|
21 |
+
// Update their preferred type and start the guide, or if they x
|
22 |
+
// then send them to the main screen
|
23 |
+
type && useUserStore.getState().updatePreferredOption('type', type)
|
24 |
+
useGlobalStore.setState({
|
25 |
+
currentPage: type
|
26 |
+
? 'guide-steps'
|
27 |
+
: 'main',
|
28 |
+
})
|
29 |
+
}
|
30 |
+
|
31 |
+
const templatesRef = useRef()
|
32 |
+
const patternsRef = useRef()
|
33 |
+
|
34 |
+
useEffect(() => {
|
35 |
+
GeneralApi.ping('guide-started')
|
36 |
+
|
37 |
+
preferred?.type === 'pattern'
|
38 |
+
? patternsRef.current.focus()
|
39 |
+
: templatesRef.current.focus()
|
40 |
+
}, [preferred?.type])
|
41 |
+
|
42 |
+
const emptyToolbar = <div className="w-full h-16 relative z-10 border-solid border-0 flex-shrink-0">
|
43 |
+
<div className="flex justify-between items-center px-6 sm:px-12 h-full">
|
44 |
+
<div className="flex space-x-12 h-full">
|
45 |
+
</div>
|
46 |
+
<div className="space-x-2 transform sm:translate-x-8">
|
47 |
+
<button
|
48 |
+
type="button"
|
49 |
+
className="components-button has-icon"
|
50 |
+
onClick={closeGuide}>
|
51 |
+
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" size="24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg>
|
52 |
+
<span className="sr-only">{__('Close library', 'extendify-sdk')}</span>
|
53 |
+
</button>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
|
58 |
+
return <div className="w-full h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto bg-white">
|
59 |
+
{emptyToolbar}
|
60 |
+
<section className="flex-grow w-full justify-between flex flex-col overflow-y-scroll">
|
61 |
+
<div className="flex flex-col w-full lg:h-full max-w-screen-2xl mx-auto p-8" style={{ paddingTop: '13vh' }}>
|
62 |
+
<h1 className="text-left m-0 mb-8 2xl:mb-16 text-7xl">
|
63 |
+
{__('Hello', 'extendify-sdk')}
|
64 |
+
</h1>
|
65 |
+
<div className="flex-grow flex flex-col lg:flex-row space-x-0 space-y-16 lg:space-y-0 lg:space-x-16 xl:space-x-32">
|
66 |
+
<button
|
67 |
+
style={{ maxHeight: '26rem' }}
|
68 |
+
ref={patternsRef}
|
69 |
+
onClick={() => setTypeAndProgress('pattern')}
|
70 |
+
className="button-focus-big-green cursor-pointer bg-white border border-black flex xl:w-1/2 flex-col h-full hover:bg-gray-50 min-h-60 p-8 lg:px-20 space-y-4">
|
71 |
+
<h3 className="text-2xl m-0 text-extendify-main">{__('Add a section', 'extendify-sdk')}</h3>
|
72 |
+
<p className="text-left mb-8 text-lg">{__('Add to an existing page or build your own using patterns.', 'extendify-sdk')}</p>
|
73 |
+
<span className="pt-4">
|
74 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="206" height="122" viewBox="0 0 206 122" fill="none">
|
75 |
+
<path d="M69 0H0V59H69V0Z" fill="#DFDFDF"/>
|
76 |
+
<path d="M204 0H79V60H204V0Z" fill="#DFDFDF"/>
|
77 |
+
<path d="M62.166 25H9.16602V28H62.166V25Z" fill="#F9F9F9"/>
|
78 |
+
<path d="M63.166 18H10.166V21H63.166V18Z" fill="#F9F9F9"/>
|
79 |
+
<path d="M62.166 34H9.16602V39H62.166V34Z" fill="#F9F9F9"/>
|
80 |
+
<path d="M62.166 43H9.16602V48H62.166V43Z" fill="#F9F9F9"/>
|
81 |
+
<path d="M140.166 25H87.166V28H140.166V25Z" fill="#F9F9F9"/>
|
82 |
+
<path d="M140.166 34H87.166V39H140.166V34Z" fill="#F9F9F9"/>
|
83 |
+
<path d="M140.166 43H87.166V48H140.166V43Z" fill="#F9F9F9"/>
|
84 |
+
<path d="M197.166 25H151.166V28H197.166V25Z" fill="#F9F9F9"/>
|
85 |
+
<path d="M141.166 17H88.166V20H141.166V17Z" fill="#F9F9F9"/>
|
86 |
+
<path d="M198.166 17H152.166V20H198.166V17Z" fill="#F9F9F9"/>
|
87 |
+
<path d="M62.166 10H9.16602V13H62.166V10Z" fill="#F9F9F9"/>
|
88 |
+
<path d="M140.166 9H87.166V12H140.166V9Z" fill="#F9F9F9"/>
|
89 |
+
<path d="M197.166 9H151.166V12H197.166V9Z" fill="#F9F9F9"/>
|
90 |
+
<path d="M197.166 34H151.166V39H197.166V34Z" fill="#F9F9F9"/>
|
91 |
+
<path d="M197.166 43H151.166V48H197.166V43Z" fill="#F9F9F9"/>
|
92 |
+
<path d="M154.172 77.8088H0V121.216H154.172V77.8088Z" fill="#DFDFDF"/>
|
93 |
+
<path d="M133.637 110.446C141.077 110.446 147.109 104.75 147.109 97.7229C147.109 90.6963 141.077 85 133.637 85C126.197 85 120.166 90.6963 120.166 97.7229C120.166 104.75 126.197 110.446 133.637 110.446Z" fill="#F9F9F9"/>
|
94 |
+
<path d="M205.166 78H162.166V121H205.166V78Z" fill="#DFDFDF"/>
|
95 |
+
<path d="M183.803 111.637C191.243 111.637 197.275 105.941 197.275 98.9141C197.275 91.8874 191.243 86.1912 183.803 86.1912C176.363 86.1912 170.332 91.8874 170.332 98.9141C170.332 105.941 176.363 111.637 183.803 111.637Z" fill="#F9F9F9"/>
|
96 |
+
<path d="M113.695 88.7898H13.4082V100.764H113.695V88.7898Z" fill="#F9F9F9"/>
|
97 |
+
<path d="M113.695 105.255H13.4082V109.745H113.695V105.255Z" fill="#F9F9F9"/>
|
98 |
+
</svg>
|
99 |
+
</span>
|
100 |
+
</button>
|
101 |
+
<button
|
102 |
+
style={{
|
103 |
+
maxHeight: '26rem',
|
104 |
+
}}
|
105 |
+
ref={templatesRef}
|
106 |
+
onClick={() => setTypeAndProgress('template')}
|
107 |
+
className="button-focus-big-green cursor-pointer bg-white border border-black flex xl:w-1/2 flex-col h-full hover:bg-gray-50 min-h-60 p-8 lg:px-20 space-y-4">
|
108 |
+
<h3 className="text-2xl m-0 text-extendify-main">{__('Add a page', 'extendify-sdk')}</h3>
|
109 |
+
<p className="text-left mb-8 text-lg">{__('Use a full page template that you can customize to make your own.', 'extendify-sdk')}</p>
|
110 |
+
<span className="pt-4">
|
111 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="156" height="128" viewBox="0 0 156 128" fill="none">
|
112 |
+
<path d="M155.006 38.4395H0.833984V81.8471H155.006V38.4395Z" fill="#DFDFDF"/>
|
113 |
+
<path d="M155 0H1V36H155V0Z" fill="#DFDFDF"/>
|
114 |
+
<path d="M148 7H10V28H148V7Z" fill="#F9F9F9"/>
|
115 |
+
<path d="M147.521 47.4204H9.81445V50.414H147.521V47.4204Z" fill="#F9F9F9"/>
|
116 |
+
<path d="M147.521 56.4012H9.81445V60.8917H147.521V56.4012Z" fill="#F9F9F9"/>
|
117 |
+
<path d="M147.521 65.3821H9.81445V69.8726H147.521V65.3821Z" fill="#F9F9F9"/>
|
118 |
+
<path d="M155.006 83.8089H0.833984V127.217H155.006V83.8089Z" fill="#DFDFDF"/>
|
119 |
+
<path d="M21.7897 118.236C29.2297 118.236 35.261 112.539 35.261 105.513C35.261 98.486 29.2297 92.7898 21.7897 92.7898C14.3497 92.7898 8.31836 98.486 8.31836 105.513C8.31836 112.539 14.3497 118.236 21.7897 118.236Z" fill="#F9F9F9"/>
|
120 |
+
<path d="M144.529 92.7898H44.2422V104.764H144.529V92.7898Z" fill="#F9F9F9"/>
|
121 |
+
<path d="M144.529 109.255H44.2422V113.745H144.529V109.255Z" fill="#F9F9F9"/>
|
122 |
+
</svg>
|
123 |
+
</span>
|
124 |
+
</button>
|
125 |
+
</div>
|
126 |
+
</div>
|
127 |
+
<footer className="flex justify-between p-14 w-full">
|
128 |
+
<button
|
129 |
+
type="button"
|
130 |
+
className="cursor-pointer bg-transparent space-x-8 flex items-center hover:bg-gray-100 p-4 -m-4"
|
131 |
+
onClick={goToWelcome}>
|
132 |
+
<svg className="block" width="64" height="64" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
133 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="#000000"/>
|
134 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2"/>
|
135 |
+
</svg>
|
136 |
+
<span className="text-2xl font-bold text-extendify-main">
|
137 |
+
{__('What is Extendify?', 'extendify-sdk')}
|
138 |
+
</span>
|
139 |
+
</button>
|
140 |
+
{/* <button
|
141 |
+
type="button"
|
142 |
+
onClick={closeGuide}
|
143 |
+
className="bg-transparent cursor-pointer text-lg text-extendify-link underline">
|
144 |
+
{__('Skip', 'extendify-sdk')}
|
145 |
+
</button> */}
|
146 |
+
</footer>
|
147 |
+
</section>
|
148 |
+
</div>
|
149 |
+
}
|
extendify-sdk/src/pages/guide/GuideSteps.js
ADDED
@@ -0,0 +1,231 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {
|
2 |
+
useEffect, useState, render, unmountComponentAtNode,
|
3 |
+
} from '@wordpress/element'
|
4 |
+
import { __ } from '@wordpress/i18n'
|
5 |
+
import { useGlobalStore } from '../../state/GlobalState'
|
6 |
+
import { useUserStore } from '../../state/User'
|
7 |
+
import { General as GeneralApi } from '../../api/General'
|
8 |
+
import { useTaxonomyStore } from '../../state/Taxonomies'
|
9 |
+
import classNames from 'classnames'
|
10 |
+
import { useTemplatesStore } from '../../state/Templates'
|
11 |
+
import SearchPredict from '../../components/SearchPredict'
|
12 |
+
import { Transition } from '@headlessui/react'
|
13 |
+
import WaitingCrunching from '../modals/WaitingCrunchingModal'
|
14 |
+
import { Templates as TemplatesApi } from '../../api/Templates'
|
15 |
+
|
16 |
+
export default function GuideSteps() {
|
17 |
+
const updateSearchParams = useTemplatesStore(state => state.updateSearchParams)
|
18 |
+
const templates = useTemplatesStore(state => state.templates)
|
19 |
+
const taxonomyDefaultState = useTemplatesStore(state => state.taxonomyDefaultState)
|
20 |
+
const setActiveTemplate = useTemplatesStore(state => state.setActive)
|
21 |
+
const appendTemplates = useTemplatesStore(state => state.appendTemplates)
|
22 |
+
const updateTaxonomies = useTemplatesStore(state => state.updateTaxonomies)
|
23 |
+
const taxonomies = useTaxonomyStore(state => state.taxonomies)
|
24 |
+
const preferred = useUserStore(state => state.preferredOptions)
|
25 |
+
const [allCats, setAllCats] = useState([])
|
26 |
+
const [stepOneTouched, setStepOneTouched] = useState(false)
|
27 |
+
const [stepTwoTouched, setStepTwoTouched] = useState(false)
|
28 |
+
const [stepThreeTouched, setStepThreeTouched] = useState(false)
|
29 |
+
|
30 |
+
const setPreferred = (key, value) => {
|
31 |
+
useUserStore.getState().updatePreferredOption(key, value)
|
32 |
+
}
|
33 |
+
const typeTax = preferred?.type == 'template'
|
34 |
+
? 'tax_page_types'
|
35 |
+
: 'tax_pattern_types'
|
36 |
+
|
37 |
+
const closeGuide = () => {
|
38 |
+
GeneralApi.ping('guide-cancelled')
|
39 |
+
templates.length && useTemplatesStore.setState({ skipNextFetch: true })
|
40 |
+
useGlobalStore.setState({ currentPage: 'main' })
|
41 |
+
}
|
42 |
+
const fetchDelayThenDisplay = () => {
|
43 |
+
updateSearchParams({
|
44 |
+
taxonomies: Object.assign(
|
45 |
+
{}, taxonomyDefaultState, preferred.taxonomies,
|
46 |
+
),
|
47 |
+
type: preferred.type,
|
48 |
+
search: preferred.search,
|
49 |
+
})
|
50 |
+
const action = new Promise((resolve) => {
|
51 |
+
useTemplatesStore.setState({ skipNextFetch: true })
|
52 |
+
const setupTemplates = (data) => {
|
53 |
+
appendTemplates(data)
|
54 |
+
data.length === 1 && setActiveTemplate(data[0])
|
55 |
+
useTemplatesStore.setState({
|
56 |
+
nextPage: data.offset,
|
57 |
+
})
|
58 |
+
}
|
59 |
+
// TODO: this could probably be smarter and recursive we want to remove more
|
60 |
+
TemplatesApi.get(useTemplatesStore.getState().searchParams).then((response) => {
|
61 |
+
if (response.records.length) {
|
62 |
+
setupTemplates(response.records)
|
63 |
+
return resolve()
|
64 |
+
}
|
65 |
+
// Remove the style and try again
|
66 |
+
updateTaxonomies({ tax_style: '' })
|
67 |
+
TemplatesApi.get(useTemplatesStore.getState().searchParams).then((response) => {
|
68 |
+
setupTemplates(response.records)
|
69 |
+
return resolve()
|
70 |
+
})
|
71 |
+
})
|
72 |
+
})
|
73 |
+
const callback = async () => {
|
74 |
+
await new Promise((resolve) => setTimeout(resolve, 1500))
|
75 |
+
useGlobalStore.setState({
|
76 |
+
currentPage: 'main',
|
77 |
+
})
|
78 |
+
unmountComponentAtNode(document.getElementById('extendify-util'))
|
79 |
+
}
|
80 |
+
render(<WaitingCrunching
|
81 |
+
action={action}
|
82 |
+
callback={callback}
|
83 |
+
text={__('Finding templates...', 'extendify-sdk')}
|
84 |
+
/>, document.getElementById('extendify-util'))
|
85 |
+
}
|
86 |
+
|
87 |
+
const showStepTwo = () => (stepOneTouched || preferred?.taxonomies?.tax_categories) ? true : false
|
88 |
+
const showStepThree = () => (showStepTwo() && (!taxonomies[typeTax] || stepTwoTouched || preferred?.taxonomies[typeTax])) ? true : false
|
89 |
+
const showFinalButton = () => (showStepThree() && (stepThreeTouched || preferred?.taxonomies?.tax_style)) ? true : false
|
90 |
+
|
91 |
+
useEffect(() => {
|
92 |
+
if (!taxonomies?.tax_categories) {
|
93 |
+
return
|
94 |
+
}
|
95 |
+
|
96 |
+
const all = Object.values(taxonomies.tax_categories)
|
97 |
+
// Map over all terms
|
98 |
+
.map((term) =>
|
99 |
+
// Filter out terms not of this type (pattern/template)
|
100 |
+
term.children.filter(c => c.type.includes(preferred?.type)).map(c => c.term))
|
101 |
+
// merge all together
|
102 |
+
.flat().sort()
|
103 |
+
|
104 |
+
setAllCats([...new Set(all)])
|
105 |
+
}, [taxonomies, preferred?.type])
|
106 |
+
|
107 |
+
const emptyToolbar = <div className="w-full h-16 relative z-10 border-solid border-0 flex-shrink-0">
|
108 |
+
<div className="flex justify-between items-center px-6 sm:px-12 h-full">
|
109 |
+
<div className="flex space-x-12 h-full">
|
110 |
+
</div>
|
111 |
+
<div className="space-x-2 transform sm:translate-x-8">
|
112 |
+
<button
|
113 |
+
type="button"
|
114 |
+
className="components-button has-icon"
|
115 |
+
onClick={closeGuide}>
|
116 |
+
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" size="24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg>
|
117 |
+
<span className="sr-only">{__('Close library', 'extendify-sdk')}</span>
|
118 |
+
</button>
|
119 |
+
</div>
|
120 |
+
</div>
|
121 |
+
</div>
|
122 |
+
|
123 |
+
return <div className="w-full h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto bg-white">
|
124 |
+
{emptyToolbar}
|
125 |
+
<section className="flex-grow w-full justify-between flex flex-col overflow-y-scroll">
|
126 |
+
<div className="flex flex-col w-full h-full p-8 pb-0 md:p-16 md:pb-0 2xl:p-28 2xl:pb-0 max-w-screen-2xl mx-auto">
|
127 |
+
<h1 className="text-left m-0 mb-12 text-7xl">
|
128 |
+
{__('Hello', 'extendify-sdk')}
|
129 |
+
</h1>
|
130 |
+
<div className="flex-grow lg:flex justify-between space-y-8 lg:space-y-0 lg:space-x-16 xl:space-x-32">
|
131 |
+
<div className="text-left flex-shrink-0 lg:w-1/2">
|
132 |
+
<h2 className="text-2xl m-0 mb-8">
|
133 |
+
{preferred?.type === 'template' ?
|
134 |
+
__('Help me find a template', 'extendify-sdk') :
|
135 |
+
__('Help me find a pattern', 'extendify-sdk')}
|
136 |
+
</h2>
|
137 |
+
<div className="flex flex-col space-y-8">
|
138 |
+
<div>
|
139 |
+
<p className="text-base text-gray-900 m-0 mb-5">{__('Select your industry:', 'extendify-sdk')}</p>
|
140 |
+
<SearchPredict
|
141 |
+
list={allCats}
|
142 |
+
value={preferred?.taxonomies?.tax_categories}
|
143 |
+
touched={() => setStepOneTouched(true)}
|
144 |
+
label={__('Category', 'extendify-sdk')}
|
145 |
+
setValue={(v) => setPreferred('tax_categories', v)}/>
|
146 |
+
</div>
|
147 |
+
|
148 |
+
<Transition
|
149 |
+
enter="transform transition duration-50 duration-300"
|
150 |
+
enterFrom="opacity-0 translate-y-2"
|
151 |
+
enterTo="opacity-100 translate-y-0"
|
152 |
+
show={showStepTwo()}>
|
153 |
+
{taxonomies[typeTax] && <div onChange={() => setStepTwoTouched(true)}>
|
154 |
+
<label
|
155 |
+
className="text-base text-gray-900 m-0 mb-4 block"
|
156 |
+
htmlFor="typeTax-search">
|
157 |
+
{__('What type of section are you trying to add?', 'extendify-sdk')}
|
158 |
+
</label>
|
159 |
+
<select
|
160 |
+
onChange={(event) => setPreferred(typeTax, event.target.value)}
|
161 |
+
value={preferred?.taxonomies[typeTax] ?? ''}
|
162 |
+
id="typeTax-search"
|
163 |
+
className="h-8 max-w-md min-h-0 w-full px-2 text-sm border border-gray-900 button-focus-big-green rounded-none">
|
164 |
+
<option value="">{__('Select type', 'extendify-sdk')}</option>
|
165 |
+
{Object.values(taxonomies[typeTax]).map((t) => {
|
166 |
+
return <option key={t.term} value={t.term}>
|
167 |
+
{t.term}
|
168 |
+
</option>
|
169 |
+
})}
|
170 |
+
</select>
|
171 |
+
</div>}
|
172 |
+
</Transition>
|
173 |
+
</div>
|
174 |
+
</div>
|
175 |
+
<div className="mt-16 text-left">
|
176 |
+
<Transition
|
177 |
+
enter="transform transition duration-50 duration-300"
|
178 |
+
enterFrom="opacity-0 translate-y-2"
|
179 |
+
enterTo="opacity-100 translate-y-0"
|
180 |
+
show={showStepThree()}>
|
181 |
+
<div onClick={() => setStepThreeTouched(true)}>
|
182 |
+
<p className="text-base text-gray-900 m-0 mb-4">
|
183 |
+
{__('What style best matches what you\'re looking for?', 'extendify-sdk')}
|
184 |
+
</p>
|
185 |
+
<div>
|
186 |
+
{taxonomies?.tax_style && <div className="grid grid-cols-2 gap-4 mb-8">
|
187 |
+
{Object.values(taxonomies.tax_style)
|
188 |
+
.filter((t) => t?.type?.includes(preferred?.type) && t?.thumbnail)
|
189 |
+
.map((t) => {
|
190 |
+
return <button
|
191 |
+
key={t.term}
|
192 |
+
onClick={() => setPreferred('tax_style', t.term)}
|
193 |
+
className={classNames({
|
194 |
+
'bg-transparent p-0 m-0 cursor-pointer': true,
|
195 |
+
'ring-4 ring-offset-4 ring-extendify-main outline-none': t.term === preferred?.taxonomies?.tax_style,
|
196 |
+
})}>
|
197 |
+
<span className="sr-only">{t.term}</span>
|
198 |
+
<img className="w-full" src={t.thumbnail} alt={`Style named ${t.term}`} />
|
199 |
+
</button>
|
200 |
+
})}
|
201 |
+
</div>}
|
202 |
+
</div>
|
203 |
+
</div>
|
204 |
+
</Transition>
|
205 |
+
<Transition
|
206 |
+
enter="transform transition duration-50 duration-300"
|
207 |
+
enterFrom="opacity-0 translate-y-2"
|
208 |
+
enterTo="opacity-100 translate-y-0"
|
209 |
+
show={showFinalButton()}>
|
210 |
+
<button
|
211 |
+
onClick={() => fetchDelayThenDisplay()}
|
212 |
+
className="button-extendify-main button-focus-big-green p-4 text-xl">
|
213 |
+
{preferred?.type === 'template' ?
|
214 |
+
__('View templates', 'extendify-sdk') :
|
215 |
+
__('View patterns', 'extendify-sdk')}
|
216 |
+
</button>
|
217 |
+
</Transition>
|
218 |
+
</div>
|
219 |
+
</div>
|
220 |
+
</div>
|
221 |
+
<footer className="flex justify-between p-14 w-full">
|
222 |
+
<div>
|
223 |
+
<svg className="block" width="64" height="64" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
224 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="#000000"/>
|
225 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2"/>
|
226 |
+
</svg>
|
227 |
+
</div>
|
228 |
+
</footer>
|
229 |
+
</section>
|
230 |
+
</div>
|
231 |
+
}
|
extendify-sdk/src/pages/guide/Welcome.js
ADDED
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// import { useEffect } from '@wordpress/element'
|
2 |
+
import { __, sprintf } from '@wordpress/i18n'
|
3 |
+
import { useGlobalStore } from '../../state/GlobalState'
|
4 |
+
import { useUserStore } from '../../state/User'
|
5 |
+
import { General as GeneralApi } from '../../api/General'
|
6 |
+
import { useEffect } from '@wordpress/element'
|
7 |
+
import { useTemplatesStore } from '../../state/Templates'
|
8 |
+
|
9 |
+
export default function Welcome() {
|
10 |
+
const updateSearchParams = useTemplatesStore(state => state.updateSearchParams)
|
11 |
+
const updateTypeAndClose = (type) => {
|
12 |
+
GeneralApi.ping(`welcome-${type ?? 'closed'}`)
|
13 |
+
|
14 |
+
useUserStore.setState({
|
15 |
+
hasClickedThroughWelcomePage: true,
|
16 |
+
})
|
17 |
+
|
18 |
+
// Update their preferred type and start the guide, or if they x
|
19 |
+
// then send them to the main screen
|
20 |
+
// type && useUserStore.getState().updatePreferredOption('type', type)
|
21 |
+
// useGlobalStore.setState({
|
22 |
+
// currentPage: type
|
23 |
+
// ? 'guide-steps'
|
24 |
+
// : 'main',
|
25 |
+
// })
|
26 |
+
// Delete if using welcome guide
|
27 |
+
updateSearchParams({
|
28 |
+
type: type ?? 'pattern',
|
29 |
+
})
|
30 |
+
useGlobalStore.setState({ currentPage: 'main' })
|
31 |
+
}
|
32 |
+
|
33 |
+
useEffect(() => {
|
34 |
+
GeneralApi.ping('welcome-opened')
|
35 |
+
}, [])
|
36 |
+
|
37 |
+
const emptyToolbar = <div className="w-full h-16 relative z-10 border-solid border-0 flex-shrink-0">
|
38 |
+
<div className="flex justify-between items-center px-6 sm:px-12 h-full">
|
39 |
+
<div className="flex space-x-12 h-full">
|
40 |
+
</div>
|
41 |
+
<div className="space-x-2 transform sm:translate-x-8">
|
42 |
+
<button
|
43 |
+
type="button"
|
44 |
+
className="components-button has-icon"
|
45 |
+
onClick={() => updateTypeAndClose()}>
|
46 |
+
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" size="24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg>
|
47 |
+
<span className="sr-only">{__('Close library', 'extendify-sdk')}</span>
|
48 |
+
</button>
|
49 |
+
</div>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
const headerText = window.extendifySdkData.source === 'Redux' ?
|
54 |
+
__('Welcome to the Redux Library by Extendify', 'extendify-sdk') :
|
55 |
+
__('Welcome to the Extendify library', 'extendify-sdk')
|
56 |
+
|
57 |
+
return <div className="w-full h-full flex flex-col items-center relative shadow-xl max-w-screen-4xl mx-auto bg-white">
|
58 |
+
{emptyToolbar}
|
59 |
+
<section className="flex-grow w-full justify-between flex flex-col overflow-y-scroll">
|
60 |
+
<div className="flex items-center flex-grow">
|
61 |
+
<div className="w-full p-8 max-w-screen-2xl mx-auto lg:space-x-16 lg:flex space-y-16 lg:space-y-0">
|
62 |
+
<div className="flex-grow text-left">
|
63 |
+
<h1 className="m-0 mb-10 text-5xl">
|
64 |
+
{headerText}
|
65 |
+
</h1>
|
66 |
+
<div className="max-w-2xl mb-24">
|
67 |
+
<p className="mb-10 leading-loose">{__('Congratulations! You have access to our entire library of Gutenberg patterns and templates. You can add up to 3 templates or patterns to your site completely free.', 'extendify-sdk')}</p>
|
68 |
+
<p className="mb-6 leading-loose">{__('All patterns and templates are pre-designed to look beautiful with options to fit your style. They also keep your site running lightning fast by using only core blocks with no 3rd party page builder required.', 'extendify-sdk')}</p>
|
69 |
+
<a
|
70 |
+
className="text-sm text-extendify-link underline"
|
71 |
+
href={`https://extendify.com?utm_source=${window.extendifySdkData.source}&utm_medium=library&utm_campaign=welcome`}
|
72 |
+
target="_blank"
|
73 |
+
rel="noreferrer">
|
74 |
+
{__('Learn more about Extendify', 'extendify-sdk')}
|
75 |
+
</a>
|
76 |
+
</div>
|
77 |
+
<h2 className="font-bold border-b border-black max-w-lg pb-2 mb-1">
|
78 |
+
{__('Don\'t want the library in your editor?', 'extendify-sdk')}
|
79 |
+
</h2>
|
80 |
+
<div className="">
|
81 |
+
<p>{sprintf(__('Extendify was included with the %s plugin.', 'extendify-sdk'),
|
82 |
+
window.extendifySdkData.source)
|
83 |
+
}</p>
|
84 |
+
<a
|
85 |
+
className="text-xs text-extendify-link underline"
|
86 |
+
href={`https://extendify.com/how-to-disable-the-extendify-library/?utm_source=${window.extendifySdkData.source}&utm_medium=library&utm_campaign=welcome`}
|
87 |
+
target="_blank"
|
88 |
+
rel="noreferrer">{__('Learn how to remove the library', 'extendify-sdk')}</a>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
<div className="flex-shrink-0 flex items-end">
|
92 |
+
<div className="flex-grow flex items-center space-y-4 xl:space-y-8 flex-col">
|
93 |
+
<button type="button" onClick={() => updateTypeAndClose('pattern')} className="bg-white hover:bg-gray-50 cursor-pointer border border-gray-300 flex space-y-4 flex-col items-center justify-center p-8 lg:px-0 w-80">
|
94 |
+
<h3 className="m-0 text-gray-900">{__('Sections', 'extendify-sdk')}</h3>
|
95 |
+
<span>
|
96 |
+
<svg className="mt-1" xmlns="http://www.w3.org/2000/svg" width="206" height="122" viewBox="0 0 206 122" fill="none">
|
97 |
+
<path d="M69 0H0V59H69V0Z" fill="#DFDFDF"/>
|
98 |
+
<path d="M204 0H79V60H204V0Z" fill="#DFDFDF"/>
|
99 |
+
<path d="M62.166 25H9.16602V28H62.166V25Z" fill="#F9F9F9"/>
|
100 |
+
<path d="M63.166 18H10.166V21H63.166V18Z" fill="#F9F9F9"/>
|
101 |
+
<path d="M62.166 34H9.16602V39H62.166V34Z" fill="#F9F9F9"/>
|
102 |
+
<path d="M62.166 43H9.16602V48H62.166V43Z" fill="#F9F9F9"/>
|
103 |
+
<path d="M140.166 25H87.166V28H140.166V25Z" fill="#F9F9F9"/>
|
104 |
+
<path d="M140.166 34H87.166V39H140.166V34Z" fill="#F9F9F9"/>
|
105 |
+
<path d="M140.166 43H87.166V48H140.166V43Z" fill="#F9F9F9"/>
|
106 |
+
<path d="M197.166 25H151.166V28H197.166V25Z" fill="#F9F9F9"/>
|
107 |
+
<path d="M141.166 17H88.166V20H141.166V17Z" fill="#F9F9F9"/>
|
108 |
+
<path d="M198.166 17H152.166V20H198.166V17Z" fill="#F9F9F9"/>
|
109 |
+
<path d="M62.166 10H9.16602V13H62.166V10Z" fill="#F9F9F9"/>
|
110 |
+
<path d="M140.166 9H87.166V12H140.166V9Z" fill="#F9F9F9"/>
|
111 |
+
<path d="M197.166 9H151.166V12H197.166V9Z" fill="#F9F9F9"/>
|
112 |
+
<path d="M197.166 34H151.166V39H197.166V34Z" fill="#F9F9F9"/>
|
113 |
+
<path d="M197.166 43H151.166V48H197.166V43Z" fill="#F9F9F9"/>
|
114 |
+
<path d="M154.172 77.8088H0V121.216H154.172V77.8088Z" fill="#DFDFDF"/>
|
115 |
+
<path d="M133.637 110.446C141.077 110.446 147.109 104.75 147.109 97.7229C147.109 90.6963 141.077 85 133.637 85C126.197 85 120.166 90.6963 120.166 97.7229C120.166 104.75 126.197 110.446 133.637 110.446Z" fill="#F9F9F9"/>
|
116 |
+
<path d="M205.166 78H162.166V121H205.166V78Z" fill="#DFDFDF"/>
|
117 |
+
<path d="M183.803 111.637C191.243 111.637 197.275 105.941 197.275 98.9141C197.275 91.8874 191.243 86.1912 183.803 86.1912C176.363 86.1912 170.332 91.8874 170.332 98.9141C170.332 105.941 176.363 111.637 183.803 111.637Z" fill="#F9F9F9"/>
|
118 |
+
<path d="M113.695 88.7898H13.4082V100.764H113.695V88.7898Z" fill="#F9F9F9"/>
|
119 |
+
<path d="M113.695 105.255H13.4082V109.745H113.695V105.255Z" fill="#F9F9F9"/>
|
120 |
+
</svg>
|
121 |
+
</span>
|
122 |
+
<span className="text-extendify-bright underline text-base font-bold">
|
123 |
+
{__('View patterns', 'extendify-sdk')}
|
124 |
+
</span>
|
125 |
+
</button>
|
126 |
+
<button type="button" onClick={() => updateTypeAndClose('template')} className="bg-white hover:bg-gray-50 cursor-pointer border border-gray-300 flex space-y-4 flex-col items-center justify-center p-8 lg:px-0 w-80">
|
127 |
+
<h3 className="m-0 text-gray-900">{__('Full pages', 'extendify-sdk')}</h3>
|
128 |
+
<span>
|
129 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="156" height="128" viewBox="0 0 156 128" fill="none">
|
130 |
+
<path d="M155.006 38.4395H0.833984V81.8471H155.006V38.4395Z" fill="#DFDFDF"/>
|
131 |
+
<path d="M155 0H1V36H155V0Z" fill="#DFDFDF"/>
|
132 |
+
<path d="M148 7H10V28H148V7Z" fill="#F9F9F9"/>
|
133 |
+
<path d="M147.521 47.4204H9.81445V50.414H147.521V47.4204Z" fill="#F9F9F9"/>
|
134 |
+
<path d="M147.521 56.4012H9.81445V60.8917H147.521V56.4012Z" fill="#F9F9F9"/>
|
135 |
+
<path d="M147.521 65.3821H9.81445V69.8726H147.521V65.3821Z" fill="#F9F9F9"/>
|
136 |
+
<path d="M155.006 83.8089H0.833984V127.217H155.006V83.8089Z" fill="#DFDFDF"/>
|
137 |
+
<path d="M21.7897 118.236C29.2297 118.236 35.261 112.539 35.261 105.513C35.261 98.486 29.2297 92.7898 21.7897 92.7898C14.3497 92.7898 8.31836 98.486 8.31836 105.513C8.31836 112.539 14.3497 118.236 21.7897 118.236Z" fill="#F9F9F9"/>
|
138 |
+
<path d="M144.529 92.7898H44.2422V104.764H144.529V92.7898Z" fill="#F9F9F9"/>
|
139 |
+
<path d="M144.529 109.255H44.2422V113.745H144.529V109.255Z" fill="#F9F9F9"/>
|
140 |
+
</svg>
|
141 |
+
</span>
|
142 |
+
<span className="text-extendify-bright underline text-base font-bold">
|
143 |
+
{__('View templates', 'extendify-sdk')}
|
144 |
+
</span>
|
145 |
+
</button>
|
146 |
+
</div>
|
147 |
+
</div>
|
148 |
+
</div>
|
149 |
+
</div>
|
150 |
+
<footer className="flex justify-between p-14 w-full">
|
151 |
+
<div>
|
152 |
+
<svg className="block" width="64" height="64" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
153 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="#000000"/>
|
154 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2"/>
|
155 |
+
</svg>
|
156 |
+
</div>
|
157 |
+
<button
|
158 |
+
type="button"
|
159 |
+
onClick={() => updateTypeAndClose()}
|
160 |
+
className="bg-transparent cursor-pointer text-lg text-extendify-link underline">
|
161 |
+
{__('Go to library', 'extendify-sdk')}
|
162 |
+
</button>
|
163 |
+
</footer>
|
164 |
+
</section>
|
165 |
+
</div>
|
166 |
+
}
|
extendify-sdk/src/pages/modals/WaitingCrunchingModal.js
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Button, Modal } from '@wordpress/components'
|
2 |
+
import { useEffect } from '@wordpress/element'
|
3 |
+
import { __ } from '@wordpress/i18n'
|
4 |
+
|
5 |
+
export default function WaitingCrunchingModal({ action, callback, text }) {
|
6 |
+
useEffect(() => {
|
7 |
+
action.then(async () => await callback())
|
8 |
+
})
|
9 |
+
|
10 |
+
// Currently this is just a basic WP modal that is invoked/rendered outside of the
|
11 |
+
// application, but could instead act as a mediary page that renderes within. It's
|
12 |
+
// just not yet used there at this time.
|
13 |
+
return <Modal
|
14 |
+
title={text}
|
15 |
+
isDismissible={false}>
|
16 |
+
<Button style={{
|
17 |
+
width: '100%',
|
18 |
+
}} disabled isPrimary isBusy onClick={() => {}}>
|
19 |
+
{__('Please wait...', 'extendify-sdk')}
|
20 |
+
</Button>
|
21 |
+
</Modal>
|
22 |
+
}
|
extendify-sdk/src/pages/parts/Grid.js
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {
|
2 |
+
useEffect, useState, useCallback, useRef,
|
3 |
+
} from '@wordpress/element'
|
4 |
+
import { useTemplatesStore } from '../../state/Templates'
|
5 |
+
import { Templates as TemplatesApi } from '../../api/Templates'
|
6 |
+
import { useInView } from 'react-intersection-observer'
|
7 |
+
import { Spinner, Button } from '@wordpress/components'
|
8 |
+
import { __, sprintf } from '@wordpress/i18n'
|
9 |
+
import { useIsMounted } from '../../hooks/helpers'
|
10 |
+
import TemplateButton from '../../components/TemplateButton'
|
11 |
+
|
12 |
+
export default function TemplatesList() {
|
13 |
+
const isMounted = useIsMounted()
|
14 |
+
const templates = useTemplatesStore(state => state.templates)
|
15 |
+
const setActiveTemplate = useTemplatesStore(state => state.setActive)
|
16 |
+
const appendTemplates = useTemplatesStore(state => state.appendTemplates)
|
17 |
+
const [serverError, setServerError] = useState('')
|
18 |
+
const [nothingFound, setNothingFound] = useState(false)
|
19 |
+
// const [imagesLoaded, setImagesLoaded] = useState([])
|
20 |
+
const [loadMoreRef, inView] = useInView()
|
21 |
+
|
22 |
+
const updateSearchParams = useTemplatesStore(state => state.updateSearchParams)
|
23 |
+
const searchParamsRaw = useTemplatesStore(state => state.searchParams)
|
24 |
+
|
25 |
+
// Store the next page in case we have pagination
|
26 |
+
const nextPage = useRef(useTemplatesStore.getState().nextPage)
|
27 |
+
const searchParams = useRef(useTemplatesStore.getState().searchParams)
|
28 |
+
// Connect to the store on mount, disconnect on unmount, catch state-changes in a reference
|
29 |
+
useEffect(() => useTemplatesStore.subscribe(n => (nextPage.current = n),
|
30 |
+
state => state.nextPage), [])
|
31 |
+
useEffect(() => useTemplatesStore.subscribe(s => (searchParams.current = s),
|
32 |
+
state => state.searchParams), [])
|
33 |
+
|
34 |
+
// Fetch the templates then add them to the current state
|
35 |
+
// TODO: This works, but it's not really doing what it's intended to do
|
36 |
+
// as it has a side effect in there, and isn't pure.
|
37 |
+
// It could be extracted to a hook
|
38 |
+
const fetchTemplates = useCallback(async () => {
|
39 |
+
setServerError('')
|
40 |
+
setNothingFound(false)
|
41 |
+
const response = await TemplatesApi.get(searchParams.current, { offset: nextPage.current })
|
42 |
+
.catch((error) => {
|
43 |
+
console.error(error)
|
44 |
+
setServerError(error && error.message
|
45 |
+
? error.message
|
46 |
+
: __('Unknown error occured. Check browser console or contact support.', 'extendify-sdk'))
|
47 |
+
})
|
48 |
+
if (!isMounted.current) {
|
49 |
+
return
|
50 |
+
}
|
51 |
+
if (response?.error?.length) {
|
52 |
+
setServerError(response?.error)
|
53 |
+
}
|
54 |
+
if (response?.records && searchParamsRaw === searchParams.current) {
|
55 |
+
useTemplatesStore.setState({
|
56 |
+
nextPage: response.offset,
|
57 |
+
})
|
58 |
+
appendTemplates(response.records)
|
59 |
+
setNothingFound(response.records.length <= 0)
|
60 |
+
}
|
61 |
+
}, [searchParamsRaw, appendTemplates, isMounted])
|
62 |
+
|
63 |
+
// This is the main driver for loading templates
|
64 |
+
// This loads the initial batch of templates. But if we don't yet have taxonomies.
|
65 |
+
// There's also an option to skip loading on first mount
|
66 |
+
useEffect(() => {
|
67 |
+
if (!Object.keys(searchParams.current.taxonomies).length) {
|
68 |
+
return
|
69 |
+
}
|
70 |
+
|
71 |
+
if (useTemplatesStore.getState().skipNextFetch) {
|
72 |
+
// This is useful if the templates are fetched already and
|
73 |
+
// the library moves to/from another state that re-renders
|
74 |
+
// The point is to keep the logic close to the list. That may change someday
|
75 |
+
useTemplatesStore.setState({
|
76 |
+
skipNextFetch: false,
|
77 |
+
})
|
78 |
+
return
|
79 |
+
}
|
80 |
+
// setImagesLoaded([])
|
81 |
+
fetchTemplates()
|
82 |
+
}, [fetchTemplates, searchParams])
|
83 |
+
|
84 |
+
// Fetches when the load more is in view
|
85 |
+
useEffect(() => {
|
86 |
+
inView && fetchTemplates()
|
87 |
+
}, [inView, fetchTemplates])
|
88 |
+
|
89 |
+
if (serverError.length) {
|
90 |
+
return <div className="text-left">
|
91 |
+
<h2 className="text-left">{__('Server error', 'extendify-sdk')}</h2>
|
92 |
+
<code className="block max-w-xl p-4 mb-4" style={{
|
93 |
+
minHeight: '10rem',
|
94 |
+
}}>{serverError}</code>
|
95 |
+
<Button isTertiary onClick={() => {
|
96 |
+
// setImagesLoaded([])
|
97 |
+
updateSearchParams({
|
98 |
+
taxonomies: {},
|
99 |
+
search: '',
|
100 |
+
})
|
101 |
+
fetchTemplates()
|
102 |
+
}}>{ __('Press here to reload experience')}</Button>
|
103 |
+
</div>
|
104 |
+
}
|
105 |
+
|
106 |
+
if (nothingFound) {
|
107 |
+
if (searchParamsRaw?.search.length) {
|
108 |
+
return <h2 className="text-left">
|
109 |
+
{sprintf(__('No results for %s.', 'extendify-sdk'), searchParamsRaw?.search)}
|
110 |
+
</h2>
|
111 |
+
}
|
112 |
+
return <h2 className="text-left">{__('No results found.', 'extendify-sdk')}</h2>
|
113 |
+
}
|
114 |
+
|
115 |
+
if (!templates.length) {
|
116 |
+
return <div className="flex items-center justify-center w-full sm:mt-64">
|
117 |
+
<Spinner/>
|
118 |
+
</div>
|
119 |
+
}
|
120 |
+
|
121 |
+
return <>
|
122 |
+
<ul className="flex-grow gap-6 grid xl:grid-cols-2 2xl:grid-cols-3 pb-32 m-0">
|
123 |
+
{templates.map((template) => {
|
124 |
+
return <li key={template.id}>
|
125 |
+
<TemplateButton
|
126 |
+
template={template}
|
127 |
+
setActiveTemplate={() => setActiveTemplate(template)}
|
128 |
+
imageLoaded={() => {}}
|
129 |
+
/>
|
130 |
+
</li>
|
131 |
+
})}
|
132 |
+
</ul>
|
133 |
+
{useTemplatesStore.getState().nextPage && <>
|
134 |
+
<div
|
135 |
+
className="-translate-y-full flex flex-col h-80 items-end justify-end my-2 relative transform z-0 text"
|
136 |
+
ref={loadMoreRef}
|
137 |
+
style={{ zIndex: -1 }}>
|
138 |
+
</div>
|
139 |
+
<div className="my-4">
|
140 |
+
<Spinner/>
|
141 |
+
</div>
|
142 |
+
</>}
|
143 |
+
</>
|
144 |
+
}
|
extendify-sdk/src/pages/parts/HasSidebar.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import LoginButton from '../../components/Loginbutton'
|
2 |
+
import { useUserStore } from '../../state/User'
|
3 |
+
import { useState, useEffect } from '@wordpress/element'
|
4 |
+
// import { useGlobalStore } from '../../state/GlobalState'
|
5 |
+
// import { __ } from '@wordpress/i18n'
|
6 |
+
// import { useTemplatesStore } from '../../state/Templates'
|
7 |
+
|
8 |
+
export default function HasSidebar({ children }) {
|
9 |
+
const apiKey = useUserStore(state => state.apiKey)
|
10 |
+
const [canLogInOut, setCanInLogOut] = useState(false)
|
11 |
+
// const setActiveTemplate = useTemplatesStore(state => state.setActive)
|
12 |
+
// const openGuide = () => {
|
13 |
+
// useGlobalStore.setState({
|
14 |
+
// currentPage: 'guide-start',
|
15 |
+
// })
|
16 |
+
// setActiveTemplate({})
|
17 |
+
// }
|
18 |
+
useEffect(() => {
|
19 |
+
setCanInLogOut(!apiKey.length || window.location.search.indexOf('DEVMODE') > -1)
|
20 |
+
}, [apiKey])
|
21 |
+
return <>
|
22 |
+
<aside className="flex-shrink-0 sm:pl-12 py-0 sm:py-6 relative">
|
23 |
+
<div className="sm:w-56 lg:w-72 sticky flex flex-col lg:h-full">{children[0]}</div>
|
24 |
+
<div className="hidden sm:flex flex-col absolute bottom-0 bg-white mb-4 w-72 text-left space-y-4">
|
25 |
+
<div className="border-t border-gray-300 flex divide-x">
|
26 |
+
{/* <button
|
27 |
+
type="button"
|
28 |
+
className="components-button inline-block flex-1 text-center hover:bg-gray-100"
|
29 |
+
onClick={openGuide}>
|
30 |
+
{__('Welcome Guide', 'extendify-sdk')}
|
31 |
+
</button> */}
|
32 |
+
{canLogInOut && <LoginButton/>}
|
33 |
+
</div>
|
34 |
+
</div>
|
35 |
+
</aside>
|
36 |
+
<main
|
37 |
+
id="extendify-templates"
|
38 |
+
// tabIndex="0"
|
39 |
+
className="w-full smp:l-12 sm:pt-6 h-full overflow-hidden">
|
40 |
+
{children[1]}
|
41 |
+
</main>
|
42 |
+
</>
|
43 |
+
}
|
extendify-sdk/src/pages/parts/MainWindow.js
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {
|
2 |
+
Fragment, useRef, useEffect,
|
3 |
+
} from '@wordpress/element'
|
4 |
+
import { Dialog, Transition } from '@headlessui/react'
|
5 |
+
import useBeacon from '../../hooks/useBeacon'
|
6 |
+
import { useGlobalStore } from '../../state/GlobalState'
|
7 |
+
import Router from '../Router'
|
8 |
+
import useTaxonomies from '../../hooks/useTaxonomies'
|
9 |
+
import { General as GeneralApi } from '../../api/General'
|
10 |
+
import { useUserStore } from '../../state/User'
|
11 |
+
|
12 |
+
export default function MainWindow() {
|
13 |
+
const containerRef = useRef(null)
|
14 |
+
const open = useGlobalStore(state => state.open)
|
15 |
+
const metaData = useGlobalStore(state => state.metaData)
|
16 |
+
const currentPage = useGlobalStore(state => state.currentPage)
|
17 |
+
useBeacon(open)
|
18 |
+
useTaxonomies(open)
|
19 |
+
|
20 |
+
useEffect(() => {
|
21 |
+
if (!open) return
|
22 |
+
if (!useUserStore.getState().hasClickedThroughWelcomePage) {
|
23 |
+
useGlobalStore.setState({ currentPage: 'welcome' })
|
24 |
+
return
|
25 |
+
}
|
26 |
+
// if (!window.sessionStorage.getItem('esxtendify-show-guide')) {
|
27 |
+
// window.sessionStorage.setItem('esxtendify-show-guide', '1')
|
28 |
+
// useGlobalStore.setState({ currentPage: 'guide-start' })
|
29 |
+
// return
|
30 |
+
// }
|
31 |
+
}, [open])
|
32 |
+
|
33 |
+
useEffect(() => {
|
34 |
+
if (!open || Object.keys(metaData).length) {
|
35 |
+
return
|
36 |
+
}
|
37 |
+
GeneralApi.metaData().then((data) => useGlobalStore.setState({ metaData: data }))
|
38 |
+
}, [open, metaData])
|
39 |
+
|
40 |
+
return (
|
41 |
+
<Transition.Root show={open} as={Fragment}>
|
42 |
+
<Dialog
|
43 |
+
as="div"
|
44 |
+
static
|
45 |
+
className="extendify-sdk"
|
46 |
+
initialFocus={containerRef}
|
47 |
+
onClose={() => {}}
|
48 |
+
>
|
49 |
+
<div className="h-screen w-screen sm:h-auto sm:w-auto fixed z-high inset-0 overflow-y-auto">
|
50 |
+
<div className="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
|
51 |
+
<Transition.Child
|
52 |
+
as={Fragment}
|
53 |
+
enter="ease-out duration-300"
|
54 |
+
enterFrom="opacity-0"
|
55 |
+
enterTo="opacity-100"
|
56 |
+
>
|
57 |
+
<Dialog.Overlay className="fixed inset-0 bg-black bg-opacity-30 transition-opacity" />
|
58 |
+
</Transition.Child>
|
59 |
+
<Transition.Child
|
60 |
+
as={Fragment}
|
61 |
+
enter="ease-out duration-300"
|
62 |
+
enterFrom="opacity-0 translate-y-4 sm:translate-y-5"
|
63 |
+
enterTo="opacity-100 translate-y-0"
|
64 |
+
>
|
65 |
+
<div
|
66 |
+
ref={containerRef}
|
67 |
+
tabIndex="0"
|
68 |
+
className="fixed lg:absolute inset-0 lg:overflow-hidden transform transition-all lg:p-5">
|
69 |
+
<Router page={currentPage} />
|
70 |
+
</div>
|
71 |
+
</Transition.Child>
|
72 |
+
</div>
|
73 |
+
</div>
|
74 |
+
</Dialog>
|
75 |
+
</Transition.Root>
|
76 |
+
)
|
77 |
+
}
|
extendify-sdk/src/pages/parts/RowByTax.js
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useState, useEffect } from '@wordpress/element'
|
2 |
+
import { Templates as TemplatesApi } from '../../api/Templates'
|
3 |
+
import { useTemplatesStore } from '../../state/Templates'
|
4 |
+
import TemplateButton, { TemplateButtonSkeleton } from '../../components/TemplateButton'
|
5 |
+
import { useIsMounted } from '../../hooks/helpers'
|
6 |
+
import { useGlobalStore } from '../../state/GlobalState'
|
7 |
+
import { __ } from '@wordpress/i18n'
|
8 |
+
import { useTaxonomyStore } from '../../state/Taxonomies'
|
9 |
+
|
10 |
+
const apiResponses = new Map()
|
11 |
+
|
12 |
+
export default function RowByTax({ searchParams, title, tax }) {
|
13 |
+
const updateTaxonomies = useTemplatesStore(state => state.updateTaxonomies)
|
14 |
+
const toggleOpenedTaxonomy = useTaxonomyStore(state => state.toggleOpenedTaxonomy)
|
15 |
+
const [templates, setTemplates] = useState([])
|
16 |
+
const [howManyToFetch, setHowManyToFetch] = useState()
|
17 |
+
const setActiveTemplate = useTemplatesStore(state => state.setActive)
|
18 |
+
const isModalOpen = useGlobalStore(state => state.open)
|
19 |
+
const isMounted = useIsMounted()
|
20 |
+
|
21 |
+
useEffect(() => {
|
22 |
+
setHowManyToFetch(window.innerWidth < 1600 ? 3 : 4)
|
23 |
+
}, [])
|
24 |
+
|
25 |
+
useEffect(() => {
|
26 |
+
if (!isMounted.current || !howManyToFetch || !isModalOpen) {
|
27 |
+
return
|
28 |
+
}
|
29 |
+
const key = JSON.stringify(Object.assign(searchParams, { pageSize: howManyToFetch, force: true }))
|
30 |
+
if (apiResponses.has(key)) {
|
31 |
+
setTemplates(apiResponses.get(key))
|
32 |
+
return
|
33 |
+
}
|
34 |
+
TemplatesApi.get(searchParams, { pageSize: howManyToFetch, force: true }).then((response) => {
|
35 |
+
if (response?.records?.length && isMounted.current) {
|
36 |
+
apiResponses.set(key, response.records)
|
37 |
+
setTemplates(response.records)
|
38 |
+
}
|
39 |
+
})
|
40 |
+
}, [searchParams, isMounted, howManyToFetch, isModalOpen])
|
41 |
+
|
42 |
+
return <section>
|
43 |
+
<div className="flex justify-between">
|
44 |
+
<h2 className="text-2xl mb-2 text-extendify-main uppercase m-0 text-left font-bold">
|
45 |
+
{title}
|
46 |
+
</h2>
|
47 |
+
<button
|
48 |
+
onClick={() => {
|
49 |
+
updateTaxonomies({ [tax]: title })
|
50 |
+
toggleOpenedTaxonomy('tax_pattern_types', true)
|
51 |
+
}}
|
52 |
+
type="button"
|
53 |
+
className="components-button">{ __('View all', 'extendify-sdk') }</button>
|
54 |
+
</div>
|
55 |
+
<ul className="flex-grow gap-6 grid xl:grid-cols-2 2xl:grid-cols-3 3xl:grid-cols-4 pb-16 m-0">
|
56 |
+
{/* TODO: we may want to keep intermediary state to have a better loading experience */}
|
57 |
+
{templates.length === 0 && Array.from({ length: howManyToFetch }, (_, i) => <TemplateButtonSkeleton key={i}/>)}
|
58 |
+
{templates.map((template) => {
|
59 |
+
return <li key={template.id}>
|
60 |
+
<TemplateButton
|
61 |
+
template={template}
|
62 |
+
setActiveTemplate={() => setActiveTemplate(template)}
|
63 |
+
imageLoaded={() => {}}
|
64 |
+
/>
|
65 |
+
</li>
|
66 |
+
})}
|
67 |
+
</ul>
|
68 |
+
</section>
|
69 |
+
// return <div>
|
70 |
+
}
|
extendify-sdk/src/pages/parts/Single.js
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { ImportButton } from '../../components/ImportButton'
|
2 |
+
import { __ } from '@wordpress/i18n'
|
3 |
+
import classNames from 'classnames'
|
4 |
+
import { useUserStore } from '../../state/User'
|
5 |
+
import { ExternalLink } from '@wordpress/components'
|
6 |
+
import {
|
7 |
+
useEffect, useState, useCallback,
|
8 |
+
} from '@wordpress/element'
|
9 |
+
import { Templates as TemplatesApi } from '../../api/Templates'
|
10 |
+
import TaxonomyList from '../../components/TaxonomyList'
|
11 |
+
import { useIsMounted } from '../../hooks/helpers'
|
12 |
+
import { useTemplatesStore } from '../../state/Templates'
|
13 |
+
|
14 |
+
const relatedMap = new Map()
|
15 |
+
|
16 |
+
export default function Single({ template }) {
|
17 |
+
const {
|
18 |
+
tax_categories: categories,
|
19 |
+
required_plugins: requiredPlugins,
|
20 |
+
tax_style: styles,
|
21 |
+
tax_pattern_types: types,
|
22 |
+
} = template.fields
|
23 |
+
const apiKey = useUserStore(state => state.apiKey)
|
24 |
+
const [related, setRelated] = useState([])
|
25 |
+
const [alternatives, setAlternatives] = useState([])
|
26 |
+
const isMounted = useIsMounted()
|
27 |
+
const setActiveTemplate = useTemplatesStore(state => state.setActive)
|
28 |
+
|
29 |
+
const changeTemplate = (template) => {
|
30 |
+
setRelated([])
|
31 |
+
setAlternatives([])
|
32 |
+
requestAnimationFrame(() => setActiveTemplate(template))
|
33 |
+
}
|
34 |
+
|
35 |
+
const fetchRelated = useCallback(async (queryType, wantedType) => {
|
36 |
+
const key = `${template.id}|${queryType}|${wantedType}`
|
37 |
+
if (relatedMap.has(key)) {
|
38 |
+
return relatedMap.get(key)
|
39 |
+
}
|
40 |
+
const results = await TemplatesApi.related(
|
41 |
+
template, queryType, wantedType,
|
42 |
+
)
|
43 |
+
relatedMap.set(key, results)
|
44 |
+
return results
|
45 |
+
}, [template])
|
46 |
+
|
47 |
+
useEffect(() => { TemplatesApi.single(template) }, [template])
|
48 |
+
useEffect(() => {
|
49 |
+
fetchRelated('related', 'pattern').then((results) => {
|
50 |
+
isMounted.current && setRelated(results)
|
51 |
+
// fetchRelated('alternatives', template.fields.type).then((results) => {
|
52 |
+
// isMounted.current && setAlternatives(results)
|
53 |
+
// })
|
54 |
+
})
|
55 |
+
}, [template, fetchRelated, isMounted])
|
56 |
+
|
57 |
+
return <div className="flex flex-col min-h-screen bg-white sm:min-h-0 items-start overflow-y-auto h-full sm:pr-8 lg:pl-px lg:-ml-px">
|
58 |
+
<div className="lg:sticky top-0 bg-white flex flex-col lg:flex-row items-start justify-start lg:items-center lg:justify-between w-full max-w-screen-xl lg:border-b border-gray-300">
|
59 |
+
<div className="text-left m-0 h-full px-6 sm:p-0">
|
60 |
+
<h1 className="leading-tight text-left mb-2.5 mt-0 sm:text-3xl font-normal">{template.fields.display_title}</h1>
|
61 |
+
<ExternalLink href={template.fields.url}>
|
62 |
+
{__('Demo', 'extendify-sdk')}
|
63 |
+
</ExternalLink>
|
64 |
+
</div>
|
65 |
+
<div className={classNames({
|
66 |
+
'inline-flex sm:top-auto right-0 m-6 sm:m-0 sm:my-6 space-x-3': true,
|
67 |
+
'top-16 mt-5': !apiKey.length,
|
68 |
+
'top-0': apiKey.length > 0,
|
69 |
+
})}>
|
70 |
+
<ImportButton template={template} />
|
71 |
+
</div>
|
72 |
+
</div>
|
73 |
+
<div className="max-w-screen-xl sm:w-full sm:m-0 sm:mb-8 m-6 border lg:border-t-0 border-gray-300 m-46">
|
74 |
+
<img
|
75 |
+
className="max-w-full w-full block"
|
76 |
+
src={template?.fields?.screenshot[0]?.thumbnails?.full?.url ?? template?.fields?.screenshot[0]?.url}/>
|
77 |
+
</div>
|
78 |
+
|
79 |
+
<div className="divide-y p-6 sm:p-0 mb-16">
|
80 |
+
{related.length > 0 && <section className="mb-4">
|
81 |
+
<h4 className="text-lg m-0 mb-4 text-left font-semibold">{__('Related', 'extendify-sdk')}</h4>
|
82 |
+
<div className="grid md:grid-cols-2 xl:grid-cols-4 gap-6">
|
83 |
+
{related.map((template) => {
|
84 |
+
return <button key={template.id}
|
85 |
+
type="button"
|
86 |
+
className="min-h-60 border border-transparent hover:border-wp-theme-500 transition duration-150 p-0 m-0 cursor-pointer"
|
87 |
+
onClick={() => changeTemplate(template)}>
|
88 |
+
<img
|
89 |
+
className="max-w-full block p-0 m-0 object-cover"
|
90 |
+
src={template?.fields?.screenshot[0]?.thumbnails?.large?.url ?? template?.fields?.screenshot[0]?.url}/>
|
91 |
+
</button>
|
92 |
+
})}
|
93 |
+
</div>
|
94 |
+
</section>}
|
95 |
+
{alternatives.length > 0 && <section className="mb-4 pt-6">
|
96 |
+
<h4 className="text-lg m-0 mb-4 text-left font-semibold">{__('Alternatives', 'extendify-sdk')}</h4>
|
97 |
+
<div className="grid md:grid-cols-2 xl:grid-cols-4 gap-6">
|
98 |
+
{alternatives.map((template) => {
|
99 |
+
return <button key={template.id}
|
100 |
+
type="button"
|
101 |
+
className="min-h-60 border border-transparent hover:border-wp-theme-500 transition duration-150 p-0 m-0 cursor-pointer"
|
102 |
+
onClick={() => changeTemplate(template)}>
|
103 |
+
<img
|
104 |
+
className="max-w-full block p-0 m-0 object-cover"
|
105 |
+
src={template?.fields?.screenshot[0]?.thumbnails?.large?.url ?? template?.fields?.screenshot[0]?.url}/>
|
106 |
+
</button>
|
107 |
+
})}
|
108 |
+
</div>
|
109 |
+
</section>}
|
110 |
+
</div>
|
111 |
+
|
112 |
+
{/* Hides on desktop and is repeated in the single sidebar too */}
|
113 |
+
<div className="text-xs text-left p-6 w-full block sm:hidden divide-y">
|
114 |
+
<TaxonomyList
|
115 |
+
categories={categories}
|
116 |
+
types={types}
|
117 |
+
requiredPlugins={requiredPlugins}
|
118 |
+
styles={styles}/>
|
119 |
+
</div>
|
120 |
+
</div>
|
121 |
+
}
|
extendify-sdk/src/pages/parts/Toolbar.js
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __, sprintf } from '@wordpress/i18n'
|
2 |
+
import { useGlobalStore } from '../../state/GlobalState'
|
3 |
+
import { useUserStore } from '../../state/User'
|
4 |
+
|
5 |
+
export default function Toolbar({ className }) {
|
6 |
+
const remainingImports = useUserStore(state => state.remainingImports)
|
7 |
+
const apiKey = useUserStore(state => state.apiKey)
|
8 |
+
const allowedImports = useUserStore(state => state.allowedImports)
|
9 |
+
const metaData = useGlobalStore(state => state.metaData)
|
10 |
+
const setOpen = useGlobalStore(state => state.setOpen)
|
11 |
+
|
12 |
+
return <div className={className}>
|
13 |
+
<div className="flex justify-between items-center px-6 sm:px-12 h-full">
|
14 |
+
<div className="flex space-x-12 h-full">
|
15 |
+
<div className="bg-transparent font-bold flex items-center space-x-1.5 lg:w-72">
|
16 |
+
<svg className="" width="30" height="30" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
17 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="#000000"/>
|
18 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2"/>
|
19 |
+
</svg>
|
20 |
+
<span className="text-sm transform translate-y-0.5 whitespace-nowrap">
|
21 |
+
{__('Extendify Library', 'extendify-sdk')}
|
22 |
+
</span>
|
23 |
+
</div>
|
24 |
+
{!apiKey.length && <>
|
25 |
+
<div className="items-center ml-8 h-full hidden md:flex">
|
26 |
+
<div className="m-0 p-0 px-6 text-sm bg-gray-50 border-l border-gray-300 h-full flex items-center whitespace-nowrap">
|
27 |
+
{sprintf(
|
28 |
+
__('Imports left: %s / %s'), remainingImports(), Number(allowedImports),
|
29 |
+
)}
|
30 |
+
</div>
|
31 |
+
<div className="h-full items-center border-l hidden lg:flex">
|
32 |
+
{metaData?.banners?.library_header && <>
|
33 |
+
{metaData.banners.library_header?.image &&
|
34 |
+
<a
|
35 |
+
className="h-full block"
|
36 |
+
target="_blank"
|
37 |
+
rel="noreferrer"
|
38 |
+
href={metaData.banners.library_header.url}>
|
39 |
+
<img
|
40 |
+
src={metaData.banners.library_header.image}
|
41 |
+
alt="Extendify notice"/>
|
42 |
+
</a>
|
43 |
+
}
|
44 |
+
{!metaData.banners.library_header?.image &&
|
45 |
+
<div className="text-gray-900 space-x-6 bg-extendify-light px-6 p-2 h-full flex items-center">
|
46 |
+
<span className="font-bold text-left">{metaData.banners.library_header.text_backup}</span>
|
47 |
+
{metaData.banners.library_header?.url && <div>
|
48 |
+
<a
|
49 |
+
className="button-extendify-main"
|
50 |
+
target="_blank"
|
51 |
+
rel="noreferrer"
|
52 |
+
href={`${metaData.banners.library_header.url}&utm_source=${encodeURIComponent(window.extendifySdkData.source)}&utm_medium=library&utm_campaign=banner`}>
|
53 |
+
{metaData.banners.library_header?.button_text ?? __('Get it now', 'extendify-sdk')}
|
54 |
+
</a>
|
55 |
+
</div>}
|
56 |
+
</div>
|
57 |
+
}
|
58 |
+
</>}
|
59 |
+
</div>
|
60 |
+
</div>
|
61 |
+
</>}
|
62 |
+
</div>
|
63 |
+
<div className="space-x-2 transform sm:translate-x-6">
|
64 |
+
<button type="button" className="components-button has-icon" onClick={() => setOpen(false)}>
|
65 |
+
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" size="24" role="img" aria-hidden="true" focusable="false"><path d="M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"></path></svg>
|
66 |
+
<span className="sr-only">{__('Close library', 'extendify-sdk')}</span>
|
67 |
+
</button>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
</div>
|
71 |
+
}
|
extendify-sdk/src/pages/parts/sidebars/SidebarMain.js
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { useTemplatesStore } from '../../../state/Templates'
|
2 |
+
// import { SelectControl } from '@wordpress/components'
|
3 |
+
import { __ } from '@wordpress/i18n'
|
4 |
+
import { debounce } from 'lodash'
|
5 |
+
import { useState } from '@wordpress/element'
|
6 |
+
import { Panel } from '@wordpress/components'
|
7 |
+
import TaxonomySection from '../../../components/TaxonomySection'
|
8 |
+
import { useTaxonomyStore } from '../../../state/Taxonomies'
|
9 |
+
|
10 |
+
export default function SidebarMain() {
|
11 |
+
const updateSearchParams = useTemplatesStore(state => state.updateSearchParams)
|
12 |
+
const taxonomies = useTaxonomyStore(state => state.taxonomies)
|
13 |
+
const searchParams = useTemplatesStore(state => state.searchParams)
|
14 |
+
const searchInputUpdate = debounce((value) => updateSearchParams({
|
15 |
+
taxonomies: {},
|
16 |
+
search: value,
|
17 |
+
}), 500)
|
18 |
+
const [searchValue, setSearchValue] = useState(searchParams?.search ?? '')
|
19 |
+
|
20 |
+
return <>
|
21 |
+
<div className="mt-px bg-white mb-6 mx-6 pt-6 lg:mx-0 lg:pt-0">
|
22 |
+
<label
|
23 |
+
className="sr-only"
|
24 |
+
htmlFor="extendify-search-input">{__('What are you looking for?', 'extendify-sdk')}</label>
|
25 |
+
<input
|
26 |
+
id="extendify-search-input"
|
27 |
+
type="search"
|
28 |
+
placeholder={__('What are you looking for?', 'extendify-sdk')}
|
29 |
+
onChange={(event) => {
|
30 |
+
useTemplatesStore.setState({
|
31 |
+
nextPage: '',
|
32 |
+
})
|
33 |
+
setSearchValue(event.target.value)
|
34 |
+
searchInputUpdate(event.target.value)
|
35 |
+
}}
|
36 |
+
value={searchValue}
|
37 |
+
className="button-focus bg-gray-100 focus:bg-white border-0 m-0 p-3.5 pb-3 rounded-none text-sm w-full"
|
38 |
+
autoComplete="off" />
|
39 |
+
<svg className="absolute top-3 right-6 hidden lg:block pointer-events-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img" aria-hidden="true" focusable="false"><path d="M13.5 6C10.5 6 8 8.5 8 11.5c0 1.1.3 2.1.9 3l-3.4 3 1 1.1 3.4-2.9c1 .9 2.2 1.4 3.6 1.4 3 0 5.5-2.5 5.5-5.5C19 8.5 16.5 6 13.5 6zm0 9.5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"></path></svg>
|
40 |
+
</div>
|
41 |
+
<div className="mt-px flex-grow hidden overflow-y-auto pb-32 pr-2 pt-px sm:block">
|
42 |
+
<Panel>
|
43 |
+
{Object.entries(taxonomies).map((taxonomy) => {
|
44 |
+
return <TaxonomySection
|
45 |
+
key={taxonomy[0]}
|
46 |
+
taxonomy={taxonomy} />
|
47 |
+
})}
|
48 |
+
</Panel>
|
49 |
+
</div>
|
50 |
+
</>
|
51 |
+
}
|
extendify-sdk/src/pages/parts/sidebars/SidebarSingle.js
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { __ } from '@wordpress/i18n'
|
2 |
+
import { useGlobalStore } from '../../../state/GlobalState'
|
3 |
+
import { useTemplatesStore } from '../../../state/Templates'
|
4 |
+
import { useUserStore } from '../../../state/User'
|
5 |
+
import TaxonomyList from '../../../components/TaxonomyList'
|
6 |
+
|
7 |
+
export default function SidebarSingle({ template }) {
|
8 |
+
const setActiveTemplate = useTemplatesStore(state => state.setActive)
|
9 |
+
const {
|
10 |
+
tax_categories: categories,
|
11 |
+
required_plugins: requiredPlugins,
|
12 |
+
tax_style: styles,
|
13 |
+
tax_pattern_types: types,
|
14 |
+
} = template.fields
|
15 |
+
const apiKey = useUserStore(state => state.apiKey)
|
16 |
+
|
17 |
+
const goBack = () => {
|
18 |
+
useGlobalStore.setState({ currentPage: 'main' })
|
19 |
+
setActiveTemplate({})
|
20 |
+
}
|
21 |
+
|
22 |
+
return <div className="flex flex-col items-start justify-start">
|
23 |
+
{!apiKey.length && <div className="h-full flex sm:hidden w-full p-4 justify-between border items-center border-gray-300 bg-extendify-lightest">
|
24 |
+
<a
|
25 |
+
className="button-extendify-main"
|
26 |
+
target="_blank"
|
27 |
+
href={`https://extendify.com/pricing?utm_source=${window.extendifySdkData.source}&utm_medium=library&utm_campaign=sign_up&utm_content=main`}
|
28 |
+
rel="noreferrer">
|
29 |
+
{__('Sign up today to get unlimited access', 'extendify-sdk')}
|
30 |
+
</a>
|
31 |
+
<button
|
32 |
+
className="components-button"
|
33 |
+
onClick={() => useGlobalStore.setState({
|
34 |
+
currentPage: 'login',
|
35 |
+
})}>
|
36 |
+
{__('Log in', 'extendify-sdk')}
|
37 |
+
</button>
|
38 |
+
</div>}
|
39 |
+
<div className="p-6 sm:p-0">
|
40 |
+
<button
|
41 |
+
type="button"
|
42 |
+
className="cursor-pointer text-black bg-transparent font-medium flex items-center p-3 transform -translate-x-3 button-focus"
|
43 |
+
onClick={goBack}>
|
44 |
+
<svg className="fill-current" width="8" height="12" viewBox="0 0 8 12" xmlns="http://www.w3.org/2000/svg">
|
45 |
+
<path d="M6.70998 9.88047L2.82998 6.00047L6.70998 2.12047C7.09998 1.73047 7.09998 1.10047 6.70998 0.710469C6.31998 0.320469 5.68998 0.320469 5.29998 0.710469L0.70998 5.30047C0.31998 5.69047 0.31998 6.32047 0.70998 6.71047L5.29998 11.3005C5.68998 11.6905 6.31998 11.6905 6.70998 11.3005C7.08998 10.9105 7.09998 10.2705 6.70998 9.88047Z"/>
|
46 |
+
</svg>
|
47 |
+
<span className="ml-4">{__('Go back', 'extendify-sdk')}</span>
|
48 |
+
</button>
|
49 |
+
</div>
|
50 |
+
{/* Hides on mobile and is repeated at the bottom of the single page too */}
|
51 |
+
<div className="text-left pt-14 divide-y w-full hidden sm:block">
|
52 |
+
<TaxonomyList
|
53 |
+
categories={categories}
|
54 |
+
types={types}
|
55 |
+
requiredPlugins={requiredPlugins}
|
56 |
+
styles={styles}/>
|
57 |
+
</div>
|
58 |
+
</div>
|
59 |
+
}
|
extendify-sdk/src/state/GlobalState.js
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import create from 'zustand'
|
2 |
+
import { useTemplatesStore } from './Templates'
|
3 |
+
|
4 |
+
export const useGlobalStore = create((set) => ({
|
5 |
+
open: false,
|
6 |
+
metaData: {},
|
7 |
+
currentPage: 'main',
|
8 |
+
setOpen: (value) => {
|
9 |
+
set({
|
10 |
+
open: value,
|
11 |
+
})
|
12 |
+
// Reset the state if it's closed manualy
|
13 |
+
// value && useTemplatesStore.getState().setActive({}) - Not this though
|
14 |
+
value && useTemplatesStore.getState().removeTemplates()
|
15 |
+
// value && useTemplatesStore.getState().setActive({}) // This can be used to default to grid
|
16 |
+
},
|
17 |
+
}))
|
extendify-sdk/src/state/Importing.js
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import create from 'zustand'
|
2 |
+
import { persist } from 'zustand/middleware'
|
3 |
+
|
4 |
+
export const useWantedTemplateStore = create(persist((set) => ({
|
5 |
+
wantedTemplate: {},
|
6 |
+
importOnLoad: false,
|
7 |
+
setWanted: (template) => set({
|
8 |
+
wantedTemplate: template,
|
9 |
+
}),
|
10 |
+
removeWanted: () => set({
|
11 |
+
wantedTemplate: {},
|
12 |
+
}),
|
13 |
+
|
14 |
+
}), {
|
15 |
+
name: 'extendify-wanted-template',
|
16 |
+
}))
|
extendify-sdk/src/state/Taxonomies.js
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import create from 'zustand'
|
2 |
+
|
3 |
+
export const useTaxonomyStore = create((set, get) => ({
|
4 |
+
taxonomies: {},
|
5 |
+
openedTaxonomies: [],
|
6 |
+
setTaxonomies: (taxonomies) => set({
|
7 |
+
taxonomies,
|
8 |
+
}),
|
9 |
+
// This is here because I couldn't get the sidebar components to hold state on re-render
|
10 |
+
toggleOpenedTaxonomy: (tax, add) => {
|
11 |
+
const opened = get().openedTaxonomies
|
12 |
+
set({
|
13 |
+
openedTaxonomies: add ? [...opened, tax] : [...opened.filter(t => t != tax)],
|
14 |
+
})
|
15 |
+
},
|
16 |
+
}))
|
extendify-sdk/src/state/Templates.js
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import create from 'zustand'
|
2 |
+
import { templates as config } from '../config'
|
3 |
+
import { createBlocksFromInnerBlocksTemplate } from '../util/blocks'
|
4 |
+
import { useGlobalStore } from './GlobalState'
|
5 |
+
|
6 |
+
const defaultCategoryForType = (type, tax) => type === 'pattern' && tax === 'tax_categories'
|
7 |
+
? 'Default'
|
8 |
+
: ''
|
9 |
+
|
10 |
+
export const useTemplatesStore = create((set, get) => ({
|
11 |
+
templates: [],
|
12 |
+
skipNextFetch: false,
|
13 |
+
fetchToken: null,
|
14 |
+
activeTemplate: {},
|
15 |
+
activeTemplateBlocks: {},
|
16 |
+
taxonomyDefaultState: {},
|
17 |
+
searchParams: {
|
18 |
+
taxonomies: {},
|
19 |
+
type: config.defaultType,
|
20 |
+
search: '',
|
21 |
+
},
|
22 |
+
// The offset is returned from Airtable.
|
23 |
+
// It's removed when search params are updated
|
24 |
+
// Or otherwise updated on each request
|
25 |
+
nextPage: '',
|
26 |
+
removeTemplates: () => set({
|
27 |
+
nextPage: '',
|
28 |
+
templates: [],
|
29 |
+
}),
|
30 |
+
appendTemplates: (templates) => set({
|
31 |
+
templates: [...new Map([...get().templates, ...templates].map(item => [item.id, item])).values()],
|
32 |
+
}),
|
33 |
+
setupDefaultTaxonomies: (taxonomies) => {
|
34 |
+
// This will transform ['tax_categories', 'tax_another'] to {tax_categories: 'Default', tax_another: ''}
|
35 |
+
const defaultState = (tax) => defaultCategoryForType(get().searchParams.type, tax)
|
36 |
+
const taxonomyDefaultState = Object.keys(taxonomies).reduce((theObject, current) => (theObject[current] = defaultState(current), theObject), {})
|
37 |
+
const tax = {}
|
38 |
+
tax.taxonomies = Object.assign(
|
39 |
+
{}, taxonomyDefaultState, get().searchParams.taxonomies,
|
40 |
+
)
|
41 |
+
|
42 |
+
set({
|
43 |
+
taxonomyDefaultState: taxonomyDefaultState,
|
44 |
+
searchParams: {
|
45 |
+
...Object.assign(get().searchParams, tax),
|
46 |
+
},
|
47 |
+
})
|
48 |
+
},
|
49 |
+
setActive: (template) => {
|
50 |
+
set({ activeTemplate: template })
|
51 |
+
|
52 |
+
// If we havea template, we should move that that page
|
53 |
+
if (Object.keys(template).length > 0) {
|
54 |
+
useGlobalStore.setState({ currentPage: 'single' })
|
55 |
+
}
|
56 |
+
|
57 |
+
// This will convert the template to blocks for quick(er) injection
|
58 |
+
if (template?.fields?.code) {
|
59 |
+
const { parse } = window.wp.blocks
|
60 |
+
set({ activeTemplateBlocks: createBlocksFromInnerBlocksTemplate(parse(template.fields.code)) })
|
61 |
+
}
|
62 |
+
},
|
63 |
+
resetTaxonomy: (tax) => {
|
64 |
+
get().updateTaxonomies({
|
65 |
+
[tax]: get().taxonomyDefaultState[tax] ?? '',
|
66 |
+
})
|
67 |
+
},
|
68 |
+
updateTaxonomies: (params) => {
|
69 |
+
const tax = {}
|
70 |
+
tax.taxonomies = Object.assign(
|
71 |
+
{}, get().searchParams.taxonomies, params,
|
72 |
+
)
|
73 |
+
get().updateSearchParams(tax)
|
74 |
+
},
|
75 |
+
updateSearchParams: (params) => {
|
76 |
+
// If taxonomies are set to {}, lets use the default
|
77 |
+
if (params?.taxonomies && !Object.keys(params.taxonomies).length) {
|
78 |
+
params.taxonomies = get().taxonomyDefaultState
|
79 |
+
}
|
80 |
+
|
81 |
+
// If changing the type, change the hard coded tax cat label
|
82 |
+
if (params?.type && ['', 'Default'].includes(get().searchParams?.taxonomies?.tax_categories)) {
|
83 |
+
get().updateTaxonomies({
|
84 |
+
tax_categories: defaultCategoryForType(params.type, 'tax_categories'),
|
85 |
+
})
|
86 |
+
}
|
87 |
+
|
88 |
+
const searchParams = Object.assign(
|
89 |
+
{}, get().searchParams, params,
|
90 |
+
)
|
91 |
+
|
92 |
+
// If the params are the same then don't update
|
93 |
+
if (JSON.stringify(searchParams) === JSON.stringify(get().searchParams)) {
|
94 |
+
return
|
95 |
+
}
|
96 |
+
|
97 |
+
set({
|
98 |
+
templates: [],
|
99 |
+
nextPage: '',
|
100 |
+
searchParams,
|
101 |
+
})
|
102 |
+
},
|
103 |
+
}))
|
extendify-sdk/src/state/User.js
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import create from 'zustand'
|
2 |
+
import { persist } from 'zustand/middleware'
|
3 |
+
import { User } from '../api/User'
|
4 |
+
|
5 |
+
const storage = {
|
6 |
+
getItem: async () => await User.getData(),
|
7 |
+
setItem: async (_name, value) => await User.setData(value),
|
8 |
+
}
|
9 |
+
|
10 |
+
export const useUserStore = create(persist((set, get) => ({
|
11 |
+
email: '',
|
12 |
+
apiKey: '',
|
13 |
+
imports: 0,
|
14 |
+
uuid: '',
|
15 |
+
registration: {
|
16 |
+
email: '',
|
17 |
+
},
|
18 |
+
allowedImports: 0,
|
19 |
+
entryPoint: 'not-set',
|
20 |
+
enabled: true,
|
21 |
+
hasClickedThroughWelcomePage: false,
|
22 |
+
canInstallPlugins: false,
|
23 |
+
canActivatePlugins: false,
|
24 |
+
preferredOptions: {
|
25 |
+
taxonomies: {},
|
26 |
+
type: '',
|
27 |
+
search: '',
|
28 |
+
},
|
29 |
+
incrementImports: () => set({ imports: get().imports + 1 }),
|
30 |
+
canImport: () => get().apiKey
|
31 |
+
? true
|
32 |
+
: (Number(get().imports) < Number(get().allowedImports)),
|
33 |
+
remainingImports: () => {
|
34 |
+
if (get().apiKey) {
|
35 |
+
return 'unlimited'
|
36 |
+
}
|
37 |
+
const remaining = Number(get().allowedImports) - Number(get().imports)
|
38 |
+
return remaining > 0 ? remaining : 0
|
39 |
+
},
|
40 |
+
updatePreferredOption: (option, value) => {
|
41 |
+
// If the option doesn't exist, assume it's a taxonomy
|
42 |
+
if (!Object.prototype.hasOwnProperty.call(get().preferredOptions, option)) {
|
43 |
+
value = Object.assign(
|
44 |
+
{},
|
45 |
+
get().preferredOptions?.taxonomies ?? {},
|
46 |
+
{ [option]: value },
|
47 |
+
)
|
48 |
+
option = 'taxonomies'
|
49 |
+
}
|
50 |
+
// Reset if the type changes from template/pattern/etc
|
51 |
+
const resetTaxonomies = (option == 'type' && value !== get().preferredOptions?.type)
|
52 |
+
set({
|
53 |
+
preferredOptions: {
|
54 |
+
...Object.assign(
|
55 |
+
{},
|
56 |
+
get().preferredOptions,
|
57 |
+
{ [option]: value },
|
58 |
+
resetTaxonomies ? { taxonomies: {}} : {},
|
59 |
+
),
|
60 |
+
},
|
61 |
+
})
|
62 |
+
},
|
63 |
+
}), {
|
64 |
+
name: 'extendify-user',
|
65 |
+
getStorage: () => storage,
|
66 |
+
}))
|
extendify-sdk/src/util/airtable.js
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
export function createTemplatesFilterFormula(filters) {
|
2 |
+
const { taxonomies, search, type } = filters
|
3 |
+
const formula = []
|
4 |
+
|
5 |
+
// Builds the taxonomy list by looping over all supplied taxonomies
|
6 |
+
const taxFormula = Object.entries(taxonomies)
|
7 |
+
.filter((tax) => Boolean(tax[1].length))
|
8 |
+
.map((tax) => `${tax[0]} = "${tax[1]}"`)
|
9 |
+
.join(', ')
|
10 |
+
|
11 |
+
taxFormula.length && formula.push(taxFormula)
|
12 |
+
search?.length && formula.push(`OR(FIND(LOWER("${search}"), LOWER(title))!= 0, FIND(LOWER("${search}"), LOWER({tax_categories})) != 0)`)
|
13 |
+
type.length && formula.push(`{type}="${type}"`)
|
14 |
+
|
15 |
+
return formula.length
|
16 |
+
? `AND(${formula.join(', ')})`.replace(/\r?\n|\r/g, '')
|
17 |
+
: ''
|
18 |
+
}
|
extendify-sdk/src/util/blocks.js
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
/**
|
3 |
+
* Given an array of InnerBlocks templates or Block Objects,
|
4 |
+
* returns an array of created Blocks from them.
|
5 |
+
* It handles the case of having InnerBlocks as Blocks by
|
6 |
+
* converting them to the proper format to continue recursively.
|
7 |
+
*
|
8 |
+
* @param {Array} innerBlocksOrTemplate Nested blocks or InnerBlocks templates.
|
9 |
+
*
|
10 |
+
* @return {Object[]} Array of Block objects.
|
11 |
+
*/
|
12 |
+
export function createBlocksFromInnerBlocksTemplate(innerBlocksOrTemplate = []) {
|
13 |
+
const { createBlock } = window.wp.blocks
|
14 |
+
|
15 |
+
// TODO: This should return the native implementation if available here
|
16 |
+
|
17 |
+
return innerBlocksOrTemplate.map((innerBlock) => {
|
18 |
+
const innerBlockTemplate = Array.isArray(innerBlock)
|
19 |
+
? innerBlock
|
20 |
+
: [innerBlock.name, innerBlock.attributes, innerBlock.innerBlocks]
|
21 |
+
const [name, attributes, innerBlocks = []] = innerBlockTemplate
|
22 |
+
return createBlock(
|
23 |
+
name, attributes, createBlocksFromInnerBlocksTemplate(innerBlocks),
|
24 |
+
)
|
25 |
+
})
|
26 |
+
}
|
extendify-sdk/src/util/general.js
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { isString, toLower } from 'lodash'
|
2 |
+
import { useUserStore } from '../state/User'
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Will check if the given string contains the search string
|
6 |
+
*
|
7 |
+
* @param {string} string
|
8 |
+
* @param {string} searchString
|
9 |
+
*/
|
10 |
+
|
11 |
+
export function search(string, searchString) {
|
12 |
+
// type validation
|
13 |
+
if (!isString(string) || !isString(searchString)) {
|
14 |
+
return false
|
15 |
+
}
|
16 |
+
|
17 |
+
// changing case
|
18 |
+
string = toLower(string)
|
19 |
+
searchString = toLower(searchString)
|
20 |
+
|
21 |
+
// comparing
|
22 |
+
return -1 !== searchString.indexOf(string)
|
23 |
+
? true
|
24 |
+
: false
|
25 |
+
}
|
26 |
+
|
27 |
+
export const openModal = (source) => setModalVisibility(source, 'open')
|
28 |
+
// export const closeModal = () => setModalVisibility('', 'close')
|
29 |
+
export function setModalVisibility(source = 'broken-event', state = 'open') {
|
30 |
+
useUserStore.setState({
|
31 |
+
entryPoint: source,
|
32 |
+
})
|
33 |
+
window.dispatchEvent(new CustomEvent(`extendify-sdk::${state}-library`, {
|
34 |
+
detail: source,
|
35 |
+
bubbles: true,
|
36 |
+
}))
|
37 |
+
}
|
38 |
+
|
39 |
+
export function getPluginDescription(plugin) {
|
40 |
+
switch (plugin) {
|
41 |
+
case 'editorplus': return 'Editor Plus'
|
42 |
+
case 'ml-slider': return 'MetaSlider'
|
43 |
+
}
|
44 |
+
return plugin
|
45 |
+
}
|
extendify-sdk/src/util/templateInjection.js
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { dispatch } from '@wordpress/data'
|
2 |
+
import { get } from 'lodash'
|
3 |
+
|
4 |
+
import { createBlocksFromInnerBlocksTemplate } from './blocks'
|
5 |
+
|
6 |
+
export function injectTemplate(template) {
|
7 |
+
if (!template) {
|
8 |
+
throw Error('Template not found')
|
9 |
+
}
|
10 |
+
|
11 |
+
const { parse } = window.wp.blocks
|
12 |
+
const createdBlocks = createBlocksFromInnerBlocksTemplate(parse(get(template, 'fields.code')))
|
13 |
+
return injectTemplateBlocks(createdBlocks, template)
|
14 |
+
}
|
15 |
+
|
16 |
+
export function injectTemplateBlocks(blocks, templateRaw) {
|
17 |
+
const { insertBlocks } = dispatch('core/block-editor')
|
18 |
+
return insertBlocks(blocks).then(() => {
|
19 |
+
window.dispatchEvent(new CustomEvent('extendify-sdk::template-inserted', {
|
20 |
+
detail: {
|
21 |
+
template: templateRaw,
|
22 |
+
},
|
23 |
+
bubbles: true,
|
24 |
+
}))
|
25 |
+
})
|
26 |
+
|
27 |
+
}
|
extendify-sdk/support/notices.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Adds a notice to the plugins page
|
4 |
+
*/
|
5 |
+
|
6 |
+
$extendifySdkNoticesKey = 'extendify_subscribe_to_extendify';
|
7 |
+
$extendifySdkUrl = add_query_arg(
|
8 |
+
[
|
9 |
+
'utm_source' => rawurlencode(sanitize_text_field(wp_unslash($GLOBALS['extendifySdkSourcePlugin']))),
|
10 |
+
'utm_medium' => 'admin',
|
11 |
+
'utm_campaign' => 'notice',
|
12 |
+
'utm_content' => 'launch60',
|
13 |
+
],
|
14 |
+
'https://extendify.com/pricing'
|
15 |
+
);
|
16 |
+
$extendifySdkNoticesNonce = wp_create_nonce($extendifySdkNoticesKey);
|
17 |
+
|
18 |
+
add_action(
|
19 |
+
'admin_notices',
|
20 |
+
function () use ($extendifySdkNoticesKey, $extendifySdkNoticesNonce, $extendifySdkUrl) {
|
21 |
+
$currentPage = get_current_screen();
|
22 |
+
if (!$currentPage || !in_array($currentPage->base, ['plugins'], true)) {
|
23 |
+
return;
|
24 |
+
}
|
25 |
+
|
26 |
+
// In short, the notice will always show until they press dismiss.
|
27 |
+
if (!get_user_option($extendifySdkNoticesKey)) { ?>
|
28 |
+
<div id="<?php echo esc_attr($extendifySdkNoticesKey); ?>" class="notice notice-info"
|
29 |
+
style="display:flex;align-items:stretch;justify-content:space-between;position:relative">
|
30 |
+
<div style="display:flex;align-items:center;position:relative">
|
31 |
+
<div style="margin-right:1.5rem;">
|
32 |
+
<svg width="60" height="60" viewBox="0 0 103 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
33 |
+
<title>Extendify Logo</title>
|
34 |
+
<rect y="25.75" width="70.8125" height="77.25" fill="black" />
|
35 |
+
<rect x="45.0625" width="57.9375" height="57.9375" fill="#37C2A2" />
|
36 |
+
</svg>
|
37 |
+
</div>
|
38 |
+
<div>
|
39 |
+
<h3 style="margin-bottom:0.25rem;">
|
40 |
+
<?php esc_html_e('Special offer: Save 60% off Extendify Pro', 'extendify-sdk'); ?></h3>
|
41 |
+
<div style="max-width:850px;">
|
42 |
+
<p>
|
43 |
+
<?php esc_html_e('Thank you for using Editor Plus by Extendify. For a limited time, sign up for Extendify Pro and save 60% using coupon code launch60. Extendify Pro gives full access to thousands of templates and patterns designed for the Gutenberg block editor.', 'extendify-sdk'); ?>
|
44 |
+
</p>
|
45 |
+
<p style="max-width:850px;">
|
46 |
+
<?php
|
47 |
+
// translators: %s surrounding the word 'here' and is wrapped with <a>.
|
48 |
+
printf(esc_html__('Click %1$shere%2$s to sign up today!', 'extendify-sdk'), '<a target="_blank" href="' . esc_url($extendifySdkUrl) . '">', '</a>'); ?>
|
49 |
+
</p>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
</div>
|
53 |
+
<div style="margin:5px -5px 0 0;">
|
54 |
+
<button
|
55 |
+
style="max-width:15px;border:0;background:0;color: #7b7b7b;white-space:nowrap;cursor: pointer;padding: 0"
|
56 |
+
type="button"
|
57 |
+
title="<?php esc_attr_e('Dismiss notice', 'extendify-sdk'); ?>"
|
58 |
+
aria-label="<?php esc_attr_e('Dismiss Extendify notice', 'extendify-sdk'); ?>"
|
59 |
+
onclick="jQuery('#<?php echo esc_attr($extendifySdkNoticesKey); ?>').remove();jQuery.post(window.ajaxurl, {action: 'handle_<?php echo esc_attr($extendifySdkNoticesKey); ?>', _wpnonce: '<?php echo esc_attr($extendifySdkNoticesNonce); ?>' });">
|
60 |
+
<svg width="15" height="15" style="width:100%" xmlns="http://www.w3.org/2000/svg" fill="none"
|
61 |
+
viewBox="0 0 24 24" stroke="currentColor">
|
62 |
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
63 |
+
</svg>
|
64 |
+
</button>
|
65 |
+
</div>
|
66 |
+
</div>
|
67 |
+
<?php
|
68 |
+
}//end if
|
69 |
+
}
|
70 |
+
);
|
71 |
+
|
72 |
+
add_action(
|
73 |
+
'wp_ajax_handle_' . $extendifySdkNoticesKey,
|
74 |
+
function () use ($extendifySdkNoticesKey) {
|
75 |
+
if (!isset($_POST['_wpnonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce'])), $extendifySdkNoticesKey)) {
|
76 |
+
wp_send_json_error(
|
77 |
+
['message' => esc_html__('The security check failed. Please refresh the page and try again.', 'extendify-sdk')],
|
78 |
+
401
|
79 |
+
);
|
80 |
+
}
|
81 |
+
|
82 |
+
update_user_option(get_current_user_id(), $extendifySdkNoticesKey, time());
|
83 |
+
wp_send_json_success();
|
84 |
+
}
|
85 |
+
);
|
extendify-sdk/tailwind.config.js
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* The basics:
|
3 |
+
* 1. purge will search classes and remove unused CSS when built in production mode
|
4 |
+
* 2. important will add specificity. Setting this to true will enforce it. The current strategy
|
5 |
+
* should be fine as it is, but if someone else uses tailwind with 'important: true' and they don't scape
|
6 |
+
* it could interfere with our class names. If that becomes an issue (I think low chance...), we can add
|
7 |
+
* a prefix: https://tailwindcss.com/docs/configuration#prefix
|
8 |
+
**/
|
9 |
+
|
10 |
+
module.exports = {
|
11 |
+
// mode: 'jit',
|
12 |
+
purge: ['src/**/*'],
|
13 |
+
important: '.extendify-sdk',
|
14 |
+
darkMode: false,
|
15 |
+
theme: {
|
16 |
+
screens: {
|
17 |
+
xxs: '280px',
|
18 |
+
xs: '480px',
|
19 |
+
sm: '600px',
|
20 |
+
md: '782px',
|
21 |
+
md2: '960px', // admin sidebar auto folds
|
22 |
+
lg: '1080px', // adminbar goes big
|
23 |
+
xl: '1280px',
|
24 |
+
'2xl': '1440px',
|
25 |
+
'3xl': '1600px',
|
26 |
+
'4xl': '1920px',
|
27 |
+
},
|
28 |
+
// Extend will add on to TW config, where the above will override and replace
|
29 |
+
extend: {
|
30 |
+
minWidth: {
|
31 |
+
md2: '960px',
|
32 |
+
},
|
33 |
+
minHeight: {
|
34 |
+
60: '15rem',
|
35 |
+
},
|
36 |
+
fontSize: {
|
37 |
+
'3xl': ['2rem', '2.5rem'],
|
38 |
+
},
|
39 |
+
colors: {
|
40 |
+
extendify: {
|
41 |
+
lightest: '#f8fffe',
|
42 |
+
light: '#e7f8f5',
|
43 |
+
main: '#008160',
|
44 |
+
link: '#299875',
|
45 |
+
bright: '#30a850',
|
46 |
+
},
|
47 |
+
'wp-theme': {
|
48 |
+
// It's a Tailwind convention for the base color to use 500 then build off that
|
49 |
+
500: 'var(--wp-admin-theme-color)',
|
50 |
+
600: 'var(--wp-admin-theme-color-darker-10)',
|
51 |
+
700: 'var(--wp-admin-theme-color-darker-20)',
|
52 |
+
},
|
53 |
+
wp: {
|
54 |
+
alert: {
|
55 |
+
yellow: '#f0b849',
|
56 |
+
red: '#cc1818',
|
57 |
+
green: '#4ab866',
|
58 |
+
},
|
59 |
+
},
|
60 |
+
gray: {
|
61 |
+
50: '#fafafa',
|
62 |
+
100: '#f0f0f0',
|
63 |
+
150: '#eaeaea', // This wasn't a variable but I saw it on buttons
|
64 |
+
200: '#e0e0e0', // Used sparingly for light borders.
|
65 |
+
300: '#dddddd', // Used for most borders.
|
66 |
+
400: '#cccccc',
|
67 |
+
500: '#cccccc', // WP didn't have a 500 value for some reason so I just copied the 400
|
68 |
+
600: '#949494', // Meets 3:1 UI or large text contrast against white.
|
69 |
+
700: '#757575', // Meets 4.6:1 text contrast against white.
|
70 |
+
900: '#1e1e1e',
|
71 |
+
},
|
72 |
+
},
|
73 |
+
zIndex: {
|
74 |
+
high: '99999',
|
75 |
+
max: '2147483647', // Highest the browser allows - don't block WP re-auth modal though
|
76 |
+
},
|
77 |
+
},
|
78 |
+
},
|
79 |
+
variants: {
|
80 |
+
extend: {
|
81 |
+
borderWidth: ['group-hover', 'hover', 'focus'],
|
82 |
+
backgroundColor: ['active'],
|
83 |
+
textColor: ['active'],
|
84 |
+
},
|
85 |
+
},
|
86 |
+
plugins: [
|
87 |
+
require('@tailwindcss/aspect-ratio'),
|
88 |
+
],
|
89 |
+
corePlugins: {
|
90 |
+
preflight: false,
|
91 |
+
container: false,
|
92 |
+
},
|
93 |
+
}
|
extendify-sdk/vendor/autoload.php
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload.php @generated by Composer
|
4 |
+
|
5 |
+
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
+
|
7 |
+
return ComposerAutoloaderInit340a6822f05e2bfceab6432d90c2eeaa::getLoader();
|
extendify-sdk/vendor/composer/ClassLoader.php
ADDED
@@ -0,0 +1,445 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace Composer\Autoload;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
17 |
+
*
|
18 |
+
* $loader = new \Composer\Autoload\ClassLoader();
|
19 |
+
*
|
20 |
+
* // register classes with namespaces
|
21 |
+
* $loader->add('Symfony\Component', __DIR__.'/component');
|
22 |
+
* $loader->add('Symfony', __DIR__.'/framework');
|
23 |
+
*
|
24 |
+
* // activate the autoloader
|
25 |
+
* $loader->register();
|
26 |
+
*
|
27 |
+
* // to enable searching the include path (eg. for PEAR packages)
|
28 |
+
* $loader->setUseIncludePath(true);
|
29 |
+
*
|
30 |
+
* In this example, if you try to use a class in the Symfony\Component
|
31 |
+
* namespace or one of its children (Symfony\Component\Console for instance),
|
32 |
+
* the autoloader will first look for the class under the component/
|
33 |
+
* directory, and it will then fallback to the framework/ directory if not
|
34 |
+
* found before giving up.
|
35 |
+
*
|
36 |
+
* This class is loosely based on the Symfony UniversalClassLoader.
|
37 |
+
*
|
38 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
+
* @see http://www.php-fig.org/psr/psr-0/
|
41 |
+
* @see http://www.php-fig.org/psr/psr-4/
|
42 |
+
*/
|
43 |
+
class ClassLoader
|
44 |
+
{
|
45 |
+
// PSR-4
|
46 |
+
private $prefixLengthsPsr4 = array();
|
47 |
+
private $prefixDirsPsr4 = array();
|
48 |
+
private $fallbackDirsPsr4 = array();
|
49 |
+
|
50 |
+
// PSR-0
|
51 |
+
private $prefixesPsr0 = array();
|
52 |
+
private $fallbackDirsPsr0 = array();
|
53 |
+
|
54 |
+
private $useIncludePath = false;
|
55 |
+
private $classMap = array();
|
56 |
+
private $classMapAuthoritative = false;
|
57 |
+
private $missingClasses = array();
|
58 |
+
private $apcuPrefix;
|
59 |
+
|
60 |
+
public function getPrefixes()
|
61 |
+
{
|
62 |
+
if (!empty($this->prefixesPsr0)) {
|
63 |
+
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
64 |
+
}
|
65 |
+
|
66 |
+
return array();
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getPrefixesPsr4()
|
70 |
+
{
|
71 |
+
return $this->prefixDirsPsr4;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function getFallbackDirs()
|
75 |
+
{
|
76 |
+
return $this->fallbackDirsPsr0;
|
77 |
+
}
|
78 |
+
|
79 |
+
public function getFallbackDirsPsr4()
|
80 |
+
{
|
81 |
+
return $this->fallbackDirsPsr4;
|
82 |
+
}
|
83 |
+
|
84 |
+
public function getClassMap()
|
85 |
+
{
|
86 |
+
return $this->classMap;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @param array $classMap Class to filename map
|
91 |
+
*/
|
92 |
+
public function addClassMap(array $classMap)
|
93 |
+
{
|
94 |
+
if ($this->classMap) {
|
95 |
+
$this->classMap = array_merge($this->classMap, $classMap);
|
96 |
+
} else {
|
97 |
+
$this->classMap = $classMap;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Registers a set of PSR-0 directories for a given prefix, either
|
103 |
+
* appending or prepending to the ones previously set for this prefix.
|
104 |
+
*
|
105 |
+
* @param string $prefix The prefix
|
106 |
+
* @param array|string $paths The PSR-0 root directories
|
107 |
+
* @param bool $prepend Whether to prepend the directories
|
108 |
+
*/
|
109 |
+
public function add($prefix, $paths, $prepend = false)
|
110 |
+
{
|
111 |
+
if (!$prefix) {
|
112 |
+
if ($prepend) {
|
113 |
+
$this->fallbackDirsPsr0 = array_merge(
|
114 |
+
(array) $paths,
|
115 |
+
$this->fallbackDirsPsr0
|
116 |
+
);
|
117 |
+
} else {
|
118 |
+
$this->fallbackDirsPsr0 = array_merge(
|
119 |
+
$this->fallbackDirsPsr0,
|
120 |
+
(array) $paths
|
121 |
+
);
|
122 |
+
}
|
123 |
+
|
124 |
+
return;
|
125 |
+
}
|
126 |
+
|
127 |
+
$first = $prefix[0];
|
128 |
+
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
129 |
+
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
130 |
+
|
131 |
+
return;
|
132 |
+
}
|
133 |
+
if ($prepend) {
|
134 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
135 |
+
(array) $paths,
|
136 |
+
$this->prefixesPsr0[$first][$prefix]
|
137 |
+
);
|
138 |
+
} else {
|
139 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
140 |
+
$this->prefixesPsr0[$first][$prefix],
|
141 |
+
(array) $paths
|
142 |
+
);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Registers a set of PSR-4 directories for a given namespace, either
|
148 |
+
* appending or prepending to the ones previously set for this namespace.
|
149 |
+
*
|
150 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
151 |
+
* @param array|string $paths The PSR-4 base directories
|
152 |
+
* @param bool $prepend Whether to prepend the directories
|
153 |
+
*
|
154 |
+
* @throws \InvalidArgumentException
|
155 |
+
*/
|
156 |
+
public function addPsr4($prefix, $paths, $prepend = false)
|
157 |
+
{
|
158 |
+
if (!$prefix) {
|
159 |
+
// Register directories for the root namespace.
|
160 |
+
if ($prepend) {
|
161 |
+
$this->fallbackDirsPsr4 = array_merge(
|
162 |
+
(array) $paths,
|
163 |
+
$this->fallbackDirsPsr4
|
164 |
+
);
|
165 |
+
} else {
|
166 |
+
$this->fallbackDirsPsr4 = array_merge(
|
167 |
+
$this->fallbackDirsPsr4,
|
168 |
+
(array) $paths
|
169 |
+
);
|
170 |
+
}
|
171 |
+
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
172 |
+
// Register directories for a new namespace.
|
173 |
+
$length = strlen($prefix);
|
174 |
+
if ('\\' !== $prefix[$length - 1]) {
|
175 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
176 |
+
}
|
177 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
178 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
179 |
+
} elseif ($prepend) {
|
180 |
+
// Prepend directories for an already registered namespace.
|
181 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
182 |
+
(array) $paths,
|
183 |
+
$this->prefixDirsPsr4[$prefix]
|
184 |
+
);
|
185 |
+
} else {
|
186 |
+
// Append directories for an already registered namespace.
|
187 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
188 |
+
$this->prefixDirsPsr4[$prefix],
|
189 |
+
(array) $paths
|
190 |
+
);
|
191 |
+
}
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Registers a set of PSR-0 directories for a given prefix,
|
196 |
+
* replacing any others previously set for this prefix.
|
197 |
+
*
|
198 |
+
* @param string $prefix The prefix
|
199 |
+
* @param array|string $paths The PSR-0 base directories
|
200 |
+
*/
|
201 |
+
public function set($prefix, $paths)
|
202 |
+
{
|
203 |
+
if (!$prefix) {
|
204 |
+
$this->fallbackDirsPsr0 = (array) $paths;
|
205 |
+
} else {
|
206 |
+
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
207 |
+
}
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Registers a set of PSR-4 directories for a given namespace,
|
212 |
+
* replacing any others previously set for this namespace.
|
213 |
+
*
|
214 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
215 |
+
* @param array|string $paths The PSR-4 base directories
|
216 |
+
*
|
217 |
+
* @throws \InvalidArgumentException
|
218 |
+
*/
|
219 |
+
public function setPsr4($prefix, $paths)
|
220 |
+
{
|
221 |
+
if (!$prefix) {
|
222 |
+
$this->fallbackDirsPsr4 = (array) $paths;
|
223 |
+
} else {
|
224 |
+
$length = strlen($prefix);
|
225 |
+
if ('\\' !== $prefix[$length - 1]) {
|
226 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
227 |
+
}
|
228 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
229 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Turns on searching the include path for class files.
|
235 |
+
*
|
236 |
+
* @param bool $useIncludePath
|
237 |
+
*/
|
238 |
+
public function setUseIncludePath($useIncludePath)
|
239 |
+
{
|
240 |
+
$this->useIncludePath = $useIncludePath;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Can be used to check if the autoloader uses the include path to check
|
245 |
+
* for classes.
|
246 |
+
*
|
247 |
+
* @return bool
|
248 |
+
*/
|
249 |
+
public function getUseIncludePath()
|
250 |
+
{
|
251 |
+
return $this->useIncludePath;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Turns off searching the prefix and fallback directories for classes
|
256 |
+
* that have not been registered with the class map.
|
257 |
+
*
|
258 |
+
* @param bool $classMapAuthoritative
|
259 |
+
*/
|
260 |
+
public function setClassMapAuthoritative($classMapAuthoritative)
|
261 |
+
{
|
262 |
+
$this->classMapAuthoritative = $classMapAuthoritative;
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Should class lookup fail if not found in the current class map?
|
267 |
+
*
|
268 |
+
* @return bool
|
269 |
+
*/
|
270 |
+
public function isClassMapAuthoritative()
|
271 |
+
{
|
272 |
+
return $this->classMapAuthoritative;
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
277 |
+
*
|
278 |
+
* @param string|null $apcuPrefix
|
279 |
+
*/
|
280 |
+
public function setApcuPrefix($apcuPrefix)
|
281 |
+
{
|
282 |
+
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* The APCu prefix in use, or null if APCu caching is not enabled.
|
287 |
+
*
|
288 |
+
* @return string|null
|
289 |
+
*/
|
290 |
+
public function getApcuPrefix()
|
291 |
+
{
|
292 |
+
return $this->apcuPrefix;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Registers this instance as an autoloader.
|
297 |
+
*
|
298 |
+
* @param bool $prepend Whether to prepend the autoloader or not
|
299 |
+
*/
|
300 |
+
public function register($prepend = false)
|
301 |
+
{
|
302 |
+
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* Unregisters this instance as an autoloader.
|
307 |
+
*/
|
308 |
+
public function unregister()
|
309 |
+
{
|
310 |
+
spl_autoload_unregister(array($this, 'loadClass'));
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Loads the given class or interface.
|
315 |
+
*
|
316 |
+
* @param string $class The name of the class
|
317 |
+
* @return bool|null True if loaded, null otherwise
|
318 |
+
*/
|
319 |
+
public function loadClass($class)
|
320 |
+
{
|
321 |
+
if ($file = $this->findFile($class)) {
|
322 |
+
includeFile($file);
|
323 |
+
|
324 |
+
return true;
|
325 |
+
}
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Finds the path to the file where the class is defined.
|
330 |
+
*
|
331 |
+
* @param string $class The name of the class
|
332 |
+
*
|
333 |
+
* @return string|false The path if found, false otherwise
|
334 |
+
*/
|
335 |
+
public function findFile($class)
|
336 |
+
{
|
337 |
+
// class map lookup
|
338 |
+
if (isset($this->classMap[$class])) {
|
339 |
+
return $this->classMap[$class];
|
340 |
+
}
|
341 |
+
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
342 |
+
return false;
|
343 |
+
}
|
344 |
+
if (null !== $this->apcuPrefix) {
|
345 |
+
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
346 |
+
if ($hit) {
|
347 |
+
return $file;
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
$file = $this->findFileWithExtension($class, '.php');
|
352 |
+
|
353 |
+
// Search for Hack files if we are running on HHVM
|
354 |
+
if (false === $file && defined('HHVM_VERSION')) {
|
355 |
+
$file = $this->findFileWithExtension($class, '.hh');
|
356 |
+
}
|
357 |
+
|
358 |
+
if (null !== $this->apcuPrefix) {
|
359 |
+
apcu_add($this->apcuPrefix.$class, $file);
|
360 |
+
}
|
361 |
+
|
362 |
+
if (false === $file) {
|
363 |
+
// Remember that this class does not exist.
|
364 |
+
$this->missingClasses[$class] = true;
|
365 |
+
}
|
366 |
+
|
367 |
+
return $file;
|
368 |
+
}
|
369 |
+
|
370 |
+
private function findFileWithExtension($class, $ext)
|
371 |
+
{
|
372 |
+
// PSR-4 lookup
|
373 |
+
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
374 |
+
|
375 |
+
$first = $class[0];
|
376 |
+
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
+
$subPath = $class;
|
378 |
+
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
379 |
+
$subPath = substr($subPath, 0, $lastPos);
|
380 |
+
$search = $subPath . '\\';
|
381 |
+
if (isset($this->prefixDirsPsr4[$search])) {
|
382 |
+
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
383 |
+
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
384 |
+
if (file_exists($file = $dir . $pathEnd)) {
|
385 |
+
return $file;
|
386 |
+
}
|
387 |
+
}
|
388 |
+
}
|
389 |
+
}
|
390 |
+
}
|
391 |
+
|
392 |
+
// PSR-4 fallback dirs
|
393 |
+
foreach ($this->fallbackDirsPsr4 as $dir) {
|
394 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
395 |
+
return $file;
|
396 |
+
}
|
397 |
+
}
|
398 |
+
|
399 |
+
// PSR-0 lookup
|
400 |
+
if (false !== $pos = strrpos($class, '\\')) {
|
401 |
+
// namespaced class name
|
402 |
+
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
403 |
+
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
404 |
+
} else {
|
405 |
+
// PEAR-like class name
|
406 |
+
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
407 |
+
}
|
408 |
+
|
409 |
+
if (isset($this->prefixesPsr0[$first])) {
|
410 |
+
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
411 |
+
if (0 === strpos($class, $prefix)) {
|
412 |
+
foreach ($dirs as $dir) {
|
413 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
414 |
+
return $file;
|
415 |
+
}
|
416 |
+
}
|
417 |
+
}
|
418 |
+
}
|
419 |
+
}
|
420 |
+
|
421 |
+
// PSR-0 fallback dirs
|
422 |
+
foreach ($this->fallbackDirsPsr0 as $dir) {
|
423 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
424 |
+
return $file;
|
425 |
+
}
|
426 |
+
}
|
427 |
+
|
428 |
+
// PSR-0 include paths.
|
429 |
+
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
430 |
+
return $file;
|
431 |
+
}
|
432 |
+
|
433 |
+
return false;
|
434 |
+
}
|
435 |
+
}
|
436 |
+
|
437 |
+
/**
|
438 |
+
* Scope isolated include.
|
439 |
+
*
|
440 |
+
* Prevents access to $this/self from included files.
|
441 |
+
*/
|
442 |
+
function includeFile($file)
|
443 |
+
{
|
444 |
+
include $file;
|
445 |
+
}
|
extendify-sdk/vendor/composer/InstalledVersions.php
ADDED
@@ -0,0 +1,654 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
+
namespace Composer;
|
14 |
+
|
15 |
+
use Composer\Autoload\ClassLoader;
|
16 |
+
use Composer\Semver\VersionParser;
|
17 |
+
|
18 |
+
|
19 |
+
|
20 |
+
|
21 |
+
|
22 |
+
|
23 |
+
class InstalledVersions
|
24 |
+
{
|
25 |
+
private static $installed = array (
|
26 |
+
'root' =>
|
27 |
+
array (
|
28 |
+
'pretty_version' => 'dev-main',
|
29 |
+
'version' => 'dev-main',
|
30 |
+
'aliases' =>
|
31 |
+
array (
|
32 |
+
),
|
33 |
+
'reference' => 'ac2cfec95277e7980dfcf8dfde5cd858f1023e03',
|
34 |
+
'name' => 'extendify/extendify-sdk',
|
35 |
+
),
|
36 |
+
'versions' =>
|
37 |
+
array (
|
38 |
+
'dealerdirect/phpcodesniffer-composer-installer' =>
|
39 |
+
array (
|
40 |
+
'pretty_version' => 'v0.7.1',
|
41 |
+
'version' => '0.7.1.0',
|
42 |
+
'aliases' =>
|
43 |
+
array (
|
44 |
+
),
|
45 |
+
'reference' => 'fe390591e0241955f22eb9ba327d137e501c771c',
|
46 |
+
),
|
47 |
+
'doctrine/instantiator' =>
|
48 |
+
array (
|
49 |
+
'pretty_version' => '1.4.0',
|
50 |
+
'version' => '1.4.0.0',
|
51 |
+
'aliases' =>
|
52 |
+
array (
|
53 |
+
),
|
54 |
+
'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b',
|
55 |
+
),
|
56 |
+
'extendify/extendify-sdk' =>
|
57 |
+
array (
|
58 |
+
'pretty_version' => 'dev-main',
|
59 |
+
'version' => 'dev-main',
|
60 |
+
'aliases' =>
|
61 |
+
array (
|
62 |
+
),
|
63 |
+
'reference' => 'ac2cfec95277e7980dfcf8dfde5cd858f1023e03',
|
64 |
+
),
|
65 |
+
'johnpbloch/wordpress-core' =>
|
66 |
+
array (
|
67 |
+
'pretty_version' => '5.7.0',
|
68 |
+
'version' => '5.7.0.0',
|
69 |
+
'aliases' =>
|
70 |
+
array (
|
71 |
+
),
|
72 |
+
'reference' => '8b057056692ca196aaa7a7ddd915f29426922c6d',
|
73 |
+
),
|
74 |
+
'myclabs/deep-copy' =>
|
75 |
+
array (
|
76 |
+
'pretty_version' => '1.10.2',
|
77 |
+
'version' => '1.10.2.0',
|
78 |
+
'aliases' =>
|
79 |
+
array (
|
80 |
+
),
|
81 |
+
'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220',
|
82 |
+
'replaced' =>
|
83 |
+
array (
|
84 |
+
0 => '1.10.2',
|
85 |
+
),
|
86 |
+
),
|
87 |
+
'nikic/php-parser' =>
|
88 |
+
array (
|
89 |
+
'pretty_version' => 'v4.10.4',
|
90 |
+
'version' => '4.10.4.0',
|
91 |
+
'aliases' =>
|
92 |
+
array (
|
93 |
+
),
|
94 |
+
'reference' => 'c6d052fc58cb876152f89f532b95a8d7907e7f0e',
|
95 |
+
),
|
96 |
+
'phar-io/manifest' =>
|
97 |
+
array (
|
98 |
+
'pretty_version' => '2.0.1',
|
99 |
+
'version' => '2.0.1.0',
|
100 |
+
'aliases' =>
|
101 |
+
array (
|
102 |
+
),
|
103 |
+
'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133',
|
104 |
+
),
|
105 |
+
'phar-io/version' =>
|
106 |
+
array (
|
107 |
+
'pretty_version' => '3.1.0',
|
108 |
+
'version' => '3.1.0.0',
|
109 |
+
'aliases' =>
|
110 |
+
array (
|
111 |
+
),
|
112 |
+
'reference' => 'bae7c545bef187884426f042434e561ab1ddb182',
|
113 |
+
),
|
114 |
+
'phpcompatibility/php-compatibility' =>
|
115 |
+
array (
|
116 |
+
'pretty_version' => '9.3.5',
|
117 |
+
'version' => '9.3.5.0',
|
118 |
+
'aliases' =>
|
119 |
+
array (
|
120 |
+
),
|
121 |
+
'reference' => '9fb324479acf6f39452e0655d2429cc0d3914243',
|
122 |
+
),
|
123 |
+
'phpcompatibility/phpcompatibility-paragonie' =>
|
124 |
+
array (
|
125 |
+
'pretty_version' => '1.3.1',
|
126 |
+
'version' => '1.3.1.0',
|
127 |
+
'aliases' =>
|
128 |
+
array (
|
129 |
+
),
|
130 |
+
'reference' => 'ddabec839cc003651f2ce695c938686d1086cf43',
|
131 |
+
),
|
132 |
+
'phpcompatibility/phpcompatibility-wp' =>
|
133 |
+
array (
|
134 |
+
'pretty_version' => '2.1.1',
|
135 |
+
'version' => '2.1.1.0',
|
136 |
+
'aliases' =>
|
137 |
+
array (
|
138 |
+
),
|
139 |
+
'reference' => 'b7dc0cd7a8f767ccac5e7637550ea1c50a67b09e',
|
140 |
+
),
|
141 |
+
'phpdocumentor/reflection-common' =>
|
142 |
+
array (
|
143 |
+
'pretty_version' => '2.2.0',
|
144 |
+
'version' => '2.2.0.0',
|
145 |
+
'aliases' =>
|
146 |
+
array (
|
147 |
+
),
|
148 |
+
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
149 |
+
),
|
150 |
+
'phpdocumentor/reflection-docblock' =>
|
151 |
+
array (
|
152 |
+
'pretty_version' => '5.2.2',
|
153 |
+
'version' => '5.2.2.0',
|
154 |
+
'aliases' =>
|
155 |
+
array (
|
156 |
+
),
|
157 |
+
'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
|
158 |
+
),
|
159 |
+
'phpdocumentor/type-resolver' =>
|
160 |
+
array (
|
161 |
+
'pretty_version' => '1.4.0',
|
162 |
+
'version' => '1.4.0.0',
|
163 |
+
'aliases' =>
|
164 |
+
array (
|
165 |
+
),
|
166 |
+
'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
|
167 |
+
),
|
168 |
+
'phpspec/prophecy' =>
|
169 |
+
array (
|
170 |
+
'pretty_version' => '1.13.0',
|
171 |
+
'version' => '1.13.0.0',
|
172 |
+
'aliases' =>
|
173 |
+
array (
|
174 |
+
),
|
175 |
+
'reference' => 'be1996ed8adc35c3fd795488a653f4b518be70ea',
|
176 |
+
),
|
177 |
+
'phpunit/php-code-coverage' =>
|
178 |
+
array (
|
179 |
+
'pretty_version' => '9.2.6',
|
180 |
+
'version' => '9.2.6.0',
|
181 |
+
'aliases' =>
|
182 |
+
array (
|
183 |
+
),
|
184 |
+
'reference' => 'f6293e1b30a2354e8428e004689671b83871edde',
|
185 |
+
),
|
186 |
+
'phpunit/php-file-iterator' =>
|
187 |
+
array (
|
188 |
+
'pretty_version' => '3.0.5',
|
189 |
+
'version' => '3.0.5.0',
|
190 |
+
'aliases' =>
|
191 |
+
array (
|
192 |
+
),
|
193 |
+
'reference' => 'aa4be8575f26070b100fccb67faabb28f21f66f8',
|
194 |
+
),
|
195 |
+
'phpunit/php-invoker' =>
|
196 |
+
array (
|
197 |
+
'pretty_version' => '3.1.1',
|
198 |
+
'version' => '3.1.1.0',
|
199 |
+
'aliases' =>
|
200 |
+
array (
|
201 |
+
),
|
202 |
+
'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
|
203 |
+
),
|
204 |
+
'phpunit/php-text-template' =>
|
205 |
+
array (
|
206 |
+
'pretty_version' => '2.0.4',
|
207 |
+
'version' => '2.0.4.0',
|
208 |
+
'aliases' =>
|
209 |
+
array (
|
210 |
+
),
|
211 |
+
'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
|
212 |
+
),
|
213 |
+
'phpunit/php-timer' =>
|
214 |
+
array (
|
215 |
+
'pretty_version' => '5.0.3',
|
216 |
+
'version' => '5.0.3.0',
|
217 |
+
'aliases' =>
|
218 |
+
array (
|
219 |
+
),
|
220 |
+
'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
|
221 |
+
),
|
222 |
+
'phpunit/phpunit' =>
|
223 |
+
array (
|
224 |
+
'pretty_version' => '9.5.4',
|
225 |
+
'version' => '9.5.4.0',
|
226 |
+
'aliases' =>
|
227 |
+
array (
|
228 |
+
),
|
229 |
+
'reference' => 'c73c6737305e779771147af66c96ca6a7ed8a741',
|
230 |
+
),
|
231 |
+
'sebastian/cli-parser' =>
|
232 |
+
array (
|
233 |
+
'pretty_version' => '1.0.1',
|
234 |
+
'version' => '1.0.1.0',
|
235 |
+
'aliases' =>
|
236 |
+
array (
|
237 |
+
),
|
238 |
+
'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
|
239 |
+
),
|
240 |
+
'sebastian/code-unit' =>
|
241 |
+
array (
|
242 |
+
'pretty_version' => '1.0.8',
|
243 |
+
'version' => '1.0.8.0',
|
244 |
+
'aliases' =>
|
245 |
+
array (
|
246 |
+
),
|
247 |
+
'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
|
248 |
+
),
|
249 |
+
'sebastian/code-unit-reverse-lookup' =>
|
250 |
+
array (
|
251 |
+
'pretty_version' => '2.0.3',
|
252 |
+
'version' => '2.0.3.0',
|
253 |
+
'aliases' =>
|
254 |
+
array (
|
255 |
+
),
|
256 |
+
'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
|
257 |
+
),
|
258 |
+
'sebastian/comparator' =>
|
259 |
+
array (
|
260 |
+
'pretty_version' => '4.0.6',
|
261 |
+
'version' => '4.0.6.0',
|
262 |
+
'aliases' =>
|
263 |
+
array (
|
264 |
+
),
|
265 |
+
'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
|
266 |
+
),
|
267 |
+
'sebastian/complexity' =>
|
268 |
+
array (
|
269 |
+
'pretty_version' => '2.0.2',
|
270 |
+
'version' => '2.0.2.0',
|
271 |
+
'aliases' =>
|
272 |
+
array (
|
273 |
+
),
|
274 |
+
'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
|
275 |
+
),
|
276 |
+
'sebastian/diff' =>
|
277 |
+
array (
|
278 |
+
'pretty_version' => '4.0.4',
|
279 |
+
'version' => '4.0.4.0',
|
280 |
+
'aliases' =>
|
281 |
+
array (
|
282 |
+
),
|
283 |
+
'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
|
284 |
+
),
|
285 |
+
'sebastian/environment' =>
|
286 |
+
array (
|
287 |
+
'pretty_version' => '5.1.3',
|
288 |
+
'version' => '5.1.3.0',
|
289 |
+
'aliases' =>
|
290 |
+
array (
|
291 |
+
),
|
292 |
+
'reference' => '388b6ced16caa751030f6a69e588299fa09200ac',
|
293 |
+
),
|
294 |
+
'sebastian/exporter' =>
|
295 |
+
array (
|
296 |
+
'pretty_version' => '4.0.3',
|
297 |
+
'version' => '4.0.3.0',
|
298 |
+
'aliases' =>
|
299 |
+
array (
|
300 |
+
),
|
301 |
+
'reference' => 'd89cc98761b8cb5a1a235a6b703ae50d34080e65',
|
302 |
+
),
|
303 |
+
'sebastian/global-state' =>
|
304 |
+
array (
|
305 |
+
'pretty_version' => '5.0.2',
|
306 |
+
'version' => '5.0.2.0',
|
307 |
+
'aliases' =>
|
308 |
+
array (
|
309 |
+
),
|
310 |
+
'reference' => 'a90ccbddffa067b51f574dea6eb25d5680839455',
|
311 |
+
),
|
312 |
+
'sebastian/lines-of-code' =>
|
313 |
+
array (
|
314 |
+
'pretty_version' => '1.0.3',
|
315 |
+
'version' => '1.0.3.0',
|
316 |
+
'aliases' =>
|
317 |
+
array (
|
318 |
+
),
|
319 |
+
'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
|
320 |
+
),
|
321 |
+
'sebastian/object-enumerator' =>
|
322 |
+
array (
|
323 |
+
'pretty_version' => '4.0.4',
|
324 |
+
'version' => '4.0.4.0',
|
325 |
+
'aliases' =>
|
326 |
+
array (
|
327 |
+
),
|
328 |
+
'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
|
329 |
+
),
|
330 |
+
'sebastian/object-reflector' =>
|
331 |
+
array (
|
332 |
+
'pretty_version' => '2.0.4',
|
333 |
+
'version' => '2.0.4.0',
|
334 |
+
'aliases' =>
|
335 |
+
array (
|
336 |
+
),
|
337 |
+
'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
|
338 |
+
),
|
339 |
+
'sebastian/recursion-context' =>
|
340 |
+
array (
|
341 |
+
'pretty_version' => '4.0.4',
|
342 |
+
'version' => '4.0.4.0',
|
343 |
+
'aliases' =>
|
344 |
+
array (
|
345 |
+
),
|
346 |
+
'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
|
347 |
+
),
|
348 |
+
'sebastian/resource-operations' =>
|
349 |
+
array (
|
350 |
+
'pretty_version' => '3.0.3',
|
351 |
+
'version' => '3.0.3.0',
|
352 |
+
'aliases' =>
|
353 |
+
array (
|
354 |
+
),
|
355 |
+
'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
|
356 |
+
),
|
357 |
+
'sebastian/type' =>
|
358 |
+
array (
|
359 |
+
'pretty_version' => '2.3.1',
|
360 |
+
'version' => '2.3.1.0',
|
361 |
+
'aliases' =>
|
362 |
+
array (
|
363 |
+
),
|
364 |
+
'reference' => '81cd61ab7bbf2de744aba0ea61fae32f721df3d2',
|
365 |
+
),
|
366 |
+
'sebastian/version' =>
|
367 |
+
array (
|
368 |
+
'pretty_version' => '3.0.2',
|
369 |
+
'version' => '3.0.2.0',
|
370 |
+
'aliases' =>
|
371 |
+
array (
|
372 |
+
),
|
373 |
+
'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
|
374 |
+
),
|
375 |
+
'squizlabs/php_codesniffer' =>
|
376 |
+
array (
|
377 |
+
'pretty_version' => '3.6.0',
|
378 |
+
'version' => '3.6.0.0',
|
379 |
+
'aliases' =>
|
380 |
+
array (
|
381 |
+
),
|
382 |
+
'reference' => 'ffced0d2c8fa8e6cdc4d695a743271fab6c38625',
|
383 |
+
),
|
384 |
+
'symfony/polyfill-ctype' =>
|
385 |
+
array (
|
386 |
+
'pretty_version' => 'v1.22.1',
|
387 |
+
'version' => '1.22.1.0',
|
388 |
+
'aliases' =>
|
389 |
+
array (
|
390 |
+
),
|
391 |
+
'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e',
|
392 |
+
),
|
393 |
+
'theseer/tokenizer' =>
|
394 |
+
array (
|
395 |
+
'pretty_version' => '1.2.0',
|
396 |
+
'version' => '1.2.0.0',
|
397 |
+
'aliases' =>
|
398 |
+
array (
|
399 |
+
),
|
400 |
+
'reference' => '75a63c33a8577608444246075ea0af0d052e452a',
|
401 |
+
),
|
402 |
+
'webmozart/assert' =>
|
403 |
+
array (
|
404 |
+
'pretty_version' => '1.10.0',
|
405 |
+
'version' => '1.10.0.0',
|
406 |
+
'aliases' =>
|
407 |
+
array (
|
408 |
+
),
|
409 |
+
'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25',
|
410 |
+
),
|
411 |
+
'wordpress/core-implementation' =>
|
412 |
+
array (
|
413 |
+
'provided' =>
|
414 |
+
array (
|
415 |
+
0 => '5.7.0',
|
416 |
+
),
|
417 |
+
),
|
418 |
+
),
|
419 |
+
);
|
420 |
+
private static $canGetVendors;
|
421 |
+
private static $installedByVendor = array();
|
422 |
+
|
423 |
+
|
424 |
+
|
425 |
+
|
426 |
+
|
427 |
+
|
428 |
+
|
429 |
+
public static function getInstalledPackages()
|
430 |
+
{
|
431 |
+
$packages = array();
|
432 |
+
foreach (self::getInstalled() as $installed) {
|
433 |
+
$packages[] = array_keys($installed['versions']);
|
434 |
+
}
|
435 |
+
|
436 |
+
|
437 |
+
if (1 === \count($packages)) {
|
438 |
+
return $packages[0];
|
439 |
+
}
|
440 |
+
|
441 |
+
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
442 |
+
}
|
443 |
+
|
444 |
+
|
445 |
+
|
446 |
+
|
447 |
+
|
448 |
+
|
449 |
+
|
450 |
+
|
451 |
+
|
452 |
+
public static function isInstalled($packageName)
|
453 |
+
{
|
454 |
+
foreach (self::getInstalled() as $installed) {
|
455 |
+
if (isset($installed['versions'][$packageName])) {
|
456 |
+
return true;
|
457 |
+
}
|
458 |
+
}
|
459 |
+
|
460 |
+
return false;
|
461 |
+
}
|
462 |
+
|
463 |
+
|
464 |
+
|
465 |
+
|
466 |
+
|
467 |
+
|
468 |
+
|
469 |
+
|
470 |
+
|
471 |
+
|
472 |
+
|
473 |
+
|
474 |
+
|
475 |
+
|
476 |
+
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
477 |
+
{
|
478 |
+
$constraint = $parser->parseConstraints($constraint);
|
479 |
+
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
480 |
+
|
481 |
+
return $provided->matches($constraint);
|
482 |
+
}
|
483 |
+
|
484 |
+
|
485 |
+
|
486 |
+
|
487 |
+
|
488 |
+
|
489 |
+
|
490 |
+
|
491 |
+
|
492 |
+
|
493 |
+
public static function getVersionRanges($packageName)
|
494 |
+
{
|
495 |
+
foreach (self::getInstalled() as $installed) {
|
496 |
+
if (!isset($installed['versions'][$packageName])) {
|
497 |
+
continue;
|
498 |
+
}
|
499 |
+
|
500 |
+
$ranges = array();
|
501 |
+
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
502 |
+
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
503 |
+
}
|
504 |
+
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
505 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
506 |
+
}
|
507 |
+
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
508 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
509 |
+
}
|
510 |
+
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
511 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
512 |
+
}
|
513 |
+
|
514 |
+
return implode(' || ', $ranges);
|
515 |
+
}
|
516 |
+
|
517 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
518 |
+
}
|
519 |
+
|
520 |
+
|
521 |
+
|
522 |
+
|
523 |
+
|
524 |
+
public static function getVersion($packageName)
|
525 |
+
{
|
526 |
+
foreach (self::getInstalled() as $installed) {
|
527 |
+
if (!isset($installed['versions'][$packageName])) {
|
528 |
+
continue;
|
529 |
+
}
|
530 |
+
|
531 |
+
if (!isset($installed['versions'][$packageName]['version'])) {
|
532 |
+
return null;
|
533 |
+
}
|
534 |
+
|
535 |
+
return $installed['versions'][$packageName]['version'];
|
536 |
+
}
|
537 |
+
|
538 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
539 |
+
}
|
540 |
+
|
541 |
+
|
542 |
+
|
543 |
+
|
544 |
+
|
545 |
+
public static function getPrettyVersion($packageName)
|
546 |
+
{
|
547 |
+
foreach (self::getInstalled() as $installed) {
|
548 |
+
if (!isset($installed['versions'][$packageName])) {
|
549 |
+
continue;
|
550 |
+
}
|
551 |
+
|
552 |
+
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
553 |
+
return null;
|
554 |
+
}
|
555 |
+
|
556 |
+
return $installed['versions'][$packageName]['pretty_version'];
|
557 |
+
}
|
558 |
+
|
559 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
560 |
+
}
|
561 |
+
|
562 |
+
|
563 |
+
|
564 |
+
|
565 |
+
|
566 |
+
public static function getReference($packageName)
|
567 |
+
{
|
568 |
+
foreach (self::getInstalled() as $installed) {
|
569 |
+
if (!isset($installed['versions'][$packageName])) {
|
570 |
+
continue;
|
571 |
+
}
|
572 |
+
|
573 |
+
if (!isset($installed['versions'][$packageName]['reference'])) {
|
574 |
+
return null;
|
575 |
+
}
|
576 |
+
|
577 |
+
return $installed['versions'][$packageName]['reference'];
|
578 |
+
}
|
579 |
+
|
580 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
581 |
+
}
|
582 |
+
|
583 |
+
|
584 |
+
|
585 |
+
|
586 |
+
|
587 |
+
public static function getRootPackage()
|
588 |
+
{
|
589 |
+
$installed = self::getInstalled();
|
590 |
+
|
591 |
+
return $installed[0]['root'];
|
592 |
+
}
|
593 |
+
|
594 |
+
|
595 |
+
|
596 |
+
|
597 |
+
|
598 |
+
|
599 |
+
|
600 |
+
public static function getRawData()
|
601 |
+
{
|
602 |
+
return self::$installed;
|
603 |
+
}
|
604 |
+
|
605 |
+
|
606 |
+
|
607 |
+
|
608 |
+
|
609 |
+
|
610 |
+
|
611 |
+
|
612 |
+
|
613 |
+
|
614 |
+
|
615 |
+
|
616 |
+
|
617 |
+
|
618 |
+
|
619 |
+
|
620 |
+
|
621 |
+
|
622 |
+
|
623 |
+
public static function reload($data)
|
624 |
+
{
|
625 |
+
self::$installed = $data;
|
626 |
+
self::$installedByVendor = array();
|
627 |
+
}
|
628 |
+
|
629 |
+
|
630 |
+
|
631 |
+
|
632 |
+
private static function getInstalled()
|
633 |
+
{
|
634 |
+
if (null === self::$canGetVendors) {
|
635 |
+
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
636 |
+
}
|
637 |
+
|
638 |
+
$installed = array();
|
639 |
+
|
640 |
+
if (self::$canGetVendors) {
|
641 |
+
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
642 |
+
if (isset(self::$installedByVendor[$vendorDir])) {
|
643 |
+
$installed[] = self::$installedByVendor[$vendorDir];
|
644 |
+
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
645 |
+
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
646 |
+
}
|
647 |
+
}
|
648 |
+
}
|
649 |
+
|
650 |
+
$installed[] = self::$installed;
|
651 |
+
|
652 |
+
return $installed;
|
653 |
+
}
|
654 |
+
}
|
extendify-sdk/vendor/composer/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
Copyright (c) Nils Adermann, Jordi Boggiano
|
3 |
+
|
4 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
+
of this software and associated documentation files (the "Software"), to deal
|
6 |
+
in the Software without restriction, including without limitation the rights
|
7 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
9 |
+
to do so, subject to the following conditions:
|
10 |
+
|
11 |
+
The above copyright notice and this permission notice shall be included in all
|
12 |
+
copies or substantial portions of the Software.
|
13 |
+
|
14 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
+
THE SOFTWARE.
|
21 |
+
|
extendify-sdk/vendor/composer/autoload_classmap.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_classmap.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
);
|
extendify-sdk/vendor/composer/autoload_namespaces.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_namespaces.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
);
|
extendify-sdk/vendor/composer/autoload_psr4.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_psr4.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'Extendify\\ExtendifySdk\\' => array($baseDir . '/app'),
|
10 |
+
);
|
extendify-sdk/vendor/composer/autoload_real.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_real.php @generated by Composer
|
4 |
+
|
5 |
+
class ComposerAutoloaderInit340a6822f05e2bfceab6432d90c2eeaa
|
6 |
+
{
|
7 |
+
private static $loader;
|
8 |
+
|
9 |
+
public static function loadClassLoader($class)
|
10 |
+
{
|
11 |
+
if ('Composer\Autoload\ClassLoader' === $class) {
|
12 |
+
require __DIR__ . '/ClassLoader.php';
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @return \Composer\Autoload\ClassLoader
|
18 |
+
*/
|
19 |
+
public static function getLoader()
|
20 |
+
{
|
21 |
+
if (null !== self::$loader) {
|
22 |
+
return self::$loader;
|
23 |
+
}
|
24 |
+
|
25 |
+
spl_autoload_register(array('ComposerAutoloaderInit340a6822f05e2bfceab6432d90c2eeaa', 'loadClassLoader'), true, true);
|
26 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
27 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit340a6822f05e2bfceab6432d90c2eeaa', 'loadClassLoader'));
|
28 |
+
|
29 |
+
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
30 |
+
if ($useStaticLoader) {
|
31 |
+
require_once __DIR__ . '/autoload_static.php';
|
32 |
+
|
33 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit340a6822f05e2bfceab6432d90c2eeaa::getInitializer($loader));
|
34 |
+
} else {
|
35 |
+
$map = require __DIR__ . '/autoload_namespaces.php';
|
36 |
+
foreach ($map as $namespace => $path) {
|
37 |
+
$loader->set($namespace, $path);
|
38 |
+
}
|
39 |
+
|
40 |
+
$map = require __DIR__ . '/autoload_psr4.php';
|
41 |
+
foreach ($map as $namespace => $path) {
|
42 |
+
$loader->setPsr4($namespace, $path);
|
43 |
+
}
|
44 |
+
|
45 |
+
$classMap = require __DIR__ . '/autoload_classmap.php';
|
46 |
+
if ($classMap) {
|
47 |
+
$loader->addClassMap($classMap);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
$loader->register(true);
|
52 |
+
|
53 |
+
return $loader;
|
54 |
+
}
|
55 |
+
}
|
extendify-sdk/vendor/composer/autoload_static.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_static.php @generated by Composer
|
4 |
+
|
5 |
+
namespace Composer\Autoload;
|
6 |
+
|
7 |
+
class ComposerStaticInit340a6822f05e2bfceab6432d90c2eeaa
|
8 |
+
{
|
9 |
+
public static $prefixLengthsPsr4 = array (
|
10 |
+
'E' =>
|
11 |
+
array (
|
12 |
+
'Extendify\\ExtendifySdk\\' => 23,
|
13 |
+
),
|
14 |
+
);
|
15 |
+
|
16 |
+
public static $prefixDirsPsr4 = array (
|
17 |
+
'Extendify\\ExtendifySdk\\' =>
|
18 |
+
array (
|
19 |
+
0 => __DIR__ . '/../..' . '/app',
|
20 |
+
),
|
21 |
+
);
|
22 |
+
|
23 |
+
public static function getInitializer(ClassLoader $loader)
|
24 |
+
{
|
25 |
+
return \Closure::bind(function () use ($loader) {
|
26 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit340a6822f05e2bfceab6432d90c2eeaa::$prefixLengthsPsr4;
|
27 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit340a6822f05e2bfceab6432d90c2eeaa::$prefixDirsPsr4;
|
28 |
+
|
29 |
+
}, null, ClassLoader::class);
|
30 |
+
}
|
31 |
+
}
|
extendify-sdk/vendor/composer/installed.json
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
[]
|
extendify-sdk/vendor/composer/installed.php
ADDED
@@ -0,0 +1,395 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php return array (
|
2 |
+
'root' =>
|
3 |
+
array (
|
4 |
+
'pretty_version' => 'dev-main',
|
5 |
+
'version' => 'dev-main',
|
6 |
+
'aliases' =>
|
7 |
+
array (
|
8 |
+
),
|
9 |
+
'reference' => 'ac2cfec95277e7980dfcf8dfde5cd858f1023e03',
|
10 |
+
'name' => 'extendify/extendify-sdk',
|
11 |
+
),
|
12 |
+
'versions' =>
|
13 |
+
array (
|
14 |
+
'dealerdirect/phpcodesniffer-composer-installer' =>
|
15 |
+
array (
|
16 |
+
'pretty_version' => 'v0.7.1',
|
17 |
+
'version' => '0.7.1.0',
|
18 |
+
'aliases' =>
|
19 |
+
array (
|
20 |
+
),
|
21 |
+
'reference' => 'fe390591e0241955f22eb9ba327d137e501c771c',
|
22 |
+
),
|
23 |
+
'doctrine/instantiator' =>
|
24 |
+
array (
|
25 |
+
'pretty_version' => '1.4.0',
|
26 |
+
'version' => '1.4.0.0',
|
27 |
+
'aliases' =>
|
28 |
+
array (
|
29 |
+
),
|
30 |
+
'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b',
|
31 |
+
),
|
32 |
+
'extendify/extendify-sdk' =>
|
33 |
+
array (
|
34 |
+
'pretty_version' => 'dev-main',
|
35 |
+
'version' => 'dev-main',
|
36 |
+
'aliases' =>
|
37 |
+
array (
|
38 |
+
),
|
39 |
+
'reference' => 'ac2cfec95277e7980dfcf8dfde5cd858f1023e03',
|
40 |
+
),
|
41 |
+
'johnpbloch/wordpress-core' =>
|
42 |
+
array (
|
43 |
+
'pretty_version' => '5.7.0',
|
44 |
+
'version' => '5.7.0.0',
|
45 |
+
'aliases' =>
|
46 |
+
array (
|
47 |
+
),
|
48 |
+
'reference' => '8b057056692ca196aaa7a7ddd915f29426922c6d',
|
49 |
+
),
|
50 |
+
'myclabs/deep-copy' =>
|
51 |
+
array (
|
52 |
+
'pretty_version' => '1.10.2',
|
53 |
+
'version' => '1.10.2.0',
|
54 |
+
'aliases' =>
|
55 |
+
array (
|
56 |
+
),
|
57 |
+
'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220',
|
58 |
+
'replaced' =>
|
59 |
+
array (
|
60 |
+
0 => '1.10.2',
|
61 |
+
),
|
62 |
+
),
|
63 |
+
'nikic/php-parser' =>
|
64 |
+
array (
|
65 |
+
'pretty_version' => 'v4.10.4',
|
66 |
+
'version' => '4.10.4.0',
|
67 |
+
'aliases' =>
|
68 |
+
array (
|
69 |
+
),
|
70 |
+
'reference' => 'c6d052fc58cb876152f89f532b95a8d7907e7f0e',
|
71 |
+
),
|
72 |
+
'phar-io/manifest' =>
|
73 |
+
array (
|
74 |
+
'pretty_version' => '2.0.1',
|
75 |
+
'version' => '2.0.1.0',
|
76 |
+
'aliases' =>
|
77 |
+
array (
|
78 |
+
),
|
79 |
+
'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133',
|
80 |
+
),
|
81 |
+
'phar-io/version' =>
|
82 |
+
array (
|
83 |
+
'pretty_version' => '3.1.0',
|
84 |
+
'version' => '3.1.0.0',
|
85 |
+
'aliases' =>
|
86 |
+
array (
|
87 |
+
),
|
88 |
+
'reference' => 'bae7c545bef187884426f042434e561ab1ddb182',
|
89 |
+
),
|
90 |
+
'phpcompatibility/php-compatibility' =>
|
91 |
+
array (
|
92 |
+
'pretty_version' => '9.3.5',
|
93 |
+
'version' => '9.3.5.0',
|
94 |
+
'aliases' =>
|
95 |
+
array (
|
96 |
+
),
|
97 |
+
'reference' => '9fb324479acf6f39452e0655d2429cc0d3914243',
|
98 |
+
),
|
99 |
+
'phpcompatibility/phpcompatibility-paragonie' =>
|
100 |
+
array (
|
101 |
+
'pretty_version' => '1.3.1',
|
102 |
+
'version' => '1.3.1.0',
|
103 |
+
'aliases' =>
|
104 |
+
array (
|
105 |
+
),
|
106 |
+
'reference' => 'ddabec839cc003651f2ce695c938686d1086cf43',
|
107 |
+
),
|
108 |
+
'phpcompatibility/phpcompatibility-wp' =>
|
109 |
+
array (
|
110 |
+
'pretty_version' => '2.1.1',
|
111 |
+
'version' => '2.1.1.0',
|
112 |
+
'aliases' =>
|
113 |
+
array (
|
114 |
+
),
|
115 |
+
'reference' => 'b7dc0cd7a8f767ccac5e7637550ea1c50a67b09e',
|
116 |
+
),
|
117 |
+
'phpdocumentor/reflection-common' =>
|
118 |
+
array (
|
119 |
+
'pretty_version' => '2.2.0',
|
120 |
+
'version' => '2.2.0.0',
|
121 |
+
'aliases' =>
|
122 |
+
array (
|
123 |
+
),
|
124 |
+
'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
|
125 |
+
),
|
126 |
+
'phpdocumentor/reflection-docblock' =>
|
127 |
+
array (
|
128 |
+
'pretty_version' => '5.2.2',
|
129 |
+
'version' => '5.2.2.0',
|
130 |
+
'aliases' =>
|
131 |
+
array (
|
132 |
+
),
|
133 |
+
'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556',
|
134 |
+
),
|
135 |
+
'phpdocumentor/type-resolver' =>
|
136 |
+
array (
|
137 |
+
'pretty_version' => '1.4.0',
|
138 |
+
'version' => '1.4.0.0',
|
139 |
+
'aliases' =>
|
140 |
+
array (
|
141 |
+
),
|
142 |
+
'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0',
|
143 |
+
),
|
144 |
+
'phpspec/prophecy' =>
|
145 |
+
array (
|
146 |
+
'pretty_version' => '1.13.0',
|
147 |
+
'version' => '1.13.0.0',
|
148 |
+
'aliases' =>
|
149 |
+
array (
|
150 |
+
),
|
151 |
+
'reference' => 'be1996ed8adc35c3fd795488a653f4b518be70ea',
|
152 |
+
),
|
153 |
+
'phpunit/php-code-coverage' =>
|
154 |
+
array (
|
155 |
+
'pretty_version' => '9.2.6',
|
156 |
+
'version' => '9.2.6.0',
|
157 |
+
'aliases' =>
|
158 |
+
array (
|
159 |
+
),
|
160 |
+
'reference' => 'f6293e1b30a2354e8428e004689671b83871edde',
|
161 |
+
),
|
162 |
+
'phpunit/php-file-iterator' =>
|
163 |
+
array (
|
164 |
+
'pretty_version' => '3.0.5',
|
165 |
+
'version' => '3.0.5.0',
|
166 |
+
'aliases' =>
|
167 |
+
array (
|
168 |
+
),
|
169 |
+
'reference' => 'aa4be8575f26070b100fccb67faabb28f21f66f8',
|
170 |
+
),
|
171 |
+
'phpunit/php-invoker' =>
|
172 |
+
array (
|
173 |
+
'pretty_version' => '3.1.1',
|
174 |
+
'version' => '3.1.1.0',
|
175 |
+
'aliases' =>
|
176 |
+
array (
|
177 |
+
),
|
178 |
+
'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
|
179 |
+
),
|
180 |
+
'phpunit/php-text-template' =>
|
181 |
+
array (
|
182 |
+
'pretty_version' => '2.0.4',
|
183 |
+
'version' => '2.0.4.0',
|
184 |
+
'aliases' =>
|
185 |
+
array (
|
186 |
+
),
|
187 |
+
'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
|
188 |
+
),
|
189 |
+
'phpunit/php-timer' =>
|
190 |
+
array (
|
191 |
+
'pretty_version' => '5.0.3',
|
192 |
+
'version' => '5.0.3.0',
|
193 |
+
'aliases' =>
|
194 |
+
array (
|
195 |
+
),
|
196 |
+
'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
|
197 |
+
),
|
198 |
+
'phpunit/phpunit' =>
|
199 |
+
array (
|
200 |
+
'pretty_version' => '9.5.4',
|
201 |
+
'version' => '9.5.4.0',
|
202 |
+
'aliases' =>
|
203 |
+
array (
|
204 |
+
),
|
205 |
+
'reference' => 'c73c6737305e779771147af66c96ca6a7ed8a741',
|
206 |
+
),
|
207 |
+
'sebastian/cli-parser' =>
|
208 |
+
array (
|
209 |
+
'pretty_version' => '1.0.1',
|
210 |
+
'version' => '1.0.1.0',
|
211 |
+
'aliases' =>
|
212 |
+
array (
|
213 |
+
),
|
214 |
+
'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
|
215 |
+
),
|
216 |
+
'sebastian/code-unit' =>
|
217 |
+
array (
|
218 |
+
'pretty_version' => '1.0.8',
|
219 |
+
'version' => '1.0.8.0',
|
220 |
+
'aliases' =>
|
221 |
+
array (
|
222 |
+
),
|
223 |
+
'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
|
224 |
+
),
|
225 |
+
'sebastian/code-unit-reverse-lookup' =>
|
226 |
+
array (
|
227 |
+
'pretty_version' => '2.0.3',
|
228 |
+
'version' => '2.0.3.0',
|
229 |
+
'aliases' =>
|
230 |
+
array (
|
231 |
+
),
|
232 |
+
'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
|
233 |
+
),
|
234 |
+
'sebastian/comparator' =>
|
235 |
+
array (
|
236 |
+
'pretty_version' => '4.0.6',
|
237 |
+
'version' => '4.0.6.0',
|
238 |
+
'aliases' =>
|
239 |
+
array (
|
240 |
+
),
|
241 |
+
'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
|
242 |
+
),
|
243 |
+
'sebastian/complexity' =>
|
244 |
+
array (
|
245 |
+
'pretty_version' => '2.0.2',
|
246 |
+
'version' => '2.0.2.0',
|
247 |
+
'aliases' =>
|
248 |
+
array (
|
249 |
+
),
|
250 |
+
'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
|
251 |
+
),
|
252 |
+
'sebastian/diff' =>
|
253 |
+
array (
|
254 |
+
'pretty_version' => '4.0.4',
|
255 |
+
'version' => '4.0.4.0',
|
256 |
+
'aliases' =>
|
257 |
+
array (
|
258 |
+
),
|
259 |
+
'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
|
260 |
+
),
|
261 |
+
'sebastian/environment' =>
|
262 |
+
array (
|
263 |
+
'pretty_version' => '5.1.3',
|
264 |
+
'version' => '5.1.3.0',
|
265 |
+
'aliases' =>
|
266 |
+
array (
|
267 |
+
),
|
268 |
+
'reference' => '388b6ced16caa751030f6a69e588299fa09200ac',
|
269 |
+
),
|
270 |
+
'sebastian/exporter' =>
|
271 |
+
array (
|
272 |
+
'pretty_version' => '4.0.3',
|
273 |
+
'version' => '4.0.3.0',
|
274 |
+
'aliases' =>
|
275 |
+
array (
|
276 |
+
),
|
277 |
+
'reference' => 'd89cc98761b8cb5a1a235a6b703ae50d34080e65',
|
278 |
+
),
|
279 |
+
'sebastian/global-state' =>
|
280 |
+
array (
|
281 |
+
'pretty_version' => '5.0.2',
|
282 |
+
'version' => '5.0.2.0',
|
283 |
+
'aliases' =>
|
284 |
+
array (
|
285 |
+
),
|
286 |
+
'reference' => 'a90ccbddffa067b51f574dea6eb25d5680839455',
|
287 |
+
),
|
288 |
+
'sebastian/lines-of-code' =>
|
289 |
+
array (
|
290 |
+
'pretty_version' => '1.0.3',
|
291 |
+
'version' => '1.0.3.0',
|
292 |
+
'aliases' =>
|
293 |
+
array (
|
294 |
+
),
|
295 |
+
'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
|
296 |
+
),
|
297 |
+
'sebastian/object-enumerator' =>
|
298 |
+
array (
|
299 |
+
'pretty_version' => '4.0.4',
|
300 |
+
'version' => '4.0.4.0',
|
301 |
+
'aliases' =>
|
302 |
+
array (
|
303 |
+
),
|
304 |
+
'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
|
305 |
+
),
|
306 |
+
'sebastian/object-reflector' =>
|
307 |
+
array (
|
308 |
+
'pretty_version' => '2.0.4',
|
309 |
+
'version' => '2.0.4.0',
|
310 |
+
'aliases' =>
|
311 |
+
array (
|
312 |
+
),
|
313 |
+
'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
|
314 |
+
),
|
315 |
+
'sebastian/recursion-context' =>
|
316 |
+
array (
|
317 |
+
'pretty_version' => '4.0.4',
|
318 |
+
'version' => '4.0.4.0',
|
319 |
+
'aliases' =>
|
320 |
+
array (
|
321 |
+
),
|
322 |
+
'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
|
323 |
+
),
|
324 |
+
'sebastian/resource-operations' =>
|
325 |
+
array (
|
326 |
+
'pretty_version' => '3.0.3',
|
327 |
+
'version' => '3.0.3.0',
|
328 |
+
'aliases' =>
|
329 |
+
array (
|
330 |
+
),
|
331 |
+
'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
|
332 |
+
),
|
333 |
+
'sebastian/type' =>
|
334 |
+
array (
|
335 |
+
'pretty_version' => '2.3.1',
|
336 |
+
'version' => '2.3.1.0',
|
337 |
+
'aliases' =>
|
338 |
+
array (
|
339 |
+
),
|
340 |
+
'reference' => '81cd61ab7bbf2de744aba0ea61fae32f721df3d2',
|
341 |
+
),
|
342 |
+
'sebastian/version' =>
|
343 |
+
array (
|
344 |
+
'pretty_version' => '3.0.2',
|
345 |
+
'version' => '3.0.2.0',
|
346 |
+
'aliases' =>
|
347 |
+
array (
|
348 |
+
),
|
349 |
+
'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
|
350 |
+
),
|
351 |
+
'squizlabs/php_codesniffer' =>
|
352 |
+
array (
|
353 |
+
'pretty_version' => '3.6.0',
|
354 |
+
'version' => '3.6.0.0',
|
355 |
+
'aliases' =>
|
356 |
+
array (
|
357 |
+
),
|
358 |
+
'reference' => 'ffced0d2c8fa8e6cdc4d695a743271fab6c38625',
|
359 |
+
),
|
360 |
+
'symfony/polyfill-ctype' =>
|
361 |
+
array (
|
362 |
+
'pretty_version' => 'v1.22.1',
|
363 |
+
'version' => '1.22.1.0',
|
364 |
+
'aliases' =>
|
365 |
+
array (
|
366 |
+
),
|
367 |
+
'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e',
|
368 |
+
),
|
369 |
+
'theseer/tokenizer' =>
|
370 |
+
array (
|
371 |
+
'pretty_version' => '1.2.0',
|
372 |
+
'version' => '1.2.0.0',
|
373 |
+
'aliases' =>
|
374 |
+
array (
|
375 |
+
),
|
376 |
+
'reference' => '75a63c33a8577608444246075ea0af0d052e452a',
|
377 |
+
),
|
378 |
+
'webmozart/assert' =>
|
379 |
+
array (
|
380 |
+
'pretty_version' => '1.10.0',
|
381 |
+
'version' => '1.10.0.0',
|
382 |
+
'aliases' =>
|
383 |
+
array (
|
384 |
+
),
|
385 |
+
'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25',
|
386 |
+
),
|
387 |
+
'wordpress/core-implementation' =>
|
388 |
+
array (
|
389 |
+
'provided' =>
|
390 |
+
array (
|
391 |
+
0 => '5.7.0',
|
392 |
+
),
|
393 |
+
),
|
394 |
+
),
|
395 |
+
);
|
extendify-sdk/webpack.mix.js
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const path = require('path')
|
2 |
+
const camelCaseDash = (string) => string.replace(/-([a-z])/g, (_match, letter) => letter.toUpperCase())
|
3 |
+
const mix = require('laravel-mix')
|
4 |
+
|
5 |
+
// If you add additional WP imports, include them here (could we generate these?)
|
6 |
+
const externals = [
|
7 |
+
'api-fetch',
|
8 |
+
'block-editor',
|
9 |
+
'blocks',
|
10 |
+
'components',
|
11 |
+
'compose',
|
12 |
+
'data',
|
13 |
+
'date',
|
14 |
+
'htmlEntities',
|
15 |
+
'hooks',
|
16 |
+
'edit-post',
|
17 |
+
'element',
|
18 |
+
'editor',
|
19 |
+
'i18n',
|
20 |
+
'plugins',
|
21 |
+
'viewport',
|
22 |
+
'ajax',
|
23 |
+
'codeEditor',
|
24 |
+
'rich-text',
|
25 |
+
]
|
26 |
+
const globals = externals.reduce((externals, name) => ({
|
27 |
+
...externals,
|
28 |
+
[`@wordpress/${name}`]: `wp.${camelCaseDash(name)}`,
|
29 |
+
}), {})
|
30 |
+
|
31 |
+
const webpackConfig = (context) => {
|
32 |
+
return {
|
33 |
+
context: context,
|
34 |
+
externals: {
|
35 |
+
wp: 'wp',
|
36 |
+
lodash: 'lodash',
|
37 |
+
fetch: 'fetch',
|
38 |
+
react: 'React',
|
39 |
+
'react-dom': 'ReactDOM',
|
40 |
+
...globals,
|
41 |
+
},
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
mix.js('src/app.js', 'public/build/extendify-sdk.js')
|
46 |
+
.webpackConfig(webpackConfig(path.resolve(__dirname, 'src')))
|
47 |
+
.react()
|
48 |
+
.setPublicPath('public')
|
49 |
+
.postCss(
|
50 |
+
'src/app.css',
|
51 |
+
'public/build/extendify-sdk.css',
|
52 |
+
[require('tailwindcss')],
|
53 |
+
)
|
54 |
+
.browserSync({
|
55 |
+
proxy: 'wordpress.test',
|
56 |
+
open: false,
|
57 |
+
files: ['src/**/*'],
|
58 |
+
})
|
59 |
+
|
60 |
+
mix.js('editorplus/editorplus.js', 'editorplus/editorplus.min.js')
|
61 |
+
.webpackConfig(webpackConfig(path.resolve(__dirname, 'editorplus')))
|
62 |
+
.react()
|
readme.txt
CHANGED
@@ -4,11 +4,11 @@ Tags: gutenberg, blocks, gutenberg blocks, editor, block, page builder, block ed
|
|
4 |
Requires at least: 4.0
|
5 |
Requires PHP: 7.1
|
6 |
Tested up to: 5.8.1
|
7 |
-
Stable tag: 4.
|
8 |
License: GPL-3.0+
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
10 |
|
11 |
-
Supercharge the Gutenberg editor with our
|
12 |
|
13 |
== Description ==
|
14 |
<strong>Redux - Quickly create full pages in WordPress’ Gutenberg</strong>
|
@@ -19,27 +19,24 @@ Worried that our templates may not work with your theme? We've got you covered.
|
|
19 |
|
20 |
Don’t waste hours trying to recreate a template you love. With a click of a button it its own website where you can start customizing it for your needs.
|
21 |
|
22 |
-
[youtube https://www.youtube.com/watch?v=cYviuu6piaw]
|
23 |
-
|
24 |
<h4>♥️ What the Plugin does?</h4>
|
25 |
<ul>
|
26 |
<li><strong>Browse 1,000+</strong> templates from your Gutenberg Editor that you can add to your site immediately.</li>
|
27 |
-
<li><strong>Preview</strong> each
|
28 |
<li><strong>Filter</strong> between the dependencies you want, and find exactly what you're looking for.</li>
|
29 |
<li><strong>See instantly</strong> which Gutenberg templates you have everything for, or may need to install some dependencies.</li>
|
30 |
<li><strong>Automated install</strong> of anything you may need to install any template.</li>
|
31 |
<li><strong>Block Patterns library</strong> support built in.</li>
|
32 |
-
<li>Make the Reusable Blocks visible in our library modal window. 😉</li>
|
33 |
<li>The most trusted option framework in the industry.</li>
|
34 |
<li>Developer friendly: clean code, inline documentation</li>
|
35 |
</ul>
|
36 |
|
37 |
<h4>🚀 TYPICAL USE CASE OF THIS PLUGIN</h4>
|
38 |
-
|
39 |
|
40 |
-
You can browse through the categories, as well as collections of like-styled pages. When you find something you like,
|
41 |
|
42 |
-
Don’t waste hours trying to recreate a design you love. With a click of a button, you have it on your own site, and you can begin customizing your
|
43 |
|
44 |
<h4>🎉 Supported Page Builders</h4>
|
45 |
Currently Redux supports only the <a href="https://wordpress.org/plugins/gutenberg/"><strong>Gutenberg / Block Editor of WordPress 5.0+</strong></a>.
|
@@ -63,45 +60,16 @@ Though Redux will work with any theme that uses Gutenberg, we have done extra wo
|
|
63 |
<li><strong>Extra Theme</strong> with Divi Builder – <strong>Library</strong> (for Templates etc.) – <strong>Category Templates</strong> (for Layouts, Templates etc.)</li>
|
64 |
</ul>
|
65 |
|
66 |
-
<h4>📦 Supported Gutenberg-Specific Plugins (Block Editor)</h4>
|
67 |
-
<ul>
|
68 |
-
<li><a href="https://wordpress.org/plugins/gutenberg/"><strong>Gutenberg</strong></a> Plugin – <strong>Gutenberg</strong> (Bleeding-Edge development in Gutenberg and Gutenberg Blocks)</li>
|
69 |
-
<li><a href="https://wordpress.org/plugins/acf-blocks/"><strong>ACF Blocks Suite</strong></a> Plugin – <strong>Blocks</strong> (Fields for Gutenberg Blocks)</li>
|
70 |
-
<li><a href="https://wordpress.org/plugins/advanced-gutenberg-blocks/"><strong>Advanced Gutenberg Blocks</strong></a> Plugin – <strong>Blocks</strong> (Blocks and Tools for Gutenberg Blocks)</li>
|
71 |
-
<li><a href="https://wordpress.org/plugins/atomic-blocks/"><strong>Atomic Blocks – Gutenberg Blocks Collection</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
72 |
-
<li><a href="https://wordpress.org/plugins/block-options/"><strong>Gutenberg Page Building Toolkit – EditorsKit</strong></a> Plugin – <strong>Blocks</strong> (Templates & Fields for Gutenberg Blocks)</li>
|
73 |
-
<li><a href="https://wordpress.org/plugins/block-slider/"><strong>WordPress Slider Plugin – Block Slider</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
74 |
-
<li><a href="https://wordpress.org/plugins/coblocks/"><strong>Page Builder Gutenberg Blocks – CoBlocks</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
75 |
-
<li><a href="https://wordpress.org/plugins/editorskit/"><strong>Gutenberg Page Building Toolkit – EditorsKit</strong></a> Plugin – <strong>Blocks</strong> (Blocks tools to supercharge the Gutenberg editor)</li>
|
76 |
-
<li><a href="https://wordpress.org/plugins/editorplus/"><strong>Gutenberg Page Builder Toolkit – EditorPlus</strong></a> Plugin – <strong>EditorPlus</strong> (Toolkit and blocks for Gutenberg Blocks)</li>
|
77 |
-
<li><a href="https://wordpress.org/plugins/forms-gutenberg/"><strong>WordPress Form Builder Plugin – Gutenberg Forms</strong></a> Plugin – <strong>Blocks</strong> (Blocks & Forms for Gutenberg Blocks)</li>
|
78 |
-
<li><a href="https://wordpress.org/plugins/getwid/"><strong>Getwid – Gutenberg Blocks</strong></a> Plugin – <strong>Blocks</strong> (Templates & Blocks for Gutenberg Blocks)</li>
|
79 |
-
<li><a href="https://wordpress.org/plugins/gutentor/"><strong>Gutenberg Blocks – Gutentor Page Builder for Gutenberg Editor</strong></a> Plugin – <strong>Blocks</strong> (Gutenberg Blocks)</li>
|
80 |
-
<li><a href="https://wordpress.org/plugins/kadence-blocks/"><strong>Kadence Blocks – Gutenberg Page Builder Toolkit</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
81 |
-
<li><a href="https://wordpress.org/plugins/kioken-blocks/"><strong>Page Builder Gutenberg Blocks – Kioken Blocks</strong></a> Plugin – <strong>Blocks & Templates</strong> (Blocks for Gutenberg Blocks)</li>
|
82 |
-
<li><a href="https://wordpress.org/plugins/otter-blocks/"><strong>Gutenberg Blocks and Template Library by Otter</strong></a> Plugin – <strong>Blocks & Templates</strong> (Blocks and Templates for Gutenberg Blocks)</li>
|
83 |
-
<li><a href="https://wordpress.org/plugins/qubely/"><strong>Gutenberg Blocks and Page Builder – Qubely</strong></a> Plugin – <strong>Blocks & Templates</strong> (Templates & Blocks for Gutenberg Blocks)</li>
|
84 |
-
<li><a href="https://wordpress.org/plugins/qodeblock/"><strong>Gutenberg Blocks Collection – qodeblock</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
85 |
-
<li><a href="https://wordpress.org/plugins/stackable-ultimate-gutenberg-blocks/"><strong>Stackable – Page Builder Gutenberg Blocks</strong></a> Plugin – <strong>Blocks & Templates</strong> (Templates & Blocks for Gutenberg Blocks)</li>
|
86 |
-
<li><a href="https://wordpress.org/plugins/ultimate-blocks/"><strong>Ultimate Blocks – Gutenberg Blocks Plugin</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
87 |
-
<li><a href="https://wordpress.org/plugins/ultimate-addons-for-gutenberg/"><strong>Gutenberg Blocks – Ultimate Addons for Gutenberg</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
|
88 |
-
</ul>
|
89 |
-
|
90 |
-
<h4>☀️ Supported Gutenberg-Specific Services / Websites</h4>
|
91 |
-
<ul>
|
92 |
-
<li><a href="https://gutenberghub.com/"><strong>GutenbergHub.com</strong></a> – <strong>GutenbergHub</strong> GutenbergHub is a one-stop resource for you need to work with Gutenberg WordPress editor.</li>
|
93 |
-
<li><a href="https://shareablock.com/"><strong>ShareABlock</strong></a> by EditorsKit – <strong>ShareABlock</strong> Community submitted free block designs and templates for Gutenberg</li>
|
94 |
-
</ul>
|
95 |
-
|
96 |
<h4>👍 BE A CONTRIBUTOR</h4>
|
97 |
If you want to translate, <a href="https://translate.wordpress.org/projects/wp-plugins/redux-framework">go to the Translation Portal at translate.wordpress.org</a>.
|
98 |
|
99 |
-
You can also contribute code
|
100 |
|
101 |
<h4>📝 Documentation and Support</h4>
|
102 |
<ul>
|
103 |
-
<li>For more information about
|
104 |
-
<li>
|
|
|
105 |
</ul>
|
106 |
|
107 |
<h4>⚡ Like the Redux Plugin?</h4>
|
@@ -121,11 +89,8 @@ The Redux plugin uses a custom API to fetch our content library and our Gutenber
|
|
121 |
<li>browser type</li>
|
122 |
<li>referring site</li>
|
123 |
<li>date and time of request</li>
|
124 |
-
<li>
|
125 |
-
<li>
|
126 |
-
<li>supported block plugins installed (slug only, no versions)</li>
|
127 |
-
<li>version of Redux installed</li>
|
128 |
-
<li>Redux API keys</li>
|
129 |
</ul>
|
130 |
|
131 |
API requests are only made when a user clicks on the Library button, launches the Redux Challenge, or opts into Google Font updates.
|
@@ -137,23 +102,24 @@ For more details on our terms and conditions: [https://redux.io/terms](https://r
|
|
137 |
1. Upload the entire plugin folder to the `/wp-content/plugins/` directory.
|
138 |
2. Activate the plugin through the 'Plugins' menu in WordPress.
|
139 |
|
140 |
-
Once Installed and Activated you will be invited to Activate your Redux account. This is entirely voluntary and
|
141 |
|
142 |
If you want, you can use the [Gutenberg](https://wordpress.org/plugins/gutenberg/) plugin to get bleeding-edge experiments by the Gutenberg team.
|
143 |
|
144 |
-
== Screenshots ==
|
145 |
-
|
146 |
-
1. With Redux, you have access to hundreds of sections to help you create any type of page.
|
147 |
-
2. Take the Redux challenge to learn your way around the Redux Templates Library.
|
148 |
-
3. See instantly what required plugins each template requires on hover.
|
149 |
-
4. Preview each template instantly in your own website.
|
150 |
-
5. Template Kits give you full site templates, all grouped by a given style.
|
151 |
-
6. Within each template kit you can see the full page template types.
|
152 |
-
|
153 |
== Changelog ==
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
= 4.2.14 =
|
156 |
Fixed: Parse error in Import/Export module due to old versions of PHP.
|
|
|
157 |
|
158 |
= 4.2.13 =
|
159 |
Fixed: #3822 - Default value function returns string or array to prevent type error.
|
@@ -162,170 +128,185 @@ Modified: `install_plugins` security level now required to install Template bloc
|
|
162 |
Added: New global arg `load_on_cron`. Set to true if you require Redux to run within a cron initiated function.
|
163 |
Removed: URL based Import/Export option due to security concerns. Manual Import/Export features remain.
|
164 |
Removed: Support URL feature due to security issues. Please use WordPress Site Health 'copy to clipboard' compiler to submit system data when reporting issues.
|
|
|
165 |
|
166 |
= 4.2.11 =
|
167 |
Fixed: Removed type declarations on core return values to support improperly written third-party extensions.
|
168 |
Fixed: Added shim to prevent errors on functions calls outdated extensions are still using.
|
169 |
-
Fixed: Removed type declarations on field code to support outdated versions of PHP (PHP 7.4 is the minimum recommendation from WordPress...please update if you are able. [https://wordpress.org/about/requirements](https://wordpress.org/about/requirements)
|
170 |
Fixed: Support URL button kicking back a JavaScript error.
|
|
|
171 |
|
172 |
= 4.2.10 =
|
173 |
Fixed: Output on the frontend triggering error.
|
174 |
Fixed: Updated shims to support older extensions not authored by Redux.io
|
|
|
175 |
|
176 |
= 4.2.9 =
|
177 |
Fixed: WordPress data class now works properly.
|
|
|
178 |
|
179 |
= 4.2.8 =
|
180 |
Redux instances returning null. Saved options now show on the front end.
|
|
|
181 |
|
182 |
= 4.2.7 =
|
183 |
Fixed: Options reverting or not saving.
|
|
|
184 |
|
185 |
= 4.2.6 =
|
186 |
Fixed: Fatal error if passing null as an option section.
|
187 |
Fixed: Error in connection banner routine.
|
|
|
188 |
|
189 |
= 4.2.5 =
|
190 |
Fixed: Type mismatch in Redux Helpers.
|
|
|
191 |
|
192 |
= 4.2.4 =
|
193 |
Fixed: Taxonomy WordPress data not handled properly in fields that support WordPress data.
|
|
|
194 |
|
195 |
= 4.2.3 =
|
196 |
Fixed: Return type error in Redux templates.
|
|
|
197 |
|
198 |
= 4.2.2 =
|
199 |
Fixed: WordPress data options not handling WP_Error properly.
|
|
|
200 |
|
201 |
= 4.2.1 =
|
202 |
Fixed: Type mismatch regarding select boxes and callbacks.
|
|
|
203 |
|
204 |
= 4.2.0 =
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
|
|
222 |
|
223 |
= 4.1.29 =
|
224 |
-
|
225 |
-
|
|
|
226 |
|
227 |
= 4.1.28 =
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
|
|
238 |
|
239 |
= 4.1.27 =
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
|
247 |
= 4.1.26 =
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
|
260 |
= 4.1.25 =
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
|
267 |
= 4.1.24 =
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
|
280 |
= 4.1.23 =
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
|
285 |
= 4.1.22 =
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
|
295 |
= 4.1.21 =
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
|
307 |
= 4.1.20 =
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
|
320 |
** For a full changelog, see https://github.com/reduxframework/redux-framework/blob/master/CHANGELOG.md **
|
321 |
|
322 |
== Frequently Asked Questions ==
|
323 |
|
324 |
-
= Who should use the
|
325 |
|
326 |
The Redux Block Library for Gutenberg is a complete package of unique and creative templates that will help you build beautiful pages and posts on a website. It is of value for everyone and for all who love Gutenberg.
|
327 |
|
328 |
-
= What are the requirements to use the
|
329 |
|
330 |
You only need to have the latest version of WordPress on your website, to begin with. Redux is for Gutenberg is basically an addon for the default WordPress block editor. Therefore, the latest WordPress installation along with a theme should be enough, to begin with.
|
331 |
|
@@ -335,12 +316,12 @@ Redux is built to work wonderfully with all themes.
|
|
335 |
|
336 |
= Can I use Redux for Gutenberg even while having another Page Builder? =
|
337 |
|
338 |
-
The basic need or requirement for
|
339 |
|
340 |
-
= Can I use
|
341 |
|
342 |
Yes! You can certainly use Redux on yours as well as your client's websites.
|
343 |
|
344 |
= Will Redux slow down my website? =
|
345 |
|
346 |
-
Absolutely not! The
|
4 |
Requires at least: 4.0
|
5 |
Requires PHP: 7.1
|
6 |
Tested up to: 5.8.1
|
7 |
+
Stable tag: 4.3.0
|
8 |
License: GPL-3.0+
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
10 |
|
11 |
+
Supercharge the Gutenberg editor with our library of block-based templates and patterns!
|
12 |
|
13 |
== Description ==
|
14 |
<strong>Redux - Quickly create full pages in WordPress’ Gutenberg</strong>
|
19 |
|
20 |
Don’t waste hours trying to recreate a template you love. With a click of a button it its own website where you can start customizing it for your needs.
|
21 |
|
|
|
|
|
22 |
<h4>♥️ What the Plugin does?</h4>
|
23 |
<ul>
|
24 |
<li><strong>Browse 1,000+</strong> templates from your Gutenberg Editor that you can add to your site immediately.</li>
|
25 |
+
<li><strong>Preview</strong> each template on a demo site.</li>
|
26 |
<li><strong>Filter</strong> between the dependencies you want, and find exactly what you're looking for.</li>
|
27 |
<li><strong>See instantly</strong> which Gutenberg templates you have everything for, or may need to install some dependencies.</li>
|
28 |
<li><strong>Automated install</strong> of anything you may need to install any template.</li>
|
29 |
<li><strong>Block Patterns library</strong> support built in.</li>
|
|
|
30 |
<li>The most trusted option framework in the industry.</li>
|
31 |
<li>Developer friendly: clean code, inline documentation</li>
|
32 |
</ul>
|
33 |
|
34 |
<h4>🚀 TYPICAL USE CASE OF THIS PLUGIN</h4>
|
35 |
+
Whether you are building a simple site or a **big site** with **lots of pages**, you just want it to look amazing. With the Extendify Library in Redux, you can begin making pages with various patterns or templates.
|
36 |
|
37 |
+
You can browse through the categories, as well as collections of like-styled pages. When you find something you like, we make sure you have everything you need. If a dependency (or required plugin) is missing, you are notified and can install the missing dependency. Worried that our templates may not work with your theme? No problem! With our custom `page templates` options, you can transform any site into precisely what you want it to be, no matter what you are using them for.
|
38 |
|
39 |
+
Don’t waste hours trying to recreate a design you love. With a click of a button, you have it on your own site, and you can begin customizing your template for your needs.
|
40 |
|
41 |
<h4>🎉 Supported Page Builders</h4>
|
42 |
Currently Redux supports only the <a href="https://wordpress.org/plugins/gutenberg/"><strong>Gutenberg / Block Editor of WordPress 5.0+</strong></a>.
|
60 |
<li><strong>Extra Theme</strong> with Divi Builder – <strong>Library</strong> (for Templates etc.) – <strong>Category Templates</strong> (for Layouts, Templates etc.)</li>
|
61 |
</ul>
|
62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
<h4>👍 BE A CONTRIBUTOR</h4>
|
64 |
If you want to translate, <a href="https://translate.wordpress.org/projects/wp-plugins/redux-framework">go to the Translation Portal at translate.wordpress.org</a>.
|
65 |
|
66 |
+
You can also contribute code via our <a href="https://github.com/reduxframework/redux-framework/">GitHub Repository</a>. Be sure to use our develop branch to submit pull requests.
|
67 |
|
68 |
<h4>📝 Documentation and Support</h4>
|
69 |
<ul>
|
70 |
+
<li>For more information about the Template Library, check out <a href="https://extendify.com/" rel="nofollow ugc">Extendify</a>.</li>
|
71 |
+
<li>For information about the Redux Options Framework, check out <a href="https://devs.redux.io/” rel=”nofollow ugc”>Redux Documentation</a>.</li>
|
72 |
+
<li>If you have additional questions, reach out to us at support@redux.io</li>
|
73 |
</ul>
|
74 |
|
75 |
<h4>⚡ Like the Redux Plugin?</h4>
|
89 |
<li>browser type</li>
|
90 |
<li>referring site</li>
|
91 |
<li>date and time of request</li>
|
92 |
+
<li>category selection or search term</li>
|
93 |
+
<li>anonymized IP address</li>
|
|
|
|
|
|
|
94 |
</ul>
|
95 |
|
96 |
API requests are only made when a user clicks on the Library button, launches the Redux Challenge, or opts into Google Font updates.
|
102 |
1. Upload the entire plugin folder to the `/wp-content/plugins/` directory.
|
103 |
2. Activate the plugin through the 'Plugins' menu in WordPress.
|
104 |
|
105 |
+
Once Installed and Activated you will be invited to Activate your Redux account. This is entirely voluntary and easily dismissed.
|
106 |
|
107 |
If you want, you can use the [Gutenberg](https://wordpress.org/plugins/gutenberg/) plugin to get bleeding-edge experiments by the Gutenberg team.
|
108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
== Changelog ==
|
110 |
|
111 |
+
= 4.3.0 =
|
112 |
+
Added: Gutenberg Template Library updated to the new Extendify library. See more information here about this upgrade and how to access the legacy library: [https://redux.io/gutenberg-template-library-upgrade](https://redux.io/gutenberg-template-library-upgrade).
|
113 |
+
Added: Option to enable/disable Template libraries. Found under Settings > Redux > Templates
|
114 |
+
Added: Redux debug data moved to WordPress Site Health Info screen.
|
115 |
+
Removed: Redux Framework Health Screen.
|
116 |
+
Modified: Tools > Redux Framework screen moved to Settings > Redux
|
117 |
+
Modified: Redux Templates disabled by default.
|
118 |
+
Release date: September 21, 2021
|
119 |
+
|
120 |
= 4.2.14 =
|
121 |
Fixed: Parse error in Import/Export module due to old versions of PHP.
|
122 |
+
Release date: August 11, 2021
|
123 |
|
124 |
= 4.2.13 =
|
125 |
Fixed: #3822 - Default value function returns string or array to prevent type error.
|
128 |
Added: New global arg `load_on_cron`. Set to true if you require Redux to run within a cron initiated function.
|
129 |
Removed: URL based Import/Export option due to security concerns. Manual Import/Export features remain.
|
130 |
Removed: Support URL feature due to security issues. Please use WordPress Site Health 'copy to clipboard' compiler to submit system data when reporting issues.
|
131 |
+
Release date: August 11, 2021
|
132 |
|
133 |
= 4.2.11 =
|
134 |
Fixed: Removed type declarations on core return values to support improperly written third-party extensions.
|
135 |
Fixed: Added shim to prevent errors on functions calls outdated extensions are still using.
|
136 |
+
Fixed: Removed type declarations on field code to support outdated versions of PHP (PHP 7.4 is the minimum recommendation from WordPress...please update if you are able. [https://wordpress.org/about/requirements](https://wordpress.org/about/requirements).
|
137 |
Fixed: Support URL button kicking back a JavaScript error.
|
138 |
+
Release date: July 29, 2021
|
139 |
|
140 |
= 4.2.10 =
|
141 |
Fixed: Output on the frontend triggering error.
|
142 |
Fixed: Updated shims to support older extensions not authored by Redux.io
|
143 |
+
Release date: July 28, 2021
|
144 |
|
145 |
= 4.2.9 =
|
146 |
Fixed: WordPress data class now works properly.
|
147 |
+
Release date: July 28, 2021
|
148 |
|
149 |
= 4.2.8 =
|
150 |
Redux instances returning null. Saved options now show on the front end.
|
151 |
+
Release date: July 28, 2021
|
152 |
|
153 |
= 4.2.7 =
|
154 |
Fixed: Options reverting or not saving.
|
155 |
+
Release date: July 28, 2021
|
156 |
|
157 |
= 4.2.6 =
|
158 |
Fixed: Fatal error if passing null as an option section.
|
159 |
Fixed: Error in connection banner routine.
|
160 |
+
Release date: July 28, 2021
|
161 |
|
162 |
= 4.2.5 =
|
163 |
Fixed: Type mismatch in Redux Helpers.
|
164 |
+
Release date: July 28, 2021
|
165 |
|
166 |
= 4.2.4 =
|
167 |
Fixed: Taxonomy WordPress data not handled properly in fields that support WordPress data.
|
168 |
+
Release date: July 28, 2021
|
169 |
|
170 |
= 4.2.3 =
|
171 |
Fixed: Return type error in Redux templates.
|
172 |
+
Release date: July 28, 2021
|
173 |
|
174 |
= 4.2.2 =
|
175 |
Fixed: WordPress data options not handling WP_Error properly.
|
176 |
+
Release date: July 28, 2021
|
177 |
|
178 |
= 4.2.1 =
|
179 |
Fixed: Type mismatch regarding select boxes and callbacks.
|
180 |
+
Release date: July 27, 2021
|
181 |
|
182 |
= 4.2.0 =
|
183 |
+
New: Typography features: Top and bottom margins, text-shadow.
|
184 |
+
New: Media Image Filters (greyscale, sepia, opacity, contrast, invert, blur, saturate, brightness, hue-rotate).
|
185 |
+
New: Filters (type, reach, angle) for Gradient color field.
|
186 |
+
New: Box Shadow field.
|
187 |
+
New: Flyout Submenus: `flyout_submenus` global arg.
|
188 |
+
New: Alpha color option for color field: `color_alpha` field arg for fields that support color pickers.
|
189 |
+
Updated: select2 library to 4.1.0.
|
190 |
+
Updated: readme.txt to conform to wp.org standards.
|
191 |
+
Fixed: Remove PHP 7.2 syntax to keep older versions of PHP 7 happy.
|
192 |
+
Fixed: Redux templates not showing on 'page attributes' for some.
|
193 |
+
Fixed: Additional PHP 8.0 compatibility.
|
194 |
+
Fixed: Widget screen would not load due to conflict with template library.
|
195 |
+
Added: WordPress 5.8 compatibility.
|
196 |
+
Improved: Better Gutenberg block editor detection.
|
197 |
+
Modified: Redux Pro no longer required for automatic Google font updates.
|
198 |
+
Modified: Rename Parsedown class for raw field to avoid conflicts with other plugins.
|
199 |
+
Removed: `async_typography` global arg. Google no longer supports it. Use `font_display` with one of the following `auto|block|swap|fallback|optional`. See: [https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display)
|
200 |
+
Release date: July 27, 2021
|
201 |
|
202 |
= 4.1.29 =
|
203 |
+
Fixed: All PHP 7.4 specific syntax backed out. It caused older versions of PHP to report fatal errors.
|
204 |
+
Fixed: Index error in the image_select field.
|
205 |
+
Release date: June 29, 2021
|
206 |
|
207 |
= 4.1.28 =
|
208 |
+
Fixed: Redux templates loading on post types with no block editor.
|
209 |
+
Fixed: Redux theme checks no longer prevent theme check plugin from functioning.
|
210 |
+
Fixed: Heatbeat check no longer eats the function if disregarded.
|
211 |
+
Fixed: Background field image now hides preview image upon removal.
|
212 |
+
Fixed: RAW field in sample config now works.
|
213 |
+
Fixed: Helper function is_field_in_use now returns false, instead of null.
|
214 |
+
Fixed: Palette field rendering improperly.
|
215 |
+
Fixed: Google font update fail.
|
216 |
+
Modified: buttonset() jQuery widget deprecated. Replaced with controlgroup().
|
217 |
+
Modified: Additional JavaScript updates to fix jQuery deprecation notices.
|
218 |
+
Release date: June 29, 2021
|
219 |
|
220 |
= 4.1.27 =
|
221 |
+
Fixed: Image select not selecting default value.
|
222 |
+
Modified: Link color field overridden by theme. Added 'important' arg to the output array to fix. See sample config.
|
223 |
+
Fixed: Same config not setting footer background in Twenty-twenty theme due to incorrect class.
|
224 |
+
Fixed: Radio field not displaying text after save/refresh when displaying WordPress data.
|
225 |
+
Modified: Donation text removed.
|
226 |
+
Fixed: Link color CSS compiling incorrectly due to late escaping.
|
227 |
|
228 |
= 4.1.26 =
|
229 |
+
Added: Menu accent introduced in WordPress 5.7.
|
230 |
+
Updated: ACE Editor 1.4.12.
|
231 |
+
Updated select2 to support cssContainer.
|
232 |
+
Fixed: Multiple submenus in metaboxes; the last submenu it cut off.
|
233 |
+
Fixed: Fatal error: Can't use function return value in write context.
|
234 |
+
Fixed: PHP 8.0 deprecation warnings.
|
235 |
+
Fixed: Malformed HTML causing Redux pro alpha color-picker to not render.
|
236 |
+
Fixed: IMproved class checks for Redux Pro.
|
237 |
+
Fixed: jQuery 3.x deprecation notices.
|
238 |
+
Fixed: Malformed SCSS.
|
239 |
+
Release date: March 17, 2021
|
240 |
|
241 |
= 4.1.25 =
|
242 |
+
Fixed: Erroneous icon on button_set field after WP 5.6 update.
|
243 |
+
Fixed: Erroneous icon on palette field after WP 5.6 update.
|
244 |
+
Fixed: PHP error in init_delay function during heartbeat API.
|
245 |
+
Fixed: Options object field not rendering.
|
246 |
+
Release date: Jan 21, 2021
|
247 |
|
248 |
= 4.1.24 =
|
249 |
+
Fixed: Select2 callback fix for select fields.
|
250 |
+
Added: Shim: empty field_*.php files to fix developers including files improperly.
|
251 |
+
Fixed: Changed use of ctype_xdigit to account for hosts where it's disabled.
|
252 |
+
Added: Shim for people using terms data key, but using taxonomies instead of taxonomy.
|
253 |
+
Fixed: Static call mismatch in redux colors.
|
254 |
+
Fixed: CSRF security issue with a flipped if conditional. Thanks, @ErwanLR.
|
255 |
+
Fixed: WordPress 4.6 API warnings.
|
256 |
+
Fixed: WordPress 4.6 customizer issue where fields not displaying properly.
|
257 |
+
Fixed: Massive speed improvement to the library.
|
258 |
+
Fixed: Pro template count error if previously activated and Redux Pro not enabled.
|
259 |
+
Release date: Dec 12, 2020
|
260 |
|
261 |
= 4.1.23 =
|
262 |
+
Fixed: Massive speed improvement to the library.
|
263 |
+
Fixed: Pro template count error if previously activated and Redux Pro not enabled.
|
264 |
+
Release date: Oct 24, 2020
|
265 |
|
266 |
= 4.1.22 =
|
267 |
+
Fixed: Menu locations WordPress data object not providing name.
|
268 |
+
Added: Undefined if menu location is not assigned to a menu.
|
269 |
+
Fixed: Another import/export edge case.
|
270 |
+
Fixed: Fix setField API value.
|
271 |
+
Fixed: Older extension compatibility.
|
272 |
+
Fixed: Text field error with data/options args not displaying properly.
|
273 |
+
Fixed: Import/Export now properly respects order of objects. Now using PHP over JS json_encode.
|
274 |
+
Release date: Oct 23, 2020
|
275 |
|
276 |
= 4.1.21 =
|
277 |
+
Fixed: Fixed connection banner to hide even if JS is broken by jQuery migrate issue (WP 5.5).
|
278 |
+
Fixed: Resolved all remaining legacy extension compatibility issues.
|
279 |
+
Fixed: Custom callback with select field.
|
280 |
+
Fixed: Typography bug when style was hidden.
|
281 |
+
Fixed: Issue with text labels.
|
282 |
+
Fixed: Google fonts HTML validation issues.
|
283 |
+
Added: Feedback modal.
|
284 |
+
Fixed: Import logic flaw.
|
285 |
+
Fixed: Security bug. Thanks, @lenonleite of www.lenonleite.com.br.
|
286 |
+
Release date: Oct 08, 2020
|
287 |
|
288 |
= 4.1.20 =
|
289 |
+
Added: Properly adjust the blocked editor page width based on template selected.
|
290 |
+
Added: Broke out third-party premium plugins for filtering to help with understanding of what comes with Redux Pro.
|
291 |
+
Added: Update block editor width when selecting a Redux template.
|
292 |
+
Fixed: Some styling issues with preview modal.
|
293 |
+
Fixed: Issue where plugin titles were not alphabetical.
|
294 |
+
Fixed: Disabled third party premium dependencies.
|
295 |
+
Fixed: Issue where crash would occur when Redux could not write out a file.
|
296 |
+
Fixed: CSS selectors with HTML entities, like >, were not getting decoded for the passed compiler values.
|
297 |
+
Fixed: Redux Pro activation issue.
|
298 |
+
Fixed: Invalid logic causing some extensions not to run.
|
299 |
+
Release date: Sep 18, 2020
|
300 |
|
301 |
** For a full changelog, see https://github.com/reduxframework/redux-framework/blob/master/CHANGELOG.md **
|
302 |
|
303 |
== Frequently Asked Questions ==
|
304 |
|
305 |
+
= Who should use the Gutenberg Template Library? =
|
306 |
|
307 |
The Redux Block Library for Gutenberg is a complete package of unique and creative templates that will help you build beautiful pages and posts on a website. It is of value for everyone and for all who love Gutenberg.
|
308 |
|
309 |
+
= What are the requirements to use the Gutenberg Template Library? =
|
310 |
|
311 |
You only need to have the latest version of WordPress on your website, to begin with. Redux is for Gutenberg is basically an addon for the default WordPress block editor. Therefore, the latest WordPress installation along with a theme should be enough, to begin with.
|
312 |
|
316 |
|
317 |
= Can I use Redux for Gutenberg even while having another Page Builder? =
|
318 |
|
319 |
+
The basic need or requirement for the Gutenberg Template Library is the latest WordPress version. Should you need help, you can <a href="https://redux.io/contact/?utm_source=wp-repo&utm_medium=link&utm_campaign=readme" target="_blank" rel="">get in touch with us.</a>
|
320 |
|
321 |
+
= Can I use the Gutenberg Template Library on client websites? =
|
322 |
|
323 |
Yes! You can certainly use Redux on yours as well as your client's websites.
|
324 |
|
325 |
= Will Redux slow down my website? =
|
326 |
|
327 |
+
Absolutely not! The Gutenberg Template Library plugin is built with ease and performance in mind. Its module architecture and the clean code keep it extremely fast. Every performance issue that seems to be coming from Redux is actually the integration code of third-party developers. If you're having issues let us know, and we'll try to help you out.
|
redux-core/assets/css/redux-fields.min.css
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
.redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1 !important}.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select{width:200px !important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .redux-container-background .redux-background-position,.wp-customizer .redux-container-background .redux-background-position select,.wp-customizer .redux-container-background .redux-background-attachment,.wp-customizer .redux-container-background .redux-background-attachment select,.wp-customizer .redux-container-background .redux-background-clip,.wp-customizer .redux-container-background .redux-background-clip select,.wp-customizer .redux-container-background .redux-background-origin,.wp-customizer .redux-container-background .redux-background-origin select,.wp-customizer .redux-container-background .redux-background-size,.wp-customizer .redux-container-background .redux-background-size select,.wp-customizer .redux-container-background .redux-background-repeat,.wp-customizer .redux-container-background .redux-background-repeat select{width:100% !important}.redux-main .redux-container-box_shadow .box-shadow-inset{margin:0 auto}.redux-main .redux-container-box_shadow .box-shadow-inset #shadow-result{padding:20px;margin-bottom:20px;margin-top:20px;min-height:180px;border:0px solid #ddd;background:#f1f1f1;-webkit-transition:all 0.2s ease;transition:all 0.2s ease}.redux-main .redux-container-box_shadow .box-shadow-inset .row-content:after,.redux-main .redux-container-box_shadow .box-shadow-inset .row:after{clear:both;content:" ";display:block;height:0;visibility:hidden}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2{width:50%;float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2.disabled label strong{color:#cccccc}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 label{color:#999999}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled{pointer-events:none;opacity:0.4;z-index:200;background:0;padding:0 !important}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled button{background-color:#888}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled a{z-index:-1}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 ul li{padding-bottom:10px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:first-child{padding-right:20px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:last-child{padding-left:20px}.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-border .field-border-input input{display:inline-block !important;width:100px !important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}}.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.redux-container-color_gradient .redux-gradient-preview{height:150px;margin-top:10px;border-radius:4px}.redux-container-color_gradient .colorGradient,.redux-container-color_gradient .redux-gradient-type{display:inline-block;margin-right:20px}.redux-container-color_gradient .colorGradient strong,.redux-container-color_gradient .redux-gradient-type strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;color:#999}@media screen and (max-width: 660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center !important}}.redux-main .redux-container-color_palette label{position:relative;display:inline-block;padding:0;margin:0}.redux-main .redux-container-color_palette .colors-wrapper{max-height:300px;overflow-y:auto;padding:10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.redux-main .redux-container-color_palette .colors-wrapper .color-palette-color{color:transparent;display:block;width:100%;height:100%;overflow:hidden;border:1px solid rgba(0,0,0,0.2)}.redux-main .redux-container-color_palette .colors-wrapper.round label{padding:3px}.redux-main .redux-container-color_palette .colors-wrapper.round .color-palette-color{border-radius:50%}.redux-main .redux-container-color_palette .colors-wrapper.box-shadow .color-palette-color{-webkit-box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,0.22);box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,0.22)}.redux-main .redux-container-color_palette .colors-wrapper input{display:none}.redux-main .redux-container-color_palette .colors-wrapper input:checked+label .color-palette-color{border:0;width:130%;height:130%;position:relative;left:-15%;top:-15%;z-index:99;-webkit-box-shadow:1px 1px 6px 1px #333333;box-shadow:1px 1px 6px 1px #333333;border:1px solid rgba(0,0,0,0.3)}.redux-main .redux-container-color_palette .colors-wrapper.with-margin label{margin:3px !important}.sp-container{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer:focus,.sp-replacer:hover,.sp-replacer.focus,.sp-replacer.hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer:focus,.sp-replacer.focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5)}#ui-datepicker-div{z-index:15 !important}.ui-datepicker-header{background-color:#00abef}.redux-dimensions-container select,.redux-dimensions-container .select_wrapper{width:80px !important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block !important;width:100px !important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}}.redux-main .divide{height:20px;line-height:20px;float:none;border-color:#e7e7e7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.redux-main .divide .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.redux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .redux-container-divide .divide .inner{width:82% !important;left:18% !important;margin-left:-8%}.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border-style:none;border:0;border-width:0}.redux-container-editor .wp-editor-container{border-radius:3px}.redux-container-editor .wp-editor-container textarea{border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial, Helvetica, sans-serif normal;color:#464646;border:1px solid #c3c3c3;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));background-image:-webkit-linear-gradient(bottom, #e3e3e3, #fff);background-image:linear-gradient(to top, #e3e3e3, #fff)}.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0 !important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select .tiles{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type="radio"]{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected img,.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a}.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-container-link_color .linkColor strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;font-weight:normal;color:#999}.redux-main .redux-media-slider{width:40%;display:inline-block;margin-left:30px}.redux-main .redux-media-filter-container{padding-top:20px}.redux-main .redux-media-filter-container .container-label{margin-bottom:20px;padding-bottom:1px;border-bottom:1px solid #e7e7e7;font-weight:600;font-size:12px;color:#999}.redux-main .redux-media-filter-container .media-filter{display:inline-block;width:47%;margin-bottom:5px}.redux-main .redux-media-filter-container .media-filter label{display:inline-block;width:130px;color:#999}.redux-main .redux-media-filter-container .media-filter label.disabled .filter-value{color:#ccc}.redux-container-palette label{border:3px solid transparent;border-color:transparent !important;border-radius:0;width:100% !important;display:block}.redux-container-palette label.ui-button.ui-widget{width:95%;background:none;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon,.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon-space{display:none}.redux-container-palette label.ui-button.ui-widget span{padding:10px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-size:0;line-height:10px;color:rgba(0,0,0,0);-webkit-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out;text-shadow:0}.redux-container-palette label.ui-button.ui-widget span:hover{-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;font-weight:bold;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff, 0 0 8px #fff}.redux-container-palette label.ui-state-active{border:3px solid #333 !important}.wp-customizer .redux-main .redux-container-palette label{margin-bottom:3px}.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0 !important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eee;border-color:#ccc;color:#666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0 !important}.redux-notice-field p{margin:0.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-main .redux-field-container.redux-container-info{padding:0}.wp-customizer .hasIcon.redux-notice-field .redux-info-desc,.wp-customizer .hasIcon.redux-info-field .redux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.redux-notice-field .redux-info-icon,.wp-customizer .hasIcon.redux-info-field .redux-info-icon{float:left}.wp-customizer .redux-main .customize-control.customize-control-redux-info{border-bottom:0}.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-add{clear:both;margin:5px 0}.redux-container-multi_text a.redux-multi-text-remove.deletion{color:#f00;padding:2px 4px;margin-left:5px}.redux-container-multi_text a.redux-multi-text-remove.deletion:hover{background:#ff0;color:#fff;text-decoration:none}@media screen and (max-width: 782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.wp-customizer .redux-container-multi_text .button{float:right}.wp-customizer .redux-container-multi_text .redux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .redux-container-multi_text ul.redux-multi-text input{width:100% !important}.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;border-radius:3px}.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px !important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.redux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.redux-container-slider{text-align:center}.redux-container-slider input,.redux-container-slider select,.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container{display:block !important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.wp-customizer .redux-container-slider .redux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .redux-container-slider .redux-slider-input,.wp-customizer .redux-container-slider .redux-slider-select-one,.wp-customizer .redux-container-slider .redux-slider-select-two{width:25% !important}.wp-customizer .redux-container-slider .redux-slider-container{width:70%;margin-right:0;margin-left:5%}.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf !important;border-radius:3px !important;margin-top:0px !important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move !important;font-weight:bold;padding:0 10px !important;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d !important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:bold}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides input{width:100% !important}.wp-customizer .redux-container-slides .ui-accordion .ui-accordion-content{padding:10px}.redux-container-sortable i.el,.redux-container-sortable i.dashicons-menu{cursor:move;padding-top:5px}.redux-container-sortable label{margin-right:10px}.redux-container-sortable label.bugger{margin-bottom:0px !important;font-size:12px !important;color:#999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:100%}.redux-container-sortable .checkbox-container label{margin-bottom:2px !important;cursor:inherit}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.checkbox li{padding:5px 10px;border:1px solid #333;background:#fff;margin-bottom:5px !important}.redux-container-sortable ul.checkbox li .dashicons.visibility{padding-top:4px;margin-right:10px;cursor:pointer}.redux-container-sortable ul.checkbox li.invisible{color:#aaa;border:1px dashed #aaa}.redux-container-sortable ul.checkbox li.invisible .dashicons.visibility{color:#aaa}.redux-container-sortable ul.labeled li{line-height:1.4em !important}.redux-container-sortable li{line-height:30px !important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.wp-customizer .redux-sortable input[type="text"]{width:92%}.wp-customizer .redux-sortable i.el{margin-left:5px}.wp-customizer .redux-container-sortable .checkbox-container{width:inherit}.wp-customizer .redux-container-sortable .ui-draggable-handle{margin-left:3%}.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#f9f9f9;border:1px solid #e3e3e3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:0.7;filter:alpha(opacity=70);background:#efecec}.redux-container-sorter ul li{border:1px solid #dfdfdf;cursor:move;font-weight:bold;margin-bottom:10px !important;padding:0 10px;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.wp-customizer .redux-container-sorter ul{width:85%;margin:0 0 5px 0}.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.select2-search__field{width:none !important}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove,.select2-container--classic .select2-selection--single .select2-selection__clear{font-size:1.2em}.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative !important;z-index:1;width:75px !important;height:30px !important;background:#eee !important;border:1px solid #bfbfbf !important;border-right:0 !important;border-left:0 !important;border-radius:0 !important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{color:#fff;position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));background:-webkit-linear-gradient(#fff, #f3f3f3);background:linear-gradient(#fff, #f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff));background:-webkit-linear-gradient(#f3f3f3, #fff);background:linear-gradient(#f3f3f3, #fff);background-color:#f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{border-radius:0 3px 3px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{border-radius:3px 0 0 3px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7;background-image:initial;text-indent:0;text-align:center;font-size:18px;line-height:26px}.dp-numberPicker,.dp-numberPicker-add,.dp-numberPicker-sub,.dp-numberPicker-input{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-box-sizing:border-box;text-align:center;vertical-align:top;height:30px}.dp-numberPicker{border-radius:3px}.redux-container .redux-container-spinner .dp-numberPicker-add,.redux-container .redux-container-spinner .dp-numberPicker-sub{width:30px;font-size:21px;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;background-color:#33b5e5;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);height:29px !important}.redux-container .redux-container-spinner .dp-numberPicker-add.disabled,.redux-container .redux-container-spinner .dp-numberPicker-sub.disabled{background-color:#2c6a81}.dp-numberPicker-add{border-top-right-radius:3px;border-bottom-right-radius:3px}.dp-numberPicker-sub{border-top-left-radius:3px;border-bottom-left-radius:3px}.dp-numberPicker-input{width:70px;background-color:#eee;border:0;margin:0 !important;-webkit-box-shadow:inset 0px 1px 1px rgba(255,255,255,0.5),inset 0px -1px 1px rgba(0,0,0,0.5);box-shadow:inset 0px 1px 1px rgba(255,255,255,0.5),inset 0px -1px 1px rgba(0,0,0,0.5)}.dp-numberPicker-input:disabled{background-color:#eee}.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable,.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;-webkit-border-radius:3px 0px 0px 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;-webkit-border-radius:0px 3px 3px 0px}.redux-container-switch .cb-disable.selected{color:#fff}.redux-container-text label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999;margin:4px 0 2px 0 !important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .redux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .redux-typography-slider{margin-top:11px;width:auto}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix::after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.redux-main .redux-typography-container input.wp-picker-default,.redux-main .redux-typography-container .redux-typography-color{-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0 14px !important;margin-top:0;margin-bottom:0;font-size:12px !important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48% !important;min-width:210px !important;max-width:324px !important;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper:nth-child(even){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px !important;display:block;float:left;height:28px !important;line-height:50px !important;padding:0 !important;width:100% !important;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.margin-top,.redux-main .redux-typography-container .input_wrapper.margin-bottom{margin-left:0px}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;position:relative;margin:0;padding:0;width:100%;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{position:relative;font-size:12px !important;text-align:left;color:#999;width:100%;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted #d3d3d3;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0 none;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width: 540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0 !important;margin-right:0 !important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0 !important;margin-right:5px !important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px !important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width: 360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.wp-customizer .redux-typography-container .input_wrapper{width:40%;max-width:40%;min-width:20%}.wp-customizer .redux-typography-container .input_wrapper input.mini{width:70%}.wp-customizer .redux-typography-container .select_wrapper{width:100% !important}.redux-container-spacing select,.redux-container-spacing .select_wrapper{width:80px !important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-spacing .field-spacing-input input{display:inline-block !important;width:70px !important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}}.redux-main .form-table-section-indented{width:95%;margin-left:5% !important}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0px !important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.wp-customizer .redux-container{overflow:visible}.wp-customizer .redux-container .redux-main input{margin:0 !important}.wp-customizer .redux-container .redux-main input.spinner-input{margin-right:30px !important;margin-left:30px !important;margin-top:0px !important}.wp-customizer .redux-container .redux-main .redux-container-editor .wp-editor-area{color:#000000}.wp-customizer .redux-section.open .redux-group-tab{display:block !important}.wp-customizer .redux-section p.customize-section-description{margin-top:22px;word-break:break-word}.wp-customizer .redux-section p.customize-section-description.legacy{margin-top:7px}.wp-customizer .control-section-themes .accordion-section-title{margin:0}.wp-customizer #customize-controls .description{display:block}.wp-customizer #customize-controls .customize-info{margin-bottom:0}.wp-customizer #customize-controls .redux-section .accordion-section-content{background:#fcfcfc}.wp-customizer .redux-section .accordion-section-title i,.wp-customizer .redux-field .accordion-field-title i,.wp-customizer .redux-panel .accordion-section-title i{margin-right:5px}.wp-customizer .accordion-section.redux-main{background:inherit;margin-left:inherit;border-left:inherit;-moz-box-shadow:inherit;-webkit-box-shadow:inherit;padding:inherit;box-shadow:inherit}.wp-customizer .redux_field_th{padding:13px 0px 0px 0px}.wp-customizer .redux-main .redux-field-container{padding:10px 0}.wp-customizer .redux-main .select_wrapper{float:none;width:100%;display:inline-block}.wp-customizer .redux-main .select2-container{margin-right:0 !important;margin-bottom:5px !important;width:100% !important}.wp-customizer .redux-main .select_wrapper:nth-child(odd){margin-right:0}.wp-customizer .redux-main .redux-option-image{max-width:42% !important;margin-right:3%}.wp-customizer .redux-main .customize-control{border-bottom:1px solid #ddd;padding-bottom:4px}.wp-customizer .redux-main .customize-control:last-child{border-bottom:0;padding-bottom:0}.wp-customizer .redux-main .upload{width:100% !important}.wp-customizer .redux-main h3{margin-top:inherit}.wp-customizer .redux-main .redux-container-raw{margin-top:22px;word-break:break-word;padding:0 !important}.wp-customizer .redux-main .redux-container-password input{width:100%}.wp-customizer .select2-drop,.wp-customizer .select2-container{z-index:999999}.wp-customizer .customize-control-redux-raw{list-style:none}.redux-container-import_export #redux-import-link-wrapper,.redux-container-import_export #redux-import-code-wrapper{display:none}.redux-container-import_export #redux-export-code,.redux-container-import_export #redux-export-link-value,.redux-container-import_export #redux-import-upload-file{display:none}.redux-container-import_export #redux-import-action span{color:#b94a48}.redux-container-import_export #redux-import-upload span{font-weight:bold}#redux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%}
|
2 |
|
3 |
/*# sourceMappingURL=redux-fields.min.css.map */
|
1 |
+
.redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1 !important}.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select{width:200px !important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .redux-container-background .redux-background-position,.wp-customizer .redux-container-background .redux-background-position select,.wp-customizer .redux-container-background .redux-background-attachment,.wp-customizer .redux-container-background .redux-background-attachment select,.wp-customizer .redux-container-background .redux-background-clip,.wp-customizer .redux-container-background .redux-background-clip select,.wp-customizer .redux-container-background .redux-background-origin,.wp-customizer .redux-container-background .redux-background-origin select,.wp-customizer .redux-container-background .redux-background-size,.wp-customizer .redux-container-background .redux-background-size select,.wp-customizer .redux-container-background .redux-background-repeat,.wp-customizer .redux-container-background .redux-background-repeat select{width:100% !important}.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-border .field-border-input input{display:inline-block !important;width:100px !important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}}.redux-main .redux-container-box_shadow .box-shadow-inset{margin:0 auto}.redux-main .redux-container-box_shadow .box-shadow-inset #shadow-result{padding:20px;margin-bottom:20px;margin-top:20px;min-height:180px;border:0px solid #ddd;background:#f1f1f1;-webkit-transition:all 0.2s ease;transition:all 0.2s ease}.redux-main .redux-container-box_shadow .box-shadow-inset .row-content:after,.redux-main .redux-container-box_shadow .box-shadow-inset .row:after{clear:both;content:" ";display:block;height:0;visibility:hidden}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2{width:50%;float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2.disabled label strong{color:#cccccc}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 label{color:#999999}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled{pointer-events:none;opacity:0.4;z-index:200;background:0;padding:0 !important}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled button{background-color:#888}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled a{z-index:-1}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 ul li{padding-bottom:10px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:first-child{padding-right:20px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:last-child{padding-left:20px}.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.redux-container-color_gradient .redux-gradient-preview{height:150px;margin-top:10px;border-radius:4px}.redux-container-color_gradient .colorGradient,.redux-container-color_gradient .redux-gradient-type{display:inline-block;margin-right:20px}.redux-container-color_gradient .colorGradient strong,.redux-container-color_gradient .redux-gradient-type strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;color:#999}@media screen and (max-width: 660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center !important}}.redux-main .redux-container-color_palette label{position:relative;display:inline-block;padding:0;margin:0}.redux-main .redux-container-color_palette .colors-wrapper{max-height:300px;overflow-y:auto;padding:10px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.redux-main .redux-container-color_palette .colors-wrapper .color-palette-color{color:transparent;display:block;width:100%;height:100%;overflow:hidden;border:1px solid rgba(0,0,0,0.2)}.redux-main .redux-container-color_palette .colors-wrapper.round label{padding:3px}.redux-main .redux-container-color_palette .colors-wrapper.round .color-palette-color{border-radius:50%}.redux-main .redux-container-color_palette .colors-wrapper.box-shadow .color-palette-color{-webkit-box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,0.22);box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,0.22)}.redux-main .redux-container-color_palette .colors-wrapper input{display:none}.redux-main .redux-container-color_palette .colors-wrapper input:checked+label .color-palette-color{border:0;width:130%;height:130%;position:relative;left:-15%;top:-15%;z-index:99;-webkit-box-shadow:1px 1px 6px 1px #333333;box-shadow:1px 1px 6px 1px #333333;border:1px solid rgba(0,0,0,0.3)}.redux-main .redux-container-color_palette .colors-wrapper.with-margin label{margin:3px !important}.sp-container{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer:focus,.sp-replacer:hover,.sp-replacer.focus,.sp-replacer.hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer:focus,.sp-replacer.focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5)}#ui-datepicker-div{z-index:15 !important}.ui-datepicker-header{background-color:#00abef}.redux-dimensions-container select,.redux-dimensions-container .select_wrapper{width:80px !important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block !important;width:100px !important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}}.redux-main .divide{height:20px;line-height:20px;float:none;border-color:#e7e7e7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.redux-main .divide .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.redux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .redux-container-divide .divide .inner{width:82% !important;left:18% !important;margin-left:-8%}.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border-style:none;border:0;border-width:0}.redux-container-editor .wp-editor-container{border-radius:3px}.redux-container-editor .wp-editor-container textarea{border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial, Helvetica, sans-serif normal;color:#464646;border:1px solid #c3c3c3;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));background-image:-webkit-linear-gradient(bottom, #e3e3e3, #fff);background-image:linear-gradient(to top, #e3e3e3, #fff)}.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0 !important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select .tiles{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type="radio"]{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected img,.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a}.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0 !important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eee;border-color:#ccc;color:#666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0 !important}.redux-notice-field p{margin:0.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-main .redux-field-container.redux-container-info{padding:0}.wp-customizer .hasIcon.redux-notice-field .redux-info-desc,.wp-customizer .hasIcon.redux-info-field .redux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.redux-notice-field .redux-info-icon,.wp-customizer .hasIcon.redux-info-field .redux-info-icon{float:left}.wp-customizer .redux-main .customize-control.customize-control-redux-info{border-bottom:0}.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-container-link_color .linkColor strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;font-weight:normal;color:#999}.redux-main .redux-media-slider{width:40%;display:inline-block;margin-left:30px}.redux-main .redux-media-filter-container{padding-top:20px}.redux-main .redux-media-filter-container .container-label{margin-bottom:20px;padding-bottom:1px;border-bottom:1px solid #e7e7e7;font-weight:600;font-size:12px;color:#999}.redux-main .redux-media-filter-container .media-filter{display:inline-block;width:47%;margin-bottom:5px}.redux-main .redux-media-filter-container .media-filter label{display:inline-block;width:130px;color:#999}.redux-main .redux-media-filter-container .media-filter label.disabled .filter-value{color:#ccc}.redux-container-palette label{border:3px solid transparent;border-color:transparent !important;border-radius:0;width:100% !important;display:block}.redux-container-palette label.ui-button.ui-widget{width:95%;background:none;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon,.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon-space{display:none}.redux-container-palette label.ui-button.ui-widget span{padding:10px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-size:0;line-height:10px;color:rgba(0,0,0,0);-webkit-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out;text-shadow:0}.redux-container-palette label.ui-button.ui-widget span:hover{-webkit-box-flex:3;-webkit-flex-grow:3;-ms-flex-positive:3;flex-grow:3;font-weight:bold;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff, 0 0 8px #fff}.redux-container-palette label.ui-state-active{border:3px solid #333 !important}.wp-customizer .redux-main .redux-container-palette label{margin-bottom:3px}.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-add{clear:both;margin:5px 0}.redux-container-multi_text a.redux-multi-text-remove.deletion{color:#f00;padding:2px 4px;margin-left:5px}.redux-container-multi_text a.redux-multi-text-remove.deletion:hover{background:#ff0;color:#fff;text-decoration:none}@media screen and (max-width: 782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.wp-customizer .redux-container-multi_text .button{float:right}.wp-customizer .redux-container-multi_text .redux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .redux-container-multi_text ul.redux-multi-text input{width:100% !important}.redux-main .form-table-section-indented{width:95%;margin-left:5% !important}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0px !important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.select2-search__field{width:none !important}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove,.select2-container--classic .select2-selection--single .select2-selection__clear{font-size:1.2em}.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;border-radius:3px}.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px !important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.redux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.redux-container-slider{text-align:center}.redux-container-slider input,.redux-container-slider select,.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container{display:block !important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.wp-customizer .redux-container-slider .redux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .redux-container-slider .redux-slider-input,.wp-customizer .redux-container-slider .redux-slider-select-one,.wp-customizer .redux-container-slider .redux-slider-select-two{width:25% !important}.wp-customizer .redux-container-slider .redux-slider-container{width:70%;margin-right:0;margin-left:5%}.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf !important;border-radius:3px !important;margin-top:0px !important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move !important;font-weight:bold;padding:0 10px !important;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d !important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:bold}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides input{width:100% !important}.wp-customizer .redux-container-slides .ui-accordion .ui-accordion-content{padding:10px}.redux-container-sortable i.el,.redux-container-sortable i.dashicons-menu{cursor:move;padding-top:5px}.redux-container-sortable label{margin-right:10px}.redux-container-sortable label.bugger{margin-bottom:0px !important;font-size:12px !important;color:#999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:100%}.redux-container-sortable .checkbox-container label{margin-bottom:2px !important;cursor:inherit}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.checkbox li{padding:5px 10px;border:1px solid #333;background:#fff;margin-bottom:5px !important}.redux-container-sortable ul.checkbox li .dashicons.visibility{padding-top:4px;margin-right:10px;cursor:pointer}.redux-container-sortable ul.checkbox li.invisible{color:#aaa;border:1px dashed #aaa}.redux-container-sortable ul.checkbox li.invisible .dashicons.visibility{color:#aaa}.redux-container-sortable ul.labeled li{line-height:1.4em !important}.redux-container-sortable li{line-height:30px !important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.wp-customizer .redux-sortable input[type="text"]{width:92%}.wp-customizer .redux-sortable i.el{margin-left:5px}.wp-customizer .redux-container-sortable .checkbox-container{width:inherit}.wp-customizer .redux-container-sortable .ui-draggable-handle{margin-left:3%}.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#f9f9f9;border:1px solid #e3e3e3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:0.7;filter:alpha(opacity=70);background:#efecec}.redux-container-sorter ul li{border:1px solid #dfdfdf;cursor:move;font-weight:bold;margin-bottom:10px !important;padding:0 10px;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.wp-customizer .redux-container-sorter ul{width:85%;margin:0 0 5px 0}.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative !important;z-index:1;width:75px !important;height:30px !important;background:#eee !important;border:1px solid #bfbfbf !important;border-right:0 !important;border-left:0 !important;border-radius:0 !important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{color:#fff;position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));background:-webkit-linear-gradient(#fff, #f3f3f3);background:linear-gradient(#fff, #f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff));background:-webkit-linear-gradient(#f3f3f3, #fff);background:linear-gradient(#f3f3f3, #fff);background-color:#f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{border-radius:0 3px 3px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{border-radius:3px 0 0 3px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7;background-image:initial;text-indent:0;text-align:center;font-size:18px;line-height:26px}.dp-numberPicker,.dp-numberPicker-add,.dp-numberPicker-sub,.dp-numberPicker-input{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-box-sizing:border-box;text-align:center;vertical-align:top;height:30px}.dp-numberPicker{border-radius:3px}.redux-container .redux-container-spinner .dp-numberPicker-add,.redux-container .redux-container-spinner .dp-numberPicker-sub{width:30px;font-size:21px;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;background-color:#33b5e5;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);height:29px !important}.redux-container .redux-container-spinner .dp-numberPicker-add.disabled,.redux-container .redux-container-spinner .dp-numberPicker-sub.disabled{background-color:#2c6a81}.dp-numberPicker-add{border-top-right-radius:3px;border-bottom-right-radius:3px}.dp-numberPicker-sub{border-top-left-radius:3px;border-bottom-left-radius:3px}.dp-numberPicker-input{width:70px;background-color:#eee;border:0;margin:0 !important;-webkit-box-shadow:inset 0px 1px 1px rgba(255,255,255,0.5),inset 0px -1px 1px rgba(0,0,0,0.5);box-shadow:inset 0px 1px 1px rgba(255,255,255,0.5),inset 0px -1px 1px rgba(0,0,0,0.5)}.dp-numberPicker-input:disabled{background-color:#eee}.redux-container-spacing select,.redux-container-spacing .select_wrapper{width:80px !important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-spacing .field-spacing-input input{display:inline-block !important;width:70px !important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}}.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable,.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;-webkit-border-radius:3px 0px 0px 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;-webkit-border-radius:0px 3px 3px 0px}.redux-container-switch .cb-disable.selected{color:#fff}.redux-container-text label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999;margin:4px 0 2px 0 !important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .redux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .redux-typography-slider{margin-top:11px;width:auto}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix::after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.redux-main .redux-typography-container input.wp-picker-default,.redux-main .redux-typography-container .redux-typography-color{-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0 14px !important;margin-top:0;margin-bottom:0;font-size:12px !important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48% !important;min-width:210px !important;max-width:324px !important;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper:nth-child(even){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px !important;display:block;float:left;height:28px !important;line-height:50px !important;padding:0 !important;width:100% !important;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.margin-top,.redux-main .redux-typography-container .input_wrapper.margin-bottom{margin-left:0px}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;position:relative;margin:0;padding:0;width:100%;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{position:relative;font-size:12px !important;text-align:left;color:#999;width:100%;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted #d3d3d3;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0 none;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width: 540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0 !important;margin-right:0 !important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0 !important;margin-right:5px !important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px !important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width: 360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.wp-customizer .redux-typography-container .input_wrapper{width:40%;max-width:40%;min-width:20%}.wp-customizer .redux-typography-container .input_wrapper input.mini{width:70%}.wp-customizer .redux-typography-container .select_wrapper{width:100% !important}.wp-customizer .redux-container{overflow:visible}.wp-customizer .redux-container .redux-main input{margin:0 !important}.wp-customizer .redux-container .redux-main input.spinner-input{margin-right:30px !important;margin-left:30px !important;margin-top:0px !important}.wp-customizer .redux-container .redux-main .redux-container-editor .wp-editor-area{color:#000000}.wp-customizer .redux-section.open .redux-group-tab{display:block !important}.wp-customizer .redux-section p.customize-section-description{margin-top:22px;word-break:break-word}.wp-customizer .redux-section p.customize-section-description.legacy{margin-top:7px}.wp-customizer .control-section-themes .accordion-section-title{margin:0}.wp-customizer #customize-controls .description{display:block}.wp-customizer #customize-controls .customize-info{margin-bottom:0}.wp-customizer #customize-controls .redux-section .accordion-section-content{background:#fcfcfc}.wp-customizer .redux-section .accordion-section-title i,.wp-customizer .redux-field .accordion-field-title i,.wp-customizer .redux-panel .accordion-section-title i{margin-right:5px}.wp-customizer .accordion-section.redux-main{background:inherit;margin-left:inherit;border-left:inherit;-moz-box-shadow:inherit;-webkit-box-shadow:inherit;padding:inherit;box-shadow:inherit}.wp-customizer .redux_field_th{padding:13px 0px 0px 0px}.wp-customizer .redux-main .redux-field-container{padding:10px 0}.wp-customizer .redux-main .select_wrapper{float:none;width:100%;display:inline-block}.wp-customizer .redux-main .select2-container{margin-right:0 !important;margin-bottom:5px !important;width:100% !important}.wp-customizer .redux-main .select_wrapper:nth-child(odd){margin-right:0}.wp-customizer .redux-main .redux-option-image{max-width:42% !important;margin-right:3%}.wp-customizer .redux-main .customize-control{border-bottom:1px solid #ddd;padding-bottom:4px}.wp-customizer .redux-main .customize-control:last-child{border-bottom:0;padding-bottom:0}.wp-customizer .redux-main .upload{width:100% !important}.wp-customizer .redux-main h3{margin-top:inherit}.wp-customizer .redux-main .redux-container-raw{margin-top:22px;word-break:break-word;padding:0 !important}.wp-customizer .redux-main .redux-container-password input{width:100%}.wp-customizer .select2-drop,.wp-customizer .select2-container{z-index:999999}.wp-customizer .customize-control-redux-raw{list-style:none}.redux-container-import_export #redux-import-link-wrapper,.redux-container-import_export #redux-import-code-wrapper{display:none}.redux-container-import_export #redux-export-code,.redux-container-import_export #redux-export-link-value,.redux-container-import_export #redux-import-upload-file{display:none}.redux-container-import_export #redux-import-action span{color:#b94a48}.redux-container-import_export #redux-import-upload span{font-weight:bold}#redux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%}
|
2 |
|
3 |
/*# sourceMappingURL=redux-fields.min.css.map */
|
redux-core/assets/css/redux-fields.min.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["redux-fields.min.css"],"names":[],"mappings":"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","file":"redux-fields.min.css","sourcesContent":[".redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1 !important}.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select{width:200px !important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .redux-container-background .redux-background-position,.wp-customizer .redux-container-background .redux-background-position select,.wp-customizer .redux-container-background .redux-background-attachment,.wp-customizer .redux-container-background .redux-background-attachment select,.wp-customizer .redux-container-background .redux-background-clip,.wp-customizer .redux-container-background .redux-background-clip select,.wp-customizer .redux-container-background .redux-background-origin,.wp-customizer .redux-container-background .redux-background-origin select,.wp-customizer .redux-container-background .redux-background-size,.wp-customizer .redux-container-background .redux-background-size select,.wp-customizer .redux-container-background .redux-background-repeat,.wp-customizer .redux-container-background .redux-background-repeat select{width:100% !important}.redux-main .redux-container-box_shadow .box-shadow-inset{margin:0 auto}.redux-main .redux-container-box_shadow .box-shadow-inset #shadow-result{padding:20px;margin-bottom:20px;margin-top:20px;min-height:180px;border:0px solid #ddd;background:#f1f1f1;transition:all 0.2s ease}.redux-main .redux-container-box_shadow .box-shadow-inset .row-content:after,.redux-main .redux-container-box_shadow .box-shadow-inset .row:after{clear:both;content:\" \";display:block;height:0;visibility:hidden}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2{width:50%;float:left;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2.disabled label strong{color:#cccccc}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 label{color:#999999}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled{pointer-events:none;opacity:0.4;z-index:200;background:0;padding:0 !important}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled button{background-color:#888}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled a{z-index:-1}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 ul li{padding-bottom:10px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:first-child{padding-right:20px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:last-child{padding-left:20px}.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-border .field-border-input input{display:inline-block !important;width:100px !important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}}.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.redux-container-color_gradient .redux-gradient-preview{height:150px;margin-top:10px;border-radius:4px}.redux-container-color_gradient .colorGradient,.redux-container-color_gradient .redux-gradient-type{display:inline-block;margin-right:20px}.redux-container-color_gradient .colorGradient strong,.redux-container-color_gradient .redux-gradient-type strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;color:#999}@media screen and (max-width: 660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center !important}}.redux-main .redux-container-color_palette label{position:relative;display:inline-block;padding:0;margin:0}.redux-main .redux-container-color_palette .colors-wrapper{max-height:300px;overflow-y:auto;padding:10px;display:flex;flex-wrap:wrap}.redux-main .redux-container-color_palette .colors-wrapper .color-palette-color{color:transparent;display:block;width:100%;height:100%;overflow:hidden;border:1px solid rgba(0,0,0,0.2)}.redux-main .redux-container-color_palette .colors-wrapper.round label{padding:3px}.redux-main .redux-container-color_palette .colors-wrapper.round .color-palette-color{border-radius:50%}.redux-main .redux-container-color_palette .colors-wrapper.box-shadow .color-palette-color{box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,0.22)}.redux-main .redux-container-color_palette .colors-wrapper input{display:none}.redux-main .redux-container-color_palette .colors-wrapper input:checked+label .color-palette-color{border:0;width:130%;height:130%;position:relative;left:-15%;top:-15%;z-index:99;box-shadow:1px 1px 6px 1px #333333;border:1px solid rgba(0,0,0,0.3)}.redux-main .redux-container-color_palette .colors-wrapper.with-margin label{margin:3px !important}.sp-container{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer:focus,.sp-replacer:hover,.sp-replacer.focus,.sp-replacer.hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer:focus,.sp-replacer.focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5)}#ui-datepicker-div{z-index:15 !important}.ui-datepicker-header{background-color:#00abef}.redux-dimensions-container select,.redux-dimensions-container .select_wrapper{width:80px !important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block !important;width:100px !important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}}.redux-main .divide{height:20px;line-height:20px;float:none;border-color:#e7e7e7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.redux-main .divide .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.redux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .redux-container-divide .divide .inner{width:82% !important;left:18% !important;margin-left:-8%}.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border-style:none;border:0;border-width:0}.redux-container-editor .wp-editor-container{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-editor .wp-editor-container textarea{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial, Helvetica, sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));background-image:-webkit-linear-gradient(bottom, #e3e3e3, #fff);background-image:-moz-linear-gradient(bottom, #e3e3e3, #fff);background-image:-o-linear-gradient(bottom, #e3e3e3, #fff);background-image:linear-gradient(to top, #e3e3e3, #fff)}.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0 !important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select .tiles{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type=\"radio\"]{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected img,.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a}.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-container-link_color .linkColor strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;font-weight:normal;color:#999}.redux-main .redux-media-slider{width:40%;display:inline-block;margin-left:30px}.redux-main .redux-media-filter-container{padding-top:20px}.redux-main .redux-media-filter-container .container-label{margin-bottom:20px;padding-bottom:1px;border-bottom:1px solid #e7e7e7;font-weight:600;font-size:12px;color:#999}.redux-main .redux-media-filter-container .media-filter{display:inline-block;width:47%;margin-bottom:5px}.redux-main .redux-media-filter-container .media-filter label{display:inline-block;width:130px;color:#999}.redux-main .redux-media-filter-container .media-filter label.disabled .filter-value{color:#ccc}.redux-container-palette label{border:3px solid transparent;border-color:transparent !important;border-radius:0;width:100% !important;display:block}.redux-container-palette label.ui-button.ui-widget{width:95%;background:none;padding:0;display:flex}.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon,.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon-space{display:none}.redux-container-palette label.ui-button.ui-widget span{padding:10px;flex-grow:1;font-size:0;line-height:10px;color:rgba(0,0,0,0);-webkit-transition:all 200ms ease-in-out;-moz-transition:all 200ms ease-in-out;-ms-transition:all 200ms ease-in-out;-o-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out;text-shadow:0}.redux-container-palette label.ui-button.ui-widget span:hover{flex-grow:3;font-weight:bold;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff, 0 0 8px #fff}.redux-container-palette label.ui-state-active{border:3px solid #333 !important}.wp-customizer .redux-main .redux-container-palette label{margin-bottom:3px}.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0 !important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eee;border-color:#ccc;color:#666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0 !important}.redux-notice-field p{margin:0.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-main .redux-field-container.redux-container-info{padding:0}.wp-customizer .hasIcon.redux-notice-field .redux-info-desc,.wp-customizer .hasIcon.redux-info-field .redux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.redux-notice-field .redux-info-icon,.wp-customizer .hasIcon.redux-info-field .redux-info-icon{float:left}.wp-customizer .redux-main .customize-control.customize-control-redux-info{border-bottom:0}.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-add{clear:both;margin:5px 0}.redux-container-multi_text a.redux-multi-text-remove.deletion{color:#f00;padding:2px 4px;margin-left:5px}.redux-container-multi_text a.redux-multi-text-remove.deletion:hover{background:#ff0;color:#fff;text-decoration:none}@media screen and (max-width: 782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.wp-customizer .redux-container-multi_text .button{float:right}.wp-customizer .redux-container-multi_text .redux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .redux-container-multi_text ul.redux-multi-text input{width:100% !important}.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px !important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.redux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.redux-container-slider{text-align:center}.redux-container-slider input,.redux-container-slider select,.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container{display:block !important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.wp-customizer .redux-container-slider .redux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .redux-container-slider .redux-slider-input,.wp-customizer .redux-container-slider .redux-slider-select-one,.wp-customizer .redux-container-slider .redux-slider-select-two{width:25% !important}.wp-customizer .redux-container-slider .redux-slider-container{width:70%;margin-right:0;margin-left:5%}.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf !important;border-radius:3px !important;margin-top:0px !important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move !important;font-weight:bold;padding:0 10px !important;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d !important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:bold}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides input{width:100% !important}.wp-customizer .redux-container-slides .ui-accordion .ui-accordion-content{padding:10px}.redux-container-sortable i.el,.redux-container-sortable i.dashicons-menu{cursor:move;padding-top:5px}.redux-container-sortable label{margin-right:10px}.redux-container-sortable label.bugger{margin-bottom:0px !important;font-size:12px !important;color:#999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:100%}.redux-container-sortable .checkbox-container label{margin-bottom:2px !important;cursor:inherit}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.checkbox li{padding:5px 10px;border:1px solid #333;background:#fff;margin-bottom:5px !important}.redux-container-sortable ul.checkbox li .dashicons.visibility{padding-top:4px;margin-right:10px;cursor:pointer}.redux-container-sortable ul.checkbox li.invisible{color:#aaa;border:1px dashed #aaa}.redux-container-sortable ul.checkbox li.invisible .dashicons.visibility{color:#aaa}.redux-container-sortable ul.labeled li{line-height:1.4em !important}.redux-container-sortable li{line-height:30px !important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.wp-customizer .redux-sortable input[type=\"text\"]{width:92%}.wp-customizer .redux-sortable i.el{margin-left:5px}.wp-customizer .redux-container-sortable .checkbox-container{width:inherit}.wp-customizer .redux-container-sortable .ui-draggable-handle{margin-left:3%}.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#f9f9f9;border:1px solid #e3e3e3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:0.7;filter:alpha(opacity=70);background:#efecec}.redux-container-sorter ul li{border:1px solid #dfdfdf;cursor:move;font-weight:bold;margin-bottom:10px !important;padding:0 10px;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.wp-customizer .redux-container-sorter ul{width:85%;margin:0 0 5px 0}.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.select2-search__field{width:none !important}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove,.select2-container--classic .select2-selection--single .select2-selection__clear{font-size:1.2em}.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative !important;z-index:1;width:75px !important;height:30px !important;background:#eee !important;border:1px solid #bfbfbf !important;border-right:0 !important;border-left:0 !important;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{color:#fff;position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#fff, #f3f3f3);background:-o-linear-gradient(#fff, #f3f3f3);background:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));background:linear-gradient(#fff, #f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3, #fff);background:-o-linear-gradient(#f3f3f3, #fff);background:-webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff));background:linear-gradient(#f3f3f3, #fff);background-color:#f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7;background-image:initial;text-indent:0;text-align:center;font-size:18px;line-height:26px}.dp-numberPicker,.dp-numberPicker-add,.dp-numberPicker-sub,.dp-numberPicker-input{display:inline-block;box-sizing:border-box;-moz-box-sizing:border-box;text-align:center;vertical-align:top;height:30px}.dp-numberPicker{border-radius:3px}.redux-container .redux-container-spinner .dp-numberPicker-add,.redux-container .redux-container-spinner .dp-numberPicker-sub{width:30px;font-size:21px;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;background-color:#33b5e5;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);height:29px !important}.redux-container .redux-container-spinner .dp-numberPicker-add.disabled,.redux-container .redux-container-spinner .dp-numberPicker-sub.disabled{background-color:#2c6a81}.dp-numberPicker-add{border-top-right-radius:3px;border-bottom-right-radius:3px}.dp-numberPicker-sub{border-top-left-radius:3px;border-bottom-left-radius:3px}.dp-numberPicker-input{width:70px;background-color:#eee;border:0;margin:0 !important;box-shadow:inset 0px 1px 1px rgba(255,255,255,0.5),inset 0px -1px 1px rgba(0,0,0,0.5)}.dp-numberPicker-input:disabled{background-color:#eee}.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable,.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;-webkit-border-radius:3px 0px 0px 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;-webkit-border-radius:0px 3px 3px 0px}.redux-container-switch .cb-disable.selected{color:#fff}.redux-container-text label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999;margin:4px 0 2px 0 !important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .redux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .redux-typography-slider{margin-top:11px;width:auto}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix::after{visibility:hidden;display:block;font-size:0;content:\" \";clear:both;height:0}.redux-main .redux-typography-container input.wp-picker-default,.redux-main .redux-typography-container .redux-typography-color{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0 14px !important;margin-top:0;margin-bottom:0;font-size:12px !important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48% !important;min-width:210px !important;max-width:324px !important;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper:nth-child(even){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px !important;display:block;float:left;height:28px !important;line-height:50px !important;padding:0 !important;width:100% !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.margin-top,.redux-main .redux-typography-container .input_wrapper.margin-bottom{margin-left:0px}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;position:relative;margin:0;padding:0;width:100%;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{position:relative;font-size:12px !important;text-align:left;color:#999;width:100%;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted #d3d3d3;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0 none;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width: 540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0 !important;margin-right:0 !important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0 !important;margin-right:5px !important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px !important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width: 360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.wp-customizer .redux-typography-container .input_wrapper{width:40%;max-width:40%;min-width:20%}.wp-customizer .redux-typography-container .input_wrapper input.mini{width:70%}.wp-customizer .redux-typography-container .select_wrapper{width:100% !important}.redux-container-spacing select,.redux-container-spacing .select_wrapper{width:80px !important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-spacing .field-spacing-input input{display:inline-block !important;width:70px !important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}}.redux-main .form-table-section-indented{width:95%;margin-left:5% !important}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0px !important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.wp-customizer .redux-container{overflow:visible}.wp-customizer .redux-container .redux-main input{margin:0 !important}.wp-customizer .redux-container .redux-main input.spinner-input{margin-right:30px !important;margin-left:30px !important;margin-top:0px !important}.wp-customizer .redux-container .redux-main .redux-container-editor .wp-editor-area{color:#000000}.wp-customizer .redux-section.open .redux-group-tab{display:block !important}.wp-customizer .redux-section p.customize-section-description{margin-top:22px;word-break:break-word}.wp-customizer .redux-section p.customize-section-description.legacy{margin-top:7px}.wp-customizer .control-section-themes .accordion-section-title{margin:0}.wp-customizer #customize-controls .description{display:block}.wp-customizer #customize-controls .customize-info{margin-bottom:0}.wp-customizer #customize-controls .redux-section .accordion-section-content{background:#fcfcfc}.wp-customizer .redux-section .accordion-section-title i,.wp-customizer .redux-field .accordion-field-title i,.wp-customizer .redux-panel .accordion-section-title i{margin-right:5px}.wp-customizer .accordion-section.redux-main{background:inherit;margin-left:inherit;border-left:inherit;-moz-box-shadow:inherit;-webkit-box-shadow:inherit;padding:inherit;box-shadow:inherit}.wp-customizer .redux_field_th{padding:13px 0px 0px 0px}.wp-customizer .redux-main .redux-field-container{padding:10px 0}.wp-customizer .redux-main .select_wrapper{float:none;width:100%;display:inline-block}.wp-customizer .redux-main .select2-container{margin-right:0 !important;margin-bottom:5px !important;width:100% !important}.wp-customizer .redux-main .select_wrapper:nth-child(odd){margin-right:0}.wp-customizer .redux-main .redux-option-image{max-width:42% !important;margin-right:3%}.wp-customizer .redux-main .customize-control{border-bottom:1px solid #ddd;padding-bottom:4px}.wp-customizer .redux-main .customize-control:last-child{border-bottom:0;padding-bottom:0}.wp-customizer .redux-main .upload{width:100% !important}.wp-customizer .redux-main h3{margin-top:inherit}.wp-customizer .redux-main .redux-container-raw{margin-top:22px;word-break:break-word;padding:0 !important}.wp-customizer .redux-main .redux-container-password input{width:100%}.wp-customizer .select2-drop,.wp-customizer .select2-container{z-index:999999}.wp-customizer .customize-control-redux-raw{list-style:none}.redux-container-import_export #redux-import-link-wrapper,.redux-container-import_export #redux-import-code-wrapper{display:none}.redux-container-import_export #redux-export-code,.redux-container-import_export #redux-export-link-value,.redux-container-import_export #redux-import-upload-file{display:none}.redux-container-import_export #redux-import-action span{color:#b94a48}.redux-container-import_export #redux-import-upload span{font-weight:bold}#redux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%}\n"]}
|
1 |
+
{"version":3,"sources":["redux-fields.min.css"],"names":[],"mappings":"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","file":"redux-fields.min.css","sourcesContent":[".redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1 !important}.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select{width:200px !important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .redux-container-background .redux-background-position,.wp-customizer .redux-container-background .redux-background-position select,.wp-customizer .redux-container-background .redux-background-attachment,.wp-customizer .redux-container-background .redux-background-attachment select,.wp-customizer .redux-container-background .redux-background-clip,.wp-customizer .redux-container-background .redux-background-clip select,.wp-customizer .redux-container-background .redux-background-origin,.wp-customizer .redux-container-background .redux-background-origin select,.wp-customizer .redux-container-background .redux-background-size,.wp-customizer .redux-container-background .redux-background-size select,.wp-customizer .redux-container-background .redux-background-repeat,.wp-customizer .redux-container-background .redux-background-repeat select{width:100% !important}.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-border .field-border-input input{display:inline-block !important;width:100px !important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}}.redux-main .redux-container-box_shadow .box-shadow-inset{margin:0 auto}.redux-main .redux-container-box_shadow .box-shadow-inset #shadow-result{padding:20px;margin-bottom:20px;margin-top:20px;min-height:180px;border:0px solid #ddd;background:#f1f1f1;transition:all 0.2s ease}.redux-main .redux-container-box_shadow .box-shadow-inset .row-content:after,.redux-main .redux-container-box_shadow .box-shadow-inset .row:after{clear:both;content:\" \";display:block;height:0;visibility:hidden}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2{width:50%;float:left;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2.disabled label strong{color:#cccccc}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 label{color:#999999}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled{pointer-events:none;opacity:0.4;z-index:200;background:0;padding:0 !important}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled button{background-color:#888}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 .wp-picker-container.disabled a{z-index:-1}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2 ul li{padding-bottom:10px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:first-child{padding-right:20px}.redux-main .redux-container-box_shadow .box-shadow-inset .row .col-2:last-child{padding-left:20px}.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.redux-container-color_gradient .redux-gradient-preview{height:150px;margin-top:10px;border-radius:4px}.redux-container-color_gradient .colorGradient,.redux-container-color_gradient .redux-gradient-type{display:inline-block;margin-right:20px}.redux-container-color_gradient .colorGradient strong,.redux-container-color_gradient .redux-gradient-type strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;color:#999}@media screen and (max-width: 660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center !important}}.redux-main .redux-container-color_palette label{position:relative;display:inline-block;padding:0;margin:0}.redux-main .redux-container-color_palette .colors-wrapper{max-height:300px;overflow-y:auto;padding:10px;display:flex;flex-wrap:wrap}.redux-main .redux-container-color_palette .colors-wrapper .color-palette-color{color:transparent;display:block;width:100%;height:100%;overflow:hidden;border:1px solid rgba(0,0,0,0.2)}.redux-main .redux-container-color_palette .colors-wrapper.round label{padding:3px}.redux-main .redux-container-color_palette .colors-wrapper.round .color-palette-color{border-radius:50%}.redux-main .redux-container-color_palette .colors-wrapper.box-shadow .color-palette-color{box-shadow:inset 3px 3px 13px 2px rgba(0,0,0,0.22)}.redux-main .redux-container-color_palette .colors-wrapper input{display:none}.redux-main .redux-container-color_palette .colors-wrapper input:checked+label .color-palette-color{border:0;width:130%;height:130%;position:relative;left:-15%;top:-15%;z-index:99;box-shadow:1px 1px 6px 1px #333333;border:1px solid rgba(0,0,0,0.3)}.redux-main .redux-container-color_palette .colors-wrapper.with-margin label{margin:3px !important}.sp-container{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer:focus,.sp-replacer:hover,.sp-replacer.focus,.sp-replacer.hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer:focus,.sp-replacer.focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5)}#ui-datepicker-div{z-index:15 !important}.ui-datepicker-header{background-color:#00abef}.redux-dimensions-container select,.redux-dimensions-container .select_wrapper{width:80px !important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block !important;width:100px !important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}}.redux-main .divide{height:20px;line-height:20px;float:none;border-color:#e7e7e7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.redux-main .divide .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.redux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .redux-container-divide .divide .inner{width:82% !important;left:18% !important;margin-left:-8%}.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border-style:none;border:0;border-width:0}.redux-container-editor .wp-editor-container{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-editor .wp-editor-container textarea{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial, Helvetica, sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));background-image:-webkit-linear-gradient(bottom, #e3e3e3, #fff);background-image:-moz-linear-gradient(bottom, #e3e3e3, #fff);background-image:-o-linear-gradient(bottom, #e3e3e3, #fff);background-image:linear-gradient(to top, #e3e3e3, #fff)}.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0 !important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select .tiles{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type=\"radio\"]{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected img,.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a}.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0 !important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eee;border-color:#ccc;color:#666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0 !important}.redux-notice-field p{margin:0.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-main .redux-field-container.redux-container-info{padding:0}.wp-customizer .hasIcon.redux-notice-field .redux-info-desc,.wp-customizer .hasIcon.redux-info-field .redux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.redux-notice-field .redux-info-icon,.wp-customizer .hasIcon.redux-info-field .redux-info-icon{float:left}.wp-customizer .redux-main .customize-control.customize-control-redux-info{border-bottom:0}.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-container-link_color .linkColor strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;font-weight:normal;color:#999}.redux-main .redux-media-slider{width:40%;display:inline-block;margin-left:30px}.redux-main .redux-media-filter-container{padding-top:20px}.redux-main .redux-media-filter-container .container-label{margin-bottom:20px;padding-bottom:1px;border-bottom:1px solid #e7e7e7;font-weight:600;font-size:12px;color:#999}.redux-main .redux-media-filter-container .media-filter{display:inline-block;width:47%;margin-bottom:5px}.redux-main .redux-media-filter-container .media-filter label{display:inline-block;width:130px;color:#999}.redux-main .redux-media-filter-container .media-filter label.disabled .filter-value{color:#ccc}.redux-container-palette label{border:3px solid transparent;border-color:transparent !important;border-radius:0;width:100% !important;display:block}.redux-container-palette label.ui-button.ui-widget{width:95%;background:none;padding:0;display:flex}.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon,.redux-container-palette label.ui-button.ui-widget .ui-checkboxradio-icon-space{display:none}.redux-container-palette label.ui-button.ui-widget span{padding:10px;flex-grow:1;font-size:0;line-height:10px;color:rgba(0,0,0,0);-webkit-transition:all 200ms ease-in-out;-moz-transition:all 200ms ease-in-out;-ms-transition:all 200ms ease-in-out;-o-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out;text-shadow:0}.redux-container-palette label.ui-button.ui-widget span:hover{flex-grow:3;font-weight:bold;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff, 0 0 8px #fff}.redux-container-palette label.ui-state-active{border:3px solid #333 !important}.wp-customizer .redux-main .redux-container-palette label{margin-bottom:3px}.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-add{clear:both;margin:5px 0}.redux-container-multi_text a.redux-multi-text-remove.deletion{color:#f00;padding:2px 4px;margin-left:5px}.redux-container-multi_text a.redux-multi-text-remove.deletion:hover{background:#ff0;color:#fff;text-decoration:none}@media screen and (max-width: 782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.wp-customizer .redux-container-multi_text .button{float:right}.wp-customizer .redux-container-multi_text .redux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .redux-container-multi_text ul.redux-multi-text input{width:100% !important}.redux-main .form-table-section-indented{width:95%;margin-left:5% !important}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0px !important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.select2-search__field{width:none !important}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove,.select2-container--classic .select2-selection--single .select2-selection__clear{font-size:1.2em}.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px !important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.redux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.redux-container-slider{text-align:center}.redux-container-slider input,.redux-container-slider select,.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container{display:block !important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.wp-customizer .redux-container-slider .redux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .redux-container-slider .redux-slider-input,.wp-customizer .redux-container-slider .redux-slider-select-one,.wp-customizer .redux-container-slider .redux-slider-select-two{width:25% !important}.wp-customizer .redux-container-slider .redux-slider-container{width:70%;margin-right:0;margin-left:5%}.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf !important;border-radius:3px !important;margin-top:0px !important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move !important;font-weight:bold;padding:0 10px !important;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d !important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:bold}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides input{width:100% !important}.wp-customizer .redux-container-slides .ui-accordion .ui-accordion-content{padding:10px}.redux-container-sortable i.el,.redux-container-sortable i.dashicons-menu{cursor:move;padding-top:5px}.redux-container-sortable label{margin-right:10px}.redux-container-sortable label.bugger{margin-bottom:0px !important;font-size:12px !important;color:#999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:100%}.redux-container-sortable .checkbox-container label{margin-bottom:2px !important;cursor:inherit}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.checkbox li{padding:5px 10px;border:1px solid #333;background:#fff;margin-bottom:5px !important}.redux-container-sortable ul.checkbox li .dashicons.visibility{padding-top:4px;margin-right:10px;cursor:pointer}.redux-container-sortable ul.checkbox li.invisible{color:#aaa;border:1px dashed #aaa}.redux-container-sortable ul.checkbox li.invisible .dashicons.visibility{color:#aaa}.redux-container-sortable ul.labeled li{line-height:1.4em !important}.redux-container-sortable li{line-height:30px !important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.wp-customizer .redux-sortable input[type=\"text\"]{width:92%}.wp-customizer .redux-sortable i.el{margin-left:5px}.wp-customizer .redux-container-sortable .checkbox-container{width:inherit}.wp-customizer .redux-container-sortable .ui-draggable-handle{margin-left:3%}.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#f9f9f9;border:1px solid #e3e3e3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:0.7;filter:alpha(opacity=70);background:#efecec}.redux-container-sorter ul li{border:1px solid #dfdfdf;cursor:move;font-weight:bold;margin-bottom:10px !important;padding:0 10px;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(to bottom, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.wp-customizer .redux-container-sorter ul{width:85%;margin:0 0 5px 0}.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative !important;z-index:1;width:75px !important;height:30px !important;background:#eee !important;border:1px solid #bfbfbf !important;border-right:0 !important;border-left:0 !important;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{color:#fff;position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#fff, #f3f3f3);background:-o-linear-gradient(#fff, #f3f3f3);background:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));background:linear-gradient(#fff, #f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3, #fff);background:-o-linear-gradient(#f3f3f3, #fff);background:-webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff));background:linear-gradient(#f3f3f3, #fff);background-color:#f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7;background-image:initial;text-indent:0;text-align:center;font-size:18px;line-height:26px}.dp-numberPicker,.dp-numberPicker-add,.dp-numberPicker-sub,.dp-numberPicker-input{display:inline-block;box-sizing:border-box;-moz-box-sizing:border-box;text-align:center;vertical-align:top;height:30px}.dp-numberPicker{border-radius:3px}.redux-container .redux-container-spinner .dp-numberPicker-add,.redux-container .redux-container-spinner .dp-numberPicker-sub{width:30px;font-size:21px;cursor:pointer;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;background-color:#33b5e5;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);height:29px !important}.redux-container .redux-container-spinner .dp-numberPicker-add.disabled,.redux-container .redux-container-spinner .dp-numberPicker-sub.disabled{background-color:#2c6a81}.dp-numberPicker-add{border-top-right-radius:3px;border-bottom-right-radius:3px}.dp-numberPicker-sub{border-top-left-radius:3px;border-bottom-left-radius:3px}.dp-numberPicker-input{width:70px;background-color:#eee;border:0;margin:0 !important;box-shadow:inset 0px 1px 1px rgba(255,255,255,0.5),inset 0px -1px 1px rgba(0,0,0,0.5)}.dp-numberPicker-input:disabled{background-color:#eee}.redux-container-spacing select,.redux-container-spacing .select_wrapper{width:80px !important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-spacing .field-spacing-input input{display:inline-block !important;width:70px !important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}}.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable,.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;-webkit-border-radius:3px 0px 0px 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;-webkit-border-radius:0px 3px 3px 0px}.redux-container-switch .cb-disable.selected{color:#fff}.redux-container-text label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999;margin:4px 0 2px 0 !important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .redux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .redux-typography-slider{margin-top:11px;width:auto}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix::after{visibility:hidden;display:block;font-size:0;content:\" \";clear:both;height:0}.redux-main .redux-typography-container input.wp-picker-default,.redux-main .redux-typography-container .redux-typography-color{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0 14px !important;margin-top:0;margin-bottom:0;font-size:12px !important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48% !important;min-width:210px !important;max-width:324px !important;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper:nth-child(even){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px !important;display:block;float:left;height:28px !important;line-height:50px !important;padding:0 !important;width:100% !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.margin-top,.redux-main .redux-typography-container .input_wrapper.margin-bottom{margin-left:0px}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;position:relative;margin:0;padding:0;width:100%;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{position:relative;font-size:12px !important;text-align:left;color:#999;width:100%;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted #d3d3d3;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0 none;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width: 540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0 !important;margin-right:0 !important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0 !important;margin-right:5px !important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px !important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width: 360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.wp-customizer .redux-typography-container .input_wrapper{width:40%;max-width:40%;min-width:20%}.wp-customizer .redux-typography-container .input_wrapper input.mini{width:70%}.wp-customizer .redux-typography-container .select_wrapper{width:100% !important}.wp-customizer .redux-container{overflow:visible}.wp-customizer .redux-container .redux-main input{margin:0 !important}.wp-customizer .redux-container .redux-main input.spinner-input{margin-right:30px !important;margin-left:30px !important;margin-top:0px !important}.wp-customizer .redux-container .redux-main .redux-container-editor .wp-editor-area{color:#000000}.wp-customizer .redux-section.open .redux-group-tab{display:block !important}.wp-customizer .redux-section p.customize-section-description{margin-top:22px;word-break:break-word}.wp-customizer .redux-section p.customize-section-description.legacy{margin-top:7px}.wp-customizer .control-section-themes .accordion-section-title{margin:0}.wp-customizer #customize-controls .description{display:block}.wp-customizer #customize-controls .customize-info{margin-bottom:0}.wp-customizer #customize-controls .redux-section .accordion-section-content{background:#fcfcfc}.wp-customizer .redux-section .accordion-section-title i,.wp-customizer .redux-field .accordion-field-title i,.wp-customizer .redux-panel .accordion-section-title i{margin-right:5px}.wp-customizer .accordion-section.redux-main{background:inherit;margin-left:inherit;border-left:inherit;-moz-box-shadow:inherit;-webkit-box-shadow:inherit;padding:inherit;box-shadow:inherit}.wp-customizer .redux_field_th{padding:13px 0px 0px 0px}.wp-customizer .redux-main .redux-field-container{padding:10px 0}.wp-customizer .redux-main .select_wrapper{float:none;width:100%;display:inline-block}.wp-customizer .redux-main .select2-container{margin-right:0 !important;margin-bottom:5px !important;width:100% !important}.wp-customizer .redux-main .select_wrapper:nth-child(odd){margin-right:0}.wp-customizer .redux-main .redux-option-image{max-width:42% !important;margin-right:3%}.wp-customizer .redux-main .customize-control{border-bottom:1px solid #ddd;padding-bottom:4px}.wp-customizer .redux-main .customize-control:last-child{border-bottom:0;padding-bottom:0}.wp-customizer .redux-main .upload{width:100% !important}.wp-customizer .redux-main h3{margin-top:inherit}.wp-customizer .redux-main .redux-container-raw{margin-top:22px;word-break:break-word;padding:0 !important}.wp-customizer .redux-main .redux-container-password input{width:100%}.wp-customizer .select2-drop,.wp-customizer .select2-container{z-index:999999}.wp-customizer .customize-control-redux-raw{list-style:none}.redux-container-import_export #redux-import-link-wrapper,.redux-container-import_export #redux-import-code-wrapper{display:none}.redux-container-import_export #redux-export-code,.redux-container-import_export #redux-export-link-value,.redux-container-import_export #redux-import-upload-file{display:none}.redux-container-import_export #redux-import-action span{color:#b94a48}.redux-container-import_export #redux-import-upload span{font-weight:bold}#redux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%}\n"]}
|
redux-core/assets/css/vendor.css
CHANGED
@@ -891,6 +891,82 @@
|
|
891 |
.select2-container--classic.select2-container--open .select2-dropdown { border-color: #5897fb; }
|
892 |
|
893 |
/*! jQuery UI Bootstrap (0.5) http://addyosmani.github.com/jquery-ui-bootstrap Copyright 2012 - 2013, Addy Osmani Dual licensed under the MIT or GPL Version 2 licenses. Portions copyright jQuery UI & Twitter Bootstrap */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
894 |
.redux-container, .control-section-redux, .control-panel-redux, .redux-metabox { /* Interaction Cues
|
895 |
----------------------------------*/ /* Icons ----------------------------------*/ /* states and images */ /* Misc visuals ----------------------------------*/ /* jQuery UI CSS Framework 1.10.0 Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license To view and modify this theme, visit http://jqueryui.com/themeroller/ */ /* Component containers ----------------------------------*/ /* Interaction states ----------------------------------*/ /* Interaction Cues ----------------------------------*/ /* For IE8 - See #6059 */ /* Icons ----------------------------------*/ /* states and images */ /* positioning */ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ /* Misc visuals ----------------------------------*/ /* Corner radius */ /* Overlays */ /* jQuery UI Accordion 1.10.0 Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license http://jqueryui.com/accordion/ */ /* IE/Win - Fix animation bug - #4615 */ /* jQuery UI Button 1.10.0 Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license http://docs.jquery.com/UI/Button#theming */ /* the overflow property removes extra width in IE */ /* to make room for the icon, a width needs to be set here */ /* button elements seem to need a little more width */ /*button text element */ /* no icon support for input elements, provide padding by default */ /* input.ui-button { padding: .4em 1em; } */ /*button icon element(s) */ /*button sets*/ /* workarounds */ /* reset extra padding in Firefox */ /* jQuery UI Datepicker 1.9.0 Copyright 2012-10-11, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license http://jqueryui.com/datepicker/ */ /* with multiple calendars */ /* RTL support */ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ }
|
896 |
|
@@ -1924,6 +2000,6 @@ See http://bgrins.github.io/spectrum/themes/ for instructions.
|
|
1924 |
/* Blocked state; */
|
1925 |
.noUi-state-blocked.noUi-connect, .noUi-state-blocked .noUi-connect { background: #4fdacf; }
|
1926 |
|
1927 |
-
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLmNzcyIsInNvdXJjZXMiOlsidmVuZG9yLnNjc3MiLCJlbHVzaXZlLWljb25zL2VsdXNpdmUtaWNvbnMuc2NzcyIsInNlbGVjdDIvc2VsZWN0Mi5zY3NzIiwic2VsZWN0Mi9jb3JlLnNjc3MiLCJzZWxlY3QyL19zaW5nbGUuc2NzcyIsInNlbGVjdDIvX211bHRpcGxlLnNjc3MiLCJzZWxlY3QyL19kcm9wZG93bi5zY3NzIiwic2VsZWN0Mi90aGVtZS9kZWZhdWx0L2xheW91dC5zY3NzIiwic2VsZWN0Mi90aGVtZS9kZWZhdWx0L19zaW5nbGUuc2NzcyIsInNlbGVjdDIvdGhlbWUvZGVmYXVsdC9fbXVsdGlwbGUuc2NzcyIsInNlbGVjdDIvdGhlbWUvY2xhc3NpYy9sYXlvdXQuc2NzcyIsInNlbGVjdDIvdGhlbWUvY2xhc3NpYy9fZGVmYXVsdHMuc2NzcyIsInNlbGVjdDIvbWl4aW5zL19ncmFkaWVudHMuc2NzcyIsInNlbGVjdDIvdGhlbWUvY2xhc3NpYy9fc2luZ2xlLnNjc3MiLCJzZWxlY3QyL3RoZW1lL2NsYXNzaWMvX211bHRpcGxlLnNjc3MiLCJqcXVlcnktdWktMS4xMC4wLmN1c3RvbS5zY3NzIiwicXRpcC5zY3NzIiwic3BlY3RydW0uc2NzcyIsIm5vdWlzbGlkZXIuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FDQUEseUtBR0c7QUFDSCxVQUFVLEdBQ04sV0FBVyxFQUFFLGVBQWUsRUFDNUIsR0FBRyxFQUFFLG1EQUFtRCxFQUN4RCxHQUFHLEVBQUUsMERBQTBELENBQUMsMkJBQTJCLEVBQUUsb0RBQW9ELENBQUMsY0FBYyxFQUFFLG1EQUFtRCxDQUFDLGtCQUFrQixFQUFFLHVFQUF1RSxDQUFDLGFBQWEsRUFDL1QsV0FBVyxFQUFFLE1BQU0sRUFDbkIsVUFBVSxFQUFFLE1BQU07O0FBR3RCLEFBQUEsR0FBRyxDQUFDLEVBQ0EsT0FBTyxFQUFFLFlBQVksRUFDckIsSUFBSSxFQUFFLDJDQUEyQyxFQUNqRCxTQUFTLEVBQUUsT0FB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QUFBLGVBQWUsQUFBQSxRQUFRLEVBQ3ZCLFVBQVUsQUFBQSxRQUFRLENBQUMsRUFDZixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGVBQWUsQUFBQSxRQUFRLEVBQ3ZCLFVBQVUsQUFBQSxRQUFRLENBQUMsRUFDZixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLFlBQVksQUFBQSxRQUFRLEVBQ3BCLE9BQU8sQUFBQSxRQUFRLENBQUMsRUFDWixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGFBQWEsQUFBQSxRQUFRLEVBQ3JCLFFBQVEsQUFBQSxRQUFRLENBQUMsRUFDYixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGVBQWUsQUFBQSxRQUFRLEVBQ3ZCLFVBQVUsQUFBQSxRQUFRLENBQUMsRUFDZixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGtCQUFrQixBQUFBLFFBQVEsRUFDMUIsYUFBYSxBQUFBLFFBQVEsQ0FBQyxFQUNsQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLG1CQUFtQixBQUFBLFFBQVEsRUFDM0IsY0FBYyxBQUFBLFFBQVEsQ0FBQyxFQUNuQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGNBQWMsQUFBQSxRQUFRLEVBQ3RCLFNBQVMsQUFBQSxRQUFRLENBQUMsRUFDZCxPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGtCQUFrQixBQUFBLFFBQVEsRUFDMUIsYUFBYSxBQUFBLFFBQVEsQ0FBQyxFQUNsQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGNBQWMsQUFBQSxRQUFRLEVBQ3RCLFNBQVMsQUFBQSxRQUFRLENBQUMsRUFDZCxPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGtCQUFrQixBQUFBLFFBQVEsRUFDMUIsYUFBYSxBQUFBLFFBQVEsQ0FBQyxFQUNsQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLG9CQUFvQixBQUFBLFFBQVEsRUFDNUIsZUFB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 */
|
891 |
.select2-container--classic.select2-container--open .select2-dropdown { border-color: #5897fb; }
|
892 |
|
893 |
/*! jQuery UI Bootstrap (0.5) http://addyosmani.github.com/jquery-ui-bootstrap Copyright 2012 - 2013, Addy Osmani Dual licensed under the MIT or GPL Version 2 licenses. Portions copyright jQuery UI & Twitter Bootstrap */
|
894 |
+
#redux-dialog-confirm, #redux-dialog-message { display: none; }
|
895 |
+
|
896 |
+
.redux-support-dialog.ui-dialog, .redux-message-dialog.ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; outline: 0; background-color: #ffffff; }
|
897 |
+
|
898 |
+
.redux-support-dialog.ui-dialog .ui-dialog-buttonpane, .redux-message-dialog.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; padding: .3em 1em .5em .4em; }
|
899 |
+
|
900 |
+
.redux-support-dialog.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset, .redux-message-dialog.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
901 |
+
|
902 |
+
.redux-support-dialog.ui-dialog .ui-dialog-buttonpane button, .redux-message-dialog.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
903 |
+
|
904 |
+
.redux-support-dialog.ui-dialog .ui-dialog-titlebar, .redux-message-dialog.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
|
905 |
+
|
906 |
+
.redux-support-dialog.ui-dialog .ui-dialog-content, .redux-message-dialog.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; background-color: #ffffff; overflow: auto; }
|
907 |
+
|
908 |
+
.redux-support-dialog.ui-dialog .ui-dialog-title, .redux-message-dialog.ui-dialog .ui-dialog-title { float: left; margin: .1em 0; white-space: nowrap; width: 90%; overflow: hidden; text-overflow: ellipsis; }
|
909 |
+
|
910 |
+
.redux-support-dialog.ui-dialog .ui-dialog-titlebar-close, .redux-message-dialog.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 20px; margin: -10px 0 0 0; padding: 1px; height: 20px; }
|
911 |
+
|
912 |
+
.redux-support-dialog.ui-widget, .redux-message-dialog.ui-widget { font-family: Arial,Helvetica,sans-serif; font-size: 1em; }
|
913 |
+
|
914 |
+
.redux-support-dialog.ui-widget .ui-widget, .redux-message-dialog.ui-widget .ui-widget { font-size: 1em; }
|
915 |
+
|
916 |
+
.redux-support-dialog.ui-widget input, .redux-support-dialog.ui-widget select, .redux-support-dialog.ui-widget textarea, .redux-support-dialog.ui-widget button, .redux-message-dialog.ui-widget input, .redux-message-dialog.ui-widget select, .redux-message-dialog.ui-widget textarea, .redux-message-dialog.ui-widget button { font-family: Arial,Helvetica,sans-serif; font-size: 1em; }
|
917 |
+
|
918 |
+
.redux-support-dialog.ui-widget.ui-widget-content, .redux-message-dialog.ui-widget.ui-widget-content { border: 1px solid #c5c5c5; }
|
919 |
+
|
920 |
+
.redux-support-dialog.ui-draggable, .redux-support-dialog.ui-droppable, .redux-message-dialog.ui-draggable, .redux-message-dialog.ui-droppable { background-position: top; }
|
921 |
+
|
922 |
+
.redux-support-dialog.ui-corner-all, .redux-support-dialog.ui-corner-bottom, .redux-support-dialog.ui-corner-right, .redux-support-dialog.ui-corner-br, .redux-message-dialog.ui-corner-all, .redux-message-dialog.ui-corner-bottom, .redux-message-dialog.ui-corner-right, .redux-message-dialog.ui-corner-br { border-bottom-right-radius: 3px; }
|
923 |
+
|
924 |
+
.redux-support-dialog.ui-corner-all, .redux-support-dialog.ui-corner-bottom, .redux-support-dialog.ui-corner-left, .redux-support-dialog.ui-corner-bl, .redux-message-dialog.ui-corner-all, .redux-message-dialog.ui-corner-bottom, .redux-message-dialog.ui-corner-left, .redux-message-dialog.ui-corner-bl { border-bottom-left-radius: 3px; }
|
925 |
+
|
926 |
+
.redux-support-dialog.ui-corner-all, .redux-support-dialog.ui-corner-top, .redux-support-dialog.ui-corner-right, .redux-support-dialog.ui-corner-tr, .redux-message-dialog.ui-corner-all, .redux-message-dialog.ui-corner-top, .redux-message-dialog.ui-corner-right, .redux-message-dialog.ui-corner-tr { border-top-right-radius: 3px; }
|
927 |
+
|
928 |
+
.redux-support-dialog.ui-corner-all, .redux-support-dialog.ui-corner-top, .redux-support-dialog.ui-corner-left, .redux-support-dialog.ui-corner-tl, .redux-message-dialog.ui-corner-all, .redux-message-dialog.ui-corner-top, .redux-message-dialog.ui-corner-left, .redux-message-dialog.ui-corner-tl { border-top-left-radius: 3px; }
|
929 |
+
|
930 |
+
.redux-support-dialog .ui-widget-content, .redux-message-dialog .ui-widget-content { border: 1px solid #dddddd; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; background: #ffffff; background-image: none; color: #333333; }
|
931 |
+
|
932 |
+
.redux-support-dialog.ui-draggable .ui-dialog-titlebar, .redux-message-dialog.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
933 |
+
|
934 |
+
.redux-support-dialog .ui-widget-header, .redux-message-dialog .ui-widget-header { border: 1px solid #dddddd; background: #e9e9e9; color: #333333; font-weight: bold; }
|
935 |
+
|
936 |
+
.redux-support-dialog .ui-draggable-handle, .redux-message-dialog .ui-draggable-handle { -ms-touch-action: none; touch-action: none; }
|
937 |
+
|
938 |
+
.redux-support-dialog .ui-widget-content, .redux-message-dialog .ui-widget-content { border: 1px solid #dddddd; background: #ffffff; color: #333333; }
|
939 |
+
|
940 |
+
.redux-support-dialog .ui-helper-clearfix::before, .redux-support-dialog .ui-helper-clearfix::after, .redux-message-dialog .ui-helper-clearfix::before, .redux-message-dialog .ui-helper-clearfix::after { content: ""; display: table; border-collapse: collapse; }
|
941 |
+
|
942 |
+
.redux-support-dialog .ui-helper-clearfix::after, .redux-message-dialog .ui-helper-clearfix::after { clear: both; }
|
943 |
+
|
944 |
+
.redux-support-dialog .ui-state-default a, .redux-support-dialog .ui-state-default a:link, .redux-support-dialog .ui-state-default a:visited, .redux-support-dialog a.ui-button, .redux-support-dialog a:link.ui-button, .redux-support-dialog a:visited.ui-button, .redux-support-dialog .ui-button, .redux-message-dialog .ui-state-default a, .redux-message-dialog .ui-state-default a:link, .redux-message-dialog .ui-state-default a:visited, .redux-message-dialog a.ui-button, .redux-message-dialog a:link.ui-button, .redux-message-dialog a:visited.ui-button, .redux-message-dialog .ui-button { color: #454545; text-decoration: none; }
|
945 |
+
|
946 |
+
.redux-support-dialog .ui-state-default, .redux-support-dialog .ui-widget-content .ui-state-default, .redux-support-dialog .ui-widget-header .ui-state-default, .redux-support-dialog .ui-button, .redux-message-dialog .ui-state-default, .redux-message-dialog .ui-widget-content .ui-state-default, .redux-message-dialog .ui-widget-header .ui-state-default, .redux-message-dialog .ui-button { border: 1px solid #c5c5c5; background: #f6f6f6; font-weight: normal; color: #454; }
|
947 |
+
|
948 |
+
.redux-support-dialog .ui-button, .redux-message-dialog .ui-button { padding: .4em 1em; display: inline-block; position: relative; line-height: normal; margin-right: .1em; cursor: pointer; vertical-align: middle; text-align: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; overflow: visible; }
|
949 |
+
|
950 |
+
.redux-support-dialog .ui-button .ui-icon, .redux-message-dialog .ui-button .ui-icon { background-image: url("../../img/jquery-ui-bootstrap/ui-icons_777777_256x240.png"); }
|
951 |
+
|
952 |
+
.redux-support-dialog .ui-button-icon-only, .redux-message-dialog .ui-button-icon-only { text-indent: -9999px; white-space: nowrap; }
|
953 |
+
|
954 |
+
.redux-support-dialog .ui-button-icon-only .ui-icon, .redux-message-dialog .ui-button-icon-only .ui-icon { position: absolute; top: 50%; left: 50%; margin-top: -8px; margin-left: -8px; }
|
955 |
+
|
956 |
+
.redux-support-dialog .ui-icon-closethick, .redux-message-dialog .ui-icon-closethick { background-position: -96px -128px; }
|
957 |
+
|
958 |
+
.redux-support-dialog .ui-icon, .redux-support-dialog .ui-widget-content .ui-icon, .redux-message-dialog .ui-icon, .redux-message-dialog .ui-widget-content .ui-icon { background-image: url("../../img/jquery-ui-bootstrap/ui-icons_444444_256x240.png"); }
|
959 |
+
|
960 |
+
.redux-support-dialog .ui-icon-alert, .redux-message-dialog .ui-icon-alert { background-position: 0 -144px; }
|
961 |
+
|
962 |
+
.redux-support-dialog .ui-icon-circle-check, .redux-message-dialog .ui-icon-circle-check { background-position: -208px -192px; }
|
963 |
+
|
964 |
+
.redux-support-dialog .ui-icon, .redux-message-dialog .ui-icon { width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-top: -.25em; position: relative; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
965 |
+
|
966 |
+
.ui-widget-overlay { background: #aaaaaa; opacity: .3; filter: Alpha(Opacity=30); position: fixed; top: 0; left: 0; width: 100%; height: 100%; }
|
967 |
+
|
968 |
+
.ui-front { z-index: 100; }
|
969 |
+
|
970 |
.redux-container, .control-section-redux, .control-panel-redux, .redux-metabox { /* Interaction Cues
|
971 |
----------------------------------*/ /* Icons ----------------------------------*/ /* states and images */ /* Misc visuals ----------------------------------*/ /* jQuery UI CSS Framework 1.10.0 Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license To view and modify this theme, visit http://jqueryui.com/themeroller/ */ /* Component containers ----------------------------------*/ /* Interaction states ----------------------------------*/ /* Interaction Cues ----------------------------------*/ /* For IE8 - See #6059 */ /* Icons ----------------------------------*/ /* states and images */ /* positioning */ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ /* Misc visuals ----------------------------------*/ /* Corner radius */ /* Overlays */ /* jQuery UI Accordion 1.10.0 Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license http://jqueryui.com/accordion/ */ /* IE/Win - Fix animation bug - #4615 */ /* jQuery UI Button 1.10.0 Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license http://docs.jquery.com/UI/Button#theming */ /* the overflow property removes extra width in IE */ /* to make room for the icon, a width needs to be set here */ /* button elements seem to need a little more width */ /*button text element */ /* no icon support for input elements, provide padding by default */ /* input.ui-button { padding: .4em 1em; } */ /*button icon element(s) */ /*button sets*/ /* workarounds */ /* reset extra padding in Firefox */ /* jQuery UI Datepicker 1.9.0 Copyright 2012-10-11, AUTHORS.txt (http://jqueryui.com/about) Dual licensed under the MIT or GPL Version 2 licenses. http://jquery.org/license http://jqueryui.com/datepicker/ */ /* with multiple calendars */ /* RTL support */ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ }
|
972 |
|
2000 |
/* Blocked state; */
|
2001 |
.noUi-state-blocked.noUi-connect, .noUi-state-blocked .noUi-connect { background: #4fdacf; }
|
2002 |
|
2003 |
+
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLmNzcyIsInNvdXJjZXMiOlsidmVuZG9yLnNjc3MiLCJlbHVzaXZlLWljb25zL2VsdXNpdmUtaWNvbnMuc2NzcyIsInNlbGVjdDIvc2VsZWN0Mi5zY3NzIiwic2VsZWN0Mi9jb3JlLnNjc3MiLCJzZWxlY3QyL19zaW5nbGUuc2NzcyIsInNlbGVjdDIvX211bHRpcGxlLnNjc3MiLCJzZWxlY3QyL19kcm9wZG93bi5zY3NzIiwic2VsZWN0Mi90aGVtZS9kZWZhdWx0L2xheW91dC5zY3NzIiwic2VsZWN0Mi90aGVtZS9kZWZhdWx0L19zaW5nbGUuc2NzcyIsInNlbGVjdDIvdGhlbWUvZGVmYXVsdC9fbXVsdGlwbGUuc2NzcyIsInNlbGVjdDIvdGhlbWUvY2xhc3NpYy9sYXlvdXQuc2NzcyIsInNlbGVjdDIvdGhlbWUvY2xhc3NpYy9fZGVmYXVsdHMuc2NzcyIsInNlbGVjdDIvbWl4aW5zL19ncmFkaWVudHMuc2NzcyIsInNlbGVjdDIvdGhlbWUvY2xhc3NpYy9fc2luZ2xlLnNjc3MiLCJzZWxlY3QyL3RoZW1lL2NsYXNzaWMvX211bHRpcGxlLnNjc3MiLCJqcXVlcnktdWktMS4xMC4wLmN1c3RvbS5zY3NzIiwicXRpcC5zY3NzIiwic3BlY3RydW0uc2NzcyIsIm5vdWlzbGlkZXIuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FDQUEseUtBR0c7QUFDSCxVQUFVLEdBQ04sV0FBVyxFQUFFLGVBQWUsRUFDNUIsR0FBRyxFQUFFLG1EQUFtRCxFQUN4RCxHQUFHLEVBQUUsMERBQTBELENBQUMsMkJBQTJCLEVBQUUsb0RBQW9ELENBQUMsY0FBYyxFQUFFLG1EQUFtRCxDQUFDLGtCQUFrQixFQUFFLHVFQUF1RSxDQUFDLGFBQWEsRUFDL1QsV0FBVyxFQUFFLE1BQU0sRUFDbkIsVUFBVSxFQUFFLE1BQU07O0FBR3RCLEFBQUEsR0FBRyxDQUFDLEVBQ0EsT0FBTyxFQUFFLFlBQVksRUFDckIsSUFBSSxFQUFFLDJDQUEyQyxFQUNqRCxTQUFTLEVBQUUsT0FB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QUFBLGVBQWUsQUFBQSxRQUFRLEVBQ3ZCLFVBQVUsQUFBQSxRQUFRLENBQUMsRUFDZixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGVBQWUsQUFBQSxRQUFRLEVBQ3ZCLFVBQVUsQUFBQSxRQUFRLENBQUMsRUFDZixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLFlBQVksQUFBQSxRQUFRLEVBQ3BCLE9BQU8sQUFBQSxRQUFRLENBQUMsRUFDWixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGFBQWEsQUFBQSxRQUFRLEVBQ3JCLFFBQVEsQUFBQSxRQUFRLENBQUMsRUFDYixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGVBQWUsQUFBQSxRQUFRLEVBQ3ZCLFVBQVUsQUFBQSxRQUFRLENBQUMsRUFDZixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGtCQUFrQixBQUFBLFFBQVEsRUFDMUIsYUFBYSxBQUFBLFFBQVEsQ0FBQyxFQUNsQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLG1CQUFtQixBQUFBLFFBQVEsRUFDM0IsY0FBYyxBQUFBLFFBQVEsQ0FBQyxFQUNuQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGNBQWMsQUFBQSxRQUFRLEVBQ3RCLFNBQVMsQUFBQSxRQUFRLENBQUMsRUFDZCxPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGtCQUFrQixBQUFBLFFBQVEsRUFDMUIsYUFBYSxBQUFBLFFBQVEsQ0FBQyxFQUNsQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGNBQWMsQUFBQSxRQUFRLEVBQ3RCLFNBQVMsQUFBQSxRQUFRLENBQUMsRUFDZCxPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLGtCQUFrQixBQUFBLFFBQVEsRUFDMUIsYUFBYSxBQUFBLFFBQVEsQ0FBQyxFQUNsQixPQUFPLEVBQUUsSUFBSSxHQUNoQjs7QUFFRCxBQUFBLG9CQUFvQixBQUFBLFFBQVEsRUFDNUIsZUFB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
|