Redux Framework - Version 4.1.17

Version Description

  • Fixed: Edge case where enable Gutenberg notice doesn't disappear. Sorry everyone!
Download this release

Release Info

Developer dovyp
Plugin Icon 128x128 Redux Framework
Version 4.1.17
Comparing to
See all releases

Code changes from version 4.1.15 to 4.1.17

CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
  # Redux Changelog
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ## 4.1.15
4
  * Fixed: Defaults were not saving in some situations.
5
  * Added: Various fallback calls for JS when fetching opt_names.
@@ -14,7 +33,7 @@
14
  * Fixed: Select2 and required fixes.
15
  * Fixed: Customizer sidebar not showing in some cases.
16
  * Added: Google Fonts now load ~20% faster!!!
17
-
18
 
19
  ## 4.1.14
20
  * Added: Shim for ReduxFramework->get_default_value()
@@ -26,6 +45,7 @@
26
  * Fixed: Fix for servers that disable output buffers.
27
  * Fixed: Ajax now does not load anything else, faster calls.
28
  * Fixed: .folds replace issue when opt_name selector wasn't properly found.
 
29
 
30
  ## 4.1.13
31
  * Fixed: Major typography bug affecting saving in the panel as well as third-party extensions.
1
  # Redux Changelog
2
 
3
+ ## 4.1.17
4
+ * Fixed: Edge case where enable Gutenberg notice doesn't disappear.
5
+ * Release date: Aug 27, 2020
6
+
7
+ ## 4.1.16
8
+ * Fixed: Issue when null values were sent to Redux::set();
9
+ * Fixed: Default for Google fonts is now swap.
10
+ * Fixed: Fix for developers calling the API without checking for files.
11
+ * Fixed: Edge case for filter var not working on some sites.
12
+ * Fixed: Proper loading to override Redux 3 plugin.
13
+ * Added: Site name to WP data return.
14
+ * Fixed: Set height for library button when other plugins modify the CSS for the Gutenberg toolbar.
15
+ * Fixed: Don't show template messages on the front-end if an extension is missing. How did that get through?
16
+ * Fixed: Non-array values for WP data. Thanks @wilokecom.
17
+ * Added: Notification so users can enable Gutenberg when disabled.
18
+ * Added: Welcome guide to Gutenberg screen.
19
+ * Fixed: Some readme issues.
20
+ * Release date: Aug 26, 2020
21
+
22
  ## 4.1.15
23
  * Fixed: Defaults were not saving in some situations.
24
  * Added: Various fallback calls for JS when fetching opt_names.
33
  * Fixed: Select2 and required fixes.
34
  * Fixed: Customizer sidebar not showing in some cases.
35
  * Added: Google Fonts now load ~20% faster!!!
36
+ * Release date: Aug 19, 2020
37
 
38
  ## 4.1.14
39
  * Added: Shim for ReduxFramework->get_default_value()
45
  * Fixed: Fix for servers that disable output buffers.
46
  * Fixed: Ajax now does not load anything else, faster calls.
47
  * Fixed: .folds replace issue when opt_name selector wasn't properly found.
48
+ * Release date: Aug 11, 2020
49
 
50
  ## 4.1.13
51
  * Fixed: Major typography bug affecting saving in the panel as well as third-party extensions.
class-redux-framework-plugin.php CHANGED
@@ -318,6 +318,7 @@ if ( ! class_exists( 'Redux_Framework_Plugin', false ) ) {
318
  }
319
 
320
  delete_option( 'ReduxFrameworkPlugin' );
 
321
  }
322
 
323
  /**
318
  }
319
 
320
  delete_option( 'ReduxFrameworkPlugin' );
321
+ Redux_Enable_Gutenberg::cleanup_options( 'redux-framework' ); // Auto disable Gutenberg and all that.
322
  }
323
 
324
  /**
readme.txt CHANGED
@@ -1,292 +1,311 @@
1
- === Redux - Gutenberg Blocks Library & Framework ===
2
- Contributors: dovyp, redux
3
- Donate link: https://paypal.me/ReduxFramework
4
- Tags: gutenberg, blocks, gutenberg blocks, editor, block, page builder, block editor, block library, editor, templates, library
5
- Requires at least: 4.0
6
- Requires PHP: 5.3
7
- Tested up to: 5.5
8
- Stable tag: 4.1.15
9
- License: GPL-2.0+
10
- License URI: http://www.gnu.org/licenses/gpl-2.0.txt
11
-
12
- Supercharge the Gutenberg editor with our ever-growing library of block-based templates!
13
-
14
- == Description ==
15
- <strong>Redux - Quickly create full pages in WordPress’ Gutenberg</strong>
16
-
17
- Supercharge the Gutenberg editor with our ever-growing library of WordPress Blocks and templates. Discover what's possible and implement any design on your website in virtually no time at all.
18
-
19
- Worried that our templates may not work with your theme? We've got you covered. With our custom <em>page templates</em> option you can override any theme. Missing a plugin a template needs? No worries, we’ll even help you install what you need, all from the Gutenberg editor.
20
-
21
- Don’t waste hours trying to recreate a template you love. With a click of a button it is own website where you can start customizing it for your needs.
22
-
23
- <h4>♥️ What the Plugin does?</h4>
24
- <ul>
25
- <li><strong>Browse 1,000+</strong> templates from your Gutenberg Editor that you can add to your site immediately.</li>
26
- <li><strong>Preview</strong> each Gutenberg block based template in the customizer preview.</li>
27
- <li><strong>Filter</strong> between the dependencies you want, and find exactly what you're looking for.</li>
28
- <li><strong>See instantly</strong> which Gutenberg templates you have everything for, or may need to install some dependencies.</li>
29
- <li><strong>Automated install</strong> of anything you may need to install any template.</li>
30
- <li><strong>Block Patterns library</strong> support built in.</li>
31
- <li>Make the Reusable Blocks visible in our library modal window. 😉</li>
32
- <li>The most trusted option framework in the industry.</li>
33
- <li>Developer friendly: clean code, inline documentation</li>
34
- </ul>
35
-
36
- <h4>🚀 TYPICAL USE CASE OF THIS PLUGIN</h4>
37
- You are building a **big site** with **lots of pages** and you just want it to look amazing. With Redux you can begin making pages with a variety of "starter blocks," or templates.
38
-
39
- You can browse through the categories, as well as collections of like-styled pages. When you find something you like, Redux makes 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 exactly what you want it to be no matter what them you are using.
40
-
41
- 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 "starter block" for your needs.
42
-
43
- <h4>🎉 Supported Page Builders</h4>
44
- Currently Redux supports only the <a href="https://wordpress.org/plugins/gutenberg/"><strong>Gutenberg / Block Editor of WordPress 5.0+</strong></a>.
45
-
46
- <h4>🎨 Supported Themes</h4>
47
- Though Redux will work with any theme that uses Gutenberg, we have done extra work to ensure complete compatibility with these themes.
48
-
49
- <ul>
50
- <li><a href="https://wordpress.org/themes/astra/"><strong>Astra Theme</strong></a> with <strong>Astra Pro</strong> Add-On Plugin – <strong>Custom Layouts</strong> (for Layouts, Headers, Footers, Hooks)</li>
51
- <li><a href="https://wordpress.org/themes/generatepress/"><strong>GeneratePress Theme</strong></a> with <strong>GP Premium</strong> Add-On Plugin – <strong>Elements</strong> (for Layouts, Headers, Hooks)</li>
52
- <li><a href="https://wordpress.org/themes/oceanwp/"><strong>OceanWP Theme</strong></a> with <a href="https://wordpress.org/plugins/ocean-extra/"><strong>Ocean Extra</strong></a> free Add-On Plugin – <strong>My Library</strong> (for Layouts, Hooks etc.)</li>
53
- <li><strong>Kava Pro Theme/ CrocoBlock Service</strong> with JetThemeCore Plugin – <strong>My Library</strong> (for Layouts, Pages, Headers, Footers, Single, Archive)</li>
54
- <li><strong>Genesis Framework</strong> with Genesis Child Themes — via <strong>Blox Lite</strong> and <strong>Blox</strong> (Pro) Plugins – <strong>Global Content Blocks</strong> (for Sections, Hooks)</li>
55
- <li><strong>Page Builder Framework</strong> with <strong>WPBF Premium</strong> Add-On Plugin – <strong>Custom Section</strong> (for Sections, Layouts, Hooks etc.)</li>
56
- <li><strong>Customify</strong> with <strong>Customify Pro</strong> Add-On Plugin – <strong>Hooks</strong> (for Layouts, Sections, Hooks etc.)</li>
57
- <li><strong>Suki</strong> with <strong>Suki Pro</strong> Add-On Plugin – <strong>Custom Blocks</strong> (for Layouts, Sections, Hooks etc.)</li>
58
- <li><strong>Neve</strong> with <strong>Neve Pro</strong> Add-On Plugin – <strong>Custom Layouts</strong> (for Layouts, Sections, Hooks etc.)</li>
59
- <li><strong>Woostify</strong> with <strong>Woostify Pro</strong> Add-On Plugin – <strong>Header Footer Builder</strong> (for Elementor theming areas – Headers/ Footers)</li>
60
- <li><strong>Avada Theme</strong> with Avada Fusion Builder – <strong>Library</strong> (for Templates, Pages, Layouts, Columns, Rows)</li>
61
- <li><strong>Divi Theme</strong> with Divi Builder – <strong>Library</strong> (for Templates etc.)</li>
62
- <li><strong>Extra Theme</strong> with Divi Builder – <strong>Library</strong> (for Templates etc.) – <strong>Category Templates</strong> (for Layouts, Templates etc.)</li>
63
- </ul>
64
-
65
- <h4>📦 Supported Gutenberg-Specific Plugins (Block Editor)</h4>
66
- <ul>
67
- <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>
68
- <li><a href="https://wordpress.org/plugins/acf-blocks/"><strong>ACF Blocks Suite</strong></a> Plugin – <strong>Blocks</strong> (Fields for Gutenberg Blocks)</li>
69
- <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>
70
- <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>
71
- <li><a href="https://wordpress.org/plugins/block-options/"><strong>Gutenberg Page Building Toolkit – EditorsKit</strong></a> Plugin – <strong>Blocks</strong> (Templates &amp; Fields for Gutenberg Blocks)</li>
72
- <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>
73
- <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>
74
- <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>
75
- <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>
76
- <li><a href="https://wordpress.org/plugins/forms-gutenberg/"><strong>WordPress Form Builder Plugin – Gutenberg Forms</strong></a> Plugin – <strong>Blocks</strong> (Blocks &amp; Forms for Gutenberg Blocks)</li>
77
- <li><a href="https://wordpress.org/plugins/getwid/"><strong>Getwid – Gutenberg Blocks</strong></a> Plugin – <strong>Blocks</strong> (Templates &amp; Blocks for Gutenberg Blocks)</li>
78
- <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>
79
- <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>
80
- <li><a href="https://wordpress.org/plugins/kioken-blocks/"><strong>Page Builder Gutenberg Blocks – Kioken Blocks</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Blocks for Gutenberg Blocks)</li>
81
- <li><a href="https://wordpress.org/plugins/otter-blocks/"><strong>Gutenberg Blocks and Template Library by Otter</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Blocks and Templates for Gutenberg Blocks)</li>
82
- <li><a href="https://wordpress.org/plugins/qubely/"><strong>Gutenberg Blocks and Page Builder – Qubely</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Templates &amp; Blocks for Gutenberg Blocks)</li>
83
- <li><a href="https://wordpress.org/plugins/qodeblock/"><strong>Gutenberg Blocks Collection – qodeblock</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
84
- <li><a href="https://wordpress.org/plugins/stackable-ultimate-gutenberg-blocks/"><strong>Stackable – Page Builder Gutenberg Blocks</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Templates &amp; Blocks for Gutenberg Blocks)</li>
85
- <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>
86
- <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>
87
- </ul>
88
-
89
- <h4>☀️ Supported Gutenberg-Specific Services / Websites</h4>
90
- <ul>
91
- <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>
92
- <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>
93
- </ul>
94
-
95
- <h4>👍 BE A CONTRIBUTOR</h4>
96
- 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>.
97
-
98
- You can also contribute code-wise via our <a href="https://github.com/reduxframework/redux-framework-4/">GitHub Repository</a> – and see where you can help. Be sure to use our develop branch to submit pull requests.
99
-
100
- <h4>📝 Documentation and Support</h4>
101
- <ul>
102
- <li>For more information about features, FAQs and documentation, check out our website at <a href="https://docs.redux.io/" rel="nofollow ugc">Redux</a>.</li>
103
- <li>If you have any more questions, visit our support on the <a href="https://wordpress.org/support/plugin/redux-framework">Plugin's Forum</a>.</li>
104
- </ul>
105
-
106
- <h4>⚡ Like the Redux Plugin?</h4>
107
- <ul>
108
- <li>Follow us on <a href="https://www.facebook.com/reduxframework" rel="nofollow ugc">Facebook 💬</a></li>
109
- <li><strong>Rate us 5 ⭐ stars</strong> on <a href="https://wordpress.org/support/plugin/redux-framework/reviews/?filter=5/#new-post">WordPress.org</a></li>
110
- <li><a href="https://github.com/sponsors/dovy/" rel="nofollow ugc"><strong>Become a Sponsor</strong> 💜</a> and support ongoing development, maintenance and support of this plugin</li>
111
- <li>Follow us on Twitter 🐦: <a href="https://twitter.com/reduxframework" rel="nofollow ugc">@ReduxFramework</a> and <a href="https://twitter.com/dovyp" rel="nofollow ugc">@DovyP</a></li>
112
- </ul>
113
-
114
- <h4>🔐 Privacy</h4>
115
- Redux does not interact with end users on your website. Our templates will continue to work even if Redux is uninstalled. If a product is using Redux the option panel will cease to function without Redux.
116
-
117
- Redux utilizes [AppSero](https://appsero.com/) for account management as well as to enable our premium offerings. You can find their privacy policy here: [https://appsero.com/privacy-policy/](https://appsero.com/privacy-policy/). Activation of Redux is not necessary, but additional features such as Google Font Updates and increased access to the template library will be limited.
118
-
119
- The Redux plugin uses a custom API to fetch our content library and our Gutenberg templates. To improve the service and stability we store logs which may or may not contain the following:
120
- <ul>
121
- <li>browser type</li>
122
- <li>referring site</li>
123
- <li>date and time of request</li>
124
- <li>template ID requested</li>
125
- <li>date of cached version of the given API request</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.
132
-
133
- For more details on our privacy policy: [https://redux.io/privacy](https://redux.io/privacy)
134
- For more details on on our terms and conditions: [https://redux.io/terms](https://redux.io/terms)
135
-
136
- == Installation ==
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 can easily be dismissed.
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.1.15
156
- * Fixed: Defaults were not saving in some situations.
157
- * Added: Various fallback calls for JS when fetching opt_names.
158
- * Fixed: Warnings with Rest API due to WP 5.5.
159
- * Fixed: Subsets now are full-width in typography when rendered after page load.
160
- * Fixed: for subsets loading when font-family is not specified.
161
- * Added: No opt-in to tracking when embedded. Google Fonts and panel notices are still there though.
162
- * Fixed: Is local checks conflicting with some servers.
163
- * Fixed: WooCommerce race condition with their autoloader causing issues with some sites.
164
- * Updated: Complete overhaul of WordPress data class.
165
- * Fixed: Backtrace errors when blocked on servers.
166
- * Fixed: Select2 and required fixes.
167
- * Fixed: Customizer sidebar not showing in some cases.
168
- * Added: Google Fonts now load ~20% faster!!!
169
-
170
- = 4.1.14 =
171
- * Added: Shim for ReduxFramework->get_default_value()
172
- * Fixed: Local issue with WP and strtolower. Sites that couldn't find classes should work now.
173
- * Fixed: Ajax for select boxes is now working again.
174
- * Fixed: Autoloading to bypass other embedded versions of Redux.
175
- * Fixed: Customizer interactions are MUCH faster now. Had a greedy CSS selector before.
176
- * Fixed: If opt_names had multiple dashes in them, JS errors occurred by a non-global replace.
177
- * Fixed: Fix for servers that disable output buffers.
178
- * Fixed: Ajax now does not load anything else, faster calls.
179
- * Fixed: .folds replace issue when opt_name selector wasn't properly found.
180
- * Release date: Aug 11, 2020
181
-
182
- = 4.1.13 =
183
- * Fixed: Major typography bug affecting saving in the panel as well as third-party extensions.
184
- * Fixed: Customizer issue with some external extensions.
185
- * Added: Removed `FS_METHOD` define completely.
186
- * Release date: Aug 5, 2020
187
-
188
- = 4.1.12 =
189
- * Fixed: Direct calls to ReduxFramework were causing unexpected errors.
190
- * Fixed: JS error on .replace because opt_name wasn't found.
191
- * Added: `FS_METHOD` define location, had to move lower in the stack.
192
- * Release date: Aug 5, 2020
193
-
194
- = 4.1.11 =
195
- * Fixed: Templates JS not loading and conflicting with other plugins. Need to namespace or something.
196
- * Added: `FS_METHOD` define method for environments where it is not properly defined.
197
- * Release date: Aug 4, 2020
198
-
199
- = 4.1.10 =
200
- * Fixed: Minified templates directory now loads.
201
- * Added: Shadow files from old repo to stop errors from previously included third-party developer includes.
202
- * Release date: Aug 4, 2020
203
-
204
- = 4.1.9 =
205
- * Fixed: Compatibility issue when developers made custom panel templates. The opt_name wasn't fetched and thus saving broke.
206
- * Release date: Aug 1, 2020
207
-
208
- = 4.1.8 =
209
- * Fixed: Map files are now all present.
210
- * Fixed: Path fix for how developers called the typography file directory.
211
- * Release date: Aug 1, 2020
212
-
213
- = 4.1.7 =
214
- * Fixed: Issue with sortable in text mode not properly passing the name attribute and thus not saving properly.
215
- * Fixed: Compatibility with old extension names to not crash other plugins.
216
- * Release date: July 31, 2020
217
-
218
- = 4.1.6 =
219
- * Fixed: Issue with customizer double loading the PHP classes and causing an exception.
220
- * Fixed: Chanced a class name as to not conflict with a 6+ year old version of Redux.
221
- * Release date: July 30, 2020
222
-
223
- = 4.1.5 =
224
- * Fixed: Google fonts not working when old configs used string vs an array for output.
225
- * Release date: July 30, 2020
226
-
227
- = 4.1.4 =
228
- * Fixed: Google fonts loading over non-secure breaks fonts. Forced all SSL for Google fonts. :)
229
- * Release date: July 30, 2020
230
-
231
- = 4.1.3 =
232
- * Fixed: Issue where theme devs tried to bypass the framework. Literally I made an empty file to fix their coding. :P
233
- * Release date: July 29, 2020
234
-
235
- = 4.1.2 =
236
- * Fixed: Don't try to set empty defaults when none are present.
237
- * Fixed: Issue where the WP Data argument was misused.
238
- * Release date: July 29, 2020
239
-
240
- = 4.1.1 =
241
- * Fixed: CSS decode when esc_attr replaces the HTML characters and CSS outputs are set with >'s.
242
- * Release date: July 29, 2020
243
-
244
- = 4.1.0 =
245
- * Fixed: Compatibility with certain themes using the deprecated $_is_plugin variable.
246
- * Release date: July 29, 2020
247
-
248
- = 4.0.9 =
249
- * Fixed: Complete compatibility fix for older Redux extensions.
250
- * Release date: July 28, 2020
251
-
252
- = 4.0.8 =
253
- * Fixed: Initial library load was failing on some server setups.
254
- * Release date: July 28, 2020
255
-
256
- = 4.0.7 =
257
- * Fixed: Race condition for PHP include for Redux_Typography causing blank white screens.
258
- * Release date: July 28, 2020
259
-
260
- = 4.0.5 =
261
- * Fixed: Issues where the site crashes because of varied ways Redux was called.
262
- * Fixed: Varied implementations of opt_names resulting in option panels not working as expected.
263
- * Release date: July 28, 2020
264
-
265
- = 4.0.4 =
266
- * Release date: July 24, 2020
267
-
268
- == Frequently Asked Questions ==
269
-
270
- = Who should use the Redux Block Library for Gutenberg? =
271
-
272
- 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.
273
-
274
- = What are the requirements to use the Redux Library for Gutenberg? =
275
-
276
- 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.
277
-
278
- = What themes does Redux Library for Gutenberg work with? =
279
-
280
- Redux is built to work wonderfully with all themes.
281
-
282
- = Can I use Redux for Gutenberg even while having another Page Builder? =
283
-
284
- The basic need or requirement for Redux for Gutenberg 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>
285
-
286
- = Can I use Redux for Gutenberg on client websites? =
287
-
288
- Yes! You can certainly use Redux on yours as well as your client's websites.
289
-
290
- = Will Redux slow down my website? =
291
-
292
- Absolutely not! The Redux Library for Gutenberg 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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Redux - Gutenberg Blocks Library & Framework ===
2
+ Contributors: dovyp, redux
3
+ Donate link: https://paypal.me/ReduxFramework
4
+ Tags: gutenberg, blocks, gutenberg blocks, editor, block, page builder, block editor, block library, editor, templates, library
5
+ Requires at least: 4.0
6
+ Requires PHP: 5.3
7
+ Tested up to: 5.5
8
+ Stable tag: 4.1.17
9
+ License: GPL-2.0+
10
+ License URI: http://www.gnu.org/licenses/gpl-2.0.txt
11
+
12
+ Supercharge the Gutenberg editor with our ever-growing library of block-based templates!
13
+
14
+ == Description ==
15
+ <strong>Redux - Quickly create full pages in WordPress’ Gutenberg</strong>
16
+
17
+ Supercharge the Gutenberg editor with our ever-growing library of WordPress Blocks and templates. Discover what's possible and implement any design on your website in virtually no time at all.
18
+
19
+ Worried that our templates may not work with your theme? We've got you covered. With our custom <em>page templates</em> option you can override any theme. Missing a plugin a template needs? No worries, we’ll even help you install what you need, all from the Gutenberg editor.
20
+
21
+ Don’t waste hours trying to recreate a template you love. With a click of a button it is own website where you can start customizing it for your needs.
22
+
23
+ <h4>♥️ What the Plugin does?</h4>
24
+ <ul>
25
+ <li><strong>Browse 1,000+</strong> templates from your Gutenberg Editor that you can add to your site immediately.</li>
26
+ <li><strong>Preview</strong> each Gutenberg block based template in the customizer preview.</li>
27
+ <li><strong>Filter</strong> between the dependencies you want, and find exactly what you're looking for.</li>
28
+ <li><strong>See instantly</strong> which Gutenberg templates you have everything for, or may need to install some dependencies.</li>
29
+ <li><strong>Automated install</strong> of anything you may need to install any template.</li>
30
+ <li><strong>Block Patterns library</strong> support built in.</li>
31
+ <li>Make the Reusable Blocks visible in our library modal window. 😉</li>
32
+ <li>The most trusted option framework in the industry.</li>
33
+ <li>Developer friendly: clean code, inline documentation</li>
34
+ </ul>
35
+
36
+ <h4>🚀 TYPICAL USE CASE OF THIS PLUGIN</h4>
37
+ You are building a **big site** with **lots of pages** and you just want it to look amazing. With Redux you can begin making pages with a variety of "starter blocks," or templates.
38
+
39
+ You can browse through the categories, as well as collections of like-styled pages. When you find something you like, Redux makes 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 exactly what you want it to be no matter what them you are using.
40
+
41
+ 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 "starter block" for your needs.
42
+
43
+ <h4>🎉 Supported Page Builders</h4>
44
+ Currently Redux supports only the <a href="https://wordpress.org/plugins/gutenberg/"><strong>Gutenberg / Block Editor of WordPress 5.0+</strong></a>.
45
+
46
+ <h4>🎨 Supported Themes</h4>
47
+ Though Redux will work with any theme that uses Gutenberg, we have done extra work to ensure complete compatibility with these themes.
48
+
49
+ <ul>
50
+ <li><a href="https://wordpress.org/themes/astra/"><strong>Astra Theme</strong></a> with <strong>Astra Pro</strong> Add-On Plugin – <strong>Custom Layouts</strong> (for Layouts, Headers, Footers, Hooks)</li>
51
+ <li><a href="https://wordpress.org/themes/generatepress/"><strong>GeneratePress Theme</strong></a> with <strong>GP Premium</strong> Add-On Plugin – <strong>Elements</strong> (for Layouts, Headers, Hooks)</li>
52
+ <li><a href="https://wordpress.org/themes/oceanwp/"><strong>OceanWP Theme</strong></a> with <a href="https://wordpress.org/plugins/ocean-extra/"><strong>Ocean Extra</strong></a> free Add-On Plugin – <strong>My Library</strong> (for Layouts, Hooks etc.)</li>
53
+ <li><strong>Kava Pro Theme/ CrocoBlock Service</strong> with JetThemeCore Plugin – <strong>My Library</strong> (for Layouts, Pages, Headers, Footers, Single, Archive)</li>
54
+ <li><strong>Genesis Framework</strong> with Genesis Child Themes — via <strong>Blox Lite</strong> and <strong>Blox</strong> (Pro) Plugins – <strong>Global Content Blocks</strong> (for Sections, Hooks)</li>
55
+ <li><strong>Page Builder Framework</strong> with <strong>WPBF Premium</strong> Add-On Plugin – <strong>Custom Section</strong> (for Sections, Layouts, Hooks etc.)</li>
56
+ <li><strong>Customify</strong> with <strong>Customify Pro</strong> Add-On Plugin – <strong>Hooks</strong> (for Layouts, Sections, Hooks etc.)</li>
57
+ <li><strong>Suki</strong> with <strong>Suki Pro</strong> Add-On Plugin – <strong>Custom Blocks</strong> (for Layouts, Sections, Hooks etc.)</li>
58
+ <li><strong>Neve</strong> with <strong>Neve Pro</strong> Add-On Plugin – <strong>Custom Layouts</strong> (for Layouts, Sections, Hooks etc.)</li>
59
+ <li><strong>Woostify</strong> with <strong>Woostify Pro</strong> Add-On Plugin – <strong>Header Footer Builder</strong> (for Elementor theming areas – Headers/ Footers)</li>
60
+ <li><strong>Avada Theme</strong> with Avada Fusion Builder – <strong>Library</strong> (for Templates, Pages, Layouts, Columns, Rows)</li>
61
+ <li><strong>Divi Theme</strong> with Divi Builder – <strong>Library</strong> (for Templates etc.)</li>
62
+ <li><strong>Extra Theme</strong> with Divi Builder – <strong>Library</strong> (for Templates etc.) – <strong>Category Templates</strong> (for Layouts, Templates etc.)</li>
63
+ </ul>
64
+
65
+ <h4>📦 Supported Gutenberg-Specific Plugins (Block Editor)</h4>
66
+ <ul>
67
+ <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>
68
+ <li><a href="https://wordpress.org/plugins/acf-blocks/"><strong>ACF Blocks Suite</strong></a> Plugin – <strong>Blocks</strong> (Fields for Gutenberg Blocks)</li>
69
+ <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>
70
+ <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>
71
+ <li><a href="https://wordpress.org/plugins/block-options/"><strong>Gutenberg Page Building Toolkit – EditorsKit</strong></a> Plugin – <strong>Blocks</strong> (Templates &amp; Fields for Gutenberg Blocks)</li>
72
+ <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>
73
+ <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>
74
+ <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>
75
+ <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>
76
+ <li><a href="https://wordpress.org/plugins/forms-gutenberg/"><strong>WordPress Form Builder Plugin – Gutenberg Forms</strong></a> Plugin – <strong>Blocks</strong> (Blocks &amp; Forms for Gutenberg Blocks)</li>
77
+ <li><a href="https://wordpress.org/plugins/getwid/"><strong>Getwid – Gutenberg Blocks</strong></a> Plugin – <strong>Blocks</strong> (Templates &amp; Blocks for Gutenberg Blocks)</li>
78
+ <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>
79
+ <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>
80
+ <li><a href="https://wordpress.org/plugins/kioken-blocks/"><strong>Page Builder Gutenberg Blocks – Kioken Blocks</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Blocks for Gutenberg Blocks)</li>
81
+ <li><a href="https://wordpress.org/plugins/otter-blocks/"><strong>Gutenberg Blocks and Template Library by Otter</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Blocks and Templates for Gutenberg Blocks)</li>
82
+ <li><a href="https://wordpress.org/plugins/qubely/"><strong>Gutenberg Blocks and Page Builder – Qubely</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Templates &amp; Blocks for Gutenberg Blocks)</li>
83
+ <li><a href="https://wordpress.org/plugins/qodeblock/"><strong>Gutenberg Blocks Collection – qodeblock</strong></a> Plugin – <strong>Blocks</strong> (Blocks for Gutenberg Blocks)</li>
84
+ <li><a href="https://wordpress.org/plugins/stackable-ultimate-gutenberg-blocks/"><strong>Stackable – Page Builder Gutenberg Blocks</strong></a> Plugin – <strong>Blocks &amp; Templates</strong> (Templates &amp; Blocks for Gutenberg Blocks)</li>
85
+ <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>
86
+ <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>
87
+ </ul>
88
+
89
+ <h4>☀️ Supported Gutenberg-Specific Services / Websites</h4>
90
+ <ul>
91
+ <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>
92
+ <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>
93
+ </ul>
94
+
95
+ <h4>👍 BE A CONTRIBUTOR</h4>
96
+ 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>.
97
+
98
+ You can also contribute code-wise via our <a href="https://github.com/reduxframework/redux-framework-4/">GitHub Repository</a> – and see where you can help. Be sure to use our develop branch to submit pull requests.
99
+
100
+ <h4>📝 Documentation and Support</h4>
101
+ <ul>
102
+ <li>For more information about features, FAQs and documentation, check out our website at <a href="https://docs.redux.io/" rel="nofollow ugc">Redux</a>.</li>
103
+ <li>If you have any more questions, visit our support on the <a href="https://wordpress.org/support/plugin/redux-framework">Plugin's Forum</a>.</li>
104
+ </ul>
105
+
106
+ <h4>⚡ Like the Redux Plugin?</h4>
107
+ <ul>
108
+ <li>Follow us on <a href="https://www.facebook.com/reduxframework" rel="nofollow ugc">Facebook 💬</a></li>
109
+ <li><strong>Rate us 5 ⭐ stars</strong> on <a href="https://wordpress.org/support/plugin/redux-framework/reviews/?filter=5/#new-post">WordPress.org</a></li>
110
+ <li><a href="https://github.com/sponsors/dovy/" rel="nofollow ugc"><strong>Become a Sponsor</strong> 💜</a> and support ongoing development, maintenance and support of this plugin</li>
111
+ <li>Follow us on Twitter 🐦: <a href="https://twitter.com/reduxframework" rel="nofollow ugc">@ReduxFramework</a> and <a href="https://twitter.com/dovyp" rel="nofollow ugc">@DovyP</a></li>
112
+ </ul>
113
+
114
+ <h4>🔐 Privacy</h4>
115
+ Redux does not interact with end users on your website. Our templates will continue to work even if Redux is uninstalled. If a product is using Redux the option panel will cease to function without Redux.
116
+
117
+ Redux utilizes [AppSero](https://appsero.com/) for account management as well as to enable our premium offerings. You can find their privacy policy here: [https://appsero.com/privacy-policy/](https://appsero.com/privacy-policy/). Activation of Redux is not necessary, but additional features such as Google Font Updates and increased access to the template library will be limited.
118
+
119
+ The Redux plugin uses a custom API to fetch our content library and our Gutenberg templates. To improve the service and stability we store logs which may or may not contain the following:
120
+ <ul>
121
+ <li>browser type</li>
122
+ <li>referring site</li>
123
+ <li>date and time of request</li>
124
+ <li>template ID requested</li>
125
+ <li>date of cached version of the given API request</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.
132
+
133
+ For more details on our privacy policy: [https://redux.io/privacy](https://redux.io/privacy)
134
+ For more details on on our terms and conditions: [https://redux.io/terms](https://redux.io/terms)
135
+
136
+ == Installation ==
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 can easily be dismissed.
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.1.17 =
156
+ * Fixed: Edge case where enable Gutenberg notice doesn't disappear. Sorry everyone!
157
+
158
+ = 4.1.16 =
159
+ * Fixed: Issue when null values were sent to Redux::set();
160
+ * Fixed: Default for Google fonts is now swap.
161
+ * Fixed: Fix for developers calling the API without checking for files.
162
+ * Fixed: Edge case for filter var not working on some sites.
163
+ * Fixed: Proper loading to override Redux 3 plugin.
164
+ * Added: Site name to WP data return.
165
+ * Fixed: Set height for library button when other plugins modify the CSS for the Gutenberg toolbar.
166
+ * Fixed: Don't show template messages on the front-end if an extension is missing. How did that get through?
167
+ * Fixed: Non-array values for WP data. Thanks @wilokecom.
168
+ * Added: Notification so users can enable Gutenberg when disabled.
169
+ * Added: Welcome guide to Gutenberg screen.
170
+ * Fixed: Some readme issues.
171
+ * Release date: Aug 26, 2020
172
+
173
+ = 4.1.15 =
174
+ * Fixed: Defaults were not saving in some situations.
175
+ * Added: Various fallback calls for JS when fetching opt_names.
176
+ * Fixed: Warnings with Rest API due to WP 5.5.
177
+ * Fixed: Subsets now are full-width in typography when rendered after page load.
178
+ * Fixed: for subsets loading when font-family is not specified.
179
+ * Added: No opt-in to tracking when embedded. Google Fonts and panel notices are still there though.
180
+ * Fixed: Is local checks conflicting with some servers.
181
+ * Fixed: WooCommerce race condition with their autoloader causing issues with some sites.
182
+ * Updated: Complete overhaul of WordPress data class.
183
+ * Fixed: Backtrace errors when blocked on servers.
184
+ * Fixed: Select2 and required fixes.
185
+ * Fixed: Customizer sidebar not showing in some cases.
186
+ * Added: Google Fonts now load ~20% faster!!!
187
+ * Release date: Aug 19, 2020
188
+
189
+ = 4.1.14 =
190
+ * Added: Shim for ReduxFramework->get_default_value()
191
+ * Fixed: Local issue with WP and strtolower. Sites that couldn't find classes should work now.
192
+ * Fixed: Ajax for select boxes is now working again.
193
+ * Fixed: Autoloading to bypass other embedded versions of Redux.
194
+ * Fixed: Customizer interactions are MUCH faster now. Had a greedy CSS selector before.
195
+ * Fixed: If opt_names had multiple dashes in them, JS errors occurred by a non-global replace.
196
+ * Fixed: Fix for servers that disable output buffers.
197
+ * Fixed: Ajax now does not load anything else, faster calls.
198
+ * Fixed: .folds replace issue when opt_name selector wasn't properly found.
199
+ * Release date: Aug 11, 2020
200
+
201
+ = 4.1.13 =
202
+ * Fixed: Major typography bug affecting saving in the panel as well as third-party extensions.
203
+ * Fixed: Customizer issue with some external extensions.
204
+ * Added: Removed `FS_METHOD` define completely.
205
+ * Release date: Aug 5, 2020
206
+
207
+ = 4.1.12 =
208
+ * Fixed: Direct calls to ReduxFramework were causing unexpected errors.
209
+ * Fixed: JS error on .replace because opt_name wasn't found.
210
+ * Added: `FS_METHOD` define location, had to move lower in the stack.
211
+ * Release date: Aug 5, 2020
212
+
213
+ = 4.1.11 =
214
+ * Fixed: Templates JS not loading and conflicting with other plugins. Need to namespace or something.
215
+ * Added: `FS_METHOD` define method for environments where it is not properly defined.
216
+ * Release date: Aug 4, 2020
217
+
218
+ = 4.1.10 =
219
+ * Fixed: Minified templates directory now loads.
220
+ * Added: Shadow files from old repo to stop errors from previously included third-party developer includes.
221
+ * Release date: Aug 4, 2020
222
+
223
+ = 4.1.9 =
224
+ * Fixed: Compatibility issue when developers made custom panel templates. The opt_name wasn't fetched and thus saving broke.
225
+ * Release date: Aug 1, 2020
226
+
227
+ = 4.1.8 =
228
+ * Fixed: Map files are now all present.
229
+ * Fixed: Path fix for how developers called the typography file directory.
230
+ * Release date: Aug 1, 2020
231
+
232
+ = 4.1.7 =
233
+ * Fixed: Issue with sortable in text mode not properly passing the name attribute and thus not saving properly.
234
+ * Fixed: Compatibility with old extension names to not crash other plugins.
235
+ * Release date: July 31, 2020
236
+
237
+ = 4.1.6 =
238
+ * Fixed: Issue with customizer double loading the PHP classes and causing an exception.
239
+ * Fixed: Chanced a class name as to not conflict with a 6+ year old version of Redux.
240
+ * Release date: July 30, 2020
241
+
242
+ = 4.1.5 =
243
+ * Fixed: Google fonts not working when old configs used string vs an array for output.
244
+ * Release date: July 30, 2020
245
+
246
+ = 4.1.4 =
247
+ * Fixed: Google fonts loading over non-secure breaks fonts. Forced all SSL for Google fonts. :)
248
+ * Release date: July 30, 2020
249
+
250
+ = 4.1.3 =
251
+ * Fixed: Issue where theme devs tried to bypass the framework. Literally I made an empty file to fix their coding. :P
252
+ * Release date: July 29, 2020
253
+
254
+ = 4.1.2 =
255
+ * Fixed: Don't try to set empty defaults when none are present.
256
+ * Fixed: Issue where the WP Data argument was misused.
257
+ * Release date: July 29, 2020
258
+
259
+ = 4.1.1 =
260
+ * Fixed: CSS decode when esc_attr replaces the HTML characters and CSS outputs are set with >'s.
261
+ * Release date: July 29, 2020
262
+
263
+ = 4.1.0 =
264
+ * Fixed: Compatibility with certain themes using the deprecated $_is_plugin variable.
265
+ * Release date: July 29, 2020
266
+
267
+ = 4.0.9 =
268
+ * Fixed: Complete compatibility fix for older Redux extensions.
269
+ * Release date: July 28, 2020
270
+
271
+ = 4.0.8 =
272
+ * Fixed: Initial library load was failing on some server setups.
273
+ * Release date: July 28, 2020
274
+
275
+ = 4.0.7 =
276
+ * Fixed: Race condition for PHP include for Redux_Typography causing blank white screens.
277
+ * Release date: July 28, 2020
278
+
279
+ = 4.0.5 =
280
+ * Fixed: Issues where the site crashes because of varied ways Redux was called.
281
+ * Fixed: Varied implementations of opt_names resulting in option panels not working as expected.
282
+ * Release date: July 28, 2020
283
+
284
+ = 4.0.4 =
285
+ * Release date: July 24, 2020
286
+
287
+ == Frequently Asked Questions ==
288
+
289
+ = Who should use the Redux Block Library for Gutenberg? =
290
+
291
+ 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.
292
+
293
+ = What are the requirements to use the Redux Library for Gutenberg? =
294
+
295
+ 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.
296
+
297
+ = What themes does Redux Library for Gutenberg work with? =
298
+
299
+ Redux is built to work wonderfully with all themes.
300
+
301
+ = Can I use Redux for Gutenberg even while having another Page Builder? =
302
+
303
+ The basic need or requirement for Redux for Gutenberg 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>
304
+
305
+ = Can I use Redux for Gutenberg on client websites? =
306
+
307
+ Yes! You can certainly use Redux on yours as well as your client's websites.
308
+
309
+ = Will Redux slow down my website? =
310
+
311
+ Absolutely not! The Redux Library for Gutenberg 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/class-redux-core.php CHANGED
@@ -320,6 +320,7 @@ if ( ! class_exists( 'Redux_Core', false ) ) {
320
  require_once dirname( __FILE__ ) . '/inc/classes/class-redux-path.php';
321
  require_once dirname( __FILE__ ) . '/inc/classes/class-redux-functions-ex.php';
322
  require_once dirname( __FILE__ ) . '/inc/classes/class-redux-helpers.php';
 
323
  Redux_Functions_Ex::register_class_path( 'Redux', dirname( __FILE__ ) . '/inc/classes' );
324
  Redux_Functions_Ex::register_class_path( 'Redux', dirname( __FILE__ ) . '/inc/welcome' );
325
  spl_autoload_register( array( $this, 'register_classes' ) );
320
  require_once dirname( __FILE__ ) . '/inc/classes/class-redux-path.php';
321
  require_once dirname( __FILE__ ) . '/inc/classes/class-redux-functions-ex.php';
322
  require_once dirname( __FILE__ ) . '/inc/classes/class-redux-helpers.php';
323
+ require_once dirname( __FILE__ ) . '/inc/classes/class-redux-enable-gutenberg.php';
324
  Redux_Functions_Ex::register_class_path( 'Redux', dirname( __FILE__ ) . '/inc/classes' );
325
  Redux_Functions_Ex::register_class_path( 'Redux', dirname( __FILE__ ) . '/inc/welcome' );
326
  spl_autoload_register( array( $this, 'register_classes' ) );
redux-core/framework.php CHANGED
@@ -23,7 +23,7 @@ defined( 'ABSPATH' ) || exit;
23
 
24
  require_once dirname( __FILE__ ) . '/class-redux-core.php';
25
 
26
- Redux_Core::$version = '4.1.15';
27
  Redux_Core::$redux_path = dirname( __FILE__ );
28
  Redux_Core::instance();
29
 
23
 
24
  require_once dirname( __FILE__ ) . '/class-redux-core.php';
25
 
26
+ Redux_Core::$version = '4.1.17';
27
  Redux_Core::$redux_path = dirname( __FILE__ );
28
  Redux_Core::instance();
29
 
redux-core/inc/classes/class-redux-enable-gutenberg.php ADDED
@@ -0,0 +1,519 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Redux Enable Gutenberg Class
4
+ *
5
+ * @class Redux_Enable_Gutenberg
6
+ * @version 4.0.0
7
+ * @package Redux Framework
8
+ * @author Dovy Pauksts of Redux.io
9
+ */
10
+
11
+ // Exit if accessed directly.
12
+ defined( 'ABSPATH' ) || exit;
13
+
14
+
15
+ if ( ! class_exists( 'Redux_Enable_Gutenberg', false ) ) {
16
+
17
+ /**
18
+ * Main Feedback Notice Class
19
+ */
20
+ class Redux_Enable_Gutenberg {
21
+
22
+ /**
23
+ * Slug.
24
+ *
25
+ * @var string $slug
26
+ */
27
+ private $slug;
28
+
29
+ /**
30
+ * Name.
31
+ *
32
+ * @var string $name
33
+ */
34
+ private $name;
35
+
36
+ /**
37
+ * No Bug Option.
38
+ *
39
+ * @var string $nobug_option
40
+ */
41
+ public $nobug_option;
42
+
43
+ /**
44
+ * Auto Enable Option.
45
+ *
46
+ * @var string $autoenable_option
47
+ */
48
+ public $autoenable_option;
49
+
50
+ /**
51
+ * Auto deactivate Option.
52
+ *
53
+ * @var string $decativate_option
54
+ */
55
+ public $decativate_option;
56
+
57
+ /**
58
+ * Nonce string.
59
+ *
60
+ * @var string $nonce
61
+ */
62
+ public $nonce;
63
+
64
+ /**
65
+ * Disabled by the theme.
66
+ *
67
+ * @var bool
68
+ */
69
+ protected static $theme_disabled = false;
70
+
71
+ /**
72
+ * Disabled at all.
73
+ *
74
+ * @var bool
75
+ */
76
+ protected static $is_disabled = false;
77
+
78
+ /**
79
+ * Quick fix known plugins that disable.
80
+ *
81
+ * @var array
82
+ */
83
+ protected static $known_plugins = array();
84
+
85
+ /**
86
+ * Class constructor.
87
+ *
88
+ * @param array $args Arguments.
89
+ */
90
+ public function __construct( $args = array() ) {
91
+ global $pagenow;
92
+
93
+ $defaults = array(
94
+ 'slug' => '',
95
+ 'name' => '',
96
+ );
97
+ $args = wp_parse_args( $args, $defaults );
98
+
99
+ if ( empty( $args['slug'] ) ) {
100
+ echo 'You must pass a slug to the Redux_Enable_Gutenberg() constructor.';
101
+
102
+ return;
103
+ }
104
+
105
+ if ( strpos( $args['slug'], 'gutenberg' ) === false ) {
106
+ $args['slug'] .= '-gutenberg';
107
+ }
108
+ $this->slug = $args['slug'];
109
+ $this->name = $args['name'];
110
+ $this->nobug_option = $this->slug . '-no-bug';
111
+ $this->nonce = $this->slug . '-nonce';
112
+ $this->autoenable_option = $this->slug . '-force-enable';
113
+ $this->decativate_option = $this->slug . '-deactivate-plugins';
114
+
115
+ if ( is_admin() && ! self::$is_disabled && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) && ! get_site_option( $this->nobug_option, false ) ) {
116
+ // We only want to do this for posts or pages.
117
+ if ( ! isset( $_GET['post_type'] ) || ( isset( $_GET['post_type'] ) && 'page' === $_GET['post_type'] ) ) { // phpcs:ignore
118
+ add_action( 'init', array( $this, 'check_init' ), 998 );
119
+ add_action( 'init', array( $this, 'run_user_actions' ), 999 );
120
+ if ( ! get_site_option( $this->nobug_option, false ) ) {
121
+ add_action( 'plugins_loaded', array( $this, 'check_plugin' ), 999 );
122
+ add_action( 'after_setup_theme', array( $this, 'check_theme' ), 999 );
123
+ add_action( 'admin_notices', array( $this, 'display_admin_notice' ) );
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Cleanup for plugin deactivation.
131
+ *
132
+ * @param string $slug Slug for instance.
133
+ */
134
+ public static function cleanup_options( $slug = '' ) {
135
+ if ( ! empty( $slug ) ) {
136
+ $data = array(
137
+ 'slug' => $slug,
138
+ 'name' => '',
139
+ );
140
+
141
+ $obj = new Redux_Enable_Gutenberg(
142
+ array(
143
+ 'slug' => $slug,
144
+ 'name' => '',
145
+ )
146
+ );
147
+ delete_site_option( $obj->autoenable_option );
148
+ delete_site_option( $obj->nobug_option );
149
+ }
150
+ }
151
+
152
+ /**
153
+ * Display the admin notice.
154
+ */
155
+ public function display_admin_notice() {
156
+ if ( ! self::$is_disabled ) {
157
+ return;
158
+ }
159
+ global $pagenow;
160
+
161
+ $clean_get = $_GET; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
162
+ if ( isset( $clean_get[ $this->nobug_option ] ) ) {
163
+ unset( $clean_get[ $this->nobug_option ] );
164
+ }
165
+ if ( isset( $clean_get[ $this->autoenable_option ] ) ) {
166
+ unset( $clean_get[ $this->autoenable_option ] );
167
+ }
168
+ if ( isset( $clean_get[ $this->decativate_option ] ) ) {
169
+ unset( $clean_get[ $this->decativate_option ] );
170
+ }
171
+ $base_url = admin_url( add_query_arg( $clean_get, $pagenow ) );
172
+
173
+ $no_bug_url = wp_nonce_url( add_query_arg( $this->nobug_option, true, $base_url ), $this->nonce );
174
+ $auto_enable_url = wp_nonce_url( add_query_arg( $this->autoenable_option, true, $base_url ), $this->nonce );
175
+ $deativate_url = wp_nonce_url( add_query_arg( $this->decativate_option, true, $base_url ), $this->nonce );
176
+
177
+ $data = array(
178
+ 'url' => '',
179
+ 'content' => '',
180
+ 'header' => __( 'Gutenberg is currently disabled!', 'redux-framework' ),
181
+ 'button' => '',
182
+ );
183
+
184
+ if ( isset( $_GET[ $this->decativate_option ] ) || empty( self::$known_plugins ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
185
+
186
+ if ( isset( $_GET[ $this->decativate_option ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
187
+ // That didn't work.
188
+ $data['header'] = __( 'Hmm, it seems something else is disabling Gutenberg...', 'redux-framework' );
189
+ $data['content'] = sprintf( '<p>Well seems like we have more to do. Don\'t worry, we can still fix this! Click the <strong>Enable Gutenberg</strong> button and Redux will enable Gutenberg for you.</p>' );
190
+ } elseif ( self::$theme_disabled ) {
191
+ $data['header'] = __( 'Your theme author has disabled Gutenberg!', 'redux-framework' );
192
+ $data['content'] .= sprintf( '<p>It looks like your theme has disabled Gutenberg. Don\'t panic though! Click the <strong>Enable Gutenberg</strong> button to the right and Redux will enable Gutenberg for you.</p>' );
193
+ } else {
194
+ $data['header'] = __( 'Looks like something has disabled Gutenberg?', 'redux-framework' );
195
+ $data['content'] .= sprintf( '<p>Did you know that Gutenberg is disabled? If that\'s intended you can dismiss this notice, not what you intended? Click <strong>Enable Gutenberg</strong> and Redux will automatically fix this for you.</p>' );
196
+ }
197
+
198
+ $data['url'] = $auto_enable_url;
199
+ $data['button'] = __( 'Enable Gutenberg', 'redux-framework' );
200
+
201
+ } elseif ( empty( self::$known_plugins ) ) {
202
+ // Disabled by the theme or other.
203
+ $data['header'] = __( 'Your theme', 'redux-framework' );
204
+ $data['url'] = $auto_enable_url;
205
+ $data['button'] = __( 'Enable Gutenberg', 'redux-framework' );
206
+ } else {
207
+ // Disable Plugins!
208
+ $all_plugins = get_plugins();
209
+
210
+ $plugins = '';
211
+
212
+ foreach ( self::$known_plugins as $slug ) {
213
+ if ( isset( $all_plugins[ $slug ] ) ) {
214
+ if ( ! empty( $plugins ) ) {
215
+ $plugins .= ', ';
216
+ }
217
+ $plugins .= '<code>' . esc_html( $all_plugins[ $slug ]['Name'] ) . '</code>';
218
+ }
219
+ }
220
+
221
+ $data['url'] = $deativate_url;
222
+ if ( 1 === count( self::$known_plugins ) ) {
223
+ $data['button'] = __( 'Disable Plugin', 'redux-framework' );
224
+ $data['content'] = sprintf( '<p>The following plugin is preventing Gutenberg from working: %s. To automatically fix the issue click the <strong>Disable Plugin</strong> button on the right.</p>', $plugins, esc_url( 'https://kinsta.com/blog/gutenberg-wordpress-editor/' ) );
225
+ } else {
226
+ $data['button'] = __( 'Disable Plugins', 'redux-framework' );
227
+ $data['content'] = sprintf( '<p>The following plugin is preventing Gutenberg from working: %s. To automatically fix the issue click the <strong>Disable Plugins</strong> button on the right.</p>', $plugins, esc_url( 'https://kinsta.com/blog/gutenberg-wordpress-editor/' ) );
228
+ }
229
+ }
230
+
231
+ ?>
232
+ <style>
233
+ .notice.redux-notice {
234
+ border-left-color: #24b0a6 !important;
235
+ padding: 20px;
236
+ }
237
+
238
+ .rtl .notice.redux-notice {
239
+ border-right-color: #19837c !important;
240
+ }
241
+
242
+ .notice.notice.redux-notice .redux-notice-inner {
243
+ display: table;
244
+ width: 100%;
245
+ }
246
+
247
+ .notice.redux-notice .redux-notice-inner .redux-notice-icon,
248
+ .notice.redux-notice .redux-notice-inner .redux-notice-content,
249
+ .notice.redux-notice .redux-notice-inner .redux-install-now {
250
+ display: table-cell;
251
+ vertical-align: middle;
252
+ }
253
+
254
+ .notice.redux-notice .redux-notice-icon {
255
+ color: #509ed2;
256
+ font-size: 13px;
257
+ width: 60px;
258
+ }
259
+
260
+ .notice.redux-notice .redux-notice-icon img {
261
+ width: 64px;
262
+ }
263
+
264
+ .notice.redux-notice .redux-notice-content {
265
+ padding: 0 40px 0 20px;
266
+ }
267
+
268
+ .notice.redux-notice p {
269
+ padding: 0;
270
+ margin: 0;
271
+ }
272
+
273
+ .notice.redux-notice h3 {
274
+ margin: 0 0 5px;
275
+ }
276
+
277
+ .notice.redux-notice .redux-install-now {
278
+ text-align: center;
279
+ width: 20%;
280
+ }
281
+
282
+ .notice.redux-notice .redux-install-now .redux-install-button {
283
+ padding: 6px 50px;
284
+ height: auto;
285
+ line-height: 20px;
286
+ background: #24b0a6;
287
+ border-color: transparent;
288
+ font-weight: bold;
289
+ }
290
+
291
+ .notice.redux-notice .redux-install-now .redux-install-button:hover {
292
+ background: #19837c;
293
+ }
294
+
295
+ .notice.redux-notice a.no-thanks {
296
+ display: block;
297
+ margin-top: 10px;
298
+ color: #72777c;
299
+ text-decoration: none;
300
+ }
301
+
302
+ .notice.redux-notice a.no-thanks:hover {
303
+ color: #444;
304
+ }
305
+
306
+ @media (max-width: 767px) {
307
+
308
+ .notice.notice.redux-notice .redux-notice-inner {
309
+ display: block;
310
+ }
311
+
312
+ .notice.redux-notice {
313
+ padding: 20px !important;
314
+ }
315
+
316
+ .notice.redux-noticee .redux-notice-inner {
317
+ display: block;
318
+ }
319
+
320
+ .notice.redux-notice .redux-notice-inner .redux-notice-content {
321
+ display: block;
322
+ padding: 0;
323
+ }
324
+
325
+ .notice.redux-notice .redux-notice-inner .redux-notice-icon {
326
+ display: none;
327
+ }
328
+
329
+ .notice.redux-notice .redux-notice-inner .redux-install-now {
330
+ margin-top: 20px;
331
+ display: block;
332
+ text-align: left;
333
+ }
334
+
335
+ .notice.redux-notice .redux-notice-inner .no-thanks {
336
+ display: inline-block;
337
+ margin-left: 15px;
338
+ }
339
+ }
340
+ </style>
341
+ <div class="notice updated redux-notice">
342
+ <div class="redux-notice-inner">
343
+ <div class="redux-notice-icon">
344
+ <?php /* translators: 1. Name */ ?>
345
+ <img src="<?php echo esc_url( Redux_Core::$url . '/assets/img/icon--color.svg' ); ?>" alt="<?php echo esc_attr__( 'Redux WordPress Plugin', 'redux-framework' ); ?>"/>
346
+ </div>
347
+ <div class="redux-notice-content">
348
+ <?php /* translators: 1. Name */ ?>
349
+ <h3><?php printf( esc_html( $data['header'] ) ); ?></h3>
350
+ <?php printf( $data['content'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
351
+ </div>
352
+ <div class="redux-install-now">
353
+ <?php printf( '<a href="%1$s" class="button button-primary redux-install-button">%2$s</a>', esc_url( $data['url'] ), esc_html( $data['button'] ) ); ?>
354
+ <a href="<?php echo esc_url( $no_bug_url ); ?>" class="no-thanks"><?php echo esc_html__( 'No Thanks', 'redux-framework' ); ?></a>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ <?php
359
+ }
360
+
361
+ /**
362
+ * Set the plugin to no longer bug users if user asks not to be.
363
+ */
364
+ public function run_user_actions() {
365
+ // Bail out if not on correct page.
366
+ // phpcs:ignore
367
+ if ( ! isset( $_GET['_wpnonce'] ) || ( ! wp_verify_nonce( $_GET['_wpnonce'], $this->nonce ) || ! is_admin() || ! current_user_can( 'manage_options' ) ) ) {
368
+ return;
369
+ }
370
+
371
+ if ( isset( $_GET[ $this->nobug_option ] ) ) { // User doesn't want to see this anymore.
372
+ add_site_option( $this->nobug_option, true );
373
+ } elseif ( isset( $_GET[ $this->autoenable_option ] ) ) { // User has opted to just auto-enable Gutenberg.
374
+ unset( $_GET[ $this->autoenable_option ] );
375
+ add_site_option( $this->autoenable_option, true );
376
+ } elseif ( isset( $_GET[ $this->decativate_option ] ) && ! empty( self::$known_plugins ) ) { // User has opted to disable known gutenberg plugins.
377
+ deactivate_plugins( self::$known_plugins );
378
+ }
379
+ global $pagenow;
380
+ unset( $_GET['_wpnonce'] );
381
+ $url = admin_url( add_query_arg( $_GET, $pagenow ) );
382
+ wp_safe_redirect( $url );
383
+
384
+ exit();
385
+
386
+ }
387
+
388
+ /**
389
+ * Set the plugin to no longer bug users if user asks not to be.
390
+ */
391
+ public function set_auto_disable() {
392
+
393
+ // Bail out if not on correct page.
394
+ // phpcs:ignore
395
+ if ( ! isset( $_GET['_wpnonce'] ) || ( ! wp_verify_nonce( $_GET['_wpnonce'], $this->nonce ) || ! is_admin() || ! isset( $_GET[ $this->autoenable_option ] ) || ! current_user_can( 'manage_options' ) ) ) {
396
+ return;
397
+ }
398
+
399
+ add_site_option( $this->autoenable_option, true );
400
+ }
401
+
402
+ /**
403
+ * Check for filter method.
404
+ */
405
+ private function check_for_filter() {
406
+ if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
407
+ if ( has_filter( 'use_block_editor_for_post_type', '__return_false' ) ) {
408
+ return true;
409
+ }
410
+ } else {
411
+ if ( has_filter( 'gutenberg_can_edit_post_type', '__return_false' ) ) {
412
+ return true; // WP < 5 beta.
413
+ }
414
+ }
415
+
416
+ return false;
417
+ }
418
+
419
+ /**
420
+ * Remove the Gutenberg disable filter for posts and pages only.
421
+ */
422
+ private function remove_filter() {
423
+ global $pagenow;
424
+
425
+ if ( is_admin() && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
426
+ // We only want to do this for posts or pages.
427
+ if ( ! isset( $_GET['post_type'] ) || ( isset( $_GET['post_type'] ) && 'page' === $_GET['post_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
428
+ if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
429
+ // WP > 5 beta.
430
+ remove_filter( 'use_block_editor_for_post_type', '__return_false' );
431
+ } else {
432
+ // WP < 5 beta.
433
+ remove_filter( 'gutenberg_can_edit_post_type', '__return_false' );
434
+ }
435
+ }
436
+ }
437
+ }
438
+
439
+ /**
440
+ * Quick checks against known plugins for disabling.
441
+ */
442
+ public function quick_checks() {
443
+ // Testing for known plugins if they're loaded, save on filters and performance.
444
+ if ( class_exists( 'Classic_Editor' ) ) {
445
+ $a = new \ReflectionClass( 'Classic_Editor' );
446
+ self::$known_plugins[] = plugin_basename( $a->getFileName() );
447
+ }
448
+
449
+ if ( defined( 'DISABLE_GUTENBERG_FILE' ) ) {
450
+ self::$known_plugins[] = plugin_basename( DISABLE_GUTENBERG_FILE );
451
+ }
452
+
453
+ if ( defined( 'ADE_PLUGIN_DIR_PATH' ) ) {
454
+ if ( class_exists( 'CodePopular_disable_gutenburg' ) ) {
455
+ $a = new \ReflectionClass( 'CodePopular_disable_gutenburg' );
456
+ self::$known_plugins[] = plugin_basename( $a->getFileName() );
457
+ } else {
458
+ self::$known_plugins[] = plugin_basename( ADE_PLUGIN_DIR_PATH ) . '/auto-disable-gutenberg.php';
459
+ }
460
+ }
461
+ self::$known_plugins[] = 'no-gutenberg/no-gutenberg.php';
462
+ self::$known_plugins[] = 'enable-classic-editor/enable-classic-editor.php';
463
+
464
+ $plugins = get_option( 'active_plugins' );
465
+ $results = array_intersect( $plugins, self::$known_plugins );
466
+ self::$known_plugins = $results;
467
+ if ( ! empty( self::$known_plugins ) ) {
468
+ self::$is_disabled = true;
469
+ }
470
+ }
471
+
472
+ /**
473
+ * Check if plugins have the disable filter.
474
+ */
475
+ public function check_plugin() {
476
+ $this->quick_checks();
477
+ if ( ! self::$is_disabled && $this->check_for_filter() ) {
478
+ self::$is_disabled = true;
479
+ }
480
+ }
481
+
482
+ /**
483
+ * Check if the theme have the disable filter.
484
+ */
485
+ public function check_theme() {
486
+ if ( ! self::$is_disabled && $this->check_for_filter() ) {
487
+ self::$theme_disabled = true;
488
+ self::$is_disabled = true;
489
+ }
490
+ }
491
+
492
+ /**
493
+ * Check if init hook still has the disable filter.
494
+ */
495
+ public function check_init() {
496
+ if ( ! self::$is_disabled ) {
497
+ if ( $this->check_for_filter() ) {
498
+ self::$is_disabled = true;
499
+ }
500
+ }
501
+
502
+ if ( self::$is_disabled && get_site_option( $this->autoenable_option, false ) ) {
503
+ $this->remove_filter();
504
+ }
505
+
506
+ }
507
+ }
508
+
509
+ /*
510
+ * Instantiate the Redux_Enable_Gutenberg class.
511
+ */
512
+ new Redux_Enable_Gutenberg(
513
+ array(
514
+ 'slug' => 'redux-framework',
515
+ 'name' => __( 'Redux', 'redux-framework' ),
516
+ )
517
+ );
518
+
519
+ }
redux-core/inc/classes/class-redux-helpers.php CHANGED
@@ -1989,5 +1989,25 @@ if ( ! class_exists( 'Redux_Helpers', false ) ) {
1989
 
1990
  die();
1991
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1992
  }
1993
  }
1989
 
1990
  die();
1991
  }
1992
+
1993
+ /**
1994
+ * Detect if Gutenberg is running on the current page.
1995
+ *
1996
+ * @return bool
1997
+ */
1998
+ public static function is_gutenberg_page() {
1999
+ if ( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) {
2000
+ // The Gutenberg plugin is on.
2001
+ return true;
2002
+ }
2003
+ $current_screen = get_current_screen();
2004
+ if ( method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor() ) {
2005
+ // Gutenberg page on 5+.
2006
+ return true;
2007
+ }
2008
+ return false;
2009
+ }
2010
+
2011
+
2012
  }
2013
  }
redux-core/inc/classes/class-redux-wordpress-data.php CHANGED
@@ -579,7 +579,7 @@ if ( ! class_exists( 'Redux_WordPress_Data', false ) ) {
579
  case 'post':
580
  case 'posts':
581
  if ( ! empty( $current_value ) ) {
582
- $args['post__in'] = $current_value;
583
  }
584
  break;
585
 
579
  case 'post':
580
  case 'posts':
581
  if ( ! empty( $current_value ) ) {
582
+ $args['post__in'] = is_array( $current_value ) ? $current_value : array( $current_value );
583
  }
584
  break;
585
 
redux-framework.php CHANGED
@@ -5,12 +5,12 @@
5
  * standards and PHP best practices in mind.
6
  *
7
  * Plugin Name: Redux
8
- * Plugin URI: http://wordpress.org/plugins/redux-framework
9
  * Github URI: reduxframework/redux-framework
10
  * Description: Build better sites in WordPress fast
11
  * Author: Redux.io + Dovy Paukstys
12
  * Author URI: http://redux.io
13
- * Version: 4.1.15
14
  * Text Domain: redux-framework
15
  * License: GPLv3 or later
16
  * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
5
  * standards and PHP best practices in mind.
6
  *
7
  * Plugin Name: Redux
8
+ * Plugin URI: http://wordpress.org/plugins/redux-framework-4
9
  * Github URI: reduxframework/redux-framework
10
  * Description: Build better sites in WordPress fast
11
  * Author: Redux.io + Dovy Paukstys
12
  * Author URI: http://redux.io
13
+ * Version: 4.1.17
14
  * Text Domain: redux-framework
15
  * License: GPLv3 or later
16
  * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
redux-templates/assets/img/welcome-guide-1.png ADDED
Binary file
redux-templates/assets/img/welcome-guide-2.gif ADDED
Binary file
redux-templates/assets/img/welcome-guide-3.png ADDED
Binary file
redux-templates/assets/js/redux-templates.js CHANGED
@@ -378,6 +378,21 @@ exports.push([module.i, ".redux-templates-template-filters .is-active {\n backg
378
 
379
 
380
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  /***/ }),
382
 
383
  /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./redux-templates/src/custom-css/style.scss":
@@ -4522,6 +4537,179 @@ var insertInto;
4522
 
4523
 
4524
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4525
  var options = {"hmr":true}
4526
 
4527
  options.transform = transform
@@ -6647,6 +6835,7 @@ __webpack_require__.r(__webpack_exports__);
6647
  /* harmony import */ var _modal_manager__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modal-manager */ "./redux-templates/src/modal-manager/index.js");
6648
  /* harmony import */ var _modal_library__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modal-library */ "./redux-templates/src/modal-library/index.js");
6649
  /* harmony import */ var _custom_css__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./custom-css */ "./redux-templates/src/custom-css/index.js");
 
6650
  /**
6651
  * Library Button
6652
  */
@@ -6673,6 +6862,7 @@ __webpack_require__.r(__webpack_exports__);
6673
 
6674
 
6675
 
 
6676
  Object(_wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_0__["default"])(() => {
6677
  setTimeout(() => {
6678
  const challengeDiv = document.createElement('div');
@@ -6699,6 +6889,7 @@ Object(_wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_0__["default"])(() => {
6699
 
6700
  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["render"])(wp.element.createElement(_challenge__WEBPACK_IMPORTED_MODULE_11__["default"], null), challengeWrapperDiv);
6701
  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["render"])(wp.element.createElement(_challenge_tooltip_TooltipBox__WEBPACK_IMPORTED_MODULE_9__["default"], null), challengeDiv);
 
6702
  Object(_stores_helper__WEBPACK_IMPORTED_MODULE_10__["handlingLocalStorageData"])();
6703
  }, 500);
6704
  });
378
 
379
 
380
 
381
+ /***/ }),
382
+
383
+ /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./redux-templates/src/components/welcome-guide/style.scss":
384
+ /*!**********************************************************************************************************************************************!*\
385
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./redux-templates/src/components/welcome-guide/style.scss ***!
386
+ \**********************************************************************************************************************************************/
387
+ /*! no static exports found */
388
+ /***/ (function(module, exports, __webpack_require__) {
389
+
390
+ exports = module.exports = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false);
391
+ // Module
392
+ exports.push([module.i, ".redux-edit-post-welcome-guide {\n width: 412px; }\n .redux-edit-post-welcome-guide__image {\n background: #00a0d2;\n width: 412px;\n border-bottom: 1px solid #ddd; }\n .redux-edit-post-welcome-guide__image__prm-r {\n display: none; }\n @media (prefers-reduced-motion: reduce) {\n .redux-edit-post-welcome-guide__image__prm-r {\n display: block; }\n .redux-edit-post-welcome-guide__image__prm-np {\n display: none; } }\n .redux-edit-post-welcome-guide__heading {\n font-family: \"Noto Serif\", serif;\n font-size: 24px;\n line-height: 1.4;\n margin: 0 0 16px 0;\n padding: 0 32px; }\n .redux-edit-post-welcome-guide__text {\n font-size: 16px;\n line-height: 1.4;\n margin: 0 0 24px 0;\n padding: 0 32px;\n font-weight: normal; }\n .redux-edit-post-welcome-guide__inserter-icon {\n margin: 0 4px;\n vertical-align: text-top; }\n", ""]);
393
+
394
+
395
+
396
  /***/ }),
397
 
398
  /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./redux-templates/src/custom-css/style.scss":
4537
 
4538
 
4539
 
4540
+ var options = {"hmr":true}
4541
+
4542
+ options.transform = transform
4543
+ options.insertInto = undefined;
4544
+
4545
+ var update = __webpack_require__(/*! ../../../../node_modules/style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
4546
+
4547
+ if(content.locals) module.exports = content.locals;
4548
+
4549
+ if(false) {}
4550
+
4551
+ /***/ }),
4552
+
4553
+ /***/ "./redux-templates/src/components/welcome-guide/images.js":
4554
+ /*!****************************************************************!*\
4555
+ !*** ./redux-templates/src/components/welcome-guide/images.js ***!
4556
+ \****************************************************************/
4557
+ /*! exports provided: GuideImage1, GuideImage2, GuideImage3 */
4558
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
4559
+
4560
+ "use strict";
4561
+ __webpack_require__.r(__webpack_exports__);
4562
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GuideImage1", function() { return GuideImage1; });
4563
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GuideImage2", function() { return GuideImage2; });
4564
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GuideImage3", function() { return GuideImage3; });
4565
+ /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
4566
+ /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
4567
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4568
+
4569
+ /**
4570
+ * WordPress dependencies
4571
+ */
4572
+
4573
+ const GuideImage1 = props => wp.element.createElement(React.Fragment, null, wp.element.createElement("img", _extends({
4574
+ className: "redux-edit-post-welcome-guide__image redux-edit-post-welcome-guide__image__prm-np",
4575
+ alt: "",
4576
+ src: `${redux_templates.plugin}assets/img/welcome-guide-1.png`
4577
+ }, props)));
4578
+ const GuideImage2 = props => wp.element.createElement(React.Fragment, null, wp.element.createElement("img", _extends({
4579
+ className: "redux-edit-post-welcome-guide__image redux-edit-post-welcome-guide__image__prm-np",
4580
+ alt: "",
4581
+ src: `${redux_templates.plugin}assets/img/welcome-guide-2.gif`
4582
+ }, props)));
4583
+ const GuideImage3 = props => wp.element.createElement(React.Fragment, null, wp.element.createElement("img", _extends({
4584
+ className: "redux-edit-post-welcome-guide__image redux-edit-post-welcome-guide__image__prm-np",
4585
+ alt: "",
4586
+ src: `${redux_templates.plugin}assets/img/welcome-guide-3.png`
4587
+ }, props)));
4588
+
4589
+ /***/ }),
4590
+
4591
+ /***/ "./redux-templates/src/components/welcome-guide/index.js":
4592
+ /*!***************************************************************!*\
4593
+ !*** ./redux-templates/src/components/welcome-guide/index.js ***!
4594
+ \***************************************************************/
4595
+ /*! exports provided: default */
4596
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
4597
+
4598
+ "use strict";
4599
+ __webpack_require__.r(__webpack_exports__);
4600
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WelcomeGuide; });
4601
+ /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
4602
+ /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__);
4603
+ /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
4604
+ /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
4605
+ /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
4606
+ /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
4607
+ /* harmony import */ var _images__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./images */ "./redux-templates/src/components/welcome-guide/images.js");
4608
+ /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./style.scss */ "./redux-templates/src/components/welcome-guide/style.scss");
4609
+ /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_4__);
4610
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4611
+
4612
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4613
+
4614
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4615
+
4616
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4617
+
4618
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
4619
+
4620
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4621
+
4622
+ /**
4623
+ * WordPress dependencies
4624
+ */
4625
+ const useState = wp.element.useState;
4626
+
4627
+
4628
+ const _wp = wp,
4629
+ apiFetch = _wp.apiFetch;
4630
+
4631
+ /**
4632
+ * Internal dependencies
4633
+ */
4634
+
4635
+
4636
+
4637
+ function WelcomeGuide() {
4638
+ const _useState = useState(true),
4639
+ _useState2 = _slicedToArray(_useState, 2),
4640
+ isOpen = _useState2[0],
4641
+ setIsOpen = _useState2[1];
4642
+
4643
+ const isActive = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__["useSelect"])(select => select('core/edit-post').isFeatureActive('welcomeGuide'), []);
4644
+
4645
+ if (isActive) {
4646
+ // Don't want to show during the WP guide.
4647
+ delete redux_templates.welcome; // In fact, we don't want to show it until the next page load!
4648
+
4649
+ return null;
4650
+ }
4651
+
4652
+ if (!isOpen || 'undefined' === typeof redux_templates.welcome) {
4653
+ return null;
4654
+ }
4655
+
4656
+ return wp.element.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Guide"], {
4657
+ className: "redux-edit-post-welcome-guide",
4658
+ contentLabel: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Say hello to the Redux template library', redux_templates.i18n),
4659
+ onFinish: () => {
4660
+ setIsOpen(false);
4661
+ const options = {
4662
+ method: 'POST',
4663
+ path: 'redux/v1/templates/welcome/?uid=' + window.userSettings.uid
4664
+ };
4665
+ apiFetch(options).then(response => {}).catch(error => {});
4666
+ },
4667
+ pages: [{
4668
+ image: wp.element.createElement(_images__WEBPACK_IMPORTED_MODULE_3__["GuideImage1"], null),
4669
+ content: wp.element.createElement(React.Fragment, null, wp.element.createElement("h1", {
4670
+ className: "redux-edit-post-welcome-guide__heading"
4671
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Try the Redux Template Library', redux_templates.i18n)), wp.element.createElement("h3", {
4672
+ className: "redux-edit-post-welcome-guide__text"
4673
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Redux brings you over 1,000 importable templates and blocks that allow you to build Gutenberg powered pages and websites in minutes not days.', redux_templates.i18n)))
4674
+ }, {
4675
+ image: wp.element.createElement(_images__WEBPACK_IMPORTED_MODULE_3__["GuideImage2"], null),
4676
+ content: wp.element.createElement(React.Fragment, null, wp.element.createElement("h1", {
4677
+ className: "redux-edit-post-welcome-guide__heading"
4678
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Using the Template Library', redux_templates.i18n)), wp.element.createElement("h3", {
4679
+ className: "redux-edit-post-welcome-guide__text"
4680
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('To use the template library click on the library button then pick your favourite template and import! Redux allows you to import beautiful Gutenberg pages in seconds.', redux_templates.i18n)))
4681
+ }, {
4682
+ image: wp.element.createElement(_images__WEBPACK_IMPORTED_MODULE_3__["GuideImage3"], null),
4683
+ content: wp.element.createElement(React.Fragment, null, wp.element.createElement("h1", {
4684
+ className: "redux-edit-post-welcome-guide__heading"
4685
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Import 5 templates for free or go Pro!', redux_templates.i18n)), wp.element.createElement("h3", {
4686
+ className: "redux-edit-post-welcome-guide__text"
4687
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Redux allows you 5 free imports or you can go Pro now and import unlimited templates for just $49/year (limited time only).', redux_templates.i18n), wp.element.createElement("br", null), wp.element.createElement("br", null), wp.element.createElement("center", null, wp.element.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["ExternalLink"], {
4688
+ href: `${redux_templates.u}welcome-guide`
4689
+ }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('Learn more at Redux.io', redux_templates.i18n)))))
4690
+ }]
4691
+ });
4692
+ }
4693
+
4694
+ /***/ }),
4695
+
4696
+ /***/ "./redux-templates/src/components/welcome-guide/style.scss":
4697
+ /*!*****************************************************************!*\
4698
+ !*** ./redux-templates/src/components/welcome-guide/style.scss ***!
4699
+ \*****************************************************************/
4700
+ /*! no static exports found */
4701
+ /***/ (function(module, exports, __webpack_require__) {
4702
+
4703
+
4704
+ var content = __webpack_require__(/*! !../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./redux-templates/src/components/welcome-guide/style.scss");
4705
+
4706
+ if(typeof content === 'string') content = [[module.i, content, '']];
4707
+
4708
+ var transform;
4709
+ var insertInto;
4710
+
4711
+
4712
+
4713
  var options = {"hmr":true}
4714
 
4715
  options.transform = transform
6835
  /* harmony import */ var _modal_manager__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modal-manager */ "./redux-templates/src/modal-manager/index.js");
6836
  /* harmony import */ var _modal_library__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modal-library */ "./redux-templates/src/modal-library/index.js");
6837
  /* harmony import */ var _custom_css__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./custom-css */ "./redux-templates/src/custom-css/index.js");
6838
+ /* harmony import */ var _components_welcome_guide__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./components/welcome-guide */ "./redux-templates/src/components/welcome-guide/index.js");
6839
  /**
6840
  * Library Button
6841
  */
6862
 
6863
 
6864
 
6865
+
6866
  Object(_wordpress_dom_ready__WEBPACK_IMPORTED_MODULE_0__["default"])(() => {
6867
  setTimeout(() => {
6868
  const challengeDiv = document.createElement('div');
6889
 
6890
  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["render"])(wp.element.createElement(_challenge__WEBPACK_IMPORTED_MODULE_11__["default"], null), challengeWrapperDiv);
6891
  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["render"])(wp.element.createElement(_challenge_tooltip_TooltipBox__WEBPACK_IMPORTED_MODULE_9__["default"], null), challengeDiv);
6892
+ Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["render"])(wp.element.createElement(_components_welcome_guide__WEBPACK_IMPORTED_MODULE_15__["default"], null), challengeDiv);
6893
  Object(_stores_helper__WEBPACK_IMPORTED_MODULE_10__["handlingLocalStorageData"])();
6894
  }, 500);
6895
  });
redux-templates/assets/js/redux-templates.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"redux-templates.js","sources":["webpack:///webpack/bootstrap","webpack:///./redux-templates/src/blocks/library/style.scss","webpack:///./redux-templates/src/challenge/challenge-list-block/style.scss","webpack:///./redux-templates/src/challenge/challenge-timer/style.scss","webpack:///./redux-templates/src/challenge/final-templates/style.scss","webpack:///./redux-templates/src/challenge/style.scss","webpack:///./redux-templates/src/components/background-image/style.scss","webpack:///./redux-templates/src/components/button-group/style.scss","webpack:///./redux-templates/src/components/dependent-plugins/style.scss","webpack:///./redux-templates/src/components/error-notice/style.scss","webpack:///./redux-templates/src/components/fab-wrapper/styles.scss","webpack:///./redux-templates/src/components/multiple-item/style.scss","webpack:///./redux-templates/src/components/pagination/style.scss","webpack:///./redux-templates/src/components/preview-import-button/style.scss","webpack:///./redux-templates/src/components/single-item/style.scss","webpack:///./redux-templates/src/components/template-list-subheader/style.scss","webpack:///./redux-templates/src/custom-css/style.scss","webpack:///./redux-templates/src/editor.scss","webpack:///./redux-templates/src/modal-import-wizard/style.scss","webpack:///./redux-templates/src/modal-library/sidebar/style.scss","webpack:///./redux-templates/src/modal-library/style.scss","webpack:///./redux-templates/src/modal-library/view-collection/style.scss","webpack:///./redux-templates/src/modal-library/view-saved/style.scss","webpack:///./redux-templates/src/modal-library/view-template-list/style.scss","webpack:///./redux-templates/src/modal-preview/style.scss","webpack:///./redux-templates/src/modals.scss","webpack:///./redux-templates/assets/img/icon-color.svg","webpack:///./redux-templates/assets/img/icon.svg","webpack:///./redux-templates/src/blocks/blocks.js","webpack:///./redux-templates/src/blocks/import/components/edit.js","webpack:///./redux-templates/src/blocks/import/icon.js","webpack:///./redux-templates/src/blocks/import/index.js","webpack:///./redux-templates/src/blocks/import/transforms.js","webpack:///./redux-templates/src/blocks/import/utils/file.js","webpack:///./redux-templates/src/blocks/import/utils/import.js","webpack:///./redux-templates/src/blocks/import/utils/insert.js","webpack:///./redux-templates/src/blocks/library/edit.js","webpack:///./redux-templates/src/blocks/library/index.js","webpack:///./redux-templates/src/blocks/library/insert-library-button.js","webpack:///./redux-templates/src/blocks/library/style.scss?eec2","webpack:///./redux-templates/src/challenge/challenge-list-block/ChallengeStepItem.js","webpack:///./redux-templates/src/challenge/challenge-list-block/ProgressBar.js","webpack:///./redux-templates/src/challenge/challenge-list-block/index.js","webpack:///./redux-templates/src/challenge/challenge-list-block/style.scss?9f45","webpack:///./redux-templates/src/challenge/challenge-timer/index.js","webpack:///./redux-templates/src/challenge/challenge-timer/style.scss?1c53","webpack:///./redux-templates/src/challenge/config.js","webpack:///./redux-templates/src/challenge/final-templates/congrats.js","webpack:///./redux-templates/src/challenge/final-templates/contact.js","webpack:///./redux-templates/src/challenge/final-templates/index.js","webpack:///./redux-templates/src/challenge/final-templates/style.scss?54b2","webpack:///./redux-templates/src/challenge/helper.js","webpack:///./redux-templates/src/challenge/index.js","webpack:///./redux-templates/src/challenge/style.scss?5d1a","webpack:///./redux-templates/src/challenge/tooltip/ChallengeDot.js","webpack:///./redux-templates/src/challenge/tooltip/TooltipBox.js","webpack:///./redux-templates/src/components/background-image/index.js","webpack:///./redux-templates/src/components/background-image/style.scss?1987","webpack:///./redux-templates/src/components/button-group/index.js","webpack:///./redux-templates/src/components/button-group/style.scss?5c67","webpack:///./redux-templates/src/components/dependent-plugins/index.js","webpack:///./redux-templates/src/components/dependent-plugins/style.scss?77c8","webpack:///./redux-templates/src/components/error-notice/index.js","webpack:///./redux-templates/src/components/error-notice/style.scss?3b1b","webpack:///./redux-templates/src/components/fab-wrapper/config.js","webpack:///./redux-templates/src/components/fab-wrapper/index.js","webpack:///./redux-templates/src/components/fab-wrapper/styles.scss?0dab","webpack:///./redux-templates/src/components/multiple-item/index.js","webpack:///./redux-templates/src/components/multiple-item/style.scss?3037","webpack:///./redux-templates/src/components/pagination/index.js","webpack:///./redux-templates/src/components/pagination/style.scss?7abf","webpack:///./redux-templates/src/components/preview-import-button/index.js","webpack:///./redux-templates/src/components/preview-import-button/style.scss?db94","webpack:///./redux-templates/src/components/safe-image-load/index.js","webpack:///./redux-templates/src/components/single-item/index.js","webpack:///./redux-templates/src/components/single-item/style.scss?1c09","webpack:///./redux-templates/src/components/tab-header/index.js","webpack:///./redux-templates/src/components/template-list-subheader/images/view-few.svg","webpack:///./redux-templates/src/components/template-list-subheader/images/view-many.svg","webpack:///./redux-templates/src/components/template-list-subheader/images/view-normal.svg","webpack:///./redux-templates/src/components/template-list-subheader/index.js","webpack:///./redux-templates/src/components/template-list-subheader/style.scss?349f","webpack:///./redux-templates/src/custom-css/editor.js","webpack:///./redux-templates/src/custom-css/index.js","webpack:///./redux-templates/src/custom-css/inject-css.js","webpack:///./redux-templates/src/custom-css/style.scss?7049","webpack:///./redux-templates/src/editor.scss?b1ec","webpack:///./redux-templates/src/icons/images/acf-blocks.svg","webpack:///./redux-templates/src/icons/images/advanced-custom-fields.svg","webpack:///./redux-templates/src/icons/images/advanced-gutenberg-blocks.svg","webpack:///./redux-templates/src/icons/images/atomic-blocks.svg","webpack:///./redux-templates/src/icons/images/block-options.svg","webpack:///./redux-templates/src/icons/images/block-slider.svg","webpack:///./redux-templates/src/icons/images/coblocks.svg","webpack:///./redux-templates/src/icons/images/creative-blocks.svg","webpack:///./redux-templates/src/icons/images/editorplus.svg","webpack:///./redux-templates/src/icons/images/elegant-blocks.svg","webpack:///./redux-templates/src/icons/images/enhanced-blocks.svg","webpack:///./redux-templates/src/icons/images/essential-blocks.svg","webpack:///./redux-templates/src/icons/images/forms-gutenberg.svg","webpack:///./redux-templates/src/icons/images/getwid.svg","webpack:///./redux-templates/src/icons/images/ghostkit.svg","webpack:///./redux-templates/src/icons/images/guteblock.svg","webpack:///./redux-templates/src/icons/images/gutentor.svg","webpack:///./redux-templates/src/icons/images/kadence-blocks.svg","webpack:///./redux-templates/src/icons/images/kioken-blocks.svg","webpack:///./redux-templates/src/icons/images/otter-blocks.svg","webpack:///./redux-templates/src/icons/images/qodeblock.svg","webpack:///./redux-templates/src/icons/images/qubely.svg","webpack:///./redux-templates/src/icons/images/snow-monkey-blocks.svg","webpack:///./redux-templates/src/icons/images/stackable-ultimate-gutenberg-blocks.svg","webpack:///./redux-templates/src/icons/images/ultimate-addons-for-gutenberg.svg","webpack:///./redux-templates/src/icons/images/ultimate-blocks.svg","webpack:///./redux-templates/src/icons/images/ultimate-post.svg","webpack:///./redux-templates/src/icons/images/wordpress.svg","webpack:///./redux-templates/src/icons/index.js","webpack:///./redux-templates/src/index.js","webpack:///./redux-templates/src/modal-feedback/index.js","webpack:///./redux-templates/src/modal-import-wizard/ImportingStep.js","webpack:///./redux-templates/src/modal-import-wizard/InstallPluginStep.js","webpack:///./redux-templates/src/modal-import-wizard/OptionStep.js","webpack:///./redux-templates/src/modal-import-wizard/ProPluginsStep.js","webpack:///./redux-templates/src/modal-import-wizard/ReduxTeamplatesActivateBox.js","webpack:///./redux-templates/src/modal-import-wizard/ReduxTemplatesPremiumBox.js","webpack:///./redux-templates/src/modal-import-wizard/index.js","webpack:///./redux-templates/src/modal-import-wizard/style.scss?9a4a","webpack:///./redux-templates/src/modal-library/index.js","webpack:///./redux-templates/src/modal-library/layout-with-sidebar/index.js","webpack:///./redux-templates/src/modal-library/sidebar/categoryFilter.js","webpack:///./redux-templates/src/modal-library/sidebar/dependencyFilter.js","webpack:///./redux-templates/src/modal-library/sidebar/dependencyFilterRow.js","webpack:///./redux-templates/src/modal-library/sidebar/index.js","webpack:///./redux-templates/src/modal-library/sidebar/priceFilter.js","webpack:///./redux-templates/src/modal-library/sidebar/style.scss?e89b","webpack:///./redux-templates/src/modal-library/style.scss?f8e2","webpack:///./redux-templates/src/modal-library/view-collection/index.js","webpack:///./redux-templates/src/modal-library/view-collection/style.scss?bea7","webpack:///./redux-templates/src/modal-library/view-saved/index.js","webpack:///./redux-templates/src/modal-library/view-saved/style.scss?fe19","webpack:///./redux-templates/src/modal-library/view-template-list/index.js","webpack:///./redux-templates/src/modal-library/view-template-list/style.scss?32ed","webpack:///./redux-templates/src/modal-manager/index.js","webpack:///./redux-templates/src/modal-preview/FullyOverlayFooter.js","webpack:///./redux-templates/src/modal-preview/FullyOverlayHeader.js","webpack:///./redux-templates/src/modal-preview/SidebarContent.js","webpack:///./redux-templates/src/modal-preview/SitePreviewSidebar.js","webpack:///./redux-templates/src/modal-preview/index.js","webpack:///./redux-templates/src/modal-preview/style.scss?ef64","webpack:///./redux-templates/src/modals.scss?6210","webpack:///./redux-templates/src/plugins/export-page-menu-item/index.js","webpack:///./redux-templates/src/plugins/export/export-block-menu-item.js","webpack:///./redux-templates/src/plugins/export/file.js","webpack:///./redux-templates/src/plugins/export/index.js","webpack:///./redux-templates/src/plugins/export/reusable.js","webpack:///./redux-templates/src/plugins/library-context-menu-item/index.js","webpack:///./redux-templates/src/plugins/share-block-btn/buttons.js","webpack:///./redux-templates/src/plugins/share-block-btn/index.js","webpack:///./redux-templates/src/plugins/sidebar-share/index.js","webpack:///./redux-templates/src/plugins/sidebar-share/sidebar.js","webpack:///./redux-templates/src/stores/actionHelper.js","webpack:///./redux-templates/src/stores/actions.js","webpack:///./redux-templates/src/stores/dependencyHelper.js","webpack:///./redux-templates/src/stores/filters.js","webpack:///./redux-templates/src/stores/helper.js","webpack:///./redux-templates/src/stores/index.js","webpack:///./redux-templates/src/stores/reducer.js","webpack:///external \"wp.blockEditor\"","webpack:///external \"wp.blocks\"","webpack:///external \"wp.components\"","webpack:///external \"wp.compose\"","webpack:///external \"wp.data\"","webpack:///external \"wp.editPost\"","webpack:///external \"wp.element\"","webpack:///external \"wp.hooks\"","webpack:///external \"wp.i18n\"","webpack:///external \"lodash\"","webpack:///external \"React\"","webpack:///external \"ReactDOM\""],"sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"redux-templates\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"./redux-templates/src/index.js\",\"vendor\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-template-library-block .components-placeholder__label svg {\\n margin-right: 8px; }\\n\\n.redux-template-library-block button.components-button {\\n height: auto;\\n font-weight: 600;\\n text-transform: uppercase;\\n font-size: 13px;\\n padding: 11px 20px;\\n background: #fff; }\\n\\n.components-button.has-icon.redux-templates-insert-library-button {\\n height: 100%; }\\n\\n.redux-templates-insert-library-button {\\n margin-left: 10px;\\n margin-right: 10px; }\\n .redux-templates-insert-library-button svg {\\n width: 20px;\\n height: 20px; }\\n\\n.redux-insert-library-button {\\n margin-left: 10px;\\n margin-right: 10px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".challenge-list-block {\\n padding: 15px 20px 20px;\\n margin-bottom: 15px;\\n background-color: #fff;\\n overflow: hidden;\\n border-radius: 4px;\\n box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -webkit-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -moz-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2); }\\n\\n.challenge-bar {\\n border-radius: 20px;\\n background-color: #eee; }\\n\\n.challenge-bar div {\\n width: 0;\\n height: 20px;\\n border-radius: 20px;\\n background-color: #2576a4; }\\n\\n.challenge-list {\\n list-style: none;\\n margin: 17px 0 20px;\\n font-size: 13px; }\\n .challenge-list li {\\n margin-bottom: 17px; }\\n .challenge-list li i {\\n display: inline-block;\\n font-size: 18px;\\n color: #d6d6d6;\\n margin-right: 8px;\\n line-height: 15px;\\n vertical-align: bottom;\\n border-radius: 50%; }\\n .challenge-list li.challenge-item-current {\\n font-weight: bold; }\\n .challenge-list li.challenge-item-current i {\\n color: #df7739;\\n font-size: 17.5px;\\n line-height: 1;\\n text-indent: 0.5px; }\\n .challenge-list li.challenge-item-completed {\\n font-weight: initial;\\n text-decoration: line-through; }\\n .challenge-list li.challenge-item-completed i {\\n color: #6ab255;\\n font-size: 18px;\\n background-color: #fff; }\\n .challenge-list li .dashicons-yes {\\n display: none;\\n vertical-align: middle; }\\n\\n/* /.challenge-list */\\nbutton.btn-challenge-start {\\n font-size: 12px;\\n padding: 6px 15px;\\n border: 1px solid #00a7e5;\\n background-color: #24b0a6;\\n border-radius: 3px;\\n color: #fff;\\n cursor: pointer; }\\n button.btn-challenge-start:hover {\\n background-color: #19837c; }\\n\\n.btn-challenge-cancel,\\n.btn-challenge-skip {\\n margin: 6px 0;\\n border: 0;\\n text-decoration: underline; }\\n\\n.btn-challenge-cancel,\\n.btn-challenge-skip {\\n align-self: flex-end;\\n color: #909090;\\n font-size: 12px;\\n font-weight: normal;\\n background: none; }\\n\\n.wpforms-btn-md {\\n min-height: initial; }\\n\\n.challenge-button-row {\\n display: flex;\\n justify-content: space-between; }\\n .challenge-button-row button {\\n cursor: pointer; }\\n\\n.started.challenge-button-row {\\n align-content: space-between;\\n flex-direction: column; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".block-timer {\\n padding: 5px;\\n background-color: #2d2d2d;\\n border-radius: 500px;\\n width: 277px;\\n box-sizing: border-box;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-pack: justify;\\n -ms-flex-pack: justify;\\n justify-content: space-between;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -webkit-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -moz-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n padding-left: 50px; }\\n .block-timer img {\\n width: 50px;\\n height: 50px;\\n border-radius: 50%; }\\n .block-timer h3 {\\n font-size: 14px;\\n font-weight: 500;\\n color: #fff;\\n margin: 0; }\\n .block-timer p {\\n font-size: 14px;\\n font-weight: 100;\\n color: #ababab;\\n margin: 0; }\\n .block-timer .caret-icon {\\n border: 2px solid;\\n border-radius: 50%;\\n color: #6c6c6c;\\n margin: 0 15px;\\n width: 23px;\\n height: 23px;\\n font-size: 20px;\\n cursor: pointer; }\\n .block-timer .caret-icon .fa {\\n width: 100%;\\n text-align: center;\\n -webkit-transition: 400ms;\\n -o-transition: 400ms;\\n transition: 400ms; }\\n .block-timer .caret-icon.closed .fa {\\n -webkit-transform: rotate(180deg) translateY(1px);\\n -ms-transform: rotate(180deg) translateY(1px);\\n transform: rotate(180deg) translateY(1px); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".challenge-popup-wrapper {\\n height: 500px;\\n border-radius: 10px; }\\n\\n.challenge-popup-header {\\n width: 100%;\\n height: 212px;\\n border-top-left-radius: 8px;\\n border-top-right-radius: 8px; }\\n\\n.challenge-popup-header-congrats {\\n background-position: center;\\n background-size: cover; }\\n\\n.challenge-popup-header-contact {\\n background-position: center;\\n background-size: auto 75%;\\n background-color: #eee;\\n background-repeat: no-repeat; }\\n\\n.challenge-popup-content {\\n padding: 30px 40px;\\n -webkit-font-smoothing: antialiased; }\\n\\n.challenge-popup-content h3 {\\n color: #24b0a6;\\n margin: 0 0 20px;\\n font-size: 24px;\\n font-family: \\\"Helvetica Neue\\\";\\n font-weight: 500; }\\n\\n.challenge-popup-content p {\\n font-size: 16px;\\n margin: 0 0 22px; }\\n\\n.challenge-popup-content b {\\n font-weight: 500; }\\n\\n.challenge-popup-content .challenge-contact-message {\\n box-shadow: none;\\n resize: none;\\n margin-bottom: 21px;\\n width: 100%;\\n min-height: 175px; }\\n\\n.challenge-popup-content label {\\n font-size: 13.8px;\\n display: block;\\n margin-bottom: 23px; }\\n\\n.challenge-popup-content input[type=\\\"checkbox\\\"] {\\n margin-right: 8px; }\\n\\n.challenge-popup-content .rating-stars {\\n color: #fdb72c;\\n font-size: 18px;\\n font-weight: bold; }\\n\\n.challenge-popup-close .fa-times {\\n font-size: 20px;\\n color: #777;\\n float: right;\\n margin: 15px;\\n border-radius: 50%;\\n cursor: pointer; }\\n\\n.challenge-popup-btn {\\n display: inline-block;\\n border-radius: 2px;\\n cursor: pointer;\\n text-decoration: none;\\n text-align: center;\\n vertical-align: middle;\\n white-space: nowrap;\\n box-shadow: none;\\n font-size: 15px;\\n font-weight: 600;\\n padding: 14px 25px;\\n border: 1px solid #00a7e5;\\n background-color: #24b0a6;\\n color: #fff; }\\n .challenge-popup-btn:hover {\\n border: 1px solid #19837c;\\n background-color: #19837c;\\n color: #fff; }\\n .challenge-popup-btn .dashicons-external {\\n margin-left: 6px; }\\n\\n.challenge-popup-content.challenge-contact p {\\n font-size: 14px; }\\n\\n.challenge-popup-content.challenge-contact textarea {\\n margin-bottom: 10px; }\\n\\n.challenge-popup-content.challenge-contact label {\\n font-size: 13px;\\n margin-bottom: 15px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-challenge {\\n display: block;\\n position: fixed;\\n right: 1em;\\n bottom: 55px;\\n max-width: 277px;\\n z-index: 9999; }\\n .redux-templates-challenge p {\\n font-size: 14px;\\n line-height: 1.4;\\n margin-top: 0;\\n color: #23282c; }\\n .redux-templates-challenge b {\\n font-weight: 500; }\\n .redux-templates-challenge.challenge-start {\\n display: initial; }\\n\\n@media all and (max-height: 900px) {\\n #challenge-contact-popup {\\n margin: 50px 0 20px; } }\\n\\n.challenge-tooltip.tooltipster-sidetip {\\n z-index: 100100 !important; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-box {\\n margin-bottom: 18px; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-arrow {\\n bottom: 8px; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {\\n top: 0; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-right .tooltipster-box {\\n margin-right: 18px; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-right .tooltipster-arrow {\\n left: 8px; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box {\\n background: #fff;\\n border: none;\\n border-radius: 4px;\\n box-shadow: 0 10px 35px 0 rgba(0, 0, 0, 0.25);\\n -webkit-box-shadow: 0 10px 35px 0 rgba(0, 0, 0, 0.25);\\n -moz-box-shadow: 0 10px 35px 0 rgba(0, 0, 0, 0.25); }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .tooltipster-content {\\n color: #444;\\n padding: 16px 20px 18px; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .tooltipster-content h3 {\\n font-size: 15px;\\n margin: 0; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .tooltipster-content p {\\n margin: 10px 0 0; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .challenge-done-btn {\\n border-radius: 3px;\\n cursor: pointer;\\n text-decoration: none;\\n text-align: center;\\n vertical-align: middle;\\n white-space: nowrap;\\n box-shadow: none;\\n font-size: 13px;\\n font-weight: 600;\\n padding: 7px 18px;\\n border: 1px solid #00a7e5;\\n background-color: #24b0a6;\\n color: #fff;\\n display: block;\\n margin: 15px auto 0;\\n outline: none; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .challenge-done-btn:hover {\\n border: 1px solid #19837c;\\n background-color: #19837c; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-arrow-border {\\n border: none; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {\\n border-bottom-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {\\n border-right-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {\\n border-top-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {\\n border-left-color: #fff; }\\n\\n.block-editor-page .edit-post-layout .components-notice-list > div {\\n padding-left: 50px; }\\n\\n.block-editor-page span.wpforms-challenge-dot-step5 {\\n margin: 22px 18px;\\n z-index: 9999; }\\n\\n.block-editor-page .wpforms-challenge-tooltip.wpforms-challenge-tooltip-step5 {\\n max-width: 233px;\\n z-index: 99980 !important; }\\n\\n.challenge-wrapper {\\n position: fixed;\\n top: 0;\\n left: 0;\\n z-index: 600000; }\\n\\n.challenge-tooltip-holder {\\n position: fixed;\\n top: 0;\\n left: 0;\\n z-index: 600000; }\\n .challenge-tooltip-holder .tooltipster-box {\\n position: absolute;\\n box-shadow: 0 -10px 35px 0 rgba(0, 0, 0, 0.25);\\n z-index: 10000;\\n background: #fff;\\n padding: 15px 20px; }\\n\\n.challenge-dot {\\n display: inline-block;\\n width: 16px;\\n height: 16px;\\n background: #24b0a6;\\n box-shadow: 0 0 0 4px rgba(25, 131, 124, 0.15);\\n border-radius: 50%;\\n border: 0;\\n padding: 0; }\\n\\n.tooltipster-sidetip .tooltipster-arrow {\\n position: absolute;\\n width: 20px;\\n height: 10px;\\n z-index: 10000; }\\n\\n.tooltipster-sidetip .tooltipster-arrow-uncropped {\\n position: relative; }\\n\\n.tooltipster-sidetip .tooltipster-arrow-border {\\n left: 0;\\n top: 0;\\n border: none;\\n width: 0;\\n height: 0;\\n position: absolute; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-arrow-background {\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 0;\\n position: absolute;\\n border: 10px solid transparent; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top {\\n border-top-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-bottom {\\n border-bottom-color: #fff; }\\n\\n.block-timer .caret-icon .fa {\\n -webkit-transition: 400ms;\\n -o-transition: 400ms;\\n transition: 400ms;\\n line-height: 23px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-single-section-item .block-editor-block-preview__container {\\n margin: 0 auto;\\n min-height: 130px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-import-button-group {\\n text-align: center; }\\n .redux-templates-import-button-group.disabled span a {\\n cursor: default;\\n opacity: 0.8; }\\n\\n.redux-templates-single-section-item {\\n margin-bottom: 15px; }\\n .redux-templates-single-section-item .redux-templates-import-button-group {\\n margin-top: 10%; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-button-display-dependencies {\\n display: flex;\\n justify-content: center;\\n margin: 10px; }\\n .redux-templates-button-display-dependencies span svg {\\n margin-right: 5px;\\n cursor: pointer; }\\n .redux-templates-button-display-dependencies span svg * {\\n fill: #f7f7f7; }\\n .redux-templates-button-display-dependencies span.missing-dependency svg * {\\n fill: rgba(247, 247, 247, 0.5); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-error-notice .components-notice {\\n display: flex;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 13px;\\n background-color: #e5f5fa;\\n border-left: 4px solid #00a0d2;\\n margin: 5px 15px 2px;\\n padding: 8px 12px;\\n align-items: center;\\n position: absolute;\\n height: 50px;\\n z-index: 9999;\\n width: 50%;\\n right: 0;\\n top: 70px;\\n transition: opacity 2s linear; }\\n .redux-templates-error-notice .components-notice.is-dismissible {\\n padding-right: 0; }\\n .redux-templates-error-notice .components-notice.is-success {\\n border-left-color: #4ab866;\\n background-color: rgba(74, 184, 102, 0.95); }\\n .redux-templates-error-notice .components-notice.is-warning {\\n border-left-color: #f0b849;\\n background-color: rgba(254, 248, 238, 0.95); }\\n .redux-templates-error-notice .components-notice.is-error {\\n border-left-color: #d94f4f;\\n background-color: rgba(249, 226, 226, 0.95); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".rtf {\\n box-sizing: border-box;\\n margin: 25px;\\n position: fixed;\\n white-space: nowrap;\\n z-index: 9998;\\n padding-left: 0;\\n list-style: none; }\\n .rtf.open .rtf--mb > * {\\n transform-origin: center center;\\n transform: none;\\n transition: ease-in-out transform 0.2s; }\\n .rtf.open .rtf--mb > ul {\\n list-style: none;\\n margin: 0;\\n padding: 0; }\\n .rtf.open .rtf--ab__c:hover > span {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf.open .rtf--ab__c > span.always-show {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf.open .rtf--ab__c:nth-child(1) {\\n transform: translateY(-60px) scale(1);\\n transition-delay: 0.03s; }\\n .rtf.open .rtf--ab__c:nth-child(1).top {\\n transform: translateY(60px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(2) {\\n transform: translateY(-120px) scale(1);\\n transition-delay: 0.09s; }\\n .rtf.open .rtf--ab__c:nth-child(2).top {\\n transform: translateY(120px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(3) {\\n transform: translateY(-180px) scale(1);\\n transition-delay: 0.12s; }\\n .rtf.open .rtf--ab__c:nth-child(3).top {\\n transform: translateY(180px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(4) {\\n transform: translateY(-240px) scale(1);\\n transition-delay: 0.15s; }\\n .rtf.open .rtf--ab__c:nth-child(4).top {\\n transform: translateY(240px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(5) {\\n transform: translateY(-300px) scale(1);\\n transition-delay: 0.18s; }\\n .rtf.open .rtf--ab__c:nth-child(5).top {\\n transform: translateY(300px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(6) {\\n transform: translateY(-360px) scale(1);\\n transition-delay: 0.21s; }\\n .rtf.open .rtf--ab__c:nth-child(6).top {\\n transform: translateY(360px) scale(1); }\\n\\n.rtf--mb__c {\\n padding: 25px;\\n margin: -25px; }\\n .rtf--mb__c *:last-child {\\n margin-bottom: 0; }\\n .rtf--mb__c:hover > span {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf--mb__c > span.always-show {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf--mb__c > span {\\n opacity: 0;\\n transition: ease-in-out opacity 0.2s;\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n margin-right: 6px;\\n margin-left: 4px;\\n background: rgba(0, 0, 0, 0.75);\\n padding: 2px 4px;\\n border-radius: 2px;\\n color: #fff;\\n font-size: 13px;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28); }\\n .rtf--mb__c > span.right {\\n right: 100%; }\\n\\n.rtf--mb {\\n height: 56px;\\n width: 56px;\\n z-index: 9999;\\n background-color: #666;\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n position: relative;\\n border: none;\\n border-radius: 50%;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28);\\n cursor: pointer;\\n outline: none;\\n padding: 0;\\n -webkit-user-drag: none;\\n font-weight: bold;\\n color: #f1f1f1;\\n font-size: 18px; }\\n .rtf--mb > * {\\n transition: ease-in-out transform 0.2s; }\\n\\n.rtf--ab__c {\\n display: block;\\n position: absolute;\\n top: 0;\\n right: 1px;\\n padding: 10px 0;\\n margin: -10px 0;\\n transition: ease-in-out transform 0.2s; }\\n .rtf--ab__c > span {\\n opacity: 0;\\n transition: ease-in-out opacity 0.2s;\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n margin-right: 6px;\\n background: rgba(0, 0, 0, 0.75);\\n padding: 2px 4px;\\n border-radius: 2px;\\n color: #fff;\\n font-size: 13px;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28); }\\n .rtf--ab__c > span.right {\\n right: 100%; }\\n .rtf--ab__c:nth-child(1) {\\n transform: translateY(-60px) scale(0);\\n transition-delay: 0.21s; }\\n .rtf--ab__c:nth-child(1).top {\\n transform: translateY(60px) scale(0); }\\n .rtf--ab__c:nth-child(2) {\\n transform: translateY(-120px) scale(0);\\n transition-delay: 0.18s; }\\n .rtf--ab__c:nth-child(2).top {\\n transform: translateY(120px) scale(0); }\\n .rtf--ab__c:nth-child(3) {\\n transform: translateY(-180px) scale(0);\\n transition-delay: 0.15s; }\\n .rtf--ab__c:nth-child(3).top {\\n transform: translateY(180px) scale(0); }\\n .rtf--ab__c:nth-child(4) {\\n transform: translateY(-240px) scale(0);\\n transition-delay: 0.12s; }\\n .rtf--ab__c:nth-child(4).top {\\n transform: translateY(240px) scale(0); }\\n .rtf--ab__c:nth-child(5) {\\n transform: translateY(-300px) scale(0);\\n transition-delay: 0.09s; }\\n .rtf--ab__c:nth-child(5).top {\\n transform: translateY(300px) scale(0); }\\n .rtf--ab__c:nth-child(6) {\\n transform: translateY(-360px) scale(0);\\n transition-delay: 0.03s; }\\n .rtf--ab__c:nth-child(6).top {\\n transform: translateY(360px) scale(0); }\\n\\n.rtf--ab {\\n height: 48px;\\n width: 48px;\\n background-color: #aaa;\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n position: relative;\\n border: none;\\n border-radius: 50%;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28);\\n cursor: pointer;\\n outline: none;\\n padding: 0;\\n -webkit-user-drag: none;\\n font-weight: bold;\\n color: #f1f1f1;\\n margin-right: 4px;\\n font-size: 16px;\\n z-index: 10000; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/*multiple box*/\\n.redux-templates-multiple-template-box {\\n margin-bottom: 25px;\\n position: relative;\\n transition: all 0.05s ease-in-out; }\\n .redux-templates-multiple-template-box img {\\n transition: all 0.05s ease-in-out; }\\n .redux-templates-multiple-template-box .redux-templates-box-shadow {\\n transition: all 0.05s ease-in-out;\\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); }\\n .redux-templates-multiple-template-box .redux-templates-default-template-image .imageloader-loaded {\\n overflow: hidden; }\\n .redux-templates-multiple-template-box .multiple-template-view {\\n background: #fff;\\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05), 0 10px 0 -5px #fff, 0 10px 1px -4px rgba(0, 0, 0, 0.08), 0 20px 0 -10px #fff, 0 20px 1px -9px rgba(0, 0, 0, 0.08);\\n cursor: pointer;\\n min-height: 100px; }\\n .redux-templates-multiple-template-box .redux-templates-import-button-group {\\n margin-top: 15%; }\\n .redux-templates-multiple-template-box .redux-templates-tmpl-info {\\n padding: 10px 12px;\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n background: rgba(255, 255, 255, 0.95);\\n border-top: 1px solid #f2f4f7;\\n transition: all 0.2s ease-in-out; }\\n .redux-templates-multiple-template-box .redux-templates-tmpl-info h5 {\\n margin: 0;\\n font-size: 14px;\\n color: #23282d;\\n line-height: 19px; }\\n .redux-templates-multiple-template-box .redux-templates-tmpl-info h5 span {\\n font-size: 13px;\\n color: #cdcfd1;\\n line-height: 18px; }\\n .redux-templates-multiple-template-box .redux-templates-button-overlay {\\n width: 100%;\\n height: 100%;\\n position: absolute;\\n top: 0;\\n left: 0;\\n border-radius: 0px;\\n opacity: 0;\\n -webkit-transition: opacity 0.2s ease-in-out;\\n transition: opacity 0.2s ease-in-out;\\n box-sizing: border-box; }\\n .redux-templates-multiple-template-box::before {\\n z-index: 2; }\\n .redux-templates-multiple-template-box::after {\\n z-index: 1; }\\n .redux-templates-multiple-template-box .redux-templates-button-overlay {\\n background: rgba(0, 0, 0, 0.5);\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n opacity: 0; }\\n .redux-templates-multiple-template-box:hover .redux-templates-box-shadow {\\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.3); }\\n .redux-templates-multiple-template-box:hover .multiple-template-view {\\n border-color: transparent; }\\n .redux-templates-multiple-template-box:hover .redux-templates-tmpl-info {\\n border-top-color: transparent;\\n background: #fff; }\\n .redux-templates-multiple-template-box:hover .redux-templates-button-overlay {\\n opacity: 1; }\\n .redux-templates-multiple-template-box:hover img {\\n filter: blur(2px); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".tablenav-pages {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n margin-bottom: 20px; }\\n .tablenav-pages span.displaying-num {\\n margin-right: 20px; }\\n .tablenav-pages #table-paging {\\n margin-left: 10px;\\n margin-right: 10px; }\\n .tablenav-pages #table-paging span {\\n line-height: 30px; }\\n .tablenav-pages span.tablenav-pages-navspan.button {\\n cursor: pointer;\\n margin: 0 2px; }\\n .tablenav-pages span.tablenav-pages-navspan.button.disabled {\\n cursor: default; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".action-buttons span,\\n.action-buttons a {\\n display: inline-block;\\n padding: 0 12px 2px;\\n margin: 2px;\\n height: 33px;\\n line-height: 32px;\\n font-size: 13px;\\n color: #353535;\\n border: 1px solid #f7f7f7;\\n background: #f7f7f7;\\n box-shadow: 0 1px 2px #ddd;\\n vertical-align: top;\\n border-radius: 3px;\\n text-decoration: none;\\n cursor: pointer;\\n -webkit-transition: all 0.2s ease-in-out;\\n transition: all 0.2s ease-in-out; }\\n .action-buttons span:hover,\\n .action-buttons a:hover {\\n box-shadow: 0 1px 2px #ccc;\\n background: #f1f1f1; }\\n\\n.action-buttons span i,\\n.action-buttons a i {\\n font-size: 10px;\\n margin-right: 4px; }\\n\\n.action-buttons span {\\n background: #0085ba;\\n border-color: #006a95 #00648c #00648c;\\n box-shadow: inset 0 -1px 0 #00648c;\\n color: #fff;\\n text-decoration: none;\\n text-shadow: 0 -1px 1px #005d82, 1px 0 1px #005d82, 0 1px 1px #005d82, -1px 0 1px #005d82; }\\n\\n.action-buttons a.redux-templates-button-download {\\n border: 1px solid #f5a623;\\n background: #f5a623;\\n box-shadow: 0 1px 0 #165cb4;\\n color: #fff; }\\n\\n.action-buttons .redux-templates-button-download {\\n margin-left: 5px; }\\n\\n.action-buttons i.challenge-dot {\\n margin-top: 10px;\\n margin-left: 5px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-single-section-item {\\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.2);\\n margin-bottom: 30px;\\n transition: all 0.05s ease-in-out; }\\n .redux-templates-single-section-item .redux-templates-tmpl-title {\\n background: rgba(255, 255, 255, 0.95);\\n border-top: 1px solid #f2f4f7;\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n margin: 0;\\n color: #23282d;\\n padding: 13px 15px;\\n font-size: 15px; }\\n .redux-templates-single-section-item .redux-templates-single-item-inner {\\n position: relative;\\n overflow: hidden;\\n background: #999; }\\n .redux-templates-single-section-item .redux-templates-single-item-inner .warn_notice {\\n color: #fbbc0e;\\n font-weight: bold;\\n margin-bottom: 15px;\\n font-size: 14px;\\n opacity: 0;\\n text-align: center; }\\n .redux-templates-single-section-item .redux-templates-single-item-inner .redux-templates-default-template-image {\\n max-height: 350px;\\n min-height: 100px;\\n transition: 300ms; }\\n\\n#collections-sections-list.large > div {\\n width: 50%; }\\n\\n#collections-sections-list.small > div {\\n width: 25%; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-template-filters .is-active {\\n background: #fff;\\n color: #191e23;\\n box-shadow: inset 0 0 0 1px #555d66, inset 0 0 0 2px #fff; }\\n\\n.redux-templates-template-filters .components-button:focus:not(:disabled):not(.is-active) {\\n background: transparent;\\n box-shadow: none;\\n color: #555d66; }\\n\\n.refresh-library {\\n margin-right: 10px; }\\n\\n.tour-icon {\\n font-size: 18px; }\\n\\n.trial_notice * {\\n vertical-align: middle; }\\n\\n.trial_notice .components-notice__content {\\n margin-right: 0; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-css-editor {\\n border: 1px solid #e2e4e7;\\n margin-bottom: 20px; }\\n\\n.redux-css-editor-help {\\n background: #f7f7f7;\\n padding: 20px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#redux-templatesImportCollectionBtn {\\n vertical-align: middle;\\n display: inline-flex;\\n align-items: center;\\n text-decoration: none;\\n border: 1px solid #bababa;\\n border-radius: 3px;\\n white-space: nowrap;\\n color: #555d66;\\n font-size: 13px;\\n margin: 0 15px 0 15px;\\n padding: 9px 12px;\\n background: transparent;\\n cursor: pointer;\\n -webkit-appearance: none;\\n transition: 400ms; }\\n #redux-templatesImportCollectionBtn svg {\\n height: 16px;\\n width: 16px;\\n margin-right: 8px; }\\n #redux-templatesImportCollectionBtn svg * {\\n stroke: #555d66;\\n fill: #555d66;\\n stroke-width: 0; }\\n #redux-templatesImportCollectionBtn:hover, #redux-templatesImportCollectionBtn:focus, #redux-templatesImportCollectionBtn:active {\\n text-decoration: none;\\n border: 1px solid #191e23;\\n color: #191e23; }\\n #redux-templatesImportCollectionBtn:hover svg *, #redux-templatesImportCollectionBtn:focus svg *, #redux-templatesImportCollectionBtn:active svg * {\\n stroke: #191e23 !important;\\n fill: #191e23 !important;\\n stroke-width: 0; }\\n\\n.redux-templates-editor-btn {\\n background: none;\\n border: 0;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n overflow: visible;\\n padding: 0;\\n -webkit-appearance: button;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none; }\\n .redux-templates-editor-btn::-moz-focus-inner {\\n border: 0;\\n padding: 0; }\\n\\n.d-flex {\\n display: flex; }\\n\\n.justify-content-center {\\n justify-content: center; }\\n\\n.redux-css-editor {\\n border: 1px solid #e2e4e7;\\n margin-bottom: 20px; }\\n\\n.redux-css-editor-help {\\n background: #f7f7f7;\\n padding: 20px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-modal-wrapper {\\n /* ReduxTemplatesPremiumBox */ }\\n .redux-templates-modal-wrapper .redux-templates-modal-body {\\n flex: 1 1 auto;\\n padding-left: 30px;\\n padding-right: 30px;\\n box-sizing: border-box;\\n background: #fff; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body h5 {\\n font-size: 1.1em;\\n font-weight: 600; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body ul {\\n list-style-position: inside;\\n list-style-type: disc; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body ul.redux-templates-import-wizard-missing-dependency li {\\n line-height: 1.8; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error {\\n color: #f00; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error i {\\n color: inherit; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error.installError {\\n text-align: center; }\\n .redux-templates-modal-wrapper .redux-templates-import-wizard-spinner-wrapper {\\n position: absolute;\\n width: calc(100% - 60px);\\n height: 100%;\\n flex: 1 1 auto;\\n align-items: center;\\n justify-content: center;\\n display: flex;\\n flex-direction: column; }\\n .redux-templates-modal-wrapper .redux-templates-import-wizard-spinner-wrapper .text-transition {\\n text-align: center;\\n font-size: 18px;\\n color: #555d66;\\n margin-bottom: 20px; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress {\\n font-size: 1.1em;\\n text-align: center; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li {\\n list-style: none; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li.success i {\\n color: #46b450; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li.info i {\\n color: #00a0d2; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress {\\n width: 50%;\\n margin: 10px auto; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li {\\n display: flex;\\n justify-content: space-between; }\\n .redux-templates-modal-wrapper .section-box.premium-box {\\n margin: 35px auto;\\n text-align: center; }\\n .redux-templates-modal-wrapper .section-box.premium-box h3 {\\n font-size: 1.5em;\\n line-height: 1.1em;\\n margin-top: 0px; }\\n .redux-templates-modal-wrapper .section-box.premium-box p {\\n font-size: calc(13px + 0.2vw); }\\n .redux-templates-modal-wrapper .section-box.premium-box ul {\\n width: 50%;\\n margin: 0 auto;\\n text-align: left;\\n list-style-type: disc;\\n list-style-position: inside; }\\n .redux-templates-modal-wrapper .section-box.premium-box .redux-templates-upgrade-button {\\n border: none;\\n border-radius: 4px;\\n cursor: pointer;\\n opacity: 1;\\n background: #24b0a6;\\n transition: opacity 0.2s ease-in-out;\\n box-shadow: none !important;\\n color: #fff;\\n text-decoration: none;\\n padding: 0.75em 1.25em;\\n display: block;\\n margin: 30px auto 0 auto;\\n max-width: 200px;\\n text-align: center;\\n font-size: 1em; }\\n .redux-templates-modal-wrapper .section-box.premium-box .redux-templates-upgrade-button:hover {\\n color: #fff;\\n opacity: 0.85;\\n box-shadow: none !important;\\n background: #19837c; }\\n .redux-templates-modal-wrapper .redux-templates-importmodal-content {\\n flex: 1;\\n display: flex;\\n flex-direction: column; }\\n\\n.text-transition {\\n width: 100% !important;\\n text-align: center; }\\n .text-transition .text-transition_inner > div {\\n font-size: 1.1rem; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-collection-modal-sidebar {\\n min-width: 270px;\\n background: #fff;\\n color: #32373c;\\n /* $secondaryColor;*/\\n border-right: 1px solid #e2e4e7;\\n overflow-y: auto; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group {\\n margin: 10px 0;\\n border-bottom: 1px solid #e2e4e7;\\n width: 100%;\\n display: inline-flex; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button {\\n font-weight: 500;\\n flex-grow: 1;\\n min-width: 30%;\\n line-height: 20px;\\n padding: 8px 0 10px 15px;\\n align-items: center;\\n text-align: left;\\n background: none;\\n position: relative;\\n margin-bottom: -1px;\\n border-width: 0;\\n z-index: 1;\\n cursor: pointer;\\n outline: none;\\n border-color: transparent;\\n box-shadow: none;\\n border-bottom: unset; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button::after {\\n content: attr(data-label);\\n display: block;\\n height: 0;\\n overflow: hidden;\\n speak: none;\\n visibility: hidden; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button:hover {\\n color: #007cba;\\n color: var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button:focus {\\n box-shadow: inset 0 0 0 1.5px #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.active {\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.active::before {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n bottom: 1px;\\n right: 0;\\n left: 0;\\n border-bottom: 4px solid transparent; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.active:focus {\\n box-shadow: inset 0 0 0 1.5px #007cba, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color), inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.disabled {\\n opacity: 0.4; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button img {\\n display: inline-block;\\n width: auto;\\n height: 14px;\\n margin-right: 4px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button:last-child img {\\n margin-bottom: -2px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content {\\n padding: 0 15px 15px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content h3 {\\n margin: 5px 12px 10px 0;\\n color: #757575;\\n text-transform: uppercase;\\n font-size: 11px;\\n font-weight: 500; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul {\\n list-style: unset;\\n -webkit-touch-callout: none;\\n /* iOS Safari */\\n -webkit-user-select: none;\\n /* Safari */\\n -khtml-user-select: none;\\n /* Konqueror HTML */\\n -moz-user-select: none;\\n /* Old versions of Firefox */\\n -ms-user-select: none;\\n /* Internet Explorer/Edge */\\n user-select: none;\\n /* Non-prefixed version, currently\\n supported by Chrome, Edge, Opera and Firefox */\\n margin: 0 15px 15px 15px;\\n padding: 0; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li {\\n display: block;\\n font-size: 13px;\\n cursor: pointer;\\n height: auto;\\n -webkit-transition: height 0.5s linear;\\n -moz-transition: height 0.5s linear;\\n -ms-transition: height 0.5s linear;\\n -o-transition: height 0.5s linear;\\n transition: height 0.5s linear; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li .redux-icon-wrapper {\\n margin-left: 10px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li:not(.disabled):hover {\\n color: #007cba;\\n color: var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.active {\\n color: #007cba;\\n color: var(--wp-admin-theme-color);\\n text-shadow: 0 0 0.5px #007cba;\\n text-shadow: 0 0 0.5px var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.disabled {\\n display: none;\\n height: 0px;\\n -webkit-transition: height 0.5s linear;\\n -moz-transition: height 0.5s linear;\\n -ms-transition: height 0.5s linear;\\n -o-transition: height 0.5s linear;\\n transition: height 0.5s linear; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li span {\\n float: right; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.missing-dependency i.fa-exclamation-triangle {\\n color: #b27823; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.missing-dependency:hover i.fa-exclamation-triangle {\\n color: #f5a623; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.missing-dependency.active i.fa-exclamation-triangle {\\n color: #f5a623; }\\n .redux-templates-collection-modal-sidebar ul.redux-templates-sidebar-dependencies li .components-base-control {\\n display: inline-block;\\n margin-bottom: 0 !important; }\\n .redux-templates-collection-modal-sidebar ul.redux-templates-sidebar-dependencies li .components-base-control .components-base-control__field {\\n margin-bottom: 3px; }\\n .redux-templates-collection-modal-sidebar ul.redux-templates-sidebar-dependencies li .components-base-control span {\\n float: none; }\\n .redux-templates-collection-modal-sidebar .redux-templates-select-actions {\\n margin: 0 0 10px 15px;\\n display: inline-flex; }\\n .redux-templates-collection-modal-sidebar .redux-templates-select-actions i.challenge-dot {\\n margin-left: 10px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-select-actions.disabled a {\\n pointer-events: none;\\n cursor: default;\\n text-decoration: none;\\n opacity: 0.6; }\\n .redux-templates-collection-modal-sidebar .redux-templates-sidebar-dependencies li a {\\n display: inline-block;\\n margin-left: 10px; }\\n .redux-templates-collection-modal-sidebar #redux-templates-filter-dependencies h3 {\\n margin-top: 0;\\n padding-top: 3px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-collections-modal-body {\\n display: flex;\\n flex: 1;\\n overflow-y: auto; }\\n\\n.redux-templates-builder-modal {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n z-index: 9999;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n pointer-events: none; }\\n .redux-templates-builder-modal.hidden {\\n display: none; }\\n .redux-templates-builder-modal .wp-full-overlay-sidebar .wp-core-ui .button-group.button-hero .button,\\n .redux-templates-builder-modal .wp-full-overlay-sidebar .wp-core-ui .button.button-hero {\\n text-align: center !important; }\\n .redux-templates-builder-modal * {\\n box-sizing: border-box;\\n pointer-events: all; }\\n .redux-templates-builder-modal .redux-templates-pagelist-modal-overlay {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n background: #f00;\\n left: 0;\\n top: 0;\\n z-index: -1;\\n background: rgba(3, 8, 15, 0.75); }\\n .redux-templates-builder-modal .components-base-control__field {\\n display: flex; }\\n .redux-templates-builder-modal textarea {\\n width: 100%;\\n height: 80px; }\\n .redux-templates-builder-modal .redux-icon-wrapper {\\n display: inline-block; }\\n .redux-templates-builder-modal button.components-button {\\n z-index: unset; }\\n\\n.redux-templates-builder-modal-header {\\n display: flex;\\n border-bottom: 1px solid #e2e4e7;\\n background: #fff; }\\n .redux-templates-builder-modal-header .template-search-box {\\n position: relative;\\n width: 270px; }\\n .redux-templates-builder-modal-header .template-search-box > div {\\n padding: 10px; }\\n .redux-templates-builder-modal-header .template-search-box i {\\n font-size: 13px;\\n color: #757575;\\n position: absolute;\\n top: 50%;\\n right: 30px;\\n transform: translateY(-50%); }\\n .redux-templates-builder-modal-header .template-search-box i.challenge-dot {\\n right: 20px;\\n left: auto; }\\n .redux-templates-builder-modal-header .template-search-box i.clear-search {\\n right: 20px;\\n left: auto;\\n color: #fff;\\n font-size: 12px;\\n display: none;\\n cursor: pointer;\\n padding: 5px; }\\n .redux-templates-builder-modal-header .template-search-box input {\\n display: block;\\n width: 100%;\\n box-shadow: 0 0 0 transparent;\\n transition: box-shadow 0.1s linear;\\n border-radius: 2px;\\n line-height: normal;\\n display: block;\\n padding: 16px 48px 16px 16px;\\n background: #f3f4f5;\\n border: none;\\n width: 100%;\\n height: 40px;\\n font-size: 13px; }\\n .redux-templates-builder-modal-header .template-search-box input::-webkit-input-placeholder {\\n /* WebKit browsers */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input:-moz-placeholder {\\n /* Mozilla Firefox 4 to 18 */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input::-moz-placeholder {\\n /* Mozilla Firefox 19+ */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input:-ms-input-placeholder {\\n /* Internet Explorer 10+ */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input:focus {\\n border-color: #007cba;\\n border-color: var(--wp-admin-theme-color);\\n background: #fff;\\n box-shadow: 0 0 0 1.5px #007cba;\\n box-shadow: 0 0 0 1.5px var(--wp-admin-theme-color);\\n outline: 2px solid transparent; }\\n .redux-templates-builder-modal-header .template-search-box:hover .clear-search {\\n display: block; }\\n\\n.redux-templates-pagelist-modal-inner {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n background: #f1f1f1;\\n width: 85.9375%;\\n height: 89.537037%;\\n max-width: 1650px;\\n max-height: 967px;\\n box-shadow: 0 0 45px 10px rgba(3, 8, 15, 0.2);\\n animation: components-modal__appear-animation 0.1s ease-out;\\n animation-fill-mode: forwards; }\\n .redux-templates-pagelist-modal-inner .redux-templates-collection-modal-content-area {\\n flex-grow: 1;\\n max-height: 100%;\\n overflow-y: auto;\\n position: relative; }\\n\\n.redux-templates-template-list-header {\\n text-align: center;\\n position: relative;\\n flex-grow: 1;\\n padding-right: 50px; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal) {\\n flex-grow: 1;\\n line-height: 28px;\\n margin-top: 6px;\\n padding: 14px 15px 13px 15px;\\n text-align: left;\\n font-weight: 600;\\n width: 150px;\\n align-items: center;\\n background: none;\\n position: relative;\\n margin-bottom: -1px;\\n border-width: 0;\\n z-index: 1;\\n cursor: pointer;\\n outline: none;\\n border-color: transparent;\\n box-shadow: none;\\n border-bottom: unset; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal)::after {\\n content: attr(data-label);\\n display: block;\\n height: 0;\\n overflow: hidden;\\n speak: none;\\n visibility: hidden; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal):hover {\\n color: #007cba;\\n color: var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal):focus {\\n box-shadow: inset 0 0 0 1.5px #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).active {\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).active::before {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n bottom: 1px;\\n right: 0;\\n left: 0;\\n border-bottom: 4px solid transparent; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).active:focus {\\n box-shadow: inset 0 0 0 1.5px #007cba, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color), inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).disabled {\\n opacity: 0.5; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal {\\n position: absolute;\\n top: 0;\\n right: 0;\\n width: 60px;\\n height: 60px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid transparent;\\n background: none;\\n font-size: 15px;\\n cursor: pointer;\\n outline: none;\\n transition: color 0.1s ease-in-out, background 0.1s ease-in-out; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal i {\\n -webkit-text-stroke: 1.2px #fff; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal svg {\\n margin-top: 4px; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal:hover, .redux-templates-template-list-header .redux-templates-builder-close-modal:active {\\n color: #00a0d2; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal:focus {\\n color: #00a0d2;\\n border-color: #5b9dd9;\\n box-shadow: 0 0 3px rgba(0, 115, 170, 0.8);\\n /* Only visible in Windows High Contrast mode */\\n outline: 2px solid transparent; }\\n\\n.redux-templates-template-list-sub-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 23px 25px 0; }\\n .redux-templates-template-list-sub-header h4 {\\n font-size: 21px;\\n color: #0e2244;\\n font-weight: 500;\\n margin: 0; }\\n .redux-templates-template-list-sub-header h4 i.challenge-dot {\\n margin-left: 10px; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filters {\\n display: flex;\\n justify-content: space-between;\\n align-items: center; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group {\\n background: #f8fafb;\\n display: inline-flex;\\n border: 1px solid #d8d8d8;\\n border-radius: 4px;\\n margin-left: 10px; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button {\\n display: inline-flex;\\n line-height: 28px;\\n padding: 5px 18px;\\n align-items: center;\\n background: none;\\n border: none;\\n color: #587e97;\\n position: relative;\\n z-index: 1;\\n cursor: pointer; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button:focus {\\n outline: none;\\n box-shadow: 0 0 0 1.5px #007cba;\\n box-shadow: 0 0 0 1.5px var(--wp-admin-theme-color);\\n outline: 1px solid transparent; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button:last-child {\\n color: #f5a623; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.active {\\n background: #f5a623;\\n color: #fff; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.disabled {\\n opacity: 0.5; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button img {\\n display: inline-block;\\n width: auto;\\n height: 14px;\\n margin-right: 4px; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button:not(:last-child)::after {\\n content: \\\"\\\";\\n height: 13px;\\n background-color: #c4cbcf;\\n width: 1px;\\n right: 0px;\\n top: 50%;\\n position: absolute;\\n transform: translateY(-50%); }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.active::after {\\n display: none; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button::before {\\n content: \\\"\\\";\\n position: absolute;\\n background: #f5a623;\\n height: calc(100% + 4px);\\n width: calc(100% + 4px);\\n left: -2px;\\n top: -2px;\\n z-index: -1;\\n border-radius: 4px;\\n box-shadow: 0 0 4px rgba(33, 32, 249, 0.3);\\n opacity: 0; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.active::before {\\n opacity: 1; }\\n\\n.redux-templates-modal-loader {\\n display: inline-block;\\n position: absolute;\\n width: 80px;\\n height: 80px;\\n line-height: 80px;\\n text-align: center;\\n left: 50%;\\n margin-left: -50px;\\n top: 50%;\\n margin-top: -50px;\\n font-size: 24px;\\n color: #1e7ed8; }\\n\\n.redux-templates-modal-loader img {\\n height: 80px;\\n width: 80px; }\\n\\n/*block style*/\\n.redux-templates-builder-template-found-empty {\\n text-align: center;\\n border-color: transparent !important; }\\n .redux-templates-builder-template-found-empty .redux-templates-builder-empty-title {\\n display: block;\\n width: 100%; }\\n\\n.redux-templates-pro-badge {\\n position: absolute;\\n background: rgba(255, 0, 0, 0.75);\\n cursor: pointer;\\n padding: 5px 6px;\\n border-radius: 3px;\\n color: #fff;\\n font-size: 10px;\\n right: 20px;\\n top: 20px;\\n line-height: 1;\\n transition: background 0.1s linear; }\\n\\n.redux-templates-missing-badge {\\n position: absolute;\\n cursor: pointer;\\n background: rgba(242, 168, 72, 0.75);\\n border-radius: 3px;\\n color: #fff;\\n font-size: 10px;\\n right: 20px;\\n top: 20px;\\n line-height: 1;\\n transition: background 0.1s linear; }\\n .redux-templates-missing-badge i {\\n margin: 5px; }\\n\\n.redux-templates-button-overlay .redux-templates-pro-badge {\\n background: rgba(255, 0, 0, 0.85); }\\n\\n.redux-templates-button-overlay .redux-templates-missing-badge {\\n background: rgba(242, 168, 72, 0.85); }\\n\\n.redux-templates-default-template-image {\\n /* background-image: url('/img/redux-templates-medium.jpg');\\n background-size: cover; */\\n background: #888;\\n transition: 300ms; }\\n .redux-templates-default-template-image .imageloader-loaded {\\n max-height: 285px; }\\n .redux-templates-default-template-image img {\\n width: 100%;\\n display: block; }\\n\\n.redux-templates-item-wrapper {\\n position: relative; }\\n .redux-templates-item-wrapper .redux-templates-button-overlay {\\n position: absolute;\\n width: 100%;\\n opacity: 0;\\n background: rgba(0, 0, 0, 0.5);\\n height: 100%;\\n top: 0;\\n left: 0;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n transition: 300ms; }\\n .redux-templates-item-wrapper .redux-templates-button-overlay .redux-templates-tmpl-title {\\n margin: 0 0 15px;\\n color: #fff;\\n font-size: 19px;\\n font-weight: 400; }\\n .redux-templates-item-wrapper.focused .redux-templates-button-overlay, .redux-templates-item-wrapper:hover .redux-templates-button-overlay {\\n opacity: 1; }\\n .redux-templates-item-wrapper.focused .redux-templates-default-template-image, .redux-templates-item-wrapper:hover .redux-templates-default-template-image {\\n filter: blur(3px); }\\n .redux-templates-item-wrapper.missing_requirements .warn_notice {\\n opacity: 1; }\\n .redux-templates-item-wrapper.missing_requirements .redux-templates-button-download {\\n background-color: #fdbb05;\\n background-image: none;\\n border-color: #ffc107; }\\n\\n.redux-templates-template-option-header {\\n padding: 20px 20px 0; }\\n .redux-templates-template-option-header .redux-templates-template-back {\\n cursor: pointer; }\\n .redux-templates-template-option-header .redux-templates-template-back .dashicons {\\n vertical-align: text-bottom; }\\n\\n#wpwrap .edit-post-visual-editor .import-collection-btn-container {\\n text-align: center;\\n margin-top: 20px; }\\n\\n#wpwrap .edit-post-visual-editor .import-collection-btn-container #importCollectionBtn {\\n color: #fff;\\n font-size: 13px; }\\n\\n.redux-templates-template-back {\\n cursor: pointer; }\\n .redux-templates-template-back .dashicons {\\n vertical-align: text-bottom; }\\n\\n.spinner-wrapper {\\n position: absolute;\\n left: 0;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n background: rgba(0, 0, 0, 0.5); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-collection-details-view {\\n padding: 40px 22.5px 60px;\\n width: 100%;\\n justify-content: center;\\n position: relative;\\n display: flex; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left {\\n width: 600px;\\n margin: 0 37px 0 17px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-back {\\n height: 32px;\\n line-height: 20px;\\n color: #818a91;\\n font-size: 15px;\\n font-weight: 600;\\n display: -webkit-inline-box;\\n display: -ms-inline-flexbox;\\n display: inline-flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n cursor: pointer;\\n margin-bottom: 20px;\\n -webkit-transition: color 0.1s ease;\\n transition: color 0.1s ease; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-preview {\\n background-position: center top;\\n background-size: contain;\\n width: 100%;\\n background-repeat: no-repeat;\\n transition: background 1.5s ease;\\n height: 84.71%; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-preview.has_full {\\n transition: background-position 1.5s linear;\\n background-position: center top;\\n background-size: cover;\\n width: 100%;\\n background-repeat: no-repeat;\\n -webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1); }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-preview.has_full:hover {\\n background-position: center bottom;\\n background-size: cover; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right {\\n width: 520px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-title {\\n height: 30px;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: justify;\\n -ms-flex-pack: justify;\\n justify-content: space-between;\\n padding: 2px 25px 0 10px;\\n margin-bottom: 20px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-title h3 {\\n color: rgba(3, 8, 15, 0.92);\\n font-size: 28px;\\n font-weight: 600;\\n line-height: 34px;\\n margin: 0; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-title span {\\n color: #818a91;\\n font-size: 13px;\\n font-weight: 600;\\n line-height: 16px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-list {\\n height: 84.71%; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-list .details-inner {\\n height: 100%;\\n overflow-y: auto; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select {\\n width: 150px;\\n height: 150px;\\n overflow: hidden;\\n margin: 0 8px 15px;\\n -webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n position: relative;\\n display: inline-block;\\n cursor: pointer;\\n -webkit-transition: all 0.1s ease-in-out;\\n transition: all 0.1s ease-in-out; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::before, .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::after {\\n content: \\\"\\\";\\n width: 100%;\\n height: 100%;\\n position: absolute;\\n top: 0;\\n left: 0;\\n pointer-events: none;\\n opacity: 0;\\n box-sizing: border-box; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::before {\\n opacity: 0.7;\\n z-index: 2; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::after {\\n opacity: 0.7;\\n z-index: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image {\\n width: 100%;\\n height: 150px;\\n background-repeat: no-repeat;\\n background-size: cover;\\n border: 1px solid #ececec;\\n position: relative; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .pro,\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .install {\\n position: absolute;\\n background: #f00;\\n padding: 2px 3px;\\n border-radius: 3px;\\n color: #fff;\\n font-size: 9px;\\n right: 5px;\\n top: 5px;\\n text-transform: uppercase;\\n line-height: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .pro {\\n background: #f00; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .install {\\n background: #f2a848; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-label {\\n border-top: 1px solid #f2f4f7;\\n width: 100%;\\n height: 30px;\\n opacity: 1;\\n background-color: rgba(255, 255, 255, 0.9);\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n color: #23282d;\\n font-family: pn, \\\"Open Sans\\\", Arial, sans-serif;\\n font-size: 13px;\\n font-weight: 600;\\n line-height: 30px;\\n padding-left: 10px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select:hover {\\n -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select:hover::before, .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select:hover::after {\\n opacity: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active {\\n -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active::before, .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active::after,\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active .detail-label {\\n opacity: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active::before {\\n border: 3px solid #24b0a6; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer {\\n width: 100%;\\n height: 60px;\\n background: #fff;\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n z-index: 2; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer .footer-grid {\\n width: 100%;\\n padding: 0 10px;\\n height: 100%;\\n margin: auto;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer .import-button {\\n margin-left: 11.5px;\\n background-color: #3dbfe8;\\n color: #fff;\\n font-family: pn, \\\"Open Sans\\\", Arial, sans-serif;\\n font-size: 15px;\\n font-weight: 600;\\n line-height: 18px;\\n padding: 9px 32px;\\n border-radius: 3px;\\n cursor: pointer;\\n -webkit-transition: background-color 150ms linear;\\n transition: background-color 150ms linear; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer .import-button:hover {\\n background: rgba(61, 191, 232, 0.8); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-two-sections {\\n position: absolute;\\n width: 85.9375%;\\n height: 89.537037%;\\n max-width: 1650px;\\n max-height: 967px;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n border-radius: 5px;\\n overflow: hidden;\\n -webkit-box-shadow: 0 45px 10px rgba(3, 8, 15, 0.2);\\n box-shadow: 0 0 45px 10px rgba(3, 8, 15, 0.2); }\\n\\n.redux-templates-two-sections__grid {\\n width: 100%;\\n height: 100%;\\n padding: 40px 22.5px;\\n position: relative;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex; }\\n\\n.redux-templates-two-sections__grid__column {\\n width: 100%; }\\n\\n.redux-templates-two-sections__grid-clear {\\n -webkit-box-orient: vertical;\\n -webkit-box-direction: normal;\\n -ms-flex-direction: column;\\n flex-direction: column;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n height: 100%; }\\n\\n.redux-templates-two-sections__grid-clear-text {\\n opacity: 0.9;\\n color: #818a91;\\n font-family: pn, \\\"Open Sans\\\", Arial, sans-serif;\\n font-size: 14px;\\n font-weight: 600;\\n line-height: 17px;\\n margin: 0 0 20px; }\\n\\n.redux-templates-two-sections__grid-clear-image-saved {\\n width: 322px;\\n height: 145px;\\n margin-top: -21px;\\n pointer-events: none; }\\n\\n.redux-templates-two-sections__grid-clear-image-global {\\n width: 524px;\\n height: 207px;\\n margin-top: -28px;\\n pointer-events: none; }\\n\\n.redux-templates-two-section {\\n position: relative;\\n margin: 0 17.5px 35px;\\n cursor: pointer;\\n outline: 3px solid transparent;\\n -webkit-transition: outline 0.3s ease-in-out;\\n transition: outline 0.3s ease-in-out;\\n -webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n border-radius: 3px; }\\n .redux-templates-two-section:last-child {\\n margin-bottom: 0; }\\n .redux-templates-two-section .redux-templates-two-section-remove {\\n position: absolute;\\n z-index: 4;\\n top: -7px;\\n right: -7px;\\n opacity: 0;\\n -webkit-transform: scale(0.7);\\n transform: scale(0.7);\\n -webkit-transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n width: 28px;\\n height: 28px;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n font-size: 12px;\\n border-radius: 28px;\\n background-color: #fff;\\n color: #03080f;\\n -webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);\\n box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);\\n cursor: pointer; }\\n .redux-templates-two-section:hover .redux-templates-two-section-remove {\\n opacity: 1;\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n -webkit-transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; }\\n .redux-templates-two-section:hover .redux-templates-two-section-remove:hover {\\n color: #f00; }\\n .redux-templates-two-section:hover .redux-templates-two-section-item::before {\\n border-color: #3dbfe8; }\\n .redux-templates-two-section:hover .redux-templates-two-section-item::after {\\n border-color: #ececec; }\\n\\n.redux-templates-two-section .preview-image-wrapper {\\n transition: all 0.05s ease-in-out;\\n width: 100%;\\n min-height: 130px;\\n max-height: 300px;\\n overflow: hidden; }\\n .redux-templates-two-section .preview-image-wrapper img {\\n animation-name: fadeIn;\\n animation-fill-mode: both;\\n animation-delay: 200ms;\\n animation-duration: 200ms;\\n width: 100%;\\n height: auto; }\\n\\n.redux-templates-two-section .saved-section-title {\\n border-top: 1px solid #f2f4f7;\\n background: rgba(255, 255, 255, 0.9);\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n margin: 0;\\n color: #23282d;\\n padding: 13px 15px;\\n font-size: 15px;\\n text-align: center;\\n display: flex;\\n justify-content: center;\\n align-items: center; }\\n\\n.no-section {\\n display: flex;\\n width: 100%;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px; }\\n\\n.preview-image-wrapper .block-editor-block-preview__container {\\n transition: all 0.05s ease-in-out;\\n background: #fff;\\n margin: 0 auto;\\n min-height: 130px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#collections-sections-list {\\n width: 100%;\\n display: flex;\\n flex-wrap: wrap;\\n padding: 10px 10px 0 10px; }\\n #collections-sections-list > div {\\n width: 33.3333%;\\n padding: 15px;\\n position: relative; }\\n @media (max-width: 1199px) {\\n #collections-sections-list > div {\\n width: 50%; } }\\n #collections-sections-list > div.redux-templates-builder-template-found-empty {\\n width: 100%;\\n text-align: center;\\n opacity: 0.5;\\n border: none !important;\\n padding-top: 70px !important; }\\n #collections-sections-list.redux-templates-frontend-section-list {\\n display: block;\\n padding-bottom: 10px;\\n padding-top: 0px; }\\n #collections-sections-list.redux-templates-frontend-section-list > div {\\n width: 100%;\\n display: flex;\\n flex-wrap: nowrap;\\n border-bottom: 1px solid #e2e4e7;\\n font-weight: 600;\\n padding: 12px 0 12px 15px;\\n margin-bottom: 0;\\n align-items: center; }\\n #collections-sections-list.redux-templates-frontend-section-list > div.redux-templates-reusable-list-title {\\n color: #adafb2; }\\n #collections-sections-list.redux-templates-frontend-section-list > div:first-child {\\n border-top: 1px solid #e2e4e7; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-content {\\n flex-grow: 1; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-info {\\n flex-grow: 1;\\n max-width: 165px;\\n display: flex;\\n flex-wrap: nowrap; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button {\\n margin-left: 30px; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button {\\n display: inline-block;\\n padding: 0;\\n border: none;\\n transition: 300ms;\\n cursor: pointer;\\n background-color: transparent; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button:not(:last-child) {\\n margin-right: 10px; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button i {\\n font-size: 16px;\\n color: #cdcfd1; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button:hover i {\\n color: #007cba; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button:last-child:hover i {\\n color: #f00; }\\n #collections-sections-list .redux-templates-pagelist-column.loading {\\n height: 100px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".wp-full-overlay {\\n margin-left: 300px; }\\n\\n@media screen and (min-width: 1667px) {\\n .wp-full-overlay {\\n margin-left: 18%; } }\\n\\nbutton {\\n box-sizing: border-box;\\n pointer-events: all; }\\n\\n.wp-full-overlay.hide {\\n display: none; }\\n\\n.theme-screenshot-wrap {\\n overflow: hidden;\\n position: relative;\\n max-height: 300px;\\n margin: 15px 0;\\n border: 1px solid #ccc; }\\n\\n.install-theme-info {\\n padding-bottom: 0px; }\\n .install-theme-info h3 a {\\n float: right;\\n opacity: 0.6; }\\n .install-theme-info h3 a:hover {\\n opacity: 1; }\\n\\n.install-theme-info .theme-screenshot {\\n width: 100% !important;\\n border: none !important;\\n margin: 0 !important;\\n display: block; }\\n\\n.expanded .wp-full-overlay-footer {\\n height: 111px !important;\\n left: initial; }\\n .expanded .wp-full-overlay-footer .button-hero {\\n text-align: center; }\\n\\n.wp-full-overlay .wp-full-overlay-sidebar-content {\\n bottom: 100px; }\\n .wp-full-overlay .wp-full-overlay-sidebar-content .redux-templates-dependencies-list {\\n border-top: 1px solid #eee;\\n color: #82878c;\\n font-size: 13px;\\n font-weight: 400;\\n margin: 30px 0 0 0; }\\n .wp-full-overlay .wp-full-overlay-sidebar-content .redux-templates-dependencies-list h4 {\\n color: #23282d;\\n font-size: 1.1em;\\n text-align: center; }\\n .wp-full-overlay .wp-full-overlay-sidebar-content .redux-templates-dependencies-list .redux-templates-dependency-blocks .redux-templates-dependency-name {\\n color: #444;\\n font-weight: 600;\\n margin-right: 5px; }\\n\\n.footer-import-button-wrap {\\n padding: 10px 20px;\\n display: flex;\\n justify-content: center; }\\n\\n.wp-full-overlay-footer .view-site,\\n.wp-full-overlay-footer .go-pro,\\n.wp-full-overlay-footer .redux-templates-import {\\n width: 100%; }\\n\\n.redux-templates-button-download {\\n border: 1px solid #3dbfe8;\\n background: #3dbfe8;\\n box-shadow: 0 1px 0 #165cb4;\\n color: #fff; }\\n\\n.wp-full-overlay-main {\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n height: 100%;\\n -webkit-transition: background-color 1000ms linear;\\n -ms-transition: background-color 1000ms linear;\\n transition: background-color 1000ms linear;\\n background-color: unset; }\\n .wp-full-overlay-main.loaded::before {\\n display: none !important; }\\n .wp-full-overlay-main.loaded iframe {\\n background-color: #fff; }\\n .wp-full-overlay-main .components-spinner {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%); }\\n\\n.theme-install-overlay iframe {\\n height: 100%;\\n width: 100%;\\n z-index: 20;\\n transition: opacity 0.3s; }\\n\\n.redux-templates-dependency-blocks {\\n display: flex; }\\n .redux-templates-dependency-blocks .block-head {\\n text-align: center;\\n width: 60px;\\n margin-right: 10px; }\\n\\n.requirements-list {\\n width: 100%; }\\n .requirements-list ul {\\n margin: 0;\\n padding: 0;\\n list-style: none; }\\n .requirements-list ul li {\\n cursor: pointer;\\n line-height: 20px;\\n padding-bottom: 25px;\\n clear: left;\\n transition: 300ms; }\\n .requirements-list ul li svg {\\n margin-right: 5px; }\\n .requirements-list ul li svg * {\\n fill: #9a9a9a; }\\n .requirements-list ul li svg,\\n .requirements-list ul li span,\\n .requirements-list ul li div {\\n float: left; }\\n .requirements-list ul li .redux-icon-wrapper {\\n display: inline; }\\n .requirements-list ul li span.pluginURL {\\n float: right; }\\n .requirements-list ul li i {\\n font-size: 1.1em; }\\n .requirements-list ul li .redux-icon-wrapper {\\n padding-left: 5px; }\\n .requirements-list ul li i.fa-exclamation-triangle {\\n font-size: 0.9em;\\n line-height: 1.5em;\\n color: #b27823; }\\n .requirements-list ul li:hover svg * {\\n fill: dimgray; }\\n .requirements-list ul li:hover i.fa-exclamation-triangle {\\n color: #f5a623; }\\n\\n.redux-block-pills ul {\\n margin: 0;\\n padding: 0; }\\n .redux-block-pills ul li {\\n margin: 0px 5px 10px 0;\\n float: left; }\\n .redux-block-pills ul li span {\\n --bg-opacity: 1 !important;\\n background-color: #edf2f7 !important;\\n background-color: rgba(237, 242, 247, var(--bg-opacity)) !important;\\n border-radius: 9999px !important;\\n padding-top: 0.25rem !important;\\n padding-bottom: 0.25rem !important;\\n padding-left: 0.75rem !important;\\n padding-right: 0.75rem !important;\\n --text-opacity: 1 !important;\\n color: #4a5568 !important;\\n color: rgba(74, 85, 104, var(--text-opacity)) !important; }\\n\\n.redux-templates-modal-preview-box {\\n background: #f1f1f1; }\\n .redux-templates-modal-preview-box img {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%);\\n max-width: 100%;\\n max-height: 100%; }\\n\\n.theme-hash {\\n text-align: center;\\n font-size: 14px;\\n position: relative; }\\n .theme-hash i {\\n cursor: pointer;\\n margin-right: 5px;\\n margin-left: 5px; }\\n .theme-hash .copied {\\n color: #656a6f;\\n position: absolute;\\n line-height: 75%;\\n margin-left: 10px;\\n opacity: 0.6; }\\n .theme-hash .the-copy {\\n border-bottom-right-radius: 0 !important;\\n border-top-right-radius: 0 !important; }\\n .theme-hash .the-hash {\\n border-bottom-left-radius: 0 !important;\\n border-top-left-radius: 0 !important;\\n border-left: 0 !important; }\\n .theme-hash .hideMe {\\n -webkit-animation: cssAnimation 3s forwards;\\n animation: cssAnimation 3s forwards; }\\n\\n@keyframes cssAnimation {\\n 0% {\\n opacity: 1; }\\n 90% {\\n opacity: 1; }\\n 100% {\\n opacity: 0; } }\\n\\n@-webkit-keyframes cssAnimation {\\n 0% {\\n opacity: 1; }\\n 90% {\\n opacity: 1; }\\n 100% {\\n opacity: 0; } }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-modal-overlay {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: rgba(255, 255, 255, 0.6);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 600000; }\\n\\n.redux-templates-modal-wrapper {\\n width: 550px;\\n height: 400px;\\n background: #fcfcfc;\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex-direction: column;\\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.7); }\\n .redux-templates-modal-wrapper div {\\n width: 100%; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header {\\n border-bottom: 1px solid #ddd;\\n flex: 0 0 60px;\\n padding: 10px 15px;\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n box-sizing: border-box; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header h3 {\\n margin: 0;\\n font-size: 1.2rem; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header button {\\n border: none;\\n cursor: pointer; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header .redux-templates-modal-close {\\n font-size: 20px;\\n background: transparent;\\n color: #9b9b9b; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body {\\n flex: 1 1 auto;\\n padding-left: 30px;\\n padding-right: 30px;\\n box-sizing: border-box;\\n background: #fff;\\n position: relative; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body h5 {\\n font-size: 1.1em;\\n font-weight: 600; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body ul {\\n list-style-position: inside;\\n list-style-type: disc; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error {\\n color: #f00; }\\n .redux-templates-modal-wrapper .redux-templates-modal-footer {\\n border-top: 1px solid #ddd;\\n flex: 0 0 60px;\\n align-items: center;\\n display: flex;\\n padding: 0 20px;\\n box-sizing: border-box; }\\n .redux-templates-modal-wrapper .redux-templates-modal-footer .button {\\n margin-right: 20px;\\n cursor: pointer; }\\n .redux-templates-modal-wrapper .redux-templates-modal-footer i.fas {\\n margin-right: 3px; }\\n .redux-templates-modal-wrapper .redux-templates-modal-spinner-wrapper {\\n flex: 1 1 auto;\\n align-items: center;\\n justify-content: center;\\n display: flex; }\\n\", \"\"]);\n\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.9 17.7H7.4l-.9-1.5 2.1-2.4 2.3 3.9zm-5.3-1.6l-1.5 1.6h-4L4 13.3l1.6 2.8z\",\n fill: \"#011627\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#00a7e5\",\n d: \"M6.1 15.6L.4 5.9h3.5l2.7 4.5 8-9.1h4.3L6.1 15.6z\"\n});\n\nvar SvgIconColor = function SvgIconColor(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 19 19\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgIconColor;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.9 17.7H7.4l-.9-1.5 2.1-2.4 2.3 3.9zm-5.3-1.6l-1.5 1.6h-4L4 13.3l1.6 2.8zM6.1 15.6L.4 5.9h3.5l2.7 4.5 8-9.1h4.3L6.1 15.6z\"\n});\n\nvar SvgIcon = function SvgIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 19 19\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgIcon;","import {__} from '@wordpress/i18n';\n\nconst { registerBlockType } = wp.blocks;\nimport * as importBlock from './import';\nimport * as libraryBlock from './library';\n\nexport function registerBlocks() {\n\n registerBlockType( `redux/${ libraryBlock.name }`, { ...libraryBlock.settings } );\n\tregisterBlockType( `redux/${ importBlock.name }`, { ...importBlock.settings } );\n\n}\nregisterBlocks();\n","/**\n * Internal dependencies\n */\nimport importReusableBlock from '../utils/import';\nimport insertImportedBlocks from '../utils/insert';\n\n/**\n * WordPress dependencies\n */\nconst { __ } = wp.i18n;\nconst { withInstanceId } = wp.compose;\nconst { Fragment, Component } = wp.element;\nconst { MediaUploadCheck } = wp.blockEditor;\nconst { DropZone, FormFileUpload, Placeholder, Notice } = wp.components;\n\nconst ALLOWED_BG_MEDIA_TYPES = [ 'json' ];\n\n/**\n * Block edit function\n */\nclass Edit extends Component {\n constructor() {\n super( ...arguments );\n\n this.state = {\n isLoading: false,\n error: null,\n };\n\n this.isStillMounted = true;\n this.addFile = this.addFile.bind( this );\n }\n\n componentDidMount() {\n const { file } = this.props.attributes;\n\n if ( file ) {\n this.setState( { isLoading: true } );\n this.addFile( file );\n }\n }\n\n componentWillUnmount() {\n this.isStillMounted = false;\n }\n\n addFile( files ) {\n let file = files[ 0 ];\n\n if ( files.target ) {\n file = event.target.files[ 0 ];\n }\n\n if ( ! file ) {\n return;\n }\n this.setState( { isLoading: true } );\n\n importReusableBlock( file )\n .then( ( reusableBlock ) => {\n if ( ! this.isStillMounted ) {\n return;\n }\n\n this.setState( { isLoading: false } );\n insertImportedBlocks( this.props.clientId, reusableBlock, this.props.onClose );\n } )\n .catch( ( error ) => {\n if ( ! this.isStillMounted ) {\n return;\n }\n\n let uiMessage;\n switch ( error.message ) {\n case 'Invalid JSON file':\n uiMessage = __( 'Invalid JSON file', redux_templates.i18n );\n break;\n case 'Invalid Reusable Block JSON file':\n uiMessage = __( 'Invalid Reusable Block JSON file', redux_templates.i18n );\n break;\n default:\n uiMessage = __( 'Unknown error', redux_templates.i18n );\n }\n\n this.setState( { isLoading: false, error: uiMessage } );\n } );\n }\n\n render() {\n const { isLoading, error } = this.state;\n\n return (\n <Placeholder\n icon=\"download\"\n label={ __( 'Import a Template from JSON - Redux', redux_templates.i18n ) }\n instructions={ __( 'Drag a file or upload a new one from your device.', redux_templates.i18n ) }\n className=\"editor-media-placeholder\"\n notices={ error && (\n <Notice status=\"error\">\n { error }\n </Notice>\n ) }\n >\n <Fragment>\n <MediaUploadCheck>\n <DropZone\n onFilesDrop={ this.addFile }\n label={ __( 'Import from JSON', redux_templates.i18n ) }\n />\n <FormFileUpload\n isLarge\n className=\"editor-media-placeholder__button button button-primary\"\n onChange={ this.addFile }\n accept={ ALLOWED_BG_MEDIA_TYPES }\n isBusy={ isLoading }\n disabled={ isLoading }\n multiple={ false }\n >\n { __( 'Upload', redux_templates.i18n ) }\n </FormFileUpload>\n </MediaUploadCheck>\n </Fragment>\n </Placeholder>\n );\n }\n}\n\nexport default withInstanceId( Edit );\n","/**\n * WordPress dependencies\n */\nconst { SVG } = wp.components;\n\nexport default <SVG viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\" /><path d=\"M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\" /></SVG>;\n","/**\n * Internal dependencies\n */\nimport edit from './components/edit';\nimport icon from './icon';\nimport transforms from './transforms';\nimport { colorizeIcon } from '../../icons';\n\n/**\n * WordPress dependencies\n */\nconst { __ } = wp.i18n;\n\n/**\n * Block constants\n */\nconst name = 'import';\n\nconst category = 'common';\nconst schema = {\n\tfile: {\n\t\ttype: 'object',\n\t},\n};\n\nconst title = __( 'Template Import', redux_templates.i18n );\n\nconst keywords = [\n __( 'import', redux_templates.i18n ),\n __( 'download', redux_templates.i18n ),\n __( 'migrate', redux_templates.i18n ),\n];\n\n\n\nconst settings = {\n\ttitle: title,\n description: __( 'Import blocks exported using Redux plugin.', redux_templates.i18n ),\n\n\tcategory: category,\n\tkeywords: keywords,\n\n attributes: schema,\n\n supports: {\n align: true,\n alignWide: false,\n alignFull: false,\n customClassName: false,\n className: false,\n html: false,\n },\n\n transforms: transforms,\n edit: edit,\n save() {\n return null;\n },\n};\n\nexport { name, title, category, icon, settings };\n","/**\n * WordPress dependencies\n */\nconst { createBlock } = wp.blocks;\n\nconst transforms = {\n from: [\n {\n type: 'files',\n isMatch( files ) {\n return files[ 0 ].type === 'application/json';\n },\n // We define a lower priorty (higher number) than the default of 10. This\n // ensures that the Import block is only created as a fallback.\n priority: 13,\n transform: ( files ) => {\n const blocks = [];\n\n blocks.push( createBlock( 'redux/import', {\n file: files,\n } ) );\n\n return blocks;\n },\n },\n ],\n};\n\nexport default transforms;\n","/**\n * Reads the textual content of the given file.\n *\n * @param {File} file File.\n * @return {Promise<string>} Content of the file.\n */\nexport function readTextFile( file ) {\n const reader = new window.FileReader();\n return new Promise( ( resolve ) => {\n reader.onload = function() {\n resolve( reader.result );\n };\n reader.readAsText( file );\n } );\n}\n","/**\n * External dependencies\n */\nimport { isString } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { readTextFile } from './file';\nconst { dispatch, select } = wp.data;\nconst { editPost } = dispatch('core/editor');\n\n/**\n * Import a reusable block from a JSON file.\n *\n * @param {File} file File.\n * @return {Promise} Promise returning the imported reusable block.\n */\nasync function importReusableBlock( file ) {\n const fileContent = await readTextFile( file );\n let parsedContent;\n try {\n parsedContent = JSON.parse(JSON.parse(JSON.stringify(fileContent)));\n } catch ( e ) {\n throw new Error( 'Invalid JSON file' );\n }\n\n if ( parsedContent.__file === 'redux_template' ) {\n\t\teditPost( { 'template': 'redux-templates_full_width' } );\n return parsedContent.content;\n }\n\n if (\n parsedContent.__file !== 'wp_block' ||\n ! parsedContent.title ||\n ! parsedContent.content ||\n ! isString( parsedContent.title ) ||\n ! isString( parsedContent.content )\n ) {\n\t if ( '' === select( 'core/editor' ).getEditedPostAttribute( 'template' ) ) {\n\t\t editPost({'template': 'redux-templates_contained'});\n\t }\n return importCoreBlocks( parsedContent );\n }\n\n const postType = await wp.apiFetch( { path: '/wp/v2/types/wp_block' } );\n const reusableBlock = await wp.apiFetch( {\n path: `/wp/v2/${ postType.rest_base }`,\n data: {\n title: parsedContent.title,\n content: parsedContent.content,\n status: 'publish',\n },\n method: 'POST',\n } );\n\n if ( reusableBlock.id ) {\n return '<!-- wp:block {\"ref\":' + reusableBlock.id + '} /-->';\n }\n throw new Error( 'Invalid Reusable Block JSON file contents' );\n}\n\nfunction importCoreBlocks( parsedContent ) {\n if (\n parsedContent.__file !== 'core_block' ||\n ! parsedContent.content ||\n ! isString( parsedContent.content )\n ) {\n throw new Error( 'Invalid JSON file' );\n }\n\n return parsedContent.content;\n}\n\nexport default importReusableBlock;\n","/**\n * WordPress dependencies\n */\nconst { select, dispatch } = wp.data;\nconst { parse, createBlock } = wp.blocks;\n\nexport default function insertImportedBlocks( clientId, blocks, onClose ) {\n blocks = parse( blocks );\n const toSelect = [];\n const blockIndex = select( 'core/block-editor' ).getBlockInsertionPoint();\n if ( blocks.length > 0 ) {\n for ( const block in blocks ) {\n const created = createBlock( blocks[ block ].name, blocks[ block ].attributes, blocks[ block ].innerBlocks );\n dispatch( 'core/block-editor' ).insertBlocks( created, parseInt( blockIndex.index ) + parseInt( block ) );\n\n if ( typeof created !== 'undefined' ) {\n toSelect.push( created.clientId );\n }\n }\n\n //remove insertion point if empty\n dispatch( 'core/block-editor' ).removeBlock( clientId );\n\n //select inserted blocks\n if ( toSelect.length > 0 ) {\n dispatch( 'core/block-editor' ).multiSelect( toSelect[ 0 ], toSelect.reverse()[ 0 ] );\n }\n }\n\n onClose();\n}\n","/**\n * External dependencies.\n */\nimport { ReduxTemplatesIcon } from '~redux-templates/icons'\n// import { ModalDesignLibrary } from '~stackable/components'\nimport {ModalManager} from '../../modal-manager';\nimport LibraryModal from '../../modal-library';\n\n/**\n * WordPress dependencies.\n */\nimport {\n\tButton, Placeholder,\n} from '@wordpress/components'\nimport { compose } from '@wordpress/compose'\nimport { createBlock, parse } from '@wordpress/blocks'\nimport { withDispatch } from '@wordpress/data'\nimport { useState } from '@wordpress/element'\nimport { __ } from '@wordpress/i18n'\nimport { applyFilters } from '@wordpress/hooks'\n\nconst edit = ( { removeLibraryBlock, preview } ) => {\n\tif (preview) {\n\t\talert('here i am');\n\t}\n\n\treturn (\n\t\t<div className=\"redux-template-library-block\">\n\t\t\t<Placeholder\n\t\t\t\ticon={ <ReduxTemplatesIcon /> }\n\t\t\t\tlabel={ __( 'Redux Template Library', redux_templates.i18n ) }\n\t\t\t\tinstructions={ __( 'Open the Design Library and select a pre-designed block or layout.', redux_templates.i18n ) }\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tisSecondary\n\t\t\t\t\tisLarge\n\t\t\t\t\thasIcon\n\t\t\t\t\tclassName=\"redux-template-library-block__button\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tModalManager.open(<LibraryModal />);\n\t\t\t\t\t\tremoveLibraryBlock()\n\t\t\t\t\t} }\n\t\t\t\t>{ __( 'Open Design Library', redux_templates.i18n ) }</Button>\n\t\t\t</Placeholder>\n\t\t</div>\n\t)\n}\n\nexport default compose( [\n\twithDispatch( ( dispatch, {\n\t\tclientId,\n\t} ) => {\n\t\tconst { removeBlocks } = dispatch( 'core/block-editor' )\n\t\treturn {\n\t\t\tremoveLibraryBlock: serializedBlock => {\n\t\t\t\tremoveBlocks( clientId );\n\t\t\t},\n\t\t}\n\t} ),\n] )( edit )\n","/**\n * BLOCK: Design Library\n */\n/**\n * External dependencies\n */\nimport { ReduxTemplatesIcon } from '~redux-templates/icons'\n\n/**\n * Internal dependencies\n */\nimport edit from './edit'\nimport InsertLibraryButton from './insert-library-button'\nconst { registerBlockType } = wp.blocks;\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n'\nimport domReady from '@wordpress/dom-ready'\nimport { render } from '@wordpress/element'\nimport { ReduxTemplatesIconColor } from '../../icons';\n\n\n\nconst name = 'library';\nconst icon = InsertLibraryButton\n\nconst category = 'common';\nconst schema = {}\n\nconst title = __( 'Template Library', redux_templates.i18n );\nconst description = __( 'Choose a section, template, or template kit from the Redux Template Library.', redux_templates.i18n );\n\nconst keywords = [\n\t__( 'Template Library', redux_templates.i18n ),\n\t__( 'Design Library', redux_templates.i18n ),\n\t__( 'Element Layouts', redux_templates.i18n ),\n\t__( 'Redux', redux_templates.i18n ),\n];\n\nconst blockAttributes = {\n\tfile: {\n\t\ttype: 'object',\n\t},\n};\n\nconst settings = {\n\ttitle: title,\n\tdescription: description,\n\ticon: ReduxTemplatesIconColor,\n\tcategory: 'layout',\n\tkeywords: keywords,\n\tattributes: schema,\n\tsupports: {\n\t\tcustomClassName: false,\n\t\t// inserter: ! disabledBlocks.includes( name ), // Hide if disabled.\n\t},\n\n\texample: {\n\t\tattributes: {\n\t\t\t// backgroundColor: '#000000',\n\t\t\t// opacity: 0.8,\n\n\t\t\t// padding: 30,\n\t\t\t// textColor: '#FFFFFF',\n\t\t\t// radius: 10,\n\t\t\t// title: __( 'I am a slide title', 'wp-presenter-pro' ),\n\t\t},\n\t},\n\n\tedit: edit,\n\n\tsave() {\n\t\treturn null;\n\t},\n};\n\nconst renderButton = function(toolbar) {\n\n\tconst buttonDiv = document.createElement( 'div' )\n\ttoolbar.appendChild( buttonDiv )\n\n\trender( <InsertLibraryButton />, buttonDiv )\n}\n\ndomReady( () => {\n\tlet toolbar = document.querySelector( '.edit-post-header__toolbar' );\n\tif ( ! toolbar ) {\n\t\ttoolbar = document.querySelector( '.edit-post-header__toolbar' );\n\t}\n\tif ( ! toolbar ) {\n\t\tsetTimeout(function(){\n\t\t\tlet toolbar = document.querySelector( '.edit-post-header__toolbar' );\n\t\t\tif ( toolbar ) {\n\t\t\t\trenderButton( toolbar );\n\t\t\t}\n\t\t}, 500);\n\t\treturn;\n\t}\n\trenderButton(toolbar);\n} )\n\nexport { name, title, category, icon, settings };\n","/**\n * External dependencies\n */\nimport { ReduxTemplatesIcon, ReduxTemplatesIconColorize } from '~redux-templates/icons'\n\n/**\n * WordPress dependencies\n */\nimport {Button, Tooltip} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {ModalManager} from '../../modal-manager';\nimport LibraryModal from '../../modal-library';\nimport './style.scss'\n\nconst InsertLibraryButton = () => {\n\treturn (\n\t\t<Tooltip text={__( 'Redux Templates Library', redux_templates.i18n )} position={'bottom'}>\n\t\t\t<Button data-tut=\"tour__library_button\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tModalManager.open(<LibraryModal />);\n\t\t\t\t\t} }\n\t\t\t\t\tclassName=\"redux-templates-insert-library-button\"\n\t\t\t\t\tlabel={ __( 'Open Library', redux_templates.i18n ) }\n\t\t\t\t\ticon={ <ReduxTemplatesIcon /> }\n\t\t\t>{ __( 'Templates', redux_templates.i18n ) }</Button>\n\t\t</Tooltip>\n\t)\n}\n\nexport default InsertLibraryButton\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport CONFIG from '../config';\nimport './style.scss'\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\n// currentStep : indicates where the step is\n// step: 1~8 etc\nexport default function ChallengeStepItem(props) {\n const {currentStep, step, caption, finalStatus} = props;\n const [iconClassname, setIconClassname] = useState('fa circle');\n const [itemClassname, setItemClassname] = useState('challenge-item');\n useEffect(() => {\n if (currentStep < step) { // not completed step\n setItemClassname('challenge-item');\n setIconClassname('far fa-circle');\n }\n if (currentStep === step) { // current step\n setItemClassname('challenge-item challenge-item-current');\n setIconClassname('fas fa-circle');\n } \n if (currentStep > step || finalStatus) {\n setItemClassname('challenge-item challenge-item-completed');\n setIconClassname('fas fa-check-circle');\n }\n }, [step, currentStep, finalStatus]);\n \n return <li className={itemClassname}><i className={iconClassname} />{caption}</li>;\n}","const {useState, useEffect, memo} = wp.element;\nimport CONFIG from '../config';\nexport default memo(function ProgressBar({currentStep}){\n const [width, setWidth] = useState(0);\n useEffect(() => {\n setWidth( currentStep <= 0 ? 0 : (currentStep / CONFIG.totalStep * 100) );\n }, [currentStep])\n return (\n <div className='challenge-bar'>\n <div style={{width: width + '%'}}></div>\n </div>\n );\n});","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport ChallengeStepItem from './ChallengeStepItem';\nimport ProgressBar from './ProgressBar';\nimport CONFIG from '../config';\nimport './style.scss'\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\nfunction ChallengeListBlock(props) {\n const {started, onStarted} = props;\n const {challengeStep, finalStatus, setChallengeOpen, setChallengeStep} = props;\n const [buttonRowClassname, setButtonRowClassname] = useState('challenge-button-row');\n useEffect(() => {\n setButtonRowClassname(challengeStep !== CONFIG.beginningStep ? 'challenge-button-row started' : 'challenge-button-row');\n }, [challengeStep])\n \n const onCancelChallenge = () => {\n setChallengeOpen(false);\n setChallengeStep(-1);\n }\n\n return (\n <div className='challenge-list-block'>\n <p>{__('Complete the challenge and get up and running within 5 minutes', redux_templates.i18n)}</p>\n <ProgressBar currentStep={finalStatus === 'success' ? CONFIG.totalStep : challengeStep} />\n <ul className='challenge-list'>\n {\n CONFIG.list.map((item, i) => {\n return (<ChallengeStepItem key={i} step={i} currentStep={challengeStep} finalStatus={finalStatus} caption={item.caption} />);\n })\n }\n </ul>\n { finalStatus === '' &&\n <div className={buttonRowClassname}>\n {challengeStep === CONFIG.beginningStep && \n <button className='btn-challenge-start' onClick={onStarted}>{__('Start Challenge', redux_templates.i18n)}</button>}\n {challengeStep === CONFIG.beginningStep && <button className='btn-challenge-skip' onClick={onCancelChallenge}>{__('Skip Challenge', redux_templates.i18n)}</button>}\n {challengeStep !== CONFIG.beginningStep && <button className='btn-challenge-cancel' onClick={onCancelChallenge}>{__('Cancel Challenge', redux_templates.i18n)}</button>}\n </div>\n }\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeOpen, setChallengeStep} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeOpen,\n setChallengeStep\n };\n }),\n\n withSelect((select) => {\n const {getChallengeStep, getChallengeFinalStatus} = select('redux-templates/sectionslist');\n return {\n challengeStep: getChallengeStep(),\n finalStatus: getChallengeFinalStatus()\n };\n })\n])(ChallengeListBlock);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport './style.scss'\nimport config from '../config';\nimport helper from '../helper';\nimport classnames from 'classnames';\nconst {compose} = wp.compose;\nconst {withSelect, withDispatch} = wp.data;\nconst {useState, useEffect, useRef} = wp.element;\n\nfunction useInterval(callback, delay) {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nfunction ChallengeTimer(props) {\n const {started, expanded, setChallengeListExpanded, isChallengeOpen, finalStatus} = props;\n const [secondsLeft, setSecondsLeft] = useState(helper.getSecondsLeft());\n const [paused, setPaused] = useState(false);\n\n // only timer\n useEffect(() => {\n window.addEventListener('focus', resume);\n window.addEventListener('blur', pause);\n return () => {\n window.removeEventListener('focus', resume);\n window.removeEventListener('blur', pause);\n };\n });\n\n // setup timer\n useEffect(() => {\n setSecondsLeft(helper.getSecondsLeft());\n if (helper.loadStep() === -1) {\n setSecondsLeft(config.initialSecondsLeft);\n }\n }, [isChallengeOpen]);\n\n // run timer\n useInterval(() => {\n setSecondsLeft(secondsLeft < 0 ? 0 : secondsLeft - 1);\n helper.saveSecondsLeft(secondsLeft < 0 ? 0 : secondsLeft - 1);\n }, (started && (paused === false) && secondsLeft >= 0 && finalStatus === '') ? 1000 : null);\n\n\n // Pause the timer.\n const pause = () => {\n setPaused(true);\n }\n\n // Resume the timer.\n const resume = () => {\n setPaused(false);\n }\n\n return (\n <div className='block-timer'>\n <div>\n <h3>{__('Redux Challenge', redux_templates.i18n)}</h3>\n <p><span>{helper.getFormatted(secondsLeft)}</span>{__(' remaining', redux_templates.i18n)}</p>\n </div>\n <div className={classnames('caret-icon', {'closed': expanded})} onClick={() => setChallengeListExpanded(!expanded)}>\n <i className=\"fa fa-caret-down\"></i>\n </div>\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeListExpanded} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeListExpanded\n };\n }),\n withSelect((select) => {\n const {getChallengeOpen, getChallengeFinalStatus, getChallengeListExpanded} = select('redux-templates/sectionslist');\n return {\n isChallengeOpen: getChallengeOpen(),\n finalStatus: getChallengeFinalStatus(),\n expanded: getChallengeListExpanded()\n };\n })\n])(ChallengeTimer);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n'\nimport {animateScroll} from 'react-scroll';\nimport {dispatch, select} from '@wordpress/data';\nconst {setTourActiveButtonGroup, setImportingTemplate} = dispatch('redux-templates/sectionslist');\nconst {getPageData} = select('redux-templates/sectionslist');\nimport {ModalManager} from '~redux-templates/modal-manager';\nimport PreviewModal from '~redux-templates/modal-preview';\nexport default {\n initialSecondsLeft: 300,\n beginningStep: -1,\n totalStep: 7,\n list: [\n {\n selector: '[data-tut=\"tour__navigation\"]',\n caption: __('Template Type Tabs', redux_templates.i18n),\n offset: {\n x: 0,\n y: 50,\n arrowX: 0,\n arrowY: -20\n },\n box: {\n width: 250\n },\n direction: 'top',\n content: () => (\n <div>\n {__('These are the different types of templates we have.', redux_templates.i18n)}\n <ul>\n <li>\n <strong>{__('Sections', redux_templates.i18n)}</strong>\n {__(' are the building blocks of a page. Each \"row\" of content on a page we consider a section.', redux_templates.i18n)}\n </li>\n <li>\n <strong>{__('Pages', redux_templates.i18n)}</strong>\n {__(' are, you guessed it, a group of multiple sections making up a page.', redux_templates.i18n)}\n </li>\n <li>\n <strong>{__('Template Kits', redux_templates.i18n)}</strong>\n {__(' are groups of pages that all follow a style or theme.', redux_templates.i18n)}\n </li>\n <li>\n <strong>{__('Saved', redux_templates.i18n)}</strong>\n {__(' are reusable blocks that you may have previously saved for later.', redux_templates.i18n)}\n </li>\n </ul>\n </div>\n )\n },\n {\n selector: '[data-tut=\"tour__filtering\"]',\n caption: __('Sidebar', redux_templates.i18n),\n content: __('This area is where you can search and filter to find the right kind of templates you want.', redux_templates.i18n),\n direction: 'left',\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 250,\n height: 130\n },\n action: () => {\n animateScroll.scrollToTop({\n containerId: 'redux-templates-collection-modal-sidebar',\n duration: 0,\n });\n },\n },\n {\n selector: '[data-tut=\"tour__filtering\"]',\n caption: __('Plugins Filter', redux_templates.i18n),\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 290,\n height: 185\n },\n content: () => (\n <div>\n {__('Some templates require certain plugins. You can filter or select those templates. Hint, if the text is a ', redux_templates.i18n)}\n <a href=\"#\" className=\"missing-dependency\">{__('little orange', redux_templates.i18n)}</a>\n {__(', you don`t have that plugin installed yet, but don`t worry. Redux will help you with that too.', redux_templates.i18n)}\n </div>\n ),\n action: () => {\n animateScroll.scrollToBottom({\n containerId: 'redux-templates-collection-modal-sidebar',\n duration: 0,\n });\n },\n direction: 'left'\n },\n {\n selector: '[data-tut=\"tour__main_body\"]',\n caption: __('Templates List', redux_templates.i18n),\n content: __('This area is where the templates will show up that match the filters you\\'ve selected. You can click on many of them to preview or import them.', redux_templates.i18n),\n direction: 'left',\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 250,\n height: 150\n },\n action: () => {\n animateScroll.scrollToTop({\n containerId: 'redux-templates-collection-modal-sidebar',\n duration: 0,\n });\n setTourActiveButtonGroup(null);\n }\n },\n {\n selector: '#modalContainer .redux-templates-single-item-inner:first-child',\n caption: __('Template Hover', redux_templates.i18n),\n content: __('When you hover over a template you can see via icons what plugins are required for this template. You can then choose to Preview or Import a design.', redux_templates.i18n),\n action: () => {\n ModalManager.closeCustomizer();\n const pageData = getPageData();\n if (pageData && pageData.length > 0) {\n setTourActiveButtonGroup(pageData[0])\n }\n },\n direction: 'left',\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 240,\n height: 169\n },\n },\n {\n selector: '.wp-full-overlay-sidebar',\n caption: __('Preview Dialog', redux_templates.i18n),\n content: __('This is the preview dialog. It gives more details about the template and helps you to see what you could expect the templates to look like.', redux_templates.i18n),\n action: () => {\n setTourActiveButtonGroup(null);\n setImportingTemplate(null);\n const pageData = getPageData();\n if (pageData && pageData.length > 0) {\n ModalManager.openCustomizer(\n <PreviewModal startIndex={0} currentPageData={pageData}/>\n )\n }\n },\n position: 'center'\n },\n {\n selector: '.redux-templates-import-wizard-wrapper',\n caption: __('Import Wizard', redux_templates.i18n),\n content: __('When you click to import a template, sometimes you will be missing one of the required plugins. Redux will do its best to help you install what\\'s missing. If some of them are premium plugins, you will be provided details on where you can get them.', redux_templates.i18n),\n direction: 'right',\n offset: {\n x: 0,\n y: 85,\n arrowX: 40,\n arrowY: 25\n },\n box: {\n width: 250,\n height: 169\n },\n action: () => {\n // if (ModalManager.isModalOpened() === false) ModalManager.open(<LibraryModal autoTourStart={false} />)\n if (document.getElementsByClassName('tooltipster-box'))\n document.getElementsByClassName('tooltipster-box')[0].style.display = 'none';\n ModalManager.show();\n ModalManager.closeCustomizer();\n const pageData = getPageData();\n if (pageData && pageData.length > 0) setImportingTemplate(pageData[0]);\n setTimeout(() => {\n const openedPanel = document.getElementsByClassName('redux-templates-modal-wrapper');\n if (openedPanel && openedPanel.length > 0) {\n let openPanel = openedPanel[0].getBoundingClientRect();\n let box = {top: openPanel.top + 90, left: openPanel.left - 320};\n dispatch('redux-templates/sectionslist').setChallengeTooltipRect(box);\n }\n if (document.getElementsByClassName('tooltipster-box'))\n document.getElementsByClassName('tooltipster-box')[0].style.display = 'block';\n }, 0)\n }\n }\n ]\n};\n","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport CONFIG from '../config';\nimport helper from '../helper';\n\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\n\nconst ratingStars = (\n <span className=\"rating-stars\">\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n </span>\n);\n\nfunction ChallengeCongrats(props) {\n const {setChallengeStep, setChallengeFinalStatus, setChallengeOpen} = props;\n const closeModal = () => {\n setChallengeStep(CONFIG.beginningStep);\n setChallengeFinalStatus('');\n setChallengeOpen(false);\n }\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className=\"redux-templates-modal-wrapper challenge-popup-wrapper\">\n <div className=\"challenge-popup-header challenge-popup-header-congrats\"\n style={{backgroundImage: `url(${redux_templates.plugin + 'assets/img/popup-congrats.png'})`}}>\n <a className=\"challenge-popup-close\" onClick={closeModal}>\n <i className='fas fa-times' />\n </a>\n </div>\n <div className=\"challenge-popup-content\">\n <h3>{__( 'Congrats, you did it!', redux_templates.i18n )}</h3>\n <p>\n {__( 'You completed the Redux Challenge in ', redux_templates.i18n )}<b>{helper.getLocalizedDuration()}</b>.\n {__('Share your success story with other Redux users and help us spread the word', redux_templates.i18n)}\n <b>{__('by giving Redux a 5-star rating (', redux_templates.i18n)} {ratingStars}{__(') on WordPress.org', redux_templates.i18n)}</b>.\n {__('Thanks for your support and we look forward to bringing more awesome features.', redux_templates.i18n)}\n </p>\n <a href=\"https://wordpress.org/support/plugin/redux-framework/reviews/?filter=5#new-post\" className=\"challenge-popup-btn challenge-popup-rate-btn\" target=\"_blank\" rel=\"noopener\">\n {__( 'Rate Redux on Wordpress.org', redux_templates.i18n ) }\n <span className=\"dashicons dashicons-external\"></span>\n </a>\n </div>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const { setChallengeStep, setChallengeFinalStatus, setChallengeOpen } = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep,\n setChallengeFinalStatus,\n setChallengeOpen\n };\n })\n])(ChallengeCongrats);\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n'\nimport CONFIG from '../config';\nimport {CheckboxControl} from '@wordpress/components';\n\nconst {compose} = wp.compose;\nconst {useState} = wp.element;\nconst {withDispatch, withSelect} = wp.data;\n\n\nconst ratingStars = (\n <span className=\"rating-stars\">\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n </span>\n);\n\nfunction ChallengeContact(props) {\n const { setChallengeStep, setChallengeFinalStatus, setChallengeOpen } = props;\n const [comment, setComment] = useState('');\n const [agreeToContactFurther, setAgreement] = useState(false);\n const closeModal = () => {\n setChallengeStep(CONFIG.beginningStep);\n setChallengeFinalStatus('');\n setChallengeOpen(false);\n }\n\n const handleChange = (e) => {\n setComment(e.target.value);\n }\n\n const contactRedux = () => {\n //sending data\n console.log('contact information', comment, agreeToContactFurther);\n closeModal();\n }\n\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className=\"redux-templates-modal-wrapper challenge-popup-wrapper\">\n <div className=\"challenge-popup-header challenge-popup-header-contact\"\n style={{ backgroundImage: `url(${redux_templates.plugin + 'assets/img/popup-contact.png'})` }}>\n <a className=\"challenge-popup-close\" onClick={closeModal}>\n <i className='fas fa-times' />\n </a>\n </div>\n <div className=\"challenge-popup-content challenge-contact\">\n <h3>{__('Help us improve Redux', redux_templates.i18n)}</h3>\n <p>\n {__('We\\'re sorry that it took longer than 5 minutes to try our challenge. We aim to ensure our Block Template library is as beginner friendly as possible. Please take a moment to let us know how we can improve our challenge.', redux_templates.i18n)}\n </p>\n <textarea value={comment} onChange={handleChange}></textarea>\n <CheckboxControl\n label={__('Yes, I give Redux permission to contact me for any follow up questions.', redux_templates.i18n)}\n checked={agreeToContactFurther}\n onChange={() => setAgreement(!agreeToContactFurther)}\n />\n <button className=\"challenge-popup-btn challenge-popup-rate-btn\" onClick={contactRedux}>\n {__('Submit Feedback', redux_templates.i18n)}\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const { setChallengeStep, setChallengeFinalStatus, setChallengeOpen } = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep,\n setChallengeFinalStatus,\n setChallengeOpen\n };\n })\n])(ChallengeContact);\n","/**\n * WordPress dependencies\n */\nimport ChallengeCongrats from './congrats';\nimport ChallengeContact from './contact';\nimport './style.scss'\n\nexport default function ChallengeFinalTemplate({finalStatus}) {\n\treturn <ChallengeCongrats />\n\t// TODO - When feedback is working, uncomment this.\n // if (finalStatus === 'success') return <ChallengeCongrats />\n // return <ChallengeContact />;\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n'\nimport CONFIG from './config';\nexport default {\n\n /**\n * Get number of seconds left to complete the Challenge.\n */\n getSecondsLeft: function() {\n var secondsLeft = localStorage.getItem( 'reduxChallengeSecondsLeft' );\n\n secondsLeft = isNaN(secondsLeft) || secondsLeft == null ? CONFIG.initialSecondsLeft : parseInt( secondsLeft, 10 );\n\n return secondsLeft;\n },\n\n /**\n * Save number of seconds left to complete the Challenge.\n */\n saveSecondsLeft: function( secondsLeft ) {\n\n localStorage.setItem( 'reduxChallengeSecondsLeft', secondsLeft );\n },\n\n /**\n * Get 'minutes' part of timer display.\n */\n getMinutesFormatted: function( secondsLeft ) {\n return Math.floor( secondsLeft / 60 );\n },\n\n /**\n * Get 'seconds' part of timer display.\n */\n getSecondsFormatted: function( secondsLeft ) {\n return secondsLeft % 60;\n },\n\n /**\n * Get formatted timer for display.\n */\n getFormatted: function( secondsLeft ) {\n\n if (secondsLeft < 0) return '0:00';\n\n var timerMinutes = this.getMinutesFormatted( secondsLeft );\n var timerSeconds = this.getSecondsFormatted( secondsLeft );\n\n return timerMinutes + ( 9 < timerSeconds ? ':' : ':0' ) + timerSeconds;\n },\n\n /**\n * Get Localized time string for display\n */\n getLocalizedDuration: function() {\n let secondsLeft = this.getSecondsLeft();\n secondsLeft = CONFIG.initialSecondsLeft - secondsLeft;\n\n var timerMinutes = this.getMinutesFormatted( secondsLeft );\n var timerSeconds = this.getSecondsFormatted( secondsLeft );\n\n const minutesString = timerMinutes ? timerMinutes + ' ' + __( 'minutes', redux_templates.i18n ) + ' ' : '';\n const secondsString = timerSeconds ? timerSeconds + ' ' + __( 'seconds', redux_templates.i18n ) : '';\n return minutesString + secondsString;\n },\n\n /**\n * Get last saved step.\n */\n loadStep: function() {\n\n var step = localStorage.getItem( 'reduxChallengeStep' );\n step = isNaN(step) ? -1 : parseInt( step, 10 );\n\n return step;\n },\n\n /**\n * Save Challenge step.\n */\n saveStep: function( step ) {\n localStorage.setItem( 'reduxChallengeStep', step );\n },\n};\n","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport './style.scss'\nimport helper from './helper';\nimport CONFIG from './config';\nimport ChallengeListBlock from './challenge-list-block';\nimport ChallengeTimer from './challenge-timer';\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\nfunction ReduxChallenge(props) {\n const {autoChallengeStart} = props;\n const {isOpen, challengeStep, setChallengeStep, listExpanded} = props;\n const [challengeClassname, setChallengeClassname] = useState('redux-templates-challenge');\n const [started, setStarted] = useState(false);\n\n useEffect(() => {\n if (challengeStep !== CONFIG.beginningStep && isOpen) {\n setChallengeClassname('redux-templates-challenge started')\n setStarted(true);\n }\n }, [challengeStep, isOpen]);\n\n const onStarted = () => {\n setChallengeStep(0);\n setStarted(true);\n }\n\n return (\n <div className={challengeClassname} style={{display: isOpen ? 'block' : 'none'}}>\n { listExpanded && <ChallengeListBlock onStarted={onStarted} /> }\n <ChallengeTimer started={started} />\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeStep} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep\n };\n }),\n\n withSelect((select) => {\n const {getChallengeStep, getChallengeOpen, getChallengeListExpanded} = select('redux-templates/sectionslist');\n return {\n challengeStep: getChallengeStep(),\n isOpen: getChallengeOpen(),\n listExpanded: getChallengeListExpanded()\n };\n })\n])(ReduxChallenge);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {compose} from '@wordpress/compose';\nimport {withDispatch, withSelect} from '@wordpress/data';\nimport CONFIG from '../config';\nconst {findDOMNode, useRef, useEffect} = wp.element;\nfunction ChallengeDot(props) {\n const {step, challengeStep, isOpen, setChallengeTooltipRect} = props;\n const selectedElement = useRef(null);\n useEffect(() => {\n window.addEventListener('resize', onResize);\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, [])\n\n useEffect(() => {\n if (isOpen === false) return;\n const stepInformation = CONFIG.list[challengeStep];\n if (stepInformation && stepInformation.action && typeof stepInformation.action === 'function') {\n stepInformation.action();\n onResize();\n setTimeout(onResize, 0);\n } else\n onResize();\n }, [challengeStep, isOpen]);\n\n const isVisible = () => {\n return ((challengeStep >= 0 && challengeStep < CONFIG.totalStep) && isOpen);\n }\n\n const onResize = () => {\n const box = getElementBounding();\n if (box) setChallengeTooltipRect(box);\n };\n\n const getElementBounding = () => {\n if (selectedElement && selectedElement.current) {\n const rect = findDOMNode(selectedElement.current).getBoundingClientRect();\n return {left: rect.left, top: rect.top, width: rect.width, height: rect.height};\n }\n return null;\n }\n if (isVisible() && challengeStep === step)\n return <i className=\"challenge-dot tooltipstered\" ref={selectedElement}>\n &nbsp;\n </i>;\n return null;\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeTooltipRect} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeTooltipRect\n };\n }),\n withSelect((select, props) => {\n const { getChallengeOpen, getChallengeStep } = select('redux-templates/sectionslist');\n return {\n isOpen: getChallengeOpen(),\n challengeStep: getChallengeStep()\n };\n })\n])(ChallengeDot);\n","import {__} from '@wordpress/i18n';\n\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\nconst { useState, useEffect } = wp.element;\nimport {ModalManager} from '~redux-templates/modal-manager';\nimport CONFIG from '../config';\nimport helper from '../helper';\nconst ARROW_BOX = 30;\nconst DEFAULT_BOX_WIDTH = 250;\nconst DEFAULT_BOX_HEIGHT = 300;\nconst DEFAULT_OFFSET_X = 0;\nconst DEFAULT_OFFSET_Y = 20;\nconst DEFAULT_ARROW_OFFSET_X = 20;\nconst DEFAULT_ARROW_OFFSET_Y = 20;\nfunction TooltipBox(props) {\n const { challengeStep, tooltipRect, isOpen, setChallengeStep, setChallengeFinalStatus, setChallengePassed, setChallengeListExpanded, setImportingTemplate } = props;\n const [style, setStyle] = useState({});\n const [arrowStyle, setArrowStyle] = useState({});\n const [content, setContent] = useState('');\n const [wrapperClassname, setWrapperClassname] = useState('');\n\n const isVisible = () => {\n return ((challengeStep >= 0 || challengeStep > CONFIG.totalStep) && isOpen);\n }\n\n const calculateWithStepInformation = () => {\n const stepInformation = CONFIG.list[challengeStep];\n const boxWidth = (stepInformation.box && stepInformation.box.width) ? stepInformation.box.width : DEFAULT_BOX_WIDTH;\n const boxHeight = (stepInformation.box && stepInformation.box.height) ? stepInformation.box.height : DEFAULT_BOX_HEIGHT;\n const offsetX = stepInformation.offset ? stepInformation.offset.x :DEFAULT_OFFSET_X;\n const offsetY = stepInformation.offset ? stepInformation.offset.y :DEFAULT_OFFSET_Y;\n switch(stepInformation.direction) {\n case 'right':\n return [tooltipRect.left + offsetX, tooltipRect.top + offsetY - boxHeight / 2];\n case 'left':\n return [tooltipRect.left + offsetX, tooltipRect.top + offsetY - boxHeight / 2];\n case 'top':\n return [tooltipRect.left + offsetX - boxWidth / 2, tooltipRect.top + offsetY ];\n case 'bottom':\n return [tooltipRect.left + offsetX - boxWidth / 2, tooltipRect.top - boxHeight + offsetY];\n default:\n return [tooltipRect.left + offsetX, tooltipRect.top + offsetY];\n }\n }\n\n const calculateArrowOffset = () => {\n const stepInformation = CONFIG.list[challengeStep];\n const boxWidth = (stepInformation.box && stepInformation.box.width) ? stepInformation.box.width : DEFAULT_BOX_WIDTH;\n const boxHeight = (stepInformation.box && stepInformation.box.height) ? stepInformation.box.height : DEFAULT_BOX_HEIGHT;\n const arrowOffsetX = (stepInformation.offset && isNaN(stepInformation.offset.arrowX) === false) ? stepInformation.offset.arrowX : DEFAULT_ARROW_OFFSET_X;\n const arrowOffsetY = (stepInformation.offset && isNaN(stepInformation.offset.arrowY) === false) ? stepInformation.offset.arrowY : DEFAULT_ARROW_OFFSET_Y;\n switch(stepInformation.direction) {\n case 'top':\n return [boxWidth / 2 + arrowOffsetX, arrowOffsetY];\n case 'bottom':\n return [boxWidth / 2 + arrowOffsetX, arrowOffsetY];\n case 'left':\n return [arrowOffsetX, arrowOffsetY + boxHeight / 2 - ARROW_BOX / 2];\n case 'right':\n return [boxWidth + arrowOffsetX, arrowOffsetY + boxHeight / 2 - ARROW_BOX / 2];\n default:\n return [arrowOffsetX, arrowOffsetY];\n }\n }\n // adjust position and content upon steps change\n useEffect(() => {\n if (isVisible() && tooltipRect) {\n const stepInformation = CONFIG.list[challengeStep];\n if (stepInformation) {\n const [boxLeft, boxTop] = calculateWithStepInformation();\n const [arrowOffsetX, arrowOffsetY] = calculateArrowOffset();\n setStyle({\n ...style,\n display: 'block',\n width: stepInformation.box ? stepInformation.box.width : DEFAULT_BOX_WIDTH,\n left: boxLeft,\n top: boxTop//tooltipRect.top + offsetY + PADDING_Y + ARROW_HEIGHT\n });\n setContent(stepInformation.content);\n setArrowStyle({\n ...arrowStyle,\n display: 'block',\n left: boxLeft + arrowOffsetX, // calculateLeftWithStepInformation(),\n top: boxTop + arrowOffsetY // tooltipRect.top + offsetY + PADDING_Y\n });\n }\n } else {\n setStyle({ ...style, display: 'none' });\n setArrowStyle({...arrowStyle, display: 'none'});\n }\n }, [JSON.stringify(tooltipRect), challengeStep, isOpen]);\n\n // update wrapper class name based on step change\n useEffect(() => {\n const stepInformation = CONFIG.list[challengeStep];\n if (stepInformation) {\n switch(stepInformation.direction) {\n case 'top':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-top');\n break;\n case 'bottom':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-bottom');\n break;\n case 'left':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-left');\n break;\n case 'right':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-right');\n break;\n default:\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-left');\n }\n\n }\n }, [challengeStep])\n\n const toNextStep = () => {\n if (challengeStep === CONFIG.totalStep - 1) {\n // finalize challenge\n ModalManager.show();\n setChallengeFinalStatus((helper.getSecondsLeft() > 0) ? 'success' : 'contact');\n setChallengeStep(CONFIG.beginningStep);\n setChallengePassed(true);\n setChallengeListExpanded(true);\n setImportingTemplate(null);\n } else\n setChallengeStep(challengeStep + 1);\n }\n\n\n return (\n <div className={wrapperClassname}>\n <div className=\"tooltipster-box\" style={style}>\n {content}\n <div className=\"btn-row\">\n <button className=\"challenge-done-btn\" onClick={toNextStep}>{__('Next', redux_templates.i18n)}</button>\n </div>\n </div>\n <div className=\"tooltipster-arrow\" style={arrowStyle}>\n <div className=\"tooltipster-arrow-uncropped\">\n <div className=\"tooltipster-arrow-border\"></div>\n <div className=\"tooltipster-arrow-background\"></div>\n </div>\n </div>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const { setChallengeStep, setChallengeFinalStatus, setChallengePassed, setChallengeListExpanded, setImportingTemplate } = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep,\n setChallengeFinalStatus,\n setChallengePassed,\n setChallengeListExpanded,\n setImportingTemplate\n };\n }),\n\n withSelect((select, props) => {\n const { getChallengeTooltipRect, getChallengeOpen, getChallengeStep, getChallengeFinalStatus } = select('redux-templates/sectionslist');\n return {\n tooltipRect: getChallengeTooltipRect(),\n isOpen: getChallengeOpen(),\n challengeStep: getChallengeStep(),\n finalStatus: getChallengeFinalStatus()\n };\n })\n])(TooltipBox);\n","const {apiFetch} = wp;\nconst {useState} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {parse} = wp.blocks;\n\nimport {BlockPreview} from '@wordpress/block-editor';\nimport {installedBlocksTypes} from '~redux-templates/stores/actionHelper';\nimport './style.scss'\n\nfunction BackgroundImage(props) {\n const {data, appendErrorMessage, activeItemType} = props;\n const [dataLoaded, setDataLoaded] = useState(false);\n const [blocks, setBlocks] = useState(null);\n\n if (data && dataLoaded === false) {\n const type = activeItemType === 'section' ? 'sections' : 'pages';\n let the_url = 'redux/v1/templates/template?type=' + type + '&id=' + data.id + '&uid=' + window.userSettings.uid;\n if ('source' in data) {\n the_url += '&source=' + data.source;\n }\n\n const options = {\n method: 'GET',\n path: the_url,\n headers: {'Content-Type': 'application/json', 'Registered-Blocks': installedBlocksTypes()}\n };\n\n apiFetch(options).then(response => {\n if (response.success) {\n setBlocks(response.data);\n } else {\n appendErrorMessage(response.data.error);\n }\n setDataLoaded(true);\n }).catch(error => {\n appendErrorMessage(error.code + ' : ' + error.message);\n setDataLoaded(true);\n });\n }\n\n if (dataLoaded === true) {\n let parsed = parse(blocks.template);\n return (\n <div>\n <BlockPreview blocks={parsed} />\n </div>\n );\n }\n return null;\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n appendErrorMessage\n } = dispatch('redux-templates/sectionslist');\n\n return {\n appendErrorMessage\n };\n }),\n withSelect((select) => {\n const {getActiveItemType} = select('redux-templates/sectionslist');\n return {\n activeItemType: getActiveItemType()\n };\n })\n])(BackgroundImage);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {compose} = wp.compose;\nconst {withSelect} = wp.data;\nimport {useEffect, useState} from '@wordpress/element';\nimport PreviewImportButton from '../preview-import-button';\nimport DependentPlugins from '../dependent-plugins';\nimport './style.scss'\n\nfunction ButtonGroup (props) {\n const {importingTemplate, showDependencyBlock, index, data, pageData} = props;\n const [rootClassName, setRootClassName] = useState('redux-templates-import-button-group');\n\n // When some action is in progress, disable the button groups\n useEffect(() => {\n if (importingTemplate === null && rootClassName !== 'redux-templates-import-button-group')\n setRootClassName('redux-templates-import-button-group')\n if (importingTemplate !== null && rootClassName === 'redux-templates-import-button-group')\n setRootClassName('redux-templates-import-button-group disabled');\n }, [importingTemplate])\n return (\n <div className={rootClassName}>\n <PreviewImportButton index={index} data={data} pageData={pageData} />\n <DependentPlugins showDependencyBlock={showDependencyBlock} data={data} />\n </div>\n )\n}\n\n\n\nexport default compose([\n withSelect((select) => {\n const {getImportingTemplate} = select('redux-templates/sectionslist');\n return {importingTemplate: getImportingTemplate()};\n })\n])(ButtonGroup);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {Tooltip} from '@wordpress/components';\nimport * as Icons from '~redux-templates/icons'\nimport './style.scss'\nconst {__} = wp.i18n;\n\nexport default function DependentPlugins (props) {\n const {data, showDependencyBlock} = props;\n const {id} = data;\n\n const isMissingPlugin = (plugin) => {\n return ((data.proDependenciesMissing && data.proDependenciesMissing.indexOf(plugin) >=0)\n || (data.installDependenciesMissing && data.installDependenciesMissing.indexOf(plugin) >=0))\n }\n\n if (showDependencyBlock) {\n\t let index = data.dependencies.indexOf('core');\n\t if ( index > -1 ) {\n\t\t data.dependencies.splice(index, 1);\n\t\t data.dependencies.push( 'core' );\n\t }\n\t return (\n\t\t <div className=\"redux-templates-button-display-dependencies\">\n\t\t\t { data.dependencies &&\n\t\t\t data.dependencies.map(plugin => {\n\t\t\t \tlet pluginInstance = null;\n\t\t\t\t const plugin_name = plugin.replace('-pro', '').replace('-premium', '').replace(/\\W/g, '').toLowerCase();\n\t\t\t \tif ( 'core' == plugin ) {\n\t\t\t\t\t pluginInstance = {\n\t\t\t\t\t \tname: 'WordPress Native'\n\t\t\t\t\t }\n\t\t\t\t } else {\n\t\t\t\t\t pluginInstance = redux_templates.supported_plugins[plugin];\n\t\t\t\t }\n\t\t\t\t\tif ( !pluginInstance ) {\n\t\t\t\t\t\tpluginInstance = redux_templates.supported_plugins[plugin.replace('-pro', '').replace('-premium', '')];\n\t\t\t\t\t}\n\n\t\t\t\t // We don't want two of the same icons showing up.\n\t\t\t\t if ( ! plugin.includes('-pro') && ! plugin.includes('-premium') ) {\n\t\t\t\t\t if ( data.dependencies.includes(plugin + '-pro') || data.dependencies.includes( plugin + '-premium' ) ) {\n\t\t\t\t\t\t return;\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t if (!pluginInstance) {\n\t\t\t\t\t console.log( 'Missing plugin details for '+ plugin+' - ' + plugin.replace('-pro', '').replace('-premium', '') );\n\t\t\t\t\t console.log( redux_templates.supported_plugins );\n\t\t\t\t\t return;\n\t\t\t\t }\n\t\t\t\t if ( 'redux' === plugin_name ) {\n\t\t\t\t\t return;\n\t\t\t\t }\n\t\t\t\t const IconComponent = Icons[plugin_name];\n\t\t\t\t if (IconComponent && pluginInstance) {\n\t\t\t\t\t return (\n\t\t\t\t\t\t <Tooltip text={(isMissingPlugin(plugin) && 'core' !== plugin ? pluginInstance.name+ ' ( '+__('Not Installed', redux_templates.i18n)+' )' : pluginInstance.name)} position=\"bottom center\" key={id + plugin}>\n <span className={isMissingPlugin(plugin) && 'core' !== plugin ? 'missing-dependency' : ''}>\n <IconComponent/>\n </span>\n\t\t\t\t\t\t </Tooltip>\n\t\t\t\t\t );\n\t\t\t\t } else if ( 'shareablockcom' !== plugin_name && 'gutenberghubcom' !== plugin_name ) {\n\t\t\t\t\t console.log('Need icon for ' + plugin_name);\n\t\t\t\t }\n\n\t\t\t })\n\t\t\t }\n\t\t\t { data.dependencies['core'] &&\n\t\t\t <Tooltip text={__('WordPress Core', redux_templates.i18n)} position=\"bottom center\" key={id + 'core'}>\n\t\t\t\t <span>\n\t\t\t\t <IconComponent/>\n\t\t\t\t </span>\n\t\t\t </Tooltip>\n\n\t\t\t }\n\t\t </div>\n\t );\n }\n\n return null;\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\nimport {compose} from '@wordpress/compose';\nimport {withDispatch} from '@wordpress/data';\nimport {Notice} from '@wordpress/components';\n\nimport './style.scss';\n\nexport function ErrorNotice(props) {\n const {discardAllErrorMessages, errorMessages} = props;\n return (\n <div className='redux-templates-error-notice'>\n <Notice status=\"error\" onRemove={discardAllErrorMessages}>\n <p>\n {\n errorMessages.join(', ')\n }\n </p>\n </Notice>\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n discardAllErrorMessages\n } = dispatch('redux-templates/sectionslist');\n\n return {\n discardAllErrorMessages\n };\n })\n])(ErrorNotice);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","export default {\n position: {\n bottom: 0,\n right: 0,\n },\n event: 'click',\n\n mainButtonStyles: {\n backgroundColor: '#24B0A6',\n fill: '#ffffff',\n transform: 'none',\n transition: 'none',\n transformOrigin: 'none',\n },\n alwaysShowTitle: false,\n actionButtonStyles: {\n backgroundColor: '#19837C',\n }\n}\n","import {Fab, Action} from 'react-tiny-fab';\nimport config from './config';\nimport './styles.scss';\nimport {__} from '@wordpress/i18n';\n\nimport * as Icons from '~redux-templates/icons'\nimport { ModalManager } from '~redux-templates/modal-manager';\nimport FeedbackDialog from '~redux-templates/modal-feedback';\n\nconst schema = {\n type: 'object',\n properties: {\n comment: {\n type: 'string'\n },\n agreeToContactFurther: {\n type: 'boolean',\n title: __('Yes, I give Redux permission to contact me for any follow up questions.', redux_templates.i18n)\n }\n }\n}\nconst uiSchema = {\n 'comment': {\n 'ui:widget': 'textarea',\n 'ui:options': {\n label: false\n }\n }\n};\n\nexport default function FabWrapper() {\n const {mainButtonStyles, actionButtonStyles, position, event, alwaysShowTitle} = config;\n\n return (\n <Fab\n mainButtonStyles={mainButtonStyles}\n position={position}\n icon={Icons.ReduxTemplatesIcon()}\n event={event}\n // onClick={testing}\n\n text={__('See Quick Links', redux_templates.i18n)}\n >\n\n {/*<Action*/}\n {/* style={actionButtonStyles}*/}\n {/* text={__('Suggest a Feature', redux_templates.i18n)}*/}\n {/* onClick={e => {*/}\n {/* window.open(redux_templates.u, \"_blank\")*/}\n {/* }}*/}\n {/*>*/}\n {/* <i className=\"fa fa-lightbulb-o\"/>*/}\n {/*</Action>*/}\n {/*<Action*/}\n {/* style={actionButtonStyles}*/}\n {/* text={__('Contact Us', redux_templates.i18n)}*/}\n {/* onClick={e => {*/}\n {/* ModalManager.openFeedback(<FeedbackDialog */}\n {/* title={__('Help us improve Redux', redux_templates.i18n)} */}\n {/* description={__('Thank you for reaching out. We will do our best to contact you ba.', redux_templates.i18n)}*/}\n {/* schema={schema}*/}\n {/* uiSchema={uiSchema}*/}\n {/* headerImage={<img className=\"header-background\" src={`${redux_templates.plugin}assets/img/popup-contact.png` } />}*/}\n {/* buttonLabel={__('Submit Feedback', redux_templates.i18n)}*/}\n {/* />)*/}\n {/* }}*/}\n {/*>*/}\n {/* <i className=\"fa fa-comments\"/>*/}\n {/*</Action>*/}\n\t <Action\n\t\t style={actionButtonStyles}\n\t\t text={__('Get Support', redux_templates.i18n)}\n\t\t onClick={e => {\n\t\t\t window.open('https://wordpress.org/support/plugin/redux-framework/#new-topic-0', '_blank')\n\t\t }}\n\t >\n\t\t <i className=\"far fa-question-circle \"/>\n\t </Action>\n <Action\n style={actionButtonStyles}\n text={__('Join our Community', redux_templates.i18n)}\n onClick={e => {\n window.open('https://www.facebook.com/groups/reduxframework', '_blank')\n }}\n >\n <i className=\"fa fa-comments\"/>\n </Action>\n\t {\n\t\t redux_templates.mokama === '1' &&\n\t\t <Action\n\t\t\t style={actionButtonStyles}\n\t\t\t text={__('Visit our Website', redux_templates.i18n)}\n\t\t\t onClick={e => {\n\t\t\t\t window.open( redux_templates.u + 'tinyfab', '_blank')\n\t\t\t }}\n\t\t >\n\t\t\t <i className=\"fas fa-external-link-alt\"/>\n\t\t </Action>\n\t }\n\t {/*{*/}\n\t\t {/* redux_templates.left !== 999 &&*/}\n\t\t {/* <Action*/}\n\t\t\t{/* style={actionButtonStyles}*/}\n\t\t\t{/* className=\"tour-icon\"*/}\n\t\t\t{/* text={__( 'Take the Redux Challenge', redux_templates.i18n )}*/}\n\t\t\t{/* onClick={e => {*/}\n\t\t\t{/*\t setTourOpen();*/}\n\t\t\t{/* }}*/}\n\t\t {/* >*/}\n\t\t\t{/* <i className=\"fas fa-map-signs tour-icon\"/>*/}\n\t\t {/* </Action>*/}\n\t {/*}*/}\n\n\t {\n\t\t redux_templates.mokama !== '1' &&\n\t\t <Action\n\t\t\t style={{backgroundColor:'#00a7e5'}}\n\t\t\t text={__('Upgrade to Redux Pro', redux_templates.i18n)}\n\t\t\t onClick={e => {\n\t\t\t\t window.open(redux_templates.u + 'help_bubble', '_blank')\n\t\t\t }}\n\t\t >\n\t\t\t <i className=\"fa fa-star\"/>\n\t\t </Action>\n\t }\n </Fab>\n );\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./styles.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./styles.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./styles.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import ButtonGroup from '../button-group';\n\nconst {__} = wp.i18n\nimport {Tooltip} from '@wordpress/components';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport './style.scss'\n\nconst MultipleItem = (props) => {\n\n const {data, onSelectCollection} = props;\n const {pages, homepageData, ID, name} = data;\n const {image} = homepageData || {};\n\n return (\n <div className=\"redux-templates-multiple-template-box\">\n <div className=\"multiple-template-view\" onClick={ () => onSelectCollection( ID ) } >\n <div className=\"redux-templates-box-shadow\">\n <div className=\"redux-templates-default-template-image\">\n <SafeImageLoad url={image} alt={__('Default Template', redux_templates.i18n)} />\n {requiresPro(data) && <span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span>}\n {!requiresPro(data) && requiresInstall(data) && <div className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></div>}\n </div>\n <div className=\"redux-templates-button-overlay\">\n {requiresPro(data) && <Tooltip text={__('Premium Requirements', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span></Tooltip>}\n {!requiresPro(data) && requiresInstall(data) && <Tooltip text={__('Not Installed', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><div className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></div></Tooltip>}\n <div className=\"redux-templates-import-button-group\">\n <div className=\"action-buttons\"><a className=\"redux-templates-button download-button\">{__('View Templates', redux_templates.i18n)}</a></div>\n </div>\n </div>\n </div>\n <div className=\"redux-templates-tmpl-info\">\n <h5 className=\"redux-templates-tmpl-title\" dangerouslySetInnerHTML={{__html:name}}/>\n <span className=\"redux-templates-temp-count\">{ pages ? pages.length : 0 } {__('Templates', redux_templates.i18n)}</span>\n </div>\n </div>\n </div>\n );\n}\n\nexport default MultipleItem\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const { useState, useEffect, Fragment} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n\n\nimport './style.scss';\n\nimport {pageSizeMap} from '../../stores/helper';\n\nfunction Pagination(props) {\n const {currentPage, pageData, columns} = props;\n const {setCurrentPage} = props;\n const [totalPages, setTotalPages] = useState(1);\n const [firstButtonClass, setFirstButtonClass] = useState('tablenav-pages-navspan button');\n const [prevButtonClass, setPrevButtonClass] = useState('tablenav-pages-navspan button');\n const [nextButtonClass, setNextButtonClass] = useState('tablenav-pages-navspan button');\n const [lastButtonClass, setLastButtonClass] = useState('tablenav-pages-navspan button');\n\n useEffect(() => {\n const enabledClassname = 'tablenav-pages-navspan button ';\n const disabledClassname = 'tablenav-pages-navspan button disabled';\n setFirstButtonClass((currentPage === 0) ? disabledClassname : enabledClassname);\n setPrevButtonClass((currentPage === 0) ? disabledClassname : enabledClassname);\n setNextButtonClass((currentPage === totalPages - 1) ? disabledClassname : enabledClassname);\n setLastButtonClass((currentPage === totalPages - 1) ? disabledClassname : enabledClassname);\n }, [currentPage, totalPages]);\n\n useEffect(() => {\n let colStr = (columns === '') ? 'medium' : columns;\n setTotalPages(Math.ceil(pageData.length / pageSizeMap[colStr]));\n }, [pageData]);\n\n const gotoPage = (pageNum, className) => {\n if (className.indexOf('disabled') > 0) return;\n document.getElementById('modalContent').scrollTop = 0;\n setCurrentPage(pageNum);\n }\n\n\n return (\n <Fragment>\n\n {\n totalPages > 0 &&\n <div className=\"tablenav-pages\">\n <span className=\"displaying-num\">{pageData.length} items</span>\n <span className=\"pagination-links\">\n <span className={firstButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(0, firstButtonClass)}>«</span>\n <span className={prevButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(currentPage - 1, prevButtonClass)}>‹</span>\n <span className=\"screen-reader-text\">{__('Current Page', redux_templates.i18n)}</span>\n <span id=\"table-paging\" className=\"paging-input\">\n <span className=\"tablenav-paging-text\">{currentPage + 1} of <span\n className=\"total-pages\">{totalPages}</span></span>\n </span>\n <span className={nextButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(currentPage + 1, nextButtonClass)}>›</span>\n <span className={lastButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(totalPages - 1, lastButtonClass)}>»</span>\n </span>\n </div>\n }\n </Fragment>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setCurrentPage\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setCurrentPage\n };\n }),\n\n withSelect((select) => {\n const {getCurrentPage, getPageData, getColumns} = select('redux-templates/sectionslist');\n return {\n currentPage: getCurrentPage(),\n pageData: getPageData(),\n columns: getColumns()\n };\n })\n])(Pagination);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nimport {openSitePreviewModal} from '~redux-templates/stores/actionHelper';\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\nimport './style.scss'\n\nfunction PreviewImportButton(props) {\n const {data, index, pageData} = props;\n const {setImportingTemplate, tourActiveButtonGroup} = props;\n let spinner = null;\n const triggerImportTemplate = (data) => {\n if (spinner === null) {\n spinner = data.ID;\n setImportingTemplate(data);\n }\n }\n\n return (\n <div className=\"action-buttons\">\n {\n pageData[index] && pageData[index]['source'] !== 'wp_block_patterns' &&\n <a className=\"redux-templates-button preview-button\" target=\"_blank\"\n onClick={() => openSitePreviewModal(index, pageData)}>\n <i className=\"fa fa-share\"/> {__('Preview', redux_templates.i18n)}\n </a>\n }\n\n <a className=\"redux-templates-button download-button\"\n onClick={() => triggerImportTemplate(data)}>\n <i className=\"fas fa-download\"/>{__('Import', redux_templates.i18n)}\n </a>\n {tourActiveButtonGroup && tourActiveButtonGroup.ID === pageData[index].ID && <ChallengeDot step={4} /> }\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setImportingTemplate\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setImportingTemplate\n };\n }),\n withSelect((select, props) => {\n const {getTourActiveButtonGroup} = select('redux-templates/sectionslist');\n return {\n tourActiveButtonGroup: getTourActiveButtonGroup()\n };\n })\n])(PreviewImportButton);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const { Spinner } = wp.components;\nimport ImageLoader from 'react-load-image';\n\nconst placeholderImage = redux_templates.plugin + 'assets/img/reduxtemplates-medium.jpg';\nconst spinnerStyle = {height: 120, display: 'flex', alignItems: 'top', paddingTop: '40px', justifyContent: 'center', background: '#fff'};\nexport default function SafeImageLoad({url, alt, className}) {\n return (\n <ImageLoader src={url}>\n <img alt={alt} className={className} />\n <img src={placeholderImage} alt={alt} className={className} />\n <div style={spinnerStyle}>\n <Spinner />\n </div>\n </ImageLoader>\n );\n\n}\n","import {Tooltip} from '@wordpress/components';\n\nconst {__} = wp.i18n\nconst {withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\nimport ButtonGroup from '../button-group';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport BackgroundImage from '../background-image';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper';\n\nimport './style.scss'\n\n\nfunction SingleItem (props) {\n // Decoupling props\n const {pageData, tourActiveButtonGroup, index} = props;\n const [data, setData] = useState(null);\n // const {ID, image, url, pro, source, requirements} = data;\n const [innerClassname, setInnerClassname] = useState('redux-templates-single-item-inner redux-templates-item-wrapper ');\n\n useEffect(() => {\n if (pageData) setData(pageData[index]);\n }, [index, pageData]);\n\n useEffect(() => {\n setInnerClassname((pageData && pageData[index] && tourActiveButtonGroup && tourActiveButtonGroup.ID === pageData[index].ID) ?\n 'redux-templates-single-item-inner redux-templates-item-wrapper focused' : 'redux-templates-single-item-inner redux-templates-item-wrapper');\n }, [tourActiveButtonGroup, pageData, index]);\n\n if (!data) return null;\n return (\n <div className=\"redux-templates-single-section-item\">\n <div className={innerClassname}>\n <div className=\"redux-templates-default-template-image\">\n {data.source !== 'wp_block_patterns' && <SafeImageLoad url={data.image}/> }\n {data.source === 'wp_block_patterns' && <BackgroundImage data={data} />}\n {requiresPro(data) && <span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span>}\n {!requiresPro(data) && requiresInstall(data) && <span className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></span>}\n <div className=\"redux-templates-tmpl-title\">{data.name}</div>\n </div>\n {/* redux-templates-default-template-image */}\n <div className=\"redux-templates-button-overlay\">\n\t {requiresPro(data) && <Tooltip text={__('Premium Requirements', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><div className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</div></Tooltip>}\n {!requiresPro(data) && requiresInstall(data) && <Tooltip text={__('Not Installed', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><div className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></div></Tooltip>}\n <ButtonGroup index={index} showDependencyBlock={true} data={data} pageData={pageData} />\n </div>\n\n </div>\n {/* redux-templates-item-wrapper */}\n </div>\n )\n}\n\n\nexport default withSelect((select, props) => {\n const {getTourActiveButtonGroup, getPageData} = select('redux-templates/sectionslist');\n return {\n pageData: getPageData(),\n tourActiveButtonGroup: getTourActiveButtonGroup()\n };\n})(SingleItem);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\nimport {compose} from '@wordpress/compose';\nimport {withDispatch, withSelect} from '@wordpress/data';\nimport {ModalManager} from '../../modal-manager';\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\nexport function TabHeader(props) {\n const { activeItemType, searchContext, activeCollection, isChallengeOpen } = props;\n const { setActiveItemType, setSearchContext, setChallengeOpen, clearSearch } = props;\n\n const isActive = (itemType) => {\n return (activeItemType === itemType) ? 'active' : '';\n }\n\n const onSearchContextUpdate = (e) => {\n if (activeItemType !=='saved') setSearchContext(e.target.value);\n }\n\n const changeTab = (tabName) => {\n if (document.getElementById('modalContent')) document.getElementById('modalContent').scrollTop = 0;\n setActiveItemType(tabName);\n }\n\n const closeModal = () => {\n if (isChallengeOpen === false) {\n ModalManager.close();\n }\n }\n\n return (\n <div className=\"redux-templates-builder-modal-header\">\n <div className=\"template-search-box\">\n {\n ((activeItemType !== 'collection' || activeCollection === null) && activeItemType !== 'saved') &&\n <div>\n <input type=\"text\" placeholder={__('Search for a template', redux_templates.i18n)} className=\"form-control\" value={searchContext} onChange={onSearchContextUpdate} />\n <ChallengeDot step={1} />\n <i className=\"fas fa-search\" />\n </div>\n }\n </div>\n\n <div className=\"redux-templates-template-list-header\" data-tut=\"tour__navigation\">\n <button className={ isActive('section') } onClick={e => changeTab('section')}> {__('Sections', redux_templates.i18n)} </button>\n <button className={ isActive('page') } onClick={e => changeTab('page')}> {__('Templates', redux_templates.i18n)} </button>\n <button className={ isActive('collection') } onClick={e => changeTab('collection')}> {__('Template Kits', redux_templates.i18n)} </button>\n <button className={ isActive('saved') } onClick={e => changeTab('saved')}> {__('Saved', redux_templates.i18n)} </button>\n <ChallengeDot step={0} />\n <button className=\"redux-templates-builder-close-modal\" onClick={closeModal} >\n\t\t\t\t\t<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" role=\"img\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M13 11.9l3.3-3.4-1.1-1-3.2 3.3-3.2-3.3-1.1 1 3.3 3.4-3.5 3.6 1 1L12 13l3.5 3.5 1-1z\"></path></svg>\n </button>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setActiveItemType,\n setSearchContext,\n clearSearch\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setActiveItemType,\n setSearchContext,\n clearSearch\n };\n }),\n\n withSelect((select, props) => {\n const { getActiveItemType, getSearchContext, getActiveCollection, getChallengeOpen } = select('redux-templates/sectionslist');\n return { activeItemType: getActiveItemType(), searchContext: getSearchContext(), activeCollection: getActiveCollection(), isChallengeOpen: getChallengeOpen() };\n })\n\n])(TabHeader);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38 12H12v26h26V12z\"\n});\n\nvar SvgViewFew = function SvgViewFew(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 50 50\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgViewFew;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.5 12.5H0V0h12.5v12.5zM31.2 0H18.8v12.5h12.5V0zM50 0H37.5v12.5H50V0zM12.5 18.8H0v12.5h12.5V18.8zm18.7 0H18.8v12.5h12.5V18.8zm18.8 0H37.5v12.5H50V18.8zM12.5 37.5H0V50h12.5V37.5zm18.7 0H18.8V50h12.5V37.5zm18.8 0H37.5V50H50V37.5z\"\n});\n\nvar SvgViewMany = function SvgViewMany(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 50 50\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgViewMany;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.1 5.3H5.3v15.8h15.8V5.3zm23.6 0H28.9v15.8h15.8V5.3zM21.1 28.9H5.3v15.8h15.8V28.9zm23.6 0H28.9v15.8h15.8V28.9z\"\n});\n\nvar SvgViewNormal = function SvgViewNormal(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 50 50\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgViewNormal;","const {__, sprintf} = wp.i18n;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\nimport {Button, Notice} from '@wordpress/components'\nimport SVGViewFew from './images/view-few.svg'\nimport SVGViewMany from './images/view-many.svg'\nimport SVGViewNormal from './images/view-normal.svg'\nimport {reloadLibrary} from '~redux-templates/stores/actionHelper';\nimport * as Icons from '~redux-templates/icons';\nimport './style.scss'\n\nfunction TemplateListSubHeader(props) {\n const {itemType, sortBy, activeCollection, challengePassed, pageData, columns, loading} = props;\n const {setSortBy, setColumns, setChallengeOpen, setChallengeListExpanded} = props;\n const [triggerTourClassname, setTriggerTourClassname] = useState('far fa-question-circle tour-icon');\n\n useEffect(() => {\n setTriggerTourClassname(challengePassed ? 'fas fa-trophy tour-icon' : 'fas fa-map-signs tour-icon');\n }, [challengePassed]);\n\n const itemTypeLabel = () => {\n if (itemType === 'section') return __('Sections', redux_templates.i18n);\n if (itemType === 'page') return __('Templates', redux_templates.i18n);\n if (itemType === 'collection' && activeCollection === null) return __('Template Kits', redux_templates.i18n);\n if (itemType === 'collection' && activeCollection !== null) return __('Sections', redux_templates.i18n);\n };\n\n const dataLength = pageData ? pageData.length : '';\n\n let pageTitle = '';\n if (loading === false && dataLength && dataLength !== 0) {\n pageTitle = <span>{dataLength} {itemTypeLabel()}</span>;\n }\n\n return (\n <div className=\"redux-templates-template-list-sub-header\">\n <h4>\n {pageTitle}\n <ChallengeDot step={3} />\n </h4>\n\n <div className=\"redux-templates-template-filters\">\n\t <div className='trial_notice'>\n\t\t { ! redux_templates.mokama &&\n\t\t <div style={{verticalAlign:'middle'}}>\n\t\t\t <Notice status=\"info\" isDismissible={false}>\n\t\t\t\t <strong style={{display:'inline-block', marginRight:'10px', verticalAlign:'middle'}}>\n\t\t\t\t\t { '0' === redux_templates.left &&\n\t\t\t\t\t \t<>\n\t\t\t\t\t\t\t {sprintf( __( 'You\\'ve imported %d/%d Templates', redux_templates.i18n ), 5-redux_templates.left, 5 )}\n\t\t\t\t\t\t </>\n\t\t\t\t\t }\n\t\t\t\t\t { '0' !== redux_templates.left &&\n\t\t\t\t\t <>\n\t\t\t\t\t\t {sprintf( __( 'Trial: %d/%d Imports Remaining', redux_templates.i18n ), redux_templates.left, 5 )}\n\t\t\t\t\t </>\n\t\t\t\t\t }\n\t\t\t\t </strong>\n\t\t\t\t <Button isPrimary\n\t\t\t\t isSmall\n\t\t\t\t icon={Icons.redux}\n\t\t\t\t label={__('Upgrade to Redux Pro', redux_templates.i18n)}\n\t\t\t\t onClick={()=> window.open( redux_templates.u + 'subheader', '_blank')}>Get Pro</Button>\n\t\t\t </Notice>\n\n\n\t\t </div>\n\n\t\t }</div>\n <Button\n icon={<i className={triggerTourClassname} />}\n label={__('Take the Redux Challenge', redux_templates.i18n)}\n onClick={() => {setChallengeOpen(true); setChallengeListExpanded(true); }}\n />\n <Button\n icon=\"image-rotate\"\n label={__('Refresh Library', redux_templates.i18n)}\n className=\"refresh-library\"\n onClick={reloadLibrary}\n />\n <Button\n icon={<SVGViewFew width=\"18\" height=\"18\"/>}\n className={columns === 'large' ? 'is-active' : ''}\n label={__('Large preview', redux_templates.i18n)}\n onClick={() => setColumns('large')}\n />\n <Button\n icon={<SVGViewNormal width=\"18\" height=\"18\"/>}\n className={columns === '' ? 'is-active' : ''}\n label={__('Medium preview', redux_templates.i18n)}\n onClick={(e) => setColumns('')}\n />\n <Button\n icon={<SVGViewMany width=\"18\" height=\"18\"/>}\n className={columns === 'small' ? 'is-active' : ''}\n label={__('Small preview', redux_templates.i18n)}\n onClick={(e) => setColumns('small')}\n />\n <div className=\"\">\n <select name=\"sortBy\" id=\"sortBy\" value={sortBy} onChange={(e) => setSortBy(e.target.value)}>\n <option value=\"name\">{__('Name', redux_templates.i18n)}</option>\n {/*<option value=\"popularity\">{__('Popularity', redux_templates.i18n)}</option>*/}\n <option value=\"updated\">{__('Updated', redux_templates.i18n)}</option>\n </select>\n </div>\n </div>\n\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setLibrary, setActivePriceFilter, setActiveCollection, setSortBy, setColumns, setChallengeOpen, setChallengeListExpanded} = dispatch('redux-templates/sectionslist');\n return {\n setLibrary,\n setActivePriceFilter,\n setActiveCollection,\n setSortBy,\n setColumns,\n setChallengeOpen,\n setChallengeListExpanded\n };\n }),\n\n withSelect((select, props) => {\n const {fetchLibraryFromAPI, getActiveItemType, getColumns, getPageData, getActiveCollection, getStatistics, getSortBy, getLoading, getChallengePassed} = select('redux-templates/sectionslist');\n return {\n fetchLibraryFromAPI,\n itemType: getActiveItemType(),\n pageData: getPageData(),\n columns: getColumns(),\n statistics: getStatistics(),\n sortBy: getSortBy(),\n activeCollection: getActiveCollection(),\n loading: getLoading(),\n challengePassed: getChallengePassed()\n };\n })\n])(TemplateListSubHeader);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies.\n */\nconst { __ } = wp.i18n;\n\nconst {\n\tFragment,\n\tuseEffect,\n\tuseRef\n} = wp.element;\n\nconst CSSEditor = ({\n\t attributes,\n\t setAttributes,\n\t clientId\n }) => {\n\tuseEffect( () => {\n\t\tlet classes = getClassName();\n\n\t\tif ( attributes.customCSS ) {\n\t\t\tconst generatedCSS = ( attributes.customCSS ).replace( /.ticss-[a-zA-Z0-9_-]*/g, 'selector' );\n\t\t\tcustomCSSRef.current = generatedCSS;\n\t\t} else {\n\t\t\tcustomCSSRef.current = 'selector {\\n}\\n';\n\t\t}\n\n\t\teditorRef.current = wp.CodeMirror( document.getElementById( 'redux-css-editor' ), {\n\t\t\tvalue: customCSSRef.current,\n\t\t\tautoCloseBrackets: true,\n\t\t\tcontinueComments: true,\n\t\t\tlineNumbers: true,\n\t\t\tlineWrapping: true,\n\t\t\tmatchBrackets: true,\n\t\t\tlint: true,\n\t\t\tgutters: [ 'CodeMirror-lint-markers' ],\n\t\t\tstyleActiveLine: true,\n\t\t\tstyleActiveSelected: true,\n\t\t\textraKeys: {\n\t\t\t\t'Ctrl-Space': 'autocomplete',\n\t\t\t\t'Alt-F': 'findPersistent',\n\t\t\t\t'Cmd-F': 'findPersistent'\n\t\t\t}\n\t\t});\n\n\t\teditorRef.current.on( 'change', () => {\n\t\t\tconst regex = new RegExp( 'selector', 'g' );\n\t\t\tconst generatedCSS = editorRef.current.getValue().replace( regex, `.${ classArRef.current }` );\n\t\t\tcustomCSSRef.current = generatedCSS;\n\n\t\t\tif ( ( 'selector {\\n}\\n' ).replace( /\\s+/g, '' ) === customCSSRef.current.replace( /\\s+/g, '' ) ) {\n\t\t\t\treturn setAttributes({ customCSS: null });\n\t\t\t}\n\n\t\t\tsetAttributes({ customCSS: customCSSRef.current });\n\t\t});\n\t}, []);\n\n\tuseEffect( () => {\n\t\tlet classes = getClassName();\n\n\t\tsetAttributes({\n\t\t\thasCustomCSS: true,\n\t\t\tclassName: classes\n\t\t});\n\t}, [ attributes ]);\n\n\tconst getClassName = () => {\n\t\tlet classes;\n\n\t\tconst uniqueId = clientId.substr( 0, 8 );\n\n\t\tif ( null !== customCSSRef.current && ( 'selector {\\n}\\n' ).replace( /\\s+/g, '' ) === customCSSRef.current.replace( /\\s+/g, '' ) ) {\n\t\t\treturn attributes.className;\n\t\t}\n\n\t\tif ( attributes.className ) {\n\t\t\tclasses = attributes.className;\n\n\t\t\tif ( ! classes.includes( 'ticss-' ) ) {\n\t\t\t\tclasses = classes.split( ' ' );\n\t\t\t\tclasses.push( `ticss-${ uniqueId }` );\n\t\t\t\tclasses = classes.join( ' ' );\n\t\t\t}\n\n\t\t\tclassArRef.current = classes.split( ' ' );\n\t\t\tclassArRef.current = classArRef.current.find( i => i.includes( 'ticss' ) );\n\t\t} else {\n\t\t\tclasses = `ticss-${ uniqueId }`;\n\t\t\tclassArRef.current = classes;\n\t\t}\n\n\t\treturn classes;\n\t};\n\n\tconst editorRef = useRef( null );\n\tconst customCSSRef = useRef( null );\n\tconst classArRef = useRef( null );\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<p>{ __( 'Add your custom CSS.' ) }</p>\n\n\t\t\t<div id=\"redux-css-editor\" className=\"redux-css-editor\"/>\n\n\t\t\t<p>{ __( 'Use' ) } <code>selector</code> { __( 'to target block wrapper.' ) }</p>\n\t\t\t<p>{ __( '' ) }</p>\n\t\t\t<p>{ __( 'Example:' ) }</p>\n\n\t\t\t<pre className=\"redux-css-editor-help\">\n\t\t\t\t{ 'selector {\\n background: #000;\\n}\\n\\nselector img {\\n border-radius: 100%;\\n}'}\n\t\t\t</pre>\n\n\t\t\t<p>{ __( 'You can also use other CSS syntax here, such as media queries.' ) }</p>\n\t\t</Fragment>\n\t);\n};\n\nexport default CSSEditor;\n","/**\n * WordPress dependencies.\n */\nconst { assign } = lodash;\n\nconst { __ } = wp.i18n;\n\nconst { hasBlockSupport } = wp.blocks;\n\nconst { PanelBody } = wp.components;\n\nconst { createHigherOrderComponent } = wp.compose;\n\nconst { InspectorControls } = wp.blockEditor || wp.editor;\n\nconst { Fragment } = wp.element;\n\nconst { addFilter, removeFilter } = wp.hooks;\n\n/**\n * Internal dependencies.\n */\nimport './style.scss';\n\nimport CSSEditor from './editor.js';\n\nimport './inject-css.js';\n\nconst addAttribute = ( settings ) => {\n\tif ( hasBlockSupport( settings, 'customClassName', true ) ) {\n\t\tsettings.attributes = assign( settings.attributes, {\n\t\t\thasCustomCSS: {\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\tcustomCSS: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: null\n\t\t\t}\n\t\t});\n\t}\n\n\treturn settings;\n};\n\nconst withInspectorControls = createHigherOrderComponent( ( BlockEdit ) => {\n\treturn ( props ) => {\n\t\tconst hasCustomClassName = hasBlockSupport( props.name, 'customClassName', true );\n\t\tif ( hasCustomClassName && props.isSelected ) {\n\t\t\treturn (\n\t\t\t\t<Fragment>\n\t\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t\t<InspectorControls>\n\t\t\t\t\t\t<PanelBody\n\t\t\t\t\t\t\ttitle={ __( 'Custom CSS' ) }\n\t\t\t\t\t\t\ticon={<i className={'fa fa'}></i>}\n\t\t\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CSSEditor\n\t\t\t\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\t\t\t\tsetAttributes={ props.setAttributes }\n\t\t\t\t\t\t\t\tattributes={ props.attributes }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</PanelBody>\n\t\t\t\t\t</InspectorControls>\n\t\t\t\t</Fragment>\n\t\t\t);\n\t\t}\n\n\t\treturn <BlockEdit { ...props } />;\n\t};\n}, 'withInspectorControl' );\n\n// Remove block-css fields.\nremoveFilter( 'blocks.registerBlockType', 'themeisle-custom-css/attribute' );\nremoveFilter( 'editor.BlockEdit', 'themeisle-custom-css/with-inspector-controls' );\n\naddFilter( 'blocks.registerBlockType', 'redux-custom-css/attribute', addAttribute );\naddFilter( 'editor.BlockEdit', 'redux-custom-css/with-inspector-controls', withInspectorControls );\n\n","/**\n * WordPress dependencies.\n */\nconst { __ } = wp.i18n;\n\nconst { parse } = wp.blocks;\n\nconst {\n\tselect,\n\tsubscribe\n} = wp.data;\n\nconst addStyle = style => {\n\tlet element = document.getElementById( 'redux-css-editor-styles' );\n\n\tif ( null === element ) {\n\t\telement = document.createElement( 'style' );\n\t\telement.setAttribute( 'type', 'text/css' );\n\t\telement.setAttribute( 'id', 'redux-css-editor-styles' );\n\t\tdocument.getElementsByTagName( 'head' )[0].appendChild( element );\n\t}\n\n\tif ( element.textContent === style ) {\n\t\treturn null;\n\t}\n\n\treturn element.textContent = style;\n};\n\nlet style = '';\n\nconst cycleBlocks = ( blocks, reusableBlocks ) => {\n\tblocks.forEach( block => {\n\t\tif ( block.attributes.hasCustomCSS ) {\n\t\t\tif ( block.attributes.customCSS && ( null !== block.attributes.customCSS ) ) {\n\t\t\t\tstyle += block.attributes.customCSS + '\\n';\n\t\t\t}\n\t\t}\n\n\t\tif ( 'core/block' === block.name && null !== reusableBlocks ) {\n\t\t\tlet reBlocks = reusableBlocks.find( i => block.attributes.ref === i.id );\n\t\t\tif ( reBlocks ) {\n\t\t\t\treBlocks = parse( reBlocks.content.raw );\n\t\t\t\tcycleBlocks( reBlocks, reusableBlocks );\n\t\t\t};\n\t\t}\n\n\t\tif ( undefined !== block.innerBlocks && 0 < ( block.innerBlocks ).length ) {\n\t\t\tcycleBlocks( block.innerBlocks, reusableBlocks );\n\t\t}\n\t});\n};\n\nconst subscribed = subscribe( () => {\n\tstyle = '';\n\tconst { getBlocks } = select( 'core/block-editor' ) || select( 'core/editor' );\n\tconst blocks = getBlocks();\n\tconst reusableBlocks = select( 'core' ).getEntityRecords( 'postType', 'wp_block' );\n\tcycleBlocks( blocks, reusableBlocks );\n\taddStyle( style );\n});\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./editor.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./editor.scss\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./editor.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.5 19.8v-.2V10c0-.2.1-.2.2-.3 1.7-.7 3.5-1.4 5.2-2.2 1.3-.5 2.6-1.1 3.8-1.6.3-.1.3-.1.3.2v9.1c0 .1 0 .2-.2.3-.9.4-1.9.9-2.8 1.3-.8.4-1.7.8-2.5 1.2-1 .5-1.9.9-2.9 1.4-.3.1-.7.2-1.1.4zm1-5.4v3.7c0 .2 0 .2.2.1 2.4-1.1 4.7-2.2 7.1-3.4.1-.1.2-.1.2-.3V7.4c0-.2 0-.2-.2-.1-2.4 1-4.7 2-7.1 3-.1.1-.2.1-.2.2v3.9zM19.4 4.2c-1-.4-2-.9-3-1.3-1.2-.5-2.4-1-3.7-1.6C11.8 1 10.9.6 10 .2c-.1 0-.1-.1-.2 0-.6.3-1.1.5-1.7.7-.7.3-1.4.7-2.1 1-.7.3-1.5.6-2.2 1-.7.3-1.3.6-2 .9-.6.1-1.1.3-1.7.6.2.1.4.2.6.2 1.9.8 3.8 1.6 5.7 2.5 1.1.4 2.2.9 3.2 1.4.1.1.2.1.4 0 .4-.2.8-.3 1.1-.5 1.5-.6 3-1.3 4.5-1.9 1.1-.5 2.2-.9 3.4-1.4.2-.1.5-.2.7-.3-.1-.1-.2-.1-.3-.2zm-5.9-.8h-1.1c-.1 0-.2 0-.2.2 0 .5 0 .5.5.5h.7c.1 0 .1 0 .1.1v.5c0 .1 0 .1-.1.1h-1c-.1 0-.2 0-.2.2v1c0 .1 0 .1-.1.1h-.6c-.1 0-.1 0-.1-.1v-.5c-.3.3-.5.4-.8.5-.3 0-.6 0-.9-.1 0 0-.1-.1-.2 0h-.1c-.2.1-.4.1-.6.1-.1 0-.2 0-.2-.1-.2-.4-.2-.4-.6-.4h-.6c-.1 0-.1 0-.2.1-.1.4-.1.4-.5.4h-.3c-.1 0-.2 0-.1-.1.3-.7.6-1.4.9-2.2.1-.3.3-.6.4-1 0-.1.1-.1.2-.1.4 0 .4 0 .6.4.1.2.2.5.3.7.3-.6.7-.9 1.3-1 .6-.1 1.1.1 1.6.5v-.4c0-.1 0-.1.1-.1h1.9c.1 0 .1 0 .1.1v.5c0 .1-.1.1-.2.1zM9.5 10c0-.1 0-.2-.1-.2-.3-.1-.5-.2-.7-.3-2.4-1-4.7-2-7.1-3-.5-.2-1-.4-1.6-.7v9.4c0 .1 0 .2.1.2.2.1.3.1.5.2L3 16.8c1.3.6 2.5 1.2 3.8 1.8.8.4 1.7.8 2.5 1.2.2.1.2.1.2-.1v-7V10zm-1.2 8.2c-2.4-1.1-4.8-2.3-7.2-3.4-.1 0-.1 0-.1-.1V7.5c0-.1 0-.2.2-.1l7.2 3c.1 0 .1.1.1.2v7.6c0 .1 0 .1-.2 0z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.4 4.3c0 .1 0 .1 0 0 0 .2 0 .3-.2.3-.1 0-.2 0-.2.2-.2.4-.6.6-1 .5-.5-.2-.8-.5-.8-1 0-.4.3-.8.7-.9.4-.1.8.1 1 .5 0 .1.1.1.2.1.3.1.3.1.3.3zM7.8 4c.1 0 .1 0 0 0 .2.3.3.5.3.7h-.6c.2-.2.3-.5.3-.7zM7.6 15.5v.1c.1.2.1.3-.1.5v.1c.1.1.1.2.1.4v.1h-.1c-.1-.1-.3-.2-.3-.3v-.2c.1.1.1.3.3.3 0-.1-.1-.3-.3-.4 0 0-.1 0-.1-.1-.1-.1-.2 0-.2.1 0 .2.1.3.4.4.1 0 .1 0 .1.1v.1c.1 0 .2.1.2.1s.1.1 0 .1h-.1c-.4-.2-.8-.4-1.3-.6l-.1-.1c0-.3-.2-.5-.4-.6-.1-.1-.3-.1-.4 0l-.1.1h.1c.4.1.7.2.7.5v.1s-.1 0-.1-.1c-.1-.2-.2-.3-.4-.3 0 .1 0 .1.1.1h.1v.1h-.1c-.2-.1-.3-.1-.5-.2-.1-.1-.1-.1 0-.2l.1-.1c-.1 0-.2-.1-.3 0l-.1.1c-.1.2-.2.1-.2 0-.2-.4-.2-.4-.4-.5 0 .1.1.2.1.3 0 .1 0 .1-.1.1s-.1 0-.2-.1c-.1 0-.2 0-.1-.2s-.2-.3-.3-.3c0 0-.1.1-.1 0v-.1c0-.1 0-.1.1-.1.2 0 .3.1.4.2 0 .1.1.1.1.2h.1v-.1c-.1-.3-.4-.5-.7-.5-.1 0-.2 0-.2.2 0 .1 0 .1-.1.1-.4-.2-.9-.4-1.3-.6 0 0-.1 0-.1-.1s.1 0 .1 0c.1 0 .2.2.2 0 0 0 .1 0 .1.1.1.1.1.1.2 0 .1 0 .1-.1.1-.2-.1-.2-.2-.3-.5-.4-.1 0-.1 0-.2.1v.1H2s0-.1.1-.1v.1c0 .1-.1.1-.2.1h-.3c-.1 0-.1-.3 0-.3.1-.1.1-.2 0-.3-.1-.1-.1-.3-.1-.4 0-.1 0-.1.1-.1s0 .1 0 .1c-.1.2 0 .4.2.6.1.1.2.1.3.2.1.1.2.2.2.4 0 .1 0 .1.1.1.1.1.2.2.2.4 0 .1.1.1.1 0 .1-.2.3-.2.5-.2 0-.1 0-.1-.1-.1-.5-.5-.9-1.1-1.2-1.7-.2-.5-.3-1-.2-1.6 0-.1.1-.2.1-.3 0-.1 0-.2-.1-.2-.2-.1-.3-.3-.4-.5V10c.1-.3 0-.6.1-1 0-.1 0-.1.1-.1.5.1.5.2.5.3v.6c0 .1.1.2.2.2s.2.1.3 0v-.1c0-.1-.1-.2-.2-.2s-.1 0-.1-.1c.2 0 .5.2.4.4 0 .1-.2.2-.3.1 0 0-.1-.1-.1 0-.1 0-.2-.1-.2 0v.3l.1.1c.2.2.2.2.4 0l.1-.1c.3-.3.3-.4.1-.8 0-.1-.1-.2-.2-.4.1 0 .1.1.2.1.1.3.3.5.6.6.1.1.2.1.3 0-.1-.1-.2-.1-.4-.2s-.4-.3-.4-.5H3c0 .1.2.2.3.4.1-.1.1-.2.1-.2.1 0 .1-.1.2 0s0 .1 0 .1c-.1.1-.1.3 0 .4.1.1.2.1.4 0 .2-.2.4-.2.6 0 .1.1.2.2.4.2s.4.2.5.4c.1.1.1.2.2.3 0 .1.1.2.2.2 0 0 .1 0 .2-.1s0-.2-.1-.2v-.1s.1 0 .1.1.1.1.1.2c0 .2.1.2.2.1h.2c.1 0 .2.1.1.2 0 .1-.1.1-.2.1s-.2-.1-.4-.1c-.1 0-.1-.1-.2 0 0 .1 0 .1.1.1.2.2.4.2.7.1.1 0 .1-.1.2 0 0 .1 0 .1-.1.1-.2.2-.2.5-.1.8l.3.6c.1 0 .2.1.4.1.1 0 .2 0 .2-.2 0-.1 0-.2-.1-.2-.1.1.1.2-.1.3-.1 0-.2 0-.2-.1s-.1-.2 0-.2c.1-.1.1.1.3.1 0-.1-.2-.2-.3-.2-.2-.2-.3-.3-.3-.5s.1-.2.3-.2c.1 0 .1.1.2.1v.1h-.1c-.1 0-.2-.2-.2 0-.1.1 0 .2.1.3.1.1.2.1.3.2.1.1.1 0 .1-.1v-.6-.1c.1 0 .1.1.1.1V13c0 .1-.2.2-.3.2 0 0-.1-.1-.1 0v.1c.2.4.2.8.1 1.2-.1.6-.4 1.1-1.1 1.2-.1 0-.2.1-.4 0 .3.2.5.4.6.7 0 .1.1.1.1 0s.1-.2.2-.1c.1 0 .1 0 .1-.1.1-.2.2-.2.3-.1.2.1.4.1.5-.1.1-.1 0-.2-.1-.3-.1-.2-.1-.2 0-.2zm-3.9-4.4c-.1-.1-.1 0-.2 0-.2.2-.4.4-.3.7.2-.1.4-.2.5-.3.1 0 .1-.1.1 0s0 .1-.1.1c-.1.1-.3.1-.4.2-.1.2-.2.2-.1.4 0 0 0 .1.1.1.5.7.9 1.4 1.4 2 .1.1.2.1.3.1.5-.2.9-.5 1.4-.7.1-.1.1-.1 0-.2-.2-.3-.4-.5-.6-.8 0 0-.1 0 0-.1h.1c0 .1.1.3.2.4.1.1.2.3.3.4 0-.5-.2-.8-.4-1.2h.1c.2.4.4.8.5 1.3v.1c.1 0 .1-.1.2-.1s0-.1 0-.1c-.1-.2-.1-.4-.2-.5-.1-.2-.2-.5-.4-.7-.1-.2-.1-.2-.2-.1s-.2.1-.3.2c0 0-.1.1-.1 0v-.1l.2-.2c.2-.1.2-.2.1-.4l-.6-.6c-.1-.1-.2-.2-.4-.1h-.1c.2.1.4.3.6.4.3.2.4.4.4.5-.3-.2-.5-.5-.9-.7.2.2.3.4.4.6 0 0 .1.1 0 .1h-.1c-.1-.2-.3-.4-.4-.6-.1-.1-.1-.1-.2-.1-.1.1-.2.1-.3.2 0 0-.1.1-.1 0s0-.1.1-.1c.1-.1.3-.1.4-.2-.1 0-.1 0-.2-.1-.2 0-.4-.1-.7-.1-.1.2-.1.2-.1.3zm2.8 2.7c-.5.2-1 .5-1.5.7 0 0-.1 0 0 0 0 0 0 .1.1.1.3.1.6.1.9-.1.2-.1.5-.3.5-.7zm-3.4-1.5c0 .2 0 .4.1.5.2.6.6 1.1 1.2 1.5h.1v-.1c-.2-.2-.3-.4-.5-.6-.3-.4-.6-.9-.9-1.3zm-.2-2.4c.1.3-.1.4-.2.6-.2.2-.3.5-.4.7 0 .2.1.2.2.2s.1-.1.1-.2c.1-.3.2-.5.4-.7.1-.1.1-.2.1-.3 0 0-.1-.1-.2-.3zm4.3 3.8c0-.4-.1-.7-.3-1.1-.1-.3-.4-.6-.3-1-.3.1-.3.2-.2.5.2.3.4.7.4 1.1.1.3.2.5.4.5zM3 9.9c0 .1.1.1.1.2.1.2.3.3.5.3h.7c.1 0 .2 0 .2-.1s-.1-.1-.2-.1c-.2-.1-.4-.1-.6-.1-.2 0-.4 0-.7-.2zm3.6 3.8c-.1.4-.1.7-.4.9-.1 0-.2.1-.2.1 0 .1.2.1.2.1.1 0 .1.1.2 0 .2-.1.3-.3.3-.5 0-.1.1-.2.1-.3 0 0-.1-.1-.2-.3zM3 12c-.1 0-.1.1-.2.1s-.1.1-.1.1c.1.3.2.7.4 1 .1.2.3.3.5.4-.4-.5-.6-1-.6-1.6zm3.5-.5c-.2-.1-.4-.1-.6-.3-.2-.3-.5-.5-.8-.7 0 0-.1-.1-.1 0v.1c.1.2.2.2.3.3.2.2.5.4.7.6.2.3.3.2.5 0zm-1.7 3.3c0 .2.1.3.2.2h.2c.5 0 .9.1 1.3.4h.2c.1-.1 0-.1-.1-.1-.2-.2-.5-.3-.8-.3-.3-.1-.5 0-.8-.1-.1-.2-.2-.2-.2-.1zm-1.9-1.4c0 .2.2.2.3.3.5.2.8.5 1.2.9.1.1.2.3.3.4 0-.4 0-.4-.2-.5-.2-.1-.4-.3-.6-.5-.2-.2-.5-.4-.8-.5-.1-.1-.1-.1-.2-.1zm.1-.1c-.2-.4-.3-.7-.4-1.1 0-.1-.1-.2-.2-.3h-.1c0 .1 0 .2.1.3 0 .3.2.6.3.9.1.2.2.2.3.2zm4.2 1c.1-.1-.1-.1-.2-.2-.1 0-.1.1-.1.1-.1.2-.2.5-.3.6-.1.2-.1.2 0 .2s.2.2.2.1c.2-.2.4-.5.4-.8zm-2.6-3.4c-.1-.1-.1-.3-.3-.3-.2-.1-.5-.1-.7-.1 0 0-.1 0-.1.1v.3c0 .1.1.1.2 0 .2-.1.4-.1.5 0h.4zm-1.7 1c0-.1.1-.1.1-.2 0-.3.2-.5.4-.7.1 0 .1-.1.1-.1 0-.1-.3-.2-.4-.1-.2.1-.3.3-.4.6 0 .1-.1.2 0 .3.1 0 .2.1.2.2zm2.6 3.3c.2 0 .5.1.7.2.1 0 .2.1.2 0s-.1-.1-.1-.1h-.1c-.4-.2-.8-.3-1.2-.1 0-.1 0 0 0 0s0 .1.1 0h.4zm-2.4-1.4c0 .1.1.2.2.3.5.2.8.5 1.1.9 0 0 0 .1.1.1V15c-.3-.6-.8-1-1.4-1.2zm1.8-3.1v-.4c0-.1-.1-.1-.1-.1h-.1c-.1.2-.1.3 0 .5 0 .1.1.1.2.1s0 0 0-.1zm.3 4.7c.3.1.6.2.9.1-.3-.2-.6-.2-.9-.1zm-2.4-3.6c0-.1-.2-.3-.4-.3l-.1.1.3.3c.2.1.2.1.2-.1zM7.1 14h.1v-.1c-.1-.1-.1-.2-.2-.2h-.2v.2s.1.1.3.1zm-3.6.3c.1.2.6.6.8.6-.1-.2-.6-.6-.8-.6zm1.2.8c-.1 0-.1.1-.1.2s.1.3.2.3c0 0 .1-.1.1-.2 0-.2-.1-.3-.2-.3zM4.1 10c.1 0 .3.1.4.1h.1V10c-.2-.2-.4-.2-.5 0zm1.3.6c0-.2-.2-.4-.4-.4h-.1v.1c.2.1.3.2.5.3z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 11.8c-.1 0-.1-.1-.1-.2v-.8-.1H2c0 .1.2.1.2.2-.2-.1-.2 0-.2.2v.7zM7.7 13.9v.5s0 .1-.1.1 0 0 0-.1v-.7c0-.1 0-.2-.1-.3l-.1-.1c0-.1.1 0 .1 0 .2 0 .2.1.2.3v.3zM2.2 10.2c.1 0 .2.1.2.2s0 .1-.1.1-.2-.1-.2-.2c-.1-.1 0-.1.1-.1zM7.2 11.4c.1 0 .3.3.2.4 0 0 0 .1-.1 0 0 0-.1-.1-.1-.4 0 .1 0 0 0 0zM6 10.7c0 .1.1.1 0 .2h-.2c-.1-.1-.1-.1-.1-.2s.1-.1.2-.1l.1.1zM2.9 9.2c-.1-.1-.2-.2-.4-.3 0 0-.1 0 0-.1h.1c.2.2.4.3.6.4v.1c-.1 0-.2-.1-.3-.1zM2.1 9.2c0-.1.1-.2.1-.2.1 0 .2.1.2.2s-.1.1-.2.1c-.1.1-.1 0-.1-.1zM7.1 11.1c-.1 0-.2-.1-.3-.1-.1-.1-.3-.1-.4-.2 0 0-.1 0 0-.1h.1c.1.1.3.2.6.4 0-.1 0-.1 0 0zM7.7 11.4v.1c-.1 0-.1-.1-.1-.1 0-.1-.2-.2-.3-.2 0 0-.1 0-.1-.1s.1 0 .1 0c.1.1.2.1.2.1l.2.2zM3.9 9.8s0 .1 0 0c-.2.1-.3 0-.3-.1s0-.1.1-.1.2 0 .2.2zM2.4 8.8c-.1 0-.2 0-.2-.1-.1 0-.2 0-.2.1h-.1v-.1-.2c.1-.1.1 0 .1 0 .2.2.3.2.4.3zM7.4 15.7c-.2 0-.3-.1-.4-.1v-.1h.1c.1 0 .2.1.3.2zM7.6 15.5c-.1-.1-.2-.1-.3-.2 0 0-.1 0 0-.1 0-.1.1 0 .1 0 .1 0 .2.1.3.1-.1.1 0 .2-.1.2zM2.2 13.1c.1.1.2.1.3.2 0 0 .1 0 0 .1h-.1s-.2-.1-.2-.3c-.1.1-.1.1 0 0-.1.1-.1.1 0 0zM2.3 12.9c0 .1 0 .1 0 0-.2 0-.3-.1-.4-.1v-.1c.2.1.3.1.4.2zM14.1 16.3c-.6 0-1-.1-1.5-.5-.3-.3-.5-.6-.6-.9 0-.3-.1-.6 0-.9 0-.6.2-1.1.4-1.6s.5-.9.8-1.3c.4-.4.8-.8 1.3-1.1.4-.3.9-.5 1.3-.6.9-.2 1.7-.1 2.3.7.2.3.3.6.4 1v.5c0 .7-.2 1.4-.5 2-.3.7-.8 1.3-1.4 1.8-.5.5-1.2.8-1.9 1-.2-.1-.4-.1-.6-.1zm4.3-4.9c0-.5-.2-1.1-.8-1.5-.4-.3-.9-.4-1.3-.4-.3 0-.6.1-.8.2-.5.2-.9.4-1.3.7-.4.3-.8.7-1.1 1.1-.4.5-.6 1-.8 1.6-.1.5-.2 1.1 0 1.6.3.9.9 1.3 1.7 1.4.4.1.7 0 1.1-.1.7-.2 1.2-.6 1.7-1 .4-.4.8-.8 1.1-1.3.2-.7.5-1.3.5-2.3zM4.5 12.7c0 .2 0 .4.2.6.1.1.2.1.3.1.1-.1.1-.2.1-.3-.1-.1-.1-.2-.2-.1 0 0-.1.1-.1 0v-.1l.1-.1c.2.2.3.2.5.1h.1v.1s-.1.1-.2.1-.1 0-.1.1 0 .3-.2.3-.3-.1-.4-.2c-.3-.2-.3-.5-.3-.8v-.1c0-.3.2-.4.5-.2.2.1.3.2.4.4v.1h-.1c-.1-.1-.1-.2-.2-.3-.1-.1-.2-.2-.4-.1-.1 0-.1.2-.1.3.1 0 .1.1.1.1zM6.6 13.3c-.1-.4-.2-.8-.5-1.1.3.1.6.8.5 1.1zM3.7 11.1c.1.1.2.3.3.5-.2-.2-.3-.3-.3-.5zM2.8 11.4c.1-.2.2-.4.4-.6h.1v.1c-.2.2-.3.4-.3.6h-.1c-.1 0 0 0-.1-.1z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13 12.2c.1-.3.3-.5.4-.7.3-.4.6-.7.9-.9.4-.3.8-.5 1.2-.6.5-.1.9-.1 1.3 0 0 0 .1 0 .1.1s-.1.1-.1.1c-.4.3-.4.7-.1 1.1.3.3.3.6.2 1-.1.5-.3 1.1-.4 1.6-.1-.1-.1-.2-.2-.4-.2-.5-.4-1.1-.6-1.6-.1-.1-.1-.3-.2-.4-.1-.1 0-.1.1-.2s.2-.1.3-.2c0 0 .1-.1 0-.1 0-.1-.1 0-.1 0-.3.2-.7.3-1 .4-.1 0-.3.1-.4.1-.1 0-.1.1-.1.2s.1.1.2 0c.2-.1.3 0 .3.2l.3.6c.1.1 0 .3 0 .4-.1.2-.1.5-.2.7-.1.3-.2.6-.3 1-.2-.3-.3-.6-.4-.9l-.6-1.5c0-.1 0-.2.1-.2s.2-.1.2-.1v-.1c0-.1-.1 0-.1 0-.2.2-.5.3-.8.4z\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.3 13.1c.3.6.5 1.2.8 1.9v.1c-.4.3-.9.5-1.4.6-.2 0-.2 0-.2-.2.2-.6.4-1.3.6-1.9.1-.1.1-.3.2-.5zM14.1 15.7c-.5-.1-.9-.2-1.1-.6-.4-.5-.5-1-.4-1.6 0-.2.1-.4.1-.7 0 0 0-.1.1-.1l.1.1c.2.4.4.8.5 1.2.2.6.4 1.1.7 1.7zM16.7 14.6c.1-.4.2-.8.4-1.2l.6-1.8c.1-.3.2-.6.1-.9.2.2.2.4.3.6.1.5 0 1.1-.1 1.6-.1.4-.4.8-.6 1.2-.4.1-.5.3-.7.5z\"\n});\n\nvar SvgAcfBlocks = function SvgAcfBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5);\n};\n\nexport default SvgAcfBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.4 9l.8 2.1H3.7c0-.2.3-.8.4-1.1l.3-1s0 .1 0 0zm8.7.3h1v1.5h-1c-.1.5-.5 1-1 1.3-1.6 1.1-3.9.1-4-2.1 0-1.3 1-2.3 2.1-2.5 1.3-.2 2.6.6 2.9 1.8zM0 14.5h2.3l.5-1.3c0-.1 0 0 .1-.1H6c0 .2.5 1.2.5 1.3h2.4l-.1-.3c.7.2 1.2.4 2.1.4 1 0 2-.5 2.6-1l.3-.3.3-.3v1.6h2.2v-1.7-1.7h3.5v-2h-3.5v-.8-.8H20V5.4h-5.9V7c-.4-.4-.3-.4-.8-.7-1-.7-2.4-1-3.6-.7-.9.2-1.6.6-2.2 1.2l-.2.2c-.3.2-.7.9-.8 1.3l-.1.1c-.1-.3-.8-1.8-.9-2.3-.1-.2-.2-.5-.3-.7H3.6L0 14.5z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n});\n\nvar SvgAdvancedCustomFields = function SvgAdvancedCustomFields(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgAdvancedCustomFields;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 2h5v11H2V2zm6 0h5v5H8V2zm6 0h4v16h-4V2zM8 8h5v5H8V8zm-6 6h11v4H2v-4z\"\n});\n\nvar SvgAdvancedGutenbergBlocks = function SvgAdvancedGutenbergBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgAdvancedGutenbergBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.3 13.9h1.3l.7-1.9h3.3l.7 1.9h1.3l-3-7.8H9.3l-3 7.8zM10 7.8l1.2 3H8.8l1.2-3z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"atomic-blocks_svg__st0\",\n d: \"M18.9 5.7c.4-.5.6-1.2.6-1.9 0-1.9-1.5-3.4-3.3-3.4-.7 0-1.4.2-1.9.6-1.3-.6-2.7-1-4.2-1C4.6 0 .2 4.4.2 9.9s4.4 9.9 9.9 9.9S20 15.4 20 9.9c-.1-1.4-.5-2.9-1.1-4.2zM15.1 2h1.1c.5 0 1.1.3 1.1.9 0 .4-.3.6-.3.6s.5.2.5.8c0 .6-.5 1-1.1 1h-1.2V2zM10 18.2c-4.5 0-8.2-3.7-8.2-8.2 0-4.5 3.7-8.2 8.2-8.2 1.1 0 2.2.2 3.1.6-.2.4-.3.9-.3 1.4 0 1.9 1.5 3.4 3.3 3.4.5 0 1-.1 1.4-.3.4 1 .6 2 .6 3.1.1 4.5-3.6 8.2-8.1 8.2z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"atomic-blocks_svg__st0\",\n d: \"M16.7 3c0-.3-.2-.4-.5-.4h-.5v.8h.5c.3 0 .5-.1.5-.4zM16.8 4.4c0-.3-.2-.4-.5-.4h-.6v.9h.6c.3-.1.5-.2.5-.5z\"\n});\n\nvar SvgAtomicBlocks = function SvgAtomicBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3);\n};\n\nexport default SvgAtomicBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.8 19.5c-.6.1-.8-.4-1-.8-1.5-1.8-3-3.6-4.5-5.3-.4-.5-.8-.9-1.2-1.4-.1-.2-.1-.4-.1-.6.3-1 .7-2 1.1-3 .7-2 1.5-3.9 2.2-5.9.1-.3.2-.4.5-.5 3-.5 5.9-1.1 8.9-1.5.6-.1 1 0 1.4.5 1 1.3 2 2.5 3 3.7.9 1.1 1.8 2.1 2.7 3.2.2.2.3.4.2.7-.5 1.3-.9 2.5-1.4 3.8-.6 1.7-1.2 3.3-1.9 5-.1.3-.2.4-.5.4-2.7.4-5.3.9-8 1.4-.5.1-.9.2-1.4.3zm-2.5-3.4h.9c2.4-.3 4.7-.5 7.1-.8.4 0 .5-.2.6-.6.4-2.1 1.3-4.1 2.7-5.7.2-.2.2-.3 0-.5-.9-1.1-1.9-2.2-2.8-3.4-.2-.2-.3-.2-.6-.1-1.9 1.1-4 1.6-6.2 1.6-.3 0-.5.1-.5.4-.5 1.8-1 3.5-1.6 5.3-.2.8-.5 1.6-.7 2.4 1.1-.8 2.1-1.7 3.1-2.5.5-.4.8-.9.8-1.5 0-.3.1-.6.2-.9.7-1.2 2.3-1 3.1-.4.2.2 0 .2-.1.3-.4.1-.9.3-1.3.4-.3.1-.4.3-.4.6s.1.6.3.8c.2.2.3.3.6.2.4-.2.9-.3 1.3-.4.1 0 .2-.1.3 0 .1.1 0 .2 0 .3-.4 1-1.4 1.7-2.5 1.5-.5-.1-.9 0-1.2.4-.2.2-.4.3-.6.5-.9.6-1.7 1.4-2.5 2.1zm14.5-8.6c-.1-.1-.2-.2-.2-.3-.5-.6-1.1-1.3-1.6-1.9-.8-.9-1.6-1.9-2.4-2.8-.1-.1-.2-.3-.4-.1-.4.4-.9.7-1.3 1.1-.1.1-.1.2 0 .3 1.4 1.6 2.7 3.3 4.1 4.9.1.2.2.2.4 0 .4-.4.8-.7 1.3-1.1-.1 0 0-.1.1-.1z\"\n});\n\nvar SvgBlockOptions = function SvgBlockOptions(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgBlockOptions;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"style\", null, \".block-slider_svg__st0{fill:#6171b5}\");\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"block-slider_svg__st0\",\n d: \"M2.9 16.2c0-1.2.2-2.3.4-3.5 0-.2.1-.5.3-.7.2-.3.5-.6.9-.6.3 0 .3.5.3.7.6 1.7 1.4 3.2 2.7 4.5.4.4.8.7 1.2.9.2.2.5.2.3.5-.1.3-.1.8-.6.8-1.8 0-3.5-.3-5.2-1-.3-.1-.4-.3-.3-.6v-1zM17 3.8c0 1.3-.2 2.6-.5 4-.1.6-.4.8-.9.9-.4.1-.6.1-.6-.4-.2-2-1-3.8-2.4-5.3l-.3-.3c-.2-.2-.7-.3-.5-.7.2-.4.5-.7 1-.7.4 0 .7 0 1.1.1.9.2 1.7.5 2.5.7.4.1.7.4.6.9v.8z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.1 11.4c-1-1.5-2.3-2.7-3.6-4-1-.9-1.8-2-2.3-3.3-.5-1.4-.6-2.8.8-4.1-2.1 0-3.9.6-5.4 1.8-2.4 2-3 4.9-1.3 7.5.5.8 1.1 1.6 1.8 2.4 1.3 1.4 2.5 2.7 3.5 4.3.8 1.2 1.3 2.5.5 4 1.7 0 3.2-.5 4.6-1.4 2.1-1.5 3.5-4.2 1.4-7.2zm-2.7 7c-.2 0-.4-.1-.4-.3 0-.2.2-.3.4-.3s.3.1.3.3c0 .2-.1.3-.3.3zm1-.6c-.2 0-.3-.2-.3-.4s.1-.3.3-.3c.2 0 .3.1.3.3 0 .2-.1.4-.3.4zm.7-.9c-.2 0-.3-.2-.3-.4s.2-.3.4-.3.3.2.3.3c-.1.3-.2.4-.4.4z\",\n fill: \"#1b214c\"\n});\n\nvar SvgBlockSlider = function SvgBlockSlider(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"block-slider_svg__Layer_1\",\n viewBox: \"0 0 20 20\",\n xmlSpace: \"preserve\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3);\n};\n\nexport default SvgBlockSlider;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.64.986l8.602-.002c1.626 0 2.217.17 2.813.489a3.342 3.342 0 011.387 1.382c.32.596.493 1.187.5 2.818l.042 8.62c.008 1.63-.158 2.222-.474 2.818a3.297 3.297 0 01-1.373 1.383c-.593.319-1.182.489-2.809.489l-8.6.001c-1.627 0-2.218-.169-2.814-.488a3.342 3.342 0 01-1.387-1.382c-.32-.596-.493-1.187-.5-2.818l-.042-8.62c-.008-1.63.158-2.222.474-2.818a3.297 3.297 0 011.373-1.383C3.425 1.156 4.014.986 5.64.986zm-.656 2.998a1 1 0 00-1 1v10a1 1 0 001 1h3a1 1 0 001-1v-10a1 1 0 00-1-1zm7 7a1 1 0 00-1 1v3a1 1 0 001 1h3a1 1 0 001-1v-3a1 1 0 00-1-1zm0-7a1 1 0 00-1 1v3a1 1 0 001 1h3a1 1 0 001-1v-3a1 1 0 00-1-1z\"\n});\n\nvar SvgCoblocks = function SvgCoblocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgCoblocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.264 39.566L38.219 5.16l16.519 53.558-38.079 38.281zM69.376 112.381l35.607-35.607-46.088-13.51-38.006 38.006zM106.68 70.824L61.239 57.415 43.697 2.22 72.022 8.8l4.6 13.991 16.77 3.792 13.288 44.241zM64.633 53.949l35.664 10.522-10.291-34.264-16.699-3.775-4.604-13.999-18.641-4.337 14.571 45.853z\"\n});\n\nvar SvgCreativeBlocks = function SvgCreativeBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgCreativeBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.4 0c1.1.1 1.9.5 2.3 1.5.5 1 .3 2-.5 2.8-1.6 1.7-7.5 7.6-8.9 8.9-.6.6-.7 1.5-1.1 2.2-.4.9-.8 1.9-1.1 2.9-.1.8-1.3.7-1.3.7l-5.4.7c-.4.1-.9.5-1.3.1-.3-.3.1-1.2.1-1.2l1-6.5s.3-.3.5-.4c1.5-.6 2.9-1.1 4.4-1.7.2 0 .4-.2.5-.3L15.4.9c.6-.5 1.2-.9 2-.9zM1.3 19c.5.1.8.1 1.1 0 1.3-.3 2.6-.4 3.9-.6 1 0 1.5-.4 1.8-1.4.7-2.2 1.4-4.4 3.4-5.8.3-.2.3-.5 0-.8-.5-.4-.9-.9-1.3-1.3-1.1-1-1.1-1-2.2.1-.5.5-.9 1.1-1.6 1.4-1.3.5-2.7 1.1-4.1 1.6-.5.2-.6.4-.7.8-.3 1.7-.5 3.3-.8 5 0 .2-.1.4.1.7 1-1 2-2 3-3.1.2-.2.2-.5.2-.7-.1-.7.4-1.3 1.1-1.3.6 0 1.2.6 1.2 1.2s-.6 1.1-1.2 1c-.3 0-.5 0-.8.2-1 .9-2 1.9-3.1 3zM17.4.8c-.6 0-1 .1-1.4.5-2 2-4 4.1-6.1 6.1-.3.2-.2.4 0 .6l2.1 2.1c.3.3.4.2.7 0l1.9-1.9L18.8 4c.5-.5.7-1.6.4-2.2-.4-.7-1-1.1-1.8-1z\"\n});\n\nvar SvgEditorplus = function SvgEditorplus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgEditorplus;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.04 4.76L9.2 7.44v11.68l-8.12-2.76m10.16 2.8l8.2-2.8V4.84L11.28 7.4m-1.04-1.36l7.52-2.44-7.52-2.28L2.52 3.6\"\n});\n\nvar SvgElegantBlocks = function SvgElegantBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgElegantBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 210.86,\n cy: 44.87,\n r: 12.79\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M100.85 0A100.85 100.85 0 000 100.85V256h155.15A100.85 100.85 0 00256 155.15V0zm-59 149.49l-8.29 8.28a4.83 4.83 0 11-6.83-6.83l8.28-8.28a4.83 4.83 0 116.84 6.83zm34.86 53.16a9.31 9.31 0 010-13.13l10.69-10.69A9.28 9.28 0 01100.57 192l-10.69 10.65a9.31 9.31 0 01-13.13 0zm35.92 18.92l-7.41 7.43a5.75 5.75 0 01-8.13-8.13l7.45-7.45a5.75 5.75 0 018.13 8.13zM123.24 211a4.84 4.84 0 01-6.83 0l-1.23-1.24a4.81 4.81 0 010-6.8l31.07-31.48a8.4 8.4 0 000-11.88l-.89-.89a8.4 8.4 0 00-11.88 0l-16.94 16.94a8.41 8.41 0 01-11.89 0l-1.06-1.06a8.41 8.41 0 010-11.89l15.08-15.08a8.4 8.4 0 000-11.88l-.89-.89a8.41 8.41 0 00-11.89 0L90.8 149.93a8.42 8.42 0 01-13-1.35 8.61 8.61 0 011.33-10.76l16.71-16.71a8.41 8.41 0 000-11.89l-.88-.88a8.4 8.4 0 00-11.89 0L51.8 139.56a4.83 4.83 0 01-6.8-6.83l50.13-50.15 78.26 78.27zm52.54-52.54L97.52 80.19l3.28-3.28 78.27 78.26zm48.34-95.19a22.15 22.15 0 01-11.47 6.1 28.49 28.49 0 00-8.17 2.82 65.85 65.85 0 00-10.35 7.18c-10.3 11.06-12.26 20-12.25 26 0 16 14.07 26.16 9.68 37.63-1.91 5-6.41 7.87-9.38 9.38L143 113.18l-39.28-39.24c1.51-3 4.39-7.47 9.38-9.38 11.47-4.39 21.58 9.68 37.63 9.68 6 0 15-1.95 26-12.25a75.27 75.27 0 005.62-7.69 31.65 31.65 0 004.17-11 22.25 22.25 0 1137.58 19.94z\"\n});\n\nvar SvgEnhancedBlocks = function SvgEnhancedBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 256 256\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgEnhancedBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n filterUnits: \"objectBoundingBox\",\n id: \"essential-blocks_svg__a\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 15,\n in: \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 11,\n in: \"shadowOffsetOuter1\",\n result: \"shadowBlurOuter1\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\",\n in: \"shadowBlurOuter1\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.028 96h103.944l.497.216h.373c6.217 0 11.273 2.774 15.169 8.322 1.326 2.305 1.989 4.683 1.989 7.133 0 5.98-3.398 10.59-10.195 13.833-2.321.937-4.642 1.405-6.963 1.405H133.909c-4.973 0-9.366-1.981-13.179-5.944-2.487-2.882-3.73-5.836-3.73-8.862v-1.297c0-4.755 2.735-8.826 8.206-12.212 2.984-1.585 5.927-2.378 8.828-2.378h.497l.497-.216zm1.242 77.273l58.078.21c3.862 0 7.995 1.544 12.397 4.632 3.503 3.158 5.255 6.596 5.255 10.316 0 5.193-3.1 9.438-9.298 12.736-3.054 1.404-6.019 2.106-8.893 2.106h-58.752c-5.75 0-10.735-2.246-14.958-6.737-2.066-2.526-3.099-5.053-3.099-7.58v-1.262c0-4.772 3.19-8.877 9.567-12.316 3.234-1.263 6.289-1.895 9.163-1.895h.27c.18 0 .27-.07.27-.21zM241.632 173h.736c5.685 0 10.14 2.968 13.369 8.905.842 2.12 1.263 4.17 1.263 6.148 0 5.936-2.912 10.495-8.737 13.675-2.105.848-3.965 1.272-5.579 1.272h-1.473c-4.772 0-8.843-2.509-12.211-7.527-1.333-2.544-2-5.052-2-7.526 0-5.795 2.877-10.318 8.632-13.569 2.175-.919 4.175-1.378 6-1.378zm-106.604 75.727h103.944c0 .142 1.284.318 3.854.53 4.31.919 7.584 2.58 9.822 4.983 2.901 2.897 4.352 6.219 4.352 9.964 0 5.725-3.398 10.248-10.195 13.57-2.073.635-3.482.953-4.228.953H131.423c-2.901 0-6.383-1.66-10.444-4.982-2.653-3.039-3.979-6.113-3.979-9.223v-.954c0-5.23 3.108-9.505 9.325-12.827 1.824-.918 4.642-1.554 8.455-1.908 0-.07.083-.106.248-.106z\",\n id: \"essential-blocks_svg__b\"\n}));\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#FFF\",\n cx: 187,\n cy: 187,\n r: 187\n}), /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#000\",\n filter: \"url(#essential-blocks_svg__a)\",\n xlinkHref: \"#essential-blocks_svg__b\"\n}), /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#23282D\",\n xlinkHref: \"#essential-blocks_svg__b\"\n}));\n\nvar SvgEssentialBlocks = function SvgEssentialBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgEssentialBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"style\", null, \".forms-gutenberg_svg__st5{opacity:.1}.forms-gutenberg_svg__st6{opacity:.16}.forms-gutenberg_svg__st7{opacity:.6}.forms-gutenberg_svg__st8{fill:#fff}.forms-gutenberg_svg__st9{opacity:.3}\");\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_1_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 23.101,\n y1: 4.596,\n x2: 17.855,\n y2: 19.01,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#4facfe\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#00f2fe\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29 13.1l-1-2.8-5.2 1.9c0 .1.1.3.1.4.1.2.1.5.1.7 0 .1 0 .3.1.4v.8c0 .5.1 1 0 1.6v1c-.1.5-.1 1-.3 1.6h.1c-.1.5-.2 1-.5 1.4-.1.4-.3.8-.4 1.2-.2.4-.3.7-.5 1.1-.1.2-.2.4-.3.5-.1.2-.2.3-.3.5-.2.4-.5.7-.7 1-.1.2-.3.4-.4.5-.1.1-.2.3-.3.4-.1.1-.2.3-.3.4l-.9.9-.4.4c-.3.2-.6.5-.9.7-.1.1-.2.2-.3.2-.2.2-.4.3-.7.5-.1.1-.2.1-.2.2-.2.1-.3.2-.5.3-.2.1-.3.2-.5.3l-.6.3c-.2.1-.3.2-.5.2-.1 0-.1.1-.2.1 0 0-.1 0-.1.1-.1 0-.2.1-.3.1-.2.1-.5.2-.7.3 1.8.3 3.7.4 5.5 0 1.8-.3 3.6-1 5.2-2 2.2-1.3 3.9-3.2 5.1-5.3 1.2-2.1 1.7-4.5 1.5-6.8-.1-1.2-.3-2.1-.7-3.1z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_1_)\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_2_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 20.054,\n y1: 13.455,\n x2: 18.011,\n y2: 19.068,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#00c6fb\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#005bea\"\n}));\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.8 12.2l-6.4 2.3c-.4.1-.8.4-1.1.6-.3.3-.6.6-.8 1-.2.4-.3.8-.4 1.2 0 .4 0 .8.2 1.2.1.4.4.7.6 1 .3.3.6.5 1 .7.4.2.8.2 1.3.2.4 0 .9-.1 1.3-.2l4.4-1.6c.5-2.2.4-4.4-.1-6.4z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_2_)\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_3_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 15.53,\n y1: 4.084,\n x2: 8.873,\n y2: 22.373,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#89f7fe\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#66a6ff\"\n}));\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.5 19.9c-.4.9-1 1.7-1.7 2.4s-1.6 1.2-2.6 1.6c-.4.2-.9.3-1.4.4-.5.1-.9.1-1.4.1-1.4 0-2.7-.4-3.8-1.1-.2-.1-.4-.2-.7-.3-2-1-3.7-2.5-4.9-4.3-1.2-1.8-1.8-3.9-1.9-6v-.2c-1.8 2.9-2.3 6.2-1.5 9.2s2.9 5.6 5.8 7.2c1.2.6 2.5 1.1 3.8 1.3 3.2-1.2 6-3.2 7.9-5.8 1.1-1.5 1.9-2.9 2.4-4.5z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_3_)\"\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_4_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 19.95,\n y1: 23.365,\n x2: 17.904,\n y2: 28.987,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#4facfe\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#00f2fe\"\n}));\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5 1.6l-5.9 2.1c0 .1-.1.2-.1.3-.1.3-.2.5-.2.8-.2.6-.5 1.3-.8 1.9-.1.1-.1.2-.2.4v.1c-.1.2-.2.3-.3.5-.1.2-.2.3-.3.5-.1.1-.2.3-.3.4-.1.1-.1.2-.2.3l-.2.2c-.1.1-.2.2-.2.3l-.1.1c-.1.1-.2.3-.3.4v.1c-.1.1-.2.3-.4.4-.1.1-.2.3-.3.4 0 .1-.1.1-.1.1l-.3.3-.4.4-.3.3c.1-.1.3-.1.4-.2l6.4-2.3 1.2-.6c1.3-.8 2.3-1.9 2.9-3.3.4-1.2.4-2.6 0-3.9z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_4_)\"\n});\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_5_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 15.998,\n y1: 11.362,\n x2: 10.556,\n y2: 26.312,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#00c6fb\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#005bea\"\n}));\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.6 3.8l-6.8 2.5c-3 1.1-5.6 3.1-7.3 5.7-.1.1-.2.3-.3.4v1.1c0 .2 0 .4.1.6 0 .1 0 .2.1.3 0 .1.1.3.1.4 0 .1.1.2.1.3v.2l.3.9c0 .1.1.1.1.2s0 .1.1.2v.1s0 .1.1.1c0 .1.1.2.2.4 0 0 0 .1.1.1.1.2.1.3.2.5.1.1.1.2.2.3 0 .1.1.1.1.2.2.3.3.5.5.8.1.1.1.2.2.2.3.4.6.8 1 1.2l.3.3c.2.2.5.4.7.6.1.1.2.2.3.2.3.2.6.5.9.7.2.1.3.2.5.3.2.1.3.2.5.3 0 0 .1 0 .1.1.2.1.3.2.5.2-1.1-.7-1.9-1.7-2.4-2.9-.1-.8-.2-1.6-.1-2.5 0-.8.3-1.7.7-2.5.8-1.4 2.1-2.6 3.7-3.3l.3-.3.4-.4.3-.3.1-.1c.1-.1.2-.2.3-.4l.4-.4V10c.1-.1.2-.3.3-.4l.1-.1c.1-.1.2-.2.2-.3L16 9c.1-.1.1-.2.2-.3.1-.1.2-.3.3-.4.1-.2.2-.3.3-.5.1-.2.2-.3.3-.5v-.1c.1-.1.1-.2.2-.4.3-.6.6-1.2.8-1.9.1-.3.2-.5.2-.8.2-.1.3-.2.3-.3z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_5_)\"\n});\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st5\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.2 23.8c-.4.2-.9.3-1.4.4-2 1.7-4.7 3.2-8.4 4.6 1.2.6 2.5 1.1 3.8 1.3 3.2-1.2 6-3.2 7.9-5.8 1-1.4 1.8-2.8 2.3-4.4-.4.9-1 1.7-1.7 2.4s-1.6 1.2-2.5 1.5z\"\n}));\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st6\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.8 12.2l-.6.2c.2 2.3-.3 4.7-1.4 6.9l2-.7c.6-2.2.5-4.4 0-6.4z\"\n}));\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st5\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.2 8.9c-1.1.9-2 1.9-2.8 3.1-.1.1-.2.3-.3.4v1.1c0 .2 0 .4.1.6 0 .1 0 .2.1.3 0 .1.1.3.1.4 0 .1.1.2.1.3v.2l.3.9c0 .1.1.1.1.2s0 .1.1.2v.1s0 .1.1.1c0 .1.1.2.2.4 0 0 0 .1.1.1.1.2.1.3.2.5.1.1.1.2.2.3 0 .1.1.1.1.2.2.3.3.5.5.8.1.1.1.2.2.2.3.4.6.8 1 1.2l.3.3c.2.2.5.4.7.6.1.1.2.2.3.2.3.2.6.5.9.7.2.1.3.2.5.3.2.1.3.2.5.3 0 0 .1 0 .1.1.2.1.3.2.5.2-1.1-.7-1.9-1.7-2.4-2.9C7.4 18 6 14.4 6.9 9.1c.3-.1.3-.2.3-.2z\"\n}));\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st5\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.5 2.4l-3.9 1.4c0 .1-.1.2-.1.3-.1.3-.2.5-.2.8-.2.6-.5 1.3-.8 1.9-.1.1-.1.2-.2.4v.1c-.1.2-.2.3-.3.5-.1.2-.2.3-.3.5-.1.1-.2.3-.3.4-.1.1-.1.2-.2.3-.1 0-.1 0-.2.1s-.2.2-.2.3l-.1.1c-.1.1-.2.3-.3.4v.1c-.1.1-.2.3-.4.4-.1.1-.2.3-.3.4 0 .1-.1.1-.1.1l-.3.3-.4.4-.3.3c.1-.1.3-.1.4-.2l1.7-.6c2.9-2.4 5.2-5.3 6.8-8.5-.1 0-.1-.1 0-.2z\"\n}));\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"forms-gutenberg_svg__st8\",\n d: \"M22.1 21.1c-.8 1.9-2 3.6-3.5 5.1-1.5 1.5-3.3 2.7-5.3 3.6.1 0 .2-.1.5-.2.2-.1.4-.1.6-.2.3-.1.5-.2.8-.3.1-.1.3-.1.4-.2.1-.1.3-.2.4-.3l.9-.6c.3-.2.6-.4.9-.7.3-.3.6-.5.9-.8.3-.3.6-.6.8-.9.3-.3.5-.6.7-.9l.6-.9c.2-.3.3-.5.5-.8.1-.3.2-.5.3-.7.1-.2.1-.4.2-.6.2-.4.2-.6.3-.6z\"\n})));\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"forms-gutenberg_svg__st8\",\n d: \"M18.6 3.8l-.2.4-.5 1-.3.6c-.1.2-.2.5-.4.7L16.3 8c-.3.5-.6 1-.9 1.4-.1.2-.2.4-.4.6-.2.2-.3.4-.4.6-.3.4-.5.7-.7.9-.1.2-.2.3-.2.3 2.4-2.3 4.1-5 4.9-8z\"\n})));\n\nvar _ref18 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"forms-gutenberg_svg__st8\",\n d: \"M4.9 16.2c-.4-1.2-.7-2.4-.7-3.6v.6c0 .5 0 1 .1 1.5.1.7.3 1.4.5 2 .1.3.2.7.4 1 .2.4.4.7.6 1.1.2.3.5.7.7 1 .1.2.3.3.4.5l.4.4c.3.3.6.5.9.7.3.2.5.4.8.6.2.2.5.3.8.4l.6.3c.3.1.5.2.5.2-2.8-1.5-4.9-3.8-6-6.7z\"\n})));\n\nvar _ref19 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st9\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5 1.6L11.8 6.2c-3 1.1-5.6 3.1-7.3 5.7.3-.4.6-.7.9-1.1.3-.4.6-.7 1-1 .3-.3.6-.5.9-.8-.1 0 0 0 0 0 .4-.3.8-.6 1.1-.8.4-.3.8-.5 1.2-.7.5-.3 1-.5 1.4-.7.4-.2.9-.3 1.3-.5l1.4-.5 2.7-1 2.7-1c1.1-.4 2.1-.8 3.2-1.2.7-.2 1.3-.5 2-.8l.1.2.1.5.1.5v1l-.1.5-.1.5-.2.5-.2.6-.2.5-.4.4-.3.4-.4.4-.4.4-.4.4-.5.3c1.3-.8 2.3-1.9 2.9-3.3.6-1.3.6-2.7.2-4z\"\n}));\n\nvar _ref20 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st9\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29 13.1l-1-2.8-4.5 1.6c.8-.2 1.5-.5 2.3-.7.7-.2 1.4-.4 2.1-.7l.7 2.2c.1.4.3.8.4 1.2l.3 1.2c.1.4.1.8.1 1.2v1.2c0 .4-.1.8-.1 1.2-.1.4-.1.8-.3 1.2-.1.4-.2.8-.4 1.2-.1.2-.2.4-.2.6l-.3.6-.3.6-.3.6c-.1.2-.2.4-.3.5-.1.2-.2.4-.4.5l-.4.5-.4.4c-.1.2-.3.3-.4.5l-.5.5c-.3.3-.7.6-1 .9-.3.3-.7.5-1.1.8 2.2-1.3 3.9-3.2 5.1-5.3 1.2-2.1 1.7-4.5 1.5-6.8 0-1-.2-1.9-.6-2.9z\"\n}));\n\nvar _ref21 = /*#__PURE__*/React.createElement(\"text\", {\n transform: \"translate(300 167.5)\",\n fontFamily: \"MyriadPro-Regular\",\n fontSize: 12\n}, \"32\");\n\nvar SvgFormsGutenberg = function SvgFormsGutenberg(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"forms-gutenberg_svg__Layer_1\",\n viewBox: \"0 0 32 32\",\n xmlSpace: \"preserve\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21);\n};\n\nexport default SvgFormsGutenberg;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b3c315\",\n d: \"M70 54h41v18H70z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#96a40a\",\n d: \"M65 54h5v18h-5z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b3c315\",\n d: \"M94 50h13v3H94z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#96a40a\",\n d: \"M89 50h5v3h-5z\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b3c315\",\n d: \"M74 50h13v3H74z\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#96a40a\",\n d: \"M69 50h5v3h-5z\"\n});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b977c7\",\n d: \"M72 92h13v3H72z\"\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9e5cac\",\n d: \"M67 92h5v3h-5z\"\n});\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b977c7\",\n d: \"M51 92h13v3H51z\"\n});\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9e5cac\",\n d: \"M46 92h5v3h-5z\"\n});\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49c3f5\",\n d: \"M92 75h19v19H92z\"\n});\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#109ad4\",\n d: \"M87 75h5v19h-5z\"\n});\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25 97h86l-18 19H43L25 97z\",\n fill: \"#b977c7\"\n});\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9e5cac\",\n d: \"M20 97l18 19h5L25 97z\"\n});\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111 36H25l18-19h50l18 19z\",\n fill: \"#f1b014\"\n});\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f09108\",\n d: \"M43 17h-5L20 36h5z\"\n});\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f1b014\",\n d: \"M51 12h14v3H51z\"\n});\n\nvar _ref18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f09108\",\n d: \"M46 12h5v3h-5z\"\n});\n\nvar _ref19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f1b014\",\n d: \"M73 12h14v3H73z\"\n});\n\nvar _ref20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f09108\",\n d: \"M68 12h5v3h-5z\"\n});\n\nvar _ref21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49c3f5\",\n d: \"M25 39h18v26H25z\"\n});\n\nvar _ref22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#109ad4\",\n d: \"M20 39h5v26h-5z\"\n});\n\nvar _ref23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#d25e4d\",\n d: \"M20 68h5v26h-5z\"\n});\n\nvar _ref24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#e67666\",\n d: \"M25 68h18v26H25z\"\n});\n\nvar SvgGetwid = function SvgGetwid(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 128 128\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21, _ref22, _ref23, _ref24);\n};\n\nexport default SvgGetwid;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M201 94.59h12.5H201zm-146 0h12.5H55zm20.038 115.868c-6.137-3.161-13.675-.749-16.836 5.388-3.162 6.137-.75 13.675 5.387 16.837l11.45-22.225zm117.373 22.225c6.137-3.162 8.549-10.7 5.387-16.837-3.161-6.137-10.699-8.549-16.836-5.388l11.449 22.225zM128 33.5c33.318 0 60.5 27.256 60.5 61.09h25c0-47.45-38.185-86.09-85.5-86.09v25zm60.5 61.09c0 33.835-27.182 61.091-60.5 61.091v25c47.315 0 85.5-38.639 85.5-86.09h-25zM128 155.682c-33.319 0-60.5-27.256-60.5-61.09h-25c0 47.451 38.185 86.09 85.5 86.09v-25zm-60.5-61.09C67.5 60.756 94.681 33.5 128 33.5v-25c-47.315 0-85.5 38.64-85.5 86.09h25zm-3.91 138.092c40.937 21.089 87.883 21.089 128.821 0l-11.449-22.225c-33.754 17.389-72.17 17.389-105.924 0L63.59 232.683z\"\n});\n\nvar SvgGhostkit = function SvgGhostkit(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgGhostkit;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"style\", null);\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"guteblock_svg__prefix__Layer_1\"\n}, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"guteblock_svg__prefix__SVGID_1_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 68.035,\n y1: 10.602,\n x2: 33.222,\n y2: 86.651\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#ffd500\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.258,\n stopColor: \"#ff683e\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.498,\n stopColor: \"#ff1d6b\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.781,\n stopColor: \"#5d25cd\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#3eb9fa\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.95 17.49L17.49 31.95c-9.14 9.14-9.14 23.96 0 33.1L34.94 82.5c9.14 9.14 23.96 9.14 33.1 0L82.5 68.04c9.14-9.14 9.14-23.96 0-33.1L65.06 17.49c-9.15-9.14-23.96-9.14-33.11 0z\",\n fill: \"url(#guteblock_svg__prefix__SVGID_1_)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.81 36.74c-3.94 0-7.64 1.53-10.43 4.32l-5.85 5.85a6.488 6.488 0 000 9.17 6.488 6.488 0 009.17 0l5.85-5.85c.43-.43.92-.52 1.26-.52.34 0 .83.09 1.26.52.43.43.52.92.52 1.26 0 .34-.09.83-.52 1.26L52.98 66.83c-.05.05-.1.1-.14.15-.44.47-.96.58-1.32.58-.36.01-.88-.08-1.33-.54L32.98 49.81c-.69-.69-.72-1.79-.09-2.52l14.17-14.17c.05-.05.1-.1.14-.15.67-.71 1.78-.73 2.54-.04l.98.95c2.57 2.49 6.68 2.43 9.17-.14 2.49-2.57 2.43-6.68-.14-9.17l-1.03-1c-.03-.03-.05-.05-.08-.07-5.94-5.57-15.25-5.33-20.82.51l-14.2 14.2c-.05.05-.1.1-.14.15a14.744 14.744 0 00.33 20.61l17.21 17.22c2.8 2.81 6.51 4.34 10.47 4.34h.24c4.01-.06 7.73-1.69 10.49-4.59l14.02-14.02c2.79-2.79 4.32-6.49 4.32-10.43 0-3.94-1.53-7.64-4.32-10.43a14.668 14.668 0 00-10.43-4.32z\",\n fill: \"#fff\"\n}));\n\nvar SvgGuteblock = function SvgGuteblock(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 100 100\",\n \"aria-hidden\": \"true\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgGuteblock;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.388 5.75l-6.716-3.91a1.173 1.173 0 00-1.104 0l-.184.092c0 .046.046.092.046.138v2.3c0 .138-.092.276-.276.276h-2.3c-.138 0-.276-.092-.276-.276v-.828l-.506.276v2.53a.297.297 0 01-.276.276H3.22a.297.297 0 01-.276-.276v-.736l-.138.092c-.322.184-.552.598-.552.966v1.15H3.68c.138 0 .23.092.23.23v2.208c0 .138-.092.23-.23.23H2.254v3.956c0 .368.23.782.552.966l6.716 3.91c.322.184.782.184 1.104 0l6.762-3.864c.322-.184.552-.598.552-.966V6.67c0-.322-.23-.736-.552-.92zm-3.358 7.038l-3.864 2.3L6.21 12.88l-.092-4.508 3.864-2.3 3.68 2.07-.46.782-3.22-1.794-2.944 1.748.046 3.45 2.99 1.656 2.944-1.748v-.644l-2.668-.046v-.92l3.542.092v2.07zM2.3 5.014a.099.099 0 01-.092.092h-.782c-.046 0-.046-.046-.046-.092v-.736c0-.046 0-.092.046-.092h.736c.092 0 .138.046.138.092v.736zM1.518 7.222c0 .092-.046.138-.138.138H.138C.046 7.36 0 7.314 0 7.222V5.98c0-.092.046-.138.138-.138H1.38c.092 0 .138.046.138.138v1.242z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.496 4.048h2.162V6.21H3.496zM7.038 2.254h1.978v1.978H7.038zM3.68 3.174c0 .046-.046.138-.138.138H2.346c-.092 0-.138-.092-.138-.138V1.932c0-.092.046-.138.138-.138h1.196c.092 0 .138.092.138.138v1.242zM6.164 2.622c0 .092-.046.138-.138.138H4.83c-.092 0-.138-.046-.138-.138V1.426c0-.092.046-.138.138-.138h1.196c.092 0 .138.046.138.138v1.196zM8.05 1.38a.099.099 0 01-.092.092H6.9a.099.099 0 01-.092-.092V.322c0-.046.046-.092.092-.092h1.012c.046 0 .092.046.092.092V1.38zM1.564 8.28H3.45v1.886H1.564z\"\n});\n\nvar SvgGutentor = function SvgGutentor(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-1.1 -0.2 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgGutentor;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.145 6.164L7.855 41.837V6.164h32.29z\",\n fillOpacity: 0.502,\n fillRule: \"nonzero\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.145 41.836L7.855 6.163v35.673h32.29z\",\n fillRule: \"nonzero\"\n});\n\nvar SvgKadenceBlocks = function SvgKadenceBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 1.414,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgKadenceBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.706 7.854l.004.01c.734 2.723.003 5.708-1.395 8.169-1.669 2.927-4.184 5.357-7.464 6.256-4.204 1.164-7.863-.293-10.944-3.149C-.097 15.427-1.665 9.8 2.303 5.352a17.352 17.352 0 015.683-4.009A14.566 14.566 0 0112.498.077c1.734-.184 3.298-.075 4.885.732a14.601 14.601 0 013.615 2.583 9.982 9.982 0 012.708 4.462zm-12.659 4.272a.03.03 0 01.025.012l2.536 3.432c.25.338.66.54 1.1.54h1.573c.246 0 .485-.075.682-.213.502-.353.605-1.02.228-1.49l-2.343-2.924a1.188 1.188 0 01.05-1.558l2.045-2.26a.91.91 0 00.24-.61c0-.523-.453-.946-1.011-.946H14.66a1.37 1.37 0 00-1.07.502l-2.534 3.173a.032.032 0 01-.025.012c-.009 0-.016-.007-.016-.015V7.359c0-.69-.598-1.25-1.336-1.25h-.925c-.739 0-.81.56-.81 1.25v7.5c0 .69.071 1.25.81 1.25h.94c.738 0 1.337-.56 1.337-1.25v-2.718c0-.008.007-.015.015-.015z\"\n});\n\nvar SvgKiokenBlocks = function SvgKiokenBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 -0.5 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgKiokenBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.831 7.877l.001-.009-.001-.009a3.675 3.675 0 01-.132-.247l-.057-.115c-.277-.498-.381-.99-1.033-1.064h-.048a.91.91 0 00-.908.862v.002c.674.126 1.252.278 1.813.468l-.092-.027.283.096.147.053s.028 0 .028-.011z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.982 13.574a68.843 68.843 0 00-.39-7.112l.026.299.07-.019a1.1 1.1 0 00.052-2.09l-.008-.002h-.026a2.306 2.306 0 01-1.149-.861l-.005-.007C19.852-.178 14.3.001 14.3.001S8.75-.178 6.05 3.782c-.28.401-.676.704-1.14.862l-.016.005a1.097 1.097 0 00-.754 1.04v.026-.001l-.001.034c0 .493.335.907.789 1.029l.007.002.045.011a65.7 65.7 0 00-.364 6.801v.012s-9.493 13.012-1.277 17.515c4.733 2.431 6.881-.769 6.881-.769s1.397-1.661-1.784-3.355v-4.609a.638.638 0 01.625-.628h1.212v-.59c0-.275.223-.498.498-.498h1.665a.498.498 0 01.496.498v.59h2.721v-.59c0-.275.223-.498.498-.498h1.665c.271.005.49.226.49.498v.59h1.209c.349 0 .633.28.639.627v4.584c-3.193 1.703-1.784 3.355-1.784 3.355s2.148 3.193 6.879.769c8.222-4.503-1.269-17.515-1.269-17.515zm-1.396-3.313a6.398 6.398 0 01-1.563 3.797l.007-.008c-1.703 2.01-4.407 3.249-6.721 4.432-2.325-1.177-5.026-2.416-6.736-4.432a6.43 6.43 0 01-1.555-3.769l-.001-.02c-.126-2.22.583-5.929 3.044-6.74 2.416-.788 3.947 1.288 4.494 2.227a.863.863 0 001.488.004l.002-.004c.551-.932 2.08-3.008 4.494-2.22 2.474.805 3.174 4.513 3.046 6.734z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.463 10.087h-.028c-.192.026-.121.251-.047.356.254.349.407.787.407 1.26v.018-.001a1.277 1.277 0 01-.633 1.1l-.006.003c-.739.426-1.377-.145-2.054-.398a7.5 7.5 0 00-2.42-.455h-.009v-1.033a4.886 4.886 0 002.551-1.486l.004-.004a.916.916 0 00-.158-1.383l-.003-.002a4.738 4.738 0 00-2.764-.881 4.752 4.752 0 00-2.819.92l.013-.009a.9.9 0 00-.146 1.317l-.001-.001a4.906 4.906 0 002.553 1.53l.033.007v1.05a8.061 8.061 0 00-2.118.343l.057-.015a5.578 5.578 0 00-.908.358l.033-.015c-.519.26-1.037.436-1.58.121a1.218 1.218 0 01-.617-1.058v-.007-.007c0-.47.153-.905.411-1.257l-.004.006c.047-.068.089-.17.026-.241s-.189 0-.27.03a1.592 1.592 0 00-.479.381l-.002.002a1.716 1.716 0 00-.394 1.097v.011-.001a1.93 1.93 0 00.964 1.651l.009.005c.296.178.654.283 1.036.283.364 0 .706-.095 1.001-.263l-.01.005a6.51 6.51 0 013.225-.728h-.01.03c1.277 0 2.382.266 3.266.775.27.159.594.253.94.253h.003c.355-.002.688-.098.974-.265l-.009.005a2.028 2.028 0 001.007-1.75v-.004l.002-.086c0-.625-.34-1.171-.846-1.462l-.008-.004a.388.388 0 00-.199-.07h-.001zm-6.362-1.256c-.238.213-.468.581-.832.345a.933.933 0 01-.161-.136.352.352 0 01.081-.555l.002-.001c.594-.309 1.203-.543 1.884-.49-.324.281-.649.56-.973.837z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.89 13.578a1.988 1.988 0 01-3.173.005l-.004-.005a.36.36 0 10-.576.427 2.707 2.707 0 004.323.007l.005-.007a.362.362 0 00-.072-.498l-.001-.001a.356.356 0 00-.501.071l-.001.001zM18.507 11.707a.35.35 0 11-.702 0 .35.35 0 01.702 0zM17.389 11.049a.35.35 0 11-.702 0 .35.35 0 01.702 0zM10.798 11.707a.35.35 0 11-.702 0 .35.35 0 01.702 0zM11.918 11.049a.35.35 0 11-.702 0 .35.35 0 01.702 0zM8.773 7.877l-.002-.009.002-.009c.047-.081.089-.164.132-.247.019-.038.036-.079.057-.115.275-.498.379-.99 1.033-1.064h.046c.487 0 .884.382.91.862v.002c-.678.124-1.261.277-1.827.468l.092-.027-.275.096-.1.036-.045.017s-.023 0-.023-.011z\"\n});\n\nvar SvgOtterBlocks = function SvgOtterBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 29 32\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4);\n};\n\nexport default SvgOtterBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h21v21H0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.296 9.925c.014.013.029.022.042.034l-2.456 2.455A5.376 5.376 0 014.697 10.9C4.232 10.024 4 9.02 4 7.884c0-1.134.232-2.15.697-3.045.21-.402.456-.76.732-1.081l2.514 2.514c-.245.432-.375.966-.375 1.612 0 .902.243 1.582.728 2.04zm7.782-7.707v12.19l-4.393-4.394c.053-.044.108-.08.159-.13.499-.485.749-1.172.749-2.06 0-.68-.15-1.24-.441-1.679l3.926-3.927z\",\n fill: \"#444\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.593 11.7c-.793 1.312-1.928 1.968-3.405 1.968a4.878 4.878 0 01-2.614-.728 4.966 4.966 0 01-.691-.525L8.338 9.96c.478.433 1.054.654 1.732.654.614 0 1.15-.207 1.615-.598l4.393 4.393V19h-3.485v-7.3zm3.485-9.597v.116l-3.926 3.927a2.476 2.476 0 00-2.082-1.09c-.684 0-1.272.242-1.764.727-.144.143-.26.31-.363.49L5.43 3.759a5.031 5.031 0 011.155-1.01A4.795 4.795 0 019.188 2c1.531 0 2.666.588 3.405 1.764V2.103h3.485z\",\n fill: \"#000\"\n}));\n\nvar SvgQodeblock = function SvgQodeblock(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgQodeblock;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.38 8.8c0-2.42-.88-4.4-2.53-6.05C13.2 1.1 11.11.22 8.8.22s-4.4.88-6.05 2.53C1.1 4.4.22 6.38.22 8.8s.88 4.4 2.53 6.05c1.65 1.65 3.63 2.53 6.05 2.53.99 0 1.98-.11 2.86-.44l-2.42-2.53c-.11-.11-.33-.22-.44-.22-1.54 0-2.75-.55-3.74-1.54-1.1-.99-1.54-2.31-1.54-3.85s.55-2.86 1.54-3.85c.99-.99 2.2-1.54 3.74-1.54s2.75.55 3.74 1.54c.99.99 1.54 2.31 1.54 3.85 0 .77-.11 1.54-.44 2.2-.22.55-.88.66-1.32.22-1.21-1.21-3.08-1.32-4.4-.22l2.75 2.86 2.31 2.42c.99.99 2.64 1.1 3.74.11l.33-.33-1.43-1.43c-.22-.22-.22-.44 0-.66a8.383 8.383 0 001.76-5.17z\"\n});\n\nvar SvgQubely = function SvgQubely(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-1 -1 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgQubely;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.982 16.711a4.48 4.48 0 01-7.965 0A4.972 4.972 0 0110 14.709c1.629 0 3.074.789 3.982 2.002zm-.748-7.657c-.314 2.56 1.248 2.919 1.248 5.603a4.5 4.5 0 01-.205 1.344 5.635 5.635 0 00-8.554 0 4.5 4.5 0 01-.205-1.344c0-2.684 1.563-3.043 1.247-5.603C6.403 6.126 2.45 6.589 2.45 3.72A2.857 2.857 0 015.308.862C7.017.862 8.073 2.42 10 2.42c1.926 0 2.982-1.558 4.691-1.558a2.857 2.857 0 012.857 2.858c.001 2.869-3.952 2.406-4.314 5.334zM8.557 4.107h-.708a.9.9 0 01-.901.9.9.9 0 01-.901-.9h-.708a1.609 1.609 0 103.218 0zm.979 7.141a.568.568 0 00-.566-.568.567.567 0 10.566.568zm2.062 0a.569.569 0 00-.568-.568.567.567 0 10.568.568zm3.062-7.141h-.707a.9.9 0 01-1.802 0h-.707a1.61 1.61 0 003.216 0z\"\n});\n\nvar SvgSnowMonkeyBlocks = function SvgSnowMonkeyBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgSnowMonkeyBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.08 136L23 176.66a4.75 4.75 0 003.53 8.15l86.91.14zM177.91 128.39a17 17 0 00-5-12.07L71.39 14.72 26.61 59.5a17 17 0 00-5 12.05 17 17 0 005 12.05l101.55 101.6v-.07l44.76-44.76a17 17 0 005-12zM172.95 14.69H86.12l49.42 49.62 40.92-41.16a5 5 0 00-3.51-8.46z\"\n});\n\nvar SvgStackableUltimateGutenbergBlocks = function SvgStackableUltimateGutenbergBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 200 200\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgStackableUltimateGutenbergBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.9.3C12.2.3.3 12.2.3 26.8s11.9 26.5 26.5 26.5c14.7 0 26.5-11.9 26.5-26.5S41.5.3 26.9.3zm-2 27.7c0 1.1-.1 2.2-.4 3.2-.3 1-.7 1.8-1.3 2.6-.6.7-1.3 1.3-2.2 1.7-.9.4-2 .6-3.2.6-1.3 0-2.4-.2-3.3-.7-.9-.4-1.7-1-2.2-1.8-.6-.7-1-1.6-1.3-2.6-.3-1-.4-2-.4-3.1v-8.3h3.8V28c0 .6.1 1.2.2 1.8s.3 1.1.6 1.5c.3.4.6.8 1.1 1.1s1 .4 1.6.4 1.2-.1 1.6-.4.8-.6 1.1-1.1c.3-.4.5-1 .6-1.5.1-.6.2-1.2.2-1.8v-8.3h3.8c-.3 0-.3 8.3-.3 8.3zm17.2 8H39v-1.6c-1.2 1.1-2.7 1.7-4.3 1.7-1.1 0-2.1-.2-3-.6-.9-.4-1.8-1-2.5-1.7s-1.3-1.6-1.7-2.6c-.4-1-.6-2.2-.6-3.4 0-1.1.2-2.2.6-3.2.4-1 1-1.9 1.7-2.6.7-.7 1.6-1.3 2.6-1.7 1-.4 2.1-.6 3.2-.6 1.5 0 2.8.3 4 1 1.1.6 2 1.5 2.5 2.6l-2.8 2.1c-.4-.7-.9-1.3-1.6-1.7-.7-.4-1.4-.6-2.3-.6-.6 0-1.2.1-1.7.4s-1 .6-1.3 1.1-.7 1-.8 1.6c-.2.6-.3 1.2-.3 1.9s.1 1.4.3 1.9c.2.6.5 1.1.9 1.5.4.4.8.8 1.4 1 .5.2 1.1.4 1.8.4 1.5 0 2.8-.7 4-2v-.5h-3.2v-2.7h6.3c-.1-.2-.1 8.3-.1 8.3z\"\n});\n\nvar SvgUltimateAddonsForGutenberg = function SvgUltimateAddonsForGutenberg(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 54 54\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgUltimateAddonsForGutenberg;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.9 10v4.1c0 .7-.3 1.2-.9 1.6-2.4 1.4-4.7 2.7-7.1 4.1-.6.4-1.3.4-1.9 0-2.3-1.4-4.6-2.8-7-4.1-.6-.4-.9-.9-.9-1.6V6c0-.7.3-1.2.9-1.6C4.4 3 6.7 1.6 9.1.3c.6-.4 1.3-.4 1.9 0 2.3 1.3 4.6 2.7 7 4 .6.4.9.9.9 1.6V10zm-8.7-6c-.5 0-1 .2-1.5.4-.3.2-.7.4-1.1.6-.9.6-1.8 1.1-2.8 1.7-.2.1-.4.4-.4.7 0 .3.2.5.4.6.3.2.6.1.9 0C7 7.3 8.2 6.5 9.5 5.8c.8-.4 1.7-.2 2.1.5.4.7.1 1.6-.6 2.1-.5.3-1 .6-1.4.8-.8.5-1.6.9-2.5 1.4-.3.2-.4.5-.4.8.1.3.3.6.6.6.2 0 .4 0 .6-.1 1.3-.7 2.5-1.5 3.8-2.2.7-.4 1.6-.2 2 .4.5.7.3 1.7-.5 2.2-1.3.7-2.6 1.5-3.8 2.2-.4.2-.5.7-.3 1.1.2.4.7.5 1.1.3 1.3-.8 2.6-1.5 4-2.3 1.2-.7 1.7-2.1 1.3-3.4-.3-1.1-1-1.8-2.1-2.1-.1 0-.2-.1-.1-.2.1-.2.1-.4.1-.6C13.4 5.5 12 4 10.2 4zm-5.8 7.3c0 .2 0 .4.1.7.5 2 2.7 3 4.5 1.9 1.3-.7 2.6-1.5 3.8-2.2.4-.2.5-.7.3-1.1-.2-.4-.7-.5-1.1-.3-.4.2-.7.4-1.1.6-.9.5-1.8 1-2.7 1.6-.6.3-1.1.3-1.7-.1-.9-.6-.8-1.9.2-2.5 1.3-.7 2.6-1.5 3.8-2.2.5-.2.7-.7.4-1-.2-.4-.7-.5-1.1-.3-1.3.7-2.6 1.5-3.9 2.2-1 .6-1.4 1.5-1.5 2.7z\"\n});\n\nvar SvgUltimateBlocks = function SvgUltimateBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgUltimateBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 0C4 0 0 4 0 9s4 9 9 9 9-4 9-9-4-9-9-9zM6.5 12.6c-.1.1-.1.1-.2.1l-2 .1c-.2 0-.3-.1-.4-.3l-.1-2c0-.1 0-.2.1-.2l5.5-6.4c.1-.1.3-.2.5 0L12 5.7c.1.1.2.3 0 .5l-5.5 6.4zm7.5.2H9.5c-.2 0-.4-.2-.4-.5 0-.2.2-.5.4-.5H14c.2 0 .4.2.4.5s-.2.5-.4.5zm0-1.8h-2.8c-.2 0-.4-.2-.4-.5 0-.2.2-.5.4-.5H14c.2 0 .4.2.4.5s-.2.5-.4.5zm.1-1.8h-1.2c-.2 0-.3-.2-.3-.5s.1-.5.3-.5h1.2c.2 0 .3.2.3.5s-.1.5-.3.5z\"\n});\n\nvar SvgUltimatePost = function SvgUltimatePost(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 18 18\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgUltimatePost;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01A8.87 8.87 0 0110 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z\"\n});\n\nvar SvgWordpress = function SvgWordpress(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-2 -2 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgWordpress;","/**\n * External dependencies\n */\nimport React, {Component} from 'react';\n\nimport SVGRedux from '../../assets/img/icon.svg'\nimport SVGAcfBlocks from './images/acf-blocks.svg'\nimport SVGAtomicBlocks from './images/atomic-blocks.svg'\nimport SVGAdvancedCustomFields from './images/advanced-custom-fields.svg'\nimport SVGAdvancedGutenbergBlocks from './images/advanced-gutenberg-blocks.svg'\nimport SVGBlockOptions from './images/block-options.svg'\nimport SVGBlockSlider from './images/block-slider.svg'\nimport SVGCoblocks from './images/coblocks.svg'\nimport SVGCreativeBlocks from './images/creative-blocks.svg'\nimport SVGEditorPlus from './images/editorplus.svg'\nimport SVGElegantBlocks from './images/elegant-blocks.svg'\nimport SVGEnhancedBlocks from './images/enhanced-blocks.svg'\nimport SVGEssentialBlocks from './images/essential-blocks.svg'\nimport SVGFormsGutenberg from './images/forms-gutenberg.svg'\nimport SVGGetwid from './images/getwid.svg'\nimport SVGGhostkit from './images/ghostkit.svg'\nimport SVGGuteblock from './images/guteblock.svg'\n// import SVGGutenbergBlock from './images/gutenberg-blocks.png'\nimport SVGGutentor from './images/gutentor.svg'\nimport SVGKadenceBlocks from './images/kadence-blocks.svg'\nimport SVGKiokenBlocks from './images/kioken-blocks.svg'\nimport SVGOtterBlocks from './images/otter-blocks.svg'\nimport SVGQodeblock from './images/qodeblock.svg'\nimport SVGQubely from './images/qubely.svg'\nimport SVGSnowMonkeyBlocks from './images/snow-monkey-blocks.svg'\nimport SVGStackableUltimateGutenbergBlocks from './images/stackable-ultimate-gutenberg-blocks.svg'\nimport SVGUltimateAddonsForGutenberg from './images/ultimate-addons-for-gutenberg.svg'\nimport SVGUltimateBlocks from './images/ultimate-blocks.svg'\nimport SVGUltimatePost from './images/ultimate-post.svg'\nimport SVGWordPress from './images/wordpress.svg'\n\n// export const gutentor = () => {\n// \treturn <SVGGutentorIcon width=\"20\" height=\"20\"/>\n// }\n\n\nexport const redux = () => { return <SVGRedux width=\"20\" height=\"20\"/> }\nexport const acfblocks = () => { return <SVGAcfBlocks width=\"20\" height=\"20\"/> }\nexport const atomicblocks = () => { return <SVGAtomicBlocks width=\"20\" height=\"20\"/> }\nexport const advancedcustomfields = () => { return <SVGAdvancedCustomFields width=\"20\" height=\"20\"/> }\nexport const advancedgutenbergblocks = () => { return <SVGAdvancedGutenbergBlocks width=\"20\" height=\"20\"/> }\nexport const blockoptions = () => { return <SVGBlockOptions width=\"20\" height=\"20\"/> }\nexport const blockslider = () => { return <SVGBlockSlider width=\"20\" height=\"20\"/> }\nexport const coblocks = () => { return <SVGCoblocks width=\"20\" height=\"20\"/> }\nexport const creativeblocks = () => { return <SVGCreativeBlocks width=\"20\" height=\"20\"/> }\nexport const editorplus = () => { return <SVGEditorPlus width=\"20\" height=\"20\"/> }\nexport const elegantblocks = () => { return <SVGElegantBlocks width=\"20\" height=\"20\"/> }\nexport const enhancedblocks = () => { return <SVGEnhancedBlocks width=\"20\" height=\"20\"/> }\nexport const essentialblocks = () => { return <SVGEssentialBlocks width=\"20\" height=\"20\"/> }\nexport const formsgutenberg = () => { return <SVGFormsGutenberg width=\"20\" height=\"20\"/> }\nexport const getwid = () => { return <SVGGetwid width=\"20\" height=\"20\"/> }\nexport const ghostkit = () => { return <SVGGhostkit width=\"20\" height=\"20\"/> }\nexport const guteblock = () => { return <SVGGuteblock width=\"20\" height=\"20\"/> }\nexport const gutenbergblock = () => { return <SVGGutenbergBlock width=\"20\" height=\"20\"/> }\nexport const gutentor = () => { return <SVGGutentor width=\"20\" height=\"20\"/> }\nexport const kadenceblocks = () => { return <SVGKadenceBlocks width=\"20\" height=\"20\"/> }\nexport const kiokenblocks = () => { return <SVGKiokenBlocks width=\"20\" height=\"20\"/> }\nexport const otterblocks = () => { return <SVGOtterBlocks width=\"20\" height=\"20\"/> }\nexport const qodeblock = () => { return <SVGQodeblock width=\"20\" height=\"20\"/> }\nexport const qubely = () => { return <SVGQubely width=\"20\" height=\"20\"/> }\nexport const snowmonkeyblocks = () => { return <SVGSnowMonkeyBlocks width=\"20\" height=\"20\"/> }\nexport const stackableultimategutenbergblocks = () => { return <SVGStackableUltimateGutenbergBlocks width=\"20\" height=\"20\"/> }\nexport const ultimateaddonsforgutenberg = () => { return <SVGUltimateAddonsForGutenberg width=\"20\" height=\"20\"/> }\nexport const ultimateblocks = () => { return <SVGUltimateBlocks width=\"20\" height=\"20\"/> }\nexport const ultimatepost = () => { return <SVGUltimatePost width=\"20\" height=\"20\"/> }\nexport const wordpress = () => { return <SVGWordPress width=\"20\" height=\"20\"/> }\n\nimport SVGReduxTemplatesIcon from '../../assets/img/icon.svg'\nimport SVGReduxTemplatesColorIcon from '../../assets/img/icon-color.svg'\n//\n//\n// export const reqSvgs = require.context ( './images/third-party', true, /\\.svg$/ )\n//\n// export const reqSvgsKeys = reqSvgs.keys()\n//\n// const iconLoader = (path) => import(path);\n//\n// export const icons = {\n// \t'redux': iconLoader('../../assets/img/icon.svg'),\n// \t'forms-gutenberg': iconLoader('./images/forms-gutenberg.svg')\n// }\n//\n// export const svgs = reqSvgs\n// \t.keys ()\n// \t.reduce ( ( images, path ) => {\n// \t\timages[path.replace('./', '').replace('.svg', '')] = reqSvgs ( path )\n// \t\treturn images\n// \t}, {} )\n//\n// function importAll(r) {\n// \tlet images = {};\n// \tr.keys().map((item, index) => { images[item.replace('./', '').replace('.svg', '')] = r(item); });\n// \treturn images;\n// }\n// export const images = importAll(require.context( './images/third-party', false, /\\.(svg)$/));\n\n\n\n/**\n * WordPress dependencies\n */\nimport {cloneElement, render} from '@wordpress/element'\nimport domReady from '@wordpress/dom-ready'\nimport {updateCategory} from '@wordpress/blocks'\n\nexport const colorizeIcon = SvgIcon => {\n\treturn cloneElement(SvgIcon, {\n\t\tfill: 'url(#redux-gradient)',\n\t\tclassName: 'redux-icon-gradient',\n\t})\n}\n\nexport const thirdPartyIcon = (icon) => {\n\tif (icon) {\n\t\treturn <icon width=\"20\" height=\"20\"/>\n\t}\n}\n\n// Add an icon to our block category.\nif (typeof window.wp.blocks !== 'undefined' && typeof window.wp.blocks.updateCategory !== 'undefined') {\n\tupdateCategory(redux_templates.i18n, {\n\t\ticon: colorizeIcon(<SVGReduxTemplatesIcon className=\"components-panel__icon\" width=\"20\" height=\"20\"/>),\n\t})\n}\n\n// Add our SVG gradient placeholder definition that we'll reuse.\ndomReady(() => {\n\tconst redux_templatesGradient = document.createElement('DIV')\n\tdocument.querySelector('body').appendChild(redux_templatesGradient)\n\trender(\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tclassName=\"redux-gradient\"\n\t\t\theight=\"0\"\n\t\t\twidth=\"0\"\n\t\t\tstyle={{opacity: 0}}\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<linearGradient id=\"redux-gradient\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#8c33da\" stopOpacity=\"1\"/>\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#f34957\" stopOpacity=\"1\"/>\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t</svg>,\n\t\tredux_templatesGradient\n\t)\n})\n\nexport const ReduxTemplatesIcon = () => {\n\treturn <SVGReduxTemplatesIcon width=\"20\" height=\"20\"/>\n}\n\nexport const ReduxTemplatesIconColor = () => {\n\treturn <SVGReduxTemplatesColorIcon width=\"20\" height=\"20\"/>\n}\n\nexport const ReduxTemplatesIconColorize = () => {\n\treturn colorizeIcon(<SVGReduxTemplatesIcon width=\"20\" height=\"20\"/>)\n}\nexport const core = () => {\n\treturn <SVGWordPress width=\"20\" height=\"20\"/>\n}\n//\n// export const AdvancedGutenbergBlocks = () => {\n// \treturn <SVGAdvancedGutenbergBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const advancedgutenbergblocks = () => <AdvancedGutenbergBlocks/>\n//\n// export const AdvancedGutenberg = () => {\n// \treturn <SVGAdvancedGutenbergIcon width=\"20\" height=\"20\"/>\n// }\n// export const advancedgutenbergIcon = () => <AdvancedGutenberg/>\n//\n// export const AtomicBlocks = () => {\n// \treturn <SVGAtomicBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const atomicblocks = () => <AtomicBlocks/>\n//\n// export const CoBlocks = () => {\n// \treturn <SVGCoBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const Coblocks = () => <CoBlocks/>\n// export const coblocks = () => <CoBlocks/>\n//\n// export const Stackable = () => {\n// \treturn <SVGStackableIcon width=\"20\" height=\"20\"/>\n// }\n// export const stackable = () => <Stackable/>\n// export const stackableultimategutenbergblocks = () => <Stackable/>\n//\n// export const Qubely = () => {\n// \treturn <SVGQubelyIcon width=\"20\" height=\"20\"/>\n// }\n// export const qubely = () => <Qubely/>\n//\n// export const Kioken = () => {\n// return <SVGKiokenIcon width=\"20\" height=\"20\"/>\n// }\n// export const kioken = () => <Kioken/>\n// export const kiokenblocks = () => <Kioken/>\n//\n// export const kadenceblocks = () => {\n// \treturn <SVGKadenceIcon width=\"20\" height=\"20\"/>\n// }\n//\n// export const CreativeBlocks = () => {\n// \treturn <SVGCreativeBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const creativeblocks = () => <CreativeBlocks/>\n// export const qb = () => <CreativeBlocks/>\n//\n// export const EssentialBlocks = () => {\n// \treturn <SVGEssentialBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const essentialblocks = () => <EssentialBlocks/>\n// export const eb = () => <EssentialBlocks/>\n//\n// export const UltimateAddonsForGutenberg = () => {\n// \treturn <SVGUltimateAddonsForGutenbergIcon width=\"20\" height=\"20\"/>\n// }\n// export const ultimateaddonsforgutenberg = () => <UltimateAddonsForGutenberg/>\n//\n//\n// export const UltimateBlocks = () => {\n// \treturn <SVGUltimateBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const ultimateblocks = () => <UltimateBlocks/>\n//\n// export const gutentor = () => {\n// \treturn <SVGGutentorIcon width=\"20\" height=\"20\"/>\n// }\n//\n//\n// export const GutenbergForms = () => {\n// \treturn <SVGGutenbergFormsIcon width=\"20\" height=\"20\"/>\n// }\n// export const gutenbergforms = () => <GutenbergForms/>\n// export const formsgutenberg = () => <GutenbergForms/>\n//\n","/**\n * Library Button\n */\n\n/**\n * WordPress dependencies\n */\nimport domReady from '@wordpress/dom-ready'\nimport { render } from '@wordpress/element'\n\n/**\n * External dependencies\n */\nimport './editor.scss'\nimport './blocks/blocks'\nimport './plugins/sidebar-share'\nimport './plugins/share-block-btn'\nimport './plugins/export'\nimport './plugins/export-page-menu-item'\nimport './plugins/library-context-menu-item'\nimport TooltipBox from './challenge/tooltip/TooltipBox';\nimport {handlingLocalStorageData} from './stores/helper';\nimport ReduxTemplatesChallenge from './challenge'\nimport {ModalManager} from './modal-manager';\nimport LibraryModal from './modal-library';\nimport './custom-css'\n\n\ndomReady(() => {\n setTimeout(() => {\n const challengeDiv = document.createElement('div');\n challengeDiv.className = 'challenge-tooltip-holder';\n document.body.appendChild(challengeDiv);\n const challengeWrapperDiv = document.createElement('div');\n challengeWrapperDiv.className = 'challenge-wrapper';\n document.body.appendChild(challengeWrapperDiv);\n\n if (window.location.hash == '#redux_challenge=1') {\n window.location.hash = '';\n ModalManager.open(<LibraryModal />);\n }\n\t\tif (window.location.hash == '#redux_templates=1') {\n\t\t\twindow.location.hash = '';\n\t\t\tModalManager.open(<LibraryModal />);\n }\n\n // For frontenberg, we open the dialog automatically.\n if (document.body.classList.contains( 'wp-admin' ) === false) {\n ModalManager.open(<LibraryModal />);\n }\n render(<ReduxTemplatesChallenge />, challengeWrapperDiv);\n render(<TooltipBox />, challengeDiv);\n\n handlingLocalStorageData();\n }, 500)\n});\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n'\nimport { ModalManager } from '~redux-templates/modal-manager';\nimport Form from '@rjsf/core';\nimport {BlockPreview} from '@wordpress/block-editor';\nconst {useState} = wp.element;\nconst {apiFetch} = wp;\n\nfunction FeedbackDialog(props) {\n const {title, description, schema, uiSchema, headerImage, headerIcon, data, ignoreData, endpoint, width, buttonLabel} = props;\n const {closeModal, onSuccess} = props;\n\n const [loading, setLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState(null);\n\n const onSubmit = ({formData}) => {\n const path = `redux/v1/templates/${endpoint ? endpoint : 'feedback'}`;\n if (loading) return;\n setLoading(true);\n apiFetch({\n path,\n method: 'POST',\n data: ignoreData ? formData : {...data, ...formData}\n }).then(data => {\n setLoading(false);\n if (data.success) {\n setErrorMessage(null);\n if (onSuccess) onSuccess(data); else onCloseModal();\n } else {\n console.log('There was an error: ', data);\n setErrorMessage(__('An unexpected error occured, please try again later.', redux_templates.i18n));\n }\n }).catch(err => {\n setLoading(false);\n console.log('There was an error: ', err);\n setErrorMessage(__('An unexpected error occured, please try again later.', redux_templates.i18n));\n });\n }\n\n const onCloseModal = () => {\n if (closeModal) closeModal(); else ModalManager.closeFeedback();\n }\n\n const style = width ? {width} : null;\n const wrapperClassname = width ? 'redux-templates-modal-wrapper feedback-popup-wrapper less-margin' : 'redux-templates-modal-wrapper feedback-popup-wrapper';\n\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className={wrapperClassname} style={style}>\n <div className=\"feedback-popup-header feedback-popup-header-contact\">\n {headerImage}\n {headerIcon}\n <a className=\"feedback-popup-close\" onClick={onCloseModal}>\n <i className='fas fa-times' />\n </a>\n </div>\n <div className=\"feedback-popup-content\">\n <h3>{title}</h3>\n {errorMessage && <p className=\"error-message\">{errorMessage}</p>}\n <p>{description}</p>\n <div className=\"col-wrapper\">\n <Form schema={schema} uiSchema={uiSchema} onSubmit={onSubmit}>\n <button className=\"feedback-popup-btn feedback-popup-rate-btn\" type=\"submit\">\n {loading && <i className=\"fas fa-spinner fa-pulse\"/>}\n {buttonLabel}\n </button>\n </Form>\n { data && data.editor_blocks &&\n <div className=\"preview-panel\">\n <div className=\"redux-templates-block-preview-hover\" />\n <BlockPreview blocks={data.editor_blocks} />\n </div>\n }\n </div>\n </div> {/* /.feedback-popup-content */}\n </div>\n </div>\n );\n}\n\nexport default FeedbackDialog;\n","import React from 'react';\nconst {useState, useEffect, useRef} = wp.element;\nconst {Spinner} = wp.components;\nimport TextTransition, { presets } from 'react-text-transition';\nconst {__} = wp.i18n\n\nconst MESSAGE_DELAY_MILLISECONDS = 4000;\n\nconst MESSAGES_LIST = [\n __('Please wait while your template is prepared.', redux_templates.i18n),\n __('Fetching the template.', redux_templates.i18n),\n __('We\\'re getting closer now.', redux_templates.i18n),\n __('Wow, this is taking a long time.', redux_templates.i18n),\n __('Gah, this should be done by now!', redux_templates.i18n),\n __('Really, this should be done soon.', redux_templates.i18n),\n __('Are you sure your internet is working?!', redux_templates.i18n),\n __('Give up, it looks like it didn\\'t work...', redux_templates.i18n),\n];\n\nfunction useInterval(callback, delay) {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nexport default function ImportingStep(props) {\n const [messageIndex, setMessageIndex] = useState(0);\n const [loadingMessage, setLoadingMessage] = useState(MESSAGES_LIST[0]);\n\n useInterval(() => {\n if (messageIndex === MESSAGES_LIST.length) return;\n setMessageIndex(messageIndex => messageIndex + 1);\n setLoadingMessage([MESSAGES_LIST[messageIndex + 1]]);\n }, MESSAGE_DELAY_MILLISECONDS)\n\n return (\n <div className=\"redux-templates-modal-body\">\n <div className=\"redux-templates-import-wizard-spinner-wrapper\">\n <TextTransition\n text={loadingMessage}\n springConfig={presets.gentle}\n />\n <Spinner/>\n </div>\n </div>\n );\n};\n","import {pluginInfo} from '~redux-templates/stores/dependencyHelper';\n\nconst {apiFetch} = wp;\nconst {compose} = wp.compose;\nconst {withDispatch} = wp.data;\nconst {Fragment, useState} = wp.element;\nconst {__} = wp.i18n;\n\nfunction InstallPluginStep(props) {\n\n const {missingPlugins, toNextStep, onCloseWizard} = props;\n const {setInstalledDependencies} = props;\n const [installingPlugin, setInstallingPlugin] = useState(null);\n const [installedList, setInstalledList] = useState([]);\n const [failedList, setFailedList] = useState([]);\n const [waitingList, setWaitingList] = useState(missingPlugins);\n\n const preInstallInit = () => {\n setInstalledList([]);\n setFailedList([]);\n setWaitingList(missingPlugins);\n setInstallingPlugin(null);\n setInstalledDependencies(false);\n }\n\n const onInstallPlugins = async () => {\n preInstallInit();\n let localInstalledList = [];\n let localFailedList = [];\n let localWaitingList = [...waitingList];\n for (let pluginKey of missingPlugins) {\n const pluginInstance = redux_templates.supported_plugins[pluginKey];\n localWaitingList = localWaitingList.filter(key => key !== pluginKey)\n setWaitingList(localWaitingList);\n if (!pluginKey || !pluginInstance) {\n setInstallingPlugin(null);\n break;\n }\n setInstallingPlugin({...pluginInstance, pluginKey});\n const reduxProSurfix = (pluginInstance.redux_pro) ? '&redux_pro=1' : '';\n await apiFetch({\n path: 'redux/v1/templates/plugin-install?slug=' + pluginKey + reduxProSurfix,\n }).then(res => {\n if (res.success) {\n setInstalledDependencies(true);\n localInstalledList = [...localInstalledList, pluginKey];\n setInstalledList(localInstalledList);\n if (localWaitingList.length === 0) setInstallingPlugin(null);\n } else {\n localFailedList = [...localFailedList, pluginKey]\n setFailedList(localFailedList);\n if (localWaitingList.length === 0) setInstallingPlugin(null);\n }\n })\n .catch(res => {\n localFailedList = [...localFailedList, pluginKey]\n setFailedList(localFailedList);\n if (localWaitingList.length === 0) setInstallingPlugin(null);\n });\n }\n }\n if (waitingList.length === 0 && failedList.length === 0 && installingPlugin === null)\n toNextStep();\n return (\n\n <Fragment>\n <div className=\"redux-templates-modal-body\">\n <h5>{__('Install Required Plugins', redux_templates.i18n)}</h5>\n <p>{__('Plugins needed to import this template are missing. Required plugins will be installed and activated automatically.', redux_templates.i18n)}</p>\n {\n (installingPlugin === null && failedList.length > 0) &&\n (<p className='error installError'>\n\t {__('The following plugin(s) failed to install properly. Please manually install them yourself before attempting another import.', redux_templates.i18n)}\n </p>)\n }\n\n <ul className=\"redux-templates-import-progress\">\n {\n missingPlugins &&\n missingPlugins.map(pluginKey => {\n\n let plugin = pluginInfo(pluginKey)\n\n if (installingPlugin && installingPlugin.pluginKey === pluginKey)\n return (\n <li className=\"installing\" key={installingPlugin.pluginKey}>{installingPlugin.name}\n <i className=\"fas fa-spinner fa-pulse\"/></li>);\n if (failedList.includes(pluginKey))\n return (<li className=\"failure\" key={pluginKey}>{plugin.name} <a href={plugin.url} target=\"_blank\"><i className=\"fas fa-external-link-alt\"/></a></li>);\n if (waitingList.includes(pluginKey))\n return (<li className=\"todo\" key={pluginKey}>{plugin.name} {plugin.url &&\n <a href={plugin.url} target=\"_blank\"><i className=\"fas fa-external-link-alt\"/></a>\n }</li>);\n if (installedList.includes(pluginKey))\n return (<li className=\"success\" key={pluginKey}>{plugin.name} <i\n className=\"fas fa-check-square\"/></li>);\n })\n }\n </ul>\n </div>\n <div className=\"redux-templates-modal-footer\">\n {waitingList.length !== 0 &&\n <button className=\"button button-primary\" disabled={installingPlugin !== null}\n onClick={() => onInstallPlugins()}>\n {installingPlugin !== null && <i className=\"fas fa-spinner fa-pulse\"/>}\n <span>{__('Install', redux_templates.i18n)}</span>\n </button>\n }\n <button className=\"button button-secondary\" disabled={installingPlugin !== null}\n onClick={onCloseWizard}>\n {__('Cancel', redux_templates.i18n)}\n </button>\n </div>\n </Fragment>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setInstalledDependencies\n } = dispatch('redux-templates/sectionslist');\n return {\n setInstalledDependencies\n };\n })\n])(InstallPluginStep);\n","import {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nimport {Tooltip} from '@wordpress/components';\n\nconst {apiFetch} = wp;\nconst {compose} = wp.compose;\nconst {withDispatch} = wp.data;\nconst {Fragment, useState} = wp.element;\nconst {__} = wp.i18n;\n\nfunction OptionStep(props) {\n\n const {setImportToAppend, toNextStep, onCloseWizard} = props;\n\n const onNextStep = (isToAppend) => {\n setImportToAppend(isToAppend);\n toNextStep();\n }\n\n return (\n\n <Fragment>\n <div className=\"redux-templates-modal-body\">\n <h5>{__('Append or Replace', redux_templates.i18n)}</h5>\n <p>{__('You have existing content on this page. How would you like to handle the import of this page template?', redux_templates.i18n)}</p>\n\t <div style={{textAlign:'center', marginTop: '30px'}}>\n\t\t {/*<Tooltip text={__('This template will be added to the bottom of the existing content.', redux_templates.i18n)} position=\"bottom center\">*/}\n\t\t\t <button className=\"button button-primary\" onClick={() => onNextStep(true)} style={{marginRight: '10px'}}>\n\t\t\t\t {__('Append to Content', redux_templates.i18n)}\n\t\t\t </button>\n\t\t {/*</Tooltip>*/}\n\t\t {/*<Tooltip text={__('All the existing content will be replaced with this new template.', redux_templates.i18n)} position=\"top right\">*/}\n\t\t\t <button className=\"button button-primary\" onClick={() => onNextStep(false)}>\n\t\t\t\t {__('Replace all Content', redux_templates.i18n)}\n\t\t\t </button>\n\t\t {/*</Tooltip>*/}\n\t </div>\n </div>\n <div className=\"redux-templates-modal-footer\">\n <button className=\"button button-secondary\" onClick={onCloseWizard}>\n {__('Cancel', redux_templates.i18n)}\n </button>\n </div>\n </Fragment>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setImportToAppend\n } = dispatch('redux-templates/sectionslist');\n return {\n setImportToAppend\n };\n })\n])(OptionStep);\n","const {Fragment} = wp.element;\nconst {__} = wp.i18n;\n\nimport ReduxTemplatesPremiumBox from './ReduxTemplatesPremiumBox';\nimport {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nconst REDUXTEMPLATES_PRO_KEY = 'redux-pro';\nexport default function ProPluginStep(props) {\n const {missingPros, onCloseWizard} = props;\n\n if ( missingPros.indexOf(REDUXTEMPLATES_PRO_KEY) >= 0 ) return <ReduxTemplatesPremiumBox />\n return (\n <Fragment>\n <div className=\"redux-templates-modal-body\">\n <h5>{__('Additional Plugins Required', redux_templates.i18n)}</h5>\n <p>{__('The following premium plugin(s) are required to import this template:', redux_templates.i18n)}</p>\n <ul className=\"redux-templates-import-progress\">\n {\n missingPros.map(pluginKey => {\n let plugin = pluginInfo(pluginKey)\n return (\n <li className='installing' key={pluginKey}>\n {plugin.name} {plugin.url &&\n <a href={plugin.url} target=\"_blank\"><i className=\"fas fa-external-link-alt\"/></a>\n }\n </li>);\n })\n }\n </ul>\n\n </div>\n <div className=\"redux-templates-modal-footer\">\n <a className=\"button button-secondary\" onClick={onCloseWizard}>\n {__('Close', redux_templates.i18n)}\n </a>\n </div>\n </Fragment>\n );\n}\n\n","const {__} = wp.i18n\n\n\nexport default function ReduxTemplatesActivateBox({onActivateRedux, activating}) {\n\n return (\n <div className=\"redux-templates-modal-body\">\n <div className=\"section-box premium-box\">\n <h3>{__('Registration Required to Import Templates', redux_templates.i18n)}</h3>\n <p>{__(' Register now to import templates from the Redux template library in a single click.', redux_templates.i18n)}</p>\n <ul>\n <li><strong>{__('Unlimited', redux_templates.i18n)}</strong> {__('use of our free templates.', redux_templates.i18n)}</li>\n\t <li><strong>{__('Updates', redux_templates.i18n)}</strong> {__('to the library.', redux_templates.i18n)}</li>\n <li><strong>{__('Google Fonts', redux_templates.i18n)}</strong> {__('manual updates.', redux_templates.i18n)}</li>\n </ul>\n <p>\n\t <button className=\"button button-primary\"\n\t disabled={activating}\n\t onClick={() => onActivateRedux()}>\n\t\t {activating && <i className=\"fas fa-spinner fa-pulse\" style={{marginRight:'5px'}}/>}\n\t\t <span>{__('Register for Free', redux_templates.i18n)}</span>\n\t </button>\n </p>\n\t <p style={{fontSize:'1.1em'}}><small><em dangerouslySetInnerHTML={{__html: redux_templates.tos}} /></small></p>\n </div>\n </div>\n );\n}\n","const {__} = wp.i18n\n\nexport default function ReduxTemplatesPremiumBox(props) {\n return (\n <div className=\"redux-templates-modal-body\">\n <div className=\"section-box premium-box\">\n <h3>{__('Upgrade to Redux Pro', redux_templates.i18n)}</h3>\n\n <p>{__('Thanks for giving our library a try! Upgrade to Redux Pro to unlock even more designs and to continue using our library.', redux_templates.i18n)}</p>\n <ul>\n\t <li><strong>{redux_templates.stats.sections}</strong> {__('Section Templates', redux_templates.i18n)}</li>\n\t <li><strong>{redux_templates.stats.pages}</strong> {__('Full Page Templates', redux_templates.i18n)}</li>\n\t <li><strong>{redux_templates.stats.collections}</strong> {__('Template Kits', redux_templates.i18n)}</li>\n <li><strong>{__('And so much more!', redux_templates.i18n)}</strong></li>\n </ul>\n <p>\n <a href={redux_templates.u + 'import_wizard'} className=\"redux-templates-upgrade-button\" title=\"{__('Redux Pro', redux_templates.i18n)}\"\n target='_blank'>{__('Upgrade Now', redux_templates.i18n)}</a>\n </p>\n </div>\n </div>\n );\n}\n","const {__} = wp.i18n;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\nconst {apiFetch} = wp;\n\nimport InstallPluginStep from './InstallPluginStep';\nimport ProPluginStep from './ProPluginsStep';\nimport OptionStep from './OptionStep';\nimport ImportingStep from './ImportingStep';\nimport ReduxTemplatesPremiumBox from './ReduxTemplatesPremiumBox';\nimport ReduxTemplatesActivateBox from './ReduxTeamplatesActivateBox';\n\nimport {requiresInstall, requiresPro, requiresReduxPro, isReduxProInstalled} from '~redux-templates/stores/dependencyHelper'\n\nimport '../modals.scss'\nimport './style.scss'\n\nconst PRO_STEP = 0;\nconst PLUGIN_STEP = 1;\nconst OPTION_STEP = 2;\nconst IMPORT_STEP = 3;\nconst REDUX_PRO_STEP = -1;\nconst REDUX_ACTIVATE_STEP = 999;\nconst tourPlugins = ['qubely', 'kioken-blocks'];\n\nfunction ImportWizard(props) {\n const {startImportTemplate, setImportingTemplate, setActivateDialogDisplay, appendErrorMessage} = props;\n const {isChallengeOpen, importingTemplate, activateDialogDisplay, isPostEmpty, isInstalledDependencies} = props;\n const [currentStep, setCurrentStep] = useState(PRO_STEP);\n const [importing, setImporting] = useState(false);\n const [activating, setActivating] = useState(false);\n const [missingPlugins, setMissingPlugins] = useState([]);\n\n useEffect(() => {\n if (importingTemplate) {\n \tif ( !importingTemplate.proDependenciesMissing ) {\n\t\t importingTemplate.proDependenciesMissing = [];\n\t }\n\t if ( !importingTemplate.installDependenciesMissing ) {\n\t\t importingTemplate.installDependenciesMissing = [];\n\t }\n // IMPORTANT First check: can you use redux pro?\n const leftTry = isNaN(redux_templates.left) === false ? parseInt(redux_templates.left) : 0;\n if (redux_templates.mokama !== '1' && leftTry < 1) {\n //setCurrentStep(REDUX_ACTIVATE_STEP);\n\t setCurrentStep(REDUX_PRO_STEP);\n return;\n }\n /* Redux pro check */\n if (requiresReduxPro(importingTemplate)) {\n setCurrentStep(REDUX_PRO_STEP);\n return;\n }\n // Start with Pro step\n // When all OK with Pro Step, move to Plugin Step, on the way, prepare reduxProMergedPlugins.\n if (importingTemplate && currentStep === PRO_STEP && requiresPro(importingTemplate) === false) {\n setCurrentStep(PLUGIN_STEP);\n if (isReduxProInstalled()) {\n setMissingPlugins(\n [].concat(importingTemplate.proDependenciesMissing, importingTemplate.installDependenciesMissing)\n .filter(plugin => plugin)\n );\n } else {\n\t setMissingPlugins(importingTemplate.installDependenciesMissing.filter(plugin => plugin));\n }\n\n }\n if (importingTemplate && currentStep === PLUGIN_STEP && requiresInstall(importingTemplate) === false)\n if (isPostEmpty === false) setCurrentStep(OPTION_STEP); else setCurrentStep(IMPORT_STEP);\n if (importingTemplate && currentStep === OPTION_STEP && isPostEmpty === true)\n setCurrentStep(IMPORT_STEP);\n if (importingTemplate && currentStep === IMPORT_STEP && importing === false) {\n setImporting(true);\n try {\n startImportTemplate();\n } catch (e) {\n console.log('importing exception', e);\n setImporting(false);\n setCurrentStep(PLUGIN_STEP);\n setImportingTemplate(null);\n }\n }\n }\n }, [importingTemplate, currentStep, activateDialogDisplay])\n\n // Activate dialog disply\n useEffect(() => {\n if (activateDialogDisplay === true) { // Activate dialog hard reset case\n setCurrentStep(REDUX_ACTIVATE_STEP);\n setActivateDialogDisplay(false);\n }\n }, [activateDialogDisplay]);\n\n // On the initial loading\n useEffect(() => {\n setActivateDialogDisplay(false);\n }, []);\n\n const toNextStep = () => {\n if (isChallengeOpen) return;\n setCurrentStep(currentStep + 1);\n };\n\n const onCloseWizard = () => {\n if (isChallengeOpen) return; // When in tour mode, we don't accept mouse event.\n if (importing) return;\n setCurrentStep(PLUGIN_STEP);\n setImportingTemplate(null);\n };\n\n const activateReduxTracking = () => {\n setActivating(true);\n\t apiFetch({path: 'redux/v1/templates/activate'}).then(response => {\n\t\t if (response.success) {\n\t\t\t redux_templates.left = response.data.left;\n\t\t }\n\t\t setCurrentStep(PRO_STEP);\n\t\t setActivating(false);\n\t }).catch(error => {\n\t\t appendErrorMessage(error.code + ' : ' + error.message);\n\t\t setCurrentStep(PRO_STEP);\n\t\t setActivating(false);\n\t });\n }\n\n\n if (isChallengeOpen) {\n // exception handling for tour mode\n if (currentStep !== PLUGIN_STEP) setCurrentStep(PLUGIN_STEP)\n }\n\n if (!importingTemplate) return null;\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className=\"redux-templates-modal-wrapper\" data-tut=\"tour__import_wizard\">\n <div className=\"redux-templates-modal-header\">\n <h3>{__('Import Wizard', redux_templates.i18n)}</h3>\n <button className=\"redux-templates-modal-close\" onClick={onCloseWizard}>\n <i className={'fas fa-times'}/>\n </button>\n </div>\n <div className=\"redux-templates-importmodal-content\">\n {(currentStep === PRO_STEP) && requiresPro(importingTemplate) &&\n <ProPluginStep missingPros={importingTemplate.proDependenciesMissing } onCloseWizard={onCloseWizard} />}\n {(currentStep === PLUGIN_STEP) &&\n <InstallPluginStep missingPlugins={isChallengeOpen ? tourPlugins : missingPlugins} toNextStep={toNextStep}\n onCloseWizard={onCloseWizard}/>}\n {currentStep === OPTION_STEP && <OptionStep toNextStep={toNextStep} onCloseWizard={onCloseWizard} />}\n {currentStep === IMPORT_STEP && <ImportingStep />}\n\t {currentStep === REDUX_ACTIVATE_STEP && <ReduxTemplatesActivateBox onActivateRedux={activateReduxTracking} activating={activating} />}\n {currentStep === REDUX_PRO_STEP && <ReduxTemplatesPremiumBox />}\n {isInstalledDependencies && <iframe src='./' width=\"0\" height=\"0\" />}\n </div>\n </div>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setImportingTemplate, setActivateDialogDisplay, appendErrorMessage} = dispatch('redux-templates/sectionslist');\n return {\n setImportingTemplate,\n setActivateDialogDisplay,\n appendErrorMessage\n };\n }),\n\n withSelect((select, props) => {\n const {getChallengeOpen, getImportingTemplate, getActivateDialogDisplay, getInstalledDependencies} = select('redux-templates/sectionslist');\n const {isEditedPostEmpty} = select('core/editor');\n return {\n isChallengeOpen: getChallengeOpen(),\n importingTemplate: getImportingTemplate(),\n activateDialogDisplay: getActivateDialogDisplay(),\n isPostEmpty: isEditedPostEmpty(),\n isInstalledDependencies: getInstalledDependencies()\n };\n })\n])(ImportWizard);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst { useState, useEffect} = wp.element;\nimport '../stores';\n\nimport {Modal, ModalManager} from '../modal-manager'\nimport TabHeader from '../components/tab-header';\nimport WithSidebarLayout from './layout-with-sidebar';\nimport CollectionView from './view-collection';\nimport SavedView from './view-saved';\nimport ImportWizard from '../modal-import-wizard';\nimport ErrorNotice from '../components/error-notice';\nimport ChallengeFinalTemplate from '~redux-templates/challenge/final-templates';\nimport FabWrapper from '../components/fab-wrapper';\nimport {processImportHelper} from '~redux-templates/stores/actionHelper';\nimport './style.scss'\n\n\nfunction LibraryModal(props) {\n const {\n fetchLibraryFromAPI, activeCollection, activeItemType, errorMessages, importingTemplate, challengeFinalStatus, isChallengeOpen,\n setLoading, setImportingTemplate, clearSearch, clearState\n } = props;\n const [loaded, setLoaded] = useState(false);\n const [escKeyPressed, setEscKeyPressed] = useState(false);\n\n let stateLibrary = null;\n useEffect(() => {\n\t\tclearState();\n stateLibrary = fetchLibraryFromAPI();\n if (stateLibrary === null && loaded === false) { // One to be called at first.\n setLoading(true);\n setLoaded(true);\n }\n const handleKeyUp = ({keyCode}) => {\n if (keyCode === 27) {\n setEscKeyPressed(true);\n }\n }\n document.addEventListener('keyup', handleKeyUp);\n return () => {\n document.removeEventListener('keyup', handleKeyUp);\n }\n }, []);\n\n useEffect(() => {\n if (escKeyPressed) {\n setEscKeyPressed(false);\n if (ModalManager.isCustomizerOpened()) {\n ModalManager.closeCustomizer();\n } else {\n if (importingTemplate)\n setImportingTemplate(null);\n else {\n ModalManager.close();\n }\n }\n }\n }, [escKeyPressed])\n\n const hasSidebar = () => {\n return ((activeItemType !== 'collection' || activeCollection === null) && activeItemType !== 'saved');\n }\n\n // read block data to import and give the control to actual import\n const processImport = () => {\n if (importingTemplate) processImportHelper();\n }\n\n\n return (\n <Modal className=\"redux-templates-builder-modal-pages-list\"\n customClass=\"redux-templates-builder-modal-template-list\"\n openTimeoutMS={0} closeTimeoutMS={0}>\n <TabHeader/>\n {\n errorMessages && errorMessages.length > 0 &&\n <ErrorNotice errorMessages={errorMessages}/>\n }\n <div className=\"redux-templates-collections-modal-body\">\n {hasSidebar() && <WithSidebarLayout/>}\n {(hasSidebar() === false && activeItemType === 'collection') && <CollectionView/>}\n {(hasSidebar() === false && activeItemType !== 'collection') && <SavedView/>}\n </div>\n {\n importingTemplate && <ImportWizard startImportTemplate={processImport} />\n }\n { (challengeFinalStatus !== '') && <ChallengeFinalTemplate finalStatus={challengeFinalStatus} /> }\n { !isChallengeOpen && <FabWrapper /> }\n </Modal>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setLoading,\n setLibrary,\n setImportingTemplate,\n clearSearch,\n\t\t\tclearState\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setLoading,\n setLibrary,\n setImportingTemplate,\n clearSearch,\n\t\t\tclearState\n };\n }),\n\n withSelect((select) => {\n const {fetchLibraryFromAPI, getActiveCollection, getActiveItemType, getErrorMessages, getImportingTemplate, getChallengeOpen, getChallengeFinalStatus} = select('redux-templates/sectionslist');\n return {\n fetchLibraryFromAPI,\n activeCollection: getActiveCollection(),\n activeItemType: getActiveItemType(),\n errorMessages: getErrorMessages(),\n importingTemplate: getImportingTemplate(),\n challengeFinalStatus: getChallengeFinalStatus(),\n isChallengeOpen: getChallengeOpen()\n };\n })\n])(LibraryModal);\n","const { Fragment } = wp.element;\nimport Sidebar from '../sidebar';\nimport TemplateListSubHeader from '~redux-templates/components/template-list-subheader';\nimport TemplateList from '../view-template-list';\n\nexport default function WithSidebarCollection (props) {\n return (\n <Fragment>\n <div id=\"redux-templates-collection-modal-sidebar\" className=\"redux-templates-collection-modal-sidebar\">\n <Sidebar />\n </div>\n <div className=\"redux-templates-collection-modal-content-area\" data-tut=\"tour__main_body\" id=\"modalContent\">\n <TemplateListSubHeader />\n <TemplateList />\n </div>\n </Fragment>\n );\n}\n","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\n\nimport uniq from 'lodash/uniq';\n\nfunction CategoryFilter (props) {\n const {categoryData, activeCategory, activePriceFilter, loading, itemType} = props;\n const {setActiveCategory} = props;\n\n\n // On the top, All Block, All Template, All Template Kit etc\n const itemTypeLabel = () => {\n if (itemType === 'section') return __('Section', redux_templates.i18n);\n if (itemType === 'page') return __('Template', redux_templates.i18n);\n if (itemType === 'collection') return __('Template Kit', redux_templates.i18n);\n };\n\n const totalItemCountLabel = () => {\n let totalArr = [], filteredArr = [];\n categoryData.forEach((category) => {\n if (category.hasOwnProperty('filteredData')) filteredArr = [...filteredArr, ...category.filteredData];\n totalArr = [...totalArr, ...category.ids];\n });\n return (activePriceFilter !== '') ? uniq(filteredArr).length + '/' + uniq(totalArr).length : uniq(totalArr).length;\n };\n\n const isDisabledCategory = (data) => (data && ((data.hasOwnProperty('filteredData') && data.filteredData.length === 0) || data.ids.length === 0));\n\n const onChangeCategory = (data) => {\n if (isDisabledCategory(data)) return;\n setActiveCategory(data.slug);\n };\n // Give the selected category(activeCategory) label className as \"active\"\n const activeClassname = (data) => {\n const categoryLabel = data ? data.slug : '';\n if (isDisabledCategory(data)) return 'disabled';\n return activeCategory === categoryLabel ? 'active' : '';\n };\n\n return (\n <div>\n <h3>{__('Categories', redux_templates.i18n)}</h3>\n {!loading &&\n <ul className=\"redux-templates-sidebar-categories\">\n {categoryData.length > 0 &&\n <li\n className={activeClassname(null)}\n onClick={() => setActiveCategory('')}>\n {__('All', redux_templates.i18n)} {itemTypeLabel()}s <span>{totalItemCountLabel()}</span>\n </li>\n }\n\n {categoryData &&\n categoryData.map((data, index) => (\n <li className={activeClassname(data)} onClick={() => onChangeCategory(data)}\n key={index}>\n {data.name}\n <span> {data.hasOwnProperty('filteredData') && activePriceFilter !== '' ? data.filteredData.length : data.ids.length } </span>\n </li>\n ))\n }\n </ul>\n }\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setActiveCategory} = dispatch('redux-templates/sectionslist');\n return {\n setActiveCategory\n };\n }),\n\n withSelect((select, props) => {\n const {getCategoryData, getActiveCategory, getActiveItemType, getLoading} = select('redux-templates/sectionslist');\n return {\n categoryData: getCategoryData(),\n activeCategory: getActiveCategory(),\n itemType: getActiveItemType(),\n loading: getLoading(),\n };\n })\n])(CategoryFilter);\n","const {Fragment} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\n\nimport {CheckboxControl, Tooltip, Button, ButtonGroup} from '@wordpress/components';\nimport DependencyFilterRow from './dependencyFilterRow';\nimport {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nimport {REDUXTEMPLATES_PRO_KEY, NONE_KEY} from '~redux-templates/stores/helper';\n\nfunction DependencyFilter(props) {\n const {dependencyFilters, activeItemType, loading, wholePlugins, dependencyFilterRule} = props;\n const {setDependencyFilters, selectDependencies, setDependencyFilterRule} = props;\n // Give the selected category(activeCategory) label className as \"active\"\n const isNoneChecked = () => {\n if (dependencyFilters.hasOwnProperty(NONE_KEY))\n return dependencyFilters[NONE_KEY].hasOwnProperty('value') ? dependencyFilters[NONE_KEY].value : dependencyFilters[NONE_KEY];\n return false;\n };\n\n const toggleNoneChecked = () => {\n setDependencyFilters({...dependencyFilters,\n [NONE_KEY]: { value: dependencyFilters[NONE_KEY].value === false, disabled: dependencyFilters[NONE_KEY]['disabled'] === true }\n });\n };\n return (\n <Fragment>\n {!loading && wholePlugins &&\n <div id=\"redux-templates-filter-dependencies\" data-tut=\"tour__filter_dependencies\">\n\t <>\n\t\t <ButtonGroup style={{float:'right'}}>\n\t\t\t <Tooltip text={__('Find templates which contain blocks from any of the selected plugins.', redux_templates.i18n)} position=\"top right\">\n\t\t\t\t <Button isSmall isPrimary={dependencyFilterRule === false} isSecondary={dependencyFilterRule} onClick={() => setDependencyFilterRule(false)} disabled={activeItemType === 'collection'}>{__('Any', redux_templates.i18n)}</Button>\n\t\t\t </Tooltip>\n\t\t\t <Tooltip text={__('Find templates that only contain blocks from the selected plugins.', redux_templates.i18n)} position=\"top right\">\n\t\t\t\t <Button isSmall isSecondary={dependencyFilterRule === false} isPrimary={dependencyFilterRule} onClick={() => setDependencyFilterRule(true)} disabled={activeItemType === 'collection'}>{__('Only', redux_templates.i18n)}</Button>\n\t\t\t </Tooltip>\n\t\t </ButtonGroup>\n\t\t <h3>{__('Required Plugins', redux_templates.i18n)} </h3>\n\t </>\n <div className='redux-templates-select-actions'>\n <Tooltip text={__('Select All', redux_templates.i18n)} position=\"top right\"><a href=\"#\" onClick={() => selectDependencies('all')}>{__('All', redux_templates.i18n)}</a></Tooltip>\n\t\t <span>&nbsp; / &nbsp;</span>\n\t\t <Tooltip text={__('Native Blocks Only', redux_templates.i18n)} position=\"top right\"><a href=\"#\" onClick={() => selectDependencies('none')}>{__('None', redux_templates.i18n)}</a></Tooltip>\n <span>&nbsp; / &nbsp;</span>\n <Tooltip text={__('Installed Dependencies', redux_templates.i18n)} position=\"top right\"><a href=\"#\"\n onClick={() => selectDependencies('installed')}>\n {__('Installed', redux_templates.i18n)}</a></Tooltip>\n <span>&nbsp; / &nbsp;</span>\n <Tooltip text={__('Reset Dependencies', redux_templates.i18n)} position=\"top right\">\n <a href=\"#\" onClick={() => selectDependencies('default')}>\n <i className=\"fas fa-undo\" /></a></Tooltip>\n <ChallengeDot step={2} />\n\n </div>\n <ul className=\"redux-templates-sidebar-dependencies\">\n { (loading === false) &&\n <li style={{display: activeItemType === 'collection' ? 'none': '' }}>\n <CheckboxControl\n label={__('Native', redux_templates.i18n)}\n checked={isNoneChecked()}\n onChange={toggleNoneChecked}\n />\n <Tooltip text={__('Only default WordPress blocks used.', redux_templates.i18n)} position='right'>\n <span style={{float:'right', marginRight:'2px'}}><i className=\"fa fa-info-circle\" /></span>\n </Tooltip>\n </li>\n }\n {\n Object.keys(dependencyFilters)\n .filter(pluginKey => (wholePlugins.indexOf(pluginKey)!==-1 || pluginKey === REDUXTEMPLATES_PRO_KEY))\n .sort((a, b) => {\n const pluginInstanceA = pluginInfo(a);\n const pluginInstanceB = pluginInfo(b);\n if (pluginInstanceA.name < pluginInstanceB.name)\n return -1;\n if (pluginInstanceA.name > pluginInstanceB.name)\n return 1;\n return 0;\n })\n .map(pluginKey =>\n <DependencyFilterRow key={pluginKey} pluginKey={pluginKey} />\n )\n }\n </ul>\n </div>\n }\n </Fragment>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setDependencyFilters, selectDependencies, setDependencyFilterRule} = dispatch('redux-templates/sectionslist');\n return {\n setDependencyFilters,\n selectDependencies,\n setDependencyFilterRule\n };\n }),\n\n withSelect((select) => {\n const {getDependencyFiltersStatistics, getLoading, getActiveItemType, getWholePlugins, getDependencyFilterRule} = select('redux-templates/sectionslist');\n return {\n loading: getLoading(),\n dependencyFilters: getDependencyFiltersStatistics(),\n wholePlugins: getWholePlugins(),\n dependencyFilterRule: getDependencyFilterRule(),\n\t activeItemType: getActiveItemType()\n };\n })\n])(DependencyFilter);\n","import React from 'react';\nconst {useState, useEffect, useRef} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\n\nimport {CheckboxControl, Tooltip} from '@wordpress/components';\nimport {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nimport {NONE_KEY} from '~redux-templates/stores/helper';\n\nconst specialPlugins = ['gutenberghub.com', 'editorplus'];\n\nfunction DependencyFilterRow(props) {\n const {pluginKey, dependencyFilters} = props;\n const {setDependencyFilters} = props;\n const [isValidPlugin, setIsValidPlugin] = useState(false);\n const [isChecked, setIsChecked] = useState(false);\n const [pluginInstanceURL, setPluginInstanceURL] = useState('');\n const [pluginInstanceName, setPluginInstanceName] = useState('');\n const [pluginClassname, setPluginClassname] = useState('');\n\n useEffect(() => {\n const pluginInstance = pluginInfo(pluginKey);\n if (!pluginKey || pluginKey === NONE_KEY) {\n setIsValidPlugin(false);\n return;\n }\n if (!pluginInstance || pluginInstance.name == null) {\n setIsValidPlugin(false);\n return;\n }\n setPluginInstanceURL(pluginInstance.url);\n setPluginInstanceName(pluginInstance.name);\n setIsValidPlugin(true);\n }, [pluginKey]);\n\n useEffect(() => {\n const pluginInstance = pluginInfo(pluginKey);\n if (!dependencyFilters) return;\n if (dependencyFilters.hasOwnProperty(pluginKey)) {\n if (dependencyFilters[pluginKey].disabled)\n setIsChecked(false);\n else\n setIsChecked(dependencyFilters[pluginKey].hasOwnProperty('value') ? dependencyFilters[pluginKey].value : dependencyFilters[pluginKey]);\n } else\n setIsChecked(false)\n let pluginClassnameList = [];\n pluginClassnameList.push(!pluginInstance.version && !('no_plugin' in pluginInstance) ? 'missing-dependency' : '');\n pluginClassnameList.push((!dependencyFilters[pluginKey] || dependencyFilters[pluginKey].disabled) ? 'disabled' : '');\n setPluginClassname(pluginClassnameList.join(' '));\n }, [JSON.stringify(dependencyFilters)])\n\n const toggleChecked = () => {\n // disable check first\n if (dependencyFilters[pluginKey] === null || dependencyFilters[pluginKey] === undefined || dependencyFilters[pluginKey].disabled) return;\n // reflect on the item click event.\n let newDependencyFilters = {\n ...dependencyFilters,\n [pluginKey]: { value: dependencyFilters[pluginKey].value === false, disabled: dependencyFilters[pluginKey]['disabled'] === true }\n };\n\n // gutenberg.com, EditorPlus check\n if (specialPlugins.includes(pluginKey)) {\n specialPlugins.forEach((plugin) => {\n newDependencyFilters = {\n ...newDependencyFilters,\n [plugin]: { value: dependencyFilters[pluginKey].value === false, disabled: dependencyFilters[plugin]['disabled'] === true }\n }\n })\n }\n\n // if no item is selected, activate native, other wise conider to deactivate native\n // let valueCount = groupBy(Object.keys(newDependencyFilters), key => (newDependencyFilters[key] === true || newDependencyFilters[key].value === true));\n setDependencyFilters({...newDependencyFilters});\n };\n\n if (isValidPlugin === false) return null;\n\n return (\n <li className={pluginClassname}>\n <CheckboxControl\n label={pluginInstanceName}\n checked={isChecked}\n onChange={toggleChecked}\n />\n {pluginInstanceURL ?\n\t <Tooltip position={'top right'} text={__('Visit Plugin Website', redux_templates.i18n)}><span><a href={pluginInstanceURL} target=\"_blank\">\n <i className=\"fas fa-external-link-alt\" />\n\t </a></span></Tooltip> : null}\n\t {pluginClassname.includes('missing-dependency') &&\n\t <Tooltip position={'top right'} text={__('Not Installed', redux_templates.i18n)}><span className='redux-icon-wrapper'><i className=\"fa fa-exclamation-triangle\" /></span></Tooltip>\n\t }\n </li>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setDependencyFilters} = dispatch('redux-templates/sectionslist');\n return {\n setDependencyFilters\n };\n }),\n\n withSelect((select) => {\n const {getDependencyFiltersStatistics, getLoading, getActiveCategory} = select('redux-templates/sectionslist');\n return {\n loading: getLoading(),\n dependencyFilters: getDependencyFiltersStatistics(),\n activeCategory: getActiveCategory()\n };\n })\n])(DependencyFilterRow);\n","const {withSelect} = wp.data;\n\nimport './style.scss'\n\nimport PriceFilter from './priceFilter';\nimport CategoryFilter from './categoryFilter';\nimport DependencyFilter from './dependencyFilter';\n\nfunction Sidebar(props) {\n const {itemType, layer, loading} = props;\n const hasSidebar = () => {\n return (itemType !== 'collection' || layer === null);\n };\n return (\n <div>\n {\n hasSidebar() &&\n <>\n <PriceFilter/>\n <div className=\"redux-templates-modal-sidebar-content\">\n <CategoryFilter/>\n <DependencyFilter/>\n </div>\n </>\n }\n </div>\n );\n}\n\nexport default withSelect((select) => {\n const {getActiveItemType, getActiveCollection} = select('redux-templates/sectionslist');\n return {\n itemType: getActiveItemType(),\n layer: getActiveCollection()\n };\n})(Sidebar);\n","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\n\nfunction PriceFilter (props) {\n\tconst {setActivePriceFilter, activePriceFilter, statistics} = props;\n\n const getClassnames = (priceFilter) => {\n let classNames = [];\n classNames.push((priceFilter === activePriceFilter) ? 'active' : '');\n classNames.push(noStatistics(priceFilter) ? 'disabled' : '');\n return classNames.join(' ');\n }\n\n const noStatistics = (priceFilter) => {\n if (priceFilter === '') return false;\n if (priceFilter === 'free')\n return (!statistics['false'] || statistics['false'] < 1);\n else\n return (!statistics['true'] || statistics['true'] < 1);\n }\n\n return (\n <div className='redux-templates-template-filter-button-group'>\n <button onClick={() => setActivePriceFilter('')}\n className={getClassnames('')}>{__('All', redux_templates.i18n)}</button>\n <button onClick={() => setActivePriceFilter('free')} className={getClassnames('free')}\n disabled={noStatistics('free')}>{__('Free', redux_templates.i18n)}</button>\n <button onClick={() => setActivePriceFilter('pro')} className={getClassnames('pro')}\n disabled={noStatistics('pro')}>\n <img src={redux_templates.plugin + 'assets/img/icon-premium.svg'} alt=\"\"/>\n {__('Premium', redux_templates.i18n)}\n </button>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setActivePriceFilter} = dispatch('redux-templates/sectionslist');\n return {\n setActivePriceFilter\n };\n }),\n\n withSelect((select, props) => {\n const {getStatistics, getActivePriceFilter} = select('redux-templates/sectionslist');\n return {\n activePriceFilter: getActivePriceFilter(),\n statistics: getStatistics()\n };\n })\n])(PriceFilter);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {useState, useEffect} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n\n\nimport './style.scss'\n\nimport ButtonGroup from '~redux-templates/components/button-group';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper'\n\nconst DURATION_UNIT= 500;\nconst PREVIEW_PANEL_HEIGHT = 515;\n\n// Collection Detail view: preview, item list and import\nfunction CollectionView(props) {\n const {pageData, activeCollectionData} = props;\n const {setActiveCollection} = props;\n const [previewData, setPreviewData] = useState(null);\n const [previewDataIndex, setPreviewDataIndex] = useState(0);\n const [transitionDuration, setTransitionDuration] = useState('1.5s');\n\n const dataLength = pageData.length;\n\n // To be called when switching over\n useEffect(() => {\n if (pageData && pageData[previewDataIndex]) {\n const itemData = pageData[previewDataIndex];\n const backgroundImage = new Image();\n if (itemData.image_full) {\n setPreviewData({...itemData, backgroundImage: itemData.image_full, previewImageClassname: 'details-preview has_full'});\n backgroundImage.src = itemData.image_full;\n } else {\n setPreviewData({...itemData, backgroundImage: itemData.image, previewImageClassname: 'details-preview has_full'})\n backgroundImage.src = itemData.image;\n }\n backgroundImage.onload = function () {\n setTransitionDuration((backgroundImage.height - PREVIEW_PANEL_HEIGHT) / DURATION_UNIT + 's');\n };\n }\n }, [pageData, previewDataIndex]);\n\n if (previewData)\n return (\n <div className=\"redux-templates-collection-details-view\">\n <div className=\"redux-templates-collection-details-left\">\n <div className=\"details-back\" onClick={() => setActiveCollection(null)}>\n <span className=\"dashicons dashicons-arrow-left-alt\"/>&nbsp;{__('Back to Template Kits', redux_templates.i18n)}\n </div>\n <div className={previewData.previewImageClassname} \n style={{backgroundImage: `url('${previewData.backgroundImage}')`, transitionDuration}}>\n </div>\n </div>\n <div className=\"redux-templates-collection-details-right\">\n <div className=\"details-title\">\n <h3>{activeCollectionData.name}</h3>\n <span>{dataLength} {__('pages', redux_templates.i18n)}</span>\n </div>\n <div className=\"details-list\">\n <div className=\"details-inner\">\n {\n pageData.map((detail, index) => {\n let className = (previewData.ID === detail.ID) ? 'detail-select detail-select-active' : 'detail-select';\n let divStyle = {\n backgroundImage: 'url(' + detail.image + ')',\n };\n\n return (\n <div className={className} onClick={() => setPreviewDataIndex(index)} key={index}>\n <div className=\"detail-image\" style={divStyle}>\n {requiresPro(detail) && <span className=\"pro\">{__('Premium', redux_templates.i18n)}</span>}\n {!requiresPro(detail) && requiresInstall(detail) && <span className=\"install\"><i className=\"fas fa-exclamation-triangle\" /></span>}\n <div className=\"detail-label\">{detail.name}</div>\n </div>\n </div>\n );\n })\n }\n </div>\n </div>\n </div>\n <div className=\"redux-templates-collection-details-footer\">\n <div className=\"footer-grid\">\n <ButtonGroup index={previewDataIndex} showDependencyBlock={false} data={previewData} pageData={pageData} />\n </div>\n </div>\n </div>\n );\n return null;\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setActiveCollection\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setActiveCollection\n };\n }),\n\n withSelect((select, props) => {\n const {getPageData, getLoading, getActiveCollectionData, getActiveItemType} = select('redux-templates/sectionslist');\n return {\n pageData: getPageData(),\n loading: getLoading(),\n activeItemType: getActiveItemType(),\n activeCollectionData: getActiveCollectionData()\n };\n })\n])(CollectionView);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {apiFetch} = wp;\nconst {useState} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch} = wp.data;\nconst {Spinner} = wp.components;\nconst {parse} = wp.blocks;\nconst {__} = wp.i18n;\nimport {BlockPreview} from '@wordpress/block-editor';\n\nimport './style.scss'\n\nimport {Modal, ModalManager} from '../../modal-manager'\nimport reject from 'lodash/reject';\n\nfunction SavedView(props) {\n const {insertBlocks, discardAllErrorMessages, appendErrorMessage, clearSearch} = props;\n const [savedSections, setSavedSections] = useState([]);\n const [dataLoaded, setDataLoaded] = useState(false);\n if (dataLoaded === false) {\n // Initial fetch\n apiFetch({path: 'redux/v1/templates/get_saved_blocks'}).then(response => {\n if (response.success) {\n setSavedSections(response.data);\n } else {\n appendErrorMessage(response.data.error);\n }\n setDataLoaded(true);\n }).catch(error => {\n appendErrorMessage(error.code + ' : ' + error.message);\n setDataLoaded(true);\n });\n }\n\n // To display into columns, map data into column-friendly data\n const mapToColumnData = (data, n = 4, balanced = true) => {\n let out = [], i;\n\n for (i = 0; i < n; i++) out[i] = [];\n data.forEach((section, i) => {\n out[i % n].push(section);\n });\n return out;\n }\n\n // saved block import is special\n const importSections = (rawData) => {\n let pageData = parse(rawData);\n insertBlocks(pageData);\n ModalManager.close(); //close modal\n }\n\n const deleteSavedSection = (event, sectionID) => {\n event.stopPropagation();\n discardAllErrorMessages();\n const options = {\n method: 'POST',\n path: 'redux/v1/templates/delete_saved_block/?block_id=' + sectionID,\n }\n apiFetch(options).then(response => {\n if (response.success) {\n // on successful remove, we will update the blocks as well.\n setSavedSections(reject(savedSections, {'ID': sectionID}));\n } else {\n appendErrorMessage(response.data.error);\n }\n }).catch(error => {\n appendErrorMessage(error.code + ' : ' + error.message);\n });\n }\n if (dataLoaded === true)\n return (\n <div className=\"redux-templates-two-sections__grid\">\n {\n (savedSections && savedSections.length > 0) ?\n mapToColumnData(savedSections).map((column, key) => {\n let sections = column.map((section, i) => {\n let blocks = parse(section.post_content);\n return (\n <div className=\"redux-templates-two-section\" key={i}\n onClick={() => importSections(section.post_content)}>\n\n <div className=\"preview-image-wrapper\">\n <BlockPreview blocks={blocks} />\n </div>\n <div className=\"saved-section-title\">\n {section.post_title}\n </div>\n <div className=\"redux-templates-two-section-remove\"\n onClick={e => deleteSavedSection(e, section.ID)}>\n <i className=\"fas fa-trash\"></i>\n </div>\n </div>\n );\n })\n\n return (\n <div className=\"redux-templates-two-sections__grid__column\" key={key}\n style={{width: '25%', flexBasis: '25%'}}>\n {sections}\n </div>\n );\n })\n :\n <div className=\"no-section\">\n Nothing here yet, make a reusuable block first.\n </div>\n }\n </div>\n );\n else\n return (\n <div>\n <div style={{ height: '600px' }}>\n <div className=\"redux-templates-modal-loader\">\n <Spinner />\n </div>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n insertBlocks\n } = dispatch('core/block-editor');\n\n const {\n appendErrorMessage,\n discardAllErrorMessages\n } = dispatch('redux-templates/sectionslist');\n\n return {\n insertBlocks,\n appendErrorMessage,\n discardAllErrorMessages\n };\n })\n])(SavedView);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const { useState, useEffect } = wp.element;\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\nconst { Spinner } = wp.components;\n\nimport SingleItem from '../../components/single-item'\nimport MultipleItem from '../../components/multiple-item'\nimport Pagination from '../../components/pagination'\nimport './style.scss'\n\nimport {columnMap, pageSizeMap} from '../../stores/helper';\n\nfunction TemplateList(props) {\n const { pageData, loading, activeItemType, activeCollection, columns, currentPage } = props;\n const { setActiveCollection} = props;\n const [columnizedData, setColumnizedData] = useState([]);\n const [shouldShowPagination, setShouldShowPagination] = useState(false);\n const getBackgroundImage = (url) => {\n if (!url) {\n return redux_templates.plugin + 'assets/img/redux-templates-medium.jpg';\n }\n return url;\n }\n\n const onSelectCollection = (collectionID) => {\n setActiveCollection(collectionID);\n }\n\n useEffect(() => {\n let newData = [], index = 0;\n let colStr = (columns === '') ? 'medium' : columns;\n const columnsCount = columnMap[colStr];\n const pageSize = pageSizeMap[colStr];\n for (let i = 0; i < columnsCount; i++)\n newData[i] = [];\n if (pageData) {\n const lowerLimit = activeItemType !== 'collection' ? (currentPage * pageSize) + 1 : 1;\n const upperLimit = activeItemType !== 'collection' ? (currentPage + 1) * pageSize : pageData.length;\n for ( index = lowerLimit; index <= upperLimit && index <= pageData.length; index++) {\n newData[(index - 1) % columnsCount].push({...pageData[index - 1], index: index - 1});\n }\n }\n setColumnizedData(newData);\n setShouldShowPagination(activeItemType !== 'collection' && pageData && pageSize < pageData.length);\n }, [columns, pageData]);\n\n\n if (!loading)\n return (\n <div id=\"modalContainer\" className=\"redux-templates-template-list-modal\">\n <div className=\"redux-templates-builder-template-list-container\">\n <div id=\"collections-sections-list\" className={`redux-templates-builder-page-templates ${columns}`}>\n { columnizedData &&\n columnizedData.map((columnData, colIndex) => (\n <div className=\"redux-templates-pagelist-column\" key={colIndex}>\n {\n columnData &&\n columnData.map((data, cellIndex) => (\n (activeItemType !== 'collection' || activeCollection !== null) ?\n <SingleItem\n key={cellIndex}\n index={data.index}\n />\n :\n <MultipleItem\n key={cellIndex}\n data={data}\n index={data.index}\n itemType={activeItemType}\n spinner={false}\n onSelectCollection={onSelectCollection}\n />\n ))\n }\n </div>\n ))\n }\n </div>\n { shouldShowPagination && <Pagination /> }\n </div>\n </div>\n );\n return (\n <div>\n <div style={{ height: '600px' }}>\n <div className=\"redux-templates-modal-loader\">\n <Spinner />\n </div>\n </div>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setActiveCollection\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setActiveCollection\n };\n }),\n\n withSelect((select, props) => {\n const { getPageData, getLoading, getColumns, getActiveItemType, getActiveCollection, getCurrentPage} = select('redux-templates/sectionslist');\n return { pageData: getPageData(), loading: getLoading(), activeItemType: getActiveItemType(), columns: getColumns(), activeCollection: getActiveCollection(), currentPage: getCurrentPage() };\n })\n])(TemplateList);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\nimport {Component, Fragment} from '@wordpress/element';\n\nvar onClose, node, customizerNode, feedbackNode = null;\n\nexport class Modal extends Component {\n constructor(props) {\n super(props)\n this.state = {\n afterOpen: false,\n beforeClose: false,\n }\n }\n\n close() {\n if (!this.props.onRequestClose || this.props.onRequestClose()) {\n if (customizerNode) ModalManager.closeCustomizer()\n else ModalManager.close()\n }\n }\n\n componentDidMount() {\n const {openTimeoutMS, closeTimeoutMS} = this.props\n setTimeout(() => this.setState({afterOpen: true}), openTimeoutMS ? openTimeoutMS : 150)\n\n onClose = (callback) => {\n this.setState({beforeClose: true}, () => {\n this.closeTimer = setTimeout(callback, closeTimeoutMS ? closeTimeoutMS : 150)\n });\n };\n }\n\n componentWillUnmount() {\n onClose = null;\n clearTimeout(this.closeTimer)\n }\n\n render() {\n\n return (\n <Fragment>\n <span onClick={e => {\n this.close()\n }} className={'redux-templates-pagelist-modal-overlay'}>&nbsp;</span>\n <div className={ this.props.compactMode ? 'redux-templates-modal-inner' : 'redux-templates-pagelist-modal-inner'} onClick={e => e.stopPropagation()}>\n {this.props.children}\n </div>\n </Fragment>\n );\n }\n}\n\n\nexport const ModalManager = {\n open(component) {\n if (onClose) {\n this.close();\n // throw __('There is already one modal.It must be closed before one new modal will be opened');\n }\n if (!node) {\n node = document.createElement('div')\n node.className = 'redux-templates-builder-modal'\n document.body.appendChild(node)\n }\n wp.element.render(component, node)\n document.body.classList.add('redux-templates-builder-modal-open')\n },\n close() {\n onClose && onClose(() => {\n wp.element.unmountComponentAtNode(node)\n document.body.classList.remove('redux-templates-builder-modal-open')\n });\n },\n openCustomizer(component) {\n if (!customizerNode) {\n customizerNode = document.createElement('div');\n document.body.appendChild(customizerNode);\n }\n wp.element.render(component, customizerNode);\n },\n closeCustomizer() {\n if (customizerNode) {\n wp.element.unmountComponentAtNode(customizerNode);\n customizerNode = false\n }\n },\n openFeedback(component) {\n feedbackNode = document.getElementsByClassName('feedback-wrapper');\n if (!feedbackNode || feedbackNode.length < 1) {\n feedbackNode = document.createElement('div');\n feedbackNode.className = 'feedback-wrapper';\n document.body.appendChild(feedbackNode);\n } else {\n feedbackNode = feedbackNode[0];\n }\n wp.element.render(component, feedbackNode);\n },\n closeFeedback() {\n if (feedbackNode) {\n wp.element.unmountComponentAtNode(feedbackNode);\n feedbackNode = false;\n }\n },\n isCustomizerOpened() {\n return customizerNode ? true : false;\n },\n hide () {\n document.body.classList.remove('redux-templates-builder-modal-open')\n node.classList.add('hidden')\n },\n show () {\n document.body.classList.add('redux-templates-builder-modal-open')\n if (node)\n node.classList.remove('hidden')\n }\n}\n","const {__} = wp.i18n\n\nfunction FullyOverlayFooter(props) {\n const {previewClass, expandedClass, pro} = props;\n const {onChangePreviewClass, onToggleExpanded, onImport} = props;\n const previewClassesList = [\n {className: 'preview-desktop', screenReaderText: 'Enter desktop preview mode'},\n {className: 'preview-tablet', screenReaderText: 'Enter tablet preview mode'},\n {className: 'preview-mobile', screenReaderText: 'Enter mobile preview mode'}\n ];\n\n const toggleExpanded = () => {\n let nextStatus = (expandedClass === 'collapsed') ? 'expanded' : 'collapsed';\n onToggleExpanded(nextStatus);\n }\n return (\n <div className=\"wp-full-overlay-footer\">\n <div className=\"footer-import-button-wrap redux-templates-import-button-group\">\n\n {\n pro ?\n <div className=\"action-buttons\">\n <a className=\"redux-templates-button-download\" target=\"_blank\" href=\"http://redux-templates.io/\">\n <i className=\"fas fa-upload\"></i>&nbsp;{__('Upgrade to Pro', redux_templates.i18n)}\n </a>\n </div>\n :\n <a className=\"button button-hero hide-if-no-customize button-primary redux-templates-import\"\n onClick={onImport}>\n <i className=\"fas fa-download\"></i>&nbsp;{__('Import', redux_templates.i18n)}\n </a>\n }\n\n </div>\n <button type=\"button\" className=\"collapse-sidebar button\" onClick={toggleExpanded} aria-expanded=\"true\"\n aria-label=\"Collapse Sidebar\">\n <span className=\"collapse-sidebar-arrow\"></span>\n <span className=\"collapse-sidebar-label\">{__('Collapse', redux_templates.i18n)}</span>\n </button>\n\n <div className=\"devices-wrapper\">\n <div className=\"devices\">\n {\n previewClassesList.map((previewObject, i) => {\n return (\n <button type=\"button\"\n className={previewClass === previewObject.className ? previewObject.className + ' active' : previewObject.className}\n aria-pressed=\"true\" key={i}\n onClick={() => onChangePreviewClass(previewObject.className)}>\n <span className=\"screen-reader-text\">{previewObject.screenReaderText}</span>\n </button>\n );\n })\n }\n </div>\n </div>\n\n </div>\n );\n}\n\nexport default FullyOverlayFooter;\n","const {__} = wp.i18n\n\nfunction FullyOverlayHeader(props) {\n const {onCloseCustomizer, onNextBlock, onPrevBlock, onImport, pro} = props;\n return (\n <div className=\"wp-full-overlay-header\">\n <button className=\"close-full-overlay\" onClick={onCloseCustomizer}>\n <span className=\"screen-reader-text\">{__('Close', redux_templates.i18n)}</span>\n </button>\n <button className=\"previous-theme\" onClick={onPrevBlock}>\n <span className=\"screen-reader-text\">{__('Previous', redux_templates.i18n)}</span>\n </button>\n <button className=\"next-theme\" onClick={onNextBlock}>\n <span className=\"screen-reader-text\">{__('Next', redux_templates.i18n)}</span>\n </button>\n {\n pro === false &&\n <a className=\"button hide-if-no-customize button-primary redux-templates-section-import\" onClick={onImport}\n data-import=\"disabled\">\n {__('Import', redux_templates.i18n)}\n </a>\n }\n </div>\n );\n}\n\nexport default FullyOverlayHeader;\n","import {Tooltip, Panel, PanelBody, PanelRow} from '@wordpress/components';\nimport {more} from '@wordpress/icons';\n\n\nconst {useState, useEffect} = wp.element\nconst {__} = wp.i18n\n\nimport * as Icons from '~redux-templates/icons'\nimport copy from 'clipboard-copy';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper'\nimport React from 'react';\n\nexport default function SidebarContent(props) {\n\tconst {itemData, pro} = props;\n\tconst {hash, name, image, blocks, proDependencies, installDependencies, url, source} = itemData;\n\tconst [copied, setCopied] = useState(false);\n\n\tconst copyHash = () => {\n\t\tcopy(hash.substring(0, 7));\n\t\tsetCopied(true);\n\t\tsetTimeout(function () {\n\t\t\tsetCopied(false);\n\t\t}, 3500);\n\t}\n\n\tuseEffect(() => {\n\t\tsetCopied(false);\n\t}, [itemData]);\n\n\n\tif ('redux' === source) {\n\t\tconst source_instance = redux_templates.supported_plugins['redux-framework'];\n\t} else {\n\t\tconst source_instance = redux_templates.supported_plugins[source];\n\t}\n\n\treturn (\n\t\t<div className=\"wp-full-overlay-sidebar-content\">\n\t\t\t<div className=\"install-theme-info\">\n\t\t\t\t<h3 className=\"theme-name\">{name} { url && <Tooltip position={'top right'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext={__('Full Preview', redux_templates.i18n)}><a href={url}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"><i\n\t\t\t\t\tclassName=\"fas fa-external-link-alt\"/></a></Tooltip> }</h3>\n\t\t\t\t<div className=\"theme-screenshot-wrap\">\n\t\t\t\t\t<SafeImageLoad url={image} className=\"theme-screenshot\"/>\n\t\t\t\t\t{pro ?\n\t\t\t\t\t\t<span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span> : ''}\n\t\t\t\t</div>\n\n\t\t\t\t<h5 className=\"theme-hash\">\n\t\t\t\t\t<div className=\"button-container\">\n <span className=\"button button-secondary the-copy\" onClick={copyHash}\n\t\t\t\t\t\t\t title={__('Copy Identifier', redux_templates.i18n)}><i\n\t\t\t\t\t\t\tclassName=\"fa fa-copy\" aria-hidden=\"true\"></i></span>\n\t\t\t\t\t\t<span onClick={copyHash} className=\"button button-secondary the-hash\"\n\t\t\t\t\t\t\t title={__('Identifier', redux_templates.i18n)}>{hash.substring(0, 7)}</span>\n\t\t\t\t\t\t{copied && <span className=\"copied hideMe\"><br/>{__('copied', redux_templates.i18n)}</span>}\n\t\t\t\t\t</div>\n\n\t\t\t\t</h5>\n\t\t\t</div>\n\t\t\t{ blocks && blocks.length > 0 &&\n\t\t\t<PanelBody title={__('Blocks Used', redux_templates.i18n)} icon={more} initialOpen={false}>\n\t\t\t\t<PanelRow className=\"redux-block-pills\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tblocks.map((block, i) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<li key={i}><span>{block}</span></li>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t</ul>\n\t\t\t\t</PanelRow>\n\t\t\t</PanelBody>\n\t\t\t}\n\t\t\t{\n\t\t\t\tinstallDependencies && installDependencies.length > 0 &&\n\t\t\t\t<PanelBody title={__('Required Plugins', redux_templates.i18n)} icon={more} initialOpen={false}>\n\t\t\t\t\t<PanelRow className=\"requirements-list-div\">\n\t\t\t\t\t\t<div className=\"requirements-list\">\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinstallDependencies.map(pluginKey => {\n\t\t\t\t\t\t\t\t\t\tconst pluginInstance = redux_templates.supported_plugins[pluginKey];\n\t\t\t\t\t\t\t\t\t\tif (!pluginInstance) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Missing plugin details for ' + pluginKey);\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst plugin_name = pluginKey.replace('-pro', '').replace('-premium', '').replace(/\\W/g, '').toLowerCase();\n\t\t\t\t\t\t\t\t\t\tif ('redux' === plugin_name) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst IconComponent = Icons[plugin_name];\n\t\t\t\t\t\t\t\t\t\treturn (\n\n\t\t\t\t\t\t\t\t\t\t\t<li key={pluginKey}>\n\t\t\t\t\t\t\t\t\t\t\t\t{IconComponent && <IconComponent/>}\n\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"redux-templates-dependency-name\">{pluginInstance.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{requiresInstall(itemData) &&\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip position={'bottom center'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t text={__('Not Installed', redux_templates.i18n)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='redux-icon-wrapper'><i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"fa fa-exclamation-triangle\"/></div>\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t{pluginInstance.url ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip position={'top right'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t text={__('Visit Plugin Website', redux_templates.i18n)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"pluginURL\"><a href={pluginInstance.url}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t target=\"_blank\"><i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"fas fa-external-link-alt\"/></a></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip> : null}\n\t\t\t\t\t\t\t\t\t\t\t</li>);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t}\n\t\t\t{\n\t\t\t\t'redux' !== source &&\n\t\t\t\t<PanelBody title={__('Template Details', redux_templates.i18n)} icon={more} initialOpen={false}>\n\t\t\t\t\t<PanelRow className=\"redux-block-pills\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t{'redux' !== source && <li><strong>Author</strong>: {source.slice(0,1).toUpperCase() + source.slice(1, source.length)}</li>}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t}\n\t\t</div>\n\t);\n}\n","import FullyOverlayHeader from './FullyOverlayHeader';\nimport SidebarContent from './SidebarContent';\nimport FullyOverlayFooter from './FullyOverlayFooter';\nimport {isBlockPro} from '../stores/helper';\n\nfunction SitePreviewSidebar(props) {\n const {itemData, previewClass, expandedClass, onImport} = props;\n const {onCloseCustomizer, onChangePreviewClass, onToggleExpanded, onNextBlock, onPrevBlock} = props;\n const isPro = isBlockPro(itemData.pro, itemData.source);\n\n return (\n <div className=\"wp-full-overlay-sidebar\">\n <FullyOverlayHeader onCloseCustomizer={onCloseCustomizer} onNextBlock={onNextBlock}\n onPrevBlock={onPrevBlock}\n pro={isPro} onImport={onImport}/>\n <SidebarContent itemData={itemData} pro={isPro} />\n <FullyOverlayFooter previewClass={previewClass} expandedClass={expandedClass} pro={isPro}\n onChangePreviewClass={onChangePreviewClass} onToggleExpanded={onToggleExpanded}\n onImport={onImport}/>\n </div>\n );\n}\n\n\nexport default SitePreviewSidebar;\n","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect, useReducer} = wp.element\nconst {Spinner} = wp.components;\nimport SitePreviewSidebar from './SitePreviewSidebar';\nimport {ModalManager} from '../modal-manager'\nimport ImportWizard from '../modal-import-wizard';\nimport {Fragment} from 'react';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport {processImportHelper} from '~redux-templates/stores/actionHelper';\nimport './style.scss';\n\nconst initialState = {\n currentPageData: null,\n currentIndex: 0,\n itemData: null,\n imageURL: ''\n};\n\nconst LOADING_RESET = 0;\nconst IN_PROGRESS = 1;\nconst FULLY_LOADED = 2;\n\nconst previewReducer = (state, action) => {\n let currentPageData;\n let imageURL;\n switch(action.type) {\n case 'INDEX':\n currentPageData = state.currentPageData;\n break;\n case 'DATA':\n currentPageData = action.currentPageData;\n break;\n }\n const itemData = currentPageData[action.currentIndex];\n if (itemData.image_full)\n imageURL = itemData.image_full;\n else\n imageURL = itemData.image\n\n return {\n currentPageData,\n currentIndex: action.currentIndex,\n imageURL,\n itemData\n };\n}\n\nfunction PreviewModal(props) {\n\n const {startIndex, currentPageData} = props;\n const {setImportingTemplate, importingTemplate} = props;\n\n const [state, dispatch] = useReducer(previewReducer, initialState);\n\n const [previewClass, setPreviewClass] = useState('preview-desktop')\n const [expandedClass, toggleExpanded] = useState('expanded')\n const [pressedKey, setPressedKey] = useState(null);\n const [loading, setLoading] = useState(IN_PROGRESS);\n const [wrapperClassName, setWrapperClassName] = useState('wp-full-overlay sites-preview theme-install-overlay ');\n\n // Key event handling : event listener set up\n useEffect(() => {\n const handleKeyDown = ({keyCode}) => {\n setPressedKey(keyCode);\n }\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n }\n }, []);\n\n // Key Event handling\n useEffect(() => {\n if (pressedKey !== null) {\n if (pressedKey === 37) onPrevBlock();\n if (pressedKey === 39) onNextBlock();\n setPressedKey(null);\n }\n }, [pressedKey])\n\n useEffect(() => {\n if (isNaN(startIndex) === false && currentPageData)\n dispatch({ type: 'DATA', currentIndex: startIndex, currentPageData });\n }, [startIndex, currentPageData]);\n\n // mobile/desktop preview status and sidebar collapse/expand\n useEffect(() => {\n setWrapperClassName(['wp-full-overlay sites-preview theme-install-overlay ', previewClass, expandedClass].join(' '));\n }, [previewClass, expandedClass])\n\n const onCloseCustomizer = () => {\n ModalManager.closeCustomizer();\n }\n\n const onNextBlock = () => {\n if (state.currentIndex < currentPageData.length - 1) {\n startLoading();\n dispatch({ type: 'INDEX', currentIndex: state.currentIndex + 1 });\n }\n }\n\n const onPrevBlock = () => {\n if (state.currentIndex > 0) {\n setLoading();\n dispatch({ type: 'INDEX', currentIndex: state.currentIndex - 1 });\n }\n }\n\n const startLoading = () => {\n setLoading(LOADING_RESET);\n setTimeout(() => {\n setLoading(IN_PROGRESS);\n }, 100)\n }\n\n\n const importStarterBlock = () => {\n setImportingTemplate(state.itemData);\n ModalManager.closeCustomizer();\n }\n\n const processImport = () => {\n if (importingTemplate) processImportHelper();\n }\n\n // Called from iframe upon successful loading\n const hideSpinner = () => {\n setLoading(FULLY_LOADED);\n }\n\n if (!state || !state.itemData) return null;\n\n return (\n <Fragment>\n <div className={wrapperClassName} style={{display: 'block'}}>\n <SitePreviewSidebar itemData={state.itemData} previewClass={previewClass} expandedClass={expandedClass}\n onNextBlock={onNextBlock} onPrevBlock={onPrevBlock}\n onCloseCustomizer={onCloseCustomizer} onToggleExpanded={e => toggleExpanded(e)}\n onImport={importStarterBlock}\n onChangePreviewClass={e => setPreviewClass(e)}/>\n <div className=\"wp-full-overlay-main loaded\">\n {\n (loading < FULLY_LOADED) && <Spinner />\n }\n {state.itemData.url &&\n <iframe src={(loading === LOADING_RESET) ? '' : state.itemData.url + '?preview=1'} target='Preview' onLoad={hideSpinner}></iframe>\n }\n {!state.itemData.url &&\n <div className='redux-templates-modal-preview-box'>\n <SafeImageLoad url={state.imageURL} />\n </div>\n }\n\n </div>\n </div>\n { importingTemplate && <ImportWizard startImportTemplate={processImport} /> }\n </Fragment>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setImportingTemplate,\n setCustomizerOpened\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setImportingTemplate,\n setCustomizerOpened\n };\n }),\n\n withSelect((select, props) => {\n const {getImportingTemplate} = select('redux-templates/sectionslist');\n return {\n importingTemplate: getImportingTemplate()\n };\n })\n])(PreviewModal);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./modals.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./modals.scss\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./modals.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport { download } from '../export/file';\nconst { Fragment } = wp.element;\nimport { colorizeIcon } from '~redux-templates/icons'\n\nimport { Dashicon } from '@wordpress/components';\n\nfunction ExportPageContentMenuItem( { createNotice, editedPostContent } ) {\n if (!wp.plugins) return null;\n\n const { PluginMoreMenuItem } = wp.editPost;\n\n const exportFullpage = () => {\n const fileContent = JSON.stringify( {\n __file: 'core_block',\n content: editedPostContent,\n }, null, 2 );\n\n const fileName = 'page-template-export.json';\n download( fileName, fileContent, 'application/json' );\n }\n\n\n return (\n <Fragment>\n <PluginMoreMenuItem\n icon={ colorizeIcon( <Dashicon icon=\"migrate\" /> ) }\n role=\"menuitemcheckbox\"\n onClick={ exportFullpage }\n >\n { __( 'Export Page', redux_templates.i18n ) }\n </PluginMoreMenuItem>\n </Fragment>\n );\n}\n\nconst ExportPageContentMenu = compose(\n withSelect( ( select ) => ( {\n editedPostContent: select( 'core/editor' ).getEditedPostAttribute(\n 'content'\n ),\n } ) ),\n withDispatch( ( dispatch ) => {\n const { createNotice } = dispatch( 'core/notices' );\n\n return {\n createNotice,\n };\n } ),\n ifCondition( ( { editedPostContent } ) => editedPostContent.length > 0 )\n)( ExportPageContentMenuItem );\n\nif (wp.plugins) {\n const { registerPlugin } = wp.plugins;\n registerPlugin('redux-templates-export-page', {\n render: ExportPageContentMenu,\n });\n}\n","/**\n * External dependencies\n */\nimport { kebabCase } from 'lodash';\n/**\n * Internal dependencies\n */\n\nimport exportReusableBlock from './reusable';\nimport { download } from './file';\nimport { colorizeIcon } from '~redux-templates/icons'\n\n/**\n * WordPress dependencies\n */\nconst { __ } = wp.i18n;\nconst { withSelect, select } = wp.data;\nconst { compose } = wp.compose;\nconst { Fragment } = wp.element;\nconst { withSpokenMessages } = wp.components;\nconst { serialize } = wp.blocks;\nimport { Dashicon } from '@wordpress/components';\n\n/**\n * Render plugin\n */\nfunction ExportManager(props) {\n\tconst { selectedBlockCount, selectedBlock, selectedBlocks } = props;\n\n\tif (!wp.editPost) return null;\n\n\tconst { PluginBlockSettingsMenuItem } = wp.editPost;\n\tconst saveAsJSON = () => {\n\t\tif ( selectedBlockCount < 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet blocks;\n\t\tlet title = 'redux_templates/export';\n\n\t\tif ( selectedBlockCount === 1 ) {\n\t\t\t//export as reusable when reusable is selected\n\t\t\tif ( selectedBlock.name === 'core/block' ) {\n\t\t\t\texportReusableBlock( selectedBlock.attributes.ref );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tblocks = serialize( selectedBlock );\n\t\t\ttitle = selectedBlock.name;\n\t\t}\n\n\t\tif ( selectedBlockCount > 1 ) {\n\t\t\tblocks = serialize( selectedBlocks );\n\t\t}\n\n\t\t//do export magic\n\n\t\tconst fileContent = JSON.stringify( {\n\t\t\t__file: 'core_block',\n\t\t\tcontent: blocks,\n\t\t}, null, 2 );\n\n\t\tconst fileName = 'block-template-' + kebabCase( title ) + '.json';\n\t\tdownload( fileName, fileContent, 'application/json' );\n\t}\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<PluginBlockSettingsMenuItem\n\t\t\t\ticon={ colorizeIcon( <Dashicon icon=\"migrate\" /> ) }\n\t\t\t\tlabel={ __( 'Export Block', redux_templates.i18n ) }\n\t\t\t\tonClick={ saveAsJSON }\n\t\t\t>\n\n\t\t\t</PluginBlockSettingsMenuItem>\n\t\t</Fragment>\n\t);\n}\n\nexport default compose( [\n\twithSelect( () => {\n\t\tconst { getSelectedBlockCount, getSelectedBlock, getMultiSelectedBlocks } = select( 'core/block-editor' );\n\t\tconst { getBlock } = select( 'core/block-editor' );\n\n\t\treturn {\n\t\t\tselectedBlockCount: getSelectedBlockCount(),\n\t\t\tselectedBlock: getSelectedBlock(),\n\t\t\tselectedBlocks: getMultiSelectedBlocks(),\n\t\t\tgetBlock,\n\t\t};\n\t} ),\n\twithSpokenMessages,\n] )( ExportManager );\n","const block_export_json = function (el, type) {\n if (!el) {\n return\n }\n\n if (el) {\n t ? t += '.json' : t = 'block.json', 'object' === ('undefined' === typeof e ? 'undefined' : u(e)) && (el = 1 === a.count ? JSON.stringify(e.shift(), void 0, 4) : JSON.stringify(e, void 0, 4));\n var n = new Blob([el], {\n type: 'text/json'\n }),\n o = document.createEvent('MouseEvents'),\n l = document.createElement('a');\n l.download = t, l.href = window.URL.createObjectURL(n), l.dataset.downloadurl = ['text/json', l.download, l.href].join(':'), o.initMouseEvent('click', !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), l.dispatchEvent(o)\n }\n}\n\nconst block_export_html = function (el, type) {\n if (!el) {\n return\n }\n\n if (el) {\n t ? t += '.json' : t = 'block.json', 'object' === ('undefined' === typeof e ? 'undefined' : u(e)) && (el = 1 === a.count ? JSON.stringify(e.shift(), void 0, 4) : JSON.stringify(e, void 0, 4));\n var n = new Blob([el], {\n type: 'text/json'\n }),\n o = document.createEvent('MouseEvents'),\n l = document.createElement('a');\n l.download = t, l.href = window.URL.createObjectURL(n), l.dataset.downloadurl = ['text/json', l.download, l.href].join(':'), o.initMouseEvent('click', !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), l.dispatchEvent(o)\n }\n}\n\nconst block_export_page = function (el, type) {\n if (!el) {\n return\n }\n\n if (el) {\n t ? t += '.json' : t = 'block.json', 'object' === ('undefined' === typeof e ? 'undefined' : u(e)) && (el = 1 === a.count ? JSON.stringify(e.shift(), void 0, 4) : JSON.stringify(e, void 0, 4));\n var n = new Blob([el], {\n type: 'text/json'\n }),\n o = document.createEvent('MouseEvents'),\n l = document.createElement('a');\n l.download = t, l.href = window.URL.createObjectURL(n), l.dataset.downloadurl = ['text/json', l.download, l.href].join(':'), o.initMouseEvent('click', !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), l.dispatchEvent(o)\n }\n}\n\n/**\n * Downloads a file.\n *\n * @param {string} fileName File Name.\n * @param {string} content File Content.\n * @param {string} contentType File mime type.\n */\nexport function download( fileName, content, contentType ) {\n const file = new window.Blob( [ content ], { type: contentType } );\n\n // IE11 can't use the click to download technique\n // we use a specific IE11 technique instead.\n if ( window.navigator.msSaveOrOpenBlob ) {\n window.navigator.msSaveOrOpenBlob( file, fileName );\n } else {\n const a = document.createElement( 'a' );\n a.href = URL.createObjectURL( file );\n a.download = fileName;\n\n a.style.display = 'none';\n document.body.appendChild( a );\n a.click();\n document.body.removeChild( a );\n }\n}\n","import ExportManager from './export-block-menu-item';\nif (wp.plugins) {\n\tconst { registerPlugin } = wp.plugins;\n\n\tregisterPlugin( 'redux-templates-export', {\n\t\trender: ExportManager,\n\t} );\n}\n","/**\n * External dependencies\n */\nimport { kebabCase } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { download } from './file';\n\n/**\n * Export a reusable block as a JSON file.\n *\n * @param {number} id\n */\nasync function exportReusableBlock( id ) {\n\tconst postType = await wp.apiFetch( { path: '/wp/v2/types/wp_block' } );\n\tconst post = await wp.apiFetch( { path: '/wp/v2/' + postType.rest_base + '/' + id + '?context=edit' } );\n\tconst title = post.title.raw;\n\tconst content = post.content.raw;\n\tconst fileContent = JSON.stringify( {\n\t\t__file: 'wp_block',\n\t\ttitle,\n\t\tcontent,\n\t}, null, 2 );\n\tconst fileName = kebabCase( title ) + '.json';\n\n\tdownload( fileName, fileContent, 'application/json' );\n}\n\nexport default exportReusableBlock;","/**\n * WordPress dependencies\n */\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport {ModalManager} from '../../modal-manager';\nimport LibraryModal from '../../modal-library';\nimport { ReduxTemplatesIconColor } from '~redux-templates/icons';\n\nconst { Fragment } = wp.element;\n\nfunction OpenLibraryContentMenuItem( ) {\n\tif (!wp.plugins) return null;\n\n\tconst { PluginMoreMenuItem } = wp.editPost;\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<PluginMoreMenuItem\n\t\t\t\ticon={ ReduxTemplatesIconColor() }\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tModalManager.open(<LibraryModal />);\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Template Library', redux_templates.i18n ) }\n\t\t\t</PluginMoreMenuItem>\n\t\t</Fragment>\n\t);\n}\n\nconst OpenLibraryContentMenu = compose(\n\twithSelect( ( select ) => ( {\n\t} ) ),\n\twithDispatch( ( dispatch ) => {\n\t} ),\n\n)( OpenLibraryContentMenuItem );\n\nif (wp.plugins) {\n\tconst { registerPlugin } = wp.plugins;\n\tregisterPlugin('redux-open-library-context', {\n\t\trender: OpenLibraryContentMenu,\n\t});\n}\n","import {noop} from 'lodash'\nimport {Fragment} from '@wordpress/element'\nimport {__} from '@wordpress/i18n'\nimport {select, withDispatch} from '@wordpress/data'\nimport {compose} from '@wordpress/compose'\nimport {PluginBlockSettingsMenuItem} from '@wordpress/edit-post'\nimport { ReduxTemplatesIcon } from '../../icons';\nimport {ModalManager} from '../../modal-manager'\nimport FeedbackDialog from '~redux-templates/modal-feedback';\nimport sortBy from 'lodash/sortBy';\nimport map from 'lodash/map';\nimport {getWithExpiry} from '../../stores/helper';\n\n/**\n * Based on: https://github.com/WordPress/gutenberg/blob/master/packages/editor/src/components/convert-to-group-buttons/convert-button.js\n */\n\n\n/**\n * Internal dependencies\n */\n\nconst options = sortBy(getWithExpiry('page_categories_list'), 'label');\nconst schema = {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n title: 'Block Title'\n },\n category: {\n type: 'string',\n title: 'Category',\n enum: map(options, 'value'),\n enumNames: map(options, 'label')\n },\n description: {\n type: 'string',\n title: 'Description'\n }\n }\n}\nconst uiSchema = {\n title: {\n classNames: 'fixed-control'\n },\n category: {\n classNames: 'fixed-control'\n },\n description: {\n 'ui:widget': 'textarea',\n }\n};\n\nexport function ShareBlockButton({clientIds})\n{\n // Only supported by WP >= 5.3.\n if (!clientIds) {\n return null\n }\n\n const onShareBlock = () => {\n const data = {\n postID: select('core/editor').getCurrentPostId(),\n editor_blocks: select('core/block-editor').getBlocksByClientId(clientIds),\n type: 'block'\n };\n ModalManager.openFeedback(\n <FeedbackDialog\n title={__('Redux Shares', redux_templates.i18n)}\n width={700}\n description={__('Share this design', redux_templates.i18n)}\n schema={schema}\n uiSchema={uiSchema}\n data={data}\n headerImage={<i className=\"fas fa-share header-icon\"></i>}\n endpoint='share'\n onSuccess={data => window.open(data.data.url, '_blank')}\n buttonLabel={__('Submit Template', redux_templates.i18n)}\n />\n )\n }\n\n return (\n <Fragment>\n <PluginBlockSettingsMenuItem\n icon={ReduxTemplatesIcon}\n label={__('Share Block', redux_templates.i18n)}\n onClick={onShareBlock}\n />\n {/*<PluginBlockSettingsMenuItem*/}\n {/* icon={ReduxTemplatesIcon}*/}\n {/* label={__('Export as Reusable Block', redux_templates.i18n)}*/}\n {/* onClick={onExportBlock}*/}\n {/*/>*/}\n </Fragment>\n )\n}\n\nexport default compose([\n\n withDispatch((dispatch, {\n clientIds, onToggle = noop, blocksSelection = [],\n }) => {\n const {\n replaceBlocks,\n } = dispatch('core/block-editor')\n\n return {\n onExportBlock() {\n if (!blocksSelection.length) {\n return\n }\n\n console.log(blocksSelection);\n\n let blocks = wp.data.select('core/block-editor').getBlocks();\n let fileName = 'blocks.json'\n\n const title = select('core/block-editor').getSelectedBlockName();\n const content = select('core/block-editor').getSelectedBlockClientId();\n // const content = post.content.raw;\n const fileContent = JSON.stringify(\n {\n __file: 'wp_block',\n title,\n content,\n },\n null,\n 2\n );\n console.log(fileContent);\n // const theFileName = kebabCase( title ) + '.json';\n //\n // download( theFileName, fileContent, 'application/json' );\n //\n //\n //\n // if (blocksSelection.length == 1) {\n // fileName = blocksSelection[0].name.replace('/', '_') + '.json'\n // }\n //\n // saveData(blocksSelection, fileName, 'json');\n\n onToggle()\n },\n }\n }),\n])(ShareBlockButton)\n","import { withSelect } from '@wordpress/data'\nimport ShareBlockButton from './buttons'\nimport { ReduxTemplatesIcon } from '~redux-templates/icons';\n\nif (wp.plugins) {\n const { registerPlugin } = wp.plugins;\n const Buttons = withSelect( select => {\n const { getSelectedBlockClientIds } = select( 'core/block-editor' )\n\n // Only supported by WP >= 5.3.\n if ( ! getSelectedBlockClientIds ) {\n return {}\n }\n\n return {\n clientIds: getSelectedBlockClientIds(),\n }\n } )( ShareBlockButton );\n\t// TODO - Finish this off and show to users.\n // registerPlugin( 'redux-templates-share-block-btn', {\n // icon: ReduxTemplatesIcon,\n // render: Buttons,\n // } );\n}\n","import Sidebar from './sidebar'\nimport { ReduxTemplatesIcon } from '~redux-templates/icons';\nif (wp.plugins) {\n\tconst { registerPlugin } = wp.plugins;\n\n\t\n\n\tregisterPlugin( 'redux-templates-share', {\n\t\ticon: ReduxTemplatesIcon,\n\t\trender: Sidebar,\n\t} );\n}\n","const {__} = wp.i18n;\nconst {compose} = wp.compose;\nconst {withSelect, select} = wp.data;\nconst {Fragment} = wp.element;\nconst {PanelBody} = wp.components\n\nimport sortBy from 'lodash/sortBy';\nimport map from 'lodash/map';\nimport {ModalManager} from '../../modal-manager'\nimport FeedbackDialog from '~redux-templates/modal-feedback';\nimport {getWithExpiry} from '../../stores/helper';\n\nconst options = sortBy(getWithExpiry('section_categories_list'), 'label');\nconst schema = {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n title: 'Block Title'\n },\n category: {\n type: 'string',\n title: 'Category',\n enum: map(options, 'value'),\n enumNames: map(options, 'label')\n },\n description: {\n type: 'string',\n title: 'Description'\n }\n }\n}\nconst uiSchema = {\n title: {\n classNames: 'fixed-control'\n },\n category: {\n classNames: 'fixed-control'\n },\n description: {\n 'ui:widget': 'textarea',\n }\n};\n\nfunction Sidebar(props) {\n if (!wp.editPost) return null;\n\treturn null; // TODO - Finish fixing this experience.\n const {PluginSidebar, PluginSidebarMoreMenuItem} = wp.editPost;\n const {getEditorBlocks} = props;\n const onShare = () => {\n const data = {\n postID: select('core/editor').getCurrentPostId(),\n editor_blocks: getEditorBlocks(),\n type: 'page'\n };\n ModalManager.openFeedback(\n <FeedbackDialog\n title={__('Redux Shares', redux_templates.i18n)}\n description={__('Share this design', redux_templates.i18n)}\n schema={schema}\n uiSchema={uiSchema}\n data={data}\n width={700}\n headerImage={<i className=\"fas fa-share header-icon\"></i>}\n endpoint='share'\n onSuccess={data => window.open(data.data.url, '_blank')}\n buttonLabel={__('Submit Template', redux_templates.i18n)}\n />\n )\n }\n\n return (\n <Fragment>\n <PluginSidebarMoreMenuItem target=\"redux-templates-share\">\n {__('Redux Template', redux_templates.i18n)}\n </PluginSidebarMoreMenuItem>\n <PluginSidebar name=\"redux-templates-share\" title={__('Redux Shares', redux_templates.i18n)}>\n <PanelBody title={__('Share this Design', redux_templates.i18n)} initialOpen={true}>\n <div className=\"d-flex justify-content-center\">\n <a className=\"button button-primary\" onClick={onShare}>\n <i className=\"fas fa-share\"></i>\n &nbsp;{__('Share this design', redux_templates.i18n)}\n </a>\n </div>\n </PanelBody>\n </PluginSidebar>\n </Fragment>\n );\n}\n\nexport default compose([\n withSelect((select) => {\n const {getEditorBlocks} = select('core/editor');\n return {\n getEditorBlocks\n };\n })\n])(Sidebar);\n","const { parse, createBlock } = wp.blocks;\nconst { apiFetch } = wp;\nconst { dispatch, select } = wp.data;\nconst { getBlockOrder } = select( 'core/block-editor' );\nconst { getBlockTypes } = select('core/blocks');\nconst { savePost, editPost } = dispatch('core/editor');\nconst { insertBlocks, removeBlocks, multiSelect } = dispatch('core/block-editor');\nconst { createSuccessNotice, createErrorNotice, createNotice, removeNotice } = dispatch('core/notices');\nimport { __ } from '@wordpress/i18n'\nimport { ModalManager } from '~redux-templates/modal-manager';\nimport PreviewModal from '../modal-preview';\nimport FeedbackDialog from '~redux-templates/modal-feedback';\n\n\n// create Block to import template\nexport const handleBlock = (data, installedDependencies) => {\n let block_data = null;\n if ('template' in data) {\n block_data = parse(data.template);\n } else if ('attributes' in data) {\n if (!('innerBlocks' in data)) {\n data.innerBlocks = [];\n }\n if (!('name' in data)) {\n errorCallback('Template malformed, `name` for block not specified.');\n }\n // This kind of plugins are not ready to accept before reloading, thus, we save it into localStorage and just reload for now.\n if (installedDependencies === true) {\n window.redux_templates_tempdata = [...window.redux_templates_tempdata, data];\n return null;\n } else {\n block_data = createBlock(data.name, data.attributes, data.innerBlocks)\n }\n } else {\n errorCallback('Template error. Please try again.');\n }\n return block_data;\n}\n\nexport const processImportHelper = () => {\n const { setImportingTemplate, discardAllErrorMessages, clearSearch } = dispatch('redux-templates/sectionslist');\n const type = select('redux-templates/sectionslist').getActiveItemType() === 'section' ? 'sections' : 'pages';\n const data = select('redux-templates/sectionslist').getImportingTemplate();\n const installedDependencies = select('redux-templates/sectionslist').getInstalledDependencies();\n const isImportToAppend = select('redux-templates/sectionslist').getImportToAppend();\n\n if (type === 'pages') {\n \teditPost({'template': 'redux-templates_full_width'});\n } else {\n\t if ( '' === select( 'core/editor' ).getEditedPostAttribute( 'template' ) ) {\n\t\t editPost({'template': 'redux-templates_contained'});\n\t }\n }\n\n discardAllErrorMessages();\n let the_url = 'redux/v1/templates/template?type=' + type + '&id=' + data.id + '&uid=' + window.userSettings.uid;\n if ('source' in data) {\n the_url += '&source=' + data.source;\n }\n\n const options = {\n method: 'GET',\n path: the_url,\n headers: { 'Content-Type': 'application/json', 'Registered-Blocks': installedBlocksTypes() }\n };\n\n if (dispatch('core/edit-post') && select('core/edit-post').getEditorMode() === 'text') {\n const { switchEditorMode } = dispatch('core/edit-post');\n switchEditorMode()\n }\n window.redux_templates_tempdata = [];\n\n apiFetch(options).then(response => {\n // First, let's give user feedback.\n displayNotice(response.data, {type: 'snackbar'});\n \n if (isImportToAppend === false) {\n const rootBlocksClientIds = getBlockOrder();\n multiSelect(\n rootBlocksClientIds[0],\n rootBlocksClientIds[rootBlocksClientIds.length - 1]\n );\n removeBlocks( rootBlocksClientIds );\n }\n\n if (response.success && response.data) {\n let responseBlockData = response.data;\n\n // Important: Update left count from the response in case of no Redux PRO\n if (redux_templates.mokama !== '1' && isNaN(responseBlockData.left) === false)\n redux_templates.left = responseBlockData.left;\n\n let handledData = [];\n if (responseBlockData.hasOwnProperty('template') || responseBlockData.hasOwnProperty('attributes'))\n handledData = handleBlock(responseBlockData, installedDependencies);\n else\n handledData = Object.keys(responseBlockData).filter(key => key !== 'cache')\n .map(key => handleBlock(responseBlockData[key], installedDependencies));\n\n localStorage.setItem('importing_data', JSON.stringify(data));\n localStorage.setItem('block_data', JSON.stringify(redux_templates_tempdata));\n localStorage.setItem('is_appending', isImportToAppend);\n\n insertBlocks(handledData);\n createSuccessNotice('Template inserted', { type: 'snackbar' });\n\n if (installedDependencies === true)\n savePost()\n .then(() => window.location.reload())\n .catch(() => createErrorNotice('Error while saving the post', { type: 'snackbar' }));\n else {\n ModalManager.close();\n ModalManager.closeCustomizer();\n setImportingTemplate(null);\n }\n afterImportHandling(data, handledData);\n\n } else {\n if (response.success === false)\n errorCallback(response.data.message);\n else\n errorCallback(response.data.error);\n }\n }).catch(error => {\n errorCallback(error.code + ' : ' + error.message);\n });\n}\n\nconst detectInvalidBlocks = (handleBlock) => {\n if (Array.isArray(handleBlock) === true) return handleBlock.filter(block => block.isValid === false);\n return handleBlock && handleBlock.isValid===false ? [handleBlock] : null;\n}\n\n// used for displaying notice from response data\nconst displayNotice = (data, options) => {\n if (data && data.message) {\n const noticeType = data.messageType || 'info';\n createNotice(noticeType, data.message, options)\n }\n}\n\n// show notice or feedback modal dialog based on imported block valid status\nexport const afterImportHandling = (data, handledBlock) => {\n const invalidBlocks = detectInvalidBlocks(handledBlock);\n // get the description from the invalid blocks\n let description = '';\n if (invalidBlocks && invalidBlocks.length < 1)\n description = invalidBlocks.map(block => {\n if (block.validationIssues && Array.isArray(block.validationIssues))\n return block.validationIssues.map(error => {\n return sprintf(...error.args)\n }).join('\\n');\n else\n return null;\n }).join('\\n');\n\n // Prepare Form schema object\n const schema = {\n type: 'object',\n properties: {\n theme_plugins: {\n type: 'boolean',\n title: __('Send theme and plugins', redux_templates.i18n),\n default: true\n },\n send_page_content: {\n type: 'boolean',\n title: __('Send page content', redux_templates.i18n),\n default: true\n },\n template_id: {\n type: 'string',\n default: data.hash,\n title: __('Template ID', redux_templates.i18n)\n },\n description: {\n type: 'string',\n default: description,\n title: __('Description', redux_templates.i18n)\n },\n\n }\n }\n const uiSchema = {\n description: {\n 'ui:widget': 'textarea',\n },\n template_id: {\n 'ui:disabled': true,\n classNames: 'fixed-control'\n }\n };\n\n const feedbackData = {\n content: handledBlock\n };\n if (invalidBlocks && invalidBlocks.length > 0) { // in case there\n createNotice('error', 'Please let us know if there was an issue importing this Redux template.', {\n isDismissible: true,\n id: 'redux-templatesimportfeedback',\n actions: [\n {\n onClick: () => ModalManager.openFeedback(<FeedbackDialog\n title={__('Thank you for reporting an issue.', redux_templates.i18n)}\n description={__('We want to make Redux perfect. Please send whatever you are comfortable sending, and we will do our best to resolve the problem.', redux_templates.i18n)}\n schema={schema}\n uiSchema={uiSchema}\n data={feedbackData}\n ignoreData={true}\n headerImage={<img className=\"header-background\" src={`${redux_templates.plugin}assets/img/popup-contact.png` } />}\n buttonLabel={__('Submit Feedback', redux_templates.i18n)}\n />),\n label: 'Report an Issue',\n isPrimary: true,\n }\n ],\n });\n }\n}\n\n// reload library button handler\nexport const reloadLibrary = () => {\n const { setLoading, setLibrary } = dispatch('redux-templates/sectionslist');\n setLoading(true);\n apiFetch({\n path: 'redux/v1/templates/library?no_cache=1',\n method: 'POST',\n data: {\n 'registered_blocks': installedBlocksTypes(),\n }\n }).then((newLibrary) => {\n setLoading(false);\n setLibrary(newLibrary.data);\n }).catch((error) => {\n errorCallback(error);\n });\n}\n\n\nexport const installedBlocks = () => {\n let installed_blocks = getBlockTypes();\n return Object.keys(installed_blocks).map(key => {\n return installed_blocks[key]['name'];\n })\n}\nexport const installedBlocksTypes = () => {\n let installed_blocks = getBlockTypes();\n\n let names = Object.keys(installed_blocks).map(key => {\n if (!installed_blocks[key]['name'].includes('core')) {\n return installed_blocks[key]['name'].split('/')[0];\n }\n })\n let unique = [...new Set(names)];\n var filtered = unique.filter(function (el) {\n return el;\n });\n\n return filtered\n}\n\nexport const openSitePreviewModal = (index, pageData) => {\n ModalManager.openCustomizer(\n <PreviewModal startIndex={index} currentPageData={pageData} />\n )\n}\n\nconst errorCallback = (errorMessage) => {\n const { appendErrorMessage, setImportingTemplate, setActivateDialogDisplay } = dispatch('redux-templates/sectionslist');\n if (errorMessage === 'Please activate Redux') {\n setActivateDialogDisplay(true);\n redux_templates.left = 0;\n } else {\n appendErrorMessage(errorMessage);\n setImportingTemplate(null);\n }\n}\n","export const actions = {\n setLibrary( library ) {\n return {\n type: 'SET_LIBRARY',\n library\n };\n },\n fetchLibraryFromAPI( path ) {\n return {\n type: 'FETCH_LIBRARY_FROM_API',\n path,\n };\n },\n setActiveItemType( activeItemType ) {\n return {\n type: 'SET_ACTIVE_ITEM_TYPE',\n activeItemType\n }\n },\n setActiveCategory( activeCategory ) {\n return {\n type: 'SET_ACTIVE_CATEGORY',\n activeCategory\n }\n },\n setActiveCollection( activeCollection ) {\n return {\n type: 'SET_ACTIVE_COLLECTION',\n activeCollection\n }\n },\n setActivePriceFilter( activePriceFilter ) {\n return {\n type: 'SET_ACTIVE_PRICE_FILTER',\n activePriceFilter\n }\n },\n setSearchContext( searchContext ) {\n return {\n type: 'SET_SEARCH_CONTEXT',\n searchContext\n }\n },\n setDependencyFilters( dependencyFilters ) {\n return {\n type: 'SET_DEPENDENCY_FILTERS',\n dependencyFilters\n }\n },\n setCurrentPage( currentPage ) {\n return {\n type: 'SET_CURRENT_PAGE',\n currentPage\n }\n },\n setLoading( loading ) {\n return {\n type: 'SET_LOADING',\n loading\n }\n },\n setColumns( columns ) {\n return {\n type: 'SET_COLUMNS',\n columns\n }\n },\n setSortBy( sortBy ) {\n return {\n type: 'SET_SORT_BY',\n sortBy\n }\n },\n appendErrorMessage( errorMessage ) {\n return {\n type: 'APPEND_ERROR_MESSAGE',\n errorMessage: errorMessage || 'Unknown Error'\n }\n },\n discardAllErrorMessages() {\n return {\n type: 'DISCARD_ALL_ERROR_MESSAGES'\n }\n },\n setInstalledDependencies(installedDependencies) {\n return {\n type: 'SET_INSTALLED_DEPENDENCIES',\n installedDependencies\n }\n },\n setTourOpen(isTourOpen) {\n return {\n type: 'SET_TOUR_OPEN',\n isTourOpen\n }\n },\n setTourActiveButtonGroup(data) {\n return {\n type: 'SET_TOUR_ACTIVE_BUTTON_GROUP',\n data\n }\n },\n setTourPreviewVisible(isVisible) {\n return {\n type: 'SET_PREVIEW_VISIBLE',\n isVisible\n }\n },\n setImportingTemplate(importingTemplate) {\n return {\n type: 'SET_IMPORTING_TEMPLATE',\n importingTemplate\n }\n },\n setChallengeStep(data) {\n return {\n type: 'SET_CHALLENGE_STEP',\n data\n }\n },\n setChallengeOpen(data) {\n return {\n type: 'SET_CHALLENGE_OPEN',\n data\n }\n },\n setChallengeTooltipRect(data) {\n return {\n type: 'SET_CHALLENGE_TOOLTIP_RECT',\n data\n }\n },\n setChallengeFinalStatus(data) {\n return {\n type: 'SET_CHALLENGE_FINAL_STATUS',\n data\n }\n },\n setChallengePassed(data) {\n return {\n type: 'SET_CHALLENGE_PASSED',\n data\n }\n },\n setChallengeListExpanded(data){\n return {\n type: 'SET_CHALLENGE_LIST_EXPANDED',\n data\n }\n },\n setActivateDialogDisplay(data) {\n return {\n type: 'SET_ACTIVATE_DIALOG_DISPLAY',\n data\n }\n },\n setImportToAppend(data) {\n return {\n type: 'SET_IMPORT_TO_APPEND',\n data\n }\n },\n setDependencyFilterRule(data) {\n return {\n type: 'SET_DEPENDENCY_FILTER_RULE',\n data\n }\n },\n selectDependencies(data) {\n return {\n type: 'SELECT_DEPENDENCIES',\n data\n }\n },\n clearSearch() {\n return {\n type: 'CLEAR_SEARCH'\n }\n },\n\tclearState() {\n\t\treturn {\n\t\t\ttype: 'CLEAR_STATE'\n\t\t}\n\t}\n};\n","export const getPluginInstance = (pluginKey) => {\n if (pluginKey in redux_templates.supported_plugins) {\n return redux_templates.supported_plugins[pluginKey];\n }\n return false; // Deal with unknown plugins\n}\n\nexport const needsPluginInstall = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return !pluginInstance || pluginInstance.hasOwnProperty('version') === false;\n}\n\nexport const needsPluginPro = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return (pluginInstance && pluginInstance.hasOwnProperty('has_pro') && pluginInstance.has_pro &&\n (pluginInstance.hasOwnProperty('is_pro') === false || pluginInstance.is_pro === false));\n}\n\n\nexport const pluginInfo = (pluginKey) => {\n let pluginInstance = processPlugin(pluginKey);\n if (!pluginInstance) return {name: null, slug: null, url: null};\n return pluginInstance\n}\n\n\nexport const processPlugin = (pluginKey) => {\n let pluginInstance = {...getPluginInstance(pluginKey)};\n if (!pluginInstance) {\n return pluginInstance\n }\n\n if ('free_slug' in pluginInstance && pluginInstance['free_slug'] in redux_templates.supported_plugins) {\n let new_instance = {...getPluginInstance(pluginInstance.free_slug)}\n new_instance.free_slug = pluginInstance.free_slug\n new_instance.name = pluginInstance.name\n if (!('is_pro' in new_instance)) {\n delete new_instance.version\n }\n pluginInstance = new_instance\n }\n pluginInstance.slug = pluginInstance.slug ? pluginInstance.slug : pluginKey;\n\n return pluginInstance\n}\n\nexport const requiresPro = (data) => {\n if (data && data.proDependenciesMissing && data.proDependenciesMissing.length > 0) {\n if (isReduxProInstalled()) { // redux pro installed, then skip merged plugins\n return data.proDependenciesMissing.filter((plugin) => isPluginReduxProMerged(plugin) === false).length > 0\n }\n return true;\n }\n return false;\n}\nexport const requiresInstall = (data) => {\n if (data && data.installDependenciesMissing && data.installDependenciesMissing.length > 0) {\n return true;\n }\n if (isReduxProInstalled() && data.proDependenciesMissing) { // redux pro installed, then include merged plugins\n return data.proDependenciesMissing.filter((plugin) => isPluginReduxProMerged(plugin)).length > 0\n }\n return false;\n}\n// Check if redux pro should be installed.\nexport const requiresReduxPro = (data) => {\n if (!data) return false;\n const missingDependencies = [].concat(data.installDependenciesMissing, data.proDependenciesMissing);\n return missingDependencies.reduce((acc, curKey) => {\n if (curKey === 'redux-pro') return true;\n return acc || (isPluginReduxProMerged(curKey) && isReduxProInstalled() === false); // main logic, above were execpetion handling\n }, false);\n}\n\nexport const isPluginReduxProMerged = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return (pluginInstance !== false && pluginInstance.redux_pro === true);\n}\n\nexport const isTemplateReadyToInstall = (data) => {\n return (requiresInstall(data) || requiresPro(data)) ? false : true;\n}\n\nexport const isTemplatePremium = (data, activeDependencyFilter) => {\n if (data && data.proDependencies !== undefined && data.proDependencies.length > 0) {\n return data.proDependencies.reduce((acc, cur) => {\n if (activeDependencyFilter[cur] === undefined) \n return false;\n return (acc || activeDependencyFilter[cur].value);\n }, false);\n }\n return (data && data.proDependenciesMissing !== undefined && data.proDependenciesMissing.length > 0);\n}\n\nexport const isReduxProInstalled = () => {\n const reduxProPluginInstance = redux_templates.supported_plugins['redux-framework'];\n return reduxProPluginInstance && reduxProPluginInstance.hasOwnProperty('is_pro');\n}","import {isTemplatePremium} from './dependencyHelper';\nimport {missingPluginsArray, NONE_KEY} from './helper';\nconst REDUXTEMPLATES_PRO_KEY = 'redux-pro';\n// Just get current Page Data\nexport const applyCategoryFilter = (pageData, activeCategory) => {\n let currentPageData = [];\n let tempDataID = [];\n if (activeCategory && pageData[activeCategory] && Array.isArray(pageData[activeCategory]) && pageData[activeCategory].length > 0) {\n pageData[activeCategory].map(value => {\n if (!(tempDataID.indexOf(value.ID) > -1)) {\n currentPageData.push(value);\n tempDataID.push(value.ID);\n }\n });\n } else\n for (let key in pageData) {\n Array.isArray(pageData[key]) && pageData[key].map(value => {\n if (!(tempDataID.indexOf(value.ID) > -1)) {\n currentPageData.push(value);\n tempDataID.push(value.ID);\n }\n else {\n if (value.parentID && !(tempDataID.indexOf(value.ID) > -1)) {\n currentPageData.push(value);\n tempDataID.push(value.ID);\n }\n }\n })\n }\n return currentPageData;\n};\n\nexport const applySearchFilter = (pageData, searchContext) => {\n let lowercasedSearchContext = searchContext.toLowerCase();\n if (Array.isArray(pageData)) {\n return pageData.filter(item => (item.name.toLowerCase().indexOf(lowercasedSearchContext) !== -1))\n } else {\n let newPageData = {};\n Object.keys(pageData).forEach(key => {\n newPageData[key] = pageData[key].filter(item => (item.name.toLowerCase().indexOf(lowercasedSearchContext) != -1))\n });\n return newPageData;\n }\n}\n\n\n\nexport const applyHashFilter = (pageData, searchContext) => {\n let lowercasedSearchContext = searchContext.toLowerCase();\n if (Array.isArray(pageData)) {\n return pageData.filter(item => (item.hash && item.hash.toLowerCase().indexOf(lowercasedSearchContext) !== -1))\n } else {\n let newPageData = [];\n Object.keys(pageData).forEach(key => {\n let filteredData = pageData[key].filter(item => (item.hash && item.hash.toLowerCase().indexOf(lowercasedSearchContext) !== -1));\n newPageData = [...newPageData, ...filteredData];\n });\n return newPageData;\n }\n}\n\n// Apply Price filter afterwards : Should make sure if it is a best practise to split this filtering\nexport const applyPriceFilter = (pageData, activePriceFilter, activeDependencyFilter) => {\n if (activePriceFilter !== '') {\n if (Array.isArray(pageData)) {\n return pageData.filter(item => {\n if (activePriceFilter === 'free') return (isTemplatePremium(item, activeDependencyFilter) === false);\n if (activePriceFilter === 'pro') return isTemplatePremium(item, activeDependencyFilter);\n });\n } else {\n let newPageData = {};\n Object.keys(pageData).forEach(key => {\n newPageData[key] = pageData[key].filter(item => {\n if (activePriceFilter === 'free') return (isTemplatePremium(item, activeDependencyFilter) === false);\n if (activePriceFilter === 'pro') return isTemplatePremium(item, activeDependencyFilter);\n });\n });\n return newPageData;\n }\n }\n return pageData;\n}\n\n\nexport const applyDependencyFilters = (pageData, dependencyFilters, dependencyFilterRule) => {\n const truthyDependenciesList = truthyDependencyFiltersList(dependencyFilters);\n if (Array.isArray(pageData)) {\n return pageData.filter(item => isTemplateDependencyFilterIncluded(item, truthyDependenciesList, dependencyFilterRule));\n } else {\n let newPageData = {};\n Object.keys(pageData).forEach(key => {\n newPageData[key] = pageData[key].filter(item => isTemplateDependencyFilterIncluded(item, truthyDependenciesList, dependencyFilterRule));\n });\n return newPageData;\n }\n}\n\nconst isTemplateDependencyFilterIncluded = (item, truthyDependenciesList, dependencyFilterRule) => {\n // console.log(\"now\", item.dependencies, dependencyFilters);\n // No dependencies at all case\n if (!item.dependencies || Object.keys(item.dependencies).length === 0) return truthyDependenciesList.includes(NONE_KEY);\n\n // Normal dependencies filter check\n const filteredList = item.dependencies.filter((dependency) => truthyDependenciesList.includes(dependency));\n\n return dependencyFilterRule ? item.dependencies.length === filteredList.length : filteredList.length > 0; // filter rule = ture => AND operation\n}\n\n// check dependency filter is selected on sidebar\n// Input: dependencyFilter={'qubely', \nexport const valueOfDependencyFilter = (dependencyFilter) => {\n if (dependencyFilter != null && dependencyFilter.hasOwnProperty('value')) return (dependencyFilter.value === true);\n return (dependencyFilter === true);\n}\n\nconst truthyDependencyFiltersList = (dependencyFilters) => {\n return Object.keys(dependencyFilters).filter((key) => dependencyFilters[key].value === true);\n}","import kebabCase from 'lodash/kebabCase'\nimport uniq from 'lodash/uniq';\nimport concat from 'lodash/concat';\nimport flatten from 'lodash/flatten';\nimport sortBy from 'lodash/sortBy';\nimport map from 'lodash/map';\nimport flattenDeep from 'lodash/flattenDeep';\nimport {afterImportHandling} from './actionHelper';\nimport {getPluginInstance, isPluginReduxProMerged} from './dependencyHelper';\nconst {createBlock} = wp.blocks;\nconst {dispatch} = wp.data;\nconst {createSuccessNotice} = dispatch('core/notices');\nconst {insertBlocks} = dispatch('core/block-editor');\n\nconst prefix = 'redux_';\nexport const REDUXTEMPLATES_PRO_KEY = 'redux-pro';\nexport const NONE_KEY = 'core';\nconst EXIPRY_TIME = 5 * 24 * 3600 * 1000;\n\nexport const getCurrentState = (state) => state[state.activeItemType]\n// Helper function not to be exported\nconst convertObjectToArray = (list) => {\n if (!list)\n return [];\n return Object.keys(list).map(key => {\n return {...list[key], ID: key};\n })\n};\n\n// parse categories and section data from section server data\nexport const categorizeData = (list) => {\n let categories = [];\n let data = {};\n\n list.forEach(item => {\n if (item.categories) {\n item.categories.map(catName => {\n let catSlug = kebabCase(catName);\n if (catSlug in data) {\n data[catSlug].push(item)\n } else {\n data[catSlug] = [];\n data[catSlug].push(item)\n }\n let index = -1;\n categories.forEach((change, i) => {\n if (catSlug == change.slug) {\n index = i\n categories[i].ids.push(item.id);\n }\n });\n if (index === -1) {\n categories.push({name: catName, slug: catSlug, ids: [item.id]})\n }\n })\n }\n });\n\n return {categories, data};\n}\n\nexport const parseSectionData = (sections) => {\n const librarySectionData = convertObjectToArray(sections);\n const wholePlugins = uniq(flattenDeep(map(librarySectionData, 'dependencies')));\n const toBeReturned = categorizeData(librarySectionData);\n const categoriesList = toBeReturned.categories.map((category) => {return {label: category.name, value: category.slug}; });\n setWithExpiry('section_categories_list', categoriesList, EXIPRY_TIME);\n return {...toBeReturned, wholePlugins};\n}\n\nexport const parsePageData = (pages) => {\n const libraryPageData = convertObjectToArray(pages);\n const wholePlugins = uniq(flattenDeep(map(libraryPageData, 'dependencies')));\n const toBeReturned = categorizeData(libraryPageData);\n const categoriesList = toBeReturned.categories.map((category) => {return {label: category.name, value: category.slug}; });\n setWithExpiry('page_categories_list', categoriesList, EXIPRY_TIME);\n return {...toBeReturned, wholePlugins};\n}\n\nexport const parseCollectionData = (library) => {\n let libraryCollectionData = convertObjectToArray(library.collections);\n // filter out incomplete data\n libraryCollectionData = libraryCollectionData.filter(collection => collection.pages && collection.pages.length > 0);\n // After common handling, we need to populate homepage data\n libraryCollectionData = libraryCollectionData.map(collection => {\n if (collection.homepage && library.pages[collection.homepage]) collection.homepageData = library.pages[collection.homepage];\n else {\n collection.homepageData = library.pages[collection.pages[0]];\n }\n\n if (collection.pages) {\n collection.installDependenciesMissing = uniq(concat(flatten(collection.pages.map(page => library.pages[page].installDependenciesMissing || []))));\n collection.proDependenciesMissing = uniq(concat(flatten(collection.pages.map(page => library.pages[page].proDependenciesMissing || []))));\n }\n\n return collection;\n });\n const wholePlugins = uniq(flattenDeep(map(libraryCollectionData, 'dependencies')));\n return {...categorizeData(libraryCollectionData), dependencyFilters: {[NONE_KEY]: true, ...library.dependencies}, wholePlugins};\n}\n\n// one of important function\n// get collection children data upon clicking on collection in collections tab\n// always homepage page first, sort alphabetically afterward\nexport const getCollectionChildrenData = (library, activeCollection) => {\n let activeCollectionData = library.collections[activeCollection];\n // sort page except homepage\n let childrenPages = activeCollectionData.pages\n .filter(page => page !== activeCollectionData.homepage)\n .map(child => {\n return {...library.pages[child], ID: child}\n });\n childrenPages = sortBy(childrenPages, 'name');\n // insert homepage at the beginning of the array\n if (activeCollectionData.homepage && library.pages[activeCollectionData.homepage]) {\n childrenPages.unshift(library.pages[activeCollectionData.homepage]);\n }\n return childrenPages;\n}\n\n// Check if the block is pro\nexport const isBlockPro = (pro, source) => {\n if (source && redux_templates.supported_plugins.hasOwnProperty(source))\n return (pro && !redux_templates.supported_plugins[source].is_pro);\n else\n return pro && redux_templates.mokama !== '1';\n}\n\nexport const missingPro = (pro) => {\n return (redux_templates.mokama !== '1' && pro === true);\n}\n\nexport const missingRequirement = (pro, requirements) => {\n if (!requirements) return missingPro(pro);\n else {\n const supported_plugins = redux_templates.supported_plugins;\n for (let i = 0; i < requirements.length; i++) {\n let requirement = requirements[i];\n if (!supported_plugins.hasOwnProperty(requirement.slug))\n return true; // Doesn't have the plugin installed\n else {\n let installedPlugin = supported_plugins[requirement.slug];\n if (Number(requirement.version) > Number(installedPlugin.version) ||\n (requirement.pro === true && installedPlugin.pro === false))\n return true;\n }\n }\n return proCheck;\n }\n}\n\n\nexport const setWithExpiry = (key, value, ttl) => {\n const prefixedKey = prefix + key;\n const now = new Date();\n\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value: value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(prefixedKey, JSON.stringify(item));\n}\n\nexport const getWithExpiry = (key, defaultValue = null) => {\n const prefixedKey = prefix + key;\n const itemStr = localStorage.getItem(prefixedKey);\n\n // if the item doesn't exist, return null\n if (!itemStr) {\n return defaultValue;\n }\n\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(prefixedKey);\n return defaultValue;\n }\n return item.value;\n}\n\n\nexport const handlingLocalStorageData = () => {\n try {\n let blockData = localStorage.getItem('block_data');\n if (!blockData || blockData == null) return;\n blockData = JSON.parse(blockData);\n if (!blockData || blockData == null || blockData.length < 1) return;\n\n blockData = blockData.filter(block => (block.name && block.attributes && block.innerBlocks) )\n .map(block => {\n if (block.name && block.attributes && block.innerBlocks) return createBlock(block.name, block.attributes, block.innerBlocks);\n });\n if (blockData.length > 0) {\n insertBlocks(blockData);\n createSuccessNotice('Template inserted', {type: 'snackbar'});\n }\n // preparing to call after import handling\n let data = localStorage.getItem('importing_data');\n if (!data || data == null) return;\n data = JSON.parse(data);\n afterImportHandling(data, blockData);\n\n // reset the localstorage\n localStorage.setItem('block_data', null);\n localStorage.setItem('importing_data', null);\n } catch (error) {\n alert(error.code + ' : ' + error.message);\n }\n}\n\n\nexport const columnMap = {\n 'large': 2,\n 'medium': 3,\n 'small': 4\n};\n\nexport const pageSizeMap = {\n 'large': 20,\n 'medium': 30,\n 'small': 40\n};\n\nexport const getOnlySelectedDependencyFilters = (dependencyFilters) => {\n return Object.keys(dependencyFilters).filter(key => dependencyFilters[key]);\n}\n\n/*\nInput: dependencies: {getwid: 38, qubely: 82...}\nInput: dependencies: ['getwid', 'qubely', ...]\nResult: {getwid: {value: true, disabled: true}, }\n*/\nexport const getDefaultDependencies = (dependencies) => {\n const unSupportedPlugins = Object.keys(redux_templates.supported_plugins).filter(key => isPluginProActivated(key) === false);\n return dependencies.reduce(\n (acc, cur) => {\n // special handling for pro plugin not activated.\n let value = true;\n if (isProPlugin(cur) && (cur !== REDUXTEMPLATES_PRO_KEY) && isPluginReduxProMerged(cur) === false) value = false; // Not including pro plugin in redux templates\n return {...acc, [cur]: {value, disabled: false}};\n },\n {\n [NONE_KEY]: {value: true, disabled: false}, // Native element is included in default dependencies\n [REDUXTEMPLATES_PRO_KEY]: {value: true, disabled: false} // Redux pro is included in default dependencies\n }\n );\n}\n\nexport const getInstalledDependencies = (dependencies) => {\n const unSupportedPlugins = Object.keys(redux_templates.supported_plugins).filter(key => isPluginProActivated(key) === false);\n return dependencies\n .filter(key => key !== NONE_KEY)\n .reduce(\n (acc, cur) => {\n // special handling for pro plugin not activated.\n let value = true;\n const pluginInstance = getPluginInstance(cur);\n if (pluginInstance) {\n if (isProPlugin(cur) && unSupportedPlugins.indexOf(cur) !== -1) value = false;\n if (isProPlugin(cur) === false && pluginInstance.hasOwnProperty('version') === false) value = false;\n if (cur === REDUXTEMPLATES_PRO_KEY) value = false;\n } else\n value = false;\n return {...acc, [cur]: {value, disabled: false}};\n },\n {\n [NONE_KEY]: {value: true, disabled: false}\n }\n );\n}\n\nconst isProPlugin = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return (pluginInstance && pluginInstance.hasOwnProperty('free_slug'));\n}\n\nconst isPluginProActivated = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n const freePluginInstance = getPluginInstance(pluginInstance.free_slug);\n return (freePluginInstance.hasOwnProperty('version') && freePluginInstance.hasOwnProperty('is_pro') && freePluginInstance.is_pro !== false);\n}\n\nexport const missingPluginsArray = () => {\n return Object.keys(redux_templates.supported_plugins).filter(pluginKey => isProPlugin(pluginKey) && isPluginProActivated(pluginKey) === false);\n}\n\n\n\n/**\n * Get last saved step.\n */\nexport const loadChallengeStep = () => {\n var step = localStorage.getItem( 'reduxChallengeStep' );\n if (step === null)\n return -1;\n step = parseInt( step, 10 );\n return step;\n}\n\n/**\n * Save Challenge step.\n */\nexport const saveChallengeStep = (step) => {\n localStorage.setItem( 'reduxChallengeStep', step );\n}\n","const {apiFetch} = wp;\nconst {registerStore} = wp.data;\n\nimport {initialState, reducer} from './reducer';\nimport {actions} from './actions';\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\nimport countBy from 'lodash/countBy';\nimport map from 'lodash/map';\nimport flattenDeep from 'lodash/flattenDeep';\nimport uniq from 'lodash/uniq';\nimport uniqBy from 'lodash/uniqBy';\nimport {applyCategoryFilter, applySearchFilter, applyHashFilter, applyPriceFilter, applyDependencyFilters, valueOfDependencyFilter} from './filters'\nimport {getCurrentState, getCollectionChildrenData, loadChallengeStep, NONE_KEY} from './helper';\nimport {isTemplatePremium} from './dependencyHelper'\nimport {installedBlocksTypes} from './actionHelper';\n\nconst getOriginalPageData = (state) => {\n if (state.activeItemType === 'collection' && state.collection.activeCollection !== null)\n return getCollectionChildrenData(state.library, state.collection.activeCollection);\n return getCurrentState(state).data;\n};\n\nconst getActivePriceFilter = (state) => {\n return getCurrentState(state).priceFilter;\n};\nconst getSearchContext = (state) => {\n return (state.activeItemType !== 'saved') ? getCurrentState(state).searchContext : null;\n};\n\nconst getActiveCategory = (state) => {\n return state[state.activeItemType].activeCategory;\n};\n\nconst getCurrentPage = (state) => {\n return state[state.activeItemType].currentPage;\n};\nconst getActiveItemType = (state) => {\n return state.activeItemType;\n};\n\n// get relevant page data, apply category, price, search, dependent filters\nconst getPageData = (state, applyDependencyFilter = true) => {\n let pageData = getOriginalPageData(state);\n const searchKeyword = getSearchContext(state);\n let hashFilteredData = [];\n // Hash filter to take priority\n if (state.activeItemType !== 'collection' && searchKeyword.length > 5) hashFilteredData = applyHashFilter(pageData, searchKeyword);\n // Full search for pageData\n if (pageData && Object.keys(pageData).length > 0) {\n pageData = applySearchFilter(pageData, searchKeyword);\n if (applyDependencyFilter) pageData = applyDependencyFilters(pageData, getDependencyFilters(state), getDependencyFilterRule(state));\n\n pageData = applyPriceFilter(pageData, getActivePriceFilter(state), getDependencyFilters(state));\n if (state.collection.activeCollection === null || state.activeItemType !== 'collection') {\n pageData = applyCategoryFilter(pageData, getActiveCategory(state));\n pageData = sortBy(pageData, getCurrentState(state).sortBy);\n }\n return uniqBy([...pageData, ...hashFilteredData], 'ID');\n }\n return null;\n};\n\nconst getDependencyFilters = (state) => {\n return {...getAllDependencFilters(state), ...getCurrentState(state).dependencyFilters};\n};\n\nconst getAllDependencFilters = (state) => {\n return state[state.activeItemType || 'section'].wholePlugins.reduce((acc, cur) => {\n return {...acc, [cur]: {value: false} };\n }, undefined)\n};\n\n\nconst getDependencyFiltersStatistics = (state) => {\n const pageData = getPageData(state, false);\n const dependentPluginsArray = uniq(flattenDeep(map(pageData, 'dependencies')));\n let dependencyFilters = getDependencyFilters(state);\n Object.keys(dependencyFilters)\n .forEach((plugin) => {\n dependencyFilters[plugin] = {...dependencyFilters[plugin], disabled: dependentPluginsArray.indexOf(plugin) === -1}\n })\n dependencyFilters[NONE_KEY] = {value: valueOfDependencyFilter(dependencyFilters[NONE_KEY]), disabled: false};\n return dependencyFilters;\n};\nconst getDependencyFilterRule = (state) => {\n return state[state.activeItemType].dependencyFilterRule;\n};\nregisterStore('redux-templates/sectionslist', {\n\n reducer,\n actions,\n\n selectors: {\n fetchLibraryFromAPI(state) {\n return state.library;\n },\n receive(state) {\n return state.sections;\n },\n\n getActivePriceFilter,\n getSearchContext,\n getDependencyFilters,\n getDependencyFiltersStatistics,\n getActiveItemType,\n getCurrentPage,\n getActiveCategory,\n getDependencyFilterRule,\n getWholePlugins(state) {\n return (state.activeItemType !== 'saved') ? getCurrentState(state).wholePlugins : null;\n },\n // get categories from currentState, sortBy alphabetically, with the count of pageData within the current category\n getCategoryData(state) {\n let categories = [];\n let pageData = getOriginalPageData(state);\n if (pageData && Object.keys(pageData).length > 0) {\n pageData = applySearchFilter(pageData, getSearchContext(state));\n pageData = applyDependencyFilters(pageData, getDependencyFilters(state), getDependencyFilterRule(state));\n pageData = applyPriceFilter(pageData, getActivePriceFilter(state), getDependencyFilters(state));\n }\n if (state.collection.activeCollection === null || state.activeItemType !== 'collection') {\n categories = cloneDeep(getCurrentState(state).categories);\n categories = categories.map(category => {\n const filteredData = map(pageData[category.slug], 'id');\n return {...category, filteredData};\n });\n }\n\n categories = sortBy(categories, 'name');\n return categories;\n },\n // get relevant page data, apply category, price, search, dependent filters\n getPageData,\n\n getStatistics(state) {\n let pageData = getOriginalPageData(state);\n let staticsData = {true: 0, false: 0};\n if (pageData && Object.keys(pageData).length > 0) {\n pageData = applySearchFilter(pageData, getSearchContext(state));\n pageData = applyDependencyFilters(pageData, getDependencyFilters(state), getDependencyFilterRule(state));\n if (state.collection.activeCollection === null || state.activeItemType !== 'collection') pageData = applyCategoryFilter(pageData, getActiveCategory(state));\n staticsData = countBy(pageData, (item) => isTemplatePremium(item, getDependencyFilters(state)) === true);\n }\n return staticsData;\n },\n getLoading(state) {\n return state.loading;\n },\n getColumns(state) {\n return state.columns;\n },\n getSortBy(state) {\n return getCurrentState(state).sortBy;\n },\n getActiveCollection(state) {\n return state.collection.activeCollection;\n },\n getActiveCollectionData(state) {\n if (state.library && state.library.collections && state.collection)\n return state.library.collections[state.collection.activeCollection];\n return null;\n },\n getSaved(state) {\n return state.saved;\n },\n getErrorMessages(state) {\n return state.errorMessages;\n },\n getInstalledDependencies(state) {\n return state.installedDependencies;\n },\n getTourOpen(state) {\n return state.tour.isOpen;\n },\n getTourActiveButtonGroup(state) {\n return state.tour.activeButtonGroup;\n },\n getTourPreviewVisible(state) {\n return state.tour.isPreviewVisible;\n },\n getImportingTemplate(state) {\n return state.importingTemplate;\n },\n getChallengeStep(state) {\n return loadChallengeStep();\n },\n getChallengeOpen(state) {\n return state.challenge.isOpen;\n },\n getChallengeTooltipRect(state) {\n return state.challenge.tooltipRect;\n },\n getChallengeFinalStatus(state) {\n return state.challenge.finalStatus;\n },\n getChallengePassed(state) {\n return state.challenge.passed;\n },\n getChallengeListExpanded(state) {\n return state.challenge.listExpanded;\n },\n getActivateDialogDisplay(state) {\n return state.activateDialog;\n },\n getImportToAppend(state) {\n return state.isImportToAppend;\n }\n },\n\n controls: {\n FETCH_LIBRARY_FROM_API(action) {\n return apiFetch({path: action.path, method: 'POST', data: {registered_blocks: installedBlocksTypes()}});\n },\n FETCH_SAVED_FROM_API(action) {\n return apiFetch({path: action.path, method: 'POST', data: {registered_blocks: installedBlocksTypes()}});\n }\n },\n\n resolvers: {\n * fetchLibraryFromAPI(state) {\n try {\n const receiveSectionResult = yield actions.fetchLibraryFromAPI('redux/v1/templates/library');\n return actions.setLibrary(receiveSectionResult.data);\n } catch (error) {\n return actions.appendErrorMessage(error.code + ' ' + error.message)\n }\n }\n },\n\n initialState\n});\n","import {parseSectionData, parsePageData, parseCollectionData, getInstalledDependencies, NONE_KEY} from './helper';\nimport {getDefaultDependencies} from './helper';\nimport {loadChallengeStep, saveChallengeStep, setWithExpiry, getWithExpiry} from './helper';\nconst EXIPRY_TIME = 5 * 24 * 3600 * 1000;\nexport const initialState = {\n loading: false,\n activeItemType: getWithExpiry('itemType', 'section'),\n library: null,\n columns: getWithExpiry('column', ''),\n errorMessages: [],\n section: {\n categories: [],\n data: {},\n priceFilter: getWithExpiry('section_price', ''),\n activeCategory: getWithExpiry('section_category', ''),\n dependencyFilters: {},\n dependencyFilterRule: getWithExpiry('section_filterRule', true),\n searchContext: '',\n wholePlugins: [],\n sortBy: getWithExpiry('section_sort', 'name'),\n currentPage: getWithExpiry('section_page', 0)\n },\n page: {\n categories: [],\n data: {},\n priceFilter: getWithExpiry('page_price', ''),\n activeCategory: getWithExpiry('page_category', ''),\n dependencyFilters: {},\n dependencyFilterRule: getWithExpiry('page_filterRule', true),\n searchContext: '',\n wholePlugins: [],\n sortBy: getWithExpiry('page_sort', 'name'),\n currentPage: getWithExpiry('page_page', 0)\n },\n collection: {\n categories: [],\n data: {},\n priceFilter: getWithExpiry('collection_price', ''),\n activeCategory: getWithExpiry('collection_category', 'name'),\n dependencyFilters: {},\n dependencyFilterRule: false,\n searchContext: '',\n wholePlugins: [],\n activeCollection: null,\n sortBy: getWithExpiry('collection_sort', 'name'),\n currentPage: getWithExpiry('collection_page', 0)\n },\n installedDependencies: false, // used when deciding should or not reload page after importing the template\n isImportToAppend: true, // append to or replace the current page content for importing\n tour: {\n isOpen: false,\n activeButtonGroup: null,\n isPreviewVisible: false\n },\n challenge: {\n isOpen: false,\n currentStep: loadChallengeStep(),\n tooltipRect: {},\n finalStatus: '',\n passed: getWithExpiry('reduxChallengePassed', false),\n listExpanded: true\n },\n plugins: {},\n importingTemplate: null,\n activateDialog: false\n};\n\nexport const reducer = ( state = initialState, action ) => {\n\n switch ( action.type ) {\n case 'SET_LIBRARY':\n if (!action.library.dependencies) return state;\n redux_templates.supported_plugins = action.library.plugins;\n const dependencies = getDefaultDependencies(Object.keys(action.library.dependencies));\n const parsedSection = parseSectionData(action.library.sections);\n const parsedPage = parsePageData(action.library.pages);\n\t\t\tconst parsedCollection = parseCollectionData(action.library);\n\t\t\tredux_templates.stats = {\n\t\t\t\t'dependencies': Object.keys(action.library.dependencies).length,\n\t\t\t\t'pages': Object.keys(action.library.pages).length,\n\t\t\t\t'sections': Object.keys(action.library.sections).length,\n\t\t\t\t'collections': Object.keys(action.library.collections).length,\n\t\t\t}\n return {\n ...state,\n loading: false,\n library: action.library,\n section: {\n ...state.section,\n ...parsedSection,\n dependencyFilters: getWithExpiry('section_plugin') ? getWithExpiry('section_plugin') : dependencies\n },\n page: {\n ...state.page,\n ...parsedPage,\n dependencyFilters: getWithExpiry('page_plugin') ? getWithExpiry('page_plugin') : dependencies\n },\n collection: {\n ...state.collection,\n ...parsedCollection,\n dependencyFilters: getWithExpiry('collection_plugin') ? getWithExpiry('collection_plugin') : dependencies\n }\n };\n case 'SET_ACTIVE_CATEGORY':\n setWithExpiry(state.activeItemType + '_category', action.activeCategory, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n activeCategory: action.activeCategory\n }\n };\n case 'SET_SEARCH_CONTEXT':\n setWithExpiry(state.activeItemType + '_search', action.searchContext, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n searchContext: action.searchContext\n }\n };\n case 'SET_ACTIVE_PRICE_FILTER':\n setWithExpiry(state.activeItemType + '_price', action.activePriceFilter, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n priceFilter: action.activePriceFilter\n }\n };\n case 'SET_ACTIVE_ITEM_TYPE':\n setWithExpiry('itemType', action.activeItemType, EXIPRY_TIME);\n return {\n ...state,\n activeItemType: action.activeItemType\n };\n case 'SET_DEPENDENCY_FILTERS':\n setWithExpiry(state.activeItemType + '_plugin', action.dependencyFilters, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n dependencyFilters: action.dependencyFilters\n }\n }\n case 'SET_SORT_BY':\n setWithExpiry(state.activeItemType + '_sort', action.sortBy, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n sortBy: action.sortBy\n }\n };\n case 'SET_CURRENT_PAGE':\n setWithExpiry(state.activeItemType + '_page', action.currentPage, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: action.currentPage\n }\n };\n case 'SET_ACTIVE_COLLECTION':\n return {\n ...state,\n collection: {\n ...state.collection,\n activeCollection: action.activeCollection\n }\n };\n case 'SET_LOADING':\n return {\n ...state,\n loading: action.loading\n }\n case 'SET_COLUMNS':\n setWithExpiry('column', action.columns, EXIPRY_TIME);\n return {\n ...state,\n columns: action.columns\n }\n case 'APPEND_ERROR_MESSAGE':\n return {\n ...state,\n errorMessages: state.errorMessages.concat([action.errorMessage])\n }\n case 'DISCARD_ALL_ERROR_MESSAGES':\n return {\n ...state,\n errorMessages: []\n }\n case 'SET_INSTALLED_DEPENDENCIES':\n return {\n ...state,\n installedDependencies: action.installedDependencies\n }\n case 'SET_TOUR_OPEN':\n return {\n ...state,\n tour: {\n ...state.tour,\n isOpen: action.isTourOpen\n }\n };\n case 'SET_TOUR_ACTIVE_BUTTON_GROUP':\n return {\n ...state,\n tour: {\n ...state.tour,\n activeButtonGroup: action.data\n }\n };\n case 'SET_PREVIEW_VISIBLE':\n return {\n ...state,\n tour: {\n ...state.tour,\n isPreviewVisible: action.isVisible\n }\n };\n case 'SET_IMPORTING_TEMPLATE':\n return {\n ...state,\n importingTemplate: action.importingTemplate\n }\n case 'SET_CHALLENGE_STEP':\n saveChallengeStep(action.data);\n return {\n ...state,\n challenge: {\n ...state.challenge,\n currentStep: action.data\n }\n }\n case 'SET_CHALLENGE_OPEN':\n return {\n ...state,\n challenge: {\n ...state.challenge,\n isOpen: action.data\n }\n }\n case 'SET_CHALLENGE_TOOLTIP_RECT':\n return {\n ...state,\n challenge: {\n ...state.challenge,\n tooltipRect: action.data\n }\n }\n case 'SET_CHALLENGE_FINAL_STATUS':\n return {\n ...state,\n challenge: {\n ...state.challenge,\n finalStatus: action.data\n }\n }\n case 'SET_CHALLENGE_PASSED':\n setWithExpiry('reduxChallengePassed', action.data, EXIPRY_TIME);\n return {\n ...state,\n challenge: {\n ...state.challenge,\n passed: action.data\n }\n }\n case 'SET_CHALLENGE_LIST_EXPANDED':\n return {\n ...state,\n challenge: {\n ...state.challenge,\n listExpanded: action.data\n }\n }\n case 'SET_ACTIVATE_DIALOG_DISPLAY':\n return {\n ...state,\n activateDialog: action.data\n }\n case 'SET_IMPORT_TO_APPEND':\n return {\n ...state,\n isImportToAppend: action.data\n }\n case 'SET_DEPENDENCY_FILTER_RULE':\n setWithExpiry(state.activeItemType + '_filterRule', action.data, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n dependencyFilterRule: action.data\n }\n }\n // Dependency Shortcut click handler: All, None, Installed and Reset\n case 'SELECT_DEPENDENCIES':\n const types = ['section', 'page', 'collection'];\n let atomHandler;\n switch(action.data) {\n case 'all':\n case 'none':\n const newValue = action.data === 'all';\n atomHandler = (plugins) => plugins\n .filter(plugin => [ NONE_KEY, 'gutenberghub.com', 'shareablock.com' ].includes(plugin) === false )\n .reduce(\n (acc, key) => {\n return { ...acc, [key]: { value: newValue, disabled: false } }\n },\n {\n [NONE_KEY]: {value: true, disabled: false},\n 'gutenberghub.com': {value: true, disabled: false},\n 'shareablock.com': {value: true, disabled: false}\n }\n )\n break;\n case 'installed':\n atomHandler = (plugins) => getInstalledDependencies(plugins);\n break;\n default:\n atomHandler = (plugins) => getDefaultDependencies(plugins);\n break;\n }\n const filtered = types.reduce( (acc, cur) => {\n // save to the local storage as well\n setWithExpiry(cur + '_plugin', atomHandler(state[cur].wholePlugins), EXIPRY_TIME);\n return {\n ...acc,\n [cur]: {\n ...state[cur],\n searchContext: '',\n dependencyFilterRule: cur !== 'collection', // We must always use false for collection to get template kits to work.\n dependencyFilters: atomHandler(state[cur].wholePlugins)\n }\n }\n }, {});\n return {\n ...state,\n ...filtered\n };\n case 'CLEAR_SEARCH':\n return {\n ...state,\n section: {\n ...state.section,\n searchContext: ''\n },\n page: {\n ...state.page,\n searchContext: ''\n },\n collection: {\n ...state.collection,\n searchContext: ''\n }\n }\n\t\tcase 'CLEAR_STATE':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tsection: {\n\t\t\t\t\t...state.section,\n\t\t\t\t\tpriceFilter: '',\n\t\t\t\t\tactiveCategory: '',\n\t\t\t\t\tsearchContext: '',\n\t\t\t\t},\n\t\t\t\tpage: {\n\t\t\t\t\t...state.page,\n\t\t\t\t\tpriceFilter: '',\n\t\t\t\t\tactiveCategory: '',\n\t\t\t\t\tsearchContext: '',\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\t...state.collection,\n\t\t\t\t\tpriceFilter: '',\n\t\t\t\t\tactiveCategory: '',\n\t\t\t\t\tsearchContext: '',\n\t\t\t\t}\n\t\t\t}\n }\n\n return state;\n};\n","module.exports = wp.blockEditor;","module.exports = wp.blocks;","module.exports = wp.components;","module.exports = wp.compose;","module.exports = wp.data;","module.exports = wp.editPost;","module.exports = wp.element;","module.exports = wp.hooks;","module.exports = wp.i18n;","module.exports = lodash;","module.exports = React;","module.exports = ReactDOM;"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvJA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;;;;;;;;;;;;ACZA;AAAA;AAAA;AAAA;;;AAGA;AACA;AAEA;;;;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;;;;AAGA;AACA;AACA;AAEA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AARA;AACA;AAUA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AANA;AAcA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAeA;AACA;AAzGA;AACA;AA0GA;;;;;;;;;;;;AC/HA;AAAA;;;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;AACA;AACA;AAEA;;;;AAGA;AAEA;;;;AAGA;AAEA;AACA;AACA;AACA;AADA;AADA;AACA;AAKA;AACA;AACA;AAQA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AAAA;AACA;AACA;AACA;AAvBA;;;;;;;;;;;;;ACnCA;AAAA;;;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AAIA;AACA;AAhBA;AAFA;AAuBA;;;;;;;;;;;;AC5BA;AAAA;AAAA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AAEA;;;;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;;;;;;;;AAMA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAOA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAPA;AACA;AASA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1EA;AAAA;AAAA;;;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;AACA;AACA;AAEA;;;;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAHA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAaA;AACA;AACA;AAEA;AADA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;;AC1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAGA;;;AAGA;AAEA;;;;AAGA;AACA;AACA;AAEA;;;;AAGA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAOA;AACA;AACA;AADA;AADA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAKA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAPA;AADA;AAYA;AACA;AACA;AACA;AACA;AACA;AA7BA;AACA;AA8BA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;ACrGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AAEA;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAUA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;;;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;;;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AADA;AAGA;AACA;AAbA;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAFA;AAIA;AApBA;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAIA;AAGA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAFA;AAIA;AACA;AA1BA;AA6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAFA;AAIA;AACA;AArBA;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAlBA;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAdA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAjCA;AA1JA;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AADA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DA;;;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AADA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAKA;AAAA;AAAA;AAEA;AACA;AACA;AAHA;AAKA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;;AC/EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;;;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;;;AAGA;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AA/EA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAVA;AAYA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AANA;AAOA;AACA;AAEA;AACA;AAAA;AACA;AACA;AALA;AAMA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAdA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1KA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAHA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAIA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;;;;;;;;;;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAUA;AAGA;AACA;AAAA;AACA;AAIA;AACA;AADA;AAGA;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AADA;AAfA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AAFA;AAJA;AAFA;AAYA;AACA;AACA;AACA;AACA;AADA;AAFA;AADA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAJA;AAOA;AAPA;AAoCA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAGA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAKA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAoBA;AAAA;AAAA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAKA;;;;;;;;;;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAKA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;AACA;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AADA;AAEA;AAAA;AACA;AADA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AADA;AAGA;AAAA;AACA;AADA;AAEA;AAAA;AACA;AADA;AAOA;AACA;AAEA;AACA;AAAA;AACA;AAIA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AADA;AAEA;AAAA;AAIA;AACA;AADA;AAEA;AAAA;AAEA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AACA;AAIA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AADA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;ACzEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAGA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AACA;AACA;AACA;AACA;AAJA;AAYA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAHA;AAMA;AACA;AACA;AACA;AAJA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAJA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAJA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAOA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;;;;;;;;;;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;;;AAGA;AAMA;AAHA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAXA;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAMA;AAAA;AAOA;AACA;AACA;;;;;;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AAAA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;;;;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAFA;AALA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAKA;AACA;AAAA;AAAA;AACA;AAHA;AAMA;AACA;AACA;AAHA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;;;;;;;;;;;AC9EA;;;AAGA;AAEA;AAKA;AAFA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7LA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAFA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AALA;AAQA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnPA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;AAIA;;;AAGA;AACA;AAEA;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAUA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAFA;AAQA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAAA;AAKA;AAAA;AAKA;AAAA;AAKA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AADA;AAEA;AAIA;AAAA;AAEA;AAAA;AACA;AADA;AAEA;AAAA;AAIA;AAAA;AACA;AADA;AAOA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AADA;AAGA;;;;;;;;;;;;AC9HA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AACA;AADA;AAGA;;;;;;;;;;;;ACvDA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AACA;AAAA;AAAA;AAMA;;;;;;;;;;;;ACrCA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AASA;AACA;AACA;AAFA;AAGA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAWA;AAAA;AAAA;AACA;AADA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AADA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AADA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;;;;;;;;;;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAFA;AAMA;AAAA;AAEA;AAAA;AAMA;AAAA;AAEA;AAAA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;;;;;;;;;;;;AC5HA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAMA;;;;;;;;;;;;ACjBA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAGA;AACA;AAFA;AASA;AAAA;AACA;AADA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AADA;AAGA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AADA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAHA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/GA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAFA;AACA;AACA;AAIA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAFA;AAIA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAHA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;;AChHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;;ACnCA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AADA;AAEA;AAAA;AACA;AADA;AAEA;AAAA;AACA;AADA;AAEA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AADA;AAIA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AADA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAKA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAIA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;;;;;;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AACA;AADA;AAGA;AAAA;AACA;AAAA;AAEA;AAAA;AAGA;AACA;AADA;AAEA;AAAA;AAIA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AADA;AAKA;AAEA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AACA;AADA;AAAA;AAAA;AACA;AASA;AACA;AACA;AACA;AAHA;AAKA;;;;;;;;;;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAMA;AACA;AAFA;AAMA;AACA;AACA;AACA;AACA;AACA;AANA;AAkBA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAMA;AACA;AAEA;AACA;AAAA;AACA;AAIA;AACA;AADA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAFA;AAGA;AAAA;AAAA;AAKA;AACA;AA7CA;AAgDA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AA9DA;;;;;;;;;;;;ACrDA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AADA;AAEA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AADA;AAEA;AAAA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAHA;AAIA;AAAA;AAGA;AAOA;AACA;AACA;;;;;;;;;;;;AC7DA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AACA;AADA;AAOA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AADA;AACA;AACA;AADA;AAEA;AADA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AADA;AAEA;AAAA;AADA;AAEA;AAAA;AACA;AADA;AAEA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAEA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAGA;AADA;AAGA;AACA;AADA;AAEA;AAAA;AACA;AADA;AAKA;AACA;AADA;AAEA;AAAA;AAAA;AACA;AADA;AAEA;AADA;AAIA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AASA;;;;;;;;;;;;ACvIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAFA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAFA;AAKA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AANA;AACA;AAOA;AACA;AAKA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AACA;AACA;AAYA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAJA;AAKA;AAAA;AAKA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAMA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AAFA;AAIA;AAEA;AAAA;AACA;AACA;AACA;AADA;AAGA;;;;;;;;;;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AACA;AAIA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AACA;AACA;AAHA;AASA;AACA;AACA;AAEA;AADA;AAKA;AAAA;AACA;AAEA;AACA;AADA;AAGA;AACA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AADA;AAGA;;;;;;;;;;;;AC9DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;;;;AAIA;AACA;AACA;AAEA;;;;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAGA;AAAA;AAAA;AAAA;AAGA;AAHA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AAHA;AASA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AADA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAJA;AAMA;;;;;;;;;;;;AC1FA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;;;;;;;;;AAOA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxEA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AADA;AAGA;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AAEA;;;;AAGA;AAEA;;;;;;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AADA;AAKA;AAGA;AACA;AACA;AACA;AACA;AALA;AAWA;AACA;AACA;AACA;AAOA;AAAA;AAEA;AACA;AADA;AAGA;;;;;;;;;;;;AC7CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAKA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAXA;AAFA;AAmBA;AACA;AACA;AADA;AAGA;AACA;AADA;AAGA;AACA;AADA;AAPA;AAYA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAVA;AAaA;AACA;AACA;AAGA;AACA;AACA;AAHA;AAYA;AAEA;AAGA;AAAA;AAAA;AADA;AAEA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAHA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtCA;AAuCA;;;;;;;;;;;;ACnJA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAKA;AACA;AACA;AAFA;AAIA;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAXA;AAFA;AAmBA;AACA;AACA;AADA;AAGA;AACA;AADA;AAGA;AACA;AADA;AAPA;AACA;AAWA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAVA;AAaA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AADA;AAGA;;;;;;;;;;;;AChGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAHA;AACA;AAKA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAhBA;AAFA;AA0BA;AACA;AACA;AADA;AAGA;AACA;AACA;AAFA;AAJA;AAUA;AACA;AADA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AARA;AAUA;AACA;AAZA;AAJA;AAoBA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAHA;AAOA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpRA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AAAA;AACA;AACA;AADA;AAGA;AACA;AAxLA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACjGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AAFA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAEA;;;;;;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAHA;AAKA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AADA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;;;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;;;;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvTA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAnHA;AAqHA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAPA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AA9IA;;;;;;;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAVA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAaA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AACA;AA5DA;AA+DA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAEA;AACA;AACA;AAGA;AAHA;AAKA;AAGA;AAHA;AAKA;AAGA;AAHA;AAdA;AACA;AAmBA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAHA;AAFA;AACA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAHA;AAFA;AACA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAHA;AAFA;AACA;AAOA;AACA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAHA;AAFA;AACA;AAOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAHA;AAFA;AACA;AAOA;AACA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAEA;AAFA;AAFA;AACA;AAMA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AAEA;AAFA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AAFA;AAFA;AAOA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAHA;AACA;AAKA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAtBA;AACA;AAuBA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAJA;AAFA;AASA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AAFA;AAIA;AAEA;AAFA;AAIA;AAEA;AAFA;AAVA;AACA;AAcA;AACA;AAEA;AAEA;AACA;AACA;AAJA;AAMA;AAEA;AACA;AACA;AAJA;AAMA;AAEA;AACA;AACA;AAJA;AAdA;AA1SA;AACA;AAgUA;AACA;;;;;;;;;;;ACvYA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;A","sourceRoot":""}
1
+ {"version":3,"file":"redux-templates.js","sources":["webpack:///webpack/bootstrap","webpack:///./redux-templates/src/blocks/library/style.scss","webpack:///./redux-templates/src/challenge/challenge-list-block/style.scss","webpack:///./redux-templates/src/challenge/challenge-timer/style.scss","webpack:///./redux-templates/src/challenge/final-templates/style.scss","webpack:///./redux-templates/src/challenge/style.scss","webpack:///./redux-templates/src/components/background-image/style.scss","webpack:///./redux-templates/src/components/button-group/style.scss","webpack:///./redux-templates/src/components/dependent-plugins/style.scss","webpack:///./redux-templates/src/components/error-notice/style.scss","webpack:///./redux-templates/src/components/fab-wrapper/styles.scss","webpack:///./redux-templates/src/components/multiple-item/style.scss","webpack:///./redux-templates/src/components/pagination/style.scss","webpack:///./redux-templates/src/components/preview-import-button/style.scss","webpack:///./redux-templates/src/components/single-item/style.scss","webpack:///./redux-templates/src/components/template-list-subheader/style.scss","webpack:///./redux-templates/src/components/welcome-guide/style.scss","webpack:///./redux-templates/src/custom-css/style.scss","webpack:///./redux-templates/src/editor.scss","webpack:///./redux-templates/src/modal-import-wizard/style.scss","webpack:///./redux-templates/src/modal-library/sidebar/style.scss","webpack:///./redux-templates/src/modal-library/style.scss","webpack:///./redux-templates/src/modal-library/view-collection/style.scss","webpack:///./redux-templates/src/modal-library/view-saved/style.scss","webpack:///./redux-templates/src/modal-library/view-template-list/style.scss","webpack:///./redux-templates/src/modal-preview/style.scss","webpack:///./redux-templates/src/modals.scss","webpack:///./redux-templates/assets/img/icon-color.svg","webpack:///./redux-templates/assets/img/icon.svg","webpack:///./redux-templates/src/blocks/blocks.js","webpack:///./redux-templates/src/blocks/import/components/edit.js","webpack:///./redux-templates/src/blocks/import/icon.js","webpack:///./redux-templates/src/blocks/import/index.js","webpack:///./redux-templates/src/blocks/import/transforms.js","webpack:///./redux-templates/src/blocks/import/utils/file.js","webpack:///./redux-templates/src/blocks/import/utils/import.js","webpack:///./redux-templates/src/blocks/import/utils/insert.js","webpack:///./redux-templates/src/blocks/library/edit.js","webpack:///./redux-templates/src/blocks/library/index.js","webpack:///./redux-templates/src/blocks/library/insert-library-button.js","webpack:///./redux-templates/src/blocks/library/style.scss?eec2","webpack:///./redux-templates/src/challenge/challenge-list-block/ChallengeStepItem.js","webpack:///./redux-templates/src/challenge/challenge-list-block/ProgressBar.js","webpack:///./redux-templates/src/challenge/challenge-list-block/index.js","webpack:///./redux-templates/src/challenge/challenge-list-block/style.scss?9f45","webpack:///./redux-templates/src/challenge/challenge-timer/index.js","webpack:///./redux-templates/src/challenge/challenge-timer/style.scss?1c53","webpack:///./redux-templates/src/challenge/config.js","webpack:///./redux-templates/src/challenge/final-templates/congrats.js","webpack:///./redux-templates/src/challenge/final-templates/contact.js","webpack:///./redux-templates/src/challenge/final-templates/index.js","webpack:///./redux-templates/src/challenge/final-templates/style.scss?54b2","webpack:///./redux-templates/src/challenge/helper.js","webpack:///./redux-templates/src/challenge/index.js","webpack:///./redux-templates/src/challenge/style.scss?5d1a","webpack:///./redux-templates/src/challenge/tooltip/ChallengeDot.js","webpack:///./redux-templates/src/challenge/tooltip/TooltipBox.js","webpack:///./redux-templates/src/components/background-image/index.js","webpack:///./redux-templates/src/components/background-image/style.scss?1987","webpack:///./redux-templates/src/components/button-group/index.js","webpack:///./redux-templates/src/components/button-group/style.scss?5c67","webpack:///./redux-templates/src/components/dependent-plugins/index.js","webpack:///./redux-templates/src/components/dependent-plugins/style.scss?77c8","webpack:///./redux-templates/src/components/error-notice/index.js","webpack:///./redux-templates/src/components/error-notice/style.scss?3b1b","webpack:///./redux-templates/src/components/fab-wrapper/config.js","webpack:///./redux-templates/src/components/fab-wrapper/index.js","webpack:///./redux-templates/src/components/fab-wrapper/styles.scss?0dab","webpack:///./redux-templates/src/components/multiple-item/index.js","webpack:///./redux-templates/src/components/multiple-item/style.scss?3037","webpack:///./redux-templates/src/components/pagination/index.js","webpack:///./redux-templates/src/components/pagination/style.scss?7abf","webpack:///./redux-templates/src/components/preview-import-button/index.js","webpack:///./redux-templates/src/components/preview-import-button/style.scss?db94","webpack:///./redux-templates/src/components/safe-image-load/index.js","webpack:///./redux-templates/src/components/single-item/index.js","webpack:///./redux-templates/src/components/single-item/style.scss?1c09","webpack:///./redux-templates/src/components/tab-header/index.js","webpack:///./redux-templates/src/components/template-list-subheader/images/view-few.svg","webpack:///./redux-templates/src/components/template-list-subheader/images/view-many.svg","webpack:///./redux-templates/src/components/template-list-subheader/images/view-normal.svg","webpack:///./redux-templates/src/components/template-list-subheader/index.js","webpack:///./redux-templates/src/components/template-list-subheader/style.scss?349f","webpack:///./redux-templates/src/components/welcome-guide/images.js","webpack:///./redux-templates/src/components/welcome-guide/index.js","webpack:///./redux-templates/src/components/welcome-guide/style.scss?55ff","webpack:///./redux-templates/src/custom-css/editor.js","webpack:///./redux-templates/src/custom-css/index.js","webpack:///./redux-templates/src/custom-css/inject-css.js","webpack:///./redux-templates/src/custom-css/style.scss?7049","webpack:///./redux-templates/src/editor.scss?b1ec","webpack:///./redux-templates/src/icons/images/acf-blocks.svg","webpack:///./redux-templates/src/icons/images/advanced-custom-fields.svg","webpack:///./redux-templates/src/icons/images/advanced-gutenberg-blocks.svg","webpack:///./redux-templates/src/icons/images/atomic-blocks.svg","webpack:///./redux-templates/src/icons/images/block-options.svg","webpack:///./redux-templates/src/icons/images/block-slider.svg","webpack:///./redux-templates/src/icons/images/coblocks.svg","webpack:///./redux-templates/src/icons/images/creative-blocks.svg","webpack:///./redux-templates/src/icons/images/editorplus.svg","webpack:///./redux-templates/src/icons/images/elegant-blocks.svg","webpack:///./redux-templates/src/icons/images/enhanced-blocks.svg","webpack:///./redux-templates/src/icons/images/essential-blocks.svg","webpack:///./redux-templates/src/icons/images/forms-gutenberg.svg","webpack:///./redux-templates/src/icons/images/getwid.svg","webpack:///./redux-templates/src/icons/images/ghostkit.svg","webpack:///./redux-templates/src/icons/images/guteblock.svg","webpack:///./redux-templates/src/icons/images/gutentor.svg","webpack:///./redux-templates/src/icons/images/kadence-blocks.svg","webpack:///./redux-templates/src/icons/images/kioken-blocks.svg","webpack:///./redux-templates/src/icons/images/otter-blocks.svg","webpack:///./redux-templates/src/icons/images/qodeblock.svg","webpack:///./redux-templates/src/icons/images/qubely.svg","webpack:///./redux-templates/src/icons/images/snow-monkey-blocks.svg","webpack:///./redux-templates/src/icons/images/stackable-ultimate-gutenberg-blocks.svg","webpack:///./redux-templates/src/icons/images/ultimate-addons-for-gutenberg.svg","webpack:///./redux-templates/src/icons/images/ultimate-blocks.svg","webpack:///./redux-templates/src/icons/images/ultimate-post.svg","webpack:///./redux-templates/src/icons/images/wordpress.svg","webpack:///./redux-templates/src/icons/index.js","webpack:///./redux-templates/src/index.js","webpack:///./redux-templates/src/modal-feedback/index.js","webpack:///./redux-templates/src/modal-import-wizard/ImportingStep.js","webpack:///./redux-templates/src/modal-import-wizard/InstallPluginStep.js","webpack:///./redux-templates/src/modal-import-wizard/OptionStep.js","webpack:///./redux-templates/src/modal-import-wizard/ProPluginsStep.js","webpack:///./redux-templates/src/modal-import-wizard/ReduxTeamplatesActivateBox.js","webpack:///./redux-templates/src/modal-import-wizard/ReduxTemplatesPremiumBox.js","webpack:///./redux-templates/src/modal-import-wizard/index.js","webpack:///./redux-templates/src/modal-import-wizard/style.scss?9a4a","webpack:///./redux-templates/src/modal-library/index.js","webpack:///./redux-templates/src/modal-library/layout-with-sidebar/index.js","webpack:///./redux-templates/src/modal-library/sidebar/categoryFilter.js","webpack:///./redux-templates/src/modal-library/sidebar/dependencyFilter.js","webpack:///./redux-templates/src/modal-library/sidebar/dependencyFilterRow.js","webpack:///./redux-templates/src/modal-library/sidebar/index.js","webpack:///./redux-templates/src/modal-library/sidebar/priceFilter.js","webpack:///./redux-templates/src/modal-library/sidebar/style.scss?e89b","webpack:///./redux-templates/src/modal-library/style.scss?f8e2","webpack:///./redux-templates/src/modal-library/view-collection/index.js","webpack:///./redux-templates/src/modal-library/view-collection/style.scss?bea7","webpack:///./redux-templates/src/modal-library/view-saved/index.js","webpack:///./redux-templates/src/modal-library/view-saved/style.scss?fe19","webpack:///./redux-templates/src/modal-library/view-template-list/index.js","webpack:///./redux-templates/src/modal-library/view-template-list/style.scss?32ed","webpack:///./redux-templates/src/modal-manager/index.js","webpack:///./redux-templates/src/modal-preview/FullyOverlayFooter.js","webpack:///./redux-templates/src/modal-preview/FullyOverlayHeader.js","webpack:///./redux-templates/src/modal-preview/SidebarContent.js","webpack:///./redux-templates/src/modal-preview/SitePreviewSidebar.js","webpack:///./redux-templates/src/modal-preview/index.js","webpack:///./redux-templates/src/modal-preview/style.scss?ef64","webpack:///./redux-templates/src/modals.scss?6210","webpack:///./redux-templates/src/plugins/export-page-menu-item/index.js","webpack:///./redux-templates/src/plugins/export/export-block-menu-item.js","webpack:///./redux-templates/src/plugins/export/file.js","webpack:///./redux-templates/src/plugins/export/index.js","webpack:///./redux-templates/src/plugins/export/reusable.js","webpack:///./redux-templates/src/plugins/library-context-menu-item/index.js","webpack:///./redux-templates/src/plugins/share-block-btn/buttons.js","webpack:///./redux-templates/src/plugins/share-block-btn/index.js","webpack:///./redux-templates/src/plugins/sidebar-share/index.js","webpack:///./redux-templates/src/plugins/sidebar-share/sidebar.js","webpack:///./redux-templates/src/stores/actionHelper.js","webpack:///./redux-templates/src/stores/actions.js","webpack:///./redux-templates/src/stores/dependencyHelper.js","webpack:///./redux-templates/src/stores/filters.js","webpack:///./redux-templates/src/stores/helper.js","webpack:///./redux-templates/src/stores/index.js","webpack:///./redux-templates/src/stores/reducer.js","webpack:///external \"wp.blockEditor\"","webpack:///external \"wp.blocks\"","webpack:///external \"wp.components\"","webpack:///external \"wp.compose\"","webpack:///external \"wp.data\"","webpack:///external \"wp.editPost\"","webpack:///external \"wp.element\"","webpack:///external \"wp.hooks\"","webpack:///external \"wp.i18n\"","webpack:///external \"lodash\"","webpack:///external \"React\"","webpack:///external \"ReactDOM\""],"sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"redux-templates\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"./redux-templates/src/index.js\",\"vendor\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-template-library-block .components-placeholder__label svg {\\n margin-right: 8px; }\\n\\n.redux-template-library-block button.components-button {\\n height: auto;\\n font-weight: 600;\\n text-transform: uppercase;\\n font-size: 13px;\\n padding: 11px 20px;\\n background: #fff; }\\n\\n.components-button.has-icon.redux-templates-insert-library-button {\\n height: 100%; }\\n\\n.redux-templates-insert-library-button {\\n margin-left: 10px;\\n margin-right: 10px; }\\n .redux-templates-insert-library-button svg {\\n width: 20px;\\n height: 20px; }\\n\\n.redux-insert-library-button {\\n margin-left: 10px;\\n margin-right: 10px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".challenge-list-block {\\n padding: 15px 20px 20px;\\n margin-bottom: 15px;\\n background-color: #fff;\\n overflow: hidden;\\n border-radius: 4px;\\n box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -webkit-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -moz-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2); }\\n\\n.challenge-bar {\\n border-radius: 20px;\\n background-color: #eee; }\\n\\n.challenge-bar div {\\n width: 0;\\n height: 20px;\\n border-radius: 20px;\\n background-color: #2576a4; }\\n\\n.challenge-list {\\n list-style: none;\\n margin: 17px 0 20px;\\n font-size: 13px; }\\n .challenge-list li {\\n margin-bottom: 17px; }\\n .challenge-list li i {\\n display: inline-block;\\n font-size: 18px;\\n color: #d6d6d6;\\n margin-right: 8px;\\n line-height: 15px;\\n vertical-align: bottom;\\n border-radius: 50%; }\\n .challenge-list li.challenge-item-current {\\n font-weight: bold; }\\n .challenge-list li.challenge-item-current i {\\n color: #df7739;\\n font-size: 17.5px;\\n line-height: 1;\\n text-indent: 0.5px; }\\n .challenge-list li.challenge-item-completed {\\n font-weight: initial;\\n text-decoration: line-through; }\\n .challenge-list li.challenge-item-completed i {\\n color: #6ab255;\\n font-size: 18px;\\n background-color: #fff; }\\n .challenge-list li .dashicons-yes {\\n display: none;\\n vertical-align: middle; }\\n\\n/* /.challenge-list */\\nbutton.btn-challenge-start {\\n font-size: 12px;\\n padding: 6px 15px;\\n border: 1px solid #00a7e5;\\n background-color: #24b0a6;\\n border-radius: 3px;\\n color: #fff;\\n cursor: pointer; }\\n button.btn-challenge-start:hover {\\n background-color: #19837c; }\\n\\n.btn-challenge-cancel,\\n.btn-challenge-skip {\\n margin: 6px 0;\\n border: 0;\\n text-decoration: underline; }\\n\\n.btn-challenge-cancel,\\n.btn-challenge-skip {\\n align-self: flex-end;\\n color: #909090;\\n font-size: 12px;\\n font-weight: normal;\\n background: none; }\\n\\n.wpforms-btn-md {\\n min-height: initial; }\\n\\n.challenge-button-row {\\n display: flex;\\n justify-content: space-between; }\\n .challenge-button-row button {\\n cursor: pointer; }\\n\\n.started.challenge-button-row {\\n align-content: space-between;\\n flex-direction: column; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".block-timer {\\n padding: 5px;\\n background-color: #2d2d2d;\\n border-radius: 500px;\\n width: 277px;\\n box-sizing: border-box;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-pack: justify;\\n -ms-flex-pack: justify;\\n justify-content: space-between;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -webkit-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n -moz-box-shadow: 0 0 40px 0 rgba(0, 0, 0, 0.2);\\n padding-left: 50px; }\\n .block-timer img {\\n width: 50px;\\n height: 50px;\\n border-radius: 50%; }\\n .block-timer h3 {\\n font-size: 14px;\\n font-weight: 500;\\n color: #fff;\\n margin: 0; }\\n .block-timer p {\\n font-size: 14px;\\n font-weight: 100;\\n color: #ababab;\\n margin: 0; }\\n .block-timer .caret-icon {\\n border: 2px solid;\\n border-radius: 50%;\\n color: #6c6c6c;\\n margin: 0 15px;\\n width: 23px;\\n height: 23px;\\n font-size: 20px;\\n cursor: pointer; }\\n .block-timer .caret-icon .fa {\\n width: 100%;\\n text-align: center;\\n -webkit-transition: 400ms;\\n -o-transition: 400ms;\\n transition: 400ms; }\\n .block-timer .caret-icon.closed .fa {\\n -webkit-transform: rotate(180deg) translateY(1px);\\n -ms-transform: rotate(180deg) translateY(1px);\\n transform: rotate(180deg) translateY(1px); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".challenge-popup-wrapper {\\n height: 500px;\\n border-radius: 10px; }\\n\\n.challenge-popup-header {\\n width: 100%;\\n height: 212px;\\n border-top-left-radius: 8px;\\n border-top-right-radius: 8px; }\\n\\n.challenge-popup-header-congrats {\\n background-position: center;\\n background-size: cover; }\\n\\n.challenge-popup-header-contact {\\n background-position: center;\\n background-size: auto 75%;\\n background-color: #eee;\\n background-repeat: no-repeat; }\\n\\n.challenge-popup-content {\\n padding: 30px 40px;\\n -webkit-font-smoothing: antialiased; }\\n\\n.challenge-popup-content h3 {\\n color: #24b0a6;\\n margin: 0 0 20px;\\n font-size: 24px;\\n font-family: \\\"Helvetica Neue\\\";\\n font-weight: 500; }\\n\\n.challenge-popup-content p {\\n font-size: 16px;\\n margin: 0 0 22px; }\\n\\n.challenge-popup-content b {\\n font-weight: 500; }\\n\\n.challenge-popup-content .challenge-contact-message {\\n box-shadow: none;\\n resize: none;\\n margin-bottom: 21px;\\n width: 100%;\\n min-height: 175px; }\\n\\n.challenge-popup-content label {\\n font-size: 13.8px;\\n display: block;\\n margin-bottom: 23px; }\\n\\n.challenge-popup-content input[type=\\\"checkbox\\\"] {\\n margin-right: 8px; }\\n\\n.challenge-popup-content .rating-stars {\\n color: #fdb72c;\\n font-size: 18px;\\n font-weight: bold; }\\n\\n.challenge-popup-close .fa-times {\\n font-size: 20px;\\n color: #777;\\n float: right;\\n margin: 15px;\\n border-radius: 50%;\\n cursor: pointer; }\\n\\n.challenge-popup-btn {\\n display: inline-block;\\n border-radius: 2px;\\n cursor: pointer;\\n text-decoration: none;\\n text-align: center;\\n vertical-align: middle;\\n white-space: nowrap;\\n box-shadow: none;\\n font-size: 15px;\\n font-weight: 600;\\n padding: 14px 25px;\\n border: 1px solid #00a7e5;\\n background-color: #24b0a6;\\n color: #fff; }\\n .challenge-popup-btn:hover {\\n border: 1px solid #19837c;\\n background-color: #19837c;\\n color: #fff; }\\n .challenge-popup-btn .dashicons-external {\\n margin-left: 6px; }\\n\\n.challenge-popup-content.challenge-contact p {\\n font-size: 14px; }\\n\\n.challenge-popup-content.challenge-contact textarea {\\n margin-bottom: 10px; }\\n\\n.challenge-popup-content.challenge-contact label {\\n font-size: 13px;\\n margin-bottom: 15px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-challenge {\\n display: block;\\n position: fixed;\\n right: 1em;\\n bottom: 55px;\\n max-width: 277px;\\n z-index: 9999; }\\n .redux-templates-challenge p {\\n font-size: 14px;\\n line-height: 1.4;\\n margin-top: 0;\\n color: #23282c; }\\n .redux-templates-challenge b {\\n font-weight: 500; }\\n .redux-templates-challenge.challenge-start {\\n display: initial; }\\n\\n@media all and (max-height: 900px) {\\n #challenge-contact-popup {\\n margin: 50px 0 20px; } }\\n\\n.challenge-tooltip.tooltipster-sidetip {\\n z-index: 100100 !important; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-box {\\n margin-bottom: 18px; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-arrow {\\n bottom: 8px; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {\\n top: 0; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-right .tooltipster-box {\\n margin-right: 18px; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-right .tooltipster-arrow {\\n left: 8px; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box {\\n background: #fff;\\n border: none;\\n border-radius: 4px;\\n box-shadow: 0 10px 35px 0 rgba(0, 0, 0, 0.25);\\n -webkit-box-shadow: 0 10px 35px 0 rgba(0, 0, 0, 0.25);\\n -moz-box-shadow: 0 10px 35px 0 rgba(0, 0, 0, 0.25); }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .tooltipster-content {\\n color: #444;\\n padding: 16px 20px 18px; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .tooltipster-content h3 {\\n font-size: 15px;\\n margin: 0; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .tooltipster-content p {\\n margin: 10px 0 0; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .challenge-done-btn {\\n border-radius: 3px;\\n cursor: pointer;\\n text-decoration: none;\\n text-align: center;\\n vertical-align: middle;\\n white-space: nowrap;\\n box-shadow: none;\\n font-size: 13px;\\n font-weight: 600;\\n padding: 7px 18px;\\n border: 1px solid #00a7e5;\\n background-color: #24b0a6;\\n color: #fff;\\n display: block;\\n margin: 15px auto 0;\\n outline: none; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-box .challenge-done-btn:hover {\\n border: 1px solid #19837c;\\n background-color: #19837c; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-arrow-border {\\n border: none; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {\\n border-bottom-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {\\n border-right-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {\\n border-top-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {\\n border-left-color: #fff; }\\n\\n.block-editor-page .edit-post-layout .components-notice-list > div {\\n padding-left: 50px; }\\n\\n.block-editor-page span.wpforms-challenge-dot-step5 {\\n margin: 22px 18px;\\n z-index: 9999; }\\n\\n.block-editor-page .wpforms-challenge-tooltip.wpforms-challenge-tooltip-step5 {\\n max-width: 233px;\\n z-index: 99980 !important; }\\n\\n.challenge-wrapper {\\n position: fixed;\\n top: 0;\\n left: 0;\\n z-index: 600000; }\\n\\n.challenge-tooltip-holder {\\n position: fixed;\\n top: 0;\\n left: 0;\\n z-index: 600000; }\\n .challenge-tooltip-holder .tooltipster-box {\\n position: absolute;\\n box-shadow: 0 -10px 35px 0 rgba(0, 0, 0, 0.25);\\n z-index: 10000;\\n background: #fff;\\n padding: 15px 20px; }\\n\\n.challenge-dot {\\n display: inline-block;\\n width: 16px;\\n height: 16px;\\n background: #24b0a6;\\n box-shadow: 0 0 0 4px rgba(25, 131, 124, 0.15);\\n border-radius: 50%;\\n border: 0;\\n padding: 0; }\\n\\n.tooltipster-sidetip .tooltipster-arrow {\\n position: absolute;\\n width: 20px;\\n height: 10px;\\n z-index: 10000; }\\n\\n.tooltipster-sidetip .tooltipster-arrow-uncropped {\\n position: relative; }\\n\\n.tooltipster-sidetip .tooltipster-arrow-border {\\n left: 0;\\n top: 0;\\n border: none;\\n width: 0;\\n height: 0;\\n position: absolute; }\\n\\n.challenge-tooltip.tooltipster-sidetip .tooltipster-arrow-background {\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 0;\\n position: absolute;\\n border: 10px solid transparent; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-top {\\n border-top-color: #fff; }\\n\\n.challenge-tooltip.tooltipster-sidetip.tooltipster-bottom {\\n border-bottom-color: #fff; }\\n\\n.block-timer .caret-icon .fa {\\n -webkit-transition: 400ms;\\n -o-transition: 400ms;\\n transition: 400ms;\\n line-height: 23px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-single-section-item .block-editor-block-preview__container {\\n margin: 0 auto;\\n min-height: 130px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-import-button-group {\\n text-align: center; }\\n .redux-templates-import-button-group.disabled span a {\\n cursor: default;\\n opacity: 0.8; }\\n\\n.redux-templates-single-section-item {\\n margin-bottom: 15px; }\\n .redux-templates-single-section-item .redux-templates-import-button-group {\\n margin-top: 10%; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-button-display-dependencies {\\n display: flex;\\n justify-content: center;\\n margin: 10px; }\\n .redux-templates-button-display-dependencies span svg {\\n margin-right: 5px;\\n cursor: pointer; }\\n .redux-templates-button-display-dependencies span svg * {\\n fill: #f7f7f7; }\\n .redux-templates-button-display-dependencies span.missing-dependency svg * {\\n fill: rgba(247, 247, 247, 0.5); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-error-notice .components-notice {\\n display: flex;\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 13px;\\n background-color: #e5f5fa;\\n border-left: 4px solid #00a0d2;\\n margin: 5px 15px 2px;\\n padding: 8px 12px;\\n align-items: center;\\n position: absolute;\\n height: 50px;\\n z-index: 9999;\\n width: 50%;\\n right: 0;\\n top: 70px;\\n transition: opacity 2s linear; }\\n .redux-templates-error-notice .components-notice.is-dismissible {\\n padding-right: 0; }\\n .redux-templates-error-notice .components-notice.is-success {\\n border-left-color: #4ab866;\\n background-color: rgba(74, 184, 102, 0.95); }\\n .redux-templates-error-notice .components-notice.is-warning {\\n border-left-color: #f0b849;\\n background-color: rgba(254, 248, 238, 0.95); }\\n .redux-templates-error-notice .components-notice.is-error {\\n border-left-color: #d94f4f;\\n background-color: rgba(249, 226, 226, 0.95); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".rtf {\\n box-sizing: border-box;\\n margin: 25px;\\n position: fixed;\\n white-space: nowrap;\\n z-index: 9998;\\n padding-left: 0;\\n list-style: none; }\\n .rtf.open .rtf--mb > * {\\n transform-origin: center center;\\n transform: none;\\n transition: ease-in-out transform 0.2s; }\\n .rtf.open .rtf--mb > ul {\\n list-style: none;\\n margin: 0;\\n padding: 0; }\\n .rtf.open .rtf--ab__c:hover > span {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf.open .rtf--ab__c > span.always-show {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf.open .rtf--ab__c:nth-child(1) {\\n transform: translateY(-60px) scale(1);\\n transition-delay: 0.03s; }\\n .rtf.open .rtf--ab__c:nth-child(1).top {\\n transform: translateY(60px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(2) {\\n transform: translateY(-120px) scale(1);\\n transition-delay: 0.09s; }\\n .rtf.open .rtf--ab__c:nth-child(2).top {\\n transform: translateY(120px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(3) {\\n transform: translateY(-180px) scale(1);\\n transition-delay: 0.12s; }\\n .rtf.open .rtf--ab__c:nth-child(3).top {\\n transform: translateY(180px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(4) {\\n transform: translateY(-240px) scale(1);\\n transition-delay: 0.15s; }\\n .rtf.open .rtf--ab__c:nth-child(4).top {\\n transform: translateY(240px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(5) {\\n transform: translateY(-300px) scale(1);\\n transition-delay: 0.18s; }\\n .rtf.open .rtf--ab__c:nth-child(5).top {\\n transform: translateY(300px) scale(1); }\\n .rtf.open .rtf--ab__c:nth-child(6) {\\n transform: translateY(-360px) scale(1);\\n transition-delay: 0.21s; }\\n .rtf.open .rtf--ab__c:nth-child(6).top {\\n transform: translateY(360px) scale(1); }\\n\\n.rtf--mb__c {\\n padding: 25px;\\n margin: -25px; }\\n .rtf--mb__c *:last-child {\\n margin-bottom: 0; }\\n .rtf--mb__c:hover > span {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf--mb__c > span.always-show {\\n transition: ease-in-out opacity 0.2s;\\n opacity: 0.9; }\\n .rtf--mb__c > span {\\n opacity: 0;\\n transition: ease-in-out opacity 0.2s;\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n margin-right: 6px;\\n margin-left: 4px;\\n background: rgba(0, 0, 0, 0.75);\\n padding: 2px 4px;\\n border-radius: 2px;\\n color: #fff;\\n font-size: 13px;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28); }\\n .rtf--mb__c > span.right {\\n right: 100%; }\\n\\n.rtf--mb {\\n height: 56px;\\n width: 56px;\\n z-index: 9999;\\n background-color: #666;\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n position: relative;\\n border: none;\\n border-radius: 50%;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28);\\n cursor: pointer;\\n outline: none;\\n padding: 0;\\n -webkit-user-drag: none;\\n font-weight: bold;\\n color: #f1f1f1;\\n font-size: 18px; }\\n .rtf--mb > * {\\n transition: ease-in-out transform 0.2s; }\\n\\n.rtf--ab__c {\\n display: block;\\n position: absolute;\\n top: 0;\\n right: 1px;\\n padding: 10px 0;\\n margin: -10px 0;\\n transition: ease-in-out transform 0.2s; }\\n .rtf--ab__c > span {\\n opacity: 0;\\n transition: ease-in-out opacity 0.2s;\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n margin-right: 6px;\\n background: rgba(0, 0, 0, 0.75);\\n padding: 2px 4px;\\n border-radius: 2px;\\n color: #fff;\\n font-size: 13px;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28); }\\n .rtf--ab__c > span.right {\\n right: 100%; }\\n .rtf--ab__c:nth-child(1) {\\n transform: translateY(-60px) scale(0);\\n transition-delay: 0.21s; }\\n .rtf--ab__c:nth-child(1).top {\\n transform: translateY(60px) scale(0); }\\n .rtf--ab__c:nth-child(2) {\\n transform: translateY(-120px) scale(0);\\n transition-delay: 0.18s; }\\n .rtf--ab__c:nth-child(2).top {\\n transform: translateY(120px) scale(0); }\\n .rtf--ab__c:nth-child(3) {\\n transform: translateY(-180px) scale(0);\\n transition-delay: 0.15s; }\\n .rtf--ab__c:nth-child(3).top {\\n transform: translateY(180px) scale(0); }\\n .rtf--ab__c:nth-child(4) {\\n transform: translateY(-240px) scale(0);\\n transition-delay: 0.12s; }\\n .rtf--ab__c:nth-child(4).top {\\n transform: translateY(240px) scale(0); }\\n .rtf--ab__c:nth-child(5) {\\n transform: translateY(-300px) scale(0);\\n transition-delay: 0.09s; }\\n .rtf--ab__c:nth-child(5).top {\\n transform: translateY(300px) scale(0); }\\n .rtf--ab__c:nth-child(6) {\\n transform: translateY(-360px) scale(0);\\n transition-delay: 0.03s; }\\n .rtf--ab__c:nth-child(6).top {\\n transform: translateY(360px) scale(0); }\\n\\n.rtf--ab {\\n height: 48px;\\n width: 48px;\\n background-color: #aaa;\\n display: inline-flex;\\n justify-content: center;\\n align-items: center;\\n position: relative;\\n border: none;\\n border-radius: 50%;\\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.14), 0 4px 8px rgba(0, 0, 0, 0.28);\\n cursor: pointer;\\n outline: none;\\n padding: 0;\\n -webkit-user-drag: none;\\n font-weight: bold;\\n color: #f1f1f1;\\n margin-right: 4px;\\n font-size: 16px;\\n z-index: 10000; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/*multiple box*/\\n.redux-templates-multiple-template-box {\\n margin-bottom: 25px;\\n position: relative;\\n transition: all 0.05s ease-in-out; }\\n .redux-templates-multiple-template-box img {\\n transition: all 0.05s ease-in-out; }\\n .redux-templates-multiple-template-box .redux-templates-box-shadow {\\n transition: all 0.05s ease-in-out;\\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); }\\n .redux-templates-multiple-template-box .redux-templates-default-template-image .imageloader-loaded {\\n overflow: hidden; }\\n .redux-templates-multiple-template-box .multiple-template-view {\\n background: #fff;\\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05), 0 10px 0 -5px #fff, 0 10px 1px -4px rgba(0, 0, 0, 0.08), 0 20px 0 -10px #fff, 0 20px 1px -9px rgba(0, 0, 0, 0.08);\\n cursor: pointer;\\n min-height: 100px; }\\n .redux-templates-multiple-template-box .redux-templates-import-button-group {\\n margin-top: 15%; }\\n .redux-templates-multiple-template-box .redux-templates-tmpl-info {\\n padding: 10px 12px;\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n background: rgba(255, 255, 255, 0.95);\\n border-top: 1px solid #f2f4f7;\\n transition: all 0.2s ease-in-out; }\\n .redux-templates-multiple-template-box .redux-templates-tmpl-info h5 {\\n margin: 0;\\n font-size: 14px;\\n color: #23282d;\\n line-height: 19px; }\\n .redux-templates-multiple-template-box .redux-templates-tmpl-info h5 span {\\n font-size: 13px;\\n color: #cdcfd1;\\n line-height: 18px; }\\n .redux-templates-multiple-template-box .redux-templates-button-overlay {\\n width: 100%;\\n height: 100%;\\n position: absolute;\\n top: 0;\\n left: 0;\\n border-radius: 0px;\\n opacity: 0;\\n -webkit-transition: opacity 0.2s ease-in-out;\\n transition: opacity 0.2s ease-in-out;\\n box-sizing: border-box; }\\n .redux-templates-multiple-template-box::before {\\n z-index: 2; }\\n .redux-templates-multiple-template-box::after {\\n z-index: 1; }\\n .redux-templates-multiple-template-box .redux-templates-button-overlay {\\n background: rgba(0, 0, 0, 0.5);\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n opacity: 0; }\\n .redux-templates-multiple-template-box:hover .redux-templates-box-shadow {\\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.3); }\\n .redux-templates-multiple-template-box:hover .multiple-template-view {\\n border-color: transparent; }\\n .redux-templates-multiple-template-box:hover .redux-templates-tmpl-info {\\n border-top-color: transparent;\\n background: #fff; }\\n .redux-templates-multiple-template-box:hover .redux-templates-button-overlay {\\n opacity: 1; }\\n .redux-templates-multiple-template-box:hover img {\\n filter: blur(2px); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".tablenav-pages {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n margin-bottom: 20px; }\\n .tablenav-pages span.displaying-num {\\n margin-right: 20px; }\\n .tablenav-pages #table-paging {\\n margin-left: 10px;\\n margin-right: 10px; }\\n .tablenav-pages #table-paging span {\\n line-height: 30px; }\\n .tablenav-pages span.tablenav-pages-navspan.button {\\n cursor: pointer;\\n margin: 0 2px; }\\n .tablenav-pages span.tablenav-pages-navspan.button.disabled {\\n cursor: default; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".action-buttons span,\\n.action-buttons a {\\n display: inline-block;\\n padding: 0 12px 2px;\\n margin: 2px;\\n height: 33px;\\n line-height: 32px;\\n font-size: 13px;\\n color: #353535;\\n border: 1px solid #f7f7f7;\\n background: #f7f7f7;\\n box-shadow: 0 1px 2px #ddd;\\n vertical-align: top;\\n border-radius: 3px;\\n text-decoration: none;\\n cursor: pointer;\\n -webkit-transition: all 0.2s ease-in-out;\\n transition: all 0.2s ease-in-out; }\\n .action-buttons span:hover,\\n .action-buttons a:hover {\\n box-shadow: 0 1px 2px #ccc;\\n background: #f1f1f1; }\\n\\n.action-buttons span i,\\n.action-buttons a i {\\n font-size: 10px;\\n margin-right: 4px; }\\n\\n.action-buttons span {\\n background: #0085ba;\\n border-color: #006a95 #00648c #00648c;\\n box-shadow: inset 0 -1px 0 #00648c;\\n color: #fff;\\n text-decoration: none;\\n text-shadow: 0 -1px 1px #005d82, 1px 0 1px #005d82, 0 1px 1px #005d82, -1px 0 1px #005d82; }\\n\\n.action-buttons a.redux-templates-button-download {\\n border: 1px solid #f5a623;\\n background: #f5a623;\\n box-shadow: 0 1px 0 #165cb4;\\n color: #fff; }\\n\\n.action-buttons .redux-templates-button-download {\\n margin-left: 5px; }\\n\\n.action-buttons i.challenge-dot {\\n margin-top: 10px;\\n margin-left: 5px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-single-section-item {\\n box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.2);\\n margin-bottom: 30px;\\n transition: all 0.05s ease-in-out; }\\n .redux-templates-single-section-item .redux-templates-tmpl-title {\\n background: rgba(255, 255, 255, 0.95);\\n border-top: 1px solid #f2f4f7;\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n margin: 0;\\n color: #23282d;\\n padding: 13px 15px;\\n font-size: 15px; }\\n .redux-templates-single-section-item .redux-templates-single-item-inner {\\n position: relative;\\n overflow: hidden;\\n background: #999; }\\n .redux-templates-single-section-item .redux-templates-single-item-inner .warn_notice {\\n color: #fbbc0e;\\n font-weight: bold;\\n margin-bottom: 15px;\\n font-size: 14px;\\n opacity: 0;\\n text-align: center; }\\n .redux-templates-single-section-item .redux-templates-single-item-inner .redux-templates-default-template-image {\\n max-height: 350px;\\n min-height: 100px;\\n transition: 300ms; }\\n\\n#collections-sections-list.large > div {\\n width: 50%; }\\n\\n#collections-sections-list.small > div {\\n width: 25%; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-template-filters .is-active {\\n background: #fff;\\n color: #191e23;\\n box-shadow: inset 0 0 0 1px #555d66, inset 0 0 0 2px #fff; }\\n\\n.redux-templates-template-filters .components-button:focus:not(:disabled):not(.is-active) {\\n background: transparent;\\n box-shadow: none;\\n color: #555d66; }\\n\\n.refresh-library {\\n margin-right: 10px; }\\n\\n.tour-icon {\\n font-size: 18px; }\\n\\n.trial_notice * {\\n vertical-align: middle; }\\n\\n.trial_notice .components-notice__content {\\n margin-right: 0; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-edit-post-welcome-guide {\\n width: 412px; }\\n .redux-edit-post-welcome-guide__image {\\n background: #00a0d2;\\n width: 412px;\\n border-bottom: 1px solid #ddd; }\\n .redux-edit-post-welcome-guide__image__prm-r {\\n display: none; }\\n @media (prefers-reduced-motion: reduce) {\\n .redux-edit-post-welcome-guide__image__prm-r {\\n display: block; }\\n .redux-edit-post-welcome-guide__image__prm-np {\\n display: none; } }\\n .redux-edit-post-welcome-guide__heading {\\n font-family: \\\"Noto Serif\\\", serif;\\n font-size: 24px;\\n line-height: 1.4;\\n margin: 0 0 16px 0;\\n padding: 0 32px; }\\n .redux-edit-post-welcome-guide__text {\\n font-size: 16px;\\n line-height: 1.4;\\n margin: 0 0 24px 0;\\n padding: 0 32px;\\n font-weight: normal; }\\n .redux-edit-post-welcome-guide__inserter-icon {\\n margin: 0 4px;\\n vertical-align: text-top; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-css-editor {\\n border: 1px solid #e2e4e7;\\n margin-bottom: 20px; }\\n\\n.redux-css-editor-help {\\n background: #f7f7f7;\\n padding: 20px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#redux-templatesImportCollectionBtn {\\n vertical-align: middle;\\n display: inline-flex;\\n align-items: center;\\n text-decoration: none;\\n border: 1px solid #bababa;\\n border-radius: 3px;\\n white-space: nowrap;\\n color: #555d66;\\n font-size: 13px;\\n margin: 0 15px 0 15px;\\n padding: 9px 12px;\\n background: transparent;\\n cursor: pointer;\\n -webkit-appearance: none;\\n transition: 400ms; }\\n #redux-templatesImportCollectionBtn svg {\\n height: 16px;\\n width: 16px;\\n margin-right: 8px; }\\n #redux-templatesImportCollectionBtn svg * {\\n stroke: #555d66;\\n fill: #555d66;\\n stroke-width: 0; }\\n #redux-templatesImportCollectionBtn:hover, #redux-templatesImportCollectionBtn:focus, #redux-templatesImportCollectionBtn:active {\\n text-decoration: none;\\n border: 1px solid #191e23;\\n color: #191e23; }\\n #redux-templatesImportCollectionBtn:hover svg *, #redux-templatesImportCollectionBtn:focus svg *, #redux-templatesImportCollectionBtn:active svg * {\\n stroke: #191e23 !important;\\n fill: #191e23 !important;\\n stroke-width: 0; }\\n\\n.redux-templates-editor-btn {\\n background: none;\\n border: 0;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n overflow: visible;\\n padding: 0;\\n -webkit-appearance: button;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none; }\\n .redux-templates-editor-btn::-moz-focus-inner {\\n border: 0;\\n padding: 0; }\\n\\n.d-flex {\\n display: flex; }\\n\\n.justify-content-center {\\n justify-content: center; }\\n\\n.redux-css-editor {\\n border: 1px solid #e2e4e7;\\n margin-bottom: 20px; }\\n\\n.redux-css-editor-help {\\n background: #f7f7f7;\\n padding: 20px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-modal-wrapper {\\n /* ReduxTemplatesPremiumBox */ }\\n .redux-templates-modal-wrapper .redux-templates-modal-body {\\n flex: 1 1 auto;\\n padding-left: 30px;\\n padding-right: 30px;\\n box-sizing: border-box;\\n background: #fff; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body h5 {\\n font-size: 1.1em;\\n font-weight: 600; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body ul {\\n list-style-position: inside;\\n list-style-type: disc; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body ul.redux-templates-import-wizard-missing-dependency li {\\n line-height: 1.8; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error {\\n color: #f00; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error i {\\n color: inherit; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error.installError {\\n text-align: center; }\\n .redux-templates-modal-wrapper .redux-templates-import-wizard-spinner-wrapper {\\n position: absolute;\\n width: calc(100% - 60px);\\n height: 100%;\\n flex: 1 1 auto;\\n align-items: center;\\n justify-content: center;\\n display: flex;\\n flex-direction: column; }\\n .redux-templates-modal-wrapper .redux-templates-import-wizard-spinner-wrapper .text-transition {\\n text-align: center;\\n font-size: 18px;\\n color: #555d66;\\n margin-bottom: 20px; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress {\\n font-size: 1.1em;\\n text-align: center; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li {\\n list-style: none; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li.success i {\\n color: #46b450; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li.info i {\\n color: #00a0d2; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress {\\n width: 50%;\\n margin: 10px auto; }\\n .redux-templates-modal-wrapper .redux-templates-import-progress li {\\n display: flex;\\n justify-content: space-between; }\\n .redux-templates-modal-wrapper .section-box.premium-box {\\n margin: 35px auto;\\n text-align: center; }\\n .redux-templates-modal-wrapper .section-box.premium-box h3 {\\n font-size: 1.5em;\\n line-height: 1.1em;\\n margin-top: 0px; }\\n .redux-templates-modal-wrapper .section-box.premium-box p {\\n font-size: calc(13px + 0.2vw); }\\n .redux-templates-modal-wrapper .section-box.premium-box ul {\\n width: 50%;\\n margin: 0 auto;\\n text-align: left;\\n list-style-type: disc;\\n list-style-position: inside; }\\n .redux-templates-modal-wrapper .section-box.premium-box .redux-templates-upgrade-button {\\n border: none;\\n border-radius: 4px;\\n cursor: pointer;\\n opacity: 1;\\n background: #24b0a6;\\n transition: opacity 0.2s ease-in-out;\\n box-shadow: none !important;\\n color: #fff;\\n text-decoration: none;\\n padding: 0.75em 1.25em;\\n display: block;\\n margin: 30px auto 0 auto;\\n max-width: 200px;\\n text-align: center;\\n font-size: 1em; }\\n .redux-templates-modal-wrapper .section-box.premium-box .redux-templates-upgrade-button:hover {\\n color: #fff;\\n opacity: 0.85;\\n box-shadow: none !important;\\n background: #19837c; }\\n .redux-templates-modal-wrapper .redux-templates-importmodal-content {\\n flex: 1;\\n display: flex;\\n flex-direction: column; }\\n\\n.text-transition {\\n width: 100% !important;\\n text-align: center; }\\n .text-transition .text-transition_inner > div {\\n font-size: 1.1rem; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-collection-modal-sidebar {\\n min-width: 270px;\\n background: #fff;\\n color: #32373c;\\n /* $secondaryColor;*/\\n border-right: 1px solid #e2e4e7;\\n overflow-y: auto; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group {\\n margin: 10px 0;\\n border-bottom: 1px solid #e2e4e7;\\n width: 100%;\\n display: inline-flex; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button {\\n font-weight: 500;\\n flex-grow: 1;\\n min-width: 30%;\\n line-height: 20px;\\n padding: 8px 0 10px 15px;\\n align-items: center;\\n text-align: left;\\n background: none;\\n position: relative;\\n margin-bottom: -1px;\\n border-width: 0;\\n z-index: 1;\\n cursor: pointer;\\n outline: none;\\n border-color: transparent;\\n box-shadow: none;\\n border-bottom: unset; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button::after {\\n content: attr(data-label);\\n display: block;\\n height: 0;\\n overflow: hidden;\\n speak: none;\\n visibility: hidden; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button:hover {\\n color: #007cba;\\n color: var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button:focus {\\n box-shadow: inset 0 0 0 1.5px #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.active {\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.active::before {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n bottom: 1px;\\n right: 0;\\n left: 0;\\n border-bottom: 4px solid transparent; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.active:focus {\\n box-shadow: inset 0 0 0 1.5px #007cba, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color), inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button.disabled {\\n opacity: 0.4; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button img {\\n display: inline-block;\\n width: auto;\\n height: 14px;\\n margin-right: 4px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-template-filter-button-group button:last-child img {\\n margin-bottom: -2px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content {\\n padding: 0 15px 15px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content h3 {\\n margin: 5px 12px 10px 0;\\n color: #757575;\\n text-transform: uppercase;\\n font-size: 11px;\\n font-weight: 500; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul {\\n list-style: unset;\\n -webkit-touch-callout: none;\\n /* iOS Safari */\\n -webkit-user-select: none;\\n /* Safari */\\n -khtml-user-select: none;\\n /* Konqueror HTML */\\n -moz-user-select: none;\\n /* Old versions of Firefox */\\n -ms-user-select: none;\\n /* Internet Explorer/Edge */\\n user-select: none;\\n /* Non-prefixed version, currently\\n supported by Chrome, Edge, Opera and Firefox */\\n margin: 0 15px 15px 15px;\\n padding: 0; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li {\\n display: block;\\n font-size: 13px;\\n cursor: pointer;\\n height: auto;\\n -webkit-transition: height 0.5s linear;\\n -moz-transition: height 0.5s linear;\\n -ms-transition: height 0.5s linear;\\n -o-transition: height 0.5s linear;\\n transition: height 0.5s linear; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li .redux-icon-wrapper {\\n margin-left: 10px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li:not(.disabled):hover {\\n color: #007cba;\\n color: var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.active {\\n color: #007cba;\\n color: var(--wp-admin-theme-color);\\n text-shadow: 0 0 0.5px #007cba;\\n text-shadow: 0 0 0.5px var(--wp-admin-theme-color); }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.disabled {\\n display: none;\\n height: 0px;\\n -webkit-transition: height 0.5s linear;\\n -moz-transition: height 0.5s linear;\\n -ms-transition: height 0.5s linear;\\n -o-transition: height 0.5s linear;\\n transition: height 0.5s linear; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li span {\\n float: right; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.missing-dependency i.fa-exclamation-triangle {\\n color: #b27823; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.missing-dependency:hover i.fa-exclamation-triangle {\\n color: #f5a623; }\\n .redux-templates-collection-modal-sidebar .redux-templates-modal-sidebar-content ul li.missing-dependency.active i.fa-exclamation-triangle {\\n color: #f5a623; }\\n .redux-templates-collection-modal-sidebar ul.redux-templates-sidebar-dependencies li .components-base-control {\\n display: inline-block;\\n margin-bottom: 0 !important; }\\n .redux-templates-collection-modal-sidebar ul.redux-templates-sidebar-dependencies li .components-base-control .components-base-control__field {\\n margin-bottom: 3px; }\\n .redux-templates-collection-modal-sidebar ul.redux-templates-sidebar-dependencies li .components-base-control span {\\n float: none; }\\n .redux-templates-collection-modal-sidebar .redux-templates-select-actions {\\n margin: 0 0 10px 15px;\\n display: inline-flex; }\\n .redux-templates-collection-modal-sidebar .redux-templates-select-actions i.challenge-dot {\\n margin-left: 10px; }\\n .redux-templates-collection-modal-sidebar .redux-templates-select-actions.disabled a {\\n pointer-events: none;\\n cursor: default;\\n text-decoration: none;\\n opacity: 0.6; }\\n .redux-templates-collection-modal-sidebar .redux-templates-sidebar-dependencies li a {\\n display: inline-block;\\n margin-left: 10px; }\\n .redux-templates-collection-modal-sidebar #redux-templates-filter-dependencies h3 {\\n margin-top: 0;\\n padding-top: 3px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-collections-modal-body {\\n display: flex;\\n flex: 1;\\n overflow-y: auto; }\\n\\n.redux-templates-builder-modal {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n z-index: 9999;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n pointer-events: none; }\\n .redux-templates-builder-modal.hidden {\\n display: none; }\\n .redux-templates-builder-modal .wp-full-overlay-sidebar .wp-core-ui .button-group.button-hero .button,\\n .redux-templates-builder-modal .wp-full-overlay-sidebar .wp-core-ui .button.button-hero {\\n text-align: center !important; }\\n .redux-templates-builder-modal * {\\n box-sizing: border-box;\\n pointer-events: all; }\\n .redux-templates-builder-modal .redux-templates-pagelist-modal-overlay {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n background: #f00;\\n left: 0;\\n top: 0;\\n z-index: -1;\\n background: rgba(3, 8, 15, 0.75); }\\n .redux-templates-builder-modal .components-base-control__field {\\n display: flex; }\\n .redux-templates-builder-modal textarea {\\n width: 100%;\\n height: 80px; }\\n .redux-templates-builder-modal .redux-icon-wrapper {\\n display: inline-block; }\\n .redux-templates-builder-modal button.components-button {\\n z-index: unset; }\\n\\n.redux-templates-builder-modal-header {\\n display: flex;\\n border-bottom: 1px solid #e2e4e7;\\n background: #fff; }\\n .redux-templates-builder-modal-header .template-search-box {\\n position: relative;\\n width: 270px; }\\n .redux-templates-builder-modal-header .template-search-box > div {\\n padding: 10px; }\\n .redux-templates-builder-modal-header .template-search-box i {\\n font-size: 13px;\\n color: #757575;\\n position: absolute;\\n top: 50%;\\n right: 30px;\\n transform: translateY(-50%); }\\n .redux-templates-builder-modal-header .template-search-box i.challenge-dot {\\n right: 20px;\\n left: auto; }\\n .redux-templates-builder-modal-header .template-search-box i.clear-search {\\n right: 20px;\\n left: auto;\\n color: #fff;\\n font-size: 12px;\\n display: none;\\n cursor: pointer;\\n padding: 5px; }\\n .redux-templates-builder-modal-header .template-search-box input {\\n display: block;\\n width: 100%;\\n box-shadow: 0 0 0 transparent;\\n transition: box-shadow 0.1s linear;\\n border-radius: 2px;\\n line-height: normal;\\n display: block;\\n padding: 16px 48px 16px 16px;\\n background: #f3f4f5;\\n border: none;\\n width: 100%;\\n height: 40px;\\n font-size: 13px; }\\n .redux-templates-builder-modal-header .template-search-box input::-webkit-input-placeholder {\\n /* WebKit browsers */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input:-moz-placeholder {\\n /* Mozilla Firefox 4 to 18 */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input::-moz-placeholder {\\n /* Mozilla Firefox 19+ */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input:-ms-input-placeholder {\\n /* Internet Explorer 10+ */\\n color: #606a73;\\n font-style: italic;\\n opacity: 1; }\\n .redux-templates-builder-modal-header .template-search-box input:focus {\\n border-color: #007cba;\\n border-color: var(--wp-admin-theme-color);\\n background: #fff;\\n box-shadow: 0 0 0 1.5px #007cba;\\n box-shadow: 0 0 0 1.5px var(--wp-admin-theme-color);\\n outline: 2px solid transparent; }\\n .redux-templates-builder-modal-header .template-search-box:hover .clear-search {\\n display: block; }\\n\\n.redux-templates-pagelist-modal-inner {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n background: #f1f1f1;\\n width: 85.9375%;\\n height: 89.537037%;\\n max-width: 1650px;\\n max-height: 967px;\\n box-shadow: 0 0 45px 10px rgba(3, 8, 15, 0.2);\\n animation: components-modal__appear-animation 0.1s ease-out;\\n animation-fill-mode: forwards; }\\n .redux-templates-pagelist-modal-inner .redux-templates-collection-modal-content-area {\\n flex-grow: 1;\\n max-height: 100%;\\n overflow-y: auto;\\n position: relative; }\\n\\n.redux-templates-template-list-header {\\n text-align: center;\\n position: relative;\\n flex-grow: 1;\\n padding-right: 50px; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal) {\\n flex-grow: 1;\\n line-height: 28px;\\n margin-top: 6px;\\n padding: 14px 15px 13px 15px;\\n text-align: left;\\n font-weight: 600;\\n width: 150px;\\n align-items: center;\\n background: none;\\n position: relative;\\n margin-bottom: -1px;\\n border-width: 0;\\n z-index: 1;\\n cursor: pointer;\\n outline: none;\\n border-color: transparent;\\n box-shadow: none;\\n border-bottom: unset; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal)::after {\\n content: attr(data-label);\\n display: block;\\n height: 0;\\n overflow: hidden;\\n speak: none;\\n visibility: hidden; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal):hover {\\n color: #007cba;\\n color: var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal):focus {\\n box-shadow: inset 0 0 0 1.5px #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).active {\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px transparent, inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).active::before {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n bottom: 1px;\\n right: 0;\\n left: 0;\\n border-bottom: 4px solid transparent; }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).active:focus {\\n box-shadow: inset 0 0 0 1.5px #007cba, inset 0 -4px 0 0 #007cba;\\n box-shadow: inset 0 0 0 1.5px var(--wp-admin-theme-color), inset 0 -4px 0 0 var(--wp-admin-theme-color); }\\n .redux-templates-template-list-header button:not(.redux-templates-builder-close-modal).disabled {\\n opacity: 0.5; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal {\\n position: absolute;\\n top: 0;\\n right: 0;\\n width: 60px;\\n height: 60px;\\n margin: 0;\\n padding: 0;\\n border: 1px solid transparent;\\n background: none;\\n font-size: 15px;\\n cursor: pointer;\\n outline: none;\\n transition: color 0.1s ease-in-out, background 0.1s ease-in-out; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal i {\\n -webkit-text-stroke: 1.2px #fff; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal svg {\\n margin-top: 4px; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal:hover, .redux-templates-template-list-header .redux-templates-builder-close-modal:active {\\n color: #00a0d2; }\\n .redux-templates-template-list-header .redux-templates-builder-close-modal:focus {\\n color: #00a0d2;\\n border-color: #5b9dd9;\\n box-shadow: 0 0 3px rgba(0, 115, 170, 0.8);\\n /* Only visible in Windows High Contrast mode */\\n outline: 2px solid transparent; }\\n\\n.redux-templates-template-list-sub-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 23px 25px 0; }\\n .redux-templates-template-list-sub-header h4 {\\n font-size: 21px;\\n color: #0e2244;\\n font-weight: 500;\\n margin: 0; }\\n .redux-templates-template-list-sub-header h4 i.challenge-dot {\\n margin-left: 10px; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filters {\\n display: flex;\\n justify-content: space-between;\\n align-items: center; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group {\\n background: #f8fafb;\\n display: inline-flex;\\n border: 1px solid #d8d8d8;\\n border-radius: 4px;\\n margin-left: 10px; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button {\\n display: inline-flex;\\n line-height: 28px;\\n padding: 5px 18px;\\n align-items: center;\\n background: none;\\n border: none;\\n color: #587e97;\\n position: relative;\\n z-index: 1;\\n cursor: pointer; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button:focus {\\n outline: none;\\n box-shadow: 0 0 0 1.5px #007cba;\\n box-shadow: 0 0 0 1.5px var(--wp-admin-theme-color);\\n outline: 1px solid transparent; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button:last-child {\\n color: #f5a623; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.active {\\n background: #f5a623;\\n color: #fff; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.disabled {\\n opacity: 0.5; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button img {\\n display: inline-block;\\n width: auto;\\n height: 14px;\\n margin-right: 4px; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button:not(:last-child)::after {\\n content: \\\"\\\";\\n height: 13px;\\n background-color: #c4cbcf;\\n width: 1px;\\n right: 0px;\\n top: 50%;\\n position: absolute;\\n transform: translateY(-50%); }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.active::after {\\n display: none; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button::before {\\n content: \\\"\\\";\\n position: absolute;\\n background: #f5a623;\\n height: calc(100% + 4px);\\n width: calc(100% + 4px);\\n left: -2px;\\n top: -2px;\\n z-index: -1;\\n border-radius: 4px;\\n box-shadow: 0 0 4px rgba(33, 32, 249, 0.3);\\n opacity: 0; }\\n .redux-templates-template-list-sub-header .redux-templates-template-filter-button-group button.active::before {\\n opacity: 1; }\\n\\n.redux-templates-modal-loader {\\n display: inline-block;\\n position: absolute;\\n width: 80px;\\n height: 80px;\\n line-height: 80px;\\n text-align: center;\\n left: 50%;\\n margin-left: -50px;\\n top: 50%;\\n margin-top: -50px;\\n font-size: 24px;\\n color: #1e7ed8; }\\n\\n.redux-templates-modal-loader img {\\n height: 80px;\\n width: 80px; }\\n\\n/*block style*/\\n.redux-templates-builder-template-found-empty {\\n text-align: center;\\n border-color: transparent !important; }\\n .redux-templates-builder-template-found-empty .redux-templates-builder-empty-title {\\n display: block;\\n width: 100%; }\\n\\n.redux-templates-pro-badge {\\n position: absolute;\\n background: rgba(255, 0, 0, 0.75);\\n cursor: pointer;\\n padding: 5px 6px;\\n border-radius: 3px;\\n color: #fff;\\n font-size: 10px;\\n right: 20px;\\n top: 20px;\\n line-height: 1;\\n transition: background 0.1s linear; }\\n\\n.redux-templates-missing-badge {\\n position: absolute;\\n cursor: pointer;\\n background: rgba(242, 168, 72, 0.75);\\n border-radius: 3px;\\n color: #fff;\\n font-size: 10px;\\n right: 20px;\\n top: 20px;\\n line-height: 1;\\n transition: background 0.1s linear; }\\n .redux-templates-missing-badge i {\\n margin: 5px; }\\n\\n.redux-templates-button-overlay .redux-templates-pro-badge {\\n background: rgba(255, 0, 0, 0.85); }\\n\\n.redux-templates-button-overlay .redux-templates-missing-badge {\\n background: rgba(242, 168, 72, 0.85); }\\n\\n.redux-templates-default-template-image {\\n /* background-image: url('/img/redux-templates-medium.jpg');\\n background-size: cover; */\\n background: #888;\\n transition: 300ms; }\\n .redux-templates-default-template-image .imageloader-loaded {\\n max-height: 285px; }\\n .redux-templates-default-template-image img {\\n width: 100%;\\n display: block; }\\n\\n.redux-templates-item-wrapper {\\n position: relative; }\\n .redux-templates-item-wrapper .redux-templates-button-overlay {\\n position: absolute;\\n width: 100%;\\n opacity: 0;\\n background: rgba(0, 0, 0, 0.5);\\n height: 100%;\\n top: 0;\\n left: 0;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n transition: 300ms; }\\n .redux-templates-item-wrapper .redux-templates-button-overlay .redux-templates-tmpl-title {\\n margin: 0 0 15px;\\n color: #fff;\\n font-size: 19px;\\n font-weight: 400; }\\n .redux-templates-item-wrapper.focused .redux-templates-button-overlay, .redux-templates-item-wrapper:hover .redux-templates-button-overlay {\\n opacity: 1; }\\n .redux-templates-item-wrapper.focused .redux-templates-default-template-image, .redux-templates-item-wrapper:hover .redux-templates-default-template-image {\\n filter: blur(3px); }\\n .redux-templates-item-wrapper.missing_requirements .warn_notice {\\n opacity: 1; }\\n .redux-templates-item-wrapper.missing_requirements .redux-templates-button-download {\\n background-color: #fdbb05;\\n background-image: none;\\n border-color: #ffc107; }\\n\\n.redux-templates-template-option-header {\\n padding: 20px 20px 0; }\\n .redux-templates-template-option-header .redux-templates-template-back {\\n cursor: pointer; }\\n .redux-templates-template-option-header .redux-templates-template-back .dashicons {\\n vertical-align: text-bottom; }\\n\\n#wpwrap .edit-post-visual-editor .import-collection-btn-container {\\n text-align: center;\\n margin-top: 20px; }\\n\\n#wpwrap .edit-post-visual-editor .import-collection-btn-container #importCollectionBtn {\\n color: #fff;\\n font-size: 13px; }\\n\\n.redux-templates-template-back {\\n cursor: pointer; }\\n .redux-templates-template-back .dashicons {\\n vertical-align: text-bottom; }\\n\\n.spinner-wrapper {\\n position: absolute;\\n left: 0;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n background: rgba(0, 0, 0, 0.5); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-collection-details-view {\\n padding: 40px 22.5px 60px;\\n width: 100%;\\n justify-content: center;\\n position: relative;\\n display: flex; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left {\\n width: 600px;\\n margin: 0 37px 0 17px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-back {\\n height: 32px;\\n line-height: 20px;\\n color: #818a91;\\n font-size: 15px;\\n font-weight: 600;\\n display: -webkit-inline-box;\\n display: -ms-inline-flexbox;\\n display: inline-flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n cursor: pointer;\\n margin-bottom: 20px;\\n -webkit-transition: color 0.1s ease;\\n transition: color 0.1s ease; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-preview {\\n background-position: center top;\\n background-size: contain;\\n width: 100%;\\n background-repeat: no-repeat;\\n transition: background 1.5s ease;\\n height: 84.71%; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-preview.has_full {\\n transition: background-position 1.5s linear;\\n background-position: center top;\\n background-size: cover;\\n width: 100%;\\n background-repeat: no-repeat;\\n -webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1); }\\n .redux-templates-collection-details-view .redux-templates-collection-details-left .details-preview.has_full:hover {\\n background-position: center bottom;\\n background-size: cover; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right {\\n width: 520px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-title {\\n height: 30px;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: justify;\\n -ms-flex-pack: justify;\\n justify-content: space-between;\\n padding: 2px 25px 0 10px;\\n margin-bottom: 20px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-title h3 {\\n color: rgba(3, 8, 15, 0.92);\\n font-size: 28px;\\n font-weight: 600;\\n line-height: 34px;\\n margin: 0; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-title span {\\n color: #818a91;\\n font-size: 13px;\\n font-weight: 600;\\n line-height: 16px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-list {\\n height: 84.71%; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .details-list .details-inner {\\n height: 100%;\\n overflow-y: auto; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select {\\n width: 150px;\\n height: 150px;\\n overflow: hidden;\\n margin: 0 8px 15px;\\n -webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n position: relative;\\n display: inline-block;\\n cursor: pointer;\\n -webkit-transition: all 0.1s ease-in-out;\\n transition: all 0.1s ease-in-out; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::before, .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::after {\\n content: \\\"\\\";\\n width: 100%;\\n height: 100%;\\n position: absolute;\\n top: 0;\\n left: 0;\\n pointer-events: none;\\n opacity: 0;\\n box-sizing: border-box; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::before {\\n opacity: 0.7;\\n z-index: 2; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select::after {\\n opacity: 0.7;\\n z-index: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image {\\n width: 100%;\\n height: 150px;\\n background-repeat: no-repeat;\\n background-size: cover;\\n border: 1px solid #ececec;\\n position: relative; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .pro,\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .install {\\n position: absolute;\\n background: #f00;\\n padding: 2px 3px;\\n border-radius: 3px;\\n color: #fff;\\n font-size: 9px;\\n right: 5px;\\n top: 5px;\\n text-transform: uppercase;\\n line-height: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .pro {\\n background: #f00; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-image .install {\\n background: #f2a848; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select .detail-label {\\n border-top: 1px solid #f2f4f7;\\n width: 100%;\\n height: 30px;\\n opacity: 1;\\n background-color: rgba(255, 255, 255, 0.9);\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n color: #23282d;\\n font-family: pn, \\\"Open Sans\\\", Arial, sans-serif;\\n font-size: 13px;\\n font-weight: 600;\\n line-height: 30px;\\n padding-left: 10px; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select:hover {\\n -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select:hover::before, .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select:hover::after {\\n opacity: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active {\\n -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active::before, .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active::after,\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active .detail-label {\\n opacity: 1; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-right .detail-select.detail-select-active::before {\\n border: 3px solid #24b0a6; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer {\\n width: 100%;\\n height: 60px;\\n background: #fff;\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n z-index: 2; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer .footer-grid {\\n width: 100%;\\n padding: 0 10px;\\n height: 100%;\\n margin: auto;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer .import-button {\\n margin-left: 11.5px;\\n background-color: #3dbfe8;\\n color: #fff;\\n font-family: pn, \\\"Open Sans\\\", Arial, sans-serif;\\n font-size: 15px;\\n font-weight: 600;\\n line-height: 18px;\\n padding: 9px 32px;\\n border-radius: 3px;\\n cursor: pointer;\\n -webkit-transition: background-color 150ms linear;\\n transition: background-color 150ms linear; }\\n .redux-templates-collection-details-view .redux-templates-collection-details-footer .import-button:hover {\\n background: rgba(61, 191, 232, 0.8); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-two-sections {\\n position: absolute;\\n width: 85.9375%;\\n height: 89.537037%;\\n max-width: 1650px;\\n max-height: 967px;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n border-radius: 5px;\\n overflow: hidden;\\n -webkit-box-shadow: 0 45px 10px rgba(3, 8, 15, 0.2);\\n box-shadow: 0 0 45px 10px rgba(3, 8, 15, 0.2); }\\n\\n.redux-templates-two-sections__grid {\\n width: 100%;\\n height: 100%;\\n padding: 40px 22.5px;\\n position: relative;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex; }\\n\\n.redux-templates-two-sections__grid__column {\\n width: 100%; }\\n\\n.redux-templates-two-sections__grid-clear {\\n -webkit-box-orient: vertical;\\n -webkit-box-direction: normal;\\n -ms-flex-direction: column;\\n flex-direction: column;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n height: 100%; }\\n\\n.redux-templates-two-sections__grid-clear-text {\\n opacity: 0.9;\\n color: #818a91;\\n font-family: pn, \\\"Open Sans\\\", Arial, sans-serif;\\n font-size: 14px;\\n font-weight: 600;\\n line-height: 17px;\\n margin: 0 0 20px; }\\n\\n.redux-templates-two-sections__grid-clear-image-saved {\\n width: 322px;\\n height: 145px;\\n margin-top: -21px;\\n pointer-events: none; }\\n\\n.redux-templates-two-sections__grid-clear-image-global {\\n width: 524px;\\n height: 207px;\\n margin-top: -28px;\\n pointer-events: none; }\\n\\n.redux-templates-two-section {\\n position: relative;\\n margin: 0 17.5px 35px;\\n cursor: pointer;\\n outline: 3px solid transparent;\\n -webkit-transition: outline 0.3s ease-in-out;\\n transition: outline 0.3s ease-in-out;\\n -webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);\\n border-radius: 3px; }\\n .redux-templates-two-section:last-child {\\n margin-bottom: 0; }\\n .redux-templates-two-section .redux-templates-two-section-remove {\\n position: absolute;\\n z-index: 4;\\n top: -7px;\\n right: -7px;\\n opacity: 0;\\n -webkit-transform: scale(0.7);\\n transform: scale(0.7);\\n -webkit-transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n width: 28px;\\n height: 28px;\\n display: -webkit-box;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-align: center;\\n -ms-flex-align: center;\\n align-items: center;\\n -webkit-box-pack: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n font-size: 12px;\\n border-radius: 28px;\\n background-color: #fff;\\n color: #03080f;\\n -webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);\\n box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);\\n cursor: pointer; }\\n .redux-templates-two-section:hover .redux-templates-two-section-remove {\\n opacity: 1;\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n -webkit-transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; }\\n .redux-templates-two-section:hover .redux-templates-two-section-remove:hover {\\n color: #f00; }\\n .redux-templates-two-section:hover .redux-templates-two-section-item::before {\\n border-color: #3dbfe8; }\\n .redux-templates-two-section:hover .redux-templates-two-section-item::after {\\n border-color: #ececec; }\\n\\n.redux-templates-two-section .preview-image-wrapper {\\n transition: all 0.05s ease-in-out;\\n width: 100%;\\n min-height: 130px;\\n max-height: 300px;\\n overflow: hidden; }\\n .redux-templates-two-section .preview-image-wrapper img {\\n animation-name: fadeIn;\\n animation-fill-mode: both;\\n animation-delay: 200ms;\\n animation-duration: 200ms;\\n width: 100%;\\n height: auto; }\\n\\n.redux-templates-two-section .saved-section-title {\\n border-top: 1px solid #f2f4f7;\\n background: rgba(255, 255, 255, 0.9);\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n margin: 0;\\n color: #23282d;\\n padding: 13px 15px;\\n font-size: 15px;\\n text-align: center;\\n display: flex;\\n justify-content: center;\\n align-items: center; }\\n\\n.no-section {\\n display: flex;\\n width: 100%;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px; }\\n\\n.preview-image-wrapper .block-editor-block-preview__container {\\n transition: all 0.05s ease-in-out;\\n background: #fff;\\n margin: 0 auto;\\n min-height: 130px; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"#collections-sections-list {\\n width: 100%;\\n display: flex;\\n flex-wrap: wrap;\\n padding: 10px 10px 0 10px; }\\n #collections-sections-list > div {\\n width: 33.3333%;\\n padding: 15px;\\n position: relative; }\\n @media (max-width: 1199px) {\\n #collections-sections-list > div {\\n width: 50%; } }\\n #collections-sections-list > div.redux-templates-builder-template-found-empty {\\n width: 100%;\\n text-align: center;\\n opacity: 0.5;\\n border: none !important;\\n padding-top: 70px !important; }\\n #collections-sections-list.redux-templates-frontend-section-list {\\n display: block;\\n padding-bottom: 10px;\\n padding-top: 0px; }\\n #collections-sections-list.redux-templates-frontend-section-list > div {\\n width: 100%;\\n display: flex;\\n flex-wrap: nowrap;\\n border-bottom: 1px solid #e2e4e7;\\n font-weight: 600;\\n padding: 12px 0 12px 15px;\\n margin-bottom: 0;\\n align-items: center; }\\n #collections-sections-list.redux-templates-frontend-section-list > div.redux-templates-reusable-list-title {\\n color: #adafb2; }\\n #collections-sections-list.redux-templates-frontend-section-list > div:first-child {\\n border-top: 1px solid #e2e4e7; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-content {\\n flex-grow: 1; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-info {\\n flex-grow: 1;\\n max-width: 165px;\\n display: flex;\\n flex-wrap: nowrap; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button {\\n margin-left: 30px; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button {\\n display: inline-block;\\n padding: 0;\\n border: none;\\n transition: 300ms;\\n cursor: pointer;\\n background-color: transparent; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button:not(:last-child) {\\n margin-right: 10px; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button i {\\n font-size: 16px;\\n color: #cdcfd1; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button:hover i {\\n color: #007cba; }\\n #collections-sections-list.redux-templates-frontend-section-list > div .redux-templates-reusable-list-button button:last-child:hover i {\\n color: #f00; }\\n #collections-sections-list .redux-templates-pagelist-column.loading {\\n height: 100px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".wp-full-overlay {\\n margin-left: 300px; }\\n\\n@media screen and (min-width: 1667px) {\\n .wp-full-overlay {\\n margin-left: 18%; } }\\n\\nbutton {\\n box-sizing: border-box;\\n pointer-events: all; }\\n\\n.wp-full-overlay.hide {\\n display: none; }\\n\\n.theme-screenshot-wrap {\\n overflow: hidden;\\n position: relative;\\n max-height: 300px;\\n margin: 15px 0;\\n border: 1px solid #ccc; }\\n\\n.install-theme-info {\\n padding-bottom: 0px; }\\n .install-theme-info h3 a {\\n float: right;\\n opacity: 0.6; }\\n .install-theme-info h3 a:hover {\\n opacity: 1; }\\n\\n.install-theme-info .theme-screenshot {\\n width: 100% !important;\\n border: none !important;\\n margin: 0 !important;\\n display: block; }\\n\\n.expanded .wp-full-overlay-footer {\\n height: 111px !important;\\n left: initial; }\\n .expanded .wp-full-overlay-footer .button-hero {\\n text-align: center; }\\n\\n.wp-full-overlay .wp-full-overlay-sidebar-content {\\n bottom: 100px; }\\n .wp-full-overlay .wp-full-overlay-sidebar-content .redux-templates-dependencies-list {\\n border-top: 1px solid #eee;\\n color: #82878c;\\n font-size: 13px;\\n font-weight: 400;\\n margin: 30px 0 0 0; }\\n .wp-full-overlay .wp-full-overlay-sidebar-content .redux-templates-dependencies-list h4 {\\n color: #23282d;\\n font-size: 1.1em;\\n text-align: center; }\\n .wp-full-overlay .wp-full-overlay-sidebar-content .redux-templates-dependencies-list .redux-templates-dependency-blocks .redux-templates-dependency-name {\\n color: #444;\\n font-weight: 600;\\n margin-right: 5px; }\\n\\n.footer-import-button-wrap {\\n padding: 10px 20px;\\n display: flex;\\n justify-content: center; }\\n\\n.wp-full-overlay-footer .view-site,\\n.wp-full-overlay-footer .go-pro,\\n.wp-full-overlay-footer .redux-templates-import {\\n width: 100%; }\\n\\n.redux-templates-button-download {\\n border: 1px solid #3dbfe8;\\n background: #3dbfe8;\\n box-shadow: 0 1px 0 #165cb4;\\n color: #fff; }\\n\\n.wp-full-overlay-main {\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n height: 100%;\\n -webkit-transition: background-color 1000ms linear;\\n -ms-transition: background-color 1000ms linear;\\n transition: background-color 1000ms linear;\\n background-color: unset; }\\n .wp-full-overlay-main.loaded::before {\\n display: none !important; }\\n .wp-full-overlay-main.loaded iframe {\\n background-color: #fff; }\\n .wp-full-overlay-main .components-spinner {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%); }\\n\\n.theme-install-overlay iframe {\\n height: 100%;\\n width: 100%;\\n z-index: 20;\\n transition: opacity 0.3s; }\\n\\n.redux-templates-dependency-blocks {\\n display: flex; }\\n .redux-templates-dependency-blocks .block-head {\\n text-align: center;\\n width: 60px;\\n margin-right: 10px; }\\n\\n.requirements-list {\\n width: 100%; }\\n .requirements-list ul {\\n margin: 0;\\n padding: 0;\\n list-style: none; }\\n .requirements-list ul li {\\n cursor: pointer;\\n line-height: 20px;\\n padding-bottom: 25px;\\n clear: left;\\n transition: 300ms; }\\n .requirements-list ul li svg {\\n margin-right: 5px; }\\n .requirements-list ul li svg * {\\n fill: #9a9a9a; }\\n .requirements-list ul li svg,\\n .requirements-list ul li span,\\n .requirements-list ul li div {\\n float: left; }\\n .requirements-list ul li .redux-icon-wrapper {\\n display: inline; }\\n .requirements-list ul li span.pluginURL {\\n float: right; }\\n .requirements-list ul li i {\\n font-size: 1.1em; }\\n .requirements-list ul li .redux-icon-wrapper {\\n padding-left: 5px; }\\n .requirements-list ul li i.fa-exclamation-triangle {\\n font-size: 0.9em;\\n line-height: 1.5em;\\n color: #b27823; }\\n .requirements-list ul li:hover svg * {\\n fill: dimgray; }\\n .requirements-list ul li:hover i.fa-exclamation-triangle {\\n color: #f5a623; }\\n\\n.redux-block-pills ul {\\n margin: 0;\\n padding: 0; }\\n .redux-block-pills ul li {\\n margin: 0px 5px 10px 0;\\n float: left; }\\n .redux-block-pills ul li span {\\n --bg-opacity: 1 !important;\\n background-color: #edf2f7 !important;\\n background-color: rgba(237, 242, 247, var(--bg-opacity)) !important;\\n border-radius: 9999px !important;\\n padding-top: 0.25rem !important;\\n padding-bottom: 0.25rem !important;\\n padding-left: 0.75rem !important;\\n padding-right: 0.75rem !important;\\n --text-opacity: 1 !important;\\n color: #4a5568 !important;\\n color: rgba(74, 85, 104, var(--text-opacity)) !important; }\\n\\n.redux-templates-modal-preview-box {\\n background: #f1f1f1; }\\n .redux-templates-modal-preview-box img {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%);\\n max-width: 100%;\\n max-height: 100%; }\\n\\n.theme-hash {\\n text-align: center;\\n font-size: 14px;\\n position: relative; }\\n .theme-hash i {\\n cursor: pointer;\\n margin-right: 5px;\\n margin-left: 5px; }\\n .theme-hash .copied {\\n color: #656a6f;\\n position: absolute;\\n line-height: 75%;\\n margin-left: 10px;\\n opacity: 0.6; }\\n .theme-hash .the-copy {\\n border-bottom-right-radius: 0 !important;\\n border-top-right-radius: 0 !important; }\\n .theme-hash .the-hash {\\n border-bottom-left-radius: 0 !important;\\n border-top-left-radius: 0 !important;\\n border-left: 0 !important; }\\n .theme-hash .hideMe {\\n -webkit-animation: cssAnimation 3s forwards;\\n animation: cssAnimation 3s forwards; }\\n\\n@keyframes cssAnimation {\\n 0% {\\n opacity: 1; }\\n 90% {\\n opacity: 1; }\\n 100% {\\n opacity: 0; } }\\n\\n@-webkit-keyframes cssAnimation {\\n 0% {\\n opacity: 1; }\\n 90% {\\n opacity: 1; }\\n 100% {\\n opacity: 0; } }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".redux-templates-modal-overlay {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: rgba(255, 255, 255, 0.6);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 600000; }\\n\\n.redux-templates-modal-wrapper {\\n width: 550px;\\n height: 400px;\\n background: #fcfcfc;\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex-direction: column;\\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.7); }\\n .redux-templates-modal-wrapper div {\\n width: 100%; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header {\\n border-bottom: 1px solid #ddd;\\n flex: 0 0 60px;\\n padding: 10px 15px;\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n box-sizing: border-box; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header h3 {\\n margin: 0;\\n font-size: 1.2rem; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header button {\\n border: none;\\n cursor: pointer; }\\n .redux-templates-modal-wrapper .redux-templates-modal-header .redux-templates-modal-close {\\n font-size: 20px;\\n background: transparent;\\n color: #9b9b9b; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body {\\n flex: 1 1 auto;\\n padding-left: 30px;\\n padding-right: 30px;\\n box-sizing: border-box;\\n background: #fff;\\n position: relative; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body h5 {\\n font-size: 1.1em;\\n font-weight: 600; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body ul {\\n list-style-position: inside;\\n list-style-type: disc; }\\n .redux-templates-modal-wrapper .redux-templates-modal-body .error {\\n color: #f00; }\\n .redux-templates-modal-wrapper .redux-templates-modal-footer {\\n border-top: 1px solid #ddd;\\n flex: 0 0 60px;\\n align-items: center;\\n display: flex;\\n padding: 0 20px;\\n box-sizing: border-box; }\\n .redux-templates-modal-wrapper .redux-templates-modal-footer .button {\\n margin-right: 20px;\\n cursor: pointer; }\\n .redux-templates-modal-wrapper .redux-templates-modal-footer i.fas {\\n margin-right: 3px; }\\n .redux-templates-modal-wrapper .redux-templates-modal-spinner-wrapper {\\n flex: 1 1 auto;\\n align-items: center;\\n justify-content: center;\\n display: flex; }\\n\", \"\"]);\n\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.9 17.7H7.4l-.9-1.5 2.1-2.4 2.3 3.9zm-5.3-1.6l-1.5 1.6h-4L4 13.3l1.6 2.8z\",\n fill: \"#011627\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#00a7e5\",\n d: \"M6.1 15.6L.4 5.9h3.5l2.7 4.5 8-9.1h4.3L6.1 15.6z\"\n});\n\nvar SvgIconColor = function SvgIconColor(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 19 19\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgIconColor;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.9 17.7H7.4l-.9-1.5 2.1-2.4 2.3 3.9zm-5.3-1.6l-1.5 1.6h-4L4 13.3l1.6 2.8zM6.1 15.6L.4 5.9h3.5l2.7 4.5 8-9.1h4.3L6.1 15.6z\"\n});\n\nvar SvgIcon = function SvgIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 19 19\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgIcon;","import {__} from '@wordpress/i18n';\n\nconst { registerBlockType } = wp.blocks;\nimport * as importBlock from './import';\nimport * as libraryBlock from './library';\n\nexport function registerBlocks() {\n\n registerBlockType( `redux/${ libraryBlock.name }`, { ...libraryBlock.settings } );\n\tregisterBlockType( `redux/${ importBlock.name }`, { ...importBlock.settings } );\n\n}\nregisterBlocks();\n","/**\n * Internal dependencies\n */\nimport importReusableBlock from '../utils/import';\nimport insertImportedBlocks from '../utils/insert';\n\n/**\n * WordPress dependencies\n */\nconst { __ } = wp.i18n;\nconst { withInstanceId } = wp.compose;\nconst { Fragment, Component } = wp.element;\nconst { MediaUploadCheck } = wp.blockEditor;\nconst { DropZone, FormFileUpload, Placeholder, Notice } = wp.components;\n\nconst ALLOWED_BG_MEDIA_TYPES = [ 'json' ];\n\n/**\n * Block edit function\n */\nclass Edit extends Component {\n constructor() {\n super( ...arguments );\n\n this.state = {\n isLoading: false,\n error: null,\n };\n\n this.isStillMounted = true;\n this.addFile = this.addFile.bind( this );\n }\n\n componentDidMount() {\n const { file } = this.props.attributes;\n\n if ( file ) {\n this.setState( { isLoading: true } );\n this.addFile( file );\n }\n }\n\n componentWillUnmount() {\n this.isStillMounted = false;\n }\n\n addFile( files ) {\n let file = files[ 0 ];\n\n if ( files.target ) {\n file = event.target.files[ 0 ];\n }\n\n if ( ! file ) {\n return;\n }\n this.setState( { isLoading: true } );\n\n importReusableBlock( file )\n .then( ( reusableBlock ) => {\n if ( ! this.isStillMounted ) {\n return;\n }\n\n this.setState( { isLoading: false } );\n insertImportedBlocks( this.props.clientId, reusableBlock, this.props.onClose );\n } )\n .catch( ( error ) => {\n if ( ! this.isStillMounted ) {\n return;\n }\n\n let uiMessage;\n switch ( error.message ) {\n case 'Invalid JSON file':\n uiMessage = __( 'Invalid JSON file', redux_templates.i18n );\n break;\n case 'Invalid Reusable Block JSON file':\n uiMessage = __( 'Invalid Reusable Block JSON file', redux_templates.i18n );\n break;\n default:\n uiMessage = __( 'Unknown error', redux_templates.i18n );\n }\n\n this.setState( { isLoading: false, error: uiMessage } );\n } );\n }\n\n render() {\n const { isLoading, error } = this.state;\n\n return (\n <Placeholder\n icon=\"download\"\n label={ __( 'Import a Template from JSON - Redux', redux_templates.i18n ) }\n instructions={ __( 'Drag a file or upload a new one from your device.', redux_templates.i18n ) }\n className=\"editor-media-placeholder\"\n notices={ error && (\n <Notice status=\"error\">\n { error }\n </Notice>\n ) }\n >\n <Fragment>\n <MediaUploadCheck>\n <DropZone\n onFilesDrop={ this.addFile }\n label={ __( 'Import from JSON', redux_templates.i18n ) }\n />\n <FormFileUpload\n isLarge\n className=\"editor-media-placeholder__button button button-primary\"\n onChange={ this.addFile }\n accept={ ALLOWED_BG_MEDIA_TYPES }\n isBusy={ isLoading }\n disabled={ isLoading }\n multiple={ false }\n >\n { __( 'Upload', redux_templates.i18n ) }\n </FormFileUpload>\n </MediaUploadCheck>\n </Fragment>\n </Placeholder>\n );\n }\n}\n\nexport default withInstanceId( Edit );\n","/**\n * WordPress dependencies\n */\nconst { SVG } = wp.components;\n\nexport default <SVG viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\" /><path d=\"M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\" /></SVG>;\n","/**\n * Internal dependencies\n */\nimport edit from './components/edit';\nimport icon from './icon';\nimport transforms from './transforms';\nimport { colorizeIcon } from '../../icons';\n\n/**\n * WordPress dependencies\n */\nconst { __ } = wp.i18n;\n\n/**\n * Block constants\n */\nconst name = 'import';\n\nconst category = 'common';\nconst schema = {\n\tfile: {\n\t\ttype: 'object',\n\t},\n};\n\nconst title = __( 'Template Import', redux_templates.i18n );\n\nconst keywords = [\n __( 'import', redux_templates.i18n ),\n __( 'download', redux_templates.i18n ),\n __( 'migrate', redux_templates.i18n ),\n];\n\n\n\nconst settings = {\n\ttitle: title,\n description: __( 'Import blocks exported using Redux plugin.', redux_templates.i18n ),\n\n\tcategory: category,\n\tkeywords: keywords,\n\n attributes: schema,\n\n supports: {\n align: true,\n alignWide: false,\n alignFull: false,\n customClassName: false,\n className: false,\n html: false,\n },\n\n transforms: transforms,\n edit: edit,\n save() {\n return null;\n },\n};\n\nexport { name, title, category, icon, settings };\n","/**\n * WordPress dependencies\n */\nconst { createBlock } = wp.blocks;\n\nconst transforms = {\n from: [\n {\n type: 'files',\n isMatch( files ) {\n return files[ 0 ].type === 'application/json';\n },\n // We define a lower priorty (higher number) than the default of 10. This\n // ensures that the Import block is only created as a fallback.\n priority: 13,\n transform: ( files ) => {\n const blocks = [];\n\n blocks.push( createBlock( 'redux/import', {\n file: files,\n } ) );\n\n return blocks;\n },\n },\n ],\n};\n\nexport default transforms;\n","/**\n * Reads the textual content of the given file.\n *\n * @param {File} file File.\n * @return {Promise<string>} Content of the file.\n */\nexport function readTextFile( file ) {\n const reader = new window.FileReader();\n return new Promise( ( resolve ) => {\n reader.onload = function() {\n resolve( reader.result );\n };\n reader.readAsText( file );\n } );\n}\n","/**\n * External dependencies\n */\nimport { isString } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { readTextFile } from './file';\nconst { dispatch, select } = wp.data;\nconst { editPost } = dispatch('core/editor');\n\n/**\n * Import a reusable block from a JSON file.\n *\n * @param {File} file File.\n * @return {Promise} Promise returning the imported reusable block.\n */\nasync function importReusableBlock( file ) {\n const fileContent = await readTextFile( file );\n let parsedContent;\n try {\n parsedContent = JSON.parse(JSON.parse(JSON.stringify(fileContent)));\n } catch ( e ) {\n throw new Error( 'Invalid JSON file' );\n }\n\n if ( parsedContent.__file === 'redux_template' ) {\n\t\teditPost( { 'template': 'redux-templates_full_width' } );\n return parsedContent.content;\n }\n\n if (\n parsedContent.__file !== 'wp_block' ||\n ! parsedContent.title ||\n ! parsedContent.content ||\n ! isString( parsedContent.title ) ||\n ! isString( parsedContent.content )\n ) {\n\t if ( '' === select( 'core/editor' ).getEditedPostAttribute( 'template' ) ) {\n\t\t editPost({'template': 'redux-templates_contained'});\n\t }\n return importCoreBlocks( parsedContent );\n }\n\n const postType = await wp.apiFetch( { path: '/wp/v2/types/wp_block' } );\n const reusableBlock = await wp.apiFetch( {\n path: `/wp/v2/${ postType.rest_base }`,\n data: {\n title: parsedContent.title,\n content: parsedContent.content,\n status: 'publish',\n },\n method: 'POST',\n } );\n\n if ( reusableBlock.id ) {\n return '<!-- wp:block {\"ref\":' + reusableBlock.id + '} /-->';\n }\n throw new Error( 'Invalid Reusable Block JSON file contents' );\n}\n\nfunction importCoreBlocks( parsedContent ) {\n if (\n parsedContent.__file !== 'core_block' ||\n ! parsedContent.content ||\n ! isString( parsedContent.content )\n ) {\n throw new Error( 'Invalid JSON file' );\n }\n\n return parsedContent.content;\n}\n\nexport default importReusableBlock;\n","/**\n * WordPress dependencies\n */\nconst { select, dispatch } = wp.data;\nconst { parse, createBlock } = wp.blocks;\n\nexport default function insertImportedBlocks( clientId, blocks, onClose ) {\n blocks = parse( blocks );\n const toSelect = [];\n const blockIndex = select( 'core/block-editor' ).getBlockInsertionPoint();\n if ( blocks.length > 0 ) {\n for ( const block in blocks ) {\n const created = createBlock( blocks[ block ].name, blocks[ block ].attributes, blocks[ block ].innerBlocks );\n dispatch( 'core/block-editor' ).insertBlocks( created, parseInt( blockIndex.index ) + parseInt( block ) );\n\n if ( typeof created !== 'undefined' ) {\n toSelect.push( created.clientId );\n }\n }\n\n //remove insertion point if empty\n dispatch( 'core/block-editor' ).removeBlock( clientId );\n\n //select inserted blocks\n if ( toSelect.length > 0 ) {\n dispatch( 'core/block-editor' ).multiSelect( toSelect[ 0 ], toSelect.reverse()[ 0 ] );\n }\n }\n\n onClose();\n}\n","/**\n * External dependencies.\n */\nimport { ReduxTemplatesIcon } from '~redux-templates/icons'\n// import { ModalDesignLibrary } from '~stackable/components'\nimport {ModalManager} from '../../modal-manager';\nimport LibraryModal from '../../modal-library';\n\n/**\n * WordPress dependencies.\n */\nimport {\n\tButton, Placeholder,\n} from '@wordpress/components'\nimport { compose } from '@wordpress/compose'\nimport { createBlock, parse } from '@wordpress/blocks'\nimport { withDispatch } from '@wordpress/data'\nimport { useState } from '@wordpress/element'\nimport { __ } from '@wordpress/i18n'\nimport { applyFilters } from '@wordpress/hooks'\n\nconst edit = ( { removeLibraryBlock, preview } ) => {\n\tif (preview) {\n\t\talert('here i am');\n\t}\n\n\treturn (\n\t\t<div className=\"redux-template-library-block\">\n\t\t\t<Placeholder\n\t\t\t\ticon={ <ReduxTemplatesIcon /> }\n\t\t\t\tlabel={ __( 'Redux Template Library', redux_templates.i18n ) }\n\t\t\t\tinstructions={ __( 'Open the Design Library and select a pre-designed block or layout.', redux_templates.i18n ) }\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tisSecondary\n\t\t\t\t\tisLarge\n\t\t\t\t\thasIcon\n\t\t\t\t\tclassName=\"redux-template-library-block__button\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tModalManager.open(<LibraryModal />);\n\t\t\t\t\t\tremoveLibraryBlock()\n\t\t\t\t\t} }\n\t\t\t\t>{ __( 'Open Design Library', redux_templates.i18n ) }</Button>\n\t\t\t</Placeholder>\n\t\t</div>\n\t)\n}\n\nexport default compose( [\n\twithDispatch( ( dispatch, {\n\t\tclientId,\n\t} ) => {\n\t\tconst { removeBlocks } = dispatch( 'core/block-editor' )\n\t\treturn {\n\t\t\tremoveLibraryBlock: serializedBlock => {\n\t\t\t\tremoveBlocks( clientId );\n\t\t\t},\n\t\t}\n\t} ),\n] )( edit )\n","/**\n * BLOCK: Design Library\n */\n/**\n * External dependencies\n */\nimport { ReduxTemplatesIcon } from '~redux-templates/icons'\n\n/**\n * Internal dependencies\n */\nimport edit from './edit'\nimport InsertLibraryButton from './insert-library-button'\nconst { registerBlockType } = wp.blocks;\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n'\nimport domReady from '@wordpress/dom-ready'\nimport { render } from '@wordpress/element'\nimport { ReduxTemplatesIconColor } from '../../icons';\n\n\n\nconst name = 'library';\nconst icon = InsertLibraryButton\n\nconst category = 'common';\nconst schema = {}\n\nconst title = __( 'Template Library', redux_templates.i18n );\nconst description = __( 'Choose a section, template, or template kit from the Redux Template Library.', redux_templates.i18n );\n\nconst keywords = [\n\t__( 'Template Library', redux_templates.i18n ),\n\t__( 'Design Library', redux_templates.i18n ),\n\t__( 'Element Layouts', redux_templates.i18n ),\n\t__( 'Redux', redux_templates.i18n ),\n];\n\nconst blockAttributes = {\n\tfile: {\n\t\ttype: 'object',\n\t},\n};\n\nconst settings = {\n\ttitle: title,\n\tdescription: description,\n\ticon: ReduxTemplatesIconColor,\n\tcategory: 'layout',\n\tkeywords: keywords,\n\tattributes: schema,\n\tsupports: {\n\t\tcustomClassName: false,\n\t\t// inserter: ! disabledBlocks.includes( name ), // Hide if disabled.\n\t},\n\n\texample: {\n\t\tattributes: {\n\t\t\t// backgroundColor: '#000000',\n\t\t\t// opacity: 0.8,\n\n\t\t\t// padding: 30,\n\t\t\t// textColor: '#FFFFFF',\n\t\t\t// radius: 10,\n\t\t\t// title: __( 'I am a slide title', 'wp-presenter-pro' ),\n\t\t},\n\t},\n\n\tedit: edit,\n\n\tsave() {\n\t\treturn null;\n\t},\n};\n\nconst renderButton = function(toolbar) {\n\n\tconst buttonDiv = document.createElement( 'div' )\n\ttoolbar.appendChild( buttonDiv )\n\n\trender( <InsertLibraryButton />, buttonDiv )\n}\n\ndomReady( () => {\n\tlet toolbar = document.querySelector( '.edit-post-header__toolbar' );\n\tif ( ! toolbar ) {\n\t\ttoolbar = document.querySelector( '.edit-post-header__toolbar' );\n\t}\n\tif ( ! toolbar ) {\n\t\tsetTimeout(function(){\n\t\t\tlet toolbar = document.querySelector( '.edit-post-header__toolbar' );\n\t\t\tif ( toolbar ) {\n\t\t\t\trenderButton( toolbar );\n\t\t\t}\n\t\t}, 500);\n\t\treturn;\n\t}\n\trenderButton(toolbar);\n} )\n\nexport { name, title, category, icon, settings };\n","/**\n * External dependencies\n */\nimport { ReduxTemplatesIcon, ReduxTemplatesIconColorize } from '~redux-templates/icons'\n\n/**\n * WordPress dependencies\n */\nimport {Button, Tooltip} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {ModalManager} from '../../modal-manager';\nimport LibraryModal from '../../modal-library';\nimport './style.scss'\n\nconst InsertLibraryButton = () => {\n\treturn (\n\t\t<Tooltip text={__( 'Redux Templates Library', redux_templates.i18n )} position={'bottom'}>\n\t\t\t<Button data-tut=\"tour__library_button\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tModalManager.open(<LibraryModal />);\n\t\t\t\t\t} }\n\t\t\t\t\tclassName=\"redux-templates-insert-library-button\"\n\t\t\t\t\tlabel={ __( 'Open Library', redux_templates.i18n ) }\n\t\t\t\t\ticon={ <ReduxTemplatesIcon /> }\n\t\t\t>{ __( 'Templates', redux_templates.i18n ) }</Button>\n\t\t</Tooltip>\n\t)\n}\n\nexport default InsertLibraryButton\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport CONFIG from '../config';\nimport './style.scss'\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\n// currentStep : indicates where the step is\n// step: 1~8 etc\nexport default function ChallengeStepItem(props) {\n const {currentStep, step, caption, finalStatus} = props;\n const [iconClassname, setIconClassname] = useState('fa circle');\n const [itemClassname, setItemClassname] = useState('challenge-item');\n useEffect(() => {\n if (currentStep < step) { // not completed step\n setItemClassname('challenge-item');\n setIconClassname('far fa-circle');\n }\n if (currentStep === step) { // current step\n setItemClassname('challenge-item challenge-item-current');\n setIconClassname('fas fa-circle');\n } \n if (currentStep > step || finalStatus) {\n setItemClassname('challenge-item challenge-item-completed');\n setIconClassname('fas fa-check-circle');\n }\n }, [step, currentStep, finalStatus]);\n \n return <li className={itemClassname}><i className={iconClassname} />{caption}</li>;\n}","const {useState, useEffect, memo} = wp.element;\nimport CONFIG from '../config';\nexport default memo(function ProgressBar({currentStep}){\n const [width, setWidth] = useState(0);\n useEffect(() => {\n setWidth( currentStep <= 0 ? 0 : (currentStep / CONFIG.totalStep * 100) );\n }, [currentStep])\n return (\n <div className='challenge-bar'>\n <div style={{width: width + '%'}}></div>\n </div>\n );\n});","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport ChallengeStepItem from './ChallengeStepItem';\nimport ProgressBar from './ProgressBar';\nimport CONFIG from '../config';\nimport './style.scss'\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\nfunction ChallengeListBlock(props) {\n const {started, onStarted} = props;\n const {challengeStep, finalStatus, setChallengeOpen, setChallengeStep} = props;\n const [buttonRowClassname, setButtonRowClassname] = useState('challenge-button-row');\n useEffect(() => {\n setButtonRowClassname(challengeStep !== CONFIG.beginningStep ? 'challenge-button-row started' : 'challenge-button-row');\n }, [challengeStep])\n \n const onCancelChallenge = () => {\n setChallengeOpen(false);\n setChallengeStep(-1);\n }\n\n return (\n <div className='challenge-list-block'>\n <p>{__('Complete the challenge and get up and running within 5 minutes', redux_templates.i18n)}</p>\n <ProgressBar currentStep={finalStatus === 'success' ? CONFIG.totalStep : challengeStep} />\n <ul className='challenge-list'>\n {\n CONFIG.list.map((item, i) => {\n return (<ChallengeStepItem key={i} step={i} currentStep={challengeStep} finalStatus={finalStatus} caption={item.caption} />);\n })\n }\n </ul>\n { finalStatus === '' &&\n <div className={buttonRowClassname}>\n {challengeStep === CONFIG.beginningStep && \n <button className='btn-challenge-start' onClick={onStarted}>{__('Start Challenge', redux_templates.i18n)}</button>}\n {challengeStep === CONFIG.beginningStep && <button className='btn-challenge-skip' onClick={onCancelChallenge}>{__('Skip Challenge', redux_templates.i18n)}</button>}\n {challengeStep !== CONFIG.beginningStep && <button className='btn-challenge-cancel' onClick={onCancelChallenge}>{__('Cancel Challenge', redux_templates.i18n)}</button>}\n </div>\n }\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeOpen, setChallengeStep} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeOpen,\n setChallengeStep\n };\n }),\n\n withSelect((select) => {\n const {getChallengeStep, getChallengeFinalStatus} = select('redux-templates/sectionslist');\n return {\n challengeStep: getChallengeStep(),\n finalStatus: getChallengeFinalStatus()\n };\n })\n])(ChallengeListBlock);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport './style.scss'\nimport config from '../config';\nimport helper from '../helper';\nimport classnames from 'classnames';\nconst {compose} = wp.compose;\nconst {withSelect, withDispatch} = wp.data;\nconst {useState, useEffect, useRef} = wp.element;\n\nfunction useInterval(callback, delay) {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nfunction ChallengeTimer(props) {\n const {started, expanded, setChallengeListExpanded, isChallengeOpen, finalStatus} = props;\n const [secondsLeft, setSecondsLeft] = useState(helper.getSecondsLeft());\n const [paused, setPaused] = useState(false);\n\n // only timer\n useEffect(() => {\n window.addEventListener('focus', resume);\n window.addEventListener('blur', pause);\n return () => {\n window.removeEventListener('focus', resume);\n window.removeEventListener('blur', pause);\n };\n });\n\n // setup timer\n useEffect(() => {\n setSecondsLeft(helper.getSecondsLeft());\n if (helper.loadStep() === -1) {\n setSecondsLeft(config.initialSecondsLeft);\n }\n }, [isChallengeOpen]);\n\n // run timer\n useInterval(() => {\n setSecondsLeft(secondsLeft < 0 ? 0 : secondsLeft - 1);\n helper.saveSecondsLeft(secondsLeft < 0 ? 0 : secondsLeft - 1);\n }, (started && (paused === false) && secondsLeft >= 0 && finalStatus === '') ? 1000 : null);\n\n\n // Pause the timer.\n const pause = () => {\n setPaused(true);\n }\n\n // Resume the timer.\n const resume = () => {\n setPaused(false);\n }\n\n return (\n <div className='block-timer'>\n <div>\n <h3>{__('Redux Challenge', redux_templates.i18n)}</h3>\n <p><span>{helper.getFormatted(secondsLeft)}</span>{__(' remaining', redux_templates.i18n)}</p>\n </div>\n <div className={classnames('caret-icon', {'closed': expanded})} onClick={() => setChallengeListExpanded(!expanded)}>\n <i className=\"fa fa-caret-down\"></i>\n </div>\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeListExpanded} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeListExpanded\n };\n }),\n withSelect((select) => {\n const {getChallengeOpen, getChallengeFinalStatus, getChallengeListExpanded} = select('redux-templates/sectionslist');\n return {\n isChallengeOpen: getChallengeOpen(),\n finalStatus: getChallengeFinalStatus(),\n expanded: getChallengeListExpanded()\n };\n })\n])(ChallengeTimer);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n'\nimport {animateScroll} from 'react-scroll';\nimport {dispatch, select} from '@wordpress/data';\nconst {setTourActiveButtonGroup, setImportingTemplate} = dispatch('redux-templates/sectionslist');\nconst {getPageData} = select('redux-templates/sectionslist');\nimport {ModalManager} from '~redux-templates/modal-manager';\nimport PreviewModal from '~redux-templates/modal-preview';\nexport default {\n initialSecondsLeft: 300,\n beginningStep: -1,\n totalStep: 7,\n list: [\n {\n selector: '[data-tut=\"tour__navigation\"]',\n caption: __('Template Type Tabs', redux_templates.i18n),\n offset: {\n x: 0,\n y: 50,\n arrowX: 0,\n arrowY: -20\n },\n box: {\n width: 250\n },\n direction: 'top',\n content: () => (\n <div>\n {__('These are the different types of templates we have.', redux_templates.i18n)}\n <ul>\n <li>\n <strong>{__('Sections', redux_templates.i18n)}</strong>\n {__(' are the building blocks of a page. Each \"row\" of content on a page we consider a section.', redux_templates.i18n)}\n </li>\n <li>\n <strong>{__('Pages', redux_templates.i18n)}</strong>\n {__(' are, you guessed it, a group of multiple sections making up a page.', redux_templates.i18n)}\n </li>\n <li>\n <strong>{__('Template Kits', redux_templates.i18n)}</strong>\n {__(' are groups of pages that all follow a style or theme.', redux_templates.i18n)}\n </li>\n <li>\n <strong>{__('Saved', redux_templates.i18n)}</strong>\n {__(' are reusable blocks that you may have previously saved for later.', redux_templates.i18n)}\n </li>\n </ul>\n </div>\n )\n },\n {\n selector: '[data-tut=\"tour__filtering\"]',\n caption: __('Sidebar', redux_templates.i18n),\n content: __('This area is where you can search and filter to find the right kind of templates you want.', redux_templates.i18n),\n direction: 'left',\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 250,\n height: 130\n },\n action: () => {\n animateScroll.scrollToTop({\n containerId: 'redux-templates-collection-modal-sidebar',\n duration: 0,\n });\n },\n },\n {\n selector: '[data-tut=\"tour__filtering\"]',\n caption: __('Plugins Filter', redux_templates.i18n),\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 290,\n height: 185\n },\n content: () => (\n <div>\n {__('Some templates require certain plugins. You can filter or select those templates. Hint, if the text is a ', redux_templates.i18n)}\n <a href=\"#\" className=\"missing-dependency\">{__('little orange', redux_templates.i18n)}</a>\n {__(', you don`t have that plugin installed yet, but don`t worry. Redux will help you with that too.', redux_templates.i18n)}\n </div>\n ),\n action: () => {\n animateScroll.scrollToBottom({\n containerId: 'redux-templates-collection-modal-sidebar',\n duration: 0,\n });\n },\n direction: 'left'\n },\n {\n selector: '[data-tut=\"tour__main_body\"]',\n caption: __('Templates List', redux_templates.i18n),\n content: __('This area is where the templates will show up that match the filters you\\'ve selected. You can click on many of them to preview or import them.', redux_templates.i18n),\n direction: 'left',\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 250,\n height: 150\n },\n action: () => {\n animateScroll.scrollToTop({\n containerId: 'redux-templates-collection-modal-sidebar',\n duration: 0,\n });\n setTourActiveButtonGroup(null);\n }\n },\n {\n selector: '#modalContainer .redux-templates-single-item-inner:first-child',\n caption: __('Template Hover', redux_templates.i18n),\n content: __('When you hover over a template you can see via icons what plugins are required for this template. You can then choose to Preview or Import a design.', redux_templates.i18n),\n action: () => {\n ModalManager.closeCustomizer();\n const pageData = getPageData();\n if (pageData && pageData.length > 0) {\n setTourActiveButtonGroup(pageData[0])\n }\n },\n direction: 'left',\n offset: {\n x: 40,\n y: 10,\n arrowX: -20,\n arrowY: 0\n },\n box: {\n width: 240,\n height: 169\n },\n },\n {\n selector: '.wp-full-overlay-sidebar',\n caption: __('Preview Dialog', redux_templates.i18n),\n content: __('This is the preview dialog. It gives more details about the template and helps you to see what you could expect the templates to look like.', redux_templates.i18n),\n action: () => {\n setTourActiveButtonGroup(null);\n setImportingTemplate(null);\n const pageData = getPageData();\n if (pageData && pageData.length > 0) {\n ModalManager.openCustomizer(\n <PreviewModal startIndex={0} currentPageData={pageData}/>\n )\n }\n },\n position: 'center'\n },\n {\n selector: '.redux-templates-import-wizard-wrapper',\n caption: __('Import Wizard', redux_templates.i18n),\n content: __('When you click to import a template, sometimes you will be missing one of the required plugins. Redux will do its best to help you install what\\'s missing. If some of them are premium plugins, you will be provided details on where you can get them.', redux_templates.i18n),\n direction: 'right',\n offset: {\n x: 0,\n y: 85,\n arrowX: 40,\n arrowY: 25\n },\n box: {\n width: 250,\n height: 169\n },\n action: () => {\n // if (ModalManager.isModalOpened() === false) ModalManager.open(<LibraryModal autoTourStart={false} />)\n if (document.getElementsByClassName('tooltipster-box'))\n document.getElementsByClassName('tooltipster-box')[0].style.display = 'none';\n ModalManager.show();\n ModalManager.closeCustomizer();\n const pageData = getPageData();\n if (pageData && pageData.length > 0) setImportingTemplate(pageData[0]);\n setTimeout(() => {\n const openedPanel = document.getElementsByClassName('redux-templates-modal-wrapper');\n if (openedPanel && openedPanel.length > 0) {\n let openPanel = openedPanel[0].getBoundingClientRect();\n let box = {top: openPanel.top + 90, left: openPanel.left - 320};\n dispatch('redux-templates/sectionslist').setChallengeTooltipRect(box);\n }\n if (document.getElementsByClassName('tooltipster-box'))\n document.getElementsByClassName('tooltipster-box')[0].style.display = 'block';\n }, 0)\n }\n }\n ]\n};\n","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport CONFIG from '../config';\nimport helper from '../helper';\n\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\n\nconst ratingStars = (\n <span className=\"rating-stars\">\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n </span>\n);\n\nfunction ChallengeCongrats(props) {\n const {setChallengeStep, setChallengeFinalStatus, setChallengeOpen} = props;\n const closeModal = () => {\n setChallengeStep(CONFIG.beginningStep);\n setChallengeFinalStatus('');\n setChallengeOpen(false);\n }\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className=\"redux-templates-modal-wrapper challenge-popup-wrapper\">\n <div className=\"challenge-popup-header challenge-popup-header-congrats\"\n style={{backgroundImage: `url(${redux_templates.plugin + 'assets/img/popup-congrats.png'})`}}>\n <a className=\"challenge-popup-close\" onClick={closeModal}>\n <i className='fas fa-times' />\n </a>\n </div>\n <div className=\"challenge-popup-content\">\n <h3>{__( 'Congrats, you did it!', redux_templates.i18n )}</h3>\n <p>\n {__( 'You completed the Redux Challenge in ', redux_templates.i18n )}<b>{helper.getLocalizedDuration()}</b>.\n {__('Share your success story with other Redux users and help us spread the word', redux_templates.i18n)}\n <b>{__('by giving Redux a 5-star rating (', redux_templates.i18n)} {ratingStars}{__(') on WordPress.org', redux_templates.i18n)}</b>.\n {__('Thanks for your support and we look forward to bringing more awesome features.', redux_templates.i18n)}\n </p>\n <a href=\"https://wordpress.org/support/plugin/redux-framework/reviews/?filter=5#new-post\" className=\"challenge-popup-btn challenge-popup-rate-btn\" target=\"_blank\" rel=\"noopener\">\n {__( 'Rate Redux on Wordpress.org', redux_templates.i18n ) }\n <span className=\"dashicons dashicons-external\"></span>\n </a>\n </div>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const { setChallengeStep, setChallengeFinalStatus, setChallengeOpen } = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep,\n setChallengeFinalStatus,\n setChallengeOpen\n };\n })\n])(ChallengeCongrats);\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n'\nimport CONFIG from '../config';\nimport {CheckboxControl} from '@wordpress/components';\n\nconst {compose} = wp.compose;\nconst {useState} = wp.element;\nconst {withDispatch, withSelect} = wp.data;\n\n\nconst ratingStars = (\n <span className=\"rating-stars\">\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n <i className=\"fa fa-star\"></i>\n </span>\n);\n\nfunction ChallengeContact(props) {\n const { setChallengeStep, setChallengeFinalStatus, setChallengeOpen } = props;\n const [comment, setComment] = useState('');\n const [agreeToContactFurther, setAgreement] = useState(false);\n const closeModal = () => {\n setChallengeStep(CONFIG.beginningStep);\n setChallengeFinalStatus('');\n setChallengeOpen(false);\n }\n\n const handleChange = (e) => {\n setComment(e.target.value);\n }\n\n const contactRedux = () => {\n //sending data\n console.log('contact information', comment, agreeToContactFurther);\n closeModal();\n }\n\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className=\"redux-templates-modal-wrapper challenge-popup-wrapper\">\n <div className=\"challenge-popup-header challenge-popup-header-contact\"\n style={{ backgroundImage: `url(${redux_templates.plugin + 'assets/img/popup-contact.png'})` }}>\n <a className=\"challenge-popup-close\" onClick={closeModal}>\n <i className='fas fa-times' />\n </a>\n </div>\n <div className=\"challenge-popup-content challenge-contact\">\n <h3>{__('Help us improve Redux', redux_templates.i18n)}</h3>\n <p>\n {__('We\\'re sorry that it took longer than 5 minutes to try our challenge. We aim to ensure our Block Template library is as beginner friendly as possible. Please take a moment to let us know how we can improve our challenge.', redux_templates.i18n)}\n </p>\n <textarea value={comment} onChange={handleChange}></textarea>\n <CheckboxControl\n label={__('Yes, I give Redux permission to contact me for any follow up questions.', redux_templates.i18n)}\n checked={agreeToContactFurther}\n onChange={() => setAgreement(!agreeToContactFurther)}\n />\n <button className=\"challenge-popup-btn challenge-popup-rate-btn\" onClick={contactRedux}>\n {__('Submit Feedback', redux_templates.i18n)}\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const { setChallengeStep, setChallengeFinalStatus, setChallengeOpen } = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep,\n setChallengeFinalStatus,\n setChallengeOpen\n };\n })\n])(ChallengeContact);\n","/**\n * WordPress dependencies\n */\nimport ChallengeCongrats from './congrats';\nimport ChallengeContact from './contact';\nimport './style.scss'\n\nexport default function ChallengeFinalTemplate({finalStatus}) {\n\treturn <ChallengeCongrats />\n\t// TODO - When feedback is working, uncomment this.\n // if (finalStatus === 'success') return <ChallengeCongrats />\n // return <ChallengeContact />;\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n'\nimport CONFIG from './config';\nexport default {\n\n /**\n * Get number of seconds left to complete the Challenge.\n */\n getSecondsLeft: function() {\n var secondsLeft = localStorage.getItem( 'reduxChallengeSecondsLeft' );\n\n secondsLeft = isNaN(secondsLeft) || secondsLeft == null ? CONFIG.initialSecondsLeft : parseInt( secondsLeft, 10 );\n\n return secondsLeft;\n },\n\n /**\n * Save number of seconds left to complete the Challenge.\n */\n saveSecondsLeft: function( secondsLeft ) {\n\n localStorage.setItem( 'reduxChallengeSecondsLeft', secondsLeft );\n },\n\n /**\n * Get 'minutes' part of timer display.\n */\n getMinutesFormatted: function( secondsLeft ) {\n return Math.floor( secondsLeft / 60 );\n },\n\n /**\n * Get 'seconds' part of timer display.\n */\n getSecondsFormatted: function( secondsLeft ) {\n return secondsLeft % 60;\n },\n\n /**\n * Get formatted timer for display.\n */\n getFormatted: function( secondsLeft ) {\n\n if (secondsLeft < 0) return '0:00';\n\n var timerMinutes = this.getMinutesFormatted( secondsLeft );\n var timerSeconds = this.getSecondsFormatted( secondsLeft );\n\n return timerMinutes + ( 9 < timerSeconds ? ':' : ':0' ) + timerSeconds;\n },\n\n /**\n * Get Localized time string for display\n */\n getLocalizedDuration: function() {\n let secondsLeft = this.getSecondsLeft();\n secondsLeft = CONFIG.initialSecondsLeft - secondsLeft;\n\n var timerMinutes = this.getMinutesFormatted( secondsLeft );\n var timerSeconds = this.getSecondsFormatted( secondsLeft );\n\n const minutesString = timerMinutes ? timerMinutes + ' ' + __( 'minutes', redux_templates.i18n ) + ' ' : '';\n const secondsString = timerSeconds ? timerSeconds + ' ' + __( 'seconds', redux_templates.i18n ) : '';\n return minutesString + secondsString;\n },\n\n /**\n * Get last saved step.\n */\n loadStep: function() {\n\n var step = localStorage.getItem( 'reduxChallengeStep' );\n step = isNaN(step) ? -1 : parseInt( step, 10 );\n\n return step;\n },\n\n /**\n * Save Challenge step.\n */\n saveStep: function( step ) {\n localStorage.setItem( 'reduxChallengeStep', step );\n },\n};\n","/**\n * WordPress dependencies\n */\nimport {__} from '@wordpress/i18n'\nimport './style.scss'\nimport helper from './helper';\nimport CONFIG from './config';\nimport ChallengeListBlock from './challenge-list-block';\nimport ChallengeTimer from './challenge-timer';\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\nfunction ReduxChallenge(props) {\n const {autoChallengeStart} = props;\n const {isOpen, challengeStep, setChallengeStep, listExpanded} = props;\n const [challengeClassname, setChallengeClassname] = useState('redux-templates-challenge');\n const [started, setStarted] = useState(false);\n\n useEffect(() => {\n if (challengeStep !== CONFIG.beginningStep && isOpen) {\n setChallengeClassname('redux-templates-challenge started')\n setStarted(true);\n }\n }, [challengeStep, isOpen]);\n\n const onStarted = () => {\n setChallengeStep(0);\n setStarted(true);\n }\n\n return (\n <div className={challengeClassname} style={{display: isOpen ? 'block' : 'none'}}>\n { listExpanded && <ChallengeListBlock onStarted={onStarted} /> }\n <ChallengeTimer started={started} />\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeStep} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep\n };\n }),\n\n withSelect((select) => {\n const {getChallengeStep, getChallengeOpen, getChallengeListExpanded} = select('redux-templates/sectionslist');\n return {\n challengeStep: getChallengeStep(),\n isOpen: getChallengeOpen(),\n listExpanded: getChallengeListExpanded()\n };\n })\n])(ReduxChallenge);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {compose} from '@wordpress/compose';\nimport {withDispatch, withSelect} from '@wordpress/data';\nimport CONFIG from '../config';\nconst {findDOMNode, useRef, useEffect} = wp.element;\nfunction ChallengeDot(props) {\n const {step, challengeStep, isOpen, setChallengeTooltipRect} = props;\n const selectedElement = useRef(null);\n useEffect(() => {\n window.addEventListener('resize', onResize);\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, [])\n\n useEffect(() => {\n if (isOpen === false) return;\n const stepInformation = CONFIG.list[challengeStep];\n if (stepInformation && stepInformation.action && typeof stepInformation.action === 'function') {\n stepInformation.action();\n onResize();\n setTimeout(onResize, 0);\n } else\n onResize();\n }, [challengeStep, isOpen]);\n\n const isVisible = () => {\n return ((challengeStep >= 0 && challengeStep < CONFIG.totalStep) && isOpen);\n }\n\n const onResize = () => {\n const box = getElementBounding();\n if (box) setChallengeTooltipRect(box);\n };\n\n const getElementBounding = () => {\n if (selectedElement && selectedElement.current) {\n const rect = findDOMNode(selectedElement.current).getBoundingClientRect();\n return {left: rect.left, top: rect.top, width: rect.width, height: rect.height};\n }\n return null;\n }\n if (isVisible() && challengeStep === step)\n return <i className=\"challenge-dot tooltipstered\" ref={selectedElement}>\n &nbsp;\n </i>;\n return null;\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setChallengeTooltipRect} = dispatch('redux-templates/sectionslist');\n return {\n setChallengeTooltipRect\n };\n }),\n withSelect((select, props) => {\n const { getChallengeOpen, getChallengeStep } = select('redux-templates/sectionslist');\n return {\n isOpen: getChallengeOpen(),\n challengeStep: getChallengeStep()\n };\n })\n])(ChallengeDot);\n","import {__} from '@wordpress/i18n';\n\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\nconst { useState, useEffect } = wp.element;\nimport {ModalManager} from '~redux-templates/modal-manager';\nimport CONFIG from '../config';\nimport helper from '../helper';\nconst ARROW_BOX = 30;\nconst DEFAULT_BOX_WIDTH = 250;\nconst DEFAULT_BOX_HEIGHT = 300;\nconst DEFAULT_OFFSET_X = 0;\nconst DEFAULT_OFFSET_Y = 20;\nconst DEFAULT_ARROW_OFFSET_X = 20;\nconst DEFAULT_ARROW_OFFSET_Y = 20;\nfunction TooltipBox(props) {\n const { challengeStep, tooltipRect, isOpen, setChallengeStep, setChallengeFinalStatus, setChallengePassed, setChallengeListExpanded, setImportingTemplate } = props;\n const [style, setStyle] = useState({});\n const [arrowStyle, setArrowStyle] = useState({});\n const [content, setContent] = useState('');\n const [wrapperClassname, setWrapperClassname] = useState('');\n\n const isVisible = () => {\n return ((challengeStep >= 0 || challengeStep > CONFIG.totalStep) && isOpen);\n }\n\n const calculateWithStepInformation = () => {\n const stepInformation = CONFIG.list[challengeStep];\n const boxWidth = (stepInformation.box && stepInformation.box.width) ? stepInformation.box.width : DEFAULT_BOX_WIDTH;\n const boxHeight = (stepInformation.box && stepInformation.box.height) ? stepInformation.box.height : DEFAULT_BOX_HEIGHT;\n const offsetX = stepInformation.offset ? stepInformation.offset.x :DEFAULT_OFFSET_X;\n const offsetY = stepInformation.offset ? stepInformation.offset.y :DEFAULT_OFFSET_Y;\n switch(stepInformation.direction) {\n case 'right':\n return [tooltipRect.left + offsetX, tooltipRect.top + offsetY - boxHeight / 2];\n case 'left':\n return [tooltipRect.left + offsetX, tooltipRect.top + offsetY - boxHeight / 2];\n case 'top':\n return [tooltipRect.left + offsetX - boxWidth / 2, tooltipRect.top + offsetY ];\n case 'bottom':\n return [tooltipRect.left + offsetX - boxWidth / 2, tooltipRect.top - boxHeight + offsetY];\n default:\n return [tooltipRect.left + offsetX, tooltipRect.top + offsetY];\n }\n }\n\n const calculateArrowOffset = () => {\n const stepInformation = CONFIG.list[challengeStep];\n const boxWidth = (stepInformation.box && stepInformation.box.width) ? stepInformation.box.width : DEFAULT_BOX_WIDTH;\n const boxHeight = (stepInformation.box && stepInformation.box.height) ? stepInformation.box.height : DEFAULT_BOX_HEIGHT;\n const arrowOffsetX = (stepInformation.offset && isNaN(stepInformation.offset.arrowX) === false) ? stepInformation.offset.arrowX : DEFAULT_ARROW_OFFSET_X;\n const arrowOffsetY = (stepInformation.offset && isNaN(stepInformation.offset.arrowY) === false) ? stepInformation.offset.arrowY : DEFAULT_ARROW_OFFSET_Y;\n switch(stepInformation.direction) {\n case 'top':\n return [boxWidth / 2 + arrowOffsetX, arrowOffsetY];\n case 'bottom':\n return [boxWidth / 2 + arrowOffsetX, arrowOffsetY];\n case 'left':\n return [arrowOffsetX, arrowOffsetY + boxHeight / 2 - ARROW_BOX / 2];\n case 'right':\n return [boxWidth + arrowOffsetX, arrowOffsetY + boxHeight / 2 - ARROW_BOX / 2];\n default:\n return [arrowOffsetX, arrowOffsetY];\n }\n }\n // adjust position and content upon steps change\n useEffect(() => {\n if (isVisible() && tooltipRect) {\n const stepInformation = CONFIG.list[challengeStep];\n if (stepInformation) {\n const [boxLeft, boxTop] = calculateWithStepInformation();\n const [arrowOffsetX, arrowOffsetY] = calculateArrowOffset();\n setStyle({\n ...style,\n display: 'block',\n width: stepInformation.box ? stepInformation.box.width : DEFAULT_BOX_WIDTH,\n left: boxLeft,\n top: boxTop//tooltipRect.top + offsetY + PADDING_Y + ARROW_HEIGHT\n });\n setContent(stepInformation.content);\n setArrowStyle({\n ...arrowStyle,\n display: 'block',\n left: boxLeft + arrowOffsetX, // calculateLeftWithStepInformation(),\n top: boxTop + arrowOffsetY // tooltipRect.top + offsetY + PADDING_Y\n });\n }\n } else {\n setStyle({ ...style, display: 'none' });\n setArrowStyle({...arrowStyle, display: 'none'});\n }\n }, [JSON.stringify(tooltipRect), challengeStep, isOpen]);\n\n // update wrapper class name based on step change\n useEffect(() => {\n const stepInformation = CONFIG.list[challengeStep];\n if (stepInformation) {\n switch(stepInformation.direction) {\n case 'top':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-top');\n break;\n case 'bottom':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-bottom');\n break;\n case 'left':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-left');\n break;\n case 'right':\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-right');\n break;\n default:\n setWrapperClassname('challenge-tooltip tooltipster-sidetip tooltipster-left');\n }\n\n }\n }, [challengeStep])\n\n const toNextStep = () => {\n if (challengeStep === CONFIG.totalStep - 1) {\n // finalize challenge\n ModalManager.show();\n setChallengeFinalStatus((helper.getSecondsLeft() > 0) ? 'success' : 'contact');\n setChallengeStep(CONFIG.beginningStep);\n setChallengePassed(true);\n setChallengeListExpanded(true);\n setImportingTemplate(null);\n } else\n setChallengeStep(challengeStep + 1);\n }\n\n\n return (\n <div className={wrapperClassname}>\n <div className=\"tooltipster-box\" style={style}>\n {content}\n <div className=\"btn-row\">\n <button className=\"challenge-done-btn\" onClick={toNextStep}>{__('Next', redux_templates.i18n)}</button>\n </div>\n </div>\n <div className=\"tooltipster-arrow\" style={arrowStyle}>\n <div className=\"tooltipster-arrow-uncropped\">\n <div className=\"tooltipster-arrow-border\"></div>\n <div className=\"tooltipster-arrow-background\"></div>\n </div>\n </div>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const { setChallengeStep, setChallengeFinalStatus, setChallengePassed, setChallengeListExpanded, setImportingTemplate } = dispatch('redux-templates/sectionslist');\n return {\n setChallengeStep,\n setChallengeFinalStatus,\n setChallengePassed,\n setChallengeListExpanded,\n setImportingTemplate\n };\n }),\n\n withSelect((select, props) => {\n const { getChallengeTooltipRect, getChallengeOpen, getChallengeStep, getChallengeFinalStatus } = select('redux-templates/sectionslist');\n return {\n tooltipRect: getChallengeTooltipRect(),\n isOpen: getChallengeOpen(),\n challengeStep: getChallengeStep(),\n finalStatus: getChallengeFinalStatus()\n };\n })\n])(TooltipBox);\n","const {apiFetch} = wp;\nconst {useState} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {parse} = wp.blocks;\n\nimport {BlockPreview} from '@wordpress/block-editor';\nimport {installedBlocksTypes} from '~redux-templates/stores/actionHelper';\nimport './style.scss'\n\nfunction BackgroundImage(props) {\n const {data, appendErrorMessage, activeItemType} = props;\n const [dataLoaded, setDataLoaded] = useState(false);\n const [blocks, setBlocks] = useState(null);\n\n if (data && dataLoaded === false) {\n const type = activeItemType === 'section' ? 'sections' : 'pages';\n let the_url = 'redux/v1/templates/template?type=' + type + '&id=' + data.id + '&uid=' + window.userSettings.uid;\n if ('source' in data) {\n the_url += '&source=' + data.source;\n }\n\n const options = {\n method: 'GET',\n path: the_url,\n headers: {'Content-Type': 'application/json', 'Registered-Blocks': installedBlocksTypes()}\n };\n\n apiFetch(options).then(response => {\n if (response.success) {\n setBlocks(response.data);\n } else {\n appendErrorMessage(response.data.error);\n }\n setDataLoaded(true);\n }).catch(error => {\n appendErrorMessage(error.code + ' : ' + error.message);\n setDataLoaded(true);\n });\n }\n\n if (dataLoaded === true) {\n let parsed = parse(blocks.template);\n return (\n <div>\n <BlockPreview blocks={parsed} />\n </div>\n );\n }\n return null;\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n appendErrorMessage\n } = dispatch('redux-templates/sectionslist');\n\n return {\n appendErrorMessage\n };\n }),\n withSelect((select) => {\n const {getActiveItemType} = select('redux-templates/sectionslist');\n return {\n activeItemType: getActiveItemType()\n };\n })\n])(BackgroundImage);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {compose} = wp.compose;\nconst {withSelect} = wp.data;\nimport {useEffect, useState} from '@wordpress/element';\nimport PreviewImportButton from '../preview-import-button';\nimport DependentPlugins from '../dependent-plugins';\nimport './style.scss'\n\nfunction ButtonGroup (props) {\n const {importingTemplate, showDependencyBlock, index, data, pageData} = props;\n const [rootClassName, setRootClassName] = useState('redux-templates-import-button-group');\n\n // When some action is in progress, disable the button groups\n useEffect(() => {\n if (importingTemplate === null && rootClassName !== 'redux-templates-import-button-group')\n setRootClassName('redux-templates-import-button-group')\n if (importingTemplate !== null && rootClassName === 'redux-templates-import-button-group')\n setRootClassName('redux-templates-import-button-group disabled');\n }, [importingTemplate])\n return (\n <div className={rootClassName}>\n <PreviewImportButton index={index} data={data} pageData={pageData} />\n <DependentPlugins showDependencyBlock={showDependencyBlock} data={data} />\n </div>\n )\n}\n\n\n\nexport default compose([\n withSelect((select) => {\n const {getImportingTemplate} = select('redux-templates/sectionslist');\n return {importingTemplate: getImportingTemplate()};\n })\n])(ButtonGroup);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {Tooltip} from '@wordpress/components';\nimport * as Icons from '~redux-templates/icons'\nimport './style.scss'\nconst {__} = wp.i18n;\n\nexport default function DependentPlugins (props) {\n const {data, showDependencyBlock} = props;\n const {id} = data;\n\n const isMissingPlugin = (plugin) => {\n return ((data.proDependenciesMissing && data.proDependenciesMissing.indexOf(plugin) >=0)\n || (data.installDependenciesMissing && data.installDependenciesMissing.indexOf(plugin) >=0))\n }\n\n if (showDependencyBlock) {\n\t let index = data.dependencies.indexOf('core');\n\t if ( index > -1 ) {\n\t\t data.dependencies.splice(index, 1);\n\t\t data.dependencies.push( 'core' );\n\t }\n\t return (\n\t\t <div className=\"redux-templates-button-display-dependencies\">\n\t\t\t { data.dependencies &&\n\t\t\t data.dependencies.map(plugin => {\n\t\t\t \tlet pluginInstance = null;\n\t\t\t\t const plugin_name = plugin.replace('-pro', '').replace('-premium', '').replace(/\\W/g, '').toLowerCase();\n\t\t\t \tif ( 'core' == plugin ) {\n\t\t\t\t\t pluginInstance = {\n\t\t\t\t\t \tname: 'WordPress Native'\n\t\t\t\t\t }\n\t\t\t\t } else {\n\t\t\t\t\t pluginInstance = redux_templates.supported_plugins[plugin];\n\t\t\t\t }\n\t\t\t\t\tif ( !pluginInstance ) {\n\t\t\t\t\t\tpluginInstance = redux_templates.supported_plugins[plugin.replace('-pro', '').replace('-premium', '')];\n\t\t\t\t\t}\n\n\t\t\t\t // We don't want two of the same icons showing up.\n\t\t\t\t if ( ! plugin.includes('-pro') && ! plugin.includes('-premium') ) {\n\t\t\t\t\t if ( data.dependencies.includes(plugin + '-pro') || data.dependencies.includes( plugin + '-premium' ) ) {\n\t\t\t\t\t\t return;\n\t\t\t\t\t }\n\t\t\t\t }\n\t\t\t\t if (!pluginInstance) {\n\t\t\t\t\t console.log( 'Missing plugin details for '+ plugin+' - ' + plugin.replace('-pro', '').replace('-premium', '') );\n\t\t\t\t\t console.log( redux_templates.supported_plugins );\n\t\t\t\t\t return;\n\t\t\t\t }\n\t\t\t\t if ( 'redux' === plugin_name ) {\n\t\t\t\t\t return;\n\t\t\t\t }\n\t\t\t\t const IconComponent = Icons[plugin_name];\n\t\t\t\t if (IconComponent && pluginInstance) {\n\t\t\t\t\t return (\n\t\t\t\t\t\t <Tooltip text={(isMissingPlugin(plugin) && 'core' !== plugin ? pluginInstance.name+ ' ( '+__('Not Installed', redux_templates.i18n)+' )' : pluginInstance.name)} position=\"bottom center\" key={id + plugin}>\n <span className={isMissingPlugin(plugin) && 'core' !== plugin ? 'missing-dependency' : ''}>\n <IconComponent/>\n </span>\n\t\t\t\t\t\t </Tooltip>\n\t\t\t\t\t );\n\t\t\t\t } else if ( 'shareablockcom' !== plugin_name && 'gutenberghubcom' !== plugin_name ) {\n\t\t\t\t\t console.log('Need icon for ' + plugin_name);\n\t\t\t\t }\n\n\t\t\t })\n\t\t\t }\n\t\t\t { data.dependencies['core'] &&\n\t\t\t <Tooltip text={__('WordPress Core', redux_templates.i18n)} position=\"bottom center\" key={id + 'core'}>\n\t\t\t\t <span>\n\t\t\t\t <IconComponent/>\n\t\t\t\t </span>\n\t\t\t </Tooltip>\n\n\t\t\t }\n\t\t </div>\n\t );\n }\n\n return null;\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\nimport {compose} from '@wordpress/compose';\nimport {withDispatch} from '@wordpress/data';\nimport {Notice} from '@wordpress/components';\n\nimport './style.scss';\n\nexport function ErrorNotice(props) {\n const {discardAllErrorMessages, errorMessages} = props;\n return (\n <div className='redux-templates-error-notice'>\n <Notice status=\"error\" onRemove={discardAllErrorMessages}>\n <p>\n {\n errorMessages.join(', ')\n }\n </p>\n </Notice>\n </div>\n );\n\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n discardAllErrorMessages\n } = dispatch('redux-templates/sectionslist');\n\n return {\n discardAllErrorMessages\n };\n })\n])(ErrorNotice);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","export default {\n position: {\n bottom: 0,\n right: 0,\n },\n event: 'click',\n\n mainButtonStyles: {\n backgroundColor: '#24B0A6',\n fill: '#ffffff',\n transform: 'none',\n transition: 'none',\n transformOrigin: 'none',\n },\n alwaysShowTitle: false,\n actionButtonStyles: {\n backgroundColor: '#19837C',\n }\n}\n","import {Fab, Action} from 'react-tiny-fab';\nimport config from './config';\nimport './styles.scss';\nimport {__} from '@wordpress/i18n';\n\nimport * as Icons from '~redux-templates/icons'\nimport { ModalManager } from '~redux-templates/modal-manager';\nimport FeedbackDialog from '~redux-templates/modal-feedback';\n\nconst schema = {\n type: 'object',\n properties: {\n comment: {\n type: 'string'\n },\n agreeToContactFurther: {\n type: 'boolean',\n title: __('Yes, I give Redux permission to contact me for any follow up questions.', redux_templates.i18n)\n }\n }\n}\nconst uiSchema = {\n 'comment': {\n 'ui:widget': 'textarea',\n 'ui:options': {\n label: false\n }\n }\n};\n\nexport default function FabWrapper() {\n const {mainButtonStyles, actionButtonStyles, position, event, alwaysShowTitle} = config;\n\n return (\n <Fab\n mainButtonStyles={mainButtonStyles}\n position={position}\n icon={Icons.ReduxTemplatesIcon()}\n event={event}\n // onClick={testing}\n\n text={__('See Quick Links', redux_templates.i18n)}\n >\n\n {/*<Action*/}\n {/* style={actionButtonStyles}*/}\n {/* text={__('Suggest a Feature', redux_templates.i18n)}*/}\n {/* onClick={e => {*/}\n {/* window.open(redux_templates.u, \"_blank\")*/}\n {/* }}*/}\n {/*>*/}\n {/* <i className=\"fa fa-lightbulb-o\"/>*/}\n {/*</Action>*/}\n {/*<Action*/}\n {/* style={actionButtonStyles}*/}\n {/* text={__('Contact Us', redux_templates.i18n)}*/}\n {/* onClick={e => {*/}\n {/* ModalManager.openFeedback(<FeedbackDialog */}\n {/* title={__('Help us improve Redux', redux_templates.i18n)} */}\n {/* description={__('Thank you for reaching out. We will do our best to contact you ba.', redux_templates.i18n)}*/}\n {/* schema={schema}*/}\n {/* uiSchema={uiSchema}*/}\n {/* headerImage={<img className=\"header-background\" src={`${redux_templates.plugin}assets/img/popup-contact.png` } />}*/}\n {/* buttonLabel={__('Submit Feedback', redux_templates.i18n)}*/}\n {/* />)*/}\n {/* }}*/}\n {/*>*/}\n {/* <i className=\"fa fa-comments\"/>*/}\n {/*</Action>*/}\n\t <Action\n\t\t style={actionButtonStyles}\n\t\t text={__('Get Support', redux_templates.i18n)}\n\t\t onClick={e => {\n\t\t\t window.open('https://wordpress.org/support/plugin/redux-framework/#new-topic-0', '_blank')\n\t\t }}\n\t >\n\t\t <i className=\"far fa-question-circle \"/>\n\t </Action>\n <Action\n style={actionButtonStyles}\n text={__('Join our Community', redux_templates.i18n)}\n onClick={e => {\n window.open('https://www.facebook.com/groups/reduxframework', '_blank')\n }}\n >\n <i className=\"fa fa-comments\"/>\n </Action>\n\t {\n\t\t redux_templates.mokama === '1' &&\n\t\t <Action\n\t\t\t style={actionButtonStyles}\n\t\t\t text={__('Visit our Website', redux_templates.i18n)}\n\t\t\t onClick={e => {\n\t\t\t\t window.open( redux_templates.u + 'tinyfab', '_blank')\n\t\t\t }}\n\t\t >\n\t\t\t <i className=\"fas fa-external-link-alt\"/>\n\t\t </Action>\n\t }\n\t {/*{*/}\n\t\t {/* redux_templates.left !== 999 &&*/}\n\t\t {/* <Action*/}\n\t\t\t{/* style={actionButtonStyles}*/}\n\t\t\t{/* className=\"tour-icon\"*/}\n\t\t\t{/* text={__( 'Take the Redux Challenge', redux_templates.i18n )}*/}\n\t\t\t{/* onClick={e => {*/}\n\t\t\t{/*\t setTourOpen();*/}\n\t\t\t{/* }}*/}\n\t\t {/* >*/}\n\t\t\t{/* <i className=\"fas fa-map-signs tour-icon\"/>*/}\n\t\t {/* </Action>*/}\n\t {/*}*/}\n\n\t {\n\t\t redux_templates.mokama !== '1' &&\n\t\t <Action\n\t\t\t style={{backgroundColor:'#00a7e5'}}\n\t\t\t text={__('Upgrade to Redux Pro', redux_templates.i18n)}\n\t\t\t onClick={e => {\n\t\t\t\t window.open(redux_templates.u + 'help_bubble', '_blank')\n\t\t\t }}\n\t\t >\n\t\t\t <i className=\"fa fa-star\"/>\n\t\t </Action>\n\t }\n </Fab>\n );\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./styles.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./styles.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./styles.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import ButtonGroup from '../button-group';\n\nconst {__} = wp.i18n\nimport {Tooltip} from '@wordpress/components';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport './style.scss'\n\nconst MultipleItem = (props) => {\n\n const {data, onSelectCollection} = props;\n const {pages, homepageData, ID, name} = data;\n const {image} = homepageData || {};\n\n return (\n <div className=\"redux-templates-multiple-template-box\">\n <div className=\"multiple-template-view\" onClick={ () => onSelectCollection( ID ) } >\n <div className=\"redux-templates-box-shadow\">\n <div className=\"redux-templates-default-template-image\">\n <SafeImageLoad url={image} alt={__('Default Template', redux_templates.i18n)} />\n {requiresPro(data) && <span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span>}\n {!requiresPro(data) && requiresInstall(data) && <div className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></div>}\n </div>\n <div className=\"redux-templates-button-overlay\">\n {requiresPro(data) && <Tooltip text={__('Premium Requirements', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span></Tooltip>}\n {!requiresPro(data) && requiresInstall(data) && <Tooltip text={__('Not Installed', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><div className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></div></Tooltip>}\n <div className=\"redux-templates-import-button-group\">\n <div className=\"action-buttons\"><a className=\"redux-templates-button download-button\">{__('View Templates', redux_templates.i18n)}</a></div>\n </div>\n </div>\n </div>\n <div className=\"redux-templates-tmpl-info\">\n <h5 className=\"redux-templates-tmpl-title\" dangerouslySetInnerHTML={{__html:name}}/>\n <span className=\"redux-templates-temp-count\">{ pages ? pages.length : 0 } {__('Templates', redux_templates.i18n)}</span>\n </div>\n </div>\n </div>\n );\n}\n\nexport default MultipleItem\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const { useState, useEffect, Fragment} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n\n\nimport './style.scss';\n\nimport {pageSizeMap} from '../../stores/helper';\n\nfunction Pagination(props) {\n const {currentPage, pageData, columns} = props;\n const {setCurrentPage} = props;\n const [totalPages, setTotalPages] = useState(1);\n const [firstButtonClass, setFirstButtonClass] = useState('tablenav-pages-navspan button');\n const [prevButtonClass, setPrevButtonClass] = useState('tablenav-pages-navspan button');\n const [nextButtonClass, setNextButtonClass] = useState('tablenav-pages-navspan button');\n const [lastButtonClass, setLastButtonClass] = useState('tablenav-pages-navspan button');\n\n useEffect(() => {\n const enabledClassname = 'tablenav-pages-navspan button ';\n const disabledClassname = 'tablenav-pages-navspan button disabled';\n setFirstButtonClass((currentPage === 0) ? disabledClassname : enabledClassname);\n setPrevButtonClass((currentPage === 0) ? disabledClassname : enabledClassname);\n setNextButtonClass((currentPage === totalPages - 1) ? disabledClassname : enabledClassname);\n setLastButtonClass((currentPage === totalPages - 1) ? disabledClassname : enabledClassname);\n }, [currentPage, totalPages]);\n\n useEffect(() => {\n let colStr = (columns === '') ? 'medium' : columns;\n setTotalPages(Math.ceil(pageData.length / pageSizeMap[colStr]));\n }, [pageData]);\n\n const gotoPage = (pageNum, className) => {\n if (className.indexOf('disabled') > 0) return;\n document.getElementById('modalContent').scrollTop = 0;\n setCurrentPage(pageNum);\n }\n\n\n return (\n <Fragment>\n\n {\n totalPages > 0 &&\n <div className=\"tablenav-pages\">\n <span className=\"displaying-num\">{pageData.length} items</span>\n <span className=\"pagination-links\">\n <span className={firstButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(0, firstButtonClass)}>«</span>\n <span className={prevButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(currentPage - 1, prevButtonClass)}>‹</span>\n <span className=\"screen-reader-text\">{__('Current Page', redux_templates.i18n)}</span>\n <span id=\"table-paging\" className=\"paging-input\">\n <span className=\"tablenav-paging-text\">{currentPage + 1} of <span\n className=\"total-pages\">{totalPages}</span></span>\n </span>\n <span className={nextButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(currentPage + 1, nextButtonClass)}>›</span>\n <span className={lastButtonClass} aria-hidden=\"true\"\n onClick={() => gotoPage(totalPages - 1, lastButtonClass)}>»</span>\n </span>\n </div>\n }\n </Fragment>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setCurrentPage\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setCurrentPage\n };\n }),\n\n withSelect((select) => {\n const {getCurrentPage, getPageData, getColumns} = select('redux-templates/sectionslist');\n return {\n currentPage: getCurrentPage(),\n pageData: getPageData(),\n columns: getColumns()\n };\n })\n])(Pagination);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\n\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nimport {openSitePreviewModal} from '~redux-templates/stores/actionHelper';\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\nimport './style.scss'\n\nfunction PreviewImportButton(props) {\n const {data, index, pageData} = props;\n const {setImportingTemplate, tourActiveButtonGroup} = props;\n let spinner = null;\n const triggerImportTemplate = (data) => {\n if (spinner === null) {\n spinner = data.ID;\n setImportingTemplate(data);\n }\n }\n\n return (\n <div className=\"action-buttons\">\n {\n pageData[index] && pageData[index]['source'] !== 'wp_block_patterns' &&\n <a className=\"redux-templates-button preview-button\" target=\"_blank\"\n onClick={() => openSitePreviewModal(index, pageData)}>\n <i className=\"fa fa-share\"/> {__('Preview', redux_templates.i18n)}\n </a>\n }\n\n <a className=\"redux-templates-button download-button\"\n onClick={() => triggerImportTemplate(data)}>\n <i className=\"fas fa-download\"/>{__('Import', redux_templates.i18n)}\n </a>\n {tourActiveButtonGroup && tourActiveButtonGroup.ID === pageData[index].ID && <ChallengeDot step={4} /> }\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setImportingTemplate\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setImportingTemplate\n };\n }),\n withSelect((select, props) => {\n const {getTourActiveButtonGroup} = select('redux-templates/sectionslist');\n return {\n tourActiveButtonGroup: getTourActiveButtonGroup()\n };\n })\n])(PreviewImportButton);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const { Spinner } = wp.components;\nimport ImageLoader from 'react-load-image';\n\nconst placeholderImage = redux_templates.plugin + 'assets/img/reduxtemplates-medium.jpg';\nconst spinnerStyle = {height: 120, display: 'flex', alignItems: 'top', paddingTop: '40px', justifyContent: 'center', background: '#fff'};\nexport default function SafeImageLoad({url, alt, className}) {\n return (\n <ImageLoader src={url}>\n <img alt={alt} className={className} />\n <img src={placeholderImage} alt={alt} className={className} />\n <div style={spinnerStyle}>\n <Spinner />\n </div>\n </ImageLoader>\n );\n\n}\n","import {Tooltip} from '@wordpress/components';\n\nconst {__} = wp.i18n\nconst {withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\n\nimport ButtonGroup from '../button-group';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport BackgroundImage from '../background-image';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper';\n\nimport './style.scss'\n\n\nfunction SingleItem (props) {\n // Decoupling props\n const {pageData, tourActiveButtonGroup, index} = props;\n const [data, setData] = useState(null);\n // const {ID, image, url, pro, source, requirements} = data;\n const [innerClassname, setInnerClassname] = useState('redux-templates-single-item-inner redux-templates-item-wrapper ');\n\n useEffect(() => {\n if (pageData) setData(pageData[index]);\n }, [index, pageData]);\n\n useEffect(() => {\n setInnerClassname((pageData && pageData[index] && tourActiveButtonGroup && tourActiveButtonGroup.ID === pageData[index].ID) ?\n 'redux-templates-single-item-inner redux-templates-item-wrapper focused' : 'redux-templates-single-item-inner redux-templates-item-wrapper');\n }, [tourActiveButtonGroup, pageData, index]);\n\n if (!data) return null;\n return (\n <div className=\"redux-templates-single-section-item\">\n <div className={innerClassname}>\n <div className=\"redux-templates-default-template-image\">\n {data.source !== 'wp_block_patterns' && <SafeImageLoad url={data.image}/> }\n {data.source === 'wp_block_patterns' && <BackgroundImage data={data} />}\n {requiresPro(data) && <span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span>}\n {!requiresPro(data) && requiresInstall(data) && <span className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></span>}\n <div className=\"redux-templates-tmpl-title\">{data.name}</div>\n </div>\n {/* redux-templates-default-template-image */}\n <div className=\"redux-templates-button-overlay\">\n\t {requiresPro(data) && <Tooltip text={__('Premium Requirements', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><div className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</div></Tooltip>}\n {!requiresPro(data) && requiresInstall(data) && <Tooltip text={__('Not Installed', redux_templates.i18n)} position=\"bottom\" key={data.source+data.source_id}><div className=\"redux-templates-missing-badge\"><i className=\"fas fa-exclamation-triangle\" /></div></Tooltip>}\n <ButtonGroup index={index} showDependencyBlock={true} data={data} pageData={pageData} />\n </div>\n\n </div>\n {/* redux-templates-item-wrapper */}\n </div>\n )\n}\n\n\nexport default withSelect((select, props) => {\n const {getTourActiveButtonGroup, getPageData} = select('redux-templates/sectionslist');\n return {\n pageData: getPageData(),\n tourActiveButtonGroup: getTourActiveButtonGroup()\n };\n})(SingleItem);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\nimport {compose} from '@wordpress/compose';\nimport {withDispatch, withSelect} from '@wordpress/data';\nimport {ModalManager} from '../../modal-manager';\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\nexport function TabHeader(props) {\n const { activeItemType, searchContext, activeCollection, isChallengeOpen } = props;\n const { setActiveItemType, setSearchContext, setChallengeOpen, clearSearch } = props;\n\n const isActive = (itemType) => {\n return (activeItemType === itemType) ? 'active' : '';\n }\n\n const onSearchContextUpdate = (e) => {\n if (activeItemType !=='saved') setSearchContext(e.target.value);\n }\n\n const changeTab = (tabName) => {\n if (document.getElementById('modalContent')) document.getElementById('modalContent').scrollTop = 0;\n setActiveItemType(tabName);\n }\n\n const closeModal = () => {\n if (isChallengeOpen === false) {\n ModalManager.close();\n }\n }\n\n return (\n <div className=\"redux-templates-builder-modal-header\">\n <div className=\"template-search-box\">\n {\n ((activeItemType !== 'collection' || activeCollection === null) && activeItemType !== 'saved') &&\n <div>\n <input type=\"text\" placeholder={__('Search for a template', redux_templates.i18n)} className=\"form-control\" value={searchContext} onChange={onSearchContextUpdate} />\n <ChallengeDot step={1} />\n <i className=\"fas fa-search\" />\n </div>\n }\n </div>\n\n <div className=\"redux-templates-template-list-header\" data-tut=\"tour__navigation\">\n <button className={ isActive('section') } onClick={e => changeTab('section')}> {__('Sections', redux_templates.i18n)} </button>\n <button className={ isActive('page') } onClick={e => changeTab('page')}> {__('Templates', redux_templates.i18n)} </button>\n <button className={ isActive('collection') } onClick={e => changeTab('collection')}> {__('Template Kits', redux_templates.i18n)} </button>\n <button className={ isActive('saved') } onClick={e => changeTab('saved')}> {__('Saved', redux_templates.i18n)} </button>\n <ChallengeDot step={0} />\n <button className=\"redux-templates-builder-close-modal\" onClick={closeModal} >\n\t\t\t\t\t<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" role=\"img\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M13 11.9l3.3-3.4-1.1-1-3.2 3.3-3.2-3.3-1.1 1 3.3 3.4-3.5 3.6 1 1L12 13l3.5 3.5 1-1z\"></path></svg>\n </button>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setActiveItemType,\n setSearchContext,\n clearSearch\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setActiveItemType,\n setSearchContext,\n clearSearch\n };\n }),\n\n withSelect((select, props) => {\n const { getActiveItemType, getSearchContext, getActiveCollection, getChallengeOpen } = select('redux-templates/sectionslist');\n return { activeItemType: getActiveItemType(), searchContext: getSearchContext(), activeCollection: getActiveCollection(), isChallengeOpen: getChallengeOpen() };\n })\n\n])(TabHeader);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38 12H12v26h26V12z\"\n});\n\nvar SvgViewFew = function SvgViewFew(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 50 50\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgViewFew;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.5 12.5H0V0h12.5v12.5zM31.2 0H18.8v12.5h12.5V0zM50 0H37.5v12.5H50V0zM12.5 18.8H0v12.5h12.5V18.8zm18.7 0H18.8v12.5h12.5V18.8zm18.8 0H37.5v12.5H50V18.8zM12.5 37.5H0V50h12.5V37.5zm18.7 0H18.8V50h12.5V37.5zm18.8 0H37.5V50H50V37.5z\"\n});\n\nvar SvgViewMany = function SvgViewMany(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 50 50\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgViewMany;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.1 5.3H5.3v15.8h15.8V5.3zm23.6 0H28.9v15.8h15.8V5.3zM21.1 28.9H5.3v15.8h15.8V28.9zm23.6 0H28.9v15.8h15.8V28.9z\"\n});\n\nvar SvgViewNormal = function SvgViewNormal(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 50 50\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgViewNormal;","const {__, sprintf} = wp.i18n;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\nimport {Button, Notice} from '@wordpress/components'\nimport SVGViewFew from './images/view-few.svg'\nimport SVGViewMany from './images/view-many.svg'\nimport SVGViewNormal from './images/view-normal.svg'\nimport {reloadLibrary} from '~redux-templates/stores/actionHelper';\nimport * as Icons from '~redux-templates/icons';\nimport './style.scss'\n\nfunction TemplateListSubHeader(props) {\n const {itemType, sortBy, activeCollection, challengePassed, pageData, columns, loading} = props;\n const {setSortBy, setColumns, setChallengeOpen, setChallengeListExpanded} = props;\n const [triggerTourClassname, setTriggerTourClassname] = useState('far fa-question-circle tour-icon');\n\n useEffect(() => {\n setTriggerTourClassname(challengePassed ? 'fas fa-trophy tour-icon' : 'fas fa-map-signs tour-icon');\n }, [challengePassed]);\n\n const itemTypeLabel = () => {\n if (itemType === 'section') return __('Sections', redux_templates.i18n);\n if (itemType === 'page') return __('Templates', redux_templates.i18n);\n if (itemType === 'collection' && activeCollection === null) return __('Template Kits', redux_templates.i18n);\n if (itemType === 'collection' && activeCollection !== null) return __('Sections', redux_templates.i18n);\n };\n\n const dataLength = pageData ? pageData.length : '';\n\n let pageTitle = '';\n if (loading === false && dataLength && dataLength !== 0) {\n pageTitle = <span>{dataLength} {itemTypeLabel()}</span>;\n }\n\n return (\n <div className=\"redux-templates-template-list-sub-header\">\n <h4>\n {pageTitle}\n <ChallengeDot step={3} />\n </h4>\n\n <div className=\"redux-templates-template-filters\">\n\t <div className='trial_notice'>\n\t\t { ! redux_templates.mokama &&\n\t\t <div style={{verticalAlign:'middle'}}>\n\t\t\t <Notice status=\"info\" isDismissible={false}>\n\t\t\t\t <strong style={{display:'inline-block', marginRight:'10px', verticalAlign:'middle'}}>\n\t\t\t\t\t { '0' === redux_templates.left &&\n\t\t\t\t\t \t<>\n\t\t\t\t\t\t\t {sprintf( __( 'You\\'ve imported %d/%d Templates', redux_templates.i18n ), 5-redux_templates.left, 5 )}\n\t\t\t\t\t\t </>\n\t\t\t\t\t }\n\t\t\t\t\t { '0' !== redux_templates.left &&\n\t\t\t\t\t <>\n\t\t\t\t\t\t {sprintf( __( 'Trial: %d/%d Imports Remaining', redux_templates.i18n ), redux_templates.left, 5 )}\n\t\t\t\t\t </>\n\t\t\t\t\t }\n\t\t\t\t </strong>\n\t\t\t\t <Button isPrimary\n\t\t\t\t isSmall\n\t\t\t\t icon={Icons.redux}\n\t\t\t\t label={__('Upgrade to Redux Pro', redux_templates.i18n)}\n\t\t\t\t onClick={()=> window.open( redux_templates.u + 'subheader', '_blank')}>Get Pro</Button>\n\t\t\t </Notice>\n\n\n\t\t </div>\n\n\t\t }</div>\n <Button\n icon={<i className={triggerTourClassname} />}\n label={__('Take the Redux Challenge', redux_templates.i18n)}\n onClick={() => {setChallengeOpen(true); setChallengeListExpanded(true); }}\n />\n <Button\n icon=\"image-rotate\"\n label={__('Refresh Library', redux_templates.i18n)}\n className=\"refresh-library\"\n onClick={reloadLibrary}\n />\n <Button\n icon={<SVGViewFew width=\"18\" height=\"18\"/>}\n className={columns === 'large' ? 'is-active' : ''}\n label={__('Large preview', redux_templates.i18n)}\n onClick={() => setColumns('large')}\n />\n <Button\n icon={<SVGViewNormal width=\"18\" height=\"18\"/>}\n className={columns === '' ? 'is-active' : ''}\n label={__('Medium preview', redux_templates.i18n)}\n onClick={(e) => setColumns('')}\n />\n <Button\n icon={<SVGViewMany width=\"18\" height=\"18\"/>}\n className={columns === 'small' ? 'is-active' : ''}\n label={__('Small preview', redux_templates.i18n)}\n onClick={(e) => setColumns('small')}\n />\n <div className=\"\">\n <select name=\"sortBy\" id=\"sortBy\" value={sortBy} onChange={(e) => setSortBy(e.target.value)}>\n <option value=\"name\">{__('Name', redux_templates.i18n)}</option>\n {/*<option value=\"popularity\">{__('Popularity', redux_templates.i18n)}</option>*/}\n <option value=\"updated\">{__('Updated', redux_templates.i18n)}</option>\n </select>\n </div>\n </div>\n\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setLibrary, setActivePriceFilter, setActiveCollection, setSortBy, setColumns, setChallengeOpen, setChallengeListExpanded} = dispatch('redux-templates/sectionslist');\n return {\n setLibrary,\n setActivePriceFilter,\n setActiveCollection,\n setSortBy,\n setColumns,\n setChallengeOpen,\n setChallengeListExpanded\n };\n }),\n\n withSelect((select, props) => {\n const {fetchLibraryFromAPI, getActiveItemType, getColumns, getPageData, getActiveCollection, getStatistics, getSortBy, getLoading, getChallengePassed} = select('redux-templates/sectionslist');\n return {\n fetchLibraryFromAPI,\n itemType: getActiveItemType(),\n pageData: getPageData(),\n columns: getColumns(),\n statistics: getStatistics(),\n sortBy: getSortBy(),\n activeCollection: getActiveCollection(),\n loading: getLoading(),\n challengePassed: getChallengePassed()\n };\n })\n])(TemplateListSubHeader);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\nexport const GuideImage1 = ( props ) => (\n\t<>\n\t\t<img\n\t\t\tclassName=\"redux-edit-post-welcome-guide__image redux-edit-post-welcome-guide__image__prm-np\"\n\t\t\talt=\"\"\n\t\t\tsrc={ `${ redux_templates.plugin }assets/img/welcome-guide-1.png` }\n\t\t\t{ ...props }\n\t\t/>\n\t</>\n);\n\nexport const GuideImage2 = ( props ) => (\n\t<>\n\t\t<img\n\t\t\tclassName=\"redux-edit-post-welcome-guide__image redux-edit-post-welcome-guide__image__prm-np\"\n\t\t\talt=\"\"\n\t\t\tsrc={ `${ redux_templates.plugin }assets/img/welcome-guide-2.gif` }\n\t\t\t{ ...props }\n\t\t/>\n\t</>\n);\nexport const GuideImage3 = ( props ) => (\n\t<>\n\t\t<img\n\t\t\tclassName=\"redux-edit-post-welcome-guide__image redux-edit-post-welcome-guide__image__prm-np\"\n\t\t\talt=\"\"\n\t\t\tsrc={ `${ redux_templates.plugin }assets/img/welcome-guide-3.png` }\n\t\t\t{ ...props }\n\t\t/>\n\t</>\n);\n","/**\n * WordPress dependencies\n */\nconst { useState } = wp.element;\nimport { useSelect } from '@wordpress/data';\nimport { ExternalLink, Guide } from '@wordpress/components';\nconst {apiFetch} = wp;\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tGuideImage1,\n\tGuideImage2,\n\tGuideImage3,\n} from './images';\nimport './style.scss';\n\nexport default function WelcomeGuide() {\n\n\tconst [ isOpen, setIsOpen ] = useState( true );\n\n\tconst isActive = useSelect(\n\t\t( select ) =>\n\t\t\tselect( 'core/edit-post' ).isFeatureActive( 'welcomeGuide' ),\n\t\t[]\n\t);\n\n\tif ( isActive ) { // Don't want to show during the WP guide.\n\t\tdelete redux_templates.welcome; // In fact, we don't want to show it until the next page load!\n\t\treturn null;\n\t}\n\n\tif ( ! isOpen || 'undefined' === typeof( redux_templates.welcome ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Guide\n\t\t\tclassName=\"redux-edit-post-welcome-guide\"\n\t\t\tcontentLabel={ __( 'Say hello to the Redux template library', redux_templates.i18n ) }\n\t\t\tonFinish={ () => {\n\t\t\t\tsetIsOpen( false );\n\t\t\t\tconst options = {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tpath: 'redux/v1/templates/welcome/?uid=' + window.userSettings.uid,\n\t\t\t\t}\n\t\t\t\tapiFetch(options).then(response => {\n\t\t\t\t}).catch(error => {\n\t\t\t\t});\n\t\t\t} }\n\t\t\tpages={ [\n\t\t\t\t{\n\t\t\t\t\timage: <GuideImage1 />,\n\t\t\t\t\tcontent: (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<h1 className=\"redux-edit-post-welcome-guide__heading\">\n\t\t\t\t\t\t\t\t{ __( 'Try the Redux Template Library', redux_templates.i18n ) }\n\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t<h3 className=\"redux-edit-post-welcome-guide__text\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'Redux brings you over 1,000 importable templates and blocks that allow you to build Gutenberg powered pages and websites in minutes not days.',\n\t\t\t\t\t\t\t\t\tredux_templates.i18n\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\timage: <GuideImage2 />,\n\t\t\t\t\tcontent: (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<h1 className=\"redux-edit-post-welcome-guide__heading\">\n\t\t\t\t\t\t\t\t{ __( 'Using the Template Library', redux_templates.i18n ) }\n\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t<h3 className=\"redux-edit-post-welcome-guide__text\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'To use the template library click on the library button then pick your favourite template and import! Redux allows you to import beautiful Gutenberg pages in seconds.',\n\t\t\t\t\t\t\t\t\tredux_templates.i18n\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\timage: <GuideImage3 />,\n\t\t\t\t\tcontent: (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<h1 className=\"redux-edit-post-welcome-guide__heading\">\n\t\t\t\t\t\t\t\t{ __( 'Import 5 templates for free or go Pro!', redux_templates.i18n ) }\n\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t<h3 className=\"redux-edit-post-welcome-guide__text\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'Redux allows you 5 free imports or you can go Pro now and import unlimited templates for just $49/year (limited time only).',\n\t\t\t\t\t\t\t\t\tredux_templates.i18n\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t<br /><br />\n\t\t\t\t\t\t\t\t<center>\n\t\t\t\t\t\t\t\t\t<ExternalLink href={ `${ redux_templates.u }welcome-guide` }>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Learn more at Redux.io', redux_templates.i18n ) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t</center>\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t] }\n\t\t/>\n\t);\n}\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies.\n */\nconst { __ } = wp.i18n;\n\nconst {\n\tFragment,\n\tuseEffect,\n\tuseRef\n} = wp.element;\n\nconst CSSEditor = ({\n\t attributes,\n\t setAttributes,\n\t clientId\n }) => {\n\tuseEffect( () => {\n\t\tlet classes = getClassName();\n\n\t\tif ( attributes.customCSS ) {\n\t\t\tconst generatedCSS = ( attributes.customCSS ).replace( /.ticss-[a-zA-Z0-9_-]*/g, 'selector' );\n\t\t\tcustomCSSRef.current = generatedCSS;\n\t\t} else {\n\t\t\tcustomCSSRef.current = 'selector {\\n}\\n';\n\t\t}\n\n\t\teditorRef.current = wp.CodeMirror( document.getElementById( 'redux-css-editor' ), {\n\t\t\tvalue: customCSSRef.current,\n\t\t\tautoCloseBrackets: true,\n\t\t\tcontinueComments: true,\n\t\t\tlineNumbers: true,\n\t\t\tlineWrapping: true,\n\t\t\tmatchBrackets: true,\n\t\t\tlint: true,\n\t\t\tgutters: [ 'CodeMirror-lint-markers' ],\n\t\t\tstyleActiveLine: true,\n\t\t\tstyleActiveSelected: true,\n\t\t\textraKeys: {\n\t\t\t\t'Ctrl-Space': 'autocomplete',\n\t\t\t\t'Alt-F': 'findPersistent',\n\t\t\t\t'Cmd-F': 'findPersistent'\n\t\t\t}\n\t\t});\n\n\t\teditorRef.current.on( 'change', () => {\n\t\t\tconst regex = new RegExp( 'selector', 'g' );\n\t\t\tconst generatedCSS = editorRef.current.getValue().replace( regex, `.${ classArRef.current }` );\n\t\t\tcustomCSSRef.current = generatedCSS;\n\n\t\t\tif ( ( 'selector {\\n}\\n' ).replace( /\\s+/g, '' ) === customCSSRef.current.replace( /\\s+/g, '' ) ) {\n\t\t\t\treturn setAttributes({ customCSS: null });\n\t\t\t}\n\n\t\t\tsetAttributes({ customCSS: customCSSRef.current });\n\t\t});\n\t}, []);\n\n\tuseEffect( () => {\n\t\tlet classes = getClassName();\n\n\t\tsetAttributes({\n\t\t\thasCustomCSS: true,\n\t\t\tclassName: classes\n\t\t});\n\t}, [ attributes ]);\n\n\tconst getClassName = () => {\n\t\tlet classes;\n\n\t\tconst uniqueId = clientId.substr( 0, 8 );\n\n\t\tif ( null !== customCSSRef.current && ( 'selector {\\n}\\n' ).replace( /\\s+/g, '' ) === customCSSRef.current.replace( /\\s+/g, '' ) ) {\n\t\t\treturn attributes.className;\n\t\t}\n\n\t\tif ( attributes.className ) {\n\t\t\tclasses = attributes.className;\n\n\t\t\tif ( ! classes.includes( 'ticss-' ) ) {\n\t\t\t\tclasses = classes.split( ' ' );\n\t\t\t\tclasses.push( `ticss-${ uniqueId }` );\n\t\t\t\tclasses = classes.join( ' ' );\n\t\t\t}\n\n\t\t\tclassArRef.current = classes.split( ' ' );\n\t\t\tclassArRef.current = classArRef.current.find( i => i.includes( 'ticss' ) );\n\t\t} else {\n\t\t\tclasses = `ticss-${ uniqueId }`;\n\t\t\tclassArRef.current = classes;\n\t\t}\n\n\t\treturn classes;\n\t};\n\n\tconst editorRef = useRef( null );\n\tconst customCSSRef = useRef( null );\n\tconst classArRef = useRef( null );\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<p>{ __( 'Add your custom CSS.' ) }</p>\n\n\t\t\t<div id=\"redux-css-editor\" className=\"redux-css-editor\"/>\n\n\t\t\t<p>{ __( 'Use' ) } <code>selector</code> { __( 'to target block wrapper.' ) }</p>\n\t\t\t<p>{ __( '' ) }</p>\n\t\t\t<p>{ __( 'Example:' ) }</p>\n\n\t\t\t<pre className=\"redux-css-editor-help\">\n\t\t\t\t{ 'selector {\\n background: #000;\\n}\\n\\nselector img {\\n border-radius: 100%;\\n}'}\n\t\t\t</pre>\n\n\t\t\t<p>{ __( 'You can also use other CSS syntax here, such as media queries.' ) }</p>\n\t\t</Fragment>\n\t);\n};\n\nexport default CSSEditor;\n","/**\n * WordPress dependencies.\n */\nconst { assign } = lodash;\n\nconst { __ } = wp.i18n;\n\nconst { hasBlockSupport } = wp.blocks;\n\nconst { PanelBody } = wp.components;\n\nconst { createHigherOrderComponent } = wp.compose;\n\nconst { InspectorControls } = wp.blockEditor || wp.editor;\n\nconst { Fragment } = wp.element;\n\nconst { addFilter, removeFilter } = wp.hooks;\n\n/**\n * Internal dependencies.\n */\nimport './style.scss';\n\nimport CSSEditor from './editor.js';\n\nimport './inject-css.js';\n\nconst addAttribute = ( settings ) => {\n\tif ( hasBlockSupport( settings, 'customClassName', true ) ) {\n\t\tsettings.attributes = assign( settings.attributes, {\n\t\t\thasCustomCSS: {\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false\n\t\t\t},\n\t\t\tcustomCSS: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: null\n\t\t\t}\n\t\t});\n\t}\n\n\treturn settings;\n};\n\nconst withInspectorControls = createHigherOrderComponent( ( BlockEdit ) => {\n\treturn ( props ) => {\n\t\tconst hasCustomClassName = hasBlockSupport( props.name, 'customClassName', true );\n\t\tif ( hasCustomClassName && props.isSelected ) {\n\t\t\treturn (\n\t\t\t\t<Fragment>\n\t\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t\t<InspectorControls>\n\t\t\t\t\t\t<PanelBody\n\t\t\t\t\t\t\ttitle={ __( 'Custom CSS' ) }\n\t\t\t\t\t\t\ticon={<i className={'fa fa'}></i>}\n\t\t\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CSSEditor\n\t\t\t\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\t\t\t\tsetAttributes={ props.setAttributes }\n\t\t\t\t\t\t\t\tattributes={ props.attributes }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</PanelBody>\n\t\t\t\t\t</InspectorControls>\n\t\t\t\t</Fragment>\n\t\t\t);\n\t\t}\n\n\t\treturn <BlockEdit { ...props } />;\n\t};\n}, 'withInspectorControl' );\n\n// Remove block-css fields.\nremoveFilter( 'blocks.registerBlockType', 'themeisle-custom-css/attribute' );\nremoveFilter( 'editor.BlockEdit', 'themeisle-custom-css/with-inspector-controls' );\n\naddFilter( 'blocks.registerBlockType', 'redux-custom-css/attribute', addAttribute );\naddFilter( 'editor.BlockEdit', 'redux-custom-css/with-inspector-controls', withInspectorControls );\n\n","/**\n * WordPress dependencies.\n */\nconst { __ } = wp.i18n;\n\nconst { parse } = wp.blocks;\n\nconst {\n\tselect,\n\tsubscribe\n} = wp.data;\n\nconst addStyle = style => {\n\tlet element = document.getElementById( 'redux-css-editor-styles' );\n\n\tif ( null === element ) {\n\t\telement = document.createElement( 'style' );\n\t\telement.setAttribute( 'type', 'text/css' );\n\t\telement.setAttribute( 'id', 'redux-css-editor-styles' );\n\t\tdocument.getElementsByTagName( 'head' )[0].appendChild( element );\n\t}\n\n\tif ( element.textContent === style ) {\n\t\treturn null;\n\t}\n\n\treturn element.textContent = style;\n};\n\nlet style = '';\n\nconst cycleBlocks = ( blocks, reusableBlocks ) => {\n\tblocks.forEach( block => {\n\t\tif ( block.attributes.hasCustomCSS ) {\n\t\t\tif ( block.attributes.customCSS && ( null !== block.attributes.customCSS ) ) {\n\t\t\t\tstyle += block.attributes.customCSS + '\\n';\n\t\t\t}\n\t\t}\n\n\t\tif ( 'core/block' === block.name && null !== reusableBlocks ) {\n\t\t\tlet reBlocks = reusableBlocks.find( i => block.attributes.ref === i.id );\n\t\t\tif ( reBlocks ) {\n\t\t\t\treBlocks = parse( reBlocks.content.raw );\n\t\t\t\tcycleBlocks( reBlocks, reusableBlocks );\n\t\t\t};\n\t\t}\n\n\t\tif ( undefined !== block.innerBlocks && 0 < ( block.innerBlocks ).length ) {\n\t\t\tcycleBlocks( block.innerBlocks, reusableBlocks );\n\t\t}\n\t});\n};\n\nconst subscribed = subscribe( () => {\n\tstyle = '';\n\tconst { getBlocks } = select( 'core/block-editor' ) || select( 'core/editor' );\n\tconst blocks = getBlocks();\n\tconst reusableBlocks = select( 'core' ).getEntityRecords( 'postType', 'wp_block' );\n\tcycleBlocks( blocks, reusableBlocks );\n\taddStyle( style );\n});\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./editor.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./editor.scss\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./editor.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.5 19.8v-.2V10c0-.2.1-.2.2-.3 1.7-.7 3.5-1.4 5.2-2.2 1.3-.5 2.6-1.1 3.8-1.6.3-.1.3-.1.3.2v9.1c0 .1 0 .2-.2.3-.9.4-1.9.9-2.8 1.3-.8.4-1.7.8-2.5 1.2-1 .5-1.9.9-2.9 1.4-.3.1-.7.2-1.1.4zm1-5.4v3.7c0 .2 0 .2.2.1 2.4-1.1 4.7-2.2 7.1-3.4.1-.1.2-.1.2-.3V7.4c0-.2 0-.2-.2-.1-2.4 1-4.7 2-7.1 3-.1.1-.2.1-.2.2v3.9zM19.4 4.2c-1-.4-2-.9-3-1.3-1.2-.5-2.4-1-3.7-1.6C11.8 1 10.9.6 10 .2c-.1 0-.1-.1-.2 0-.6.3-1.1.5-1.7.7-.7.3-1.4.7-2.1 1-.7.3-1.5.6-2.2 1-.7.3-1.3.6-2 .9-.6.1-1.1.3-1.7.6.2.1.4.2.6.2 1.9.8 3.8 1.6 5.7 2.5 1.1.4 2.2.9 3.2 1.4.1.1.2.1.4 0 .4-.2.8-.3 1.1-.5 1.5-.6 3-1.3 4.5-1.9 1.1-.5 2.2-.9 3.4-1.4.2-.1.5-.2.7-.3-.1-.1-.2-.1-.3-.2zm-5.9-.8h-1.1c-.1 0-.2 0-.2.2 0 .5 0 .5.5.5h.7c.1 0 .1 0 .1.1v.5c0 .1 0 .1-.1.1h-1c-.1 0-.2 0-.2.2v1c0 .1 0 .1-.1.1h-.6c-.1 0-.1 0-.1-.1v-.5c-.3.3-.5.4-.8.5-.3 0-.6 0-.9-.1 0 0-.1-.1-.2 0h-.1c-.2.1-.4.1-.6.1-.1 0-.2 0-.2-.1-.2-.4-.2-.4-.6-.4h-.6c-.1 0-.1 0-.2.1-.1.4-.1.4-.5.4h-.3c-.1 0-.2 0-.1-.1.3-.7.6-1.4.9-2.2.1-.3.3-.6.4-1 0-.1.1-.1.2-.1.4 0 .4 0 .6.4.1.2.2.5.3.7.3-.6.7-.9 1.3-1 .6-.1 1.1.1 1.6.5v-.4c0-.1 0-.1.1-.1h1.9c.1 0 .1 0 .1.1v.5c0 .1-.1.1-.2.1zM9.5 10c0-.1 0-.2-.1-.2-.3-.1-.5-.2-.7-.3-2.4-1-4.7-2-7.1-3-.5-.2-1-.4-1.6-.7v9.4c0 .1 0 .2.1.2.2.1.3.1.5.2L3 16.8c1.3.6 2.5 1.2 3.8 1.8.8.4 1.7.8 2.5 1.2.2.1.2.1.2-.1v-7V10zm-1.2 8.2c-2.4-1.1-4.8-2.3-7.2-3.4-.1 0-.1 0-.1-.1V7.5c0-.1 0-.2.2-.1l7.2 3c.1 0 .1.1.1.2v7.6c0 .1 0 .1-.2 0z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.4 4.3c0 .1 0 .1 0 0 0 .2 0 .3-.2.3-.1 0-.2 0-.2.2-.2.4-.6.6-1 .5-.5-.2-.8-.5-.8-1 0-.4.3-.8.7-.9.4-.1.8.1 1 .5 0 .1.1.1.2.1.3.1.3.1.3.3zM7.8 4c.1 0 .1 0 0 0 .2.3.3.5.3.7h-.6c.2-.2.3-.5.3-.7zM7.6 15.5v.1c.1.2.1.3-.1.5v.1c.1.1.1.2.1.4v.1h-.1c-.1-.1-.3-.2-.3-.3v-.2c.1.1.1.3.3.3 0-.1-.1-.3-.3-.4 0 0-.1 0-.1-.1-.1-.1-.2 0-.2.1 0 .2.1.3.4.4.1 0 .1 0 .1.1v.1c.1 0 .2.1.2.1s.1.1 0 .1h-.1c-.4-.2-.8-.4-1.3-.6l-.1-.1c0-.3-.2-.5-.4-.6-.1-.1-.3-.1-.4 0l-.1.1h.1c.4.1.7.2.7.5v.1s-.1 0-.1-.1c-.1-.2-.2-.3-.4-.3 0 .1 0 .1.1.1h.1v.1h-.1c-.2-.1-.3-.1-.5-.2-.1-.1-.1-.1 0-.2l.1-.1c-.1 0-.2-.1-.3 0l-.1.1c-.1.2-.2.1-.2 0-.2-.4-.2-.4-.4-.5 0 .1.1.2.1.3 0 .1 0 .1-.1.1s-.1 0-.2-.1c-.1 0-.2 0-.1-.2s-.2-.3-.3-.3c0 0-.1.1-.1 0v-.1c0-.1 0-.1.1-.1.2 0 .3.1.4.2 0 .1.1.1.1.2h.1v-.1c-.1-.3-.4-.5-.7-.5-.1 0-.2 0-.2.2 0 .1 0 .1-.1.1-.4-.2-.9-.4-1.3-.6 0 0-.1 0-.1-.1s.1 0 .1 0c.1 0 .2.2.2 0 0 0 .1 0 .1.1.1.1.1.1.2 0 .1 0 .1-.1.1-.2-.1-.2-.2-.3-.5-.4-.1 0-.1 0-.2.1v.1H2s0-.1.1-.1v.1c0 .1-.1.1-.2.1h-.3c-.1 0-.1-.3 0-.3.1-.1.1-.2 0-.3-.1-.1-.1-.3-.1-.4 0-.1 0-.1.1-.1s0 .1 0 .1c-.1.2 0 .4.2.6.1.1.2.1.3.2.1.1.2.2.2.4 0 .1 0 .1.1.1.1.1.2.2.2.4 0 .1.1.1.1 0 .1-.2.3-.2.5-.2 0-.1 0-.1-.1-.1-.5-.5-.9-1.1-1.2-1.7-.2-.5-.3-1-.2-1.6 0-.1.1-.2.1-.3 0-.1 0-.2-.1-.2-.2-.1-.3-.3-.4-.5V10c.1-.3 0-.6.1-1 0-.1 0-.1.1-.1.5.1.5.2.5.3v.6c0 .1.1.2.2.2s.2.1.3 0v-.1c0-.1-.1-.2-.2-.2s-.1 0-.1-.1c.2 0 .5.2.4.4 0 .1-.2.2-.3.1 0 0-.1-.1-.1 0-.1 0-.2-.1-.2 0v.3l.1.1c.2.2.2.2.4 0l.1-.1c.3-.3.3-.4.1-.8 0-.1-.1-.2-.2-.4.1 0 .1.1.2.1.1.3.3.5.6.6.1.1.2.1.3 0-.1-.1-.2-.1-.4-.2s-.4-.3-.4-.5H3c0 .1.2.2.3.4.1-.1.1-.2.1-.2.1 0 .1-.1.2 0s0 .1 0 .1c-.1.1-.1.3 0 .4.1.1.2.1.4 0 .2-.2.4-.2.6 0 .1.1.2.2.4.2s.4.2.5.4c.1.1.1.2.2.3 0 .1.1.2.2.2 0 0 .1 0 .2-.1s0-.2-.1-.2v-.1s.1 0 .1.1.1.1.1.2c0 .2.1.2.2.1h.2c.1 0 .2.1.1.2 0 .1-.1.1-.2.1s-.2-.1-.4-.1c-.1 0-.1-.1-.2 0 0 .1 0 .1.1.1.2.2.4.2.7.1.1 0 .1-.1.2 0 0 .1 0 .1-.1.1-.2.2-.2.5-.1.8l.3.6c.1 0 .2.1.4.1.1 0 .2 0 .2-.2 0-.1 0-.2-.1-.2-.1.1.1.2-.1.3-.1 0-.2 0-.2-.1s-.1-.2 0-.2c.1-.1.1.1.3.1 0-.1-.2-.2-.3-.2-.2-.2-.3-.3-.3-.5s.1-.2.3-.2c.1 0 .1.1.2.1v.1h-.1c-.1 0-.2-.2-.2 0-.1.1 0 .2.1.3.1.1.2.1.3.2.1.1.1 0 .1-.1v-.6-.1c.1 0 .1.1.1.1V13c0 .1-.2.2-.3.2 0 0-.1-.1-.1 0v.1c.2.4.2.8.1 1.2-.1.6-.4 1.1-1.1 1.2-.1 0-.2.1-.4 0 .3.2.5.4.6.7 0 .1.1.1.1 0s.1-.2.2-.1c.1 0 .1 0 .1-.1.1-.2.2-.2.3-.1.2.1.4.1.5-.1.1-.1 0-.2-.1-.3-.1-.2-.1-.2 0-.2zm-3.9-4.4c-.1-.1-.1 0-.2 0-.2.2-.4.4-.3.7.2-.1.4-.2.5-.3.1 0 .1-.1.1 0s0 .1-.1.1c-.1.1-.3.1-.4.2-.1.2-.2.2-.1.4 0 0 0 .1.1.1.5.7.9 1.4 1.4 2 .1.1.2.1.3.1.5-.2.9-.5 1.4-.7.1-.1.1-.1 0-.2-.2-.3-.4-.5-.6-.8 0 0-.1 0 0-.1h.1c0 .1.1.3.2.4.1.1.2.3.3.4 0-.5-.2-.8-.4-1.2h.1c.2.4.4.8.5 1.3v.1c.1 0 .1-.1.2-.1s0-.1 0-.1c-.1-.2-.1-.4-.2-.5-.1-.2-.2-.5-.4-.7-.1-.2-.1-.2-.2-.1s-.2.1-.3.2c0 0-.1.1-.1 0v-.1l.2-.2c.2-.1.2-.2.1-.4l-.6-.6c-.1-.1-.2-.2-.4-.1h-.1c.2.1.4.3.6.4.3.2.4.4.4.5-.3-.2-.5-.5-.9-.7.2.2.3.4.4.6 0 0 .1.1 0 .1h-.1c-.1-.2-.3-.4-.4-.6-.1-.1-.1-.1-.2-.1-.1.1-.2.1-.3.2 0 0-.1.1-.1 0s0-.1.1-.1c.1-.1.3-.1.4-.2-.1 0-.1 0-.2-.1-.2 0-.4-.1-.7-.1-.1.2-.1.2-.1.3zm2.8 2.7c-.5.2-1 .5-1.5.7 0 0-.1 0 0 0 0 0 0 .1.1.1.3.1.6.1.9-.1.2-.1.5-.3.5-.7zm-3.4-1.5c0 .2 0 .4.1.5.2.6.6 1.1 1.2 1.5h.1v-.1c-.2-.2-.3-.4-.5-.6-.3-.4-.6-.9-.9-1.3zm-.2-2.4c.1.3-.1.4-.2.6-.2.2-.3.5-.4.7 0 .2.1.2.2.2s.1-.1.1-.2c.1-.3.2-.5.4-.7.1-.1.1-.2.1-.3 0 0-.1-.1-.2-.3zm4.3 3.8c0-.4-.1-.7-.3-1.1-.1-.3-.4-.6-.3-1-.3.1-.3.2-.2.5.2.3.4.7.4 1.1.1.3.2.5.4.5zM3 9.9c0 .1.1.1.1.2.1.2.3.3.5.3h.7c.1 0 .2 0 .2-.1s-.1-.1-.2-.1c-.2-.1-.4-.1-.6-.1-.2 0-.4 0-.7-.2zm3.6 3.8c-.1.4-.1.7-.4.9-.1 0-.2.1-.2.1 0 .1.2.1.2.1.1 0 .1.1.2 0 .2-.1.3-.3.3-.5 0-.1.1-.2.1-.3 0 0-.1-.1-.2-.3zM3 12c-.1 0-.1.1-.2.1s-.1.1-.1.1c.1.3.2.7.4 1 .1.2.3.3.5.4-.4-.5-.6-1-.6-1.6zm3.5-.5c-.2-.1-.4-.1-.6-.3-.2-.3-.5-.5-.8-.7 0 0-.1-.1-.1 0v.1c.1.2.2.2.3.3.2.2.5.4.7.6.2.3.3.2.5 0zm-1.7 3.3c0 .2.1.3.2.2h.2c.5 0 .9.1 1.3.4h.2c.1-.1 0-.1-.1-.1-.2-.2-.5-.3-.8-.3-.3-.1-.5 0-.8-.1-.1-.2-.2-.2-.2-.1zm-1.9-1.4c0 .2.2.2.3.3.5.2.8.5 1.2.9.1.1.2.3.3.4 0-.4 0-.4-.2-.5-.2-.1-.4-.3-.6-.5-.2-.2-.5-.4-.8-.5-.1-.1-.1-.1-.2-.1zm.1-.1c-.2-.4-.3-.7-.4-1.1 0-.1-.1-.2-.2-.3h-.1c0 .1 0 .2.1.3 0 .3.2.6.3.9.1.2.2.2.3.2zm4.2 1c.1-.1-.1-.1-.2-.2-.1 0-.1.1-.1.1-.1.2-.2.5-.3.6-.1.2-.1.2 0 .2s.2.2.2.1c.2-.2.4-.5.4-.8zm-2.6-3.4c-.1-.1-.1-.3-.3-.3-.2-.1-.5-.1-.7-.1 0 0-.1 0-.1.1v.3c0 .1.1.1.2 0 .2-.1.4-.1.5 0h.4zm-1.7 1c0-.1.1-.1.1-.2 0-.3.2-.5.4-.7.1 0 .1-.1.1-.1 0-.1-.3-.2-.4-.1-.2.1-.3.3-.4.6 0 .1-.1.2 0 .3.1 0 .2.1.2.2zm2.6 3.3c.2 0 .5.1.7.2.1 0 .2.1.2 0s-.1-.1-.1-.1h-.1c-.4-.2-.8-.3-1.2-.1 0-.1 0 0 0 0s0 .1.1 0h.4zm-2.4-1.4c0 .1.1.2.2.3.5.2.8.5 1.1.9 0 0 0 .1.1.1V15c-.3-.6-.8-1-1.4-1.2zm1.8-3.1v-.4c0-.1-.1-.1-.1-.1h-.1c-.1.2-.1.3 0 .5 0 .1.1.1.2.1s0 0 0-.1zm.3 4.7c.3.1.6.2.9.1-.3-.2-.6-.2-.9-.1zm-2.4-3.6c0-.1-.2-.3-.4-.3l-.1.1.3.3c.2.1.2.1.2-.1zM7.1 14h.1v-.1c-.1-.1-.1-.2-.2-.2h-.2v.2s.1.1.3.1zm-3.6.3c.1.2.6.6.8.6-.1-.2-.6-.6-.8-.6zm1.2.8c-.1 0-.1.1-.1.2s.1.3.2.3c0 0 .1-.1.1-.2 0-.2-.1-.3-.2-.3zM4.1 10c.1 0 .3.1.4.1h.1V10c-.2-.2-.4-.2-.5 0zm1.3.6c0-.2-.2-.4-.4-.4h-.1v.1c.2.1.3.2.5.3z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 11.8c-.1 0-.1-.1-.1-.2v-.8-.1H2c0 .1.2.1.2.2-.2-.1-.2 0-.2.2v.7zM7.7 13.9v.5s0 .1-.1.1 0 0 0-.1v-.7c0-.1 0-.2-.1-.3l-.1-.1c0-.1.1 0 .1 0 .2 0 .2.1.2.3v.3zM2.2 10.2c.1 0 .2.1.2.2s0 .1-.1.1-.2-.1-.2-.2c-.1-.1 0-.1.1-.1zM7.2 11.4c.1 0 .3.3.2.4 0 0 0 .1-.1 0 0 0-.1-.1-.1-.4 0 .1 0 0 0 0zM6 10.7c0 .1.1.1 0 .2h-.2c-.1-.1-.1-.1-.1-.2s.1-.1.2-.1l.1.1zM2.9 9.2c-.1-.1-.2-.2-.4-.3 0 0-.1 0 0-.1h.1c.2.2.4.3.6.4v.1c-.1 0-.2-.1-.3-.1zM2.1 9.2c0-.1.1-.2.1-.2.1 0 .2.1.2.2s-.1.1-.2.1c-.1.1-.1 0-.1-.1zM7.1 11.1c-.1 0-.2-.1-.3-.1-.1-.1-.3-.1-.4-.2 0 0-.1 0 0-.1h.1c.1.1.3.2.6.4 0-.1 0-.1 0 0zM7.7 11.4v.1c-.1 0-.1-.1-.1-.1 0-.1-.2-.2-.3-.2 0 0-.1 0-.1-.1s.1 0 .1 0c.1.1.2.1.2.1l.2.2zM3.9 9.8s0 .1 0 0c-.2.1-.3 0-.3-.1s0-.1.1-.1.2 0 .2.2zM2.4 8.8c-.1 0-.2 0-.2-.1-.1 0-.2 0-.2.1h-.1v-.1-.2c.1-.1.1 0 .1 0 .2.2.3.2.4.3zM7.4 15.7c-.2 0-.3-.1-.4-.1v-.1h.1c.1 0 .2.1.3.2zM7.6 15.5c-.1-.1-.2-.1-.3-.2 0 0-.1 0 0-.1 0-.1.1 0 .1 0 .1 0 .2.1.3.1-.1.1 0 .2-.1.2zM2.2 13.1c.1.1.2.1.3.2 0 0 .1 0 0 .1h-.1s-.2-.1-.2-.3c-.1.1-.1.1 0 0-.1.1-.1.1 0 0zM2.3 12.9c0 .1 0 .1 0 0-.2 0-.3-.1-.4-.1v-.1c.2.1.3.1.4.2zM14.1 16.3c-.6 0-1-.1-1.5-.5-.3-.3-.5-.6-.6-.9 0-.3-.1-.6 0-.9 0-.6.2-1.1.4-1.6s.5-.9.8-1.3c.4-.4.8-.8 1.3-1.1.4-.3.9-.5 1.3-.6.9-.2 1.7-.1 2.3.7.2.3.3.6.4 1v.5c0 .7-.2 1.4-.5 2-.3.7-.8 1.3-1.4 1.8-.5.5-1.2.8-1.9 1-.2-.1-.4-.1-.6-.1zm4.3-4.9c0-.5-.2-1.1-.8-1.5-.4-.3-.9-.4-1.3-.4-.3 0-.6.1-.8.2-.5.2-.9.4-1.3.7-.4.3-.8.7-1.1 1.1-.4.5-.6 1-.8 1.6-.1.5-.2 1.1 0 1.6.3.9.9 1.3 1.7 1.4.4.1.7 0 1.1-.1.7-.2 1.2-.6 1.7-1 .4-.4.8-.8 1.1-1.3.2-.7.5-1.3.5-2.3zM4.5 12.7c0 .2 0 .4.2.6.1.1.2.1.3.1.1-.1.1-.2.1-.3-.1-.1-.1-.2-.2-.1 0 0-.1.1-.1 0v-.1l.1-.1c.2.2.3.2.5.1h.1v.1s-.1.1-.2.1-.1 0-.1.1 0 .3-.2.3-.3-.1-.4-.2c-.3-.2-.3-.5-.3-.8v-.1c0-.3.2-.4.5-.2.2.1.3.2.4.4v.1h-.1c-.1-.1-.1-.2-.2-.3-.1-.1-.2-.2-.4-.1-.1 0-.1.2-.1.3.1 0 .1.1.1.1zM6.6 13.3c-.1-.4-.2-.8-.5-1.1.3.1.6.8.5 1.1zM3.7 11.1c.1.1.2.3.3.5-.2-.2-.3-.3-.3-.5zM2.8 11.4c.1-.2.2-.4.4-.6h.1v.1c-.2.2-.3.4-.3.6h-.1c-.1 0 0 0-.1-.1z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13 12.2c.1-.3.3-.5.4-.7.3-.4.6-.7.9-.9.4-.3.8-.5 1.2-.6.5-.1.9-.1 1.3 0 0 0 .1 0 .1.1s-.1.1-.1.1c-.4.3-.4.7-.1 1.1.3.3.3.6.2 1-.1.5-.3 1.1-.4 1.6-.1-.1-.1-.2-.2-.4-.2-.5-.4-1.1-.6-1.6-.1-.1-.1-.3-.2-.4-.1-.1 0-.1.1-.2s.2-.1.3-.2c0 0 .1-.1 0-.1 0-.1-.1 0-.1 0-.3.2-.7.3-1 .4-.1 0-.3.1-.4.1-.1 0-.1.1-.1.2s.1.1.2 0c.2-.1.3 0 .3.2l.3.6c.1.1 0 .3 0 .4-.1.2-.1.5-.2.7-.1.3-.2.6-.3 1-.2-.3-.3-.6-.4-.9l-.6-1.5c0-.1 0-.2.1-.2s.2-.1.2-.1v-.1c0-.1-.1 0-.1 0-.2.2-.5.3-.8.4z\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.3 13.1c.3.6.5 1.2.8 1.9v.1c-.4.3-.9.5-1.4.6-.2 0-.2 0-.2-.2.2-.6.4-1.3.6-1.9.1-.1.1-.3.2-.5zM14.1 15.7c-.5-.1-.9-.2-1.1-.6-.4-.5-.5-1-.4-1.6 0-.2.1-.4.1-.7 0 0 0-.1.1-.1l.1.1c.2.4.4.8.5 1.2.2.6.4 1.1.7 1.7zM16.7 14.6c.1-.4.2-.8.4-1.2l.6-1.8c.1-.3.2-.6.1-.9.2.2.2.4.3.6.1.5 0 1.1-.1 1.6-.1.4-.4.8-.6 1.2-.4.1-.5.3-.7.5z\"\n});\n\nvar SvgAcfBlocks = function SvgAcfBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5);\n};\n\nexport default SvgAcfBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.4 9l.8 2.1H3.7c0-.2.3-.8.4-1.1l.3-1s0 .1 0 0zm8.7.3h1v1.5h-1c-.1.5-.5 1-1 1.3-1.6 1.1-3.9.1-4-2.1 0-1.3 1-2.3 2.1-2.5 1.3-.2 2.6.6 2.9 1.8zM0 14.5h2.3l.5-1.3c0-.1 0 0 .1-.1H6c0 .2.5 1.2.5 1.3h2.4l-.1-.3c.7.2 1.2.4 2.1.4 1 0 2-.5 2.6-1l.3-.3.3-.3v1.6h2.2v-1.7-1.7h3.5v-2h-3.5v-.8-.8H20V5.4h-5.9V7c-.4-.4-.3-.4-.8-.7-1-.7-2.4-1-3.6-.7-.9.2-1.6.6-2.2 1.2l-.2.2c-.3.2-.7.9-.8 1.3l-.1.1c-.1-.3-.8-1.8-.9-2.3-.1-.2-.2-.5-.3-.7H3.6L0 14.5z\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n});\n\nvar SvgAdvancedCustomFields = function SvgAdvancedCustomFields(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgAdvancedCustomFields;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 2h5v11H2V2zm6 0h5v5H8V2zm6 0h4v16h-4V2zM8 8h5v5H8V8zm-6 6h11v4H2v-4z\"\n});\n\nvar SvgAdvancedGutenbergBlocks = function SvgAdvancedGutenbergBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgAdvancedGutenbergBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.3 13.9h1.3l.7-1.9h3.3l.7 1.9h1.3l-3-7.8H9.3l-3 7.8zM10 7.8l1.2 3H8.8l1.2-3z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"atomic-blocks_svg__st0\",\n d: \"M18.9 5.7c.4-.5.6-1.2.6-1.9 0-1.9-1.5-3.4-3.3-3.4-.7 0-1.4.2-1.9.6-1.3-.6-2.7-1-4.2-1C4.6 0 .2 4.4.2 9.9s4.4 9.9 9.9 9.9S20 15.4 20 9.9c-.1-1.4-.5-2.9-1.1-4.2zM15.1 2h1.1c.5 0 1.1.3 1.1.9 0 .4-.3.6-.3.6s.5.2.5.8c0 .6-.5 1-1.1 1h-1.2V2zM10 18.2c-4.5 0-8.2-3.7-8.2-8.2 0-4.5 3.7-8.2 8.2-8.2 1.1 0 2.2.2 3.1.6-.2.4-.3.9-.3 1.4 0 1.9 1.5 3.4 3.3 3.4.5 0 1-.1 1.4-.3.4 1 .6 2 .6 3.1.1 4.5-3.6 8.2-8.1 8.2z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"atomic-blocks_svg__st0\",\n d: \"M16.7 3c0-.3-.2-.4-.5-.4h-.5v.8h.5c.3 0 .5-.1.5-.4zM16.8 4.4c0-.3-.2-.4-.5-.4h-.6v.9h.6c.3-.1.5-.2.5-.5z\"\n});\n\nvar SvgAtomicBlocks = function SvgAtomicBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3);\n};\n\nexport default SvgAtomicBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.8 19.5c-.6.1-.8-.4-1-.8-1.5-1.8-3-3.6-4.5-5.3-.4-.5-.8-.9-1.2-1.4-.1-.2-.1-.4-.1-.6.3-1 .7-2 1.1-3 .7-2 1.5-3.9 2.2-5.9.1-.3.2-.4.5-.5 3-.5 5.9-1.1 8.9-1.5.6-.1 1 0 1.4.5 1 1.3 2 2.5 3 3.7.9 1.1 1.8 2.1 2.7 3.2.2.2.3.4.2.7-.5 1.3-.9 2.5-1.4 3.8-.6 1.7-1.2 3.3-1.9 5-.1.3-.2.4-.5.4-2.7.4-5.3.9-8 1.4-.5.1-.9.2-1.4.3zm-2.5-3.4h.9c2.4-.3 4.7-.5 7.1-.8.4 0 .5-.2.6-.6.4-2.1 1.3-4.1 2.7-5.7.2-.2.2-.3 0-.5-.9-1.1-1.9-2.2-2.8-3.4-.2-.2-.3-.2-.6-.1-1.9 1.1-4 1.6-6.2 1.6-.3 0-.5.1-.5.4-.5 1.8-1 3.5-1.6 5.3-.2.8-.5 1.6-.7 2.4 1.1-.8 2.1-1.7 3.1-2.5.5-.4.8-.9.8-1.5 0-.3.1-.6.2-.9.7-1.2 2.3-1 3.1-.4.2.2 0 .2-.1.3-.4.1-.9.3-1.3.4-.3.1-.4.3-.4.6s.1.6.3.8c.2.2.3.3.6.2.4-.2.9-.3 1.3-.4.1 0 .2-.1.3 0 .1.1 0 .2 0 .3-.4 1-1.4 1.7-2.5 1.5-.5-.1-.9 0-1.2.4-.2.2-.4.3-.6.5-.9.6-1.7 1.4-2.5 2.1zm14.5-8.6c-.1-.1-.2-.2-.2-.3-.5-.6-1.1-1.3-1.6-1.9-.8-.9-1.6-1.9-2.4-2.8-.1-.1-.2-.3-.4-.1-.4.4-.9.7-1.3 1.1-.1.1-.1.2 0 .3 1.4 1.6 2.7 3.3 4.1 4.9.1.2.2.2.4 0 .4-.4.8-.7 1.3-1.1-.1 0 0-.1.1-.1z\"\n});\n\nvar SvgBlockOptions = function SvgBlockOptions(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgBlockOptions;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"style\", null, \".block-slider_svg__st0{fill:#6171b5}\");\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"block-slider_svg__st0\",\n d: \"M2.9 16.2c0-1.2.2-2.3.4-3.5 0-.2.1-.5.3-.7.2-.3.5-.6.9-.6.3 0 .3.5.3.7.6 1.7 1.4 3.2 2.7 4.5.4.4.8.7 1.2.9.2.2.5.2.3.5-.1.3-.1.8-.6.8-1.8 0-3.5-.3-5.2-1-.3-.1-.4-.3-.3-.6v-1zM17 3.8c0 1.3-.2 2.6-.5 4-.1.6-.4.8-.9.9-.4.1-.6.1-.6-.4-.2-2-1-3.8-2.4-5.3l-.3-.3c-.2-.2-.7-.3-.5-.7.2-.4.5-.7 1-.7.4 0 .7 0 1.1.1.9.2 1.7.5 2.5.7.4.1.7.4.6.9v.8z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.1 11.4c-1-1.5-2.3-2.7-3.6-4-1-.9-1.8-2-2.3-3.3-.5-1.4-.6-2.8.8-4.1-2.1 0-3.9.6-5.4 1.8-2.4 2-3 4.9-1.3 7.5.5.8 1.1 1.6 1.8 2.4 1.3 1.4 2.5 2.7 3.5 4.3.8 1.2 1.3 2.5.5 4 1.7 0 3.2-.5 4.6-1.4 2.1-1.5 3.5-4.2 1.4-7.2zm-2.7 7c-.2 0-.4-.1-.4-.3 0-.2.2-.3.4-.3s.3.1.3.3c0 .2-.1.3-.3.3zm1-.6c-.2 0-.3-.2-.3-.4s.1-.3.3-.3c.2 0 .3.1.3.3 0 .2-.1.4-.3.4zm.7-.9c-.2 0-.3-.2-.3-.4s.2-.3.4-.3.3.2.3.3c-.1.3-.2.4-.4.4z\",\n fill: \"#1b214c\"\n});\n\nvar SvgBlockSlider = function SvgBlockSlider(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"block-slider_svg__Layer_1\",\n viewBox: \"0 0 20 20\",\n xmlSpace: \"preserve\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3);\n};\n\nexport default SvgBlockSlider;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.64.986l8.602-.002c1.626 0 2.217.17 2.813.489a3.342 3.342 0 011.387 1.382c.32.596.493 1.187.5 2.818l.042 8.62c.008 1.63-.158 2.222-.474 2.818a3.297 3.297 0 01-1.373 1.383c-.593.319-1.182.489-2.809.489l-8.6.001c-1.627 0-2.218-.169-2.814-.488a3.342 3.342 0 01-1.387-1.382c-.32-.596-.493-1.187-.5-2.818l-.042-8.62c-.008-1.63.158-2.222.474-2.818a3.297 3.297 0 011.373-1.383C3.425 1.156 4.014.986 5.64.986zm-.656 2.998a1 1 0 00-1 1v10a1 1 0 001 1h3a1 1 0 001-1v-10a1 1 0 00-1-1zm7 7a1 1 0 00-1 1v3a1 1 0 001 1h3a1 1 0 001-1v-3a1 1 0 00-1-1zm0-7a1 1 0 00-1 1v3a1 1 0 001 1h3a1 1 0 001-1v-3a1 1 0 00-1-1z\"\n});\n\nvar SvgCoblocks = function SvgCoblocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgCoblocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.264 39.566L38.219 5.16l16.519 53.558-38.079 38.281zM69.376 112.381l35.607-35.607-46.088-13.51-38.006 38.006zM106.68 70.824L61.239 57.415 43.697 2.22 72.022 8.8l4.6 13.991 16.77 3.792 13.288 44.241zM64.633 53.949l35.664 10.522-10.291-34.264-16.699-3.775-4.604-13.999-18.641-4.337 14.571 45.853z\"\n});\n\nvar SvgCreativeBlocks = function SvgCreativeBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgCreativeBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.4 0c1.1.1 1.9.5 2.3 1.5.5 1 .3 2-.5 2.8-1.6 1.7-7.5 7.6-8.9 8.9-.6.6-.7 1.5-1.1 2.2-.4.9-.8 1.9-1.1 2.9-.1.8-1.3.7-1.3.7l-5.4.7c-.4.1-.9.5-1.3.1-.3-.3.1-1.2.1-1.2l1-6.5s.3-.3.5-.4c1.5-.6 2.9-1.1 4.4-1.7.2 0 .4-.2.5-.3L15.4.9c.6-.5 1.2-.9 2-.9zM1.3 19c.5.1.8.1 1.1 0 1.3-.3 2.6-.4 3.9-.6 1 0 1.5-.4 1.8-1.4.7-2.2 1.4-4.4 3.4-5.8.3-.2.3-.5 0-.8-.5-.4-.9-.9-1.3-1.3-1.1-1-1.1-1-2.2.1-.5.5-.9 1.1-1.6 1.4-1.3.5-2.7 1.1-4.1 1.6-.5.2-.6.4-.7.8-.3 1.7-.5 3.3-.8 5 0 .2-.1.4.1.7 1-1 2-2 3-3.1.2-.2.2-.5.2-.7-.1-.7.4-1.3 1.1-1.3.6 0 1.2.6 1.2 1.2s-.6 1.1-1.2 1c-.3 0-.5 0-.8.2-1 .9-2 1.9-3.1 3zM17.4.8c-.6 0-1 .1-1.4.5-2 2-4 4.1-6.1 6.1-.3.2-.2.4 0 .6l2.1 2.1c.3.3.4.2.7 0l1.9-1.9L18.8 4c.5-.5.7-1.6.4-2.2-.4-.7-1-1.1-1.8-1z\"\n});\n\nvar SvgEditorplus = function SvgEditorplus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgEditorplus;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1.04 4.76L9.2 7.44v11.68l-8.12-2.76m10.16 2.8l8.2-2.8V4.84L11.28 7.4m-1.04-1.36l7.52-2.44-7.52-2.28L2.52 3.6\"\n});\n\nvar SvgElegantBlocks = function SvgElegantBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgElegantBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 210.86,\n cy: 44.87,\n r: 12.79\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M100.85 0A100.85 100.85 0 000 100.85V256h155.15A100.85 100.85 0 00256 155.15V0zm-59 149.49l-8.29 8.28a4.83 4.83 0 11-6.83-6.83l8.28-8.28a4.83 4.83 0 116.84 6.83zm34.86 53.16a9.31 9.31 0 010-13.13l10.69-10.69A9.28 9.28 0 01100.57 192l-10.69 10.65a9.31 9.31 0 01-13.13 0zm35.92 18.92l-7.41 7.43a5.75 5.75 0 01-8.13-8.13l7.45-7.45a5.75 5.75 0 018.13 8.13zM123.24 211a4.84 4.84 0 01-6.83 0l-1.23-1.24a4.81 4.81 0 010-6.8l31.07-31.48a8.4 8.4 0 000-11.88l-.89-.89a8.4 8.4 0 00-11.88 0l-16.94 16.94a8.41 8.41 0 01-11.89 0l-1.06-1.06a8.41 8.41 0 010-11.89l15.08-15.08a8.4 8.4 0 000-11.88l-.89-.89a8.41 8.41 0 00-11.89 0L90.8 149.93a8.42 8.42 0 01-13-1.35 8.61 8.61 0 011.33-10.76l16.71-16.71a8.41 8.41 0 000-11.89l-.88-.88a8.4 8.4 0 00-11.89 0L51.8 139.56a4.83 4.83 0 01-6.8-6.83l50.13-50.15 78.26 78.27zm52.54-52.54L97.52 80.19l3.28-3.28 78.27 78.26zm48.34-95.19a22.15 22.15 0 01-11.47 6.1 28.49 28.49 0 00-8.17 2.82 65.85 65.85 0 00-10.35 7.18c-10.3 11.06-12.26 20-12.25 26 0 16 14.07 26.16 9.68 37.63-1.91 5-6.41 7.87-9.38 9.38L143 113.18l-39.28-39.24c1.51-3 4.39-7.47 9.38-9.38 11.47-4.39 21.58 9.68 37.63 9.68 6 0 15-1.95 26-12.25a75.27 75.27 0 005.62-7.69 31.65 31.65 0 004.17-11 22.25 22.25 0 1137.58 19.94z\"\n});\n\nvar SvgEnhancedBlocks = function SvgEnhancedBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 256 256\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgEnhancedBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n filterUnits: \"objectBoundingBox\",\n id: \"essential-blocks_svg__a\"\n}, /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 15,\n in: \"SourceAlpha\",\n result: \"shadowOffsetOuter1\"\n}), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 11,\n in: \"shadowOffsetOuter1\",\n result: \"shadowBlurOuter1\"\n}), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\",\n in: \"shadowBlurOuter1\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.028 96h103.944l.497.216h.373c6.217 0 11.273 2.774 15.169 8.322 1.326 2.305 1.989 4.683 1.989 7.133 0 5.98-3.398 10.59-10.195 13.833-2.321.937-4.642 1.405-6.963 1.405H133.909c-4.973 0-9.366-1.981-13.179-5.944-2.487-2.882-3.73-5.836-3.73-8.862v-1.297c0-4.755 2.735-8.826 8.206-12.212 2.984-1.585 5.927-2.378 8.828-2.378h.497l.497-.216zm1.242 77.273l58.078.21c3.862 0 7.995 1.544 12.397 4.632 3.503 3.158 5.255 6.596 5.255 10.316 0 5.193-3.1 9.438-9.298 12.736-3.054 1.404-6.019 2.106-8.893 2.106h-58.752c-5.75 0-10.735-2.246-14.958-6.737-2.066-2.526-3.099-5.053-3.099-7.58v-1.262c0-4.772 3.19-8.877 9.567-12.316 3.234-1.263 6.289-1.895 9.163-1.895h.27c.18 0 .27-.07.27-.21zM241.632 173h.736c5.685 0 10.14 2.968 13.369 8.905.842 2.12 1.263 4.17 1.263 6.148 0 5.936-2.912 10.495-8.737 13.675-2.105.848-3.965 1.272-5.579 1.272h-1.473c-4.772 0-8.843-2.509-12.211-7.527-1.333-2.544-2-5.052-2-7.526 0-5.795 2.877-10.318 8.632-13.569 2.175-.919 4.175-1.378 6-1.378zm-106.604 75.727h103.944c0 .142 1.284.318 3.854.53 4.31.919 7.584 2.58 9.822 4.983 2.901 2.897 4.352 6.219 4.352 9.964 0 5.725-3.398 10.248-10.195 13.57-2.073.635-3.482.953-4.228.953H131.423c-2.901 0-6.383-1.66-10.444-4.982-2.653-3.039-3.979-6.113-3.979-9.223v-.954c0-5.23 3.108-9.505 9.325-12.827 1.824-.918 4.642-1.554 8.455-1.908 0-.07.083-.106.248-.106z\",\n id: \"essential-blocks_svg__b\"\n}));\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n fill: \"#FFF\",\n cx: 187,\n cy: 187,\n r: 187\n}), /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#000\",\n filter: \"url(#essential-blocks_svg__a)\",\n xlinkHref: \"#essential-blocks_svg__b\"\n}), /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#23282D\",\n xlinkHref: \"#essential-blocks_svg__b\"\n}));\n\nvar SvgEssentialBlocks = function SvgEssentialBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgEssentialBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"style\", null, \".forms-gutenberg_svg__st5{opacity:.1}.forms-gutenberg_svg__st6{opacity:.16}.forms-gutenberg_svg__st7{opacity:.6}.forms-gutenberg_svg__st8{fill:#fff}.forms-gutenberg_svg__st9{opacity:.3}\");\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_1_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 23.101,\n y1: 4.596,\n x2: 17.855,\n y2: 19.01,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#4facfe\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#00f2fe\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29 13.1l-1-2.8-5.2 1.9c0 .1.1.3.1.4.1.2.1.5.1.7 0 .1 0 .3.1.4v.8c0 .5.1 1 0 1.6v1c-.1.5-.1 1-.3 1.6h.1c-.1.5-.2 1-.5 1.4-.1.4-.3.8-.4 1.2-.2.4-.3.7-.5 1.1-.1.2-.2.4-.3.5-.1.2-.2.3-.3.5-.2.4-.5.7-.7 1-.1.2-.3.4-.4.5-.1.1-.2.3-.3.4-.1.1-.2.3-.3.4l-.9.9-.4.4c-.3.2-.6.5-.9.7-.1.1-.2.2-.3.2-.2.2-.4.3-.7.5-.1.1-.2.1-.2.2-.2.1-.3.2-.5.3-.2.1-.3.2-.5.3l-.6.3c-.2.1-.3.2-.5.2-.1 0-.1.1-.2.1 0 0-.1 0-.1.1-.1 0-.2.1-.3.1-.2.1-.5.2-.7.3 1.8.3 3.7.4 5.5 0 1.8-.3 3.6-1 5.2-2 2.2-1.3 3.9-3.2 5.1-5.3 1.2-2.1 1.7-4.5 1.5-6.8-.1-1.2-.3-2.1-.7-3.1z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_1_)\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_2_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 20.054,\n y1: 13.455,\n x2: 18.011,\n y2: 19.068,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#00c6fb\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#005bea\"\n}));\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.8 12.2l-6.4 2.3c-.4.1-.8.4-1.1.6-.3.3-.6.6-.8 1-.2.4-.3.8-.4 1.2 0 .4 0 .8.2 1.2.1.4.4.7.6 1 .3.3.6.5 1 .7.4.2.8.2 1.3.2.4 0 .9-.1 1.3-.2l4.4-1.6c.5-2.2.4-4.4-.1-6.4z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_2_)\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_3_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 15.53,\n y1: 4.084,\n x2: 8.873,\n y2: 22.373,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#89f7fe\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#66a6ff\"\n}));\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.5 19.9c-.4.9-1 1.7-1.7 2.4s-1.6 1.2-2.6 1.6c-.4.2-.9.3-1.4.4-.5.1-.9.1-1.4.1-1.4 0-2.7-.4-3.8-1.1-.2-.1-.4-.2-.7-.3-2-1-3.7-2.5-4.9-4.3-1.2-1.8-1.8-3.9-1.9-6v-.2c-1.8 2.9-2.3 6.2-1.5 9.2s2.9 5.6 5.8 7.2c1.2.6 2.5 1.1 3.8 1.3 3.2-1.2 6-3.2 7.9-5.8 1.1-1.5 1.9-2.9 2.4-4.5z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_3_)\"\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_4_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 19.95,\n y1: 23.365,\n x2: 17.904,\n y2: 28.987,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#4facfe\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#00f2fe\"\n}));\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5 1.6l-5.9 2.1c0 .1-.1.2-.1.3-.1.3-.2.5-.2.8-.2.6-.5 1.3-.8 1.9-.1.1-.1.2-.2.4v.1c-.1.2-.2.3-.3.5-.1.2-.2.3-.3.5-.1.1-.2.3-.3.4-.1.1-.1.2-.2.3l-.2.2c-.1.1-.2.2-.2.3l-.1.1c-.1.1-.2.3-.3.4v.1c-.1.1-.2.3-.4.4-.1.1-.2.3-.3.4 0 .1-.1.1-.1.1l-.3.3-.4.4-.3.3c.1-.1.3-.1.4-.2l6.4-2.3 1.2-.6c1.3-.8 2.3-1.9 2.9-3.3.4-1.2.4-2.6 0-3.9z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_4_)\"\n});\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"forms-gutenberg_svg__SVGID_5_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 15.998,\n y1: 11.362,\n x2: 10.556,\n y2: 26.312,\n gradientTransform: \"matrix(1 0 0 -1 0 33)\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#00c6fb\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#005bea\"\n}));\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.6 3.8l-6.8 2.5c-3 1.1-5.6 3.1-7.3 5.7-.1.1-.2.3-.3.4v1.1c0 .2 0 .4.1.6 0 .1 0 .2.1.3 0 .1.1.3.1.4 0 .1.1.2.1.3v.2l.3.9c0 .1.1.1.1.2s0 .1.1.2v.1s0 .1.1.1c0 .1.1.2.2.4 0 0 0 .1.1.1.1.2.1.3.2.5.1.1.1.2.2.3 0 .1.1.1.1.2.2.3.3.5.5.8.1.1.1.2.2.2.3.4.6.8 1 1.2l.3.3c.2.2.5.4.7.6.1.1.2.2.3.2.3.2.6.5.9.7.2.1.3.2.5.3.2.1.3.2.5.3 0 0 .1 0 .1.1.2.1.3.2.5.2-1.1-.7-1.9-1.7-2.4-2.9-.1-.8-.2-1.6-.1-2.5 0-.8.3-1.7.7-2.5.8-1.4 2.1-2.6 3.7-3.3l.3-.3.4-.4.3-.3.1-.1c.1-.1.2-.2.3-.4l.4-.4V10c.1-.1.2-.3.3-.4l.1-.1c.1-.1.2-.2.2-.3L16 9c.1-.1.1-.2.2-.3.1-.1.2-.3.3-.4.1-.2.2-.3.3-.5.1-.2.2-.3.3-.5v-.1c.1-.1.1-.2.2-.4.3-.6.6-1.2.8-1.9.1-.3.2-.5.2-.8.2-.1.3-.2.3-.3z\",\n fill: \"url(#forms-gutenberg_svg__SVGID_5_)\"\n});\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st5\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.2 23.8c-.4.2-.9.3-1.4.4-2 1.7-4.7 3.2-8.4 4.6 1.2.6 2.5 1.1 3.8 1.3 3.2-1.2 6-3.2 7.9-5.8 1-1.4 1.8-2.8 2.3-4.4-.4.9-1 1.7-1.7 2.4s-1.6 1.2-2.5 1.5z\"\n}));\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st6\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.8 12.2l-.6.2c.2 2.3-.3 4.7-1.4 6.9l2-.7c.6-2.2.5-4.4 0-6.4z\"\n}));\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st5\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.2 8.9c-1.1.9-2 1.9-2.8 3.1-.1.1-.2.3-.3.4v1.1c0 .2 0 .4.1.6 0 .1 0 .2.1.3 0 .1.1.3.1.4 0 .1.1.2.1.3v.2l.3.9c0 .1.1.1.1.2s0 .1.1.2v.1s0 .1.1.1c0 .1.1.2.2.4 0 0 0 .1.1.1.1.2.1.3.2.5.1.1.1.2.2.3 0 .1.1.1.1.2.2.3.3.5.5.8.1.1.1.2.2.2.3.4.6.8 1 1.2l.3.3c.2.2.5.4.7.6.1.1.2.2.3.2.3.2.6.5.9.7.2.1.3.2.5.3.2.1.3.2.5.3 0 0 .1 0 .1.1.2.1.3.2.5.2-1.1-.7-1.9-1.7-2.4-2.9C7.4 18 6 14.4 6.9 9.1c.3-.1.3-.2.3-.2z\"\n}));\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st5\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.5 2.4l-3.9 1.4c0 .1-.1.2-.1.3-.1.3-.2.5-.2.8-.2.6-.5 1.3-.8 1.9-.1.1-.1.2-.2.4v.1c-.1.2-.2.3-.3.5-.1.2-.2.3-.3.5-.1.1-.2.3-.3.4-.1.1-.1.2-.2.3-.1 0-.1 0-.2.1s-.2.2-.2.3l-.1.1c-.1.1-.2.3-.3.4v.1c-.1.1-.2.3-.4.4-.1.1-.2.3-.3.4 0 .1-.1.1-.1.1l-.3.3-.4.4-.3.3c.1-.1.3-.1.4-.2l1.7-.6c2.9-2.4 5.2-5.3 6.8-8.5-.1 0-.1-.1 0-.2z\"\n}));\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"forms-gutenberg_svg__st8\",\n d: \"M22.1 21.1c-.8 1.9-2 3.6-3.5 5.1-1.5 1.5-3.3 2.7-5.3 3.6.1 0 .2-.1.5-.2.2-.1.4-.1.6-.2.3-.1.5-.2.8-.3.1-.1.3-.1.4-.2.1-.1.3-.2.4-.3l.9-.6c.3-.2.6-.4.9-.7.3-.3.6-.5.9-.8.3-.3.6-.6.8-.9.3-.3.5-.6.7-.9l.6-.9c.2-.3.3-.5.5-.8.1-.3.2-.5.3-.7.1-.2.1-.4.2-.6.2-.4.2-.6.3-.6z\"\n})));\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"forms-gutenberg_svg__st8\",\n d: \"M18.6 3.8l-.2.4-.5 1-.3.6c-.1.2-.2.5-.4.7L16.3 8c-.3.5-.6 1-.9 1.4-.1.2-.2.4-.4.6-.2.2-.3.4-.4.6-.3.4-.5.7-.7.9-.1.2-.2.3-.2.3 2.4-2.3 4.1-5 4.9-8z\"\n})));\n\nvar _ref18 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st7\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n className: \"forms-gutenberg_svg__st8\",\n d: \"M4.9 16.2c-.4-1.2-.7-2.4-.7-3.6v.6c0 .5 0 1 .1 1.5.1.7.3 1.4.5 2 .1.3.2.7.4 1 .2.4.4.7.6 1.1.2.3.5.7.7 1 .1.2.3.3.4.5l.4.4c.3.3.6.5.9.7.3.2.5.4.8.6.2.2.5.3.8.4l.6.3c.3.1.5.2.5.2-2.8-1.5-4.9-3.8-6-6.7z\"\n})));\n\nvar _ref19 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st9\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5 1.6L11.8 6.2c-3 1.1-5.6 3.1-7.3 5.7.3-.4.6-.7.9-1.1.3-.4.6-.7 1-1 .3-.3.6-.5.9-.8-.1 0 0 0 0 0 .4-.3.8-.6 1.1-.8.4-.3.8-.5 1.2-.7.5-.3 1-.5 1.4-.7.4-.2.9-.3 1.3-.5l1.4-.5 2.7-1 2.7-1c1.1-.4 2.1-.8 3.2-1.2.7-.2 1.3-.5 2-.8l.1.2.1.5.1.5v1l-.1.5-.1.5-.2.5-.2.6-.2.5-.4.4-.3.4-.4.4-.4.4-.4.4-.5.3c1.3-.8 2.3-1.9 2.9-3.3.6-1.3.6-2.7.2-4z\"\n}));\n\nvar _ref20 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"forms-gutenberg_svg__st9\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29 13.1l-1-2.8-4.5 1.6c.8-.2 1.5-.5 2.3-.7.7-.2 1.4-.4 2.1-.7l.7 2.2c.1.4.3.8.4 1.2l.3 1.2c.1.4.1.8.1 1.2v1.2c0 .4-.1.8-.1 1.2-.1.4-.1.8-.3 1.2-.1.4-.2.8-.4 1.2-.1.2-.2.4-.2.6l-.3.6-.3.6-.3.6c-.1.2-.2.4-.3.5-.1.2-.2.4-.4.5l-.4.5-.4.4c-.1.2-.3.3-.4.5l-.5.5c-.3.3-.7.6-1 .9-.3.3-.7.5-1.1.8 2.2-1.3 3.9-3.2 5.1-5.3 1.2-2.1 1.7-4.5 1.5-6.8 0-1-.2-1.9-.6-2.9z\"\n}));\n\nvar _ref21 = /*#__PURE__*/React.createElement(\"text\", {\n transform: \"translate(300 167.5)\",\n fontFamily: \"MyriadPro-Regular\",\n fontSize: 12\n}, \"32\");\n\nvar SvgFormsGutenberg = function SvgFormsGutenberg(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"forms-gutenberg_svg__Layer_1\",\n viewBox: \"0 0 32 32\",\n xmlSpace: \"preserve\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21);\n};\n\nexport default SvgFormsGutenberg;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b3c315\",\n d: \"M70 54h41v18H70z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#96a40a\",\n d: \"M65 54h5v18h-5z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b3c315\",\n d: \"M94 50h13v3H94z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#96a40a\",\n d: \"M89 50h5v3h-5z\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b3c315\",\n d: \"M74 50h13v3H74z\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#96a40a\",\n d: \"M69 50h5v3h-5z\"\n});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b977c7\",\n d: \"M72 92h13v3H72z\"\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9e5cac\",\n d: \"M67 92h5v3h-5z\"\n});\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#b977c7\",\n d: \"M51 92h13v3H51z\"\n});\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9e5cac\",\n d: \"M46 92h5v3h-5z\"\n});\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49c3f5\",\n d: \"M92 75h19v19H92z\"\n});\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#109ad4\",\n d: \"M87 75h5v19h-5z\"\n});\n\nvar _ref13 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M25 97h86l-18 19H43L25 97z\",\n fill: \"#b977c7\"\n});\n\nvar _ref14 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#9e5cac\",\n d: \"M20 97l18 19h5L25 97z\"\n});\n\nvar _ref15 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111 36H25l18-19h50l18 19z\",\n fill: \"#f1b014\"\n});\n\nvar _ref16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f09108\",\n d: \"M43 17h-5L20 36h5z\"\n});\n\nvar _ref17 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f1b014\",\n d: \"M51 12h14v3H51z\"\n});\n\nvar _ref18 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f09108\",\n d: \"M46 12h5v3h-5z\"\n});\n\nvar _ref19 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f1b014\",\n d: \"M73 12h14v3H73z\"\n});\n\nvar _ref20 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#f09108\",\n d: \"M68 12h5v3h-5z\"\n});\n\nvar _ref21 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#49c3f5\",\n d: \"M25 39h18v26H25z\"\n});\n\nvar _ref22 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#109ad4\",\n d: \"M20 39h5v26h-5z\"\n});\n\nvar _ref23 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#d25e4d\",\n d: \"M20 68h5v26h-5z\"\n});\n\nvar _ref24 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#e67666\",\n d: \"M25 68h18v26H25z\"\n});\n\nvar SvgGetwid = function SvgGetwid(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 128 128\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21, _ref22, _ref23, _ref24);\n};\n\nexport default SvgGetwid;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M201 94.59h12.5H201zm-146 0h12.5H55zm20.038 115.868c-6.137-3.161-13.675-.749-16.836 5.388-3.162 6.137-.75 13.675 5.387 16.837l11.45-22.225zm117.373 22.225c6.137-3.162 8.549-10.7 5.387-16.837-3.161-6.137-10.699-8.549-16.836-5.388l11.449 22.225zM128 33.5c33.318 0 60.5 27.256 60.5 61.09h25c0-47.45-38.185-86.09-85.5-86.09v25zm60.5 61.09c0 33.835-27.182 61.091-60.5 61.091v25c47.315 0 85.5-38.639 85.5-86.09h-25zM128 155.682c-33.319 0-60.5-27.256-60.5-61.09h-25c0 47.451 38.185 86.09 85.5 86.09v-25zm-60.5-61.09C67.5 60.756 94.681 33.5 128 33.5v-25c-47.315 0-85.5 38.64-85.5 86.09h25zm-3.91 138.092c40.937 21.089 87.883 21.089 128.821 0l-11.449-22.225c-33.754 17.389-72.17 17.389-105.924 0L63.59 232.683z\"\n});\n\nvar SvgGhostkit = function SvgGhostkit(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgGhostkit;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"style\", null);\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"guteblock_svg__prefix__Layer_1\"\n}, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"guteblock_svg__prefix__SVGID_1_\",\n gradientUnits: \"userSpaceOnUse\",\n x1: 68.035,\n y1: 10.602,\n x2: 33.222,\n y2: 86.651\n}, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0,\n stopColor: \"#ffd500\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.258,\n stopColor: \"#ff683e\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.498,\n stopColor: \"#ff1d6b\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.781,\n stopColor: \"#5d25cd\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#3eb9fa\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.95 17.49L17.49 31.95c-9.14 9.14-9.14 23.96 0 33.1L34.94 82.5c9.14 9.14 23.96 9.14 33.1 0L82.5 68.04c9.14-9.14 9.14-23.96 0-33.1L65.06 17.49c-9.15-9.14-23.96-9.14-33.11 0z\",\n fill: \"url(#guteblock_svg__prefix__SVGID_1_)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M65.81 36.74c-3.94 0-7.64 1.53-10.43 4.32l-5.85 5.85a6.488 6.488 0 000 9.17 6.488 6.488 0 009.17 0l5.85-5.85c.43-.43.92-.52 1.26-.52.34 0 .83.09 1.26.52.43.43.52.92.52 1.26 0 .34-.09.83-.52 1.26L52.98 66.83c-.05.05-.1.1-.14.15-.44.47-.96.58-1.32.58-.36.01-.88-.08-1.33-.54L32.98 49.81c-.69-.69-.72-1.79-.09-2.52l14.17-14.17c.05-.05.1-.1.14-.15.67-.71 1.78-.73 2.54-.04l.98.95c2.57 2.49 6.68 2.43 9.17-.14 2.49-2.57 2.43-6.68-.14-9.17l-1.03-1c-.03-.03-.05-.05-.08-.07-5.94-5.57-15.25-5.33-20.82.51l-14.2 14.2c-.05.05-.1.1-.14.15a14.744 14.744 0 00.33 20.61l17.21 17.22c2.8 2.81 6.51 4.34 10.47 4.34h.24c4.01-.06 7.73-1.69 10.49-4.59l14.02-14.02c2.79-2.79 4.32-6.49 4.32-10.43 0-3.94-1.53-7.64-4.32-10.43a14.668 14.668 0 00-10.43-4.32z\",\n fill: \"#fff\"\n}));\n\nvar SvgGuteblock = function SvgGuteblock(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 100 100\",\n \"aria-hidden\": \"true\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgGuteblock;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.388 5.75l-6.716-3.91a1.173 1.173 0 00-1.104 0l-.184.092c0 .046.046.092.046.138v2.3c0 .138-.092.276-.276.276h-2.3c-.138 0-.276-.092-.276-.276v-.828l-.506.276v2.53a.297.297 0 01-.276.276H3.22a.297.297 0 01-.276-.276v-.736l-.138.092c-.322.184-.552.598-.552.966v1.15H3.68c.138 0 .23.092.23.23v2.208c0 .138-.092.23-.23.23H2.254v3.956c0 .368.23.782.552.966l6.716 3.91c.322.184.782.184 1.104 0l6.762-3.864c.322-.184.552-.598.552-.966V6.67c0-.322-.23-.736-.552-.92zm-3.358 7.038l-3.864 2.3L6.21 12.88l-.092-4.508 3.864-2.3 3.68 2.07-.46.782-3.22-1.794-2.944 1.748.046 3.45 2.99 1.656 2.944-1.748v-.644l-2.668-.046v-.92l3.542.092v2.07zM2.3 5.014a.099.099 0 01-.092.092h-.782c-.046 0-.046-.046-.046-.092v-.736c0-.046 0-.092.046-.092h.736c.092 0 .138.046.138.092v.736zM1.518 7.222c0 .092-.046.138-.138.138H.138C.046 7.36 0 7.314 0 7.222V5.98c0-.092.046-.138.138-.138H1.38c.092 0 .138.046.138.138v1.242z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.496 4.048h2.162V6.21H3.496zM7.038 2.254h1.978v1.978H7.038zM3.68 3.174c0 .046-.046.138-.138.138H2.346c-.092 0-.138-.092-.138-.138V1.932c0-.092.046-.138.138-.138h1.196c.092 0 .138.092.138.138v1.242zM6.164 2.622c0 .092-.046.138-.138.138H4.83c-.092 0-.138-.046-.138-.138V1.426c0-.092.046-.138.138-.138h1.196c.092 0 .138.046.138.138v1.196zM8.05 1.38a.099.099 0 01-.092.092H6.9a.099.099 0 01-.092-.092V.322c0-.046.046-.092.092-.092h1.012c.046 0 .092.046.092.092V1.38zM1.564 8.28H3.45v1.886H1.564z\"\n});\n\nvar SvgGutentor = function SvgGutentor(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-1.1 -0.2 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgGutentor;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.145 6.164L7.855 41.837V6.164h32.29z\",\n fillOpacity: 0.502,\n fillRule: \"nonzero\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.145 41.836L7.855 6.163v35.673h32.29z\",\n fillRule: \"nonzero\"\n});\n\nvar SvgKadenceBlocks = function SvgKadenceBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 48 48\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 1.414,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2);\n};\n\nexport default SvgKadenceBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.706 7.854l.004.01c.734 2.723.003 5.708-1.395 8.169-1.669 2.927-4.184 5.357-7.464 6.256-4.204 1.164-7.863-.293-10.944-3.149C-.097 15.427-1.665 9.8 2.303 5.352a17.352 17.352 0 015.683-4.009A14.566 14.566 0 0112.498.077c1.734-.184 3.298-.075 4.885.732a14.601 14.601 0 013.615 2.583 9.982 9.982 0 012.708 4.462zm-12.659 4.272a.03.03 0 01.025.012l2.536 3.432c.25.338.66.54 1.1.54h1.573c.246 0 .485-.075.682-.213.502-.353.605-1.02.228-1.49l-2.343-2.924a1.188 1.188 0 01.05-1.558l2.045-2.26a.91.91 0 00.24-.61c0-.523-.453-.946-1.011-.946H14.66a1.37 1.37 0 00-1.07.502l-2.534 3.173a.032.032 0 01-.025.012c-.009 0-.016-.007-.016-.015V7.359c0-.69-.598-1.25-1.336-1.25h-.925c-.739 0-.81.56-.81 1.25v7.5c0 .69.071 1.25.81 1.25h.94c.738 0 1.337-.56 1.337-1.25v-2.718c0-.008.007-.015.015-.015z\"\n});\n\nvar SvgKiokenBlocks = function SvgKiokenBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 -0.5 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgKiokenBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.831 7.877l.001-.009-.001-.009a3.675 3.675 0 01-.132-.247l-.057-.115c-.277-.498-.381-.99-1.033-1.064h-.048a.91.91 0 00-.908.862v.002c.674.126 1.252.278 1.813.468l-.092-.027.283.096.147.053s.028 0 .028-.011z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.982 13.574a68.843 68.843 0 00-.39-7.112l.026.299.07-.019a1.1 1.1 0 00.052-2.09l-.008-.002h-.026a2.306 2.306 0 01-1.149-.861l-.005-.007C19.852-.178 14.3.001 14.3.001S8.75-.178 6.05 3.782c-.28.401-.676.704-1.14.862l-.016.005a1.097 1.097 0 00-.754 1.04v.026-.001l-.001.034c0 .493.335.907.789 1.029l.007.002.045.011a65.7 65.7 0 00-.364 6.801v.012s-9.493 13.012-1.277 17.515c4.733 2.431 6.881-.769 6.881-.769s1.397-1.661-1.784-3.355v-4.609a.638.638 0 01.625-.628h1.212v-.59c0-.275.223-.498.498-.498h1.665a.498.498 0 01.496.498v.59h2.721v-.59c0-.275.223-.498.498-.498h1.665c.271.005.49.226.49.498v.59h1.209c.349 0 .633.28.639.627v4.584c-3.193 1.703-1.784 3.355-1.784 3.355s2.148 3.193 6.879.769c8.222-4.503-1.269-17.515-1.269-17.515zm-1.396-3.313a6.398 6.398 0 01-1.563 3.797l.007-.008c-1.703 2.01-4.407 3.249-6.721 4.432-2.325-1.177-5.026-2.416-6.736-4.432a6.43 6.43 0 01-1.555-3.769l-.001-.02c-.126-2.22.583-5.929 3.044-6.74 2.416-.788 3.947 1.288 4.494 2.227a.863.863 0 001.488.004l.002-.004c.551-.932 2.08-3.008 4.494-2.22 2.474.805 3.174 4.513 3.046 6.734z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.463 10.087h-.028c-.192.026-.121.251-.047.356.254.349.407.787.407 1.26v.018-.001a1.277 1.277 0 01-.633 1.1l-.006.003c-.739.426-1.377-.145-2.054-.398a7.5 7.5 0 00-2.42-.455h-.009v-1.033a4.886 4.886 0 002.551-1.486l.004-.004a.916.916 0 00-.158-1.383l-.003-.002a4.738 4.738 0 00-2.764-.881 4.752 4.752 0 00-2.819.92l.013-.009a.9.9 0 00-.146 1.317l-.001-.001a4.906 4.906 0 002.553 1.53l.033.007v1.05a8.061 8.061 0 00-2.118.343l.057-.015a5.578 5.578 0 00-.908.358l.033-.015c-.519.26-1.037.436-1.58.121a1.218 1.218 0 01-.617-1.058v-.007-.007c0-.47.153-.905.411-1.257l-.004.006c.047-.068.089-.17.026-.241s-.189 0-.27.03a1.592 1.592 0 00-.479.381l-.002.002a1.716 1.716 0 00-.394 1.097v.011-.001a1.93 1.93 0 00.964 1.651l.009.005c.296.178.654.283 1.036.283.364 0 .706-.095 1.001-.263l-.01.005a6.51 6.51 0 013.225-.728h-.01.03c1.277 0 2.382.266 3.266.775.27.159.594.253.94.253h.003c.355-.002.688-.098.974-.265l-.009.005a2.028 2.028 0 001.007-1.75v-.004l.002-.086c0-.625-.34-1.171-.846-1.462l-.008-.004a.388.388 0 00-.199-.07h-.001zm-6.362-1.256c-.238.213-.468.581-.832.345a.933.933 0 01-.161-.136.352.352 0 01.081-.555l.002-.001c.594-.309 1.203-.543 1.884-.49-.324.281-.649.56-.973.837z\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.89 13.578a1.988 1.988 0 01-3.173.005l-.004-.005a.36.36 0 10-.576.427 2.707 2.707 0 004.323.007l.005-.007a.362.362 0 00-.072-.498l-.001-.001a.356.356 0 00-.501.071l-.001.001zM18.507 11.707a.35.35 0 11-.702 0 .35.35 0 01.702 0zM17.389 11.049a.35.35 0 11-.702 0 .35.35 0 01.702 0zM10.798 11.707a.35.35 0 11-.702 0 .35.35 0 01.702 0zM11.918 11.049a.35.35 0 11-.702 0 .35.35 0 01.702 0zM8.773 7.877l-.002-.009.002-.009c.047-.081.089-.164.132-.247.019-.038.036-.079.057-.115.275-.498.379-.99 1.033-1.064h.046c.487 0 .884.382.91.862v.002c-.678.124-1.261.277-1.827.468l.092-.027-.275.096-.1.036-.045.017s-.023 0-.023-.011z\"\n});\n\nvar SvgOtterBlocks = function SvgOtterBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 29 32\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref, _ref2, _ref3, _ref4);\n};\n\nexport default SvgOtterBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h21v21H0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.296 9.925c.014.013.029.022.042.034l-2.456 2.455A5.376 5.376 0 014.697 10.9C4.232 10.024 4 9.02 4 7.884c0-1.134.232-2.15.697-3.045.21-.402.456-.76.732-1.081l2.514 2.514c-.245.432-.375.966-.375 1.612 0 .902.243 1.582.728 2.04zm7.782-7.707v12.19l-4.393-4.394c.053-.044.108-.08.159-.13.499-.485.749-1.172.749-2.06 0-.68-.15-1.24-.441-1.679l3.926-3.927z\",\n fill: \"#444\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.593 11.7c-.793 1.312-1.928 1.968-3.405 1.968a4.878 4.878 0 01-2.614-.728 4.966 4.966 0 01-.691-.525L8.338 9.96c.478.433 1.054.654 1.732.654.614 0 1.15-.207 1.615-.598l4.393 4.393V19h-3.485v-7.3zm3.485-9.597v.116l-3.926 3.927a2.476 2.476 0 00-2.082-1.09c-.684 0-1.272.242-1.764.727-.144.143-.26.31-.363.49L5.43 3.759a5.031 5.031 0 011.155-1.01A4.795 4.795 0 019.188 2c1.531 0 2.666.588 3.405 1.764V2.103h3.485z\",\n fill: \"#000\"\n}));\n\nvar SvgQodeblock = function SvgQodeblock(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgQodeblock;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.38 8.8c0-2.42-.88-4.4-2.53-6.05C13.2 1.1 11.11.22 8.8.22s-4.4.88-6.05 2.53C1.1 4.4.22 6.38.22 8.8s.88 4.4 2.53 6.05c1.65 1.65 3.63 2.53 6.05 2.53.99 0 1.98-.11 2.86-.44l-2.42-2.53c-.11-.11-.33-.22-.44-.22-1.54 0-2.75-.55-3.74-1.54-1.1-.99-1.54-2.31-1.54-3.85s.55-2.86 1.54-3.85c.99-.99 2.2-1.54 3.74-1.54s2.75.55 3.74 1.54c.99.99 1.54 2.31 1.54 3.85 0 .77-.11 1.54-.44 2.2-.22.55-.88.66-1.32.22-1.21-1.21-3.08-1.32-4.4-.22l2.75 2.86 2.31 2.42c.99.99 2.64 1.1 3.74.11l.33-.33-1.43-1.43c-.22-.22-.22-.44 0-.66a8.383 8.383 0 001.76-5.17z\"\n});\n\nvar SvgQubely = function SvgQubely(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-1 -1 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgQubely;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.982 16.711a4.48 4.48 0 01-7.965 0A4.972 4.972 0 0110 14.709c1.629 0 3.074.789 3.982 2.002zm-.748-7.657c-.314 2.56 1.248 2.919 1.248 5.603a4.5 4.5 0 01-.205 1.344 5.635 5.635 0 00-8.554 0 4.5 4.5 0 01-.205-1.344c0-2.684 1.563-3.043 1.247-5.603C6.403 6.126 2.45 6.589 2.45 3.72A2.857 2.857 0 015.308.862C7.017.862 8.073 2.42 10 2.42c1.926 0 2.982-1.558 4.691-1.558a2.857 2.857 0 012.857 2.858c.001 2.869-3.952 2.406-4.314 5.334zM8.557 4.107h-.708a.9.9 0 01-.901.9.9.9 0 01-.901-.9h-.708a1.609 1.609 0 103.218 0zm.979 7.141a.568.568 0 00-.566-.568.567.567 0 10.566.568zm2.062 0a.569.569 0 00-.568-.568.567.567 0 10.568.568zm3.062-7.141h-.707a.9.9 0 01-1.802 0h-.707a1.61 1.61 0 003.216 0z\"\n});\n\nvar SvgSnowMonkeyBlocks = function SvgSnowMonkeyBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgSnowMonkeyBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.08 136L23 176.66a4.75 4.75 0 003.53 8.15l86.91.14zM177.91 128.39a17 17 0 00-5-12.07L71.39 14.72 26.61 59.5a17 17 0 00-5 12.05 17 17 0 005 12.05l101.55 101.6v-.07l44.76-44.76a17 17 0 005-12zM172.95 14.69H86.12l49.42 49.62 40.92-41.16a5 5 0 00-3.51-8.46z\"\n});\n\nvar SvgStackableUltimateGutenbergBlocks = function SvgStackableUltimateGutenbergBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 200 200\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgStackableUltimateGutenbergBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.9.3C12.2.3.3 12.2.3 26.8s11.9 26.5 26.5 26.5c14.7 0 26.5-11.9 26.5-26.5S41.5.3 26.9.3zm-2 27.7c0 1.1-.1 2.2-.4 3.2-.3 1-.7 1.8-1.3 2.6-.6.7-1.3 1.3-2.2 1.7-.9.4-2 .6-3.2.6-1.3 0-2.4-.2-3.3-.7-.9-.4-1.7-1-2.2-1.8-.6-.7-1-1.6-1.3-2.6-.3-1-.4-2-.4-3.1v-8.3h3.8V28c0 .6.1 1.2.2 1.8s.3 1.1.6 1.5c.3.4.6.8 1.1 1.1s1 .4 1.6.4 1.2-.1 1.6-.4.8-.6 1.1-1.1c.3-.4.5-1 .6-1.5.1-.6.2-1.2.2-1.8v-8.3h3.8c-.3 0-.3 8.3-.3 8.3zm17.2 8H39v-1.6c-1.2 1.1-2.7 1.7-4.3 1.7-1.1 0-2.1-.2-3-.6-.9-.4-1.8-1-2.5-1.7s-1.3-1.6-1.7-2.6c-.4-1-.6-2.2-.6-3.4 0-1.1.2-2.2.6-3.2.4-1 1-1.9 1.7-2.6.7-.7 1.6-1.3 2.6-1.7 1-.4 2.1-.6 3.2-.6 1.5 0 2.8.3 4 1 1.1.6 2 1.5 2.5 2.6l-2.8 2.1c-.4-.7-.9-1.3-1.6-1.7-.7-.4-1.4-.6-2.3-.6-.6 0-1.2.1-1.7.4s-1 .6-1.3 1.1-.7 1-.8 1.6c-.2.6-.3 1.2-.3 1.9s.1 1.4.3 1.9c.2.6.5 1.1.9 1.5.4.4.8.8 1.4 1 .5.2 1.1.4 1.8.4 1.5 0 2.8-.7 4-2v-.5h-3.2v-2.7h6.3c-.1-.2-.1 8.3-.1 8.3z\"\n});\n\nvar SvgUltimateAddonsForGutenberg = function SvgUltimateAddonsForGutenberg(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 54 54\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgUltimateAddonsForGutenberg;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.9 10v4.1c0 .7-.3 1.2-.9 1.6-2.4 1.4-4.7 2.7-7.1 4.1-.6.4-1.3.4-1.9 0-2.3-1.4-4.6-2.8-7-4.1-.6-.4-.9-.9-.9-1.6V6c0-.7.3-1.2.9-1.6C4.4 3 6.7 1.6 9.1.3c.6-.4 1.3-.4 1.9 0 2.3 1.3 4.6 2.7 7 4 .6.4.9.9.9 1.6V10zm-8.7-6c-.5 0-1 .2-1.5.4-.3.2-.7.4-1.1.6-.9.6-1.8 1.1-2.8 1.7-.2.1-.4.4-.4.7 0 .3.2.5.4.6.3.2.6.1.9 0C7 7.3 8.2 6.5 9.5 5.8c.8-.4 1.7-.2 2.1.5.4.7.1 1.6-.6 2.1-.5.3-1 .6-1.4.8-.8.5-1.6.9-2.5 1.4-.3.2-.4.5-.4.8.1.3.3.6.6.6.2 0 .4 0 .6-.1 1.3-.7 2.5-1.5 3.8-2.2.7-.4 1.6-.2 2 .4.5.7.3 1.7-.5 2.2-1.3.7-2.6 1.5-3.8 2.2-.4.2-.5.7-.3 1.1.2.4.7.5 1.1.3 1.3-.8 2.6-1.5 4-2.3 1.2-.7 1.7-2.1 1.3-3.4-.3-1.1-1-1.8-2.1-2.1-.1 0-.2-.1-.1-.2.1-.2.1-.4.1-.6C13.4 5.5 12 4 10.2 4zm-5.8 7.3c0 .2 0 .4.1.7.5 2 2.7 3 4.5 1.9 1.3-.7 2.6-1.5 3.8-2.2.4-.2.5-.7.3-1.1-.2-.4-.7-.5-1.1-.3-.4.2-.7.4-1.1.6-.9.5-1.8 1-2.7 1.6-.6.3-1.1.3-1.7-.1-.9-.6-.8-1.9.2-2.5 1.3-.7 2.6-1.5 3.8-2.2.5-.2.7-.7.4-1-.2-.4-.7-.5-1.1-.3-1.3.7-2.6 1.5-3.9 2.2-1 .6-1.4 1.5-1.5 2.7z\"\n});\n\nvar SvgUltimateBlocks = function SvgUltimateBlocks(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgUltimateBlocks;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 0C4 0 0 4 0 9s4 9 9 9 9-4 9-9-4-9-9-9zM6.5 12.6c-.1.1-.1.1-.2.1l-2 .1c-.2 0-.3-.1-.4-.3l-.1-2c0-.1 0-.2.1-.2l5.5-6.4c.1-.1.3-.2.5 0L12 5.7c.1.1.2.3 0 .5l-5.5 6.4zm7.5.2H9.5c-.2 0-.4-.2-.4-.5 0-.2.2-.5.4-.5H14c.2 0 .4.2.4.5s-.2.5-.4.5zm0-1.8h-2.8c-.2 0-.4-.2-.4-.5 0-.2.2-.5.4-.5H14c.2 0 .4.2.4.5s-.2.5-.4.5zm.1-1.8h-1.2c-.2 0-.3-.2-.3-.5s.1-.5.3-.5h1.2c.2 0 .3.2.3.5s-.1.5-.3.5z\"\n});\n\nvar SvgUltimatePost = function SvgUltimatePost(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 18 18\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgUltimatePost;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01A8.87 8.87 0 0110 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z\"\n});\n\nvar SvgWordpress = function SvgWordpress(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"-2 -2 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _ref);\n};\n\nexport default SvgWordpress;","/**\n * External dependencies\n */\nimport React, {Component} from 'react';\n\nimport SVGRedux from '../../assets/img/icon.svg'\nimport SVGAcfBlocks from './images/acf-blocks.svg'\nimport SVGAtomicBlocks from './images/atomic-blocks.svg'\nimport SVGAdvancedCustomFields from './images/advanced-custom-fields.svg'\nimport SVGAdvancedGutenbergBlocks from './images/advanced-gutenberg-blocks.svg'\nimport SVGBlockOptions from './images/block-options.svg'\nimport SVGBlockSlider from './images/block-slider.svg'\nimport SVGCoblocks from './images/coblocks.svg'\nimport SVGCreativeBlocks from './images/creative-blocks.svg'\nimport SVGEditorPlus from './images/editorplus.svg'\nimport SVGElegantBlocks from './images/elegant-blocks.svg'\nimport SVGEnhancedBlocks from './images/enhanced-blocks.svg'\nimport SVGEssentialBlocks from './images/essential-blocks.svg'\nimport SVGFormsGutenberg from './images/forms-gutenberg.svg'\nimport SVGGetwid from './images/getwid.svg'\nimport SVGGhostkit from './images/ghostkit.svg'\nimport SVGGuteblock from './images/guteblock.svg'\n// import SVGGutenbergBlock from './images/gutenberg-blocks.png'\nimport SVGGutentor from './images/gutentor.svg'\nimport SVGKadenceBlocks from './images/kadence-blocks.svg'\nimport SVGKiokenBlocks from './images/kioken-blocks.svg'\nimport SVGOtterBlocks from './images/otter-blocks.svg'\nimport SVGQodeblock from './images/qodeblock.svg'\nimport SVGQubely from './images/qubely.svg'\nimport SVGSnowMonkeyBlocks from './images/snow-monkey-blocks.svg'\nimport SVGStackableUltimateGutenbergBlocks from './images/stackable-ultimate-gutenberg-blocks.svg'\nimport SVGUltimateAddonsForGutenberg from './images/ultimate-addons-for-gutenberg.svg'\nimport SVGUltimateBlocks from './images/ultimate-blocks.svg'\nimport SVGUltimatePost from './images/ultimate-post.svg'\nimport SVGWordPress from './images/wordpress.svg'\n\n// export const gutentor = () => {\n// \treturn <SVGGutentorIcon width=\"20\" height=\"20\"/>\n// }\n\n\nexport const redux = () => { return <SVGRedux width=\"20\" height=\"20\"/> }\nexport const acfblocks = () => { return <SVGAcfBlocks width=\"20\" height=\"20\"/> }\nexport const atomicblocks = () => { return <SVGAtomicBlocks width=\"20\" height=\"20\"/> }\nexport const advancedcustomfields = () => { return <SVGAdvancedCustomFields width=\"20\" height=\"20\"/> }\nexport const advancedgutenbergblocks = () => { return <SVGAdvancedGutenbergBlocks width=\"20\" height=\"20\"/> }\nexport const blockoptions = () => { return <SVGBlockOptions width=\"20\" height=\"20\"/> }\nexport const blockslider = () => { return <SVGBlockSlider width=\"20\" height=\"20\"/> }\nexport const coblocks = () => { return <SVGCoblocks width=\"20\" height=\"20\"/> }\nexport const creativeblocks = () => { return <SVGCreativeBlocks width=\"20\" height=\"20\"/> }\nexport const editorplus = () => { return <SVGEditorPlus width=\"20\" height=\"20\"/> }\nexport const elegantblocks = () => { return <SVGElegantBlocks width=\"20\" height=\"20\"/> }\nexport const enhancedblocks = () => { return <SVGEnhancedBlocks width=\"20\" height=\"20\"/> }\nexport const essentialblocks = () => { return <SVGEssentialBlocks width=\"20\" height=\"20\"/> }\nexport const formsgutenberg = () => { return <SVGFormsGutenberg width=\"20\" height=\"20\"/> }\nexport const getwid = () => { return <SVGGetwid width=\"20\" height=\"20\"/> }\nexport const ghostkit = () => { return <SVGGhostkit width=\"20\" height=\"20\"/> }\nexport const guteblock = () => { return <SVGGuteblock width=\"20\" height=\"20\"/> }\nexport const gutenbergblock = () => { return <SVGGutenbergBlock width=\"20\" height=\"20\"/> }\nexport const gutentor = () => { return <SVGGutentor width=\"20\" height=\"20\"/> }\nexport const kadenceblocks = () => { return <SVGKadenceBlocks width=\"20\" height=\"20\"/> }\nexport const kiokenblocks = () => { return <SVGKiokenBlocks width=\"20\" height=\"20\"/> }\nexport const otterblocks = () => { return <SVGOtterBlocks width=\"20\" height=\"20\"/> }\nexport const qodeblock = () => { return <SVGQodeblock width=\"20\" height=\"20\"/> }\nexport const qubely = () => { return <SVGQubely width=\"20\" height=\"20\"/> }\nexport const snowmonkeyblocks = () => { return <SVGSnowMonkeyBlocks width=\"20\" height=\"20\"/> }\nexport const stackableultimategutenbergblocks = () => { return <SVGStackableUltimateGutenbergBlocks width=\"20\" height=\"20\"/> }\nexport const ultimateaddonsforgutenberg = () => { return <SVGUltimateAddonsForGutenberg width=\"20\" height=\"20\"/> }\nexport const ultimateblocks = () => { return <SVGUltimateBlocks width=\"20\" height=\"20\"/> }\nexport const ultimatepost = () => { return <SVGUltimatePost width=\"20\" height=\"20\"/> }\nexport const wordpress = () => { return <SVGWordPress width=\"20\" height=\"20\"/> }\n\nimport SVGReduxTemplatesIcon from '../../assets/img/icon.svg'\nimport SVGReduxTemplatesColorIcon from '../../assets/img/icon-color.svg'\n//\n//\n// export const reqSvgs = require.context ( './images/third-party', true, /\\.svg$/ )\n//\n// export const reqSvgsKeys = reqSvgs.keys()\n//\n// const iconLoader = (path) => import(path);\n//\n// export const icons = {\n// \t'redux': iconLoader('../../assets/img/icon.svg'),\n// \t'forms-gutenberg': iconLoader('./images/forms-gutenberg.svg')\n// }\n//\n// export const svgs = reqSvgs\n// \t.keys ()\n// \t.reduce ( ( images, path ) => {\n// \t\timages[path.replace('./', '').replace('.svg', '')] = reqSvgs ( path )\n// \t\treturn images\n// \t}, {} )\n//\n// function importAll(r) {\n// \tlet images = {};\n// \tr.keys().map((item, index) => { images[item.replace('./', '').replace('.svg', '')] = r(item); });\n// \treturn images;\n// }\n// export const images = importAll(require.context( './images/third-party', false, /\\.(svg)$/));\n\n\n\n/**\n * WordPress dependencies\n */\nimport {cloneElement, render} from '@wordpress/element'\nimport domReady from '@wordpress/dom-ready'\nimport {updateCategory} from '@wordpress/blocks'\n\nexport const colorizeIcon = SvgIcon => {\n\treturn cloneElement(SvgIcon, {\n\t\tfill: 'url(#redux-gradient)',\n\t\tclassName: 'redux-icon-gradient',\n\t})\n}\n\nexport const thirdPartyIcon = (icon) => {\n\tif (icon) {\n\t\treturn <icon width=\"20\" height=\"20\"/>\n\t}\n}\n\n// Add an icon to our block category.\nif (typeof window.wp.blocks !== 'undefined' && typeof window.wp.blocks.updateCategory !== 'undefined') {\n\tupdateCategory(redux_templates.i18n, {\n\t\ticon: colorizeIcon(<SVGReduxTemplatesIcon className=\"components-panel__icon\" width=\"20\" height=\"20\"/>),\n\t})\n}\n\n// Add our SVG gradient placeholder definition that we'll reuse.\ndomReady(() => {\n\tconst redux_templatesGradient = document.createElement('DIV')\n\tdocument.querySelector('body').appendChild(redux_templatesGradient)\n\trender(\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tclassName=\"redux-gradient\"\n\t\t\theight=\"0\"\n\t\t\twidth=\"0\"\n\t\t\tstyle={{opacity: 0}}\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<linearGradient id=\"redux-gradient\">\n\t\t\t\t\t<stop offset=\"0%\" stopColor=\"#8c33da\" stopOpacity=\"1\"/>\n\t\t\t\t\t<stop offset=\"100%\" stopColor=\"#f34957\" stopOpacity=\"1\"/>\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t</svg>,\n\t\tredux_templatesGradient\n\t)\n})\n\nexport const ReduxTemplatesIcon = () => {\n\treturn <SVGReduxTemplatesIcon width=\"20\" height=\"20\"/>\n}\n\nexport const ReduxTemplatesIconColor = () => {\n\treturn <SVGReduxTemplatesColorIcon width=\"20\" height=\"20\"/>\n}\n\nexport const ReduxTemplatesIconColorize = () => {\n\treturn colorizeIcon(<SVGReduxTemplatesIcon width=\"20\" height=\"20\"/>)\n}\nexport const core = () => {\n\treturn <SVGWordPress width=\"20\" height=\"20\"/>\n}\n//\n// export const AdvancedGutenbergBlocks = () => {\n// \treturn <SVGAdvancedGutenbergBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const advancedgutenbergblocks = () => <AdvancedGutenbergBlocks/>\n//\n// export const AdvancedGutenberg = () => {\n// \treturn <SVGAdvancedGutenbergIcon width=\"20\" height=\"20\"/>\n// }\n// export const advancedgutenbergIcon = () => <AdvancedGutenberg/>\n//\n// export const AtomicBlocks = () => {\n// \treturn <SVGAtomicBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const atomicblocks = () => <AtomicBlocks/>\n//\n// export const CoBlocks = () => {\n// \treturn <SVGCoBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const Coblocks = () => <CoBlocks/>\n// export const coblocks = () => <CoBlocks/>\n//\n// export const Stackable = () => {\n// \treturn <SVGStackableIcon width=\"20\" height=\"20\"/>\n// }\n// export const stackable = () => <Stackable/>\n// export const stackableultimategutenbergblocks = () => <Stackable/>\n//\n// export const Qubely = () => {\n// \treturn <SVGQubelyIcon width=\"20\" height=\"20\"/>\n// }\n// export const qubely = () => <Qubely/>\n//\n// export const Kioken = () => {\n// return <SVGKiokenIcon width=\"20\" height=\"20\"/>\n// }\n// export const kioken = () => <Kioken/>\n// export const kiokenblocks = () => <Kioken/>\n//\n// export const kadenceblocks = () => {\n// \treturn <SVGKadenceIcon width=\"20\" height=\"20\"/>\n// }\n//\n// export const CreativeBlocks = () => {\n// \treturn <SVGCreativeBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const creativeblocks = () => <CreativeBlocks/>\n// export const qb = () => <CreativeBlocks/>\n//\n// export const EssentialBlocks = () => {\n// \treturn <SVGEssentialBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const essentialblocks = () => <EssentialBlocks/>\n// export const eb = () => <EssentialBlocks/>\n//\n// export const UltimateAddonsForGutenberg = () => {\n// \treturn <SVGUltimateAddonsForGutenbergIcon width=\"20\" height=\"20\"/>\n// }\n// export const ultimateaddonsforgutenberg = () => <UltimateAddonsForGutenberg/>\n//\n//\n// export const UltimateBlocks = () => {\n// \treturn <SVGUltimateBlocksIcon width=\"20\" height=\"20\"/>\n// }\n// export const ultimateblocks = () => <UltimateBlocks/>\n//\n// export const gutentor = () => {\n// \treturn <SVGGutentorIcon width=\"20\" height=\"20\"/>\n// }\n//\n//\n// export const GutenbergForms = () => {\n// \treturn <SVGGutenbergFormsIcon width=\"20\" height=\"20\"/>\n// }\n// export const gutenbergforms = () => <GutenbergForms/>\n// export const formsgutenberg = () => <GutenbergForms/>\n//\n","/**\n * Library Button\n */\n\n/**\n * WordPress dependencies\n */\nimport domReady from '@wordpress/dom-ready'\nimport { render } from '@wordpress/element'\n\n/**\n * External dependencies\n */\nimport './editor.scss'\nimport './blocks/blocks'\nimport './plugins/sidebar-share'\nimport './plugins/share-block-btn'\nimport './plugins/export'\nimport './plugins/export-page-menu-item'\nimport './plugins/library-context-menu-item'\nimport TooltipBox from './challenge/tooltip/TooltipBox';\nimport {handlingLocalStorageData} from './stores/helper';\nimport ReduxTemplatesChallenge from './challenge'\nimport {ModalManager} from './modal-manager';\nimport LibraryModal from './modal-library';\nimport './custom-css'\nimport WelcomeGuide from './components/welcome-guide';\n\ndomReady(() => {\n setTimeout(() => {\n const challengeDiv = document.createElement('div');\n challengeDiv.className = 'challenge-tooltip-holder';\n document.body.appendChild(challengeDiv);\n const challengeWrapperDiv = document.createElement('div');\n challengeWrapperDiv.className = 'challenge-wrapper';\n document.body.appendChild(challengeWrapperDiv);\n\n if (window.location.hash == '#redux_challenge=1') {\n window.location.hash = '';\n ModalManager.open(<LibraryModal />);\n }\n\t\tif (window.location.hash == '#redux_templates=1') {\n\t\t\twindow.location.hash = '';\n\t\t\tModalManager.open(<LibraryModal />);\n }\n\n // For frontenberg, we open the dialog automatically.\n if (document.body.classList.contains( 'wp-admin' ) === false) {\n ModalManager.open(<LibraryModal />);\n }\n render(<ReduxTemplatesChallenge />, challengeWrapperDiv);\n render(<TooltipBox />, challengeDiv);\n\t\trender(<WelcomeGuide />, challengeDiv)\n handlingLocalStorageData();\n }, 500)\n});\n","/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n'\nimport { ModalManager } from '~redux-templates/modal-manager';\nimport Form from '@rjsf/core';\nimport {BlockPreview} from '@wordpress/block-editor';\nconst {useState} = wp.element;\nconst {apiFetch} = wp;\n\nfunction FeedbackDialog(props) {\n const {title, description, schema, uiSchema, headerImage, headerIcon, data, ignoreData, endpoint, width, buttonLabel} = props;\n const {closeModal, onSuccess} = props;\n\n const [loading, setLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState(null);\n\n const onSubmit = ({formData}) => {\n const path = `redux/v1/templates/${endpoint ? endpoint : 'feedback'}`;\n if (loading) return;\n setLoading(true);\n apiFetch({\n path,\n method: 'POST',\n data: ignoreData ? formData : {...data, ...formData}\n }).then(data => {\n setLoading(false);\n if (data.success) {\n setErrorMessage(null);\n if (onSuccess) onSuccess(data); else onCloseModal();\n } else {\n console.log('There was an error: ', data);\n setErrorMessage(__('An unexpected error occured, please try again later.', redux_templates.i18n));\n }\n }).catch(err => {\n setLoading(false);\n console.log('There was an error: ', err);\n setErrorMessage(__('An unexpected error occured, please try again later.', redux_templates.i18n));\n });\n }\n\n const onCloseModal = () => {\n if (closeModal) closeModal(); else ModalManager.closeFeedback();\n }\n\n const style = width ? {width} : null;\n const wrapperClassname = width ? 'redux-templates-modal-wrapper feedback-popup-wrapper less-margin' : 'redux-templates-modal-wrapper feedback-popup-wrapper';\n\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className={wrapperClassname} style={style}>\n <div className=\"feedback-popup-header feedback-popup-header-contact\">\n {headerImage}\n {headerIcon}\n <a className=\"feedback-popup-close\" onClick={onCloseModal}>\n <i className='fas fa-times' />\n </a>\n </div>\n <div className=\"feedback-popup-content\">\n <h3>{title}</h3>\n {errorMessage && <p className=\"error-message\">{errorMessage}</p>}\n <p>{description}</p>\n <div className=\"col-wrapper\">\n <Form schema={schema} uiSchema={uiSchema} onSubmit={onSubmit}>\n <button className=\"feedback-popup-btn feedback-popup-rate-btn\" type=\"submit\">\n {loading && <i className=\"fas fa-spinner fa-pulse\"/>}\n {buttonLabel}\n </button>\n </Form>\n { data && data.editor_blocks &&\n <div className=\"preview-panel\">\n <div className=\"redux-templates-block-preview-hover\" />\n <BlockPreview blocks={data.editor_blocks} />\n </div>\n }\n </div>\n </div> {/* /.feedback-popup-content */}\n </div>\n </div>\n );\n}\n\nexport default FeedbackDialog;\n","import React from 'react';\nconst {useState, useEffect, useRef} = wp.element;\nconst {Spinner} = wp.components;\nimport TextTransition, { presets } from 'react-text-transition';\nconst {__} = wp.i18n\n\nconst MESSAGE_DELAY_MILLISECONDS = 4000;\n\nconst MESSAGES_LIST = [\n __('Please wait while your template is prepared.', redux_templates.i18n),\n __('Fetching the template.', redux_templates.i18n),\n __('We\\'re getting closer now.', redux_templates.i18n),\n __('Wow, this is taking a long time.', redux_templates.i18n),\n __('Gah, this should be done by now!', redux_templates.i18n),\n __('Really, this should be done soon.', redux_templates.i18n),\n __('Are you sure your internet is working?!', redux_templates.i18n),\n __('Give up, it looks like it didn\\'t work...', redux_templates.i18n),\n];\n\nfunction useInterval(callback, delay) {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nexport default function ImportingStep(props) {\n const [messageIndex, setMessageIndex] = useState(0);\n const [loadingMessage, setLoadingMessage] = useState(MESSAGES_LIST[0]);\n\n useInterval(() => {\n if (messageIndex === MESSAGES_LIST.length) return;\n setMessageIndex(messageIndex => messageIndex + 1);\n setLoadingMessage([MESSAGES_LIST[messageIndex + 1]]);\n }, MESSAGE_DELAY_MILLISECONDS)\n\n return (\n <div className=\"redux-templates-modal-body\">\n <div className=\"redux-templates-import-wizard-spinner-wrapper\">\n <TextTransition\n text={loadingMessage}\n springConfig={presets.gentle}\n />\n <Spinner/>\n </div>\n </div>\n );\n};\n","import {pluginInfo} from '~redux-templates/stores/dependencyHelper';\n\nconst {apiFetch} = wp;\nconst {compose} = wp.compose;\nconst {withDispatch} = wp.data;\nconst {Fragment, useState} = wp.element;\nconst {__} = wp.i18n;\n\nfunction InstallPluginStep(props) {\n\n const {missingPlugins, toNextStep, onCloseWizard} = props;\n const {setInstalledDependencies} = props;\n const [installingPlugin, setInstallingPlugin] = useState(null);\n const [installedList, setInstalledList] = useState([]);\n const [failedList, setFailedList] = useState([]);\n const [waitingList, setWaitingList] = useState(missingPlugins);\n\n const preInstallInit = () => {\n setInstalledList([]);\n setFailedList([]);\n setWaitingList(missingPlugins);\n setInstallingPlugin(null);\n setInstalledDependencies(false);\n }\n\n const onInstallPlugins = async () => {\n preInstallInit();\n let localInstalledList = [];\n let localFailedList = [];\n let localWaitingList = [...waitingList];\n for (let pluginKey of missingPlugins) {\n const pluginInstance = redux_templates.supported_plugins[pluginKey];\n localWaitingList = localWaitingList.filter(key => key !== pluginKey)\n setWaitingList(localWaitingList);\n if (!pluginKey || !pluginInstance) {\n setInstallingPlugin(null);\n break;\n }\n setInstallingPlugin({...pluginInstance, pluginKey});\n const reduxProSurfix = (pluginInstance.redux_pro) ? '&redux_pro=1' : '';\n await apiFetch({\n path: 'redux/v1/templates/plugin-install?slug=' + pluginKey + reduxProSurfix,\n }).then(res => {\n if (res.success) {\n setInstalledDependencies(true);\n localInstalledList = [...localInstalledList, pluginKey];\n setInstalledList(localInstalledList);\n if (localWaitingList.length === 0) setInstallingPlugin(null);\n } else {\n localFailedList = [...localFailedList, pluginKey]\n setFailedList(localFailedList);\n if (localWaitingList.length === 0) setInstallingPlugin(null);\n }\n })\n .catch(res => {\n localFailedList = [...localFailedList, pluginKey]\n setFailedList(localFailedList);\n if (localWaitingList.length === 0) setInstallingPlugin(null);\n });\n }\n }\n if (waitingList.length === 0 && failedList.length === 0 && installingPlugin === null)\n toNextStep();\n return (\n\n <Fragment>\n <div className=\"redux-templates-modal-body\">\n <h5>{__('Install Required Plugins', redux_templates.i18n)}</h5>\n <p>{__('Plugins needed to import this template are missing. Required plugins will be installed and activated automatically.', redux_templates.i18n)}</p>\n {\n (installingPlugin === null && failedList.length > 0) &&\n (<p className='error installError'>\n\t {__('The following plugin(s) failed to install properly. Please manually install them yourself before attempting another import.', redux_templates.i18n)}\n </p>)\n }\n\n <ul className=\"redux-templates-import-progress\">\n {\n missingPlugins &&\n missingPlugins.map(pluginKey => {\n\n let plugin = pluginInfo(pluginKey)\n\n if (installingPlugin && installingPlugin.pluginKey === pluginKey)\n return (\n <li className=\"installing\" key={installingPlugin.pluginKey}>{installingPlugin.name}\n <i className=\"fas fa-spinner fa-pulse\"/></li>);\n if (failedList.includes(pluginKey))\n return (<li className=\"failure\" key={pluginKey}>{plugin.name} <a href={plugin.url} target=\"_blank\"><i className=\"fas fa-external-link-alt\"/></a></li>);\n if (waitingList.includes(pluginKey))\n return (<li className=\"todo\" key={pluginKey}>{plugin.name} {plugin.url &&\n <a href={plugin.url} target=\"_blank\"><i className=\"fas fa-external-link-alt\"/></a>\n }</li>);\n if (installedList.includes(pluginKey))\n return (<li className=\"success\" key={pluginKey}>{plugin.name} <i\n className=\"fas fa-check-square\"/></li>);\n })\n }\n </ul>\n </div>\n <div className=\"redux-templates-modal-footer\">\n {waitingList.length !== 0 &&\n <button className=\"button button-primary\" disabled={installingPlugin !== null}\n onClick={() => onInstallPlugins()}>\n {installingPlugin !== null && <i className=\"fas fa-spinner fa-pulse\"/>}\n <span>{__('Install', redux_templates.i18n)}</span>\n </button>\n }\n <button className=\"button button-secondary\" disabled={installingPlugin !== null}\n onClick={onCloseWizard}>\n {__('Cancel', redux_templates.i18n)}\n </button>\n </div>\n </Fragment>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setInstalledDependencies\n } = dispatch('redux-templates/sectionslist');\n return {\n setInstalledDependencies\n };\n })\n])(InstallPluginStep);\n","import {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nimport {Tooltip} from '@wordpress/components';\n\nconst {apiFetch} = wp;\nconst {compose} = wp.compose;\nconst {withDispatch} = wp.data;\nconst {Fragment, useState} = wp.element;\nconst {__} = wp.i18n;\n\nfunction OptionStep(props) {\n\n const {setImportToAppend, toNextStep, onCloseWizard} = props;\n\n const onNextStep = (isToAppend) => {\n setImportToAppend(isToAppend);\n toNextStep();\n }\n\n return (\n\n <Fragment>\n <div className=\"redux-templates-modal-body\">\n <h5>{__('Append or Replace', redux_templates.i18n)}</h5>\n <p>{__('You have existing content on this page. How would you like to handle the import of this page template?', redux_templates.i18n)}</p>\n\t <div style={{textAlign:'center', marginTop: '30px'}}>\n\t\t {/*<Tooltip text={__('This template will be added to the bottom of the existing content.', redux_templates.i18n)} position=\"bottom center\">*/}\n\t\t\t <button className=\"button button-primary\" onClick={() => onNextStep(true)} style={{marginRight: '10px'}}>\n\t\t\t\t {__('Append to Content', redux_templates.i18n)}\n\t\t\t </button>\n\t\t {/*</Tooltip>*/}\n\t\t {/*<Tooltip text={__('All the existing content will be replaced with this new template.', redux_templates.i18n)} position=\"top right\">*/}\n\t\t\t <button className=\"button button-primary\" onClick={() => onNextStep(false)}>\n\t\t\t\t {__('Replace all Content', redux_templates.i18n)}\n\t\t\t </button>\n\t\t {/*</Tooltip>*/}\n\t </div>\n </div>\n <div className=\"redux-templates-modal-footer\">\n <button className=\"button button-secondary\" onClick={onCloseWizard}>\n {__('Cancel', redux_templates.i18n)}\n </button>\n </div>\n </Fragment>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setImportToAppend\n } = dispatch('redux-templates/sectionslist');\n return {\n setImportToAppend\n };\n })\n])(OptionStep);\n","const {Fragment} = wp.element;\nconst {__} = wp.i18n;\n\nimport ReduxTemplatesPremiumBox from './ReduxTemplatesPremiumBox';\nimport {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nconst REDUXTEMPLATES_PRO_KEY = 'redux-pro';\nexport default function ProPluginStep(props) {\n const {missingPros, onCloseWizard} = props;\n\n if ( missingPros.indexOf(REDUXTEMPLATES_PRO_KEY) >= 0 ) return <ReduxTemplatesPremiumBox />\n return (\n <Fragment>\n <div className=\"redux-templates-modal-body\">\n <h5>{__('Additional Plugins Required', redux_templates.i18n)}</h5>\n <p>{__('The following premium plugin(s) are required to import this template:', redux_templates.i18n)}</p>\n <ul className=\"redux-templates-import-progress\">\n {\n missingPros.map(pluginKey => {\n let plugin = pluginInfo(pluginKey)\n return (\n <li className='installing' key={pluginKey}>\n {plugin.name} {plugin.url &&\n <a href={plugin.url} target=\"_blank\"><i className=\"fas fa-external-link-alt\"/></a>\n }\n </li>);\n })\n }\n </ul>\n\n </div>\n <div className=\"redux-templates-modal-footer\">\n <a className=\"button button-secondary\" onClick={onCloseWizard}>\n {__('Close', redux_templates.i18n)}\n </a>\n </div>\n </Fragment>\n );\n}\n\n","const {__} = wp.i18n\n\n\nexport default function ReduxTemplatesActivateBox({onActivateRedux, activating}) {\n\n return (\n <div className=\"redux-templates-modal-body\">\n <div className=\"section-box premium-box\">\n <h3>{__('Registration Required to Import Templates', redux_templates.i18n)}</h3>\n <p>{__(' Register now to import templates from the Redux template library in a single click.', redux_templates.i18n)}</p>\n <ul>\n <li><strong>{__('Unlimited', redux_templates.i18n)}</strong> {__('use of our free templates.', redux_templates.i18n)}</li>\n\t <li><strong>{__('Updates', redux_templates.i18n)}</strong> {__('to the library.', redux_templates.i18n)}</li>\n <li><strong>{__('Google Fonts', redux_templates.i18n)}</strong> {__('manual updates.', redux_templates.i18n)}</li>\n </ul>\n <p>\n\t <button className=\"button button-primary\"\n\t disabled={activating}\n\t onClick={() => onActivateRedux()}>\n\t\t {activating && <i className=\"fas fa-spinner fa-pulse\" style={{marginRight:'5px'}}/>}\n\t\t <span>{__('Register for Free', redux_templates.i18n)}</span>\n\t </button>\n </p>\n\t <p style={{fontSize:'1.1em'}}><small><em dangerouslySetInnerHTML={{__html: redux_templates.tos}} /></small></p>\n </div>\n </div>\n );\n}\n","const {__} = wp.i18n\n\nexport default function ReduxTemplatesPremiumBox(props) {\n return (\n <div className=\"redux-templates-modal-body\">\n <div className=\"section-box premium-box\">\n <h3>{__('Upgrade to Redux Pro', redux_templates.i18n)}</h3>\n\n <p>{__('Thanks for giving our library a try! Upgrade to Redux Pro to unlock even more designs and to continue using our library.', redux_templates.i18n)}</p>\n <ul>\n\t <li><strong>{redux_templates.stats.sections}</strong> {__('Section Templates', redux_templates.i18n)}</li>\n\t <li><strong>{redux_templates.stats.pages}</strong> {__('Full Page Templates', redux_templates.i18n)}</li>\n\t <li><strong>{redux_templates.stats.collections}</strong> {__('Template Kits', redux_templates.i18n)}</li>\n <li><strong>{__('And so much more!', redux_templates.i18n)}</strong></li>\n </ul>\n <p>\n <a href={redux_templates.u + 'import_wizard'} className=\"redux-templates-upgrade-button\" title=\"{__('Redux Pro', redux_templates.i18n)}\"\n target='_blank'>{__('Upgrade Now', redux_templates.i18n)}</a>\n </p>\n </div>\n </div>\n );\n}\n","const {__} = wp.i18n;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect} = wp.element;\nconst {apiFetch} = wp;\n\nimport InstallPluginStep from './InstallPluginStep';\nimport ProPluginStep from './ProPluginsStep';\nimport OptionStep from './OptionStep';\nimport ImportingStep from './ImportingStep';\nimport ReduxTemplatesPremiumBox from './ReduxTemplatesPremiumBox';\nimport ReduxTemplatesActivateBox from './ReduxTeamplatesActivateBox';\n\nimport {requiresInstall, requiresPro, requiresReduxPro, isReduxProInstalled} from '~redux-templates/stores/dependencyHelper'\n\nimport '../modals.scss'\nimport './style.scss'\n\nconst PRO_STEP = 0;\nconst PLUGIN_STEP = 1;\nconst OPTION_STEP = 2;\nconst IMPORT_STEP = 3;\nconst REDUX_PRO_STEP = -1;\nconst REDUX_ACTIVATE_STEP = 999;\nconst tourPlugins = ['qubely', 'kioken-blocks'];\n\nfunction ImportWizard(props) {\n const {startImportTemplate, setImportingTemplate, setActivateDialogDisplay, appendErrorMessage} = props;\n const {isChallengeOpen, importingTemplate, activateDialogDisplay, isPostEmpty, isInstalledDependencies} = props;\n const [currentStep, setCurrentStep] = useState(PRO_STEP);\n const [importing, setImporting] = useState(false);\n const [activating, setActivating] = useState(false);\n const [missingPlugins, setMissingPlugins] = useState([]);\n\n useEffect(() => {\n if (importingTemplate) {\n \tif ( !importingTemplate.proDependenciesMissing ) {\n\t\t importingTemplate.proDependenciesMissing = [];\n\t }\n\t if ( !importingTemplate.installDependenciesMissing ) {\n\t\t importingTemplate.installDependenciesMissing = [];\n\t }\n // IMPORTANT First check: can you use redux pro?\n const leftTry = isNaN(redux_templates.left) === false ? parseInt(redux_templates.left) : 0;\n if (redux_templates.mokama !== '1' && leftTry < 1) {\n //setCurrentStep(REDUX_ACTIVATE_STEP);\n\t setCurrentStep(REDUX_PRO_STEP);\n return;\n }\n /* Redux pro check */\n if (requiresReduxPro(importingTemplate)) {\n setCurrentStep(REDUX_PRO_STEP);\n return;\n }\n // Start with Pro step\n // When all OK with Pro Step, move to Plugin Step, on the way, prepare reduxProMergedPlugins.\n if (importingTemplate && currentStep === PRO_STEP && requiresPro(importingTemplate) === false) {\n setCurrentStep(PLUGIN_STEP);\n if (isReduxProInstalled()) {\n setMissingPlugins(\n [].concat(importingTemplate.proDependenciesMissing, importingTemplate.installDependenciesMissing)\n .filter(plugin => plugin)\n );\n } else {\n\t setMissingPlugins(importingTemplate.installDependenciesMissing.filter(plugin => plugin));\n }\n\n }\n if (importingTemplate && currentStep === PLUGIN_STEP && requiresInstall(importingTemplate) === false)\n if (isPostEmpty === false) setCurrentStep(OPTION_STEP); else setCurrentStep(IMPORT_STEP);\n if (importingTemplate && currentStep === OPTION_STEP && isPostEmpty === true)\n setCurrentStep(IMPORT_STEP);\n if (importingTemplate && currentStep === IMPORT_STEP && importing === false) {\n setImporting(true);\n try {\n startImportTemplate();\n } catch (e) {\n console.log('importing exception', e);\n setImporting(false);\n setCurrentStep(PLUGIN_STEP);\n setImportingTemplate(null);\n }\n }\n }\n }, [importingTemplate, currentStep, activateDialogDisplay])\n\n // Activate dialog disply\n useEffect(() => {\n if (activateDialogDisplay === true) { // Activate dialog hard reset case\n setCurrentStep(REDUX_ACTIVATE_STEP);\n setActivateDialogDisplay(false);\n }\n }, [activateDialogDisplay]);\n\n // On the initial loading\n useEffect(() => {\n setActivateDialogDisplay(false);\n }, []);\n\n const toNextStep = () => {\n if (isChallengeOpen) return;\n setCurrentStep(currentStep + 1);\n };\n\n const onCloseWizard = () => {\n if (isChallengeOpen) return; // When in tour mode, we don't accept mouse event.\n if (importing) return;\n setCurrentStep(PLUGIN_STEP);\n setImportingTemplate(null);\n };\n\n const activateReduxTracking = () => {\n setActivating(true);\n\t apiFetch({path: 'redux/v1/templates/activate'}).then(response => {\n\t\t if (response.success) {\n\t\t\t redux_templates.left = response.data.left;\n\t\t }\n\t\t setCurrentStep(PRO_STEP);\n\t\t setActivating(false);\n\t }).catch(error => {\n\t\t appendErrorMessage(error.code + ' : ' + error.message);\n\t\t setCurrentStep(PRO_STEP);\n\t\t setActivating(false);\n\t });\n }\n\n\n if (isChallengeOpen) {\n // exception handling for tour mode\n if (currentStep !== PLUGIN_STEP) setCurrentStep(PLUGIN_STEP)\n }\n\n if (!importingTemplate) return null;\n return (\n <div className=\"redux-templates-modal-overlay\">\n <div className=\"redux-templates-modal-wrapper\" data-tut=\"tour__import_wizard\">\n <div className=\"redux-templates-modal-header\">\n <h3>{__('Import Wizard', redux_templates.i18n)}</h3>\n <button className=\"redux-templates-modal-close\" onClick={onCloseWizard}>\n <i className={'fas fa-times'}/>\n </button>\n </div>\n <div className=\"redux-templates-importmodal-content\">\n {(currentStep === PRO_STEP) && requiresPro(importingTemplate) &&\n <ProPluginStep missingPros={importingTemplate.proDependenciesMissing } onCloseWizard={onCloseWizard} />}\n {(currentStep === PLUGIN_STEP) &&\n <InstallPluginStep missingPlugins={isChallengeOpen ? tourPlugins : missingPlugins} toNextStep={toNextStep}\n onCloseWizard={onCloseWizard}/>}\n {currentStep === OPTION_STEP && <OptionStep toNextStep={toNextStep} onCloseWizard={onCloseWizard} />}\n {currentStep === IMPORT_STEP && <ImportingStep />}\n\t {currentStep === REDUX_ACTIVATE_STEP && <ReduxTemplatesActivateBox onActivateRedux={activateReduxTracking} activating={activating} />}\n {currentStep === REDUX_PRO_STEP && <ReduxTemplatesPremiumBox />}\n {isInstalledDependencies && <iframe src='./' width=\"0\" height=\"0\" />}\n </div>\n </div>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setImportingTemplate, setActivateDialogDisplay, appendErrorMessage} = dispatch('redux-templates/sectionslist');\n return {\n setImportingTemplate,\n setActivateDialogDisplay,\n appendErrorMessage\n };\n }),\n\n withSelect((select, props) => {\n const {getChallengeOpen, getImportingTemplate, getActivateDialogDisplay, getInstalledDependencies} = select('redux-templates/sectionslist');\n const {isEditedPostEmpty} = select('core/editor');\n return {\n isChallengeOpen: getChallengeOpen(),\n importingTemplate: getImportingTemplate(),\n activateDialogDisplay: getActivateDialogDisplay(),\n isPostEmpty: isEditedPostEmpty(),\n isInstalledDependencies: getInstalledDependencies()\n };\n })\n])(ImportWizard);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst { useState, useEffect} = wp.element;\nimport '../stores';\n\nimport {Modal, ModalManager} from '../modal-manager'\nimport TabHeader from '../components/tab-header';\nimport WithSidebarLayout from './layout-with-sidebar';\nimport CollectionView from './view-collection';\nimport SavedView from './view-saved';\nimport ImportWizard from '../modal-import-wizard';\nimport ErrorNotice from '../components/error-notice';\nimport ChallengeFinalTemplate from '~redux-templates/challenge/final-templates';\nimport FabWrapper from '../components/fab-wrapper';\nimport {processImportHelper} from '~redux-templates/stores/actionHelper';\nimport './style.scss'\n\n\nfunction LibraryModal(props) {\n const {\n fetchLibraryFromAPI, activeCollection, activeItemType, errorMessages, importingTemplate, challengeFinalStatus, isChallengeOpen,\n setLoading, setImportingTemplate, clearSearch, clearState\n } = props;\n const [loaded, setLoaded] = useState(false);\n const [escKeyPressed, setEscKeyPressed] = useState(false);\n\n let stateLibrary = null;\n useEffect(() => {\n\t\tclearState();\n stateLibrary = fetchLibraryFromAPI();\n if (stateLibrary === null && loaded === false) { // One to be called at first.\n setLoading(true);\n setLoaded(true);\n }\n const handleKeyUp = ({keyCode}) => {\n if (keyCode === 27) {\n setEscKeyPressed(true);\n }\n }\n document.addEventListener('keyup', handleKeyUp);\n return () => {\n document.removeEventListener('keyup', handleKeyUp);\n }\n }, []);\n\n useEffect(() => {\n if (escKeyPressed) {\n setEscKeyPressed(false);\n if (ModalManager.isCustomizerOpened()) {\n ModalManager.closeCustomizer();\n } else {\n if (importingTemplate)\n setImportingTemplate(null);\n else {\n ModalManager.close();\n }\n }\n }\n }, [escKeyPressed])\n\n const hasSidebar = () => {\n return ((activeItemType !== 'collection' || activeCollection === null) && activeItemType !== 'saved');\n }\n\n // read block data to import and give the control to actual import\n const processImport = () => {\n if (importingTemplate) processImportHelper();\n }\n\n\n return (\n <Modal className=\"redux-templates-builder-modal-pages-list\"\n customClass=\"redux-templates-builder-modal-template-list\"\n openTimeoutMS={0} closeTimeoutMS={0}>\n <TabHeader/>\n {\n errorMessages && errorMessages.length > 0 &&\n <ErrorNotice errorMessages={errorMessages}/>\n }\n <div className=\"redux-templates-collections-modal-body\">\n {hasSidebar() && <WithSidebarLayout/>}\n {(hasSidebar() === false && activeItemType === 'collection') && <CollectionView/>}\n {(hasSidebar() === false && activeItemType !== 'collection') && <SavedView/>}\n </div>\n {\n importingTemplate && <ImportWizard startImportTemplate={processImport} />\n }\n { (challengeFinalStatus !== '') && <ChallengeFinalTemplate finalStatus={challengeFinalStatus} /> }\n { !isChallengeOpen && <FabWrapper /> }\n </Modal>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setLoading,\n setLibrary,\n setImportingTemplate,\n clearSearch,\n\t\t\tclearState\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setLoading,\n setLibrary,\n setImportingTemplate,\n clearSearch,\n\t\t\tclearState\n };\n }),\n\n withSelect((select) => {\n const {fetchLibraryFromAPI, getActiveCollection, getActiveItemType, getErrorMessages, getImportingTemplate, getChallengeOpen, getChallengeFinalStatus} = select('redux-templates/sectionslist');\n return {\n fetchLibraryFromAPI,\n activeCollection: getActiveCollection(),\n activeItemType: getActiveItemType(),\n errorMessages: getErrorMessages(),\n importingTemplate: getImportingTemplate(),\n challengeFinalStatus: getChallengeFinalStatus(),\n isChallengeOpen: getChallengeOpen()\n };\n })\n])(LibraryModal);\n","const { Fragment } = wp.element;\nimport Sidebar from '../sidebar';\nimport TemplateListSubHeader from '~redux-templates/components/template-list-subheader';\nimport TemplateList from '../view-template-list';\n\nexport default function WithSidebarCollection (props) {\n return (\n <Fragment>\n <div id=\"redux-templates-collection-modal-sidebar\" className=\"redux-templates-collection-modal-sidebar\">\n <Sidebar />\n </div>\n <div className=\"redux-templates-collection-modal-content-area\" data-tut=\"tour__main_body\" id=\"modalContent\">\n <TemplateListSubHeader />\n <TemplateList />\n </div>\n </Fragment>\n );\n}\n","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\n\nimport uniq from 'lodash/uniq';\n\nfunction CategoryFilter (props) {\n const {categoryData, activeCategory, activePriceFilter, loading, itemType} = props;\n const {setActiveCategory} = props;\n\n\n // On the top, All Block, All Template, All Template Kit etc\n const itemTypeLabel = () => {\n if (itemType === 'section') return __('Section', redux_templates.i18n);\n if (itemType === 'page') return __('Template', redux_templates.i18n);\n if (itemType === 'collection') return __('Template Kit', redux_templates.i18n);\n };\n\n const totalItemCountLabel = () => {\n let totalArr = [], filteredArr = [];\n categoryData.forEach((category) => {\n if (category.hasOwnProperty('filteredData')) filteredArr = [...filteredArr, ...category.filteredData];\n totalArr = [...totalArr, ...category.ids];\n });\n return (activePriceFilter !== '') ? uniq(filteredArr).length + '/' + uniq(totalArr).length : uniq(totalArr).length;\n };\n\n const isDisabledCategory = (data) => (data && ((data.hasOwnProperty('filteredData') && data.filteredData.length === 0) || data.ids.length === 0));\n\n const onChangeCategory = (data) => {\n if (isDisabledCategory(data)) return;\n setActiveCategory(data.slug);\n };\n // Give the selected category(activeCategory) label className as \"active\"\n const activeClassname = (data) => {\n const categoryLabel = data ? data.slug : '';\n if (isDisabledCategory(data)) return 'disabled';\n return activeCategory === categoryLabel ? 'active' : '';\n };\n\n return (\n <div>\n <h3>{__('Categories', redux_templates.i18n)}</h3>\n {!loading &&\n <ul className=\"redux-templates-sidebar-categories\">\n {categoryData.length > 0 &&\n <li\n className={activeClassname(null)}\n onClick={() => setActiveCategory('')}>\n {__('All', redux_templates.i18n)} {itemTypeLabel()}s <span>{totalItemCountLabel()}</span>\n </li>\n }\n\n {categoryData &&\n categoryData.map((data, index) => (\n <li className={activeClassname(data)} onClick={() => onChangeCategory(data)}\n key={index}>\n {data.name}\n <span> {data.hasOwnProperty('filteredData') && activePriceFilter !== '' ? data.filteredData.length : data.ids.length } </span>\n </li>\n ))\n }\n </ul>\n }\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setActiveCategory} = dispatch('redux-templates/sectionslist');\n return {\n setActiveCategory\n };\n }),\n\n withSelect((select, props) => {\n const {getCategoryData, getActiveCategory, getActiveItemType, getLoading} = select('redux-templates/sectionslist');\n return {\n categoryData: getCategoryData(),\n activeCategory: getActiveCategory(),\n itemType: getActiveItemType(),\n loading: getLoading(),\n };\n })\n])(CategoryFilter);\n","const {Fragment} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\nimport ChallengeDot from '~redux-templates/challenge/tooltip/ChallengeDot';\n\nimport {CheckboxControl, Tooltip, Button, ButtonGroup} from '@wordpress/components';\nimport DependencyFilterRow from './dependencyFilterRow';\nimport {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nimport {REDUXTEMPLATES_PRO_KEY, NONE_KEY} from '~redux-templates/stores/helper';\n\nfunction DependencyFilter(props) {\n const {dependencyFilters, activeItemType, loading, wholePlugins, dependencyFilterRule} = props;\n const {setDependencyFilters, selectDependencies, setDependencyFilterRule} = props;\n // Give the selected category(activeCategory) label className as \"active\"\n const isNoneChecked = () => {\n if (dependencyFilters.hasOwnProperty(NONE_KEY))\n return dependencyFilters[NONE_KEY].hasOwnProperty('value') ? dependencyFilters[NONE_KEY].value : dependencyFilters[NONE_KEY];\n return false;\n };\n\n const toggleNoneChecked = () => {\n setDependencyFilters({...dependencyFilters,\n [NONE_KEY]: { value: dependencyFilters[NONE_KEY].value === false, disabled: dependencyFilters[NONE_KEY]['disabled'] === true }\n });\n };\n return (\n <Fragment>\n {!loading && wholePlugins &&\n <div id=\"redux-templates-filter-dependencies\" data-tut=\"tour__filter_dependencies\">\n\t <>\n\t\t <ButtonGroup style={{float:'right'}}>\n\t\t\t <Tooltip text={__('Find templates which contain blocks from any of the selected plugins.', redux_templates.i18n)} position=\"top right\">\n\t\t\t\t <Button isSmall isPrimary={dependencyFilterRule === false} isSecondary={dependencyFilterRule} onClick={() => setDependencyFilterRule(false)} disabled={activeItemType === 'collection'}>{__('Any', redux_templates.i18n)}</Button>\n\t\t\t </Tooltip>\n\t\t\t <Tooltip text={__('Find templates that only contain blocks from the selected plugins.', redux_templates.i18n)} position=\"top right\">\n\t\t\t\t <Button isSmall isSecondary={dependencyFilterRule === false} isPrimary={dependencyFilterRule} onClick={() => setDependencyFilterRule(true)} disabled={activeItemType === 'collection'}>{__('Only', redux_templates.i18n)}</Button>\n\t\t\t </Tooltip>\n\t\t </ButtonGroup>\n\t\t <h3>{__('Required Plugins', redux_templates.i18n)} </h3>\n\t </>\n <div className='redux-templates-select-actions'>\n <Tooltip text={__('Select All', redux_templates.i18n)} position=\"top right\"><a href=\"#\" onClick={() => selectDependencies('all')}>{__('All', redux_templates.i18n)}</a></Tooltip>\n\t\t <span>&nbsp; / &nbsp;</span>\n\t\t <Tooltip text={__('Native Blocks Only', redux_templates.i18n)} position=\"top right\"><a href=\"#\" onClick={() => selectDependencies('none')}>{__('None', redux_templates.i18n)}</a></Tooltip>\n <span>&nbsp; / &nbsp;</span>\n <Tooltip text={__('Installed Dependencies', redux_templates.i18n)} position=\"top right\"><a href=\"#\"\n onClick={() => selectDependencies('installed')}>\n {__('Installed', redux_templates.i18n)}</a></Tooltip>\n <span>&nbsp; / &nbsp;</span>\n <Tooltip text={__('Reset Dependencies', redux_templates.i18n)} position=\"top right\">\n <a href=\"#\" onClick={() => selectDependencies('default')}>\n <i className=\"fas fa-undo\" /></a></Tooltip>\n <ChallengeDot step={2} />\n\n </div>\n <ul className=\"redux-templates-sidebar-dependencies\">\n { (loading === false) &&\n <li style={{display: activeItemType === 'collection' ? 'none': '' }}>\n <CheckboxControl\n label={__('Native', redux_templates.i18n)}\n checked={isNoneChecked()}\n onChange={toggleNoneChecked}\n />\n <Tooltip text={__('Only default WordPress blocks used.', redux_templates.i18n)} position='right'>\n <span style={{float:'right', marginRight:'2px'}}><i className=\"fa fa-info-circle\" /></span>\n </Tooltip>\n </li>\n }\n {\n Object.keys(dependencyFilters)\n .filter(pluginKey => (wholePlugins.indexOf(pluginKey)!==-1 || pluginKey === REDUXTEMPLATES_PRO_KEY))\n .sort((a, b) => {\n const pluginInstanceA = pluginInfo(a);\n const pluginInstanceB = pluginInfo(b);\n if (pluginInstanceA.name < pluginInstanceB.name)\n return -1;\n if (pluginInstanceA.name > pluginInstanceB.name)\n return 1;\n return 0;\n })\n .map(pluginKey =>\n <DependencyFilterRow key={pluginKey} pluginKey={pluginKey} />\n )\n }\n </ul>\n </div>\n }\n </Fragment>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setDependencyFilters, selectDependencies, setDependencyFilterRule} = dispatch('redux-templates/sectionslist');\n return {\n setDependencyFilters,\n selectDependencies,\n setDependencyFilterRule\n };\n }),\n\n withSelect((select) => {\n const {getDependencyFiltersStatistics, getLoading, getActiveItemType, getWholePlugins, getDependencyFilterRule} = select('redux-templates/sectionslist');\n return {\n loading: getLoading(),\n dependencyFilters: getDependencyFiltersStatistics(),\n wholePlugins: getWholePlugins(),\n dependencyFilterRule: getDependencyFilterRule(),\n\t activeItemType: getActiveItemType()\n };\n })\n])(DependencyFilter);\n","import React from 'react';\nconst {useState, useEffect, useRef} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\n\nimport {CheckboxControl, Tooltip} from '@wordpress/components';\nimport {pluginInfo} from '~redux-templates/stores/dependencyHelper';\nimport {NONE_KEY} from '~redux-templates/stores/helper';\n\nconst specialPlugins = ['gutenberghub.com', 'editorplus'];\n\nfunction DependencyFilterRow(props) {\n const {pluginKey, dependencyFilters} = props;\n const {setDependencyFilters} = props;\n const [isValidPlugin, setIsValidPlugin] = useState(false);\n const [isChecked, setIsChecked] = useState(false);\n const [pluginInstanceURL, setPluginInstanceURL] = useState('');\n const [pluginInstanceName, setPluginInstanceName] = useState('');\n const [pluginClassname, setPluginClassname] = useState('');\n\n useEffect(() => {\n const pluginInstance = pluginInfo(pluginKey);\n if (!pluginKey || pluginKey === NONE_KEY) {\n setIsValidPlugin(false);\n return;\n }\n if (!pluginInstance || pluginInstance.name == null) {\n setIsValidPlugin(false);\n return;\n }\n setPluginInstanceURL(pluginInstance.url);\n setPluginInstanceName(pluginInstance.name);\n setIsValidPlugin(true);\n }, [pluginKey]);\n\n useEffect(() => {\n const pluginInstance = pluginInfo(pluginKey);\n if (!dependencyFilters) return;\n if (dependencyFilters.hasOwnProperty(pluginKey)) {\n if (dependencyFilters[pluginKey].disabled)\n setIsChecked(false);\n else\n setIsChecked(dependencyFilters[pluginKey].hasOwnProperty('value') ? dependencyFilters[pluginKey].value : dependencyFilters[pluginKey]);\n } else\n setIsChecked(false)\n let pluginClassnameList = [];\n pluginClassnameList.push(!pluginInstance.version && !('no_plugin' in pluginInstance) ? 'missing-dependency' : '');\n pluginClassnameList.push((!dependencyFilters[pluginKey] || dependencyFilters[pluginKey].disabled) ? 'disabled' : '');\n setPluginClassname(pluginClassnameList.join(' '));\n }, [JSON.stringify(dependencyFilters)])\n\n const toggleChecked = () => {\n // disable check first\n if (dependencyFilters[pluginKey] === null || dependencyFilters[pluginKey] === undefined || dependencyFilters[pluginKey].disabled) return;\n // reflect on the item click event.\n let newDependencyFilters = {\n ...dependencyFilters,\n [pluginKey]: { value: dependencyFilters[pluginKey].value === false, disabled: dependencyFilters[pluginKey]['disabled'] === true }\n };\n\n // gutenberg.com, EditorPlus check\n if (specialPlugins.includes(pluginKey)) {\n specialPlugins.forEach((plugin) => {\n newDependencyFilters = {\n ...newDependencyFilters,\n [plugin]: { value: dependencyFilters[pluginKey].value === false, disabled: dependencyFilters[plugin]['disabled'] === true }\n }\n })\n }\n\n // if no item is selected, activate native, other wise conider to deactivate native\n // let valueCount = groupBy(Object.keys(newDependencyFilters), key => (newDependencyFilters[key] === true || newDependencyFilters[key].value === true));\n setDependencyFilters({...newDependencyFilters});\n };\n\n if (isValidPlugin === false) return null;\n\n return (\n <li className={pluginClassname}>\n <CheckboxControl\n label={pluginInstanceName}\n checked={isChecked}\n onChange={toggleChecked}\n />\n {pluginInstanceURL ?\n\t <Tooltip position={'top right'} text={__('Visit Plugin Website', redux_templates.i18n)}><span><a href={pluginInstanceURL} target=\"_blank\">\n <i className=\"fas fa-external-link-alt\" />\n\t </a></span></Tooltip> : null}\n\t {pluginClassname.includes('missing-dependency') &&\n\t <Tooltip position={'top right'} text={__('Not Installed', redux_templates.i18n)}><span className='redux-icon-wrapper'><i className=\"fa fa-exclamation-triangle\" /></span></Tooltip>\n\t }\n </li>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setDependencyFilters} = dispatch('redux-templates/sectionslist');\n return {\n setDependencyFilters\n };\n }),\n\n withSelect((select) => {\n const {getDependencyFiltersStatistics, getLoading, getActiveCategory} = select('redux-templates/sectionslist');\n return {\n loading: getLoading(),\n dependencyFilters: getDependencyFiltersStatistics(),\n activeCategory: getActiveCategory()\n };\n })\n])(DependencyFilterRow);\n","const {withSelect} = wp.data;\n\nimport './style.scss'\n\nimport PriceFilter from './priceFilter';\nimport CategoryFilter from './categoryFilter';\nimport DependencyFilter from './dependencyFilter';\n\nfunction Sidebar(props) {\n const {itemType, layer, loading} = props;\n const hasSidebar = () => {\n return (itemType !== 'collection' || layer === null);\n };\n return (\n <div>\n {\n hasSidebar() &&\n <>\n <PriceFilter/>\n <div className=\"redux-templates-modal-sidebar-content\">\n <CategoryFilter/>\n <DependencyFilter/>\n </div>\n </>\n }\n </div>\n );\n}\n\nexport default withSelect((select) => {\n const {getActiveItemType, getActiveCollection} = select('redux-templates/sectionslist');\n return {\n itemType: getActiveItemType(),\n layer: getActiveCollection()\n };\n})(Sidebar);\n","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n;\n\nfunction PriceFilter (props) {\n\tconst {setActivePriceFilter, activePriceFilter, statistics} = props;\n\n const getClassnames = (priceFilter) => {\n let classNames = [];\n classNames.push((priceFilter === activePriceFilter) ? 'active' : '');\n classNames.push(noStatistics(priceFilter) ? 'disabled' : '');\n return classNames.join(' ');\n }\n\n const noStatistics = (priceFilter) => {\n if (priceFilter === '') return false;\n if (priceFilter === 'free')\n return (!statistics['false'] || statistics['false'] < 1);\n else\n return (!statistics['true'] || statistics['true'] < 1);\n }\n\n return (\n <div className='redux-templates-template-filter-button-group'>\n <button onClick={() => setActivePriceFilter('')}\n className={getClassnames('')}>{__('All', redux_templates.i18n)}</button>\n <button onClick={() => setActivePriceFilter('free')} className={getClassnames('free')}\n disabled={noStatistics('free')}>{__('Free', redux_templates.i18n)}</button>\n <button onClick={() => setActivePriceFilter('pro')} className={getClassnames('pro')}\n disabled={noStatistics('pro')}>\n <img src={redux_templates.plugin + 'assets/img/icon-premium.svg'} alt=\"\"/>\n {__('Premium', redux_templates.i18n)}\n </button>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {setActivePriceFilter} = dispatch('redux-templates/sectionslist');\n return {\n setActivePriceFilter\n };\n }),\n\n withSelect((select, props) => {\n const {getStatistics, getActivePriceFilter} = select('redux-templates/sectionslist');\n return {\n activePriceFilter: getActivePriceFilter(),\n statistics: getStatistics()\n };\n })\n])(PriceFilter);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {useState, useEffect} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {__} = wp.i18n\n\nimport './style.scss'\n\nimport ButtonGroup from '~redux-templates/components/button-group';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper'\n\nconst DURATION_UNIT= 500;\nconst PREVIEW_PANEL_HEIGHT = 515;\n\n// Collection Detail view: preview, item list and import\nfunction CollectionView(props) {\n const {pageData, activeCollectionData} = props;\n const {setActiveCollection} = props;\n const [previewData, setPreviewData] = useState(null);\n const [previewDataIndex, setPreviewDataIndex] = useState(0);\n const [transitionDuration, setTransitionDuration] = useState('1.5s');\n\n const dataLength = pageData.length;\n\n // To be called when switching over\n useEffect(() => {\n if (pageData && pageData[previewDataIndex]) {\n const itemData = pageData[previewDataIndex];\n const backgroundImage = new Image();\n if (itemData.image_full) {\n setPreviewData({...itemData, backgroundImage: itemData.image_full, previewImageClassname: 'details-preview has_full'});\n backgroundImage.src = itemData.image_full;\n } else {\n setPreviewData({...itemData, backgroundImage: itemData.image, previewImageClassname: 'details-preview has_full'})\n backgroundImage.src = itemData.image;\n }\n backgroundImage.onload = function () {\n setTransitionDuration((backgroundImage.height - PREVIEW_PANEL_HEIGHT) / DURATION_UNIT + 's');\n };\n }\n }, [pageData, previewDataIndex]);\n\n if (previewData)\n return (\n <div className=\"redux-templates-collection-details-view\">\n <div className=\"redux-templates-collection-details-left\">\n <div className=\"details-back\" onClick={() => setActiveCollection(null)}>\n <span className=\"dashicons dashicons-arrow-left-alt\"/>&nbsp;{__('Back to Template Kits', redux_templates.i18n)}\n </div>\n <div className={previewData.previewImageClassname} \n style={{backgroundImage: `url('${previewData.backgroundImage}')`, transitionDuration}}>\n </div>\n </div>\n <div className=\"redux-templates-collection-details-right\">\n <div className=\"details-title\">\n <h3>{activeCollectionData.name}</h3>\n <span>{dataLength} {__('pages', redux_templates.i18n)}</span>\n </div>\n <div className=\"details-list\">\n <div className=\"details-inner\">\n {\n pageData.map((detail, index) => {\n let className = (previewData.ID === detail.ID) ? 'detail-select detail-select-active' : 'detail-select';\n let divStyle = {\n backgroundImage: 'url(' + detail.image + ')',\n };\n\n return (\n <div className={className} onClick={() => setPreviewDataIndex(index)} key={index}>\n <div className=\"detail-image\" style={divStyle}>\n {requiresPro(detail) && <span className=\"pro\">{__('Premium', redux_templates.i18n)}</span>}\n {!requiresPro(detail) && requiresInstall(detail) && <span className=\"install\"><i className=\"fas fa-exclamation-triangle\" /></span>}\n <div className=\"detail-label\">{detail.name}</div>\n </div>\n </div>\n );\n })\n }\n </div>\n </div>\n </div>\n <div className=\"redux-templates-collection-details-footer\">\n <div className=\"footer-grid\">\n <ButtonGroup index={previewDataIndex} showDependencyBlock={false} data={previewData} pageData={pageData} />\n </div>\n </div>\n </div>\n );\n return null;\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setActiveCollection\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setActiveCollection\n };\n }),\n\n withSelect((select, props) => {\n const {getPageData, getLoading, getActiveCollectionData, getActiveItemType} = select('redux-templates/sectionslist');\n return {\n pageData: getPageData(),\n loading: getLoading(),\n activeItemType: getActiveItemType(),\n activeCollectionData: getActiveCollectionData()\n };\n })\n])(CollectionView);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const {apiFetch} = wp;\nconst {useState} = wp.element;\nconst {compose} = wp.compose;\nconst {withDispatch} = wp.data;\nconst {Spinner} = wp.components;\nconst {parse} = wp.blocks;\nconst {__} = wp.i18n;\nimport {BlockPreview} from '@wordpress/block-editor';\n\nimport './style.scss'\n\nimport {Modal, ModalManager} from '../../modal-manager'\nimport reject from 'lodash/reject';\n\nfunction SavedView(props) {\n const {insertBlocks, discardAllErrorMessages, appendErrorMessage, clearSearch} = props;\n const [savedSections, setSavedSections] = useState([]);\n const [dataLoaded, setDataLoaded] = useState(false);\n if (dataLoaded === false) {\n // Initial fetch\n apiFetch({path: 'redux/v1/templates/get_saved_blocks'}).then(response => {\n if (response.success) {\n setSavedSections(response.data);\n } else {\n appendErrorMessage(response.data.error);\n }\n setDataLoaded(true);\n }).catch(error => {\n appendErrorMessage(error.code + ' : ' + error.message);\n setDataLoaded(true);\n });\n }\n\n // To display into columns, map data into column-friendly data\n const mapToColumnData = (data, n = 4, balanced = true) => {\n let out = [], i;\n\n for (i = 0; i < n; i++) out[i] = [];\n data.forEach((section, i) => {\n out[i % n].push(section);\n });\n return out;\n }\n\n // saved block import is special\n const importSections = (rawData) => {\n let pageData = parse(rawData);\n insertBlocks(pageData);\n ModalManager.close(); //close modal\n }\n\n const deleteSavedSection = (event, sectionID) => {\n event.stopPropagation();\n discardAllErrorMessages();\n const options = {\n method: 'POST',\n path: 'redux/v1/templates/delete_saved_block/?block_id=' + sectionID,\n }\n apiFetch(options).then(response => {\n if (response.success) {\n // on successful remove, we will update the blocks as well.\n setSavedSections(reject(savedSections, {'ID': sectionID}));\n } else {\n appendErrorMessage(response.data.error);\n }\n }).catch(error => {\n appendErrorMessage(error.code + ' : ' + error.message);\n });\n }\n if (dataLoaded === true)\n return (\n <div className=\"redux-templates-two-sections__grid\">\n {\n (savedSections && savedSections.length > 0) ?\n mapToColumnData(savedSections).map((column, key) => {\n let sections = column.map((section, i) => {\n let blocks = parse(section.post_content);\n return (\n <div className=\"redux-templates-two-section\" key={i}\n onClick={() => importSections(section.post_content)}>\n\n <div className=\"preview-image-wrapper\">\n <BlockPreview blocks={blocks} />\n </div>\n <div className=\"saved-section-title\">\n {section.post_title}\n </div>\n <div className=\"redux-templates-two-section-remove\"\n onClick={e => deleteSavedSection(e, section.ID)}>\n <i className=\"fas fa-trash\"></i>\n </div>\n </div>\n );\n })\n\n return (\n <div className=\"redux-templates-two-sections__grid__column\" key={key}\n style={{width: '25%', flexBasis: '25%'}}>\n {sections}\n </div>\n );\n })\n :\n <div className=\"no-section\">\n Nothing here yet, make a reusuable block first.\n </div>\n }\n </div>\n );\n else\n return (\n <div>\n <div style={{ height: '600px' }}>\n <div className=\"redux-templates-modal-loader\">\n <Spinner />\n </div>\n </div>\n </div>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n insertBlocks\n } = dispatch('core/block-editor');\n\n const {\n appendErrorMessage,\n discardAllErrorMessages\n } = dispatch('redux-templates/sectionslist');\n\n return {\n insertBlocks,\n appendErrorMessage,\n discardAllErrorMessages\n };\n })\n])(SavedView);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","const { useState, useEffect } = wp.element;\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\nconst { Spinner } = wp.components;\n\nimport SingleItem from '../../components/single-item'\nimport MultipleItem from '../../components/multiple-item'\nimport Pagination from '../../components/pagination'\nimport './style.scss'\n\nimport {columnMap, pageSizeMap} from '../../stores/helper';\n\nfunction TemplateList(props) {\n const { pageData, loading, activeItemType, activeCollection, columns, currentPage } = props;\n const { setActiveCollection} = props;\n const [columnizedData, setColumnizedData] = useState([]);\n const [shouldShowPagination, setShouldShowPagination] = useState(false);\n const getBackgroundImage = (url) => {\n if (!url) {\n return redux_templates.plugin + 'assets/img/redux-templates-medium.jpg';\n }\n return url;\n }\n\n const onSelectCollection = (collectionID) => {\n setActiveCollection(collectionID);\n }\n\n useEffect(() => {\n let newData = [], index = 0;\n let colStr = (columns === '') ? 'medium' : columns;\n const columnsCount = columnMap[colStr];\n const pageSize = pageSizeMap[colStr];\n for (let i = 0; i < columnsCount; i++)\n newData[i] = [];\n if (pageData) {\n const lowerLimit = activeItemType !== 'collection' ? (currentPage * pageSize) + 1 : 1;\n const upperLimit = activeItemType !== 'collection' ? (currentPage + 1) * pageSize : pageData.length;\n for ( index = lowerLimit; index <= upperLimit && index <= pageData.length; index++) {\n newData[(index - 1) % columnsCount].push({...pageData[index - 1], index: index - 1});\n }\n }\n setColumnizedData(newData);\n setShouldShowPagination(activeItemType !== 'collection' && pageData && pageSize < pageData.length);\n }, [columns, pageData]);\n\n\n if (!loading)\n return (\n <div id=\"modalContainer\" className=\"redux-templates-template-list-modal\">\n <div className=\"redux-templates-builder-template-list-container\">\n <div id=\"collections-sections-list\" className={`redux-templates-builder-page-templates ${columns}`}>\n { columnizedData &&\n columnizedData.map((columnData, colIndex) => (\n <div className=\"redux-templates-pagelist-column\" key={colIndex}>\n {\n columnData &&\n columnData.map((data, cellIndex) => (\n (activeItemType !== 'collection' || activeCollection !== null) ?\n <SingleItem\n key={cellIndex}\n index={data.index}\n />\n :\n <MultipleItem\n key={cellIndex}\n data={data}\n index={data.index}\n itemType={activeItemType}\n spinner={false}\n onSelectCollection={onSelectCollection}\n />\n ))\n }\n </div>\n ))\n }\n </div>\n { shouldShowPagination && <Pagination /> }\n </div>\n </div>\n );\n return (\n <div>\n <div style={{ height: '600px' }}>\n <div className=\"redux-templates-modal-loader\">\n <Spinner />\n </div>\n </div>\n </div>\n );\n}\n\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setActiveCollection\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setActiveCollection\n };\n }),\n\n withSelect((select, props) => {\n const { getPageData, getLoading, getColumns, getActiveItemType, getActiveCollection, getCurrentPage} = select('redux-templates/sectionslist');\n return { pageData: getPageData(), loading: getLoading(), activeItemType: getActiveItemType(), columns: getColumns(), activeCollection: getActiveCollection(), currentPage: getCurrentPage() };\n })\n])(TemplateList);\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import {__} from '@wordpress/i18n';\nimport {Component, Fragment} from '@wordpress/element';\n\nvar onClose, node, customizerNode, feedbackNode = null;\n\nexport class Modal extends Component {\n constructor(props) {\n super(props)\n this.state = {\n afterOpen: false,\n beforeClose: false,\n }\n }\n\n close() {\n if (!this.props.onRequestClose || this.props.onRequestClose()) {\n if (customizerNode) ModalManager.closeCustomizer()\n else ModalManager.close()\n }\n }\n\n componentDidMount() {\n const {openTimeoutMS, closeTimeoutMS} = this.props\n setTimeout(() => this.setState({afterOpen: true}), openTimeoutMS ? openTimeoutMS : 150)\n\n onClose = (callback) => {\n this.setState({beforeClose: true}, () => {\n this.closeTimer = setTimeout(callback, closeTimeoutMS ? closeTimeoutMS : 150)\n });\n };\n }\n\n componentWillUnmount() {\n onClose = null;\n clearTimeout(this.closeTimer)\n }\n\n render() {\n\n return (\n <Fragment>\n <span onClick={e => {\n this.close()\n }} className={'redux-templates-pagelist-modal-overlay'}>&nbsp;</span>\n <div className={ this.props.compactMode ? 'redux-templates-modal-inner' : 'redux-templates-pagelist-modal-inner'} onClick={e => e.stopPropagation()}>\n {this.props.children}\n </div>\n </Fragment>\n );\n }\n}\n\n\nexport const ModalManager = {\n open(component) {\n if (onClose) {\n this.close();\n // throw __('There is already one modal.It must be closed before one new modal will be opened');\n }\n if (!node) {\n node = document.createElement('div')\n node.className = 'redux-templates-builder-modal'\n document.body.appendChild(node)\n }\n wp.element.render(component, node)\n document.body.classList.add('redux-templates-builder-modal-open')\n },\n close() {\n onClose && onClose(() => {\n wp.element.unmountComponentAtNode(node)\n document.body.classList.remove('redux-templates-builder-modal-open')\n });\n },\n openCustomizer(component) {\n if (!customizerNode) {\n customizerNode = document.createElement('div');\n document.body.appendChild(customizerNode);\n }\n wp.element.render(component, customizerNode);\n },\n closeCustomizer() {\n if (customizerNode) {\n wp.element.unmountComponentAtNode(customizerNode);\n customizerNode = false\n }\n },\n openFeedback(component) {\n feedbackNode = document.getElementsByClassName('feedback-wrapper');\n if (!feedbackNode || feedbackNode.length < 1) {\n feedbackNode = document.createElement('div');\n feedbackNode.className = 'feedback-wrapper';\n document.body.appendChild(feedbackNode);\n } else {\n feedbackNode = feedbackNode[0];\n }\n wp.element.render(component, feedbackNode);\n },\n closeFeedback() {\n if (feedbackNode) {\n wp.element.unmountComponentAtNode(feedbackNode);\n feedbackNode = false;\n }\n },\n isCustomizerOpened() {\n return customizerNode ? true : false;\n },\n hide () {\n document.body.classList.remove('redux-templates-builder-modal-open')\n node.classList.add('hidden')\n },\n show () {\n document.body.classList.add('redux-templates-builder-modal-open')\n if (node)\n node.classList.remove('hidden')\n }\n}\n","const {__} = wp.i18n\n\nfunction FullyOverlayFooter(props) {\n const {previewClass, expandedClass, pro} = props;\n const {onChangePreviewClass, onToggleExpanded, onImport} = props;\n const previewClassesList = [\n {className: 'preview-desktop', screenReaderText: 'Enter desktop preview mode'},\n {className: 'preview-tablet', screenReaderText: 'Enter tablet preview mode'},\n {className: 'preview-mobile', screenReaderText: 'Enter mobile preview mode'}\n ];\n\n const toggleExpanded = () => {\n let nextStatus = (expandedClass === 'collapsed') ? 'expanded' : 'collapsed';\n onToggleExpanded(nextStatus);\n }\n return (\n <div className=\"wp-full-overlay-footer\">\n <div className=\"footer-import-button-wrap redux-templates-import-button-group\">\n\n {\n pro ?\n <div className=\"action-buttons\">\n <a className=\"redux-templates-button-download\" target=\"_blank\" href=\"http://redux-templates.io/\">\n <i className=\"fas fa-upload\"></i>&nbsp;{__('Upgrade to Pro', redux_templates.i18n)}\n </a>\n </div>\n :\n <a className=\"button button-hero hide-if-no-customize button-primary redux-templates-import\"\n onClick={onImport}>\n <i className=\"fas fa-download\"></i>&nbsp;{__('Import', redux_templates.i18n)}\n </a>\n }\n\n </div>\n <button type=\"button\" className=\"collapse-sidebar button\" onClick={toggleExpanded} aria-expanded=\"true\"\n aria-label=\"Collapse Sidebar\">\n <span className=\"collapse-sidebar-arrow\"></span>\n <span className=\"collapse-sidebar-label\">{__('Collapse', redux_templates.i18n)}</span>\n </button>\n\n <div className=\"devices-wrapper\">\n <div className=\"devices\">\n {\n previewClassesList.map((previewObject, i) => {\n return (\n <button type=\"button\"\n className={previewClass === previewObject.className ? previewObject.className + ' active' : previewObject.className}\n aria-pressed=\"true\" key={i}\n onClick={() => onChangePreviewClass(previewObject.className)}>\n <span className=\"screen-reader-text\">{previewObject.screenReaderText}</span>\n </button>\n );\n })\n }\n </div>\n </div>\n\n </div>\n );\n}\n\nexport default FullyOverlayFooter;\n","const {__} = wp.i18n\n\nfunction FullyOverlayHeader(props) {\n const {onCloseCustomizer, onNextBlock, onPrevBlock, onImport, pro} = props;\n return (\n <div className=\"wp-full-overlay-header\">\n <button className=\"close-full-overlay\" onClick={onCloseCustomizer}>\n <span className=\"screen-reader-text\">{__('Close', redux_templates.i18n)}</span>\n </button>\n <button className=\"previous-theme\" onClick={onPrevBlock}>\n <span className=\"screen-reader-text\">{__('Previous', redux_templates.i18n)}</span>\n </button>\n <button className=\"next-theme\" onClick={onNextBlock}>\n <span className=\"screen-reader-text\">{__('Next', redux_templates.i18n)}</span>\n </button>\n {\n pro === false &&\n <a className=\"button hide-if-no-customize button-primary redux-templates-section-import\" onClick={onImport}\n data-import=\"disabled\">\n {__('Import', redux_templates.i18n)}\n </a>\n }\n </div>\n );\n}\n\nexport default FullyOverlayHeader;\n","import {Tooltip, Panel, PanelBody, PanelRow} from '@wordpress/components';\nimport {more} from '@wordpress/icons';\n\n\nconst {useState, useEffect} = wp.element\nconst {__} = wp.i18n\n\nimport * as Icons from '~redux-templates/icons'\nimport copy from 'clipboard-copy';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport {requiresInstall, requiresPro} from '~redux-templates/stores/dependencyHelper'\nimport React from 'react';\n\nexport default function SidebarContent(props) {\n\tconst {itemData, pro} = props;\n\tconst {hash, name, image, blocks, proDependencies, installDependencies, url, source} = itemData;\n\tconst [copied, setCopied] = useState(false);\n\n\tconst copyHash = () => {\n\t\tcopy(hash.substring(0, 7));\n\t\tsetCopied(true);\n\t\tsetTimeout(function () {\n\t\t\tsetCopied(false);\n\t\t}, 3500);\n\t}\n\n\tuseEffect(() => {\n\t\tsetCopied(false);\n\t}, [itemData]);\n\n\n\tif ('redux' === source) {\n\t\tconst source_instance = redux_templates.supported_plugins['redux-framework'];\n\t} else {\n\t\tconst source_instance = redux_templates.supported_plugins[source];\n\t}\n\n\treturn (\n\t\t<div className=\"wp-full-overlay-sidebar-content\">\n\t\t\t<div className=\"install-theme-info\">\n\t\t\t\t<h3 className=\"theme-name\">{name} { url && <Tooltip position={'top right'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext={__('Full Preview', redux_templates.i18n)}><a href={url}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"><i\n\t\t\t\t\tclassName=\"fas fa-external-link-alt\"/></a></Tooltip> }</h3>\n\t\t\t\t<div className=\"theme-screenshot-wrap\">\n\t\t\t\t\t<SafeImageLoad url={image} className=\"theme-screenshot\"/>\n\t\t\t\t\t{pro ?\n\t\t\t\t\t\t<span className=\"redux-templates-pro-badge\">{__('Premium', redux_templates.i18n)}</span> : ''}\n\t\t\t\t</div>\n\n\t\t\t\t<h5 className=\"theme-hash\">\n\t\t\t\t\t<div className=\"button-container\">\n <span className=\"button button-secondary the-copy\" onClick={copyHash}\n\t\t\t\t\t\t\t title={__('Copy Identifier', redux_templates.i18n)}><i\n\t\t\t\t\t\t\tclassName=\"fa fa-copy\" aria-hidden=\"true\"></i></span>\n\t\t\t\t\t\t<span onClick={copyHash} className=\"button button-secondary the-hash\"\n\t\t\t\t\t\t\t title={__('Identifier', redux_templates.i18n)}>{hash.substring(0, 7)}</span>\n\t\t\t\t\t\t{copied && <span className=\"copied hideMe\"><br/>{__('copied', redux_templates.i18n)}</span>}\n\t\t\t\t\t</div>\n\n\t\t\t\t</h5>\n\t\t\t</div>\n\t\t\t{ blocks && blocks.length > 0 &&\n\t\t\t<PanelBody title={__('Blocks Used', redux_templates.i18n)} icon={more} initialOpen={false}>\n\t\t\t\t<PanelRow className=\"redux-block-pills\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tblocks.map((block, i) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<li key={i}><span>{block}</span></li>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t</ul>\n\t\t\t\t</PanelRow>\n\t\t\t</PanelBody>\n\t\t\t}\n\t\t\t{\n\t\t\t\tinstallDependencies && installDependencies.length > 0 &&\n\t\t\t\t<PanelBody title={__('Required Plugins', redux_templates.i18n)} icon={more} initialOpen={false}>\n\t\t\t\t\t<PanelRow className=\"requirements-list-div\">\n\t\t\t\t\t\t<div className=\"requirements-list\">\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinstallDependencies.map(pluginKey => {\n\t\t\t\t\t\t\t\t\t\tconst pluginInstance = redux_templates.supported_plugins[pluginKey];\n\t\t\t\t\t\t\t\t\t\tif (!pluginInstance) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Missing plugin details for ' + pluginKey);\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst plugin_name = pluginKey.replace('-pro', '').replace('-premium', '').replace(/\\W/g, '').toLowerCase();\n\t\t\t\t\t\t\t\t\t\tif ('redux' === plugin_name) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst IconComponent = Icons[plugin_name];\n\t\t\t\t\t\t\t\t\t\treturn (\n\n\t\t\t\t\t\t\t\t\t\t\t<li key={pluginKey}>\n\t\t\t\t\t\t\t\t\t\t\t\t{IconComponent && <IconComponent/>}\n\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"redux-templates-dependency-name\">{pluginInstance.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t{requiresInstall(itemData) &&\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip position={'bottom center'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t text={__('Not Installed', redux_templates.i18n)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className='redux-icon-wrapper'><i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"fa fa-exclamation-triangle\"/></div>\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t{pluginInstance.url ?\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip position={'top right'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t text={__('Visit Plugin Website', redux_templates.i18n)}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"pluginURL\"><a href={pluginInstance.url}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t target=\"_blank\"><i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"fas fa-external-link-alt\"/></a></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip> : null}\n\t\t\t\t\t\t\t\t\t\t\t</li>);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t}\n\t\t\t{\n\t\t\t\t'redux' !== source &&\n\t\t\t\t<PanelBody title={__('Template Details', redux_templates.i18n)} icon={more} initialOpen={false}>\n\t\t\t\t\t<PanelRow className=\"redux-block-pills\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t{'redux' !== source && <li><strong>Author</strong>: {source.slice(0,1).toUpperCase() + source.slice(1, source.length)}</li>}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t}\n\t\t</div>\n\t);\n}\n","import FullyOverlayHeader from './FullyOverlayHeader';\nimport SidebarContent from './SidebarContent';\nimport FullyOverlayFooter from './FullyOverlayFooter';\nimport {isBlockPro} from '../stores/helper';\n\nfunction SitePreviewSidebar(props) {\n const {itemData, previewClass, expandedClass, onImport} = props;\n const {onCloseCustomizer, onChangePreviewClass, onToggleExpanded, onNextBlock, onPrevBlock} = props;\n const isPro = isBlockPro(itemData.pro, itemData.source);\n\n return (\n <div className=\"wp-full-overlay-sidebar\">\n <FullyOverlayHeader onCloseCustomizer={onCloseCustomizer} onNextBlock={onNextBlock}\n onPrevBlock={onPrevBlock}\n pro={isPro} onImport={onImport}/>\n <SidebarContent itemData={itemData} pro={isPro} />\n <FullyOverlayFooter previewClass={previewClass} expandedClass={expandedClass} pro={isPro}\n onChangePreviewClass={onChangePreviewClass} onToggleExpanded={onToggleExpanded}\n onImport={onImport}/>\n </div>\n );\n}\n\n\nexport default SitePreviewSidebar;\n","const {compose} = wp.compose;\nconst {withDispatch, withSelect} = wp.data;\nconst {useState, useEffect, useReducer} = wp.element\nconst {Spinner} = wp.components;\nimport SitePreviewSidebar from './SitePreviewSidebar';\nimport {ModalManager} from '../modal-manager'\nimport ImportWizard from '../modal-import-wizard';\nimport {Fragment} from 'react';\nimport SafeImageLoad from '~redux-templates/components/safe-image-load';\nimport {processImportHelper} from '~redux-templates/stores/actionHelper';\nimport './style.scss';\n\nconst initialState = {\n currentPageData: null,\n currentIndex: 0,\n itemData: null,\n imageURL: ''\n};\n\nconst LOADING_RESET = 0;\nconst IN_PROGRESS = 1;\nconst FULLY_LOADED = 2;\n\nconst previewReducer = (state, action) => {\n let currentPageData;\n let imageURL;\n switch(action.type) {\n case 'INDEX':\n currentPageData = state.currentPageData;\n break;\n case 'DATA':\n currentPageData = action.currentPageData;\n break;\n }\n const itemData = currentPageData[action.currentIndex];\n if (itemData.image_full)\n imageURL = itemData.image_full;\n else\n imageURL = itemData.image\n\n return {\n currentPageData,\n currentIndex: action.currentIndex,\n imageURL,\n itemData\n };\n}\n\nfunction PreviewModal(props) {\n\n const {startIndex, currentPageData} = props;\n const {setImportingTemplate, importingTemplate} = props;\n\n const [state, dispatch] = useReducer(previewReducer, initialState);\n\n const [previewClass, setPreviewClass] = useState('preview-desktop')\n const [expandedClass, toggleExpanded] = useState('expanded')\n const [pressedKey, setPressedKey] = useState(null);\n const [loading, setLoading] = useState(IN_PROGRESS);\n const [wrapperClassName, setWrapperClassName] = useState('wp-full-overlay sites-preview theme-install-overlay ');\n\n // Key event handling : event listener set up\n useEffect(() => {\n const handleKeyDown = ({keyCode}) => {\n setPressedKey(keyCode);\n }\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n }\n }, []);\n\n // Key Event handling\n useEffect(() => {\n if (pressedKey !== null) {\n if (pressedKey === 37) onPrevBlock();\n if (pressedKey === 39) onNextBlock();\n setPressedKey(null);\n }\n }, [pressedKey])\n\n useEffect(() => {\n if (isNaN(startIndex) === false && currentPageData)\n dispatch({ type: 'DATA', currentIndex: startIndex, currentPageData });\n }, [startIndex, currentPageData]);\n\n // mobile/desktop preview status and sidebar collapse/expand\n useEffect(() => {\n setWrapperClassName(['wp-full-overlay sites-preview theme-install-overlay ', previewClass, expandedClass].join(' '));\n }, [previewClass, expandedClass])\n\n const onCloseCustomizer = () => {\n ModalManager.closeCustomizer();\n }\n\n const onNextBlock = () => {\n if (state.currentIndex < currentPageData.length - 1) {\n startLoading();\n dispatch({ type: 'INDEX', currentIndex: state.currentIndex + 1 });\n }\n }\n\n const onPrevBlock = () => {\n if (state.currentIndex > 0) {\n setLoading();\n dispatch({ type: 'INDEX', currentIndex: state.currentIndex - 1 });\n }\n }\n\n const startLoading = () => {\n setLoading(LOADING_RESET);\n setTimeout(() => {\n setLoading(IN_PROGRESS);\n }, 100)\n }\n\n\n const importStarterBlock = () => {\n setImportingTemplate(state.itemData);\n ModalManager.closeCustomizer();\n }\n\n const processImport = () => {\n if (importingTemplate) processImportHelper();\n }\n\n // Called from iframe upon successful loading\n const hideSpinner = () => {\n setLoading(FULLY_LOADED);\n }\n\n if (!state || !state.itemData) return null;\n\n return (\n <Fragment>\n <div className={wrapperClassName} style={{display: 'block'}}>\n <SitePreviewSidebar itemData={state.itemData} previewClass={previewClass} expandedClass={expandedClass}\n onNextBlock={onNextBlock} onPrevBlock={onPrevBlock}\n onCloseCustomizer={onCloseCustomizer} onToggleExpanded={e => toggleExpanded(e)}\n onImport={importStarterBlock}\n onChangePreviewClass={e => setPreviewClass(e)}/>\n <div className=\"wp-full-overlay-main loaded\">\n {\n (loading < FULLY_LOADED) && <Spinner />\n }\n {state.itemData.url &&\n <iframe src={(loading === LOADING_RESET) ? '' : state.itemData.url + '?preview=1'} target='Preview' onLoad={hideSpinner}></iframe>\n }\n {!state.itemData.url &&\n <div className='redux-templates-modal-preview-box'>\n <SafeImageLoad url={state.imageURL} />\n </div>\n }\n\n </div>\n </div>\n { importingTemplate && <ImportWizard startImportTemplate={processImport} /> }\n </Fragment>\n );\n}\n\nexport default compose([\n withDispatch((dispatch) => {\n const {\n setImportingTemplate,\n setCustomizerOpened\n } = dispatch('redux-templates/sectionslist');\n\n return {\n setImportingTemplate,\n setCustomizerOpened\n };\n }),\n\n withSelect((select, props) => {\n const {getImportingTemplate} = select('redux-templates/sectionslist');\n return {\n importingTemplate: getImportingTemplate()\n };\n })\n])(PreviewModal);\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./style.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","\nvar content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./modals.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./modals.scss\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./modals.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\n * WordPress dependencies\n */\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport { download } from '../export/file';\nconst { Fragment } = wp.element;\nimport { colorizeIcon } from '~redux-templates/icons'\n\nimport { Dashicon } from '@wordpress/components';\n\nfunction ExportPageContentMenuItem( { createNotice, editedPostContent } ) {\n if (!wp.plugins) return null;\n\n const { PluginMoreMenuItem } = wp.editPost;\n\n const exportFullpage = () => {\n const fileContent = JSON.stringify( {\n __file: 'core_block',\n content: editedPostContent,\n }, null, 2 );\n\n const fileName = 'page-template-export.json';\n download( fileName, fileContent, 'application/json' );\n }\n\n\n return (\n <Fragment>\n <PluginMoreMenuItem\n icon={ colorizeIcon( <Dashicon icon=\"migrate\" /> ) }\n role=\"menuitemcheckbox\"\n onClick={ exportFullpage }\n >\n { __( 'Export Page', redux_templates.i18n ) }\n </PluginMoreMenuItem>\n </Fragment>\n );\n}\n\nconst ExportPageContentMenu = compose(\n withSelect( ( select ) => ( {\n editedPostContent: select( 'core/editor' ).getEditedPostAttribute(\n 'content'\n ),\n } ) ),\n withDispatch( ( dispatch ) => {\n const { createNotice } = dispatch( 'core/notices' );\n\n return {\n createNotice,\n };\n } ),\n ifCondition( ( { editedPostContent } ) => editedPostContent.length > 0 )\n)( ExportPageContentMenuItem );\n\nif (wp.plugins) {\n const { registerPlugin } = wp.plugins;\n registerPlugin('redux-templates-export-page', {\n render: ExportPageContentMenu,\n });\n}\n","/**\n * External dependencies\n */\nimport { kebabCase } from 'lodash';\n/**\n * Internal dependencies\n */\n\nimport exportReusableBlock from './reusable';\nimport { download } from './file';\nimport { colorizeIcon } from '~redux-templates/icons'\n\n/**\n * WordPress dependencies\n */\nconst { __ } = wp.i18n;\nconst { withSelect, select } = wp.data;\nconst { compose } = wp.compose;\nconst { Fragment } = wp.element;\nconst { withSpokenMessages } = wp.components;\nconst { serialize } = wp.blocks;\nimport { Dashicon } from '@wordpress/components';\n\n/**\n * Render plugin\n */\nfunction ExportManager(props) {\n\tconst { selectedBlockCount, selectedBlock, selectedBlocks } = props;\n\n\tif (!wp.editPost) return null;\n\n\tconst { PluginBlockSettingsMenuItem } = wp.editPost;\n\tconst saveAsJSON = () => {\n\t\tif ( selectedBlockCount < 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet blocks;\n\t\tlet title = 'redux_templates/export';\n\n\t\tif ( selectedBlockCount === 1 ) {\n\t\t\t//export as reusable when reusable is selected\n\t\t\tif ( selectedBlock.name === 'core/block' ) {\n\t\t\t\texportReusableBlock( selectedBlock.attributes.ref );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tblocks = serialize( selectedBlock );\n\t\t\ttitle = selectedBlock.name;\n\t\t}\n\n\t\tif ( selectedBlockCount > 1 ) {\n\t\t\tblocks = serialize( selectedBlocks );\n\t\t}\n\n\t\t//do export magic\n\n\t\tconst fileContent = JSON.stringify( {\n\t\t\t__file: 'core_block',\n\t\t\tcontent: blocks,\n\t\t}, null, 2 );\n\n\t\tconst fileName = 'block-template-' + kebabCase( title ) + '.json';\n\t\tdownload( fileName, fileContent, 'application/json' );\n\t}\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<PluginBlockSettingsMenuItem\n\t\t\t\ticon={ colorizeIcon( <Dashicon icon=\"migrate\" /> ) }\n\t\t\t\tlabel={ __( 'Export Block', redux_templates.i18n ) }\n\t\t\t\tonClick={ saveAsJSON }\n\t\t\t>\n\n\t\t\t</PluginBlockSettingsMenuItem>\n\t\t</Fragment>\n\t);\n}\n\nexport default compose( [\n\twithSelect( () => {\n\t\tconst { getSelectedBlockCount, getSelectedBlock, getMultiSelectedBlocks } = select( 'core/block-editor' );\n\t\tconst { getBlock } = select( 'core/block-editor' );\n\n\t\treturn {\n\t\t\tselectedBlockCount: getSelectedBlockCount(),\n\t\t\tselectedBlock: getSelectedBlock(),\n\t\t\tselectedBlocks: getMultiSelectedBlocks(),\n\t\t\tgetBlock,\n\t\t};\n\t} ),\n\twithSpokenMessages,\n] )( ExportManager );\n","const block_export_json = function (el, type) {\n if (!el) {\n return\n }\n\n if (el) {\n t ? t += '.json' : t = 'block.json', 'object' === ('undefined' === typeof e ? 'undefined' : u(e)) && (el = 1 === a.count ? JSON.stringify(e.shift(), void 0, 4) : JSON.stringify(e, void 0, 4));\n var n = new Blob([el], {\n type: 'text/json'\n }),\n o = document.createEvent('MouseEvents'),\n l = document.createElement('a');\n l.download = t, l.href = window.URL.createObjectURL(n), l.dataset.downloadurl = ['text/json', l.download, l.href].join(':'), o.initMouseEvent('click', !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), l.dispatchEvent(o)\n }\n}\n\nconst block_export_html = function (el, type) {\n if (!el) {\n return\n }\n\n if (el) {\n t ? t += '.json' : t = 'block.json', 'object' === ('undefined' === typeof e ? 'undefined' : u(e)) && (el = 1 === a.count ? JSON.stringify(e.shift(), void 0, 4) : JSON.stringify(e, void 0, 4));\n var n = new Blob([el], {\n type: 'text/json'\n }),\n o = document.createEvent('MouseEvents'),\n l = document.createElement('a');\n l.download = t, l.href = window.URL.createObjectURL(n), l.dataset.downloadurl = ['text/json', l.download, l.href].join(':'), o.initMouseEvent('click', !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), l.dispatchEvent(o)\n }\n}\n\nconst block_export_page = function (el, type) {\n if (!el) {\n return\n }\n\n if (el) {\n t ? t += '.json' : t = 'block.json', 'object' === ('undefined' === typeof e ? 'undefined' : u(e)) && (el = 1 === a.count ? JSON.stringify(e.shift(), void 0, 4) : JSON.stringify(e, void 0, 4));\n var n = new Blob([el], {\n type: 'text/json'\n }),\n o = document.createEvent('MouseEvents'),\n l = document.createElement('a');\n l.download = t, l.href = window.URL.createObjectURL(n), l.dataset.downloadurl = ['text/json', l.download, l.href].join(':'), o.initMouseEvent('click', !0, !1, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, null), l.dispatchEvent(o)\n }\n}\n\n/**\n * Downloads a file.\n *\n * @param {string} fileName File Name.\n * @param {string} content File Content.\n * @param {string} contentType File mime type.\n */\nexport function download( fileName, content, contentType ) {\n const file = new window.Blob( [ content ], { type: contentType } );\n\n // IE11 can't use the click to download technique\n // we use a specific IE11 technique instead.\n if ( window.navigator.msSaveOrOpenBlob ) {\n window.navigator.msSaveOrOpenBlob( file, fileName );\n } else {\n const a = document.createElement( 'a' );\n a.href = URL.createObjectURL( file );\n a.download = fileName;\n\n a.style.display = 'none';\n document.body.appendChild( a );\n a.click();\n document.body.removeChild( a );\n }\n}\n","import ExportManager from './export-block-menu-item';\nif (wp.plugins) {\n\tconst { registerPlugin } = wp.plugins;\n\n\tregisterPlugin( 'redux-templates-export', {\n\t\trender: ExportManager,\n\t} );\n}\n","/**\n * External dependencies\n */\nimport { kebabCase } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { download } from './file';\n\n/**\n * Export a reusable block as a JSON file.\n *\n * @param {number} id\n */\nasync function exportReusableBlock( id ) {\n\tconst postType = await wp.apiFetch( { path: '/wp/v2/types/wp_block' } );\n\tconst post = await wp.apiFetch( { path: '/wp/v2/' + postType.rest_base + '/' + id + '?context=edit' } );\n\tconst title = post.title.raw;\n\tconst content = post.content.raw;\n\tconst fileContent = JSON.stringify( {\n\t\t__file: 'wp_block',\n\t\ttitle,\n\t\tcontent,\n\t}, null, 2 );\n\tconst fileName = kebabCase( title ) + '.json';\n\n\tdownload( fileName, fileContent, 'application/json' );\n}\n\nexport default exportReusableBlock;","/**\n * WordPress dependencies\n */\nimport { withDispatch, withSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { compose, ifCondition } from '@wordpress/compose';\nimport {ModalManager} from '../../modal-manager';\nimport LibraryModal from '../../modal-library';\nimport { ReduxTemplatesIconColor } from '~redux-templates/icons';\n\nconst { Fragment } = wp.element;\n\nfunction OpenLibraryContentMenuItem( ) {\n\tif (!wp.plugins) return null;\n\n\tconst { PluginMoreMenuItem } = wp.editPost;\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<PluginMoreMenuItem\n\t\t\t\ticon={ ReduxTemplatesIconColor() }\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tModalManager.open(<LibraryModal />);\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Template Library', redux_templates.i18n ) }\n\t\t\t</PluginMoreMenuItem>\n\t\t</Fragment>\n\t);\n}\n\nconst OpenLibraryContentMenu = compose(\n\twithSelect( ( select ) => ( {\n\t} ) ),\n\twithDispatch( ( dispatch ) => {\n\t} ),\n\n)( OpenLibraryContentMenuItem );\n\nif (wp.plugins) {\n\tconst { registerPlugin } = wp.plugins;\n\tregisterPlugin('redux-open-library-context', {\n\t\trender: OpenLibraryContentMenu,\n\t});\n}\n","import {noop} from 'lodash'\nimport {Fragment} from '@wordpress/element'\nimport {__} from '@wordpress/i18n'\nimport {select, withDispatch} from '@wordpress/data'\nimport {compose} from '@wordpress/compose'\nimport {PluginBlockSettingsMenuItem} from '@wordpress/edit-post'\nimport { ReduxTemplatesIcon } from '../../icons';\nimport {ModalManager} from '../../modal-manager'\nimport FeedbackDialog from '~redux-templates/modal-feedback';\nimport sortBy from 'lodash/sortBy';\nimport map from 'lodash/map';\nimport {getWithExpiry} from '../../stores/helper';\n\n/**\n * Based on: https://github.com/WordPress/gutenberg/blob/master/packages/editor/src/components/convert-to-group-buttons/convert-button.js\n */\n\n\n/**\n * Internal dependencies\n */\n\nconst options = sortBy(getWithExpiry('page_categories_list'), 'label');\nconst schema = {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n title: 'Block Title'\n },\n category: {\n type: 'string',\n title: 'Category',\n enum: map(options, 'value'),\n enumNames: map(options, 'label')\n },\n description: {\n type: 'string',\n title: 'Description'\n }\n }\n}\nconst uiSchema = {\n title: {\n classNames: 'fixed-control'\n },\n category: {\n classNames: 'fixed-control'\n },\n description: {\n 'ui:widget': 'textarea',\n }\n};\n\nexport function ShareBlockButton({clientIds})\n{\n // Only supported by WP >= 5.3.\n if (!clientIds) {\n return null\n }\n\n const onShareBlock = () => {\n const data = {\n postID: select('core/editor').getCurrentPostId(),\n editor_blocks: select('core/block-editor').getBlocksByClientId(clientIds),\n type: 'block'\n };\n ModalManager.openFeedback(\n <FeedbackDialog\n title={__('Redux Shares', redux_templates.i18n)}\n width={700}\n description={__('Share this design', redux_templates.i18n)}\n schema={schema}\n uiSchema={uiSchema}\n data={data}\n headerImage={<i className=\"fas fa-share header-icon\"></i>}\n endpoint='share'\n onSuccess={data => window.open(data.data.url, '_blank')}\n buttonLabel={__('Submit Template', redux_templates.i18n)}\n />\n )\n }\n\n return (\n <Fragment>\n <PluginBlockSettingsMenuItem\n icon={ReduxTemplatesIcon}\n label={__('Share Block', redux_templates.i18n)}\n onClick={onShareBlock}\n />\n {/*<PluginBlockSettingsMenuItem*/}\n {/* icon={ReduxTemplatesIcon}*/}\n {/* label={__('Export as Reusable Block', redux_templates.i18n)}*/}\n {/* onClick={onExportBlock}*/}\n {/*/>*/}\n </Fragment>\n )\n}\n\nexport default compose([\n\n withDispatch((dispatch, {\n clientIds, onToggle = noop, blocksSelection = [],\n }) => {\n const {\n replaceBlocks,\n } = dispatch('core/block-editor')\n\n return {\n onExportBlock() {\n if (!blocksSelection.length) {\n return\n }\n\n console.log(blocksSelection);\n\n let blocks = wp.data.select('core/block-editor').getBlocks();\n let fileName = 'blocks.json'\n\n const title = select('core/block-editor').getSelectedBlockName();\n const content = select('core/block-editor').getSelectedBlockClientId();\n // const content = post.content.raw;\n const fileContent = JSON.stringify(\n {\n __file: 'wp_block',\n title,\n content,\n },\n null,\n 2\n );\n console.log(fileContent);\n // const theFileName = kebabCase( title ) + '.json';\n //\n // download( theFileName, fileContent, 'application/json' );\n //\n //\n //\n // if (blocksSelection.length == 1) {\n // fileName = blocksSelection[0].name.replace('/', '_') + '.json'\n // }\n //\n // saveData(blocksSelection, fileName, 'json');\n\n onToggle()\n },\n }\n }),\n])(ShareBlockButton)\n","import { withSelect } from '@wordpress/data'\nimport ShareBlockButton from './buttons'\nimport { ReduxTemplatesIcon } from '~redux-templates/icons';\n\nif (wp.plugins) {\n const { registerPlugin } = wp.plugins;\n const Buttons = withSelect( select => {\n const { getSelectedBlockClientIds } = select( 'core/block-editor' )\n\n // Only supported by WP >= 5.3.\n if ( ! getSelectedBlockClientIds ) {\n return {}\n }\n\n return {\n clientIds: getSelectedBlockClientIds(),\n }\n } )( ShareBlockButton );\n\t// TODO - Finish this off and show to users.\n // registerPlugin( 'redux-templates-share-block-btn', {\n // icon: ReduxTemplatesIcon,\n // render: Buttons,\n // } );\n}\n","import Sidebar from './sidebar'\nimport { ReduxTemplatesIcon } from '~redux-templates/icons';\nif (wp.plugins) {\n\tconst { registerPlugin } = wp.plugins;\n\n\t\n\n\tregisterPlugin( 'redux-templates-share', {\n\t\ticon: ReduxTemplatesIcon,\n\t\trender: Sidebar,\n\t} );\n}\n","const {__} = wp.i18n;\nconst {compose} = wp.compose;\nconst {withSelect, select} = wp.data;\nconst {Fragment} = wp.element;\nconst {PanelBody} = wp.components\n\nimport sortBy from 'lodash/sortBy';\nimport map from 'lodash/map';\nimport {ModalManager} from '../../modal-manager'\nimport FeedbackDialog from '~redux-templates/modal-feedback';\nimport {getWithExpiry} from '../../stores/helper';\n\nconst options = sortBy(getWithExpiry('section_categories_list'), 'label');\nconst schema = {\n type: 'object',\n properties: {\n title: {\n type: 'string',\n title: 'Block Title'\n },\n category: {\n type: 'string',\n title: 'Category',\n enum: map(options, 'value'),\n enumNames: map(options, 'label')\n },\n description: {\n type: 'string',\n title: 'Description'\n }\n }\n}\nconst uiSchema = {\n title: {\n classNames: 'fixed-control'\n },\n category: {\n classNames: 'fixed-control'\n },\n description: {\n 'ui:widget': 'textarea',\n }\n};\n\nfunction Sidebar(props) {\n if (!wp.editPost) return null;\n\treturn null; // TODO - Finish fixing this experience.\n const {PluginSidebar, PluginSidebarMoreMenuItem} = wp.editPost;\n const {getEditorBlocks} = props;\n const onShare = () => {\n const data = {\n postID: select('core/editor').getCurrentPostId(),\n editor_blocks: getEditorBlocks(),\n type: 'page'\n };\n ModalManager.openFeedback(\n <FeedbackDialog\n title={__('Redux Shares', redux_templates.i18n)}\n description={__('Share this design', redux_templates.i18n)}\n schema={schema}\n uiSchema={uiSchema}\n data={data}\n width={700}\n headerImage={<i className=\"fas fa-share header-icon\"></i>}\n endpoint='share'\n onSuccess={data => window.open(data.data.url, '_blank')}\n buttonLabel={__('Submit Template', redux_templates.i18n)}\n />\n )\n }\n\n return (\n <Fragment>\n <PluginSidebarMoreMenuItem target=\"redux-templates-share\">\n {__('Redux Template', redux_templates.i18n)}\n </PluginSidebarMoreMenuItem>\n <PluginSidebar name=\"redux-templates-share\" title={__('Redux Shares', redux_templates.i18n)}>\n <PanelBody title={__('Share this Design', redux_templates.i18n)} initialOpen={true}>\n <div className=\"d-flex justify-content-center\">\n <a className=\"button button-primary\" onClick={onShare}>\n <i className=\"fas fa-share\"></i>\n &nbsp;{__('Share this design', redux_templates.i18n)}\n </a>\n </div>\n </PanelBody>\n </PluginSidebar>\n </Fragment>\n );\n}\n\nexport default compose([\n withSelect((select) => {\n const {getEditorBlocks} = select('core/editor');\n return {\n getEditorBlocks\n };\n })\n])(Sidebar);\n","const { parse, createBlock } = wp.blocks;\nconst { apiFetch } = wp;\nconst { dispatch, select } = wp.data;\nconst { getBlockOrder } = select( 'core/block-editor' );\nconst { getBlockTypes } = select('core/blocks');\nconst { savePost, editPost } = dispatch('core/editor');\nconst { insertBlocks, removeBlocks, multiSelect } = dispatch('core/block-editor');\nconst { createSuccessNotice, createErrorNotice, createNotice, removeNotice } = dispatch('core/notices');\nimport { __ } from '@wordpress/i18n'\nimport { ModalManager } from '~redux-templates/modal-manager';\nimport PreviewModal from '../modal-preview';\nimport FeedbackDialog from '~redux-templates/modal-feedback';\n\n\n// create Block to import template\nexport const handleBlock = (data, installedDependencies) => {\n let block_data = null;\n if ('template' in data) {\n block_data = parse(data.template);\n } else if ('attributes' in data) {\n if (!('innerBlocks' in data)) {\n data.innerBlocks = [];\n }\n if (!('name' in data)) {\n errorCallback('Template malformed, `name` for block not specified.');\n }\n // This kind of plugins are not ready to accept before reloading, thus, we save it into localStorage and just reload for now.\n if (installedDependencies === true) {\n window.redux_templates_tempdata = [...window.redux_templates_tempdata, data];\n return null;\n } else {\n block_data = createBlock(data.name, data.attributes, data.innerBlocks)\n }\n } else {\n errorCallback('Template error. Please try again.');\n }\n return block_data;\n}\n\nexport const processImportHelper = () => {\n const { setImportingTemplate, discardAllErrorMessages, clearSearch } = dispatch('redux-templates/sectionslist');\n const type = select('redux-templates/sectionslist').getActiveItemType() === 'section' ? 'sections' : 'pages';\n const data = select('redux-templates/sectionslist').getImportingTemplate();\n const installedDependencies = select('redux-templates/sectionslist').getInstalledDependencies();\n const isImportToAppend = select('redux-templates/sectionslist').getImportToAppend();\n\n if (type === 'pages') {\n \teditPost({'template': 'redux-templates_full_width'});\n } else {\n\t if ( '' === select( 'core/editor' ).getEditedPostAttribute( 'template' ) ) {\n\t\t editPost({'template': 'redux-templates_contained'});\n\t }\n }\n\n discardAllErrorMessages();\n let the_url = 'redux/v1/templates/template?type=' + type + '&id=' + data.id + '&uid=' + window.userSettings.uid;\n if ('source' in data) {\n the_url += '&source=' + data.source;\n }\n\n const options = {\n method: 'GET',\n path: the_url,\n headers: { 'Content-Type': 'application/json', 'Registered-Blocks': installedBlocksTypes() }\n };\n\n if (dispatch('core/edit-post') && select('core/edit-post').getEditorMode() === 'text') {\n const { switchEditorMode } = dispatch('core/edit-post');\n switchEditorMode()\n }\n window.redux_templates_tempdata = [];\n\n apiFetch(options).then(response => {\n // First, let's give user feedback.\n displayNotice(response.data, {type: 'snackbar'});\n \n if (isImportToAppend === false) {\n const rootBlocksClientIds = getBlockOrder();\n multiSelect(\n rootBlocksClientIds[0],\n rootBlocksClientIds[rootBlocksClientIds.length - 1]\n );\n removeBlocks( rootBlocksClientIds );\n }\n\n if (response.success && response.data) {\n let responseBlockData = response.data;\n\n // Important: Update left count from the response in case of no Redux PRO\n if (redux_templates.mokama !== '1' && isNaN(responseBlockData.left) === false)\n redux_templates.left = responseBlockData.left;\n\n let handledData = [];\n if (responseBlockData.hasOwnProperty('template') || responseBlockData.hasOwnProperty('attributes'))\n handledData = handleBlock(responseBlockData, installedDependencies);\n else\n handledData = Object.keys(responseBlockData).filter(key => key !== 'cache')\n .map(key => handleBlock(responseBlockData[key], installedDependencies));\n\n localStorage.setItem('importing_data', JSON.stringify(data));\n localStorage.setItem('block_data', JSON.stringify(redux_templates_tempdata));\n localStorage.setItem('is_appending', isImportToAppend);\n\n insertBlocks(handledData);\n createSuccessNotice('Template inserted', { type: 'snackbar' });\n\n if (installedDependencies === true)\n savePost()\n .then(() => window.location.reload())\n .catch(() => createErrorNotice('Error while saving the post', { type: 'snackbar' }));\n else {\n ModalManager.close();\n ModalManager.closeCustomizer();\n setImportingTemplate(null);\n }\n afterImportHandling(data, handledData);\n\n } else {\n if (response.success === false)\n errorCallback(response.data.message);\n else\n errorCallback(response.data.error);\n }\n }).catch(error => {\n errorCallback(error.code + ' : ' + error.message);\n });\n}\n\nconst detectInvalidBlocks = (handleBlock) => {\n if (Array.isArray(handleBlock) === true) return handleBlock.filter(block => block.isValid === false);\n return handleBlock && handleBlock.isValid===false ? [handleBlock] : null;\n}\n\n// used for displaying notice from response data\nconst displayNotice = (data, options) => {\n if (data && data.message) {\n const noticeType = data.messageType || 'info';\n createNotice(noticeType, data.message, options)\n }\n}\n\n// show notice or feedback modal dialog based on imported block valid status\nexport const afterImportHandling = (data, handledBlock) => {\n const invalidBlocks = detectInvalidBlocks(handledBlock);\n // get the description from the invalid blocks\n let description = '';\n if (invalidBlocks && invalidBlocks.length < 1)\n description = invalidBlocks.map(block => {\n if (block.validationIssues && Array.isArray(block.validationIssues))\n return block.validationIssues.map(error => {\n return sprintf(...error.args)\n }).join('\\n');\n else\n return null;\n }).join('\\n');\n\n // Prepare Form schema object\n const schema = {\n type: 'object',\n properties: {\n theme_plugins: {\n type: 'boolean',\n title: __('Send theme and plugins', redux_templates.i18n),\n default: true\n },\n send_page_content: {\n type: 'boolean',\n title: __('Send page content', redux_templates.i18n),\n default: true\n },\n template_id: {\n type: 'string',\n default: data.hash,\n title: __('Template ID', redux_templates.i18n)\n },\n description: {\n type: 'string',\n default: description,\n title: __('Description', redux_templates.i18n)\n },\n\n }\n }\n const uiSchema = {\n description: {\n 'ui:widget': 'textarea',\n },\n template_id: {\n 'ui:disabled': true,\n classNames: 'fixed-control'\n }\n };\n\n const feedbackData = {\n content: handledBlock\n };\n if (invalidBlocks && invalidBlocks.length > 0) { // in case there\n createNotice('error', 'Please let us know if there was an issue importing this Redux template.', {\n isDismissible: true,\n id: 'redux-templatesimportfeedback',\n actions: [\n {\n onClick: () => ModalManager.openFeedback(<FeedbackDialog\n title={__('Thank you for reporting an issue.', redux_templates.i18n)}\n description={__('We want to make Redux perfect. Please send whatever you are comfortable sending, and we will do our best to resolve the problem.', redux_templates.i18n)}\n schema={schema}\n uiSchema={uiSchema}\n data={feedbackData}\n ignoreData={true}\n headerImage={<img className=\"header-background\" src={`${redux_templates.plugin}assets/img/popup-contact.png` } />}\n buttonLabel={__('Submit Feedback', redux_templates.i18n)}\n />),\n label: 'Report an Issue',\n isPrimary: true,\n }\n ],\n });\n }\n}\n\n// reload library button handler\nexport const reloadLibrary = () => {\n const { setLoading, setLibrary } = dispatch('redux-templates/sectionslist');\n setLoading(true);\n apiFetch({\n path: 'redux/v1/templates/library?no_cache=1',\n method: 'POST',\n data: {\n 'registered_blocks': installedBlocksTypes(),\n }\n }).then((newLibrary) => {\n setLoading(false);\n setLibrary(newLibrary.data);\n }).catch((error) => {\n errorCallback(error);\n });\n}\n\n\nexport const installedBlocks = () => {\n let installed_blocks = getBlockTypes();\n return Object.keys(installed_blocks).map(key => {\n return installed_blocks[key]['name'];\n })\n}\nexport const installedBlocksTypes = () => {\n let installed_blocks = getBlockTypes();\n\n let names = Object.keys(installed_blocks).map(key => {\n if (!installed_blocks[key]['name'].includes('core')) {\n return installed_blocks[key]['name'].split('/')[0];\n }\n })\n let unique = [...new Set(names)];\n var filtered = unique.filter(function (el) {\n return el;\n });\n\n return filtered\n}\n\nexport const openSitePreviewModal = (index, pageData) => {\n ModalManager.openCustomizer(\n <PreviewModal startIndex={index} currentPageData={pageData} />\n )\n}\n\nconst errorCallback = (errorMessage) => {\n const { appendErrorMessage, setImportingTemplate, setActivateDialogDisplay } = dispatch('redux-templates/sectionslist');\n if (errorMessage === 'Please activate Redux') {\n setActivateDialogDisplay(true);\n redux_templates.left = 0;\n } else {\n appendErrorMessage(errorMessage);\n setImportingTemplate(null);\n }\n}\n","export const actions = {\n setLibrary( library ) {\n return {\n type: 'SET_LIBRARY',\n library\n };\n },\n fetchLibraryFromAPI( path ) {\n return {\n type: 'FETCH_LIBRARY_FROM_API',\n path,\n };\n },\n setActiveItemType( activeItemType ) {\n return {\n type: 'SET_ACTIVE_ITEM_TYPE',\n activeItemType\n }\n },\n setActiveCategory( activeCategory ) {\n return {\n type: 'SET_ACTIVE_CATEGORY',\n activeCategory\n }\n },\n setActiveCollection( activeCollection ) {\n return {\n type: 'SET_ACTIVE_COLLECTION',\n activeCollection\n }\n },\n setActivePriceFilter( activePriceFilter ) {\n return {\n type: 'SET_ACTIVE_PRICE_FILTER',\n activePriceFilter\n }\n },\n setSearchContext( searchContext ) {\n return {\n type: 'SET_SEARCH_CONTEXT',\n searchContext\n }\n },\n setDependencyFilters( dependencyFilters ) {\n return {\n type: 'SET_DEPENDENCY_FILTERS',\n dependencyFilters\n }\n },\n setCurrentPage( currentPage ) {\n return {\n type: 'SET_CURRENT_PAGE',\n currentPage\n }\n },\n setLoading( loading ) {\n return {\n type: 'SET_LOADING',\n loading\n }\n },\n setColumns( columns ) {\n return {\n type: 'SET_COLUMNS',\n columns\n }\n },\n setSortBy( sortBy ) {\n return {\n type: 'SET_SORT_BY',\n sortBy\n }\n },\n appendErrorMessage( errorMessage ) {\n return {\n type: 'APPEND_ERROR_MESSAGE',\n errorMessage: errorMessage || 'Unknown Error'\n }\n },\n discardAllErrorMessages() {\n return {\n type: 'DISCARD_ALL_ERROR_MESSAGES'\n }\n },\n setInstalledDependencies(installedDependencies) {\n return {\n type: 'SET_INSTALLED_DEPENDENCIES',\n installedDependencies\n }\n },\n setTourOpen(isTourOpen) {\n return {\n type: 'SET_TOUR_OPEN',\n isTourOpen\n }\n },\n setTourActiveButtonGroup(data) {\n return {\n type: 'SET_TOUR_ACTIVE_BUTTON_GROUP',\n data\n }\n },\n setTourPreviewVisible(isVisible) {\n return {\n type: 'SET_PREVIEW_VISIBLE',\n isVisible\n }\n },\n setImportingTemplate(importingTemplate) {\n return {\n type: 'SET_IMPORTING_TEMPLATE',\n importingTemplate\n }\n },\n setChallengeStep(data) {\n return {\n type: 'SET_CHALLENGE_STEP',\n data\n }\n },\n setChallengeOpen(data) {\n return {\n type: 'SET_CHALLENGE_OPEN',\n data\n }\n },\n setChallengeTooltipRect(data) {\n return {\n type: 'SET_CHALLENGE_TOOLTIP_RECT',\n data\n }\n },\n setChallengeFinalStatus(data) {\n return {\n type: 'SET_CHALLENGE_FINAL_STATUS',\n data\n }\n },\n setChallengePassed(data) {\n return {\n type: 'SET_CHALLENGE_PASSED',\n data\n }\n },\n setChallengeListExpanded(data){\n return {\n type: 'SET_CHALLENGE_LIST_EXPANDED',\n data\n }\n },\n setActivateDialogDisplay(data) {\n return {\n type: 'SET_ACTIVATE_DIALOG_DISPLAY',\n data\n }\n },\n setImportToAppend(data) {\n return {\n type: 'SET_IMPORT_TO_APPEND',\n data\n }\n },\n setDependencyFilterRule(data) {\n return {\n type: 'SET_DEPENDENCY_FILTER_RULE',\n data\n }\n },\n selectDependencies(data) {\n return {\n type: 'SELECT_DEPENDENCIES',\n data\n }\n },\n clearSearch() {\n return {\n type: 'CLEAR_SEARCH'\n }\n },\n\tclearState() {\n\t\treturn {\n\t\t\ttype: 'CLEAR_STATE'\n\t\t}\n\t}\n};\n","export const getPluginInstance = (pluginKey) => {\n if (pluginKey in redux_templates.supported_plugins) {\n return redux_templates.supported_plugins[pluginKey];\n }\n return false; // Deal with unknown plugins\n}\n\nexport const needsPluginInstall = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return !pluginInstance || pluginInstance.hasOwnProperty('version') === false;\n}\n\nexport const needsPluginPro = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return (pluginInstance && pluginInstance.hasOwnProperty('has_pro') && pluginInstance.has_pro &&\n (pluginInstance.hasOwnProperty('is_pro') === false || pluginInstance.is_pro === false));\n}\n\n\nexport const pluginInfo = (pluginKey) => {\n let pluginInstance = processPlugin(pluginKey);\n if (!pluginInstance) return {name: null, slug: null, url: null};\n return pluginInstance\n}\n\n\nexport const processPlugin = (pluginKey) => {\n let pluginInstance = {...getPluginInstance(pluginKey)};\n if (!pluginInstance) {\n return pluginInstance\n }\n\n if ('free_slug' in pluginInstance && pluginInstance['free_slug'] in redux_templates.supported_plugins) {\n let new_instance = {...getPluginInstance(pluginInstance.free_slug)}\n new_instance.free_slug = pluginInstance.free_slug\n new_instance.name = pluginInstance.name\n if (!('is_pro' in new_instance)) {\n delete new_instance.version\n }\n pluginInstance = new_instance\n }\n pluginInstance.slug = pluginInstance.slug ? pluginInstance.slug : pluginKey;\n\n return pluginInstance\n}\n\nexport const requiresPro = (data) => {\n if (data && data.proDependenciesMissing && data.proDependenciesMissing.length > 0) {\n if (isReduxProInstalled()) { // redux pro installed, then skip merged plugins\n return data.proDependenciesMissing.filter((plugin) => isPluginReduxProMerged(plugin) === false).length > 0\n }\n return true;\n }\n return false;\n}\nexport const requiresInstall = (data) => {\n if (data && data.installDependenciesMissing && data.installDependenciesMissing.length > 0) {\n return true;\n }\n if (isReduxProInstalled() && data.proDependenciesMissing) { // redux pro installed, then include merged plugins\n return data.proDependenciesMissing.filter((plugin) => isPluginReduxProMerged(plugin)).length > 0\n }\n return false;\n}\n// Check if redux pro should be installed.\nexport const requiresReduxPro = (data) => {\n if (!data) return false;\n const missingDependencies = [].concat(data.installDependenciesMissing, data.proDependenciesMissing);\n return missingDependencies.reduce((acc, curKey) => {\n if (curKey === 'redux-pro') return true;\n return acc || (isPluginReduxProMerged(curKey) && isReduxProInstalled() === false); // main logic, above were execpetion handling\n }, false);\n}\n\nexport const isPluginReduxProMerged = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return (pluginInstance !== false && pluginInstance.redux_pro === true);\n}\n\nexport const isTemplateReadyToInstall = (data) => {\n return (requiresInstall(data) || requiresPro(data)) ? false : true;\n}\n\nexport const isTemplatePremium = (data, activeDependencyFilter) => {\n if (data && data.proDependencies !== undefined && data.proDependencies.length > 0) {\n return data.proDependencies.reduce((acc, cur) => {\n if (activeDependencyFilter[cur] === undefined) \n return false;\n return (acc || activeDependencyFilter[cur].value);\n }, false);\n }\n return (data && data.proDependenciesMissing !== undefined && data.proDependenciesMissing.length > 0);\n}\n\nexport const isReduxProInstalled = () => {\n const reduxProPluginInstance = redux_templates.supported_plugins['redux-framework'];\n return reduxProPluginInstance && reduxProPluginInstance.hasOwnProperty('is_pro');\n}","import {isTemplatePremium} from './dependencyHelper';\nimport {missingPluginsArray, NONE_KEY} from './helper';\nconst REDUXTEMPLATES_PRO_KEY = 'redux-pro';\n// Just get current Page Data\nexport const applyCategoryFilter = (pageData, activeCategory) => {\n let currentPageData = [];\n let tempDataID = [];\n if (activeCategory && pageData[activeCategory] && Array.isArray(pageData[activeCategory]) && pageData[activeCategory].length > 0) {\n pageData[activeCategory].map(value => {\n if (!(tempDataID.indexOf(value.ID) > -1)) {\n currentPageData.push(value);\n tempDataID.push(value.ID);\n }\n });\n } else\n for (let key in pageData) {\n Array.isArray(pageData[key]) && pageData[key].map(value => {\n if (!(tempDataID.indexOf(value.ID) > -1)) {\n currentPageData.push(value);\n tempDataID.push(value.ID);\n }\n else {\n if (value.parentID && !(tempDataID.indexOf(value.ID) > -1)) {\n currentPageData.push(value);\n tempDataID.push(value.ID);\n }\n }\n })\n }\n return currentPageData;\n};\n\nexport const applySearchFilter = (pageData, searchContext) => {\n let lowercasedSearchContext = searchContext.toLowerCase();\n if (Array.isArray(pageData)) {\n return pageData.filter(item => (item.name.toLowerCase().indexOf(lowercasedSearchContext) !== -1))\n } else {\n let newPageData = {};\n Object.keys(pageData).forEach(key => {\n newPageData[key] = pageData[key].filter(item => (item.name.toLowerCase().indexOf(lowercasedSearchContext) != -1))\n });\n return newPageData;\n }\n}\n\n\n\nexport const applyHashFilter = (pageData, searchContext) => {\n let lowercasedSearchContext = searchContext.toLowerCase();\n if (Array.isArray(pageData)) {\n return pageData.filter(item => (item.hash && item.hash.toLowerCase().indexOf(lowercasedSearchContext) !== -1))\n } else {\n let newPageData = [];\n Object.keys(pageData).forEach(key => {\n let filteredData = pageData[key].filter(item => (item.hash && item.hash.toLowerCase().indexOf(lowercasedSearchContext) !== -1));\n newPageData = [...newPageData, ...filteredData];\n });\n return newPageData;\n }\n}\n\n// Apply Price filter afterwards : Should make sure if it is a best practise to split this filtering\nexport const applyPriceFilter = (pageData, activePriceFilter, activeDependencyFilter) => {\n if (activePriceFilter !== '') {\n if (Array.isArray(pageData)) {\n return pageData.filter(item => {\n if (activePriceFilter === 'free') return (isTemplatePremium(item, activeDependencyFilter) === false);\n if (activePriceFilter === 'pro') return isTemplatePremium(item, activeDependencyFilter);\n });\n } else {\n let newPageData = {};\n Object.keys(pageData).forEach(key => {\n newPageData[key] = pageData[key].filter(item => {\n if (activePriceFilter === 'free') return (isTemplatePremium(item, activeDependencyFilter) === false);\n if (activePriceFilter === 'pro') return isTemplatePremium(item, activeDependencyFilter);\n });\n });\n return newPageData;\n }\n }\n return pageData;\n}\n\n\nexport const applyDependencyFilters = (pageData, dependencyFilters, dependencyFilterRule) => {\n const truthyDependenciesList = truthyDependencyFiltersList(dependencyFilters);\n if (Array.isArray(pageData)) {\n return pageData.filter(item => isTemplateDependencyFilterIncluded(item, truthyDependenciesList, dependencyFilterRule));\n } else {\n let newPageData = {};\n Object.keys(pageData).forEach(key => {\n newPageData[key] = pageData[key].filter(item => isTemplateDependencyFilterIncluded(item, truthyDependenciesList, dependencyFilterRule));\n });\n return newPageData;\n }\n}\n\nconst isTemplateDependencyFilterIncluded = (item, truthyDependenciesList, dependencyFilterRule) => {\n // console.log(\"now\", item.dependencies, dependencyFilters);\n // No dependencies at all case\n if (!item.dependencies || Object.keys(item.dependencies).length === 0) return truthyDependenciesList.includes(NONE_KEY);\n\n // Normal dependencies filter check\n const filteredList = item.dependencies.filter((dependency) => truthyDependenciesList.includes(dependency));\n\n return dependencyFilterRule ? item.dependencies.length === filteredList.length : filteredList.length > 0; // filter rule = ture => AND operation\n}\n\n// check dependency filter is selected on sidebar\n// Input: dependencyFilter={'qubely', \nexport const valueOfDependencyFilter = (dependencyFilter) => {\n if (dependencyFilter != null && dependencyFilter.hasOwnProperty('value')) return (dependencyFilter.value === true);\n return (dependencyFilter === true);\n}\n\nconst truthyDependencyFiltersList = (dependencyFilters) => {\n return Object.keys(dependencyFilters).filter((key) => dependencyFilters[key].value === true);\n}","import kebabCase from 'lodash/kebabCase'\nimport uniq from 'lodash/uniq';\nimport concat from 'lodash/concat';\nimport flatten from 'lodash/flatten';\nimport sortBy from 'lodash/sortBy';\nimport map from 'lodash/map';\nimport flattenDeep from 'lodash/flattenDeep';\nimport {afterImportHandling} from './actionHelper';\nimport {getPluginInstance, isPluginReduxProMerged} from './dependencyHelper';\nconst {createBlock} = wp.blocks;\nconst {dispatch} = wp.data;\nconst {createSuccessNotice} = dispatch('core/notices');\nconst {insertBlocks} = dispatch('core/block-editor');\n\nconst prefix = 'redux_';\nexport const REDUXTEMPLATES_PRO_KEY = 'redux-pro';\nexport const NONE_KEY = 'core';\nconst EXIPRY_TIME = 5 * 24 * 3600 * 1000;\n\nexport const getCurrentState = (state) => state[state.activeItemType]\n// Helper function not to be exported\nconst convertObjectToArray = (list) => {\n if (!list)\n return [];\n return Object.keys(list).map(key => {\n return {...list[key], ID: key};\n })\n};\n\n// parse categories and section data from section server data\nexport const categorizeData = (list) => {\n let categories = [];\n let data = {};\n\n list.forEach(item => {\n if (item.categories) {\n item.categories.map(catName => {\n let catSlug = kebabCase(catName);\n if (catSlug in data) {\n data[catSlug].push(item)\n } else {\n data[catSlug] = [];\n data[catSlug].push(item)\n }\n let index = -1;\n categories.forEach((change, i) => {\n if (catSlug == change.slug) {\n index = i\n categories[i].ids.push(item.id);\n }\n });\n if (index === -1) {\n categories.push({name: catName, slug: catSlug, ids: [item.id]})\n }\n })\n }\n });\n\n return {categories, data};\n}\n\nexport const parseSectionData = (sections) => {\n const librarySectionData = convertObjectToArray(sections);\n const wholePlugins = uniq(flattenDeep(map(librarySectionData, 'dependencies')));\n const toBeReturned = categorizeData(librarySectionData);\n const categoriesList = toBeReturned.categories.map((category) => {return {label: category.name, value: category.slug}; });\n setWithExpiry('section_categories_list', categoriesList, EXIPRY_TIME);\n return {...toBeReturned, wholePlugins};\n}\n\nexport const parsePageData = (pages) => {\n const libraryPageData = convertObjectToArray(pages);\n const wholePlugins = uniq(flattenDeep(map(libraryPageData, 'dependencies')));\n const toBeReturned = categorizeData(libraryPageData);\n const categoriesList = toBeReturned.categories.map((category) => {return {label: category.name, value: category.slug}; });\n setWithExpiry('page_categories_list', categoriesList, EXIPRY_TIME);\n return {...toBeReturned, wholePlugins};\n}\n\nexport const parseCollectionData = (library) => {\n let libraryCollectionData = convertObjectToArray(library.collections);\n // filter out incomplete data\n libraryCollectionData = libraryCollectionData.filter(collection => collection.pages && collection.pages.length > 0);\n // After common handling, we need to populate homepage data\n libraryCollectionData = libraryCollectionData.map(collection => {\n if (collection.homepage && library.pages[collection.homepage]) collection.homepageData = library.pages[collection.homepage];\n else {\n collection.homepageData = library.pages[collection.pages[0]];\n }\n\n if (collection.pages) {\n collection.installDependenciesMissing = uniq(concat(flatten(collection.pages.map(page => library.pages[page].installDependenciesMissing || []))));\n collection.proDependenciesMissing = uniq(concat(flatten(collection.pages.map(page => library.pages[page].proDependenciesMissing || []))));\n }\n\n return collection;\n });\n const wholePlugins = uniq(flattenDeep(map(libraryCollectionData, 'dependencies')));\n return {...categorizeData(libraryCollectionData), dependencyFilters: {[NONE_KEY]: true, ...library.dependencies}, wholePlugins};\n}\n\n// one of important function\n// get collection children data upon clicking on collection in collections tab\n// always homepage page first, sort alphabetically afterward\nexport const getCollectionChildrenData = (library, activeCollection) => {\n let activeCollectionData = library.collections[activeCollection];\n // sort page except homepage\n let childrenPages = activeCollectionData.pages\n .filter(page => page !== activeCollectionData.homepage)\n .map(child => {\n return {...library.pages[child], ID: child}\n });\n childrenPages = sortBy(childrenPages, 'name');\n // insert homepage at the beginning of the array\n if (activeCollectionData.homepage && library.pages[activeCollectionData.homepage]) {\n childrenPages.unshift(library.pages[activeCollectionData.homepage]);\n }\n return childrenPages;\n}\n\n// Check if the block is pro\nexport const isBlockPro = (pro, source) => {\n if (source && redux_templates.supported_plugins.hasOwnProperty(source))\n return (pro && !redux_templates.supported_plugins[source].is_pro);\n else\n return pro && redux_templates.mokama !== '1';\n}\n\nexport const missingPro = (pro) => {\n return (redux_templates.mokama !== '1' && pro === true);\n}\n\nexport const missingRequirement = (pro, requirements) => {\n if (!requirements) return missingPro(pro);\n else {\n const supported_plugins = redux_templates.supported_plugins;\n for (let i = 0; i < requirements.length; i++) {\n let requirement = requirements[i];\n if (!supported_plugins.hasOwnProperty(requirement.slug))\n return true; // Doesn't have the plugin installed\n else {\n let installedPlugin = supported_plugins[requirement.slug];\n if (Number(requirement.version) > Number(installedPlugin.version) ||\n (requirement.pro === true && installedPlugin.pro === false))\n return true;\n }\n }\n return proCheck;\n }\n}\n\n\nexport const setWithExpiry = (key, value, ttl) => {\n const prefixedKey = prefix + key;\n const now = new Date();\n\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value: value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(prefixedKey, JSON.stringify(item));\n}\n\nexport const getWithExpiry = (key, defaultValue = null) => {\n const prefixedKey = prefix + key;\n const itemStr = localStorage.getItem(prefixedKey);\n\n // if the item doesn't exist, return null\n if (!itemStr) {\n return defaultValue;\n }\n\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(prefixedKey);\n return defaultValue;\n }\n return item.value;\n}\n\n\nexport const handlingLocalStorageData = () => {\n try {\n let blockData = localStorage.getItem('block_data');\n if (!blockData || blockData == null) return;\n blockData = JSON.parse(blockData);\n if (!blockData || blockData == null || blockData.length < 1) return;\n\n blockData = blockData.filter(block => (block.name && block.attributes && block.innerBlocks) )\n .map(block => {\n if (block.name && block.attributes && block.innerBlocks) return createBlock(block.name, block.attributes, block.innerBlocks);\n });\n if (blockData.length > 0) {\n insertBlocks(blockData);\n createSuccessNotice('Template inserted', {type: 'snackbar'});\n }\n // preparing to call after import handling\n let data = localStorage.getItem('importing_data');\n if (!data || data == null) return;\n data = JSON.parse(data);\n afterImportHandling(data, blockData);\n\n // reset the localstorage\n localStorage.setItem('block_data', null);\n localStorage.setItem('importing_data', null);\n } catch (error) {\n alert(error.code + ' : ' + error.message);\n }\n}\n\n\nexport const columnMap = {\n 'large': 2,\n 'medium': 3,\n 'small': 4\n};\n\nexport const pageSizeMap = {\n 'large': 20,\n 'medium': 30,\n 'small': 40\n};\n\nexport const getOnlySelectedDependencyFilters = (dependencyFilters) => {\n return Object.keys(dependencyFilters).filter(key => dependencyFilters[key]);\n}\n\n/*\nInput: dependencies: {getwid: 38, qubely: 82...}\nInput: dependencies: ['getwid', 'qubely', ...]\nResult: {getwid: {value: true, disabled: true}, }\n*/\nexport const getDefaultDependencies = (dependencies) => {\n const unSupportedPlugins = Object.keys(redux_templates.supported_plugins).filter(key => isPluginProActivated(key) === false);\n return dependencies.reduce(\n (acc, cur) => {\n // special handling for pro plugin not activated.\n let value = true;\n if (isProPlugin(cur) && (cur !== REDUXTEMPLATES_PRO_KEY) && isPluginReduxProMerged(cur) === false) value = false; // Not including pro plugin in redux templates\n return {...acc, [cur]: {value, disabled: false}};\n },\n {\n [NONE_KEY]: {value: true, disabled: false}, // Native element is included in default dependencies\n [REDUXTEMPLATES_PRO_KEY]: {value: true, disabled: false} // Redux pro is included in default dependencies\n }\n );\n}\n\nexport const getInstalledDependencies = (dependencies) => {\n const unSupportedPlugins = Object.keys(redux_templates.supported_plugins).filter(key => isPluginProActivated(key) === false);\n return dependencies\n .filter(key => key !== NONE_KEY)\n .reduce(\n (acc, cur) => {\n // special handling for pro plugin not activated.\n let value = true;\n const pluginInstance = getPluginInstance(cur);\n if (pluginInstance) {\n if (isProPlugin(cur) && unSupportedPlugins.indexOf(cur) !== -1) value = false;\n if (isProPlugin(cur) === false && pluginInstance.hasOwnProperty('version') === false) value = false;\n if (cur === REDUXTEMPLATES_PRO_KEY) value = false;\n } else\n value = false;\n return {...acc, [cur]: {value, disabled: false}};\n },\n {\n [NONE_KEY]: {value: true, disabled: false}\n }\n );\n}\n\nconst isProPlugin = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n return (pluginInstance && pluginInstance.hasOwnProperty('free_slug'));\n}\n\nconst isPluginProActivated = (pluginKey) => {\n const pluginInstance = getPluginInstance(pluginKey);\n const freePluginInstance = getPluginInstance(pluginInstance.free_slug);\n return (freePluginInstance.hasOwnProperty('version') && freePluginInstance.hasOwnProperty('is_pro') && freePluginInstance.is_pro !== false);\n}\n\nexport const missingPluginsArray = () => {\n return Object.keys(redux_templates.supported_plugins).filter(pluginKey => isProPlugin(pluginKey) && isPluginProActivated(pluginKey) === false);\n}\n\n\n\n/**\n * Get last saved step.\n */\nexport const loadChallengeStep = () => {\n var step = localStorage.getItem( 'reduxChallengeStep' );\n if (step === null)\n return -1;\n step = parseInt( step, 10 );\n return step;\n}\n\n/**\n * Save Challenge step.\n */\nexport const saveChallengeStep = (step) => {\n localStorage.setItem( 'reduxChallengeStep', step );\n}\n","const {apiFetch} = wp;\nconst {registerStore} = wp.data;\n\nimport {initialState, reducer} from './reducer';\nimport {actions} from './actions';\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\nimport countBy from 'lodash/countBy';\nimport map from 'lodash/map';\nimport flattenDeep from 'lodash/flattenDeep';\nimport uniq from 'lodash/uniq';\nimport uniqBy from 'lodash/uniqBy';\nimport {applyCategoryFilter, applySearchFilter, applyHashFilter, applyPriceFilter, applyDependencyFilters, valueOfDependencyFilter} from './filters'\nimport {getCurrentState, getCollectionChildrenData, loadChallengeStep, NONE_KEY} from './helper';\nimport {isTemplatePremium} from './dependencyHelper'\nimport {installedBlocksTypes} from './actionHelper';\n\nconst getOriginalPageData = (state) => {\n if (state.activeItemType === 'collection' && state.collection.activeCollection !== null)\n return getCollectionChildrenData(state.library, state.collection.activeCollection);\n return getCurrentState(state).data;\n};\n\nconst getActivePriceFilter = (state) => {\n return getCurrentState(state).priceFilter;\n};\nconst getSearchContext = (state) => {\n return (state.activeItemType !== 'saved') ? getCurrentState(state).searchContext : null;\n};\n\nconst getActiveCategory = (state) => {\n return state[state.activeItemType].activeCategory;\n};\n\nconst getCurrentPage = (state) => {\n return state[state.activeItemType].currentPage;\n};\nconst getActiveItemType = (state) => {\n return state.activeItemType;\n};\n\n// get relevant page data, apply category, price, search, dependent filters\nconst getPageData = (state, applyDependencyFilter = true) => {\n let pageData = getOriginalPageData(state);\n const searchKeyword = getSearchContext(state);\n let hashFilteredData = [];\n // Hash filter to take priority\n if (state.activeItemType !== 'collection' && searchKeyword.length > 5) hashFilteredData = applyHashFilter(pageData, searchKeyword);\n // Full search for pageData\n if (pageData && Object.keys(pageData).length > 0) {\n pageData = applySearchFilter(pageData, searchKeyword);\n if (applyDependencyFilter) pageData = applyDependencyFilters(pageData, getDependencyFilters(state), getDependencyFilterRule(state));\n\n pageData = applyPriceFilter(pageData, getActivePriceFilter(state), getDependencyFilters(state));\n if (state.collection.activeCollection === null || state.activeItemType !== 'collection') {\n pageData = applyCategoryFilter(pageData, getActiveCategory(state));\n pageData = sortBy(pageData, getCurrentState(state).sortBy);\n }\n return uniqBy([...pageData, ...hashFilteredData], 'ID');\n }\n return null;\n};\n\nconst getDependencyFilters = (state) => {\n return {...getAllDependencFilters(state), ...getCurrentState(state).dependencyFilters};\n};\n\nconst getAllDependencFilters = (state) => {\n return state[state.activeItemType || 'section'].wholePlugins.reduce((acc, cur) => {\n return {...acc, [cur]: {value: false} };\n }, undefined)\n};\n\n\nconst getDependencyFiltersStatistics = (state) => {\n const pageData = getPageData(state, false);\n const dependentPluginsArray = uniq(flattenDeep(map(pageData, 'dependencies')));\n let dependencyFilters = getDependencyFilters(state);\n Object.keys(dependencyFilters)\n .forEach((plugin) => {\n dependencyFilters[plugin] = {...dependencyFilters[plugin], disabled: dependentPluginsArray.indexOf(plugin) === -1}\n })\n dependencyFilters[NONE_KEY] = {value: valueOfDependencyFilter(dependencyFilters[NONE_KEY]), disabled: false};\n return dependencyFilters;\n};\nconst getDependencyFilterRule = (state) => {\n return state[state.activeItemType].dependencyFilterRule;\n};\nregisterStore('redux-templates/sectionslist', {\n\n reducer,\n actions,\n\n selectors: {\n fetchLibraryFromAPI(state) {\n return state.library;\n },\n receive(state) {\n return state.sections;\n },\n\n getActivePriceFilter,\n getSearchContext,\n getDependencyFilters,\n getDependencyFiltersStatistics,\n getActiveItemType,\n getCurrentPage,\n getActiveCategory,\n getDependencyFilterRule,\n getWholePlugins(state) {\n return (state.activeItemType !== 'saved') ? getCurrentState(state).wholePlugins : null;\n },\n // get categories from currentState, sortBy alphabetically, with the count of pageData within the current category\n getCategoryData(state) {\n let categories = [];\n let pageData = getOriginalPageData(state);\n if (pageData && Object.keys(pageData).length > 0) {\n pageData = applySearchFilter(pageData, getSearchContext(state));\n pageData = applyDependencyFilters(pageData, getDependencyFilters(state), getDependencyFilterRule(state));\n pageData = applyPriceFilter(pageData, getActivePriceFilter(state), getDependencyFilters(state));\n }\n if (state.collection.activeCollection === null || state.activeItemType !== 'collection') {\n categories = cloneDeep(getCurrentState(state).categories);\n categories = categories.map(category => {\n const filteredData = map(pageData[category.slug], 'id');\n return {...category, filteredData};\n });\n }\n\n categories = sortBy(categories, 'name');\n return categories;\n },\n // get relevant page data, apply category, price, search, dependent filters\n getPageData,\n\n getStatistics(state) {\n let pageData = getOriginalPageData(state);\n let staticsData = {true: 0, false: 0};\n if (pageData && Object.keys(pageData).length > 0) {\n pageData = applySearchFilter(pageData, getSearchContext(state));\n pageData = applyDependencyFilters(pageData, getDependencyFilters(state), getDependencyFilterRule(state));\n if (state.collection.activeCollection === null || state.activeItemType !== 'collection') pageData = applyCategoryFilter(pageData, getActiveCategory(state));\n staticsData = countBy(pageData, (item) => isTemplatePremium(item, getDependencyFilters(state)) === true);\n }\n return staticsData;\n },\n getLoading(state) {\n return state.loading;\n },\n getColumns(state) {\n return state.columns;\n },\n getSortBy(state) {\n return getCurrentState(state).sortBy;\n },\n getActiveCollection(state) {\n return state.collection.activeCollection;\n },\n getActiveCollectionData(state) {\n if (state.library && state.library.collections && state.collection)\n return state.library.collections[state.collection.activeCollection];\n return null;\n },\n getSaved(state) {\n return state.saved;\n },\n getErrorMessages(state) {\n return state.errorMessages;\n },\n getInstalledDependencies(state) {\n return state.installedDependencies;\n },\n getTourOpen(state) {\n return state.tour.isOpen;\n },\n getTourActiveButtonGroup(state) {\n return state.tour.activeButtonGroup;\n },\n getTourPreviewVisible(state) {\n return state.tour.isPreviewVisible;\n },\n getImportingTemplate(state) {\n return state.importingTemplate;\n },\n getChallengeStep(state) {\n return loadChallengeStep();\n },\n getChallengeOpen(state) {\n return state.challenge.isOpen;\n },\n getChallengeTooltipRect(state) {\n return state.challenge.tooltipRect;\n },\n getChallengeFinalStatus(state) {\n return state.challenge.finalStatus;\n },\n getChallengePassed(state) {\n return state.challenge.passed;\n },\n getChallengeListExpanded(state) {\n return state.challenge.listExpanded;\n },\n getActivateDialogDisplay(state) {\n return state.activateDialog;\n },\n getImportToAppend(state) {\n return state.isImportToAppend;\n }\n },\n\n controls: {\n FETCH_LIBRARY_FROM_API(action) {\n return apiFetch({path: action.path, method: 'POST', data: {registered_blocks: installedBlocksTypes()}});\n },\n FETCH_SAVED_FROM_API(action) {\n return apiFetch({path: action.path, method: 'POST', data: {registered_blocks: installedBlocksTypes()}});\n }\n },\n\n resolvers: {\n * fetchLibraryFromAPI(state) {\n try {\n const receiveSectionResult = yield actions.fetchLibraryFromAPI('redux/v1/templates/library');\n return actions.setLibrary(receiveSectionResult.data);\n } catch (error) {\n return actions.appendErrorMessage(error.code + ' ' + error.message)\n }\n }\n },\n\n initialState\n});\n","import {parseSectionData, parsePageData, parseCollectionData, getInstalledDependencies, NONE_KEY} from './helper';\nimport {getDefaultDependencies} from './helper';\nimport {loadChallengeStep, saveChallengeStep, setWithExpiry, getWithExpiry} from './helper';\nconst EXIPRY_TIME = 5 * 24 * 3600 * 1000;\nexport const initialState = {\n loading: false,\n activeItemType: getWithExpiry('itemType', 'section'),\n library: null,\n columns: getWithExpiry('column', ''),\n errorMessages: [],\n section: {\n categories: [],\n data: {},\n priceFilter: getWithExpiry('section_price', ''),\n activeCategory: getWithExpiry('section_category', ''),\n dependencyFilters: {},\n dependencyFilterRule: getWithExpiry('section_filterRule', true),\n searchContext: '',\n wholePlugins: [],\n sortBy: getWithExpiry('section_sort', 'name'),\n currentPage: getWithExpiry('section_page', 0)\n },\n page: {\n categories: [],\n data: {},\n priceFilter: getWithExpiry('page_price', ''),\n activeCategory: getWithExpiry('page_category', ''),\n dependencyFilters: {},\n dependencyFilterRule: getWithExpiry('page_filterRule', true),\n searchContext: '',\n wholePlugins: [],\n sortBy: getWithExpiry('page_sort', 'name'),\n currentPage: getWithExpiry('page_page', 0)\n },\n collection: {\n categories: [],\n data: {},\n priceFilter: getWithExpiry('collection_price', ''),\n activeCategory: getWithExpiry('collection_category', 'name'),\n dependencyFilters: {},\n dependencyFilterRule: false,\n searchContext: '',\n wholePlugins: [],\n activeCollection: null,\n sortBy: getWithExpiry('collection_sort', 'name'),\n currentPage: getWithExpiry('collection_page', 0)\n },\n installedDependencies: false, // used when deciding should or not reload page after importing the template\n isImportToAppend: true, // append to or replace the current page content for importing\n tour: {\n isOpen: false,\n activeButtonGroup: null,\n isPreviewVisible: false\n },\n challenge: {\n isOpen: false,\n currentStep: loadChallengeStep(),\n tooltipRect: {},\n finalStatus: '',\n passed: getWithExpiry('reduxChallengePassed', false),\n listExpanded: true\n },\n plugins: {},\n importingTemplate: null,\n activateDialog: false\n};\n\nexport const reducer = ( state = initialState, action ) => {\n\n switch ( action.type ) {\n case 'SET_LIBRARY':\n if (!action.library.dependencies) return state;\n redux_templates.supported_plugins = action.library.plugins;\n const dependencies = getDefaultDependencies(Object.keys(action.library.dependencies));\n const parsedSection = parseSectionData(action.library.sections);\n const parsedPage = parsePageData(action.library.pages);\n\t\t\tconst parsedCollection = parseCollectionData(action.library);\n\t\t\tredux_templates.stats = {\n\t\t\t\t'dependencies': Object.keys(action.library.dependencies).length,\n\t\t\t\t'pages': Object.keys(action.library.pages).length,\n\t\t\t\t'sections': Object.keys(action.library.sections).length,\n\t\t\t\t'collections': Object.keys(action.library.collections).length,\n\t\t\t}\n return {\n ...state,\n loading: false,\n library: action.library,\n section: {\n ...state.section,\n ...parsedSection,\n dependencyFilters: getWithExpiry('section_plugin') ? getWithExpiry('section_plugin') : dependencies\n },\n page: {\n ...state.page,\n ...parsedPage,\n dependencyFilters: getWithExpiry('page_plugin') ? getWithExpiry('page_plugin') : dependencies\n },\n collection: {\n ...state.collection,\n ...parsedCollection,\n dependencyFilters: getWithExpiry('collection_plugin') ? getWithExpiry('collection_plugin') : dependencies\n }\n };\n case 'SET_ACTIVE_CATEGORY':\n setWithExpiry(state.activeItemType + '_category', action.activeCategory, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n activeCategory: action.activeCategory\n }\n };\n case 'SET_SEARCH_CONTEXT':\n setWithExpiry(state.activeItemType + '_search', action.searchContext, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n searchContext: action.searchContext\n }\n };\n case 'SET_ACTIVE_PRICE_FILTER':\n setWithExpiry(state.activeItemType + '_price', action.activePriceFilter, EXIPRY_TIME);\n setWithExpiry(state.activeItemType + '_page', 0, EXIPRY_TIME);\n return {\n ...state,\n [state.activeItemType]: {\n ...state[state.activeItemType],\n currentPage: 0,\n priceFilter: action.activePriceFilter\n }\n };\n case 'SET_ACTIVE_ITEM_TYPE':\n setWithExpiry('itemType', action.activeItemType, EXIPRY_TIME);\n return {\n ...state,\n activeItemTyp