Completed
Push — master ( 8d1412...e15369 )
by
unknown
49s
created
redux-core/class-redux-core.php 2 patches
Indentation   +614 added lines, -614 removed lines patch added patch discarded remove patch
@@ -11,620 +11,620 @@
 block discarded – undo
11 11
 
12 12
 if ( ! class_exists( 'Redux_Core', false ) ) {
13 13
 
14
-	/**
15
-	 * Class Redux_Core
16
-	 */
17
-	class Redux_Core {
18
-
19
-		/**
20
-		 * Class instance.
21
-		 *
22
-		 * @var null|Redux_Core
23
-		 */
24
-		public static ?Redux_Core $instance = null;
25
-
26
-		/**
27
-		 * Project version
28
-		 *
29
-		 * @var string
30
-		 */
31
-		public static string $version;
32
-
33
-		/**
34
-		 * Project directory.
35
-		 *
36
-		 * @var string.
37
-		 */
38
-		public static string $dir;
39
-
40
-		/**
41
-		 * Project URL.
42
-		 *
43
-		 * @var string.
44
-		 */
45
-		public static string $url;
46
-
47
-		/**
48
-		 * Base directory path.
49
-		 *
50
-		 * @var string
51
-		 */
52
-		public static string $redux_path;
53
-
54
-		/**
55
-		 * Absolute direction path to WordPress upload directory.
56
-		 *
57
-		 * @var string
58
-		 */
59
-		public static string $upload_dir = '';
60
-
61
-		/**
62
-		 * Full URL to WordPress upload directory.
63
-		 *
64
-		 * @var null|string
65
-		 */
66
-		public static ?string $upload_url = '';
67
-
68
-		/**
69
-		 * Set when Redux is run as a plugin.
70
-		 *
71
-		 * @var bool
72
-		 */
73
-		public static bool $is_plugin = true;
74
-
75
-		/**
76
-		 * Indicated in_theme or in_plugin.
77
-		 *
78
-		 * @var string
79
-		 */
80
-		public static string $installed = '';
81
-
82
-		/**
83
-		 * Set when Redux is run as a plugin.
84
-		 *
85
-		 * @var bool
86
-		 */
87
-		public static bool $as_plugin = false;
88
-
89
-		/**
90
-		 * Set when Redux is embedded within a theme.
91
-		 *
92
-		 * @var bool
93
-		 */
94
-		public static bool $in_theme = false;
95
-
96
-		/**
97
-		 * Pointer to an updated Google fonts array.
98
-		 *
99
-		 * @var array|null
100
-		 */
101
-		public static ?array $updated_google_fonts = array();
102
-
103
-		/**
104
-		 * List of files calling Redux.
105
-		 *
106
-		 * @var array|null
107
-		 */
108
-		public static ?array $callers = array();
109
-
110
-		/**
111
-		 * Pointer to _SERVER global.
112
-		 *
113
-		 * @var array|null
114
-		 */
115
-		public static ?array $server = array();
116
-
117
-		/**
118
-		 * Field folding information for localization.
119
-		 *
120
-		 * @var null|array
121
-		 */
122
-		public static ?array $required = array();
123
-
124
-		/**
125
-		 * Field child-folding information for localization.
126
-		 *
127
-		 * @var null|array
128
-		 */
129
-		public static ?array $required_child = array();
130
-
131
-		/**
132
-		 * Array of fields to be folded.
133
-		 *
134
-		 * @var array|null
135
-		 */
136
-		public static ?array $folds = array();
137
-
138
-		/**
139
-		 * Array of fields that didn't pass the fold dependency test and are hidden.
140
-		 *
141
-		 * @var null|array
142
-		 */
143
-		public static ?array $fields_hidden = array();
144
-
145
-		/**
146
-		 * Values to generate google font CSS.
147
-		 *
148
-		 * @var null|array
149
-		 */
150
-		public static ?array $typography = array();
151
-
152
-		/**
153
-		 * Validation ran flag.
154
-		 *
155
-		 * @var bool
156
-		 */
157
-		public static bool $validation_ran = false;
158
-
159
-		/**
160
-		 * No output flag.
161
-		 *
162
-		 * @var bool
163
-		 */
164
-		public static bool $no_output = false;
165
-
166
-		/**
167
-		 * Array of fonts used by the panel for localization.
168
-		 *
169
-		 * @var null|array
170
-		 */
171
-		public static ?array $fonts = array();
172
-
173
-		/**
174
-		 * Array of Google fonts used by the panel for localization.
175
-		 *
176
-		 * @var null|array
177
-		 */
178
-		public static ?array $google_array = array();
179
-
180
-		/**
181
-		 * Array of various font groups used within the typography field.
182
-		 *
183
-		 * @var null|array
184
-		 */
185
-		public static ?array $font_groups = array();
186
-
187
-		/**
188
-		 * File system object used for I/O file operations.  Done the WordPress way.
189
-		 *
190
-		 * @var null|object
191
-		 */
192
-		public static ?object $filesystem;
193
-
194
-		/**
195
-		 * Pointer to the third party fixes class.
196
-		 *
197
-		 * @var Redux_ThirdParty_Fixes
198
-		 */
199
-		public static Redux_ThirdParty_Fixes $third_party_fixes;
200
-
201
-		/**
202
-		 * Redux Welcome screen object.
203
-		 *
204
-		 * @var Redux_Welcome
205
-		 */
206
-		public static Redux_Welcome $welcome;
207
-
208
-		/**
209
-		 * Creates instance of class.
210
-		 *
211
-		 * @return Redux_Core
212
-		 * @throws Exception Comment.
213
-		 */
214
-		public static function instance(): ?Redux_Core {
215
-			if ( ! self::$instance ) {
216
-				self::$instance = new self();
217
-
218
-				self::$instance->includes();
219
-				self::$instance->init();
220
-				self::$instance->hooks();
221
-
222
-				add_action( 'plugins_loaded', array( 'Redux_Core', 'plugins_loaded' ) );
223
-			}
224
-
225
-			return self::$instance;
226
-		}
227
-
228
-		/**
229
-		 * Things to run after pluggable.php had loaded.
230
-		 */
231
-		public static function plugins_loaded() {}
232
-
233
-		/**
234
-		 * Class init.
235
-		 */
236
-		private function init() {
237
-			self::$server = array(
238
-				'SERVER_SOFTWARE' => '',
239
-				'REMOTE_ADDR'     => Redux_Helpers::is_local_host() ? '127.0.0.1' : '',
240
-				'HTTP_USER_AGENT' => '',
241
-				'HTTP_HOST'       => '',
242
-				'REQUEST_URI'     => '',
243
-			);
244
-
245
-			// phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
246
-			if ( ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
247
-				self::$server['SERVER_SOFTWARE'] = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
248
-			}
249
-			if ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
250
-				self::$server['REMOTE_ADDR'] = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );
251
-			}
252
-			if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
253
-				self::$server['HTTP_USER_AGENT'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) );
254
-			}
255
-			if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
256
-				self::$server['HTTP_HOST'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) );
257
-			}
258
-			if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
259
-				self::$server['REQUEST_URI'] = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
260
-			}
261
-
262
-			// phpcs:enable
263
-
264
-			self::$dir = trailingslashit( wp_normalize_path( dirname( realpath( __FILE__ ) ) ) );
265
-
266
-			Redux_Functions_Ex::generator();
267
-
268
-			if ( defined( 'REDUX_PLUGIN_FILE' ) ) {
269
-				$plugin_info = Redux_Functions_Ex::is_inside_plugin( REDUX_PLUGIN_FILE );
270
-			}
271
-
272
-			$plugin_info = Redux_Functions_Ex::is_inside_plugin( __FILE__ );
273
-
274
-			if ( false !== $plugin_info ) {
275
-				self::$installed = class_exists( 'Redux_Framework_Plugin' ) ? 'plugin' : 'in_plugin';
276
-				self::$is_plugin = class_exists( 'Redux_Framework_Plugin' );
277
-				self::$as_plugin = true;
278
-				self::$url       = trailingslashit( dirname( $plugin_info['url'] ) );
279
-			} else {
280
-				$theme_info = Redux_Functions_Ex::is_inside_theme( __FILE__ );
281
-				if ( false !== $theme_info ) {
282
-					self::$url       = trailingslashit( dirname( $theme_info['url'] ) );
283
-					self::$in_theme  = true;
284
-					self::$installed = 'in_theme';
285
-				}
286
-			}
287
-
288
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
289
-			self::$url = apply_filters( 'redux/url', self::$url );
290
-
291
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
292
-			self::$dir = apply_filters( 'redux/dir', self::$dir );
293
-
294
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
295
-			self::$is_plugin = apply_filters( 'redux/is_plugin', self::$is_plugin );
296
-
297
-			if ( ! function_exists( 'current_time' ) ) {
298
-				require_once ABSPATH . '/wp-includes/functions.php';
299
-			}
300
-
301
-			$upload_dir       = wp_upload_dir();
302
-			self::$upload_dir = $upload_dir['basedir'] . '/redux/';
303
-			self::$upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' );
304
-
305
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
306
-			self::$upload_dir = apply_filters( 'redux/upload_dir', self::$upload_dir );
307
-
308
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
309
-			self::$upload_url = apply_filters( 'redux/upload_url', self::$upload_url );
310
-		}
311
-
312
-		/**
313
-		 * Code to execute on a framework __construct.
314
-		 *
315
-		 * @param ReduxFramework $redux Pointer to ReduxFramework object.
316
-		 */
317
-		public static function core_construct( ReduxFramework $redux ) {
318
-			self::$third_party_fixes = new Redux_ThirdParty_Fixes( $redux );
319
-
320
-			Redux_ThemeCheck::get_instance();
321
-		}
322
-
323
-		/**
324
-		 * Autoregister run.
325
-		 *
326
-		 * @throws Exception Comment.
327
-		 */
328
-		private function includes() {
329
-			if ( is_admin() ) {
330
-				if ( class_exists( 'Redux_Pro' ) && isset( Redux_Pro::$dir ) ) {
331
-					echo '<div class="error"><p>' . sprintf( esc_html__( 'Redux has detected the Redux Pro plugin is enabled. All featured of Redux Pro are now part of the entire Redux plugin and is no longer required. Please disable the Redux Pro plugin to avoid potential conflicts.', 'redux-framework' ), '<code></code>' ) . '</p></div>';
332
-				}
333
-			}
334
-
335
-			require_once __DIR__ . '/inc/classes/class-redux-path.php';
336
-			require_once __DIR__ . '/inc/classes/class-redux-functions-ex.php';
337
-			require_once __DIR__ . '/inc/classes/class-redux-helpers.php';
338
-			require_once __DIR__ . '/inc/classes/class-redux-instances.php';
339
-
340
-			Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/classes' );
341
-			Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/welcome' );
342
-
343
-			spl_autoload_register( array( $this, 'register_classes' ) );
344
-
345
-			self::$welcome = new Redux_Welcome();
346
-
347
-			add_filter( 'debug_information', array( $this, 'add_debug_info' ) );
348
-		}
349
-
350
-		/**
351
-		 * Add debug info for the WP Site Health screen.
352
-		 *
353
-		 * @param array $debug_info Debug data.
354
-		 *
355
-		 * @return array
356
-		 * @throws ReflectionException Exception.
357
-		 */
358
-		public function add_debug_info( array $debug_info ): array {
359
-
360
-			// Get browser data.
361
-			if ( ! class_exists( 'ReduxBrowser' ) ) {
362
-				require_once self::$dir . 'inc/lib/browser.php';
363
-			}
364
-
365
-			$browser = new ReduxBrowser();
366
-
367
-			$browser_data = array(
368
-				'Agent'    => $browser->getUserAgent(),
369
-				'Browser'  => $browser->getBrowser(),
370
-				'Version'  => $browser->getVersion(),
371
-				'Platform' => $browser->getPlatform(),
372
-			);
373
-
374
-			// Set Redux dir permission results to Site Health screen.
375
-			$debug_info['wp-filesystem']['fields'][] = array(
376
-				'label' => esc_html__( 'The Redux upload directory', 'redux-framework' ),
377
-				'value' => wp_is_writable( self::$upload_dir ) ? 'Writable' : 'Not writable',
378
-			);
379
-
380
-			// Set Redux plugin results to Site Health screen.
381
-			$debug_info['redux-framework'] = array(
382
-				'label'       => esc_html__( 'Redux Framework', 'redux-framework' ),
383
-				'description' => esc_html__( 'Debug information specific to Redux Framework.', 'redux-framework' ),
384
-				'fields'      => array(
385
-					'version'        => array(
386
-						'label' => esc_html__( 'Version', 'redux-framework' ),
387
-						'value' => self::$version,
388
-					),
389
-					'installation'   => array(
390
-						'label' => esc_html__( 'Installation', 'redux-framework' ),
391
-						'value' => self::$installed,
392
-					),
393
-					'data directory' => array(
394
-						'label' => esc_html__( 'Data directory', 'redux-framework' ),
395
-						'value' => self::$dir,
396
-					),
397
-					'browser'        => array(
398
-						'label' => esc_html__( 'Browser', 'redux-framework' ),
399
-						'value' => $browser_data,
400
-					),
401
-				),
402
-			);
403
-
404
-			$redux = Redux::all_instances();
405
-
406
-			$extensions = array();
407
-
408
-			if ( ! empty( $redux ) && is_array( $redux ) ) {
409
-				foreach ( $redux as $inst => $data ) {
410
-					Redux::init( $inst );
411
-
412
-					$inst_name = ucwords( str_replace( array( '_', '-' ), ' ', $inst ) );
413
-					$args      = $data->args;
414
-
415
-					$ext = Redux::get_extensions( $inst );
416
-					if ( ! empty( $ext ) && is_array( $ext ) ) {
417
-						ksort( $ext );
418
-
419
-						foreach ( $ext as $name => $arr ) {
420
-							$ver = $arr['version'];
421
-
422
-							$ex = esc_html( ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) );
423
-
424
-							$extensions[ $ex ] = esc_html( $ver );
425
-						}
426
-					}
427
-
428
-					// Output Redux instances.
429
-					$debug_info[ 'redux-instance-' . $inst ] = array(
430
-						// translators: %s = Instance name.
431
-						'label'       => sprintf( esc_html__( 'Redux Instance: %s', 'redux-framework' ), $inst_name ),
432
-						// translators: %s = Instance name w/ HTML.
433
-						'description' => sprintf( esc_html__( 'Debug information for the %s Redux instance.', 'redux-framework' ), '<code>' . $inst . '</code>' ),
434
-						'fields'      => array(
435
-							'opt_name'         => array(
436
-								'label' => esc_html( 'opt_name' ),
437
-								'value' => $args['opt_name'],
438
-							),
439
-							'global_variable'  => array(
440
-								'label' => esc_html( 'global_variable' ),
441
-								'value' => $args['global_variable'],
442
-							),
443
-							'dev_mode'         => array(
444
-								'label' => esc_html( 'dev_mode' ),
445
-								'value' => $args['dev_mode'] ? 'true' : 'false',
446
-							),
447
-							'ajax_save'        => array(
448
-								'label' => esc_html( 'ajax_save' ),
449
-								'value' => $args['ajax_save'] ? 'true' : 'false',
450
-							),
451
-							'page_slug'        => array(
452
-								'label' => esc_html( 'page_slug' ),
453
-								'value' => $args['page_slug'],
454
-							),
455
-							'page_permissions' => array(
456
-								'label' => esc_html( 'page_permissions' ),
457
-								'value' => $args['page_permissions'],
458
-							),
459
-							'menu_type'        => array(
460
-								'label' => esc_html( 'menu_type' ),
461
-								'value' => $args['menu_type'],
462
-							),
463
-							'page_parent'      => array(
464
-								'label' => esc_html( 'page_parent' ),
465
-								'value' => $args['page_parent'],
466
-							),
467
-							'compiler'         => array(
468
-								'label' => esc_html( 'compiler' ),
469
-								'value' => $args['compiler'] ? 'true' : 'false',
470
-							),
471
-							'output'           => array(
472
-								'label' => esc_html( 'output' ),
473
-								'value' => $args['output'] ? 'true' : 'false',
474
-							),
475
-							'output_tag'       => array(
476
-								'label' => esc_html( 'output_tag' ),
477
-								'value' => $args['output_tag'] ? 'true' : 'false',
478
-							),
479
-							'templates_path'   => array(
480
-								'label' => esc_html( 'templates_path' ),
481
-								'value' => $args['templates_path'],
482
-							),
483
-							'extensions'       => array(
484
-								'label' => esc_html( 'extensions' ),
485
-								'value' => $extensions,
486
-							),
487
-						),
488
-					);
489
-				}
490
-			}
491
-
492
-			return $debug_info;
493
-		}
494
-
495
-		/**
496
-		 * Register callback for autoload.
497
-		 *
498
-		 * @param string $class_name name of class.
499
-		 */
500
-		public function register_classes( string $class_name ) {
501
-			$class_name_test = self::strtolower( $class_name );
502
-
503
-			if ( strpos( $class_name_test, 'redux' ) === false ) {
504
-				return;
505
-			}
506
-
507
-			if ( ! class_exists( 'Redux_Functions_Ex' ) ) {
508
-				require_once Redux_Path::get_path( '/inc/classes/class-redux-functions-ex.php' );
509
-			}
510
-
511
-			if ( ! class_exists( $class_name ) ) {
512
-				// Backward compatibility for extensions sucks!
513
-				if ( 'Redux_Instances' === $class_name ) {
514
-					require_once Redux_Path::get_path( '/inc/classes/class-redux-instances.php' );
515
-					require_once Redux_Path::get_path( '/inc/lib/redux-instances.php' );
516
-
517
-					return;
518
-				}
519
-
520
-				// Load Redux APIs.
521
-				if ( 'Redux' === $class_name ) {
522
-					require_once Redux_Path::get_path( '/inc/classes/class-redux-api.php' );
523
-
524
-					return;
525
-				}
526
-
527
-				// Redux extra theme checks.
528
-				if ( 'Redux_ThemeCheck' === $class_name ) {
529
-					require_once Redux_Path::get_path( '/inc/themecheck/class-redux-themecheck.php' );
530
-
531
-					return;
532
-				}
533
-
534
-				if ( 'Redux_Welcome' === $class_name ) {
535
-					require_once Redux_Path::get_path( '/inc/welcome/class-redux-welcome.php' );
536
-
537
-					return;
538
-				}
539
-
540
-				$mappings = array(
541
-					'ReduxFrameworkInstances'  => 'Redux_Instances',
542
-					'reduxCorePanel'           => 'Redux_Panel',
543
-					'reduxCoreEnqueue'         => 'Redux_Enqueue',
544
-					'Redux_Abstract_Extension' => 'Redux_Extension_Abstract',
545
-				);
546
-				$alias    = false;
547
-				if ( isset( $mappings[ $class_name ] ) ) {
548
-					$alias      = $class_name;
549
-					$class_name = $mappings[ $class_name ];
550
-				}
551
-
552
-				// Everything else.
553
-				$file = 'class.' . $class_name_test . '.php';
554
-
555
-				$class_path = Redux_Path::get_path( '/inc/classes/' . $file );
556
-
557
-				if ( ! file_exists( $class_path ) ) {
558
-					$class_file_name = str_replace( '_', '-', $class_name );
559
-					$file            = 'class-' . $class_name_test . '.php';
560
-					$class_path      = Redux_Path::get_path( '/inc/classes/' . $file );
561
-				}
562
-
563
-				if ( file_exists( $class_path ) && ! class_exists( $class_name ) ) {
564
-					require_once $class_path;
565
-				}
566
-				if ( class_exists( $class_name ) && ! empty( $alias ) && ! class_exists( $alias ) ) {
567
-					class_alias( $class_name, $alias );
568
-				}
569
-			}
570
-
571
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
572
-			do_action( 'redux/core/includes', $this );
573
-		}
574
-
575
-		/**
576
-		 * Hooks to run on instance creation.
577
-		 */
578
-		private function hooks() {
579
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
580
-			do_action( 'redux/core/hooks', $this );
581
-		}
582
-
583
-		/**
584
-		 * Action to run on WordPress heartbeat.
585
-		 *
586
-		 * @return bool
587
-		 */
588
-		public static function is_heartbeat(): bool {
589
-			// Disregard WP AJAX 'heartbeat' call.  Why waste resources?
590
-			if ( isset( $_POST ) && isset( $_POST['_nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_nonce'] ) ), 'heartbeat-nonce' ) ) {
591
-
592
-				if ( isset( $_POST['action'] ) && 'heartbeat' === sanitize_text_field( wp_unslash( $_POST['action'] ) ) ) {
593
-
594
-					// Hook, for purists.
595
-					if ( has_action( 'redux/ajax/heartbeat' ) ) {
596
-						// phpcs:ignore WordPress.NamingConventions.ValidHookName
597
-						do_action( 'redux/ajax/heartbeat' );
598
-					}
599
-
600
-					return true;
601
-				}
602
-
603
-				return false;
604
-			}
605
-
606
-			// Buh bye!
607
-			return false;
608
-		}
609
-
610
-		/**
611
-		 * Helper method to check for mb_strtolower or to use the standard strtolower.
612
-		 *
613
-		 * @param string|null $str String to make lowercase.
614
-		 *
615
-		 * @return string|null
616
-		 */
617
-		public static function strtolower( ?string $str ): string {
618
-			if ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) {
619
-				return mb_strtolower( $str, mb_detect_encoding( $str ) );
620
-			} else {
621
-				return strtolower( $str );
622
-			}
623
-		}
624
-	}
625
-
626
-	/*
14
+    /**
15
+     * Class Redux_Core
16
+     */
17
+    class Redux_Core {
18
+
19
+        /**
20
+         * Class instance.
21
+         *
22
+         * @var null|Redux_Core
23
+         */
24
+        public static ?Redux_Core $instance = null;
25
+
26
+        /**
27
+         * Project version
28
+         *
29
+         * @var string
30
+         */
31
+        public static string $version;
32
+
33
+        /**
34
+         * Project directory.
35
+         *
36
+         * @var string.
37
+         */
38
+        public static string $dir;
39
+
40
+        /**
41
+         * Project URL.
42
+         *
43
+         * @var string.
44
+         */
45
+        public static string $url;
46
+
47
+        /**
48
+         * Base directory path.
49
+         *
50
+         * @var string
51
+         */
52
+        public static string $redux_path;
53
+
54
+        /**
55
+         * Absolute direction path to WordPress upload directory.
56
+         *
57
+         * @var string
58
+         */
59
+        public static string $upload_dir = '';
60
+
61
+        /**
62
+         * Full URL to WordPress upload directory.
63
+         *
64
+         * @var null|string
65
+         */
66
+        public static ?string $upload_url = '';
67
+
68
+        /**
69
+         * Set when Redux is run as a plugin.
70
+         *
71
+         * @var bool
72
+         */
73
+        public static bool $is_plugin = true;
74
+
75
+        /**
76
+         * Indicated in_theme or in_plugin.
77
+         *
78
+         * @var string
79
+         */
80
+        public static string $installed = '';
81
+
82
+        /**
83
+         * Set when Redux is run as a plugin.
84
+         *
85
+         * @var bool
86
+         */
87
+        public static bool $as_plugin = false;
88
+
89
+        /**
90
+         * Set when Redux is embedded within a theme.
91
+         *
92
+         * @var bool
93
+         */
94
+        public static bool $in_theme = false;
95
+
96
+        /**
97
+         * Pointer to an updated Google fonts array.
98
+         *
99
+         * @var array|null
100
+         */
101
+        public static ?array $updated_google_fonts = array();
102
+
103
+        /**
104
+         * List of files calling Redux.
105
+         *
106
+         * @var array|null
107
+         */
108
+        public static ?array $callers = array();
109
+
110
+        /**
111
+         * Pointer to _SERVER global.
112
+         *
113
+         * @var array|null
114
+         */
115
+        public static ?array $server = array();
116
+
117
+        /**
118
+         * Field folding information for localization.
119
+         *
120
+         * @var null|array
121
+         */
122
+        public static ?array $required = array();
123
+
124
+        /**
125
+         * Field child-folding information for localization.
126
+         *
127
+         * @var null|array
128
+         */
129
+        public static ?array $required_child = array();
130
+
131
+        /**
132
+         * Array of fields to be folded.
133
+         *
134
+         * @var array|null
135
+         */
136
+        public static ?array $folds = array();
137
+
138
+        /**
139
+         * Array of fields that didn't pass the fold dependency test and are hidden.
140
+         *
141
+         * @var null|array
142
+         */
143
+        public static ?array $fields_hidden = array();
144
+
145
+        /**
146
+         * Values to generate google font CSS.
147
+         *
148
+         * @var null|array
149
+         */
150
+        public static ?array $typography = array();
151
+
152
+        /**
153
+         * Validation ran flag.
154
+         *
155
+         * @var bool
156
+         */
157
+        public static bool $validation_ran = false;
158
+
159
+        /**
160
+         * No output flag.
161
+         *
162
+         * @var bool
163
+         */
164
+        public static bool $no_output = false;
165
+
166
+        /**
167
+         * Array of fonts used by the panel for localization.
168
+         *
169
+         * @var null|array
170
+         */
171
+        public static ?array $fonts = array();
172
+
173
+        /**
174
+         * Array of Google fonts used by the panel for localization.
175
+         *
176
+         * @var null|array
177
+         */
178
+        public static ?array $google_array = array();
179
+
180
+        /**
181
+         * Array of various font groups used within the typography field.
182
+         *
183
+         * @var null|array
184
+         */
185
+        public static ?array $font_groups = array();
186
+
187
+        /**
188
+         * File system object used for I/O file operations.  Done the WordPress way.
189
+         *
190
+         * @var null|object
191
+         */
192
+        public static ?object $filesystem;
193
+
194
+        /**
195
+         * Pointer to the third party fixes class.
196
+         *
197
+         * @var Redux_ThirdParty_Fixes
198
+         */
199
+        public static Redux_ThirdParty_Fixes $third_party_fixes;
200
+
201
+        /**
202
+         * Redux Welcome screen object.
203
+         *
204
+         * @var Redux_Welcome
205
+         */
206
+        public static Redux_Welcome $welcome;
207
+
208
+        /**
209
+         * Creates instance of class.
210
+         *
211
+         * @return Redux_Core
212
+         * @throws Exception Comment.
213
+         */
214
+        public static function instance(): ?Redux_Core {
215
+            if ( ! self::$instance ) {
216
+                self::$instance = new self();
217
+
218
+                self::$instance->includes();
219
+                self::$instance->init();
220
+                self::$instance->hooks();
221
+
222
+                add_action( 'plugins_loaded', array( 'Redux_Core', 'plugins_loaded' ) );
223
+            }
224
+
225
+            return self::$instance;
226
+        }
227
+
228
+        /**
229
+         * Things to run after pluggable.php had loaded.
230
+         */
231
+        public static function plugins_loaded() {}
232
+
233
+        /**
234
+         * Class init.
235
+         */
236
+        private function init() {
237
+            self::$server = array(
238
+                'SERVER_SOFTWARE' => '',
239
+                'REMOTE_ADDR'     => Redux_Helpers::is_local_host() ? '127.0.0.1' : '',
240
+                'HTTP_USER_AGENT' => '',
241
+                'HTTP_HOST'       => '',
242
+                'REQUEST_URI'     => '',
243
+            );
244
+
245
+            // phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
246
+            if ( ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
247
+                self::$server['SERVER_SOFTWARE'] = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
248
+            }
249
+            if ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
250
+                self::$server['REMOTE_ADDR'] = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );
251
+            }
252
+            if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
253
+                self::$server['HTTP_USER_AGENT'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) );
254
+            }
255
+            if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
256
+                self::$server['HTTP_HOST'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) );
257
+            }
258
+            if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
259
+                self::$server['REQUEST_URI'] = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
260
+            }
261
+
262
+            // phpcs:enable
263
+
264
+            self::$dir = trailingslashit( wp_normalize_path( dirname( realpath( __FILE__ ) ) ) );
265
+
266
+            Redux_Functions_Ex::generator();
267
+
268
+            if ( defined( 'REDUX_PLUGIN_FILE' ) ) {
269
+                $plugin_info = Redux_Functions_Ex::is_inside_plugin( REDUX_PLUGIN_FILE );
270
+            }
271
+
272
+            $plugin_info = Redux_Functions_Ex::is_inside_plugin( __FILE__ );
273
+
274
+            if ( false !== $plugin_info ) {
275
+                self::$installed = class_exists( 'Redux_Framework_Plugin' ) ? 'plugin' : 'in_plugin';
276
+                self::$is_plugin = class_exists( 'Redux_Framework_Plugin' );
277
+                self::$as_plugin = true;
278
+                self::$url       = trailingslashit( dirname( $plugin_info['url'] ) );
279
+            } else {
280
+                $theme_info = Redux_Functions_Ex::is_inside_theme( __FILE__ );
281
+                if ( false !== $theme_info ) {
282
+                    self::$url       = trailingslashit( dirname( $theme_info['url'] ) );
283
+                    self::$in_theme  = true;
284
+                    self::$installed = 'in_theme';
285
+                }
286
+            }
287
+
288
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
289
+            self::$url = apply_filters( 'redux/url', self::$url );
290
+
291
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
292
+            self::$dir = apply_filters( 'redux/dir', self::$dir );
293
+
294
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
295
+            self::$is_plugin = apply_filters( 'redux/is_plugin', self::$is_plugin );
296
+
297
+            if ( ! function_exists( 'current_time' ) ) {
298
+                require_once ABSPATH . '/wp-includes/functions.php';
299
+            }
300
+
301
+            $upload_dir       = wp_upload_dir();
302
+            self::$upload_dir = $upload_dir['basedir'] . '/redux/';
303
+            self::$upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' );
304
+
305
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
306
+            self::$upload_dir = apply_filters( 'redux/upload_dir', self::$upload_dir );
307
+
308
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
309
+            self::$upload_url = apply_filters( 'redux/upload_url', self::$upload_url );
310
+        }
311
+
312
+        /**
313
+         * Code to execute on a framework __construct.
314
+         *
315
+         * @param ReduxFramework $redux Pointer to ReduxFramework object.
316
+         */
317
+        public static function core_construct( ReduxFramework $redux ) {
318
+            self::$third_party_fixes = new Redux_ThirdParty_Fixes( $redux );
319
+
320
+            Redux_ThemeCheck::get_instance();
321
+        }
322
+
323
+        /**
324
+         * Autoregister run.
325
+         *
326
+         * @throws Exception Comment.
327
+         */
328
+        private function includes() {
329
+            if ( is_admin() ) {
330
+                if ( class_exists( 'Redux_Pro' ) && isset( Redux_Pro::$dir ) ) {
331
+                    echo '<div class="error"><p>' . sprintf( esc_html__( 'Redux has detected the Redux Pro plugin is enabled. All featured of Redux Pro are now part of the entire Redux plugin and is no longer required. Please disable the Redux Pro plugin to avoid potential conflicts.', 'redux-framework' ), '<code></code>' ) . '</p></div>';
332
+                }
333
+            }
334
+
335
+            require_once __DIR__ . '/inc/classes/class-redux-path.php';
336
+            require_once __DIR__ . '/inc/classes/class-redux-functions-ex.php';
337
+            require_once __DIR__ . '/inc/classes/class-redux-helpers.php';
338
+            require_once __DIR__ . '/inc/classes/class-redux-instances.php';
339
+
340
+            Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/classes' );
341
+            Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/welcome' );
342
+
343
+            spl_autoload_register( array( $this, 'register_classes' ) );
344
+
345
+            self::$welcome = new Redux_Welcome();
346
+
347
+            add_filter( 'debug_information', array( $this, 'add_debug_info' ) );
348
+        }
349
+
350
+        /**
351
+         * Add debug info for the WP Site Health screen.
352
+         *
353
+         * @param array $debug_info Debug data.
354
+         *
355
+         * @return array
356
+         * @throws ReflectionException Exception.
357
+         */
358
+        public function add_debug_info( array $debug_info ): array {
359
+
360
+            // Get browser data.
361
+            if ( ! class_exists( 'ReduxBrowser' ) ) {
362
+                require_once self::$dir . 'inc/lib/browser.php';
363
+            }
364
+
365
+            $browser = new ReduxBrowser();
366
+
367
+            $browser_data = array(
368
+                'Agent'    => $browser->getUserAgent(),
369
+                'Browser'  => $browser->getBrowser(),
370
+                'Version'  => $browser->getVersion(),
371
+                'Platform' => $browser->getPlatform(),
372
+            );
373
+
374
+            // Set Redux dir permission results to Site Health screen.
375
+            $debug_info['wp-filesystem']['fields'][] = array(
376
+                'label' => esc_html__( 'The Redux upload directory', 'redux-framework' ),
377
+                'value' => wp_is_writable( self::$upload_dir ) ? 'Writable' : 'Not writable',
378
+            );
379
+
380
+            // Set Redux plugin results to Site Health screen.
381
+            $debug_info['redux-framework'] = array(
382
+                'label'       => esc_html__( 'Redux Framework', 'redux-framework' ),
383
+                'description' => esc_html__( 'Debug information specific to Redux Framework.', 'redux-framework' ),
384
+                'fields'      => array(
385
+                    'version'        => array(
386
+                        'label' => esc_html__( 'Version', 'redux-framework' ),
387
+                        'value' => self::$version,
388
+                    ),
389
+                    'installation'   => array(
390
+                        'label' => esc_html__( 'Installation', 'redux-framework' ),
391
+                        'value' => self::$installed,
392
+                    ),
393
+                    'data directory' => array(
394
+                        'label' => esc_html__( 'Data directory', 'redux-framework' ),
395
+                        'value' => self::$dir,
396
+                    ),
397
+                    'browser'        => array(
398
+                        'label' => esc_html__( 'Browser', 'redux-framework' ),
399
+                        'value' => $browser_data,
400
+                    ),
401
+                ),
402
+            );
403
+
404
+            $redux = Redux::all_instances();
405
+
406
+            $extensions = array();
407
+
408
+            if ( ! empty( $redux ) && is_array( $redux ) ) {
409
+                foreach ( $redux as $inst => $data ) {
410
+                    Redux::init( $inst );
411
+
412
+                    $inst_name = ucwords( str_replace( array( '_', '-' ), ' ', $inst ) );
413
+                    $args      = $data->args;
414
+
415
+                    $ext = Redux::get_extensions( $inst );
416
+                    if ( ! empty( $ext ) && is_array( $ext ) ) {
417
+                        ksort( $ext );
418
+
419
+                        foreach ( $ext as $name => $arr ) {
420
+                            $ver = $arr['version'];
421
+
422
+                            $ex = esc_html( ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) );
423
+
424
+                            $extensions[ $ex ] = esc_html( $ver );
425
+                        }
426
+                    }
427
+
428
+                    // Output Redux instances.
429
+                    $debug_info[ 'redux-instance-' . $inst ] = array(
430
+                        // translators: %s = Instance name.
431
+                        'label'       => sprintf( esc_html__( 'Redux Instance: %s', 'redux-framework' ), $inst_name ),
432
+                        // translators: %s = Instance name w/ HTML.
433
+                        'description' => sprintf( esc_html__( 'Debug information for the %s Redux instance.', 'redux-framework' ), '<code>' . $inst . '</code>' ),
434
+                        'fields'      => array(
435
+                            'opt_name'         => array(
436
+                                'label' => esc_html( 'opt_name' ),
437
+                                'value' => $args['opt_name'],
438
+                            ),
439
+                            'global_variable'  => array(
440
+                                'label' => esc_html( 'global_variable' ),
441
+                                'value' => $args['global_variable'],
442
+                            ),
443
+                            'dev_mode'         => array(
444
+                                'label' => esc_html( 'dev_mode' ),
445
+                                'value' => $args['dev_mode'] ? 'true' : 'false',
446
+                            ),
447
+                            'ajax_save'        => array(
448
+                                'label' => esc_html( 'ajax_save' ),
449
+                                'value' => $args['ajax_save'] ? 'true' : 'false',
450
+                            ),
451
+                            'page_slug'        => array(
452
+                                'label' => esc_html( 'page_slug' ),
453
+                                'value' => $args['page_slug'],
454
+                            ),
455
+                            'page_permissions' => array(
456
+                                'label' => esc_html( 'page_permissions' ),
457
+                                'value' => $args['page_permissions'],
458
+                            ),
459
+                            'menu_type'        => array(
460
+                                'label' => esc_html( 'menu_type' ),
461
+                                'value' => $args['menu_type'],
462
+                            ),
463
+                            'page_parent'      => array(
464
+                                'label' => esc_html( 'page_parent' ),
465
+                                'value' => $args['page_parent'],
466
+                            ),
467
+                            'compiler'         => array(
468
+                                'label' => esc_html( 'compiler' ),
469
+                                'value' => $args['compiler'] ? 'true' : 'false',
470
+                            ),
471
+                            'output'           => array(
472
+                                'label' => esc_html( 'output' ),
473
+                                'value' => $args['output'] ? 'true' : 'false',
474
+                            ),
475
+                            'output_tag'       => array(
476
+                                'label' => esc_html( 'output_tag' ),
477
+                                'value' => $args['output_tag'] ? 'true' : 'false',
478
+                            ),
479
+                            'templates_path'   => array(
480
+                                'label' => esc_html( 'templates_path' ),
481
+                                'value' => $args['templates_path'],
482
+                            ),
483
+                            'extensions'       => array(
484
+                                'label' => esc_html( 'extensions' ),
485
+                                'value' => $extensions,
486
+                            ),
487
+                        ),
488
+                    );
489
+                }
490
+            }
491
+
492
+            return $debug_info;
493
+        }
494
+
495
+        /**
496
+         * Register callback for autoload.
497
+         *
498
+         * @param string $class_name name of class.
499
+         */
500
+        public function register_classes( string $class_name ) {
501
+            $class_name_test = self::strtolower( $class_name );
502
+
503
+            if ( strpos( $class_name_test, 'redux' ) === false ) {
504
+                return;
505
+            }
506
+
507
+            if ( ! class_exists( 'Redux_Functions_Ex' ) ) {
508
+                require_once Redux_Path::get_path( '/inc/classes/class-redux-functions-ex.php' );
509
+            }
510
+
511
+            if ( ! class_exists( $class_name ) ) {
512
+                // Backward compatibility for extensions sucks!
513
+                if ( 'Redux_Instances' === $class_name ) {
514
+                    require_once Redux_Path::get_path( '/inc/classes/class-redux-instances.php' );
515
+                    require_once Redux_Path::get_path( '/inc/lib/redux-instances.php' );
516
+
517
+                    return;
518
+                }
519
+
520
+                // Load Redux APIs.
521
+                if ( 'Redux' === $class_name ) {
522
+                    require_once Redux_Path::get_path( '/inc/classes/class-redux-api.php' );
523
+
524
+                    return;
525
+                }
526
+
527
+                // Redux extra theme checks.
528
+                if ( 'Redux_ThemeCheck' === $class_name ) {
529
+                    require_once Redux_Path::get_path( '/inc/themecheck/class-redux-themecheck.php' );
530
+
531
+                    return;
532
+                }
533
+
534
+                if ( 'Redux_Welcome' === $class_name ) {
535
+                    require_once Redux_Path::get_path( '/inc/welcome/class-redux-welcome.php' );
536
+
537
+                    return;
538
+                }
539
+
540
+                $mappings = array(
541
+                    'ReduxFrameworkInstances'  => 'Redux_Instances',
542
+                    'reduxCorePanel'           => 'Redux_Panel',
543
+                    'reduxCoreEnqueue'         => 'Redux_Enqueue',
544
+                    'Redux_Abstract_Extension' => 'Redux_Extension_Abstract',
545
+                );
546
+                $alias    = false;
547
+                if ( isset( $mappings[ $class_name ] ) ) {
548
+                    $alias      = $class_name;
549
+                    $class_name = $mappings[ $class_name ];
550
+                }
551
+
552
+                // Everything else.
553
+                $file = 'class.' . $class_name_test . '.php';
554
+
555
+                $class_path = Redux_Path::get_path( '/inc/classes/' . $file );
556
+
557
+                if ( ! file_exists( $class_path ) ) {
558
+                    $class_file_name = str_replace( '_', '-', $class_name );
559
+                    $file            = 'class-' . $class_name_test . '.php';
560
+                    $class_path      = Redux_Path::get_path( '/inc/classes/' . $file );
561
+                }
562
+
563
+                if ( file_exists( $class_path ) && ! class_exists( $class_name ) ) {
564
+                    require_once $class_path;
565
+                }
566
+                if ( class_exists( $class_name ) && ! empty( $alias ) && ! class_exists( $alias ) ) {
567
+                    class_alias( $class_name, $alias );
568
+                }
569
+            }
570
+
571
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
572
+            do_action( 'redux/core/includes', $this );
573
+        }
574
+
575
+        /**
576
+         * Hooks to run on instance creation.
577
+         */
578
+        private function hooks() {
579
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
580
+            do_action( 'redux/core/hooks', $this );
581
+        }
582
+
583
+        /**
584
+         * Action to run on WordPress heartbeat.
585
+         *
586
+         * @return bool
587
+         */
588
+        public static function is_heartbeat(): bool {
589
+            // Disregard WP AJAX 'heartbeat' call.  Why waste resources?
590
+            if ( isset( $_POST ) && isset( $_POST['_nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_nonce'] ) ), 'heartbeat-nonce' ) ) {
591
+
592
+                if ( isset( $_POST['action'] ) && 'heartbeat' === sanitize_text_field( wp_unslash( $_POST['action'] ) ) ) {
593
+
594
+                    // Hook, for purists.
595
+                    if ( has_action( 'redux/ajax/heartbeat' ) ) {
596
+                        // phpcs:ignore WordPress.NamingConventions.ValidHookName
597
+                        do_action( 'redux/ajax/heartbeat' );
598
+                    }
599
+
600
+                    return true;
601
+                }
602
+
603
+                return false;
604
+            }
605
+
606
+            // Buh bye!
607
+            return false;
608
+        }
609
+
610
+        /**
611
+         * Helper method to check for mb_strtolower or to use the standard strtolower.
612
+         *
613
+         * @param string|null $str String to make lowercase.
614
+         *
615
+         * @return string|null
616
+         */
617
+        public static function strtolower( ?string $str ): string {
618
+            if ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) {
619
+                return mb_strtolower( $str, mb_detect_encoding( $str ) );
620
+            } else {
621
+                return strtolower( $str );
622
+            }
623
+        }
624
+    }
625
+
626
+    /*
627 627
 	 * Backwards comparability alias
628 628
 	 */
629
-	class_alias( 'Redux_Core', 'redux-core' );
629
+    class_alias( 'Redux_Core', 'redux-core' );
630 630
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -98,56 +98,56 @@  discard block
 block discarded – undo
98 98
 		 *
99 99
 		 * @var array|null
100 100
 		 */
101
-		public static ?array $updated_google_fonts = array();
101
+		public static ? array $updated_google_fonts = array();
102 102
 
103 103
 		/**
104 104
 		 * List of files calling Redux.
105 105
 		 *
106 106
 		 * @var array|null
107 107
 		 */
108
-		public static ?array $callers = array();
108
+		public static ? array $callers = array();
109 109
 
110 110
 		/**
111 111
 		 * Pointer to _SERVER global.
112 112
 		 *
113 113
 		 * @var array|null
114 114
 		 */
115
-		public static ?array $server = array();
115
+		public static ? array $server = array();
116 116
 
117 117
 		/**
118 118
 		 * Field folding information for localization.
119 119
 		 *
120 120
 		 * @var null|array
121 121
 		 */
122
-		public static ?array $required = array();
122
+		public static ? array $required = array();
123 123
 
124 124
 		/**
125 125
 		 * Field child-folding information for localization.
126 126
 		 *
127 127
 		 * @var null|array
128 128
 		 */
129
-		public static ?array $required_child = array();
129
+		public static ? array $required_child = array();
130 130
 
131 131
 		/**
132 132
 		 * Array of fields to be folded.
133 133
 		 *
134 134
 		 * @var array|null
135 135
 		 */
136
-		public static ?array $folds = array();
136
+		public static ? array $folds = array();
137 137
 
138 138
 		/**
139 139
 		 * Array of fields that didn't pass the fold dependency test and are hidden.
140 140
 		 *
141 141
 		 * @var null|array
142 142
 		 */
143
-		public static ?array $fields_hidden = array();
143
+		public static ? array $fields_hidden = array();
144 144
 
145 145
 		/**
146 146
 		 * Values to generate google font CSS.
147 147
 		 *
148 148
 		 * @var null|array
149 149
 		 */
150
-		public static ?array $typography = array();
150
+		public static ? array $typography = array();
151 151
 
152 152
 		/**
153 153
 		 * Validation ran flag.
@@ -168,21 +168,21 @@  discard block
 block discarded – undo
168 168
 		 *
169 169
 		 * @var null|array
170 170
 		 */
171
-		public static ?array $fonts = array();
171
+		public static ? array $fonts = array();
172 172
 
173 173
 		/**
174 174
 		 * Array of Google fonts used by the panel for localization.
175 175
 		 *
176 176
 		 * @var null|array
177 177
 		 */
178
-		public static ?array $google_array = array();
178
+		public static ? array $google_array = array();
179 179
 
180 180
 		/**
181 181
 		 * Array of various font groups used within the typography field.
182 182
 		 *
183 183
 		 * @var null|array
184 184
 		 */
185
-		public static ?array $font_groups = array();
185
+		public static ? array $font_groups = array();
186 186
 
187 187
 		/**
188 188
 		 * File system object used for I/O file operations.  Done the WordPress way.
@@ -421,12 +421,12 @@  discard block
 block discarded – undo
421 421
 
422 422
 							$ex = esc_html( ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) );
423 423
 
424
-							$extensions[ $ex ] = esc_html( $ver );
424
+							$extensions[$ex] = esc_html( $ver );
425 425
 						}
426 426
 					}
427 427
 
428 428
 					// Output Redux instances.
429
-					$debug_info[ 'redux-instance-' . $inst ] = array(
429
+					$debug_info['redux-instance-' . $inst] = array(
430 430
 						// translators: %s = Instance name.
431 431
 						'label'       => sprintf( esc_html__( 'Redux Instance: %s', 'redux-framework' ), $inst_name ),
432 432
 						// translators: %s = Instance name w/ HTML.
@@ -543,10 +543,10 @@  discard block
 block discarded – undo
543 543
 					'reduxCoreEnqueue'         => 'Redux_Enqueue',
544 544
 					'Redux_Abstract_Extension' => 'Redux_Extension_Abstract',
545 545
 				);
546
-				$alias    = false;
547
-				if ( isset( $mappings[ $class_name ] ) ) {
546
+				$alias = false;
547
+				if ( isset( $mappings[$class_name] ) ) {
548 548
 					$alias      = $class_name;
549
-					$class_name = $mappings[ $class_name ];
549
+					$class_name = $mappings[$class_name];
550 550
 				}
551 551
 
552 552
 				// Everything else.
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/inc/class-redux-customizer-section.php 1 patch
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -15,108 +15,108 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class Redux_Customizer_Section extends WP_Customize_Section {
17 17
 
18
-	/**
19
-	 * Type of this section.
20
-	 *
21
-	 * @since  4.1.0
22
-	 * @access public
23
-	 * @var string
24
-	 */
25
-	public $type = 'redux';
26
-
27
-	/**
28
-	 * Panel opt_name.
29
-	 *
30
-	 * @since  4.0.0
31
-	 * @access public
32
-	 * @var string
33
-	 */
34
-	public $opt_name = '';
35
-
36
-	/**
37
-	 * Section array.
38
-	 *
39
-	 * @var array|mixed
40
-	 */
41
-	public $section = array();
42
-
43
-	/**
44
-	 * Section array.
45
-	 *
46
-	 * @var string
47
-	 */
48
-	public string $wp_ver;
49
-
50
-	/**
51
-	 * Constructor.
52
-	 * Any supplied $args override class property defaults.
53
-	 *
54
-	 * @since 3.4.0
55
-	 *
56
-	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
57
-	 * @param string               $id      A specific ID of the section.
58
-	 * @param array                $args    Section arguments.
59
-	 */
60
-	public function __construct( $manager, $id, $args = array() ) {
61
-		global $wp_version;
62
-
63
-		parent::__construct( $manager, $id, $args );
64
-
65
-		// Redux addition.
66
-		if ( isset( $args['section'] ) ) {
67
-			$this->section     = $args['section'];
68
-			$this->description = $this->section['desc'] ?? '';
69
-			$this->opt_name    = $args['opt_name'] ?? '';
70
-		}
71
-
72
-		$version      = explode( '-', $wp_version );
73
-		$this->wp_ver = $version[0];
74
-	}
75
-
76
-	/**
77
-	 * WP < 4.3 Render
78
-	 */
79
-	protected function render() {
80
-		global $wp_version;
81
-		$version = explode( '-', $wp_version );
82
-		if ( version_compare( $version[0], '4.3', '<' ) ) {
83
-			$this->render_fallback();
84
-		}
85
-	}
86
-
87
-	/**
88
-	 * Render the section, and the controls that have been added to it.
89
-	 *
90
-	 * @since 3.4.0
91
-	 */
92
-	protected function render_fallback() {
93
-		$classes = 'accordion-section redux-section control-section control-section-' . $this->type;
94
-		?>
18
+    /**
19
+     * Type of this section.
20
+     *
21
+     * @since  4.1.0
22
+     * @access public
23
+     * @var string
24
+     */
25
+    public $type = 'redux';
26
+
27
+    /**
28
+     * Panel opt_name.
29
+     *
30
+     * @since  4.0.0
31
+     * @access public
32
+     * @var string
33
+     */
34
+    public $opt_name = '';
35
+
36
+    /**
37
+     * Section array.
38
+     *
39
+     * @var array|mixed
40
+     */
41
+    public $section = array();
42
+
43
+    /**
44
+     * Section array.
45
+     *
46
+     * @var string
47
+     */
48
+    public string $wp_ver;
49
+
50
+    /**
51
+     * Constructor.
52
+     * Any supplied $args override class property defaults.
53
+     *
54
+     * @since 3.4.0
55
+     *
56
+     * @param WP_Customize_Manager $manager Customizer bootstrap instance.
57
+     * @param string               $id      A specific ID of the section.
58
+     * @param array                $args    Section arguments.
59
+     */
60
+    public function __construct( $manager, $id, $args = array() ) {
61
+        global $wp_version;
62
+
63
+        parent::__construct( $manager, $id, $args );
64
+
65
+        // Redux addition.
66
+        if ( isset( $args['section'] ) ) {
67
+            $this->section     = $args['section'];
68
+            $this->description = $this->section['desc'] ?? '';
69
+            $this->opt_name    = $args['opt_name'] ?? '';
70
+        }
71
+
72
+        $version      = explode( '-', $wp_version );
73
+        $this->wp_ver = $version[0];
74
+    }
75
+
76
+    /**
77
+     * WP < 4.3 Render
78
+     */
79
+    protected function render() {
80
+        global $wp_version;
81
+        $version = explode( '-', $wp_version );
82
+        if ( version_compare( $version[0], '4.3', '<' ) ) {
83
+            $this->render_fallback();
84
+        }
85
+    }
86
+
87
+    /**
88
+     * Render the section, and the controls that have been added to it.
89
+     *
90
+     * @since 3.4.0
91
+     */
92
+    protected function render_fallback() {
93
+        $classes = 'accordion-section redux-section control-section control-section-' . $this->type;
94
+        ?>
95 95
 		<li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="<?php echo esc_attr( $classes ); ?>">
96 96
 			<h3 class="accordion-section-title" tabindex="0">
97 97
 				<?php
98
-				echo wp_kses(
99
-					$this->title,
100
-					array(
101
-						'em'     => array(),
102
-						'i'      => array(),
103
-						'strong' => array(),
104
-						'span'   => array(
105
-							'class' => array(),
106
-							'style' => array(),
107
-						),
108
-					)
109
-				);
110
-				?>
98
+                echo wp_kses(
99
+                    $this->title,
100
+                    array(
101
+                        'em'     => array(),
102
+                        'i'      => array(),
103
+                        'strong' => array(),
104
+                        'span'   => array(
105
+                            'class' => array(),
106
+                            'style' => array(),
107
+                        ),
108
+                    )
109
+                );
110
+                ?>
111 111
 				<span class="screen-reader-text"><?php esc_attr_e( 'Press return or enter to expand', 'redux-framework' ); ?></span>
112 112
 			</h3>
113 113
 			<ul class="accordion-section-content redux-main">
114 114
 				<?php
115
-				if ( isset( $this->opt_name ) && isset( $this->section ) ) {
116
-					// phpcs:ignore WordPress.NamingConventions.ValidHookName
117
-					do_action( "redux/page/$this->opt_name/section/before", $this->section );
118
-				}
119
-				?>
115
+                if ( isset( $this->opt_name ) && isset( $this->section ) ) {
116
+                    // phpcs:ignore WordPress.NamingConventions.ValidHookName
117
+                    do_action( "redux/page/$this->opt_name/section/before", $this->section );
118
+                }
119
+                ?>
120 120
 				<?php if ( ! empty( $this->description ) ) { ?>
121 121
 					<li class="customize-section-description-container">
122 122
 						<p class="description customize-section-description legacy"><?php echo wp_kses_post( $this->description ); ?></p>
@@ -125,60 +125,60 @@  discard block
 block discarded – undo
125 125
 			</ul>
126 126
 		</li>
127 127
 		<?php
128
-	}
129
-
130
-
131
-	/**
132
-	 * Gather the parameters passed to client JavaScript via JSON.
133
-	 *
134
-	 * @since 4.1.0
135
-	 *
136
-	 * @return array The array to be exported to the client as JSON.
137
-	 */
138
-	public function json(): array {
139
-		$array = wp_array_slice_assoc(
140
-			parent::json(),
141
-			array(
142
-				'id',
143
-				'title',
144
-				'description',
145
-				'priority',
146
-				'panel',
147
-				'type',
148
-			)
149
-		);
150
-
151
-		$array['content']        = $this->get_content();
152
-		$array['active']         = $this->active();
153
-		$array['instanceNumber'] = $this->instance_number;
154
-
155
-		if ( $this->panel ) {
156
-			/* translators: &#9656; is the unicode right-pointing triangle, and %s is the section title in the Customizer */
157
-			$array['customizeAction'] = sprintf( __( 'Customizing &#9656; %s', 'redux-framework' ), esc_html( $this->manager->get_panel( $this->panel )->title ) );
158
-		} else {
159
-			$array['customizeAction'] = __( 'Customizing', 'redux-framework' );
160
-		}
161
-
162
-		// BEGIN Redux Additions.
163
-		$array['width'] = $this->section['customizer_width'] ?? '';
164
-		$array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
165
-
166
-		$array['opt_name'] = $this->opt_name;
167
-
168
-		return $array;
169
-	}
170
-
171
-	/**
172
-	 * An Underscore (JS) template for rendering this section.
173
-	 * Class variables for this section class are available in the `data` JS object;
174
-	 * export custom variables by overriding {@see WP_Customize_Section::json()}.
175
-	 *
176
-	 * @see   WP_Customize_Section::print_template()
177
-	 * @since 4.3.0
178
-	 */
179
-	protected function render_template() {
180
-
181
-		?>
128
+    }
129
+
130
+
131
+    /**
132
+     * Gather the parameters passed to client JavaScript via JSON.
133
+     *
134
+     * @since 4.1.0
135
+     *
136
+     * @return array The array to be exported to the client as JSON.
137
+     */
138
+    public function json(): array {
139
+        $array = wp_array_slice_assoc(
140
+            parent::json(),
141
+            array(
142
+                'id',
143
+                'title',
144
+                'description',
145
+                'priority',
146
+                'panel',
147
+                'type',
148
+            )
149
+        );
150
+
151
+        $array['content']        = $this->get_content();
152
+        $array['active']         = $this->active();
153
+        $array['instanceNumber'] = $this->instance_number;
154
+
155
+        if ( $this->panel ) {
156
+            /* translators: &#9656; is the unicode right-pointing triangle, and %s is the section title in the Customizer */
157
+            $array['customizeAction'] = sprintf( __( 'Customizing &#9656; %s', 'redux-framework' ), esc_html( $this->manager->get_panel( $this->panel )->title ) );
158
+        } else {
159
+            $array['customizeAction'] = __( 'Customizing', 'redux-framework' );
160
+        }
161
+
162
+        // BEGIN Redux Additions.
163
+        $array['width'] = $this->section['customizer_width'] ?? '';
164
+        $array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
165
+
166
+        $array['opt_name'] = $this->opt_name;
167
+
168
+        return $array;
169
+    }
170
+
171
+    /**
172
+     * An Underscore (JS) template for rendering this section.
173
+     * Class variables for this section class are available in the `data` JS object;
174
+     * export custom variables by overriding {@see WP_Customize_Section::json()}.
175
+     *
176
+     * @see   WP_Customize_Section::print_template()
177
+     * @since 4.3.0
178
+     */
179
+    protected function render_template() {
180
+
181
+        ?>
182 182
 		<li id="accordion-section-{{ data.id }}"
183 183
 			class="redux-standalone-section redux-customizer-opt-name redux-section accordion-section control-section control-section-{{ data.type }}"
184 184
 			data-opt-name="{{ data.opt_name }}"
@@ -210,14 +210,14 @@  discard block
 block discarded – undo
210 210
 					<p class="description customize-section-description">{{{ data.description }}}</p>
211 211
 					<# } #>
212 212
 					<?php
213
-					if ( isset( $this->opt_name ) && isset( $this->section ) ) {
214
-						// phpcs:ignore WordPress.NamingConventions.ValidHookName
215
-						do_action( "redux/page/$this->opt_name/section/before", $this->section );
216
-					}
217
-					?>
213
+                    if ( isset( $this->opt_name ) && isset( $this->section ) ) {
214
+                        // phpcs:ignore WordPress.NamingConventions.ValidHookName
215
+                        do_action( "redux/page/$this->opt_name/section/before", $this->section );
216
+                    }
217
+                    ?>
218 218
 				</li>
219 219
 			</ul>
220 220
 		</li>
221 221
 		<?php
222
-	}
222
+    }
223 223
 }
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/inc/class-redux-customizer-panel.php 1 patch
Indentation   +141 added lines, -141 removed lines patch added patch discarded remove patch
@@ -19,83 +19,83 @@  discard block
 block discarded – undo
19 19
  */
20 20
 class Redux_Customizer_Panel extends WP_Customize_Panel {
21 21
 
22
-	/**
23
-	 * Type of this panel.
24
-	 *
25
-	 * @since  4.0.0
26
-	 * @access public
27
-	 * @var string
28
-	 */
29
-	public $type = 'redux';
22
+    /**
23
+     * Type of this panel.
24
+     *
25
+     * @since  4.0.0
26
+     * @access public
27
+     * @var string
28
+     */
29
+    public $type = 'redux';
30 30
 
31
-	/**
32
-	 * Panel opt_name.
33
-	 *
34
-	 * @since  4.0.0
35
-	 * @access public
36
-	 * @var string
37
-	 */
38
-	public $opt_name = '';
31
+    /**
32
+     * Panel opt_name.
33
+     *
34
+     * @since  4.0.0
35
+     * @access public
36
+     * @var string
37
+     */
38
+    public $opt_name = '';
39 39
 
40
-	/**
41
-	 * Section array.
42
-	 *
43
-	 * @var array|mixed
44
-	 */
45
-	public $section = array();
40
+    /**
41
+     * Section array.
42
+     *
43
+     * @var array|mixed
44
+     */
45
+    public $section = array();
46 46
 
47
-	/**
48
-	 * Section array.
49
-	 *
50
-	 * @var string
51
-	 */
52
-	public string $wp_ver;
47
+    /**
48
+     * Section array.
49
+     *
50
+     * @var string
51
+     */
52
+    public string $wp_ver;
53 53
 
54
-	/**
55
-	 * Constructor.
56
-	 * Any supplied $args override class property defaults.
57
-	 *
58
-	 * @since 4.0.0
59
-	 *
60
-	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
61
-	 * @param string               $id      A specific ID for the panel.
62
-	 * @param array                $args    Panel arguments.
63
-	 */
64
-	public function __construct( $manager, $id, $args = array() ) {
65
-		global $wp_version;
54
+    /**
55
+     * Constructor.
56
+     * Any supplied $args override class property defaults.
57
+     *
58
+     * @since 4.0.0
59
+     *
60
+     * @param WP_Customize_Manager $manager Customizer bootstrap instance.
61
+     * @param string               $id      A specific ID for the panel.
62
+     * @param array                $args    Panel arguments.
63
+     */
64
+    public function __construct( $manager, $id, $args = array() ) {
65
+        global $wp_version;
66 66
 
67
-		parent::__construct( $manager, $id, $args );
67
+        parent::__construct( $manager, $id, $args );
68 68
 
69
-		$version      = explode( '-', $wp_version );
70
-		$this->wp_ver = $version[0];
69
+        $version      = explode( '-', $wp_version );
70
+        $this->wp_ver = $version[0];
71 71
 
72
-		// Redux addition.
73
-		if ( isset( $args['section'] ) ) {
74
-			$this->section     = $args['section'];
75
-			$this->description = $this->section['desc'] ?? '';
76
-			$this->opt_name    = $args['opt_name'] ?? '';
77
-		}
78
-	}
72
+        // Redux addition.
73
+        if ( isset( $args['section'] ) ) {
74
+            $this->section     = $args['section'];
75
+            $this->description = $this->section['desc'] ?? '';
76
+            $this->opt_name    = $args['opt_name'] ?? '';
77
+        }
78
+    }
79 79
 
80
-	/**
81
-	 * WP < 4.3 Render
82
-	 *
83
-	 * @since
84
-	 * @access protected
85
-	 */
86
-	protected function render() {
87
-		if ( version_compare( $this->wp_ver, '4.3', '<' ) ) {
88
-			$this->render_fallback();
89
-		}
90
-	}
80
+    /**
81
+     * WP < 4.3 Render
82
+     *
83
+     * @since
84
+     * @access protected
85
+     */
86
+    protected function render() {
87
+        if ( version_compare( $this->wp_ver, '4.3', '<' ) ) {
88
+            $this->render_fallback();
89
+        }
90
+    }
91 91
 
92
-	/**
93
-	 * Render.
94
-	 */
95
-	protected function render_fallback() {
96
-		$classes = 'accordion-section redux-main redux-panel control-section control-panel control-panel-' . esc_attr( $this->type );
92
+    /**
93
+     * Render.
94
+     */
95
+    protected function render_fallback() {
96
+        $classes = 'accordion-section redux-main redux-panel control-section control-panel control-panel-' . esc_attr( $this->type );
97 97
 
98
-		?>
98
+        ?>
99 99
 		<li id="accordion-panel-<?php echo esc_attr( $this->id ); ?>" class="<?php echo esc_attr( $classes ); ?>"
100 100
 			data-width="<?php echo isset( $this->section['customizer_width'] ) ? esc_attr( $this->section['customizer_width'] ) : ''; ?>">
101 101
 			<h3 class="accordion-section-title" tabindex="0">
@@ -103,19 +103,19 @@  discard block
 block discarded – undo
103 103
 					<i class="<?php echo esc_attr( $this->section['icon'] ); ?>"></i>
104 104
 				<?php endif; ?>
105 105
 				<?php
106
-				echo wp_kses(
107
-					$this->title,
108
-					array(
109
-						'em'     => array(),
110
-						'i'      => array(),
111
-						'strong' => array(),
112
-						'span'   => array(
113
-							'class' => array(),
114
-							'style' => array(),
115
-						),
116
-					)
117
-				);
118
-				?>
106
+                echo wp_kses(
107
+                    $this->title,
108
+                    array(
109
+                        'em'     => array(),
110
+                        'i'      => array(),
111
+                        'strong' => array(),
112
+                        'span'   => array(
113
+                            'class' => array(),
114
+                            'style' => array(),
115
+                        ),
116
+                    )
117
+                );
118
+                ?>
119 119
 				<span class="screen-reader-text"><?php esc_html_e( 'Press return or enter to open this panel', 'redux-framework' ); ?></span>
120 120
 			</h3>
121 121
 			<ul class="accordion-sub-container control-panel-content">
@@ -125,22 +125,22 @@  discard block
 block discarded – undo
125 125
 			</ul>
126 126
 		</li>
127 127
 		<?php
128
-	}
128
+    }
129 129
 
130
-	/**
131
-	 * Render the sections that have been added to the panel.
132
-	 *
133
-	 * @since  4.1.0
134
-	 * @access protected
135
-	 */
136
-	protected function render_content() {
137
-		?>
130
+    /**
131
+     * Render the sections that have been added to the panel.
132
+     *
133
+     * @since  4.1.0
134
+     * @access protected
135
+     */
136
+    protected function render_content() {
137
+        ?>
138 138
 		<li class="panel-meta accordion-section redux-panel redux-panel-meta control-section
139 139
 		<?php
140
-		if ( empty( $this->description ) ) {
141
-			echo ' cannot-expand';
142
-		}
143
-		?>
140
+        if ( empty( $this->description ) ) {
141
+            echo ' cannot-expand';
142
+        }
143
+        ?>
144 144
 		">
145 145
 			<div class="accordion-section-title" tabindex="0">
146 146
 				<span class="preview-notice">
@@ -155,47 +155,47 @@  discard block
 block discarded – undo
155 155
 			<?php } ?>
156 156
 		</li>
157 157
 		<?php
158
-	}
158
+    }
159 159
 
160
-	/**
161
-	 * JSON.
162
-	 *
163
-	 * @return array
164
-	 */
165
-	public function json(): array {
166
-		$array = wp_array_slice_assoc(
167
-			parent::json(),
168
-			array(
169
-				'id',
170
-				'title',
171
-				'description',
172
-				'priority',
173
-				'type',
174
-			)
175
-		);
160
+    /**
161
+     * JSON.
162
+     *
163
+     * @return array
164
+     */
165
+    public function json(): array {
166
+        $array = wp_array_slice_assoc(
167
+            parent::json(),
168
+            array(
169
+                'id',
170
+                'title',
171
+                'description',
172
+                'priority',
173
+                'type',
174
+            )
175
+        );
176 176
 
177
-		$array['content']        = $this->get_content();
178
-		$array['active']         = $this->active();
179
-		$array['instanceNumber'] = $this->instance_number;
177
+        $array['content']        = $this->get_content();
178
+        $array['active']         = $this->active();
179
+        $array['instanceNumber'] = $this->instance_number;
180 180
 
181
-		// BEGIN Redux Additions.
182
-		$array['width'] = $this->section['customizer_width'] ?? '';
183
-		$array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
181
+        // BEGIN Redux Additions.
182
+        $array['width'] = $this->section['customizer_width'] ?? '';
183
+        $array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
184 184
 
185
-		$array['opt_name'] = $this->opt_name;
186
-		return $array;
187
-	}
185
+        $array['opt_name'] = $this->opt_name;
186
+        return $array;
187
+    }
188 188
 
189
-	/**
190
-	 * An Underscore (JS) template for this panel's content (but not its container).
191
-	 * Class variables for this panel class are available in the `data` JS object;
192
-	 * export custom variables by overriding {@see WP_Customize_Panel::json()}.
193
-	 *
194
-	 * @see   WP_Customize_Panel::print_template()
195
-	 * @since 4.3.0
196
-	 */
197
-	protected function content_template() {
198
-		?>
189
+    /**
190
+     * An Underscore (JS) template for this panel's content (but not its container).
191
+     * Class variables for this panel class are available in the `data` JS object;
192
+     * export custom variables by overriding {@see WP_Customize_Panel::json()}.
193
+     *
194
+     * @see   WP_Customize_Panel::print_template()
195
+     * @since 4.3.0
196
+     */
197
+    protected function content_template() {
198
+        ?>
199 199
 		<li
200 200
 			class="panel-meta customize-info redux-customizer-opt-name redux-panel accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>"
201 201
 			data-opt-name="{{{ data.opt_name }}}">
@@ -223,18 +223,18 @@  discard block
 block discarded – undo
223 223
 			<# } #>
224 224
 		</li>
225 225
 		<?php
226
-	}
226
+    }
227 227
 
228
-	/**
229
-	 * An Underscore (JS) template for rendering this panel's container.
230
-	 * Class variables for this panel class are available in the `data` JS object;
231
-	 * export custom variables by overriding {@see WP_Customize_Panel::json()}.
232
-	 *
233
-	 * @see   WP_Customize_Panel::print_template()
234
-	 * @since 4.3.0
235
-	 */
236
-	protected function render_template() {
237
-		?>
228
+    /**
229
+     * An Underscore (JS) template for rendering this panel's container.
230
+     * Class variables for this panel class are available in the `data` JS object;
231
+     * export custom variables by overriding {@see WP_Customize_Panel::json()}.
232
+     *
233
+     * @see   WP_Customize_Panel::print_template()
234
+     * @since 4.3.0
235
+     */
236
+    protected function render_template() {
237
+        ?>
238 238
 		<li id="accordion-panel-{{ data.id }}"
239 239
 			class="accordion-section redux-panel control-section control-panel control-panel-{{ data.type }}"
240 240
 			data-width="{{ data.width }}">
@@ -252,5 +252,5 @@  discard block
 block discarded – undo
252 252
 			<ul class="accordion-sub-container control-panel-content"></ul>
253 253
 		</li>
254 254
 		<?php
255
-	}
255
+    }
256 256
 }
Please login to merge, or discard this patch.
redux-core/inc/lib/font-awesome-6-free.php 3 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,1 +1,1 @@
 block discarded – undo
1
-<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
2 1
\ No newline at end of file
2
+<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

   defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
    function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
3 3
\ No newline at end of file
Please login to merge, or discard this patch.
Switch Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,1 +1,1 @@
 block discarded – undo
1
-<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
2 1
\ No newline at end of file
2
+<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}

}
3 3
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,1 +1,1 @@
 block discarded – undo
1
-<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
2 1
\ No newline at end of file
2
+<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' ); }
}
3 3
\ No newline at end of file
Please login to merge, or discard this patch.
redux-core/inc/extensions/taxonomy/class-redux-taxonomy-api.php 2 patches
Indentation   +627 added lines, -627 removed lines patch added patch discarded remove patch
@@ -13,631 +13,631 @@
 block discarded – undo
13 13
 // Don't duplicate me!
14 14
 if ( ! class_exists( 'Redux_Taxonomy' ) ) {
15 15
 
16
-	/**
17
-	 * Redux Taxonomy API Class
18
-	 * Simple API for Redux Framework
19
-	 *
20
-	 * @since       1.0.0
21
-	 */
22
-	class Redux_Taxonomy {
23
-
24
-		/**
25
-		 * Terms array.
26
-		 *
27
-		 * @var array
28
-		 */
29
-		public static array $terms = array();
30
-
31
-		/**
32
-		 * Sections array.
33
-		 *
34
-		 * @var array
35
-		 */
36
-		public static array $sections = array();
37
-
38
-		/**
39
-		 * Fields array.
40
-		 *
41
-		 * @var array
42
-		 */
43
-		public static array $fields = array();
44
-
45
-		/**
46
-		 * Priority array.
47
-		 *
48
-		 * @var array
49
-		 */
50
-		public static array $priority = array();
51
-
52
-		/**
53
-		 * Errors array.
54
-		 *
55
-		 * @var array
56
-		 */
57
-		public static array $errors = array();
58
-
59
-		/**
60
-		 * Init array.
61
-		 *
62
-		 * @var array
63
-		 */
64
-		public static array $init = array();
65
-
66
-		/**
67
-		 * Args array.
68
-		 *
69
-		 * @var array
70
-		 */
71
-		public static array $args = array();
72
-
73
-		/**
74
-		 * Load.
75
-		 */
76
-		public static function load() {
77
-			add_action( 'init', array( 'Redux_Taxonomy', 'enqueue' ), 99 );
78
-		}
79
-
80
-		/**
81
-		 * Enqueue support files and fields.
82
-		 *
83
-		 * @throws ReflectionException Exception.
84
-		 */
85
-		public static function enqueue() {
86
-			global $pagenow;
87
-
88
-			// Check and run instances of Redux where the opt_name hasn't been run.
89
-			$pagenows = array( 'edit-tags.php', 'term.php' );
90
-
91
-			if ( ! empty( self::$sections ) && in_array( $pagenow, $pagenows, true ) ) {
92
-				$instances = Redux::all_instances();
93
-
94
-				foreach ( self::$fields as $opt_name => $fields ) {
95
-					if ( ! isset( $instances[ $opt_name ] ) ) {
96
-						Redux::set_args( $opt_name, array( 'menu_type' => 'hidden' ) );
97
-
98
-						Redux::set_sections(
99
-							$opt_name,
100
-							array(
101
-								array(
102
-									'id'     => 'EXTENSION_TAXONOMY_FAKE_ID' . $opt_name,
103
-									'fields' => $fields,
104
-									'title'  => 'N/A',
105
-								),
106
-							)
107
-						);
108
-
109
-						Redux::init( $opt_name );
110
-
111
-						$instances = ReduxFrameworkInstances::get_all_instances();
112
-					}
113
-
114
-					self::check_opt_name( $opt_name );
115
-
116
-					Redux::set_args( $opt_name, self::$args[ $opt_name ] );
117
-				}
118
-			}
119
-		}
120
-
121
-		/**
122
-		 * Construct Args.
123
-		 *
124
-		 * @param string $opt_name Panel opt_name.
125
-		 *
126
-		 * @return mixed
127
-		 */
128
-		public static function construct_args( string $opt_name ) {
129
-			$args             = self::$args[ $opt_name ];
130
-			$args['opt_name'] = $opt_name;
131
-
132
-			if ( ! isset( $args['menu_title'] ) ) {
133
-				$args['menu_title'] = ucfirst( $opt_name ) . ' Options';
134
-			}
135
-
136
-			if ( ! isset( $args['page_title'] ) ) {
137
-				$args['page_title'] = ucfirst( $opt_name ) . ' Options';
138
-			}
139
-
140
-			if ( ! isset( $args['page_slug'] ) ) {
141
-				$args['page_slug'] = $opt_name . '_options';
142
-			}
143
-
144
-			return $args;
145
-		}
146
-
147
-		/**
148
-		 * Construct Terms
149
-		 *
150
-		 * @param string $opt_name Panel opt_name.
151
-		 *
152
-		 * @return array
153
-		 */
154
-		public static function construct_terms( string $opt_name ): array {
155
-			$terms = array();
156
-
157
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
158
-				return $terms;
159
-			}
160
-
161
-			foreach ( self::$terms[ $opt_name ] as $term ) {
162
-				$term['sections'] = self::construct_sections( $opt_name, $term['id'] );
163
-				$terms[]          = $term;
164
-			}
165
-
166
-			ksort( $terms );
167
-
168
-			return $terms;
169
-		}
170
-
171
-		/**
172
-		 * Construct Sections.
173
-		 *
174
-		 * @param string $opt_name       Panel opt_name.
175
-		 * @param string $term_id        Term ID.
176
-		 *
177
-		 * @return array
178
-		 */
179
-		public static function construct_sections( string $opt_name, string $term_id ): array {
180
-			$sections = array();
181
-
182
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
183
-				return $sections;
184
-			}
185
-
186
-			foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
187
-				if ( $section['term_id'] === $term_id ) {
188
-					self::$sections[ $opt_name ][ $section_id ]['add_visibility'] = $section;
189
-
190
-					$p = $section['priority'];
191
-
192
-					while ( isset( $sections[ $p ] ) ) {
193
-						echo esc_html( $p++ );
194
-					}
195
-
196
-					$section['fields'] = self::construct_fields( $opt_name, $section_id );
197
-					$sections[ $p ]    = $section;
198
-				}
199
-			}
200
-
201
-			ksort( $sections );
202
-
203
-			return $sections;
204
-		}
205
-
206
-		/**
207
-		 * Construct Fields.
208
-		 *
209
-		 * @param string $opt_name       Panel opt_name.
210
-		 * @param string $section_id     Section ID.
211
-		 * @param bool   $permissions    Permissions.
212
-		 * @param bool   $add_visibility Add visibility.
213
-		 *
214
-		 * @return array
215
-		 */
216
-		public static function construct_fields( string $opt_name = '', string $section_id = '', bool $permissions = false, bool $add_visibility = false ): array {
217
-			$fields = array();
218
-
219
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
220
-				return $fields;
221
-			}
222
-
223
-			foreach ( self::$fields[ $opt_name ] as $key => $field ) {
224
-				// Nested permissions.
225
-				$field['permissions'] = $field['permissions'] ?? $permissions;
226
-
227
-				self::$fields[ $opt_name ][ $key ]['permissions'] = $field['permissions'];
228
-
229
-				// Nested add_visibility permissions.
230
-				$field['add_visibility'] = $field['add_visibility'] ?? $add_visibility;
231
-
232
-				self::$fields[ $opt_name ][ $key ]['add_visibility'] = $field['add_visibility'];
233
-
234
-				if ( $field['section_id'] === $section_id ) {
235
-					$p = $field['priority'];
236
-
237
-					while ( isset( $fields[ $p ] ) ) {
238
-						echo esc_html( $p++ );
239
-					}
240
-
241
-					$fields[ $p ] = $field;
242
-				}
243
-			}
244
-
245
-			ksort( $fields );
246
-
247
-			return $fields;
248
-		}
249
-
250
-		/**
251
-		 * Get Section.
252
-		 *
253
-		 * @param string $opt_name Panel opt_name.
254
-		 * @param string $id       ID.
255
-		 *
256
-		 * @return bool
257
-		 */
258
-		public static function get_section( string $opt_name = '', string $id = '' ): bool {
259
-			self::check_opt_name( $opt_name );
260
-
261
-			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
262
-				if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
263
-					$id = strtolower( sanitize_html_class( $id ) );
264
-				}
265
-
266
-				return self::$sections[ $opt_name ][ $id ] ?? false;
267
-			}
268
-
269
-			return false;
270
-		}
271
-
272
-		/**
273
-		 * Set_section.
274
-		 *
275
-		 * @param string $opt_name Panel opt_name.
276
-		 * @param array  $section  Section array.
277
-		 */
278
-		public static function set_section( string $opt_name = '', array $section = array() ) {
279
-			self::check_opt_name( $opt_name );
280
-
281
-			if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) {
282
-				if ( ! isset( $section['id'] ) ) {
283
-					if ( isset( $section['title'] ) ) {
284
-						$section['id'] = strtolower( sanitize_html_class( $section['title'] ) );
285
-					} else {
286
-						$section['id'] = 'section';
287
-					}
288
-
289
-					if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
290
-						$orig = $section['id'];
291
-						$i    = 0;
292
-
293
-						while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
294
-							$section['id'] = $orig . '_' . $i;
295
-						}
296
-					}
297
-				}
298
-
299
-				if ( ! isset( $section['priority'] ) ) {
300
-					$section['priority'] = self::get_priority( $opt_name, 'sections' );
301
-				}
302
-
303
-				if ( isset( $section['fields'] ) ) {
304
-					if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) {
305
-						if ( isset( $section['permissions'] ) || isset( $section['add_visibility'] ) ) {
306
-							foreach ( $section['fields'] as $key => $field ) {
307
-								if ( ! isset( $field['permissions'] ) && isset( $section['permissions'] ) ) {
308
-									$section['fields'][ $key ]['permissions'] = $section['permissions'];
309
-								}
310
-
311
-								if ( ! isset( $field['add_visibility'] ) && isset( $section['add_visibility'] ) ) {
312
-									$section['fields'][ $key ]['add_visibility'] = $section['add_visibility'];
313
-								}
314
-							}
315
-						}
316
-
317
-						self::process_fields_array( $opt_name, $section['id'], $section['fields'] );
318
-					}
319
-
320
-					unset( $section['fields'] );
321
-				}
322
-
323
-				self::$sections[ $opt_name ][ $section['id'] ] = $section;
324
-			} else {
325
-				self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
326
-			}
327
-		}
328
-
329
-		/**
330
-		 * Process Sections Array.
331
-		 *
332
-		 * @param string $opt_name Panel opt_name.
333
-		 * @param string $term_id  Term ID.
334
-		 * @param array  $sections Sections array.
335
-		 */
336
-		public static function process_sections_array( string $opt_name = '', string $term_id = '', array $sections = array() ) {
337
-			if ( ! empty( $opt_name ) && ! empty( $term_id ) && is_array( $sections ) && ! empty( $sections ) ) {
338
-				foreach ( $sections as $section ) {
339
-					if ( ! is_array( $section ) ) {
340
-						continue;
341
-					}
342
-
343
-					$section['term_id'] = $term_id;
344
-
345
-					if ( ! isset( $section['fields'] ) || ! is_array( $section['fields'] ) ) {
346
-						$section['fields'] = array();
347
-					}
348
-
349
-					self::set_section( $opt_name, $section );
350
-				}
351
-			}
352
-		}
353
-
354
-		/**
355
-		 * Process field array.
356
-		 *
357
-		 * @param string $opt_name   Panel opt_name.
358
-		 * @param string $section_id Section ID.
359
-		 * @param array  $fields     Fields array.
360
-		 */
361
-		public static function process_fields_array( string $opt_name = '', string $section_id = '', array $fields = array() ) {
362
-			if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) {
363
-				foreach ( $fields as $field ) {
364
-					if ( ! is_array( $field ) ) {
365
-						continue;
366
-					}
367
-
368
-					$field['section_id'] = $section_id;
369
-
370
-					self::set_field( $opt_name, $field );
371
-				}
372
-			}
373
-		}
374
-
375
-		/**
376
-		 * Get field.
377
-		 *
378
-		 * @param string $opt_name Panel opt_name.
379
-		 * @param string $id       ID.
380
-		 *
381
-		 * @return bool
382
-		 */
383
-		public static function get_field( string $opt_name = '', string $id = '' ): bool {
384
-			self::check_opt_name( $opt_name );
385
-
386
-			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
387
-				return self::$fields[ $opt_name ][ $id ] ?? false;
388
-			}
389
-
390
-			return false;
391
-		}
392
-
393
-		/**
394
-		 * Set field.
395
-		 *
396
-		 * @param string $opt_name Panel opt_name.
397
-		 * @param array  $field    Field array.
398
-		 */
399
-		public static function set_field( string $opt_name = '', array $field = array() ) {
400
-			self::check_opt_name( $opt_name );
401
-
402
-			if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) {
403
-				if ( ! isset( $field['priority'] ) ) {
404
-					$field['priority'] = self::get_priority( $opt_name, 'fields' );
405
-				}
406
-
407
-				self::$fields[ $opt_name ][ $field['id'] ] = $field;
408
-			}
409
-		}
410
-
411
-		/**
412
-		 * Set args.
413
-		 *
414
-		 * @param string $opt_name Panel opt_name.
415
-		 * @param array  $args     Args array.
416
-		 */
417
-		public static function set_args( string $opt_name = '', array $args = array() ) {
418
-			self::check_opt_name( $opt_name );
419
-
420
-			if ( ! empty( $opt_name ) && is_array( $args ) && ! empty( $args ) ) {
421
-				self::$args[ $opt_name ] = self::$args[ $opt_name ] ?? array();
422
-				self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
423
-			}
424
-		}
425
-
426
-		/**
427
-		 * Set term.
428
-		 *
429
-		 * @param string $opt_name Panel opt_name.
430
-		 * @param array  $term     Term array.
431
-		 */
432
-		public static function set_term( string $opt_name = '', array $term = array() ) {
433
-			self::check_opt_name( $opt_name );
434
-
435
-			if ( ! empty( $opt_name ) && is_array( $term ) && ! empty( $term ) ) {
436
-				if ( ! isset( $term['id'] ) ) {
437
-					if ( isset( $term['title'] ) ) {
438
-						$term['id'] = strtolower( sanitize_html_class( $term['title'] ) );
439
-					} else {
440
-						$term['id'] = 'term';
441
-					}
442
-
443
-					if ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
444
-						$orig = $term['id'];
445
-						$i    = 0;
446
-
447
-						while ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
448
-							$term['id'] = $orig . '_' . $i;
449
-						}
450
-					}
451
-				}
452
-
453
-				if ( isset( $term['sections'] ) ) {
454
-					if ( ! empty( $term['sections'] ) && is_array( $term['sections'] ) ) {
455
-						if ( isset( $term['permissions'] ) || isset( $term['add_visibility'] ) ) {
456
-							foreach ( $term['sections'] as $key => $section ) {
457
-								if ( ! isset( $section['permissions'] ) && isset( $term['permissions'] ) ) {
458
-									$term['sections'][ $key ]['permissions'] = $term['permissions'];
459
-								}
460
-
461
-								if ( ! isset( $section['add_visibility'] ) && isset( $term['add_visibility'] ) ) {
462
-									$term['sections'][ $key ]['add_visibility'] = $term['add_visibility'];
463
-								}
464
-							}
465
-						}
466
-
467
-						self::process_sections_array( $opt_name, $term['id'], $term['sections'] );
468
-					}
469
-
470
-					unset( $term['sections'] );
471
-				}
472
-
473
-				self::$terms[ $opt_name ][ $term['id'] ] = $term;
474
-			} else {
475
-				self::$errors[ $opt_name ]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
476
-			}
477
-		}
478
-
479
-		/**
480
-		 * Get terms.
481
-		 *
482
-		 * @param string $opt_name Panel opt_name.
483
-		 *
484
-		 * @return mixed
485
-		 */
486
-		public static function get_terms( string $opt_name = '' ) {
487
-			self::check_opt_name( $opt_name );
488
-
489
-			if ( ! empty( $opt_name ) && ! empty( self::$terms[ $opt_name ] ) ) {
490
-				return self::$terms[ $opt_name ];
491
-			}
492
-
493
-			return false;
494
-		}
495
-
496
-		/**
497
-		 * Get priority.
498
-		 *
499
-		 * @param string $opt_name Panel opt_name.
500
-		 * @param string $type     Field type.
501
-		 *
502
-		 * @return mixed
503
-		 */
504
-		public static function get_priority( string $opt_name, string $type ) {
505
-			$priority                              = self::$priority[ $opt_name ][ $type ];
506
-			self::$priority[ $opt_name ][ $type ] += 1;
507
-
508
-			return $priority;
509
-		}
510
-
511
-		/**
512
-		 * Check opt_name.
513
-		 *
514
-		 * @param string $opt_name Panel opt_name.
515
-		 */
516
-		public static function check_opt_name( string $opt_name = '' ) {
517
-			if ( empty( $opt_name ) || is_array( $opt_name ) ) {
518
-				return;
519
-			}
520
-
521
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
522
-				self::$terms[ $opt_name ] = array();
523
-			}
524
-
525
-			if ( ! isset( self::$priority[ $opt_name ] ) ) {
526
-				self::$priority[ $opt_name ]['args'] = 1;
527
-			}
528
-
529
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
530
-				self::$sections[ $opt_name ]             = array();
531
-				self::$priority[ $opt_name ]['sections'] = 1;
532
-			}
533
-
534
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
535
-				self::$fields[ $opt_name ]             = array();
536
-				self::$priority[ $opt_name ]['fields'] = 1;
537
-			}
538
-
539
-			if ( ! isset( self::$errors[ $opt_name ] ) ) {
540
-				self::$errors[ $opt_name ] = array();
541
-			}
542
-
543
-			if ( ! isset( self::$init[ $opt_name ] ) ) {
544
-				self::$init[ $opt_name ] = false;
545
-			}
546
-
547
-			if ( ! isset( self::$args[ $opt_name ] ) ) {
548
-				self::$args[ $opt_name ] = false;
549
-			}
550
-		}
551
-
552
-		/**
553
-		 * Get field defaults.
554
-		 *
555
-		 * @param string $opt_name Panel opt_name.
556
-		 *
557
-		 * @return array|void
558
-		 */
559
-		public static function get_field_defaults( string $opt_name ) {
560
-			if ( empty( $opt_name ) ) {
561
-				return;
562
-			}
563
-
564
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
565
-				return array();
566
-			}
567
-
568
-			return array_map(
569
-				function ( $field ) {
570
-					return $field['default'] ?? '';
571
-				},
572
-				self::$fields[ $opt_name ]
573
-			);
574
-		}
575
-
576
-		/**
577
-		 * Get term meta.
578
-		 *
579
-		 * @param array $args Args array.
580
-		 *
581
-		 * @return array|mixed|string
582
-		 */
583
-		public static function get_term_meta( array $args = array() ) {
584
-			$default = array(
585
-				'key'      => '',
586
-				'opt_name' => '',
587
-				'taxonomy' => '',
588
-			);
589
-
590
-			$args = wp_parse_args( $args, $default );
591
-
592
-			// phpcs:ignore WordPress.PHP.DontExtract
593
-			extract( $args );
594
-
595
-			if ( empty( $taxonomy ) ) {
596
-				return array();
597
-			}
598
-
599
-			$single = ! empty( $key );
600
-
601
-			$meta = get_term_meta( $taxonomy, $key, $single );
602
-
603
-			// phpcs:ignore Generic.CodeAnalysis.EmptyStatement
604
-			if ( $single ) {
605
-				// Do nothing.
606
-			} elseif ( ! empty( $meta ) ) {
607
-				foreach ( $meta as $key => $value ) {
608
-					if ( is_array( $value ) ) {
609
-						$value = $value[0];
610
-					}
611
-
612
-					$meta[ $key ] = maybe_unserialize( $value );
613
-				}
614
-			}
615
-
616
-			if ( ! empty( $opt_name ) ) {
617
-				$defaults = self::get_field_defaults( $opt_name );
618
-
619
-				if ( $single ) {
620
-					$default_value = '';
621
-
622
-					if ( isset( $defaults[ $key ] ) ) {
623
-						$default_value = $defaults[ $key ];
624
-					}
625
-
626
-					if ( is_array( $meta ) ) {
627
-						if ( is_array( $default_value ) ) {
628
-							$meta = wp_parse_args( $meta, $default_value );
629
-						}
630
-					} elseif ( '' === $meta && '' !== $default_value ) {
631
-							$meta = $default_value;
632
-					}
633
-				} else {
634
-					$meta = wp_parse_args( $meta, $defaults );
635
-				}
636
-			}
637
-
638
-			return $meta;
639
-		}
640
-	}
641
-
642
-	Redux_Taxonomy::load();
16
+    /**
17
+     * Redux Taxonomy API Class
18
+     * Simple API for Redux Framework
19
+     *
20
+     * @since       1.0.0
21
+     */
22
+    class Redux_Taxonomy {
23
+
24
+        /**
25
+         * Terms array.
26
+         *
27
+         * @var array
28
+         */
29
+        public static array $terms = array();
30
+
31
+        /**
32
+         * Sections array.
33
+         *
34
+         * @var array
35
+         */
36
+        public static array $sections = array();
37
+
38
+        /**
39
+         * Fields array.
40
+         *
41
+         * @var array
42
+         */
43
+        public static array $fields = array();
44
+
45
+        /**
46
+         * Priority array.
47
+         *
48
+         * @var array
49
+         */
50
+        public static array $priority = array();
51
+
52
+        /**
53
+         * Errors array.
54
+         *
55
+         * @var array
56
+         */
57
+        public static array $errors = array();
58
+
59
+        /**
60
+         * Init array.
61
+         *
62
+         * @var array
63
+         */
64
+        public static array $init = array();
65
+
66
+        /**
67
+         * Args array.
68
+         *
69
+         * @var array
70
+         */
71
+        public static array $args = array();
72
+
73
+        /**
74
+         * Load.
75
+         */
76
+        public static function load() {
77
+            add_action( 'init', array( 'Redux_Taxonomy', 'enqueue' ), 99 );
78
+        }
79
+
80
+        /**
81
+         * Enqueue support files and fields.
82
+         *
83
+         * @throws ReflectionException Exception.
84
+         */
85
+        public static function enqueue() {
86
+            global $pagenow;
87
+
88
+            // Check and run instances of Redux where the opt_name hasn't been run.
89
+            $pagenows = array( 'edit-tags.php', 'term.php' );
90
+
91
+            if ( ! empty( self::$sections ) && in_array( $pagenow, $pagenows, true ) ) {
92
+                $instances = Redux::all_instances();
93
+
94
+                foreach ( self::$fields as $opt_name => $fields ) {
95
+                    if ( ! isset( $instances[ $opt_name ] ) ) {
96
+                        Redux::set_args( $opt_name, array( 'menu_type' => 'hidden' ) );
97
+
98
+                        Redux::set_sections(
99
+                            $opt_name,
100
+                            array(
101
+                                array(
102
+                                    'id'     => 'EXTENSION_TAXONOMY_FAKE_ID' . $opt_name,
103
+                                    'fields' => $fields,
104
+                                    'title'  => 'N/A',
105
+                                ),
106
+                            )
107
+                        );
108
+
109
+                        Redux::init( $opt_name );
110
+
111
+                        $instances = ReduxFrameworkInstances::get_all_instances();
112
+                    }
113
+
114
+                    self::check_opt_name( $opt_name );
115
+
116
+                    Redux::set_args( $opt_name, self::$args[ $opt_name ] );
117
+                }
118
+            }
119
+        }
120
+
121
+        /**
122
+         * Construct Args.
123
+         *
124
+         * @param string $opt_name Panel opt_name.
125
+         *
126
+         * @return mixed
127
+         */
128
+        public static function construct_args( string $opt_name ) {
129
+            $args             = self::$args[ $opt_name ];
130
+            $args['opt_name'] = $opt_name;
131
+
132
+            if ( ! isset( $args['menu_title'] ) ) {
133
+                $args['menu_title'] = ucfirst( $opt_name ) . ' Options';
134
+            }
135
+
136
+            if ( ! isset( $args['page_title'] ) ) {
137
+                $args['page_title'] = ucfirst( $opt_name ) . ' Options';
138
+            }
139
+
140
+            if ( ! isset( $args['page_slug'] ) ) {
141
+                $args['page_slug'] = $opt_name . '_options';
142
+            }
143
+
144
+            return $args;
145
+        }
146
+
147
+        /**
148
+         * Construct Terms
149
+         *
150
+         * @param string $opt_name Panel opt_name.
151
+         *
152
+         * @return array
153
+         */
154
+        public static function construct_terms( string $opt_name ): array {
155
+            $terms = array();
156
+
157
+            if ( ! isset( self::$terms[ $opt_name ] ) ) {
158
+                return $terms;
159
+            }
160
+
161
+            foreach ( self::$terms[ $opt_name ] as $term ) {
162
+                $term['sections'] = self::construct_sections( $opt_name, $term['id'] );
163
+                $terms[]          = $term;
164
+            }
165
+
166
+            ksort( $terms );
167
+
168
+            return $terms;
169
+        }
170
+
171
+        /**
172
+         * Construct Sections.
173
+         *
174
+         * @param string $opt_name       Panel opt_name.
175
+         * @param string $term_id        Term ID.
176
+         *
177
+         * @return array
178
+         */
179
+        public static function construct_sections( string $opt_name, string $term_id ): array {
180
+            $sections = array();
181
+
182
+            if ( ! isset( self::$sections[ $opt_name ] ) ) {
183
+                return $sections;
184
+            }
185
+
186
+            foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
187
+                if ( $section['term_id'] === $term_id ) {
188
+                    self::$sections[ $opt_name ][ $section_id ]['add_visibility'] = $section;
189
+
190
+                    $p = $section['priority'];
191
+
192
+                    while ( isset( $sections[ $p ] ) ) {
193
+                        echo esc_html( $p++ );
194
+                    }
195
+
196
+                    $section['fields'] = self::construct_fields( $opt_name, $section_id );
197
+                    $sections[ $p ]    = $section;
198
+                }
199
+            }
200
+
201
+            ksort( $sections );
202
+
203
+            return $sections;
204
+        }
205
+
206
+        /**
207
+         * Construct Fields.
208
+         *
209
+         * @param string $opt_name       Panel opt_name.
210
+         * @param string $section_id     Section ID.
211
+         * @param bool   $permissions    Permissions.
212
+         * @param bool   $add_visibility Add visibility.
213
+         *
214
+         * @return array
215
+         */
216
+        public static function construct_fields( string $opt_name = '', string $section_id = '', bool $permissions = false, bool $add_visibility = false ): array {
217
+            $fields = array();
218
+
219
+            if ( ! isset( self::$fields[ $opt_name ] ) ) {
220
+                return $fields;
221
+            }
222
+
223
+            foreach ( self::$fields[ $opt_name ] as $key => $field ) {
224
+                // Nested permissions.
225
+                $field['permissions'] = $field['permissions'] ?? $permissions;
226
+
227
+                self::$fields[ $opt_name ][ $key ]['permissions'] = $field['permissions'];
228
+
229
+                // Nested add_visibility permissions.
230
+                $field['add_visibility'] = $field['add_visibility'] ?? $add_visibility;
231
+
232
+                self::$fields[ $opt_name ][ $key ]['add_visibility'] = $field['add_visibility'];
233
+
234
+                if ( $field['section_id'] === $section_id ) {
235
+                    $p = $field['priority'];
236
+
237
+                    while ( isset( $fields[ $p ] ) ) {
238
+                        echo esc_html( $p++ );
239
+                    }
240
+
241
+                    $fields[ $p ] = $field;
242
+                }
243
+            }
244
+
245
+            ksort( $fields );
246
+
247
+            return $fields;
248
+        }
249
+
250
+        /**
251
+         * Get Section.
252
+         *
253
+         * @param string $opt_name Panel opt_name.
254
+         * @param string $id       ID.
255
+         *
256
+         * @return bool
257
+         */
258
+        public static function get_section( string $opt_name = '', string $id = '' ): bool {
259
+            self::check_opt_name( $opt_name );
260
+
261
+            if ( ! empty( $opt_name ) && ! empty( $id ) ) {
262
+                if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
263
+                    $id = strtolower( sanitize_html_class( $id ) );
264
+                }
265
+
266
+                return self::$sections[ $opt_name ][ $id ] ?? false;
267
+            }
268
+
269
+            return false;
270
+        }
271
+
272
+        /**
273
+         * Set_section.
274
+         *
275
+         * @param string $opt_name Panel opt_name.
276
+         * @param array  $section  Section array.
277
+         */
278
+        public static function set_section( string $opt_name = '', array $section = array() ) {
279
+            self::check_opt_name( $opt_name );
280
+
281
+            if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) {
282
+                if ( ! isset( $section['id'] ) ) {
283
+                    if ( isset( $section['title'] ) ) {
284
+                        $section['id'] = strtolower( sanitize_html_class( $section['title'] ) );
285
+                    } else {
286
+                        $section['id'] = 'section';
287
+                    }
288
+
289
+                    if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
290
+                        $orig = $section['id'];
291
+                        $i    = 0;
292
+
293
+                        while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
294
+                            $section['id'] = $orig . '_' . $i;
295
+                        }
296
+                    }
297
+                }
298
+
299
+                if ( ! isset( $section['priority'] ) ) {
300
+                    $section['priority'] = self::get_priority( $opt_name, 'sections' );
301
+                }
302
+
303
+                if ( isset( $section['fields'] ) ) {
304
+                    if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) {
305
+                        if ( isset( $section['permissions'] ) || isset( $section['add_visibility'] ) ) {
306
+                            foreach ( $section['fields'] as $key => $field ) {
307
+                                if ( ! isset( $field['permissions'] ) && isset( $section['permissions'] ) ) {
308
+                                    $section['fields'][ $key ]['permissions'] = $section['permissions'];
309
+                                }
310
+
311
+                                if ( ! isset( $field['add_visibility'] ) && isset( $section['add_visibility'] ) ) {
312
+                                    $section['fields'][ $key ]['add_visibility'] = $section['add_visibility'];
313
+                                }
314
+                            }
315
+                        }
316
+
317
+                        self::process_fields_array( $opt_name, $section['id'], $section['fields'] );
318
+                    }
319
+
320
+                    unset( $section['fields'] );
321
+                }
322
+
323
+                self::$sections[ $opt_name ][ $section['id'] ] = $section;
324
+            } else {
325
+                self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
326
+            }
327
+        }
328
+
329
+        /**
330
+         * Process Sections Array.
331
+         *
332
+         * @param string $opt_name Panel opt_name.
333
+         * @param string $term_id  Term ID.
334
+         * @param array  $sections Sections array.
335
+         */
336
+        public static function process_sections_array( string $opt_name = '', string $term_id = '', array $sections = array() ) {
337
+            if ( ! empty( $opt_name ) && ! empty( $term_id ) && is_array( $sections ) && ! empty( $sections ) ) {
338
+                foreach ( $sections as $section ) {
339
+                    if ( ! is_array( $section ) ) {
340
+                        continue;
341
+                    }
342
+
343
+                    $section['term_id'] = $term_id;
344
+
345
+                    if ( ! isset( $section['fields'] ) || ! is_array( $section['fields'] ) ) {
346
+                        $section['fields'] = array();
347
+                    }
348
+
349
+                    self::set_section( $opt_name, $section );
350
+                }
351
+            }
352
+        }
353
+
354
+        /**
355
+         * Process field array.
356
+         *
357
+         * @param string $opt_name   Panel opt_name.
358
+         * @param string $section_id Section ID.
359
+         * @param array  $fields     Fields array.
360
+         */
361
+        public static function process_fields_array( string $opt_name = '', string $section_id = '', array $fields = array() ) {
362
+            if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) {
363
+                foreach ( $fields as $field ) {
364
+                    if ( ! is_array( $field ) ) {
365
+                        continue;
366
+                    }
367
+
368
+                    $field['section_id'] = $section_id;
369
+
370
+                    self::set_field( $opt_name, $field );
371
+                }
372
+            }
373
+        }
374
+
375
+        /**
376
+         * Get field.
377
+         *
378
+         * @param string $opt_name Panel opt_name.
379
+         * @param string $id       ID.
380
+         *
381
+         * @return bool
382
+         */
383
+        public static function get_field( string $opt_name = '', string $id = '' ): bool {
384
+            self::check_opt_name( $opt_name );
385
+
386
+            if ( ! empty( $opt_name ) && ! empty( $id ) ) {
387
+                return self::$fields[ $opt_name ][ $id ] ?? false;
388
+            }
389
+
390
+            return false;
391
+        }
392
+
393
+        /**
394
+         * Set field.
395
+         *
396
+         * @param string $opt_name Panel opt_name.
397
+         * @param array  $field    Field array.
398
+         */
399
+        public static function set_field( string $opt_name = '', array $field = array() ) {
400
+            self::check_opt_name( $opt_name );
401
+
402
+            if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) {
403
+                if ( ! isset( $field['priority'] ) ) {
404
+                    $field['priority'] = self::get_priority( $opt_name, 'fields' );
405
+                }
406
+
407
+                self::$fields[ $opt_name ][ $field['id'] ] = $field;
408
+            }
409
+        }
410
+
411
+        /**
412
+         * Set args.
413
+         *
414
+         * @param string $opt_name Panel opt_name.
415
+         * @param array  $args     Args array.
416
+         */
417
+        public static function set_args( string $opt_name = '', array $args = array() ) {
418
+            self::check_opt_name( $opt_name );
419
+
420
+            if ( ! empty( $opt_name ) && is_array( $args ) && ! empty( $args ) ) {
421
+                self::$args[ $opt_name ] = self::$args[ $opt_name ] ?? array();
422
+                self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
423
+            }
424
+        }
425
+
426
+        /**
427
+         * Set term.
428
+         *
429
+         * @param string $opt_name Panel opt_name.
430
+         * @param array  $term     Term array.
431
+         */
432
+        public static function set_term( string $opt_name = '', array $term = array() ) {
433
+            self::check_opt_name( $opt_name );
434
+
435
+            if ( ! empty( $opt_name ) && is_array( $term ) && ! empty( $term ) ) {
436
+                if ( ! isset( $term['id'] ) ) {
437
+                    if ( isset( $term['title'] ) ) {
438
+                        $term['id'] = strtolower( sanitize_html_class( $term['title'] ) );
439
+                    } else {
440
+                        $term['id'] = 'term';
441
+                    }
442
+
443
+                    if ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
444
+                        $orig = $term['id'];
445
+                        $i    = 0;
446
+
447
+                        while ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
448
+                            $term['id'] = $orig . '_' . $i;
449
+                        }
450
+                    }
451
+                }
452
+
453
+                if ( isset( $term['sections'] ) ) {
454
+                    if ( ! empty( $term['sections'] ) && is_array( $term['sections'] ) ) {
455
+                        if ( isset( $term['permissions'] ) || isset( $term['add_visibility'] ) ) {
456
+                            foreach ( $term['sections'] as $key => $section ) {
457
+                                if ( ! isset( $section['permissions'] ) && isset( $term['permissions'] ) ) {
458
+                                    $term['sections'][ $key ]['permissions'] = $term['permissions'];
459
+                                }
460
+
461
+                                if ( ! isset( $section['add_visibility'] ) && isset( $term['add_visibility'] ) ) {
462
+                                    $term['sections'][ $key ]['add_visibility'] = $term['add_visibility'];
463
+                                }
464
+                            }
465
+                        }
466
+
467
+                        self::process_sections_array( $opt_name, $term['id'], $term['sections'] );
468
+                    }
469
+
470
+                    unset( $term['sections'] );
471
+                }
472
+
473
+                self::$terms[ $opt_name ][ $term['id'] ] = $term;
474
+            } else {
475
+                self::$errors[ $opt_name ]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
476
+            }
477
+        }
478
+
479
+        /**
480
+         * Get terms.
481
+         *
482
+         * @param string $opt_name Panel opt_name.
483
+         *
484
+         * @return mixed
485
+         */
486
+        public static function get_terms( string $opt_name = '' ) {
487
+            self::check_opt_name( $opt_name );
488
+
489
+            if ( ! empty( $opt_name ) && ! empty( self::$terms[ $opt_name ] ) ) {
490
+                return self::$terms[ $opt_name ];
491
+            }
492
+
493
+            return false;
494
+        }
495
+
496
+        /**
497
+         * Get priority.
498
+         *
499
+         * @param string $opt_name Panel opt_name.
500
+         * @param string $type     Field type.
501
+         *
502
+         * @return mixed
503
+         */
504
+        public static function get_priority( string $opt_name, string $type ) {
505
+            $priority                              = self::$priority[ $opt_name ][ $type ];
506
+            self::$priority[ $opt_name ][ $type ] += 1;
507
+
508
+            return $priority;
509
+        }
510
+
511
+        /**
512
+         * Check opt_name.
513
+         *
514
+         * @param string $opt_name Panel opt_name.
515
+         */
516
+        public static function check_opt_name( string $opt_name = '' ) {
517
+            if ( empty( $opt_name ) || is_array( $opt_name ) ) {
518
+                return;
519
+            }
520
+
521
+            if ( ! isset( self::$terms[ $opt_name ] ) ) {
522
+                self::$terms[ $opt_name ] = array();
523
+            }
524
+
525
+            if ( ! isset( self::$priority[ $opt_name ] ) ) {
526
+                self::$priority[ $opt_name ]['args'] = 1;
527
+            }
528
+
529
+            if ( ! isset( self::$sections[ $opt_name ] ) ) {
530
+                self::$sections[ $opt_name ]             = array();
531
+                self::$priority[ $opt_name ]['sections'] = 1;
532
+            }
533
+
534
+            if ( ! isset( self::$fields[ $opt_name ] ) ) {
535
+                self::$fields[ $opt_name ]             = array();
536
+                self::$priority[ $opt_name ]['fields'] = 1;
537
+            }
538
+
539
+            if ( ! isset( self::$errors[ $opt_name ] ) ) {
540
+                self::$errors[ $opt_name ] = array();
541
+            }
542
+
543
+            if ( ! isset( self::$init[ $opt_name ] ) ) {
544
+                self::$init[ $opt_name ] = false;
545
+            }
546
+
547
+            if ( ! isset( self::$args[ $opt_name ] ) ) {
548
+                self::$args[ $opt_name ] = false;
549
+            }
550
+        }
551
+
552
+        /**
553
+         * Get field defaults.
554
+         *
555
+         * @param string $opt_name Panel opt_name.
556
+         *
557
+         * @return array|void
558
+         */
559
+        public static function get_field_defaults( string $opt_name ) {
560
+            if ( empty( $opt_name ) ) {
561
+                return;
562
+            }
563
+
564
+            if ( ! isset( self::$fields[ $opt_name ] ) ) {
565
+                return array();
566
+            }
567
+
568
+            return array_map(
569
+                function ( $field ) {
570
+                    return $field['default'] ?? '';
571
+                },
572
+                self::$fields[ $opt_name ]
573
+            );
574
+        }
575
+
576
+        /**
577
+         * Get term meta.
578
+         *
579
+         * @param array $args Args array.
580
+         *
581
+         * @return array|mixed|string
582
+         */
583
+        public static function get_term_meta( array $args = array() ) {
584
+            $default = array(
585
+                'key'      => '',
586
+                'opt_name' => '',
587
+                'taxonomy' => '',
588
+            );
589
+
590
+            $args = wp_parse_args( $args, $default );
591
+
592
+            // phpcs:ignore WordPress.PHP.DontExtract
593
+            extract( $args );
594
+
595
+            if ( empty( $taxonomy ) ) {
596
+                return array();
597
+            }
598
+
599
+            $single = ! empty( $key );
600
+
601
+            $meta = get_term_meta( $taxonomy, $key, $single );
602
+
603
+            // phpcs:ignore Generic.CodeAnalysis.EmptyStatement
604
+            if ( $single ) {
605
+                // Do nothing.
606
+            } elseif ( ! empty( $meta ) ) {
607
+                foreach ( $meta as $key => $value ) {
608
+                    if ( is_array( $value ) ) {
609
+                        $value = $value[0];
610
+                    }
611
+
612
+                    $meta[ $key ] = maybe_unserialize( $value );
613
+                }
614
+            }
615
+
616
+            if ( ! empty( $opt_name ) ) {
617
+                $defaults = self::get_field_defaults( $opt_name );
618
+
619
+                if ( $single ) {
620
+                    $default_value = '';
621
+
622
+                    if ( isset( $defaults[ $key ] ) ) {
623
+                        $default_value = $defaults[ $key ];
624
+                    }
625
+
626
+                    if ( is_array( $meta ) ) {
627
+                        if ( is_array( $default_value ) ) {
628
+                            $meta = wp_parse_args( $meta, $default_value );
629
+                        }
630
+                    } elseif ( '' === $meta && '' !== $default_value ) {
631
+                            $meta = $default_value;
632
+                    }
633
+                } else {
634
+                    $meta = wp_parse_args( $meta, $defaults );
635
+                }
636
+            }
637
+
638
+            return $meta;
639
+        }
640
+    }
641
+
642
+    Redux_Taxonomy::load();
643 643
 }
Please login to merge, or discard this patch.
Spacing   +60 added lines, -60 removed lines patch added patch discarded remove patch
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
 				$instances = Redux::all_instances();
93 93
 
94 94
 				foreach ( self::$fields as $opt_name => $fields ) {
95
-					if ( ! isset( $instances[ $opt_name ] ) ) {
95
+					if ( ! isset( $instances[$opt_name] ) ) {
96 96
 						Redux::set_args( $opt_name, array( 'menu_type' => 'hidden' ) );
97 97
 
98 98
 						Redux::set_sections(
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
 
114 114
 					self::check_opt_name( $opt_name );
115 115
 
116
-					Redux::set_args( $opt_name, self::$args[ $opt_name ] );
116
+					Redux::set_args( $opt_name, self::$args[$opt_name] );
117 117
 				}
118 118
 			}
119 119
 		}
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 		 * @return mixed
127 127
 		 */
128 128
 		public static function construct_args( string $opt_name ) {
129
-			$args             = self::$args[ $opt_name ];
129
+			$args             = self::$args[$opt_name];
130 130
 			$args['opt_name'] = $opt_name;
131 131
 
132 132
 			if ( ! isset( $args['menu_title'] ) ) {
@@ -154,11 +154,11 @@  discard block
 block discarded – undo
154 154
 		public static function construct_terms( string $opt_name ): array {
155 155
 			$terms = array();
156 156
 
157
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
157
+			if ( ! isset( self::$terms[$opt_name] ) ) {
158 158
 				return $terms;
159 159
 			}
160 160
 
161
-			foreach ( self::$terms[ $opt_name ] as $term ) {
161
+			foreach ( self::$terms[$opt_name] as $term ) {
162 162
 				$term['sections'] = self::construct_sections( $opt_name, $term['id'] );
163 163
 				$terms[]          = $term;
164 164
 			}
@@ -179,22 +179,22 @@  discard block
 block discarded – undo
179 179
 		public static function construct_sections( string $opt_name, string $term_id ): array {
180 180
 			$sections = array();
181 181
 
182
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
182
+			if ( ! isset( self::$sections[$opt_name] ) ) {
183 183
 				return $sections;
184 184
 			}
185 185
 
186
-			foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
186
+			foreach ( self::$sections[$opt_name] as $section_id => $section ) {
187 187
 				if ( $section['term_id'] === $term_id ) {
188
-					self::$sections[ $opt_name ][ $section_id ]['add_visibility'] = $section;
188
+					self::$sections[$opt_name][$section_id]['add_visibility'] = $section;
189 189
 
190 190
 					$p = $section['priority'];
191 191
 
192
-					while ( isset( $sections[ $p ] ) ) {
192
+					while ( isset( $sections[$p] ) ) {
193 193
 						echo esc_html( $p++ );
194 194
 					}
195 195
 
196 196
 					$section['fields'] = self::construct_fields( $opt_name, $section_id );
197
-					$sections[ $p ]    = $section;
197
+					$sections[$p]    = $section;
198 198
 				}
199 199
 			}
200 200
 
@@ -216,29 +216,29 @@  discard block
 block discarded – undo
216 216
 		public static function construct_fields( string $opt_name = '', string $section_id = '', bool $permissions = false, bool $add_visibility = false ): array {
217 217
 			$fields = array();
218 218
 
219
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
219
+			if ( ! isset( self::$fields[$opt_name] ) ) {
220 220
 				return $fields;
221 221
 			}
222 222
 
223
-			foreach ( self::$fields[ $opt_name ] as $key => $field ) {
223
+			foreach ( self::$fields[$opt_name] as $key => $field ) {
224 224
 				// Nested permissions.
225 225
 				$field['permissions'] = $field['permissions'] ?? $permissions;
226 226
 
227
-				self::$fields[ $opt_name ][ $key ]['permissions'] = $field['permissions'];
227
+				self::$fields[$opt_name][$key]['permissions'] = $field['permissions'];
228 228
 
229 229
 				// Nested add_visibility permissions.
230 230
 				$field['add_visibility'] = $field['add_visibility'] ?? $add_visibility;
231 231
 
232
-				self::$fields[ $opt_name ][ $key ]['add_visibility'] = $field['add_visibility'];
232
+				self::$fields[$opt_name][$key]['add_visibility'] = $field['add_visibility'];
233 233
 
234 234
 				if ( $field['section_id'] === $section_id ) {
235 235
 					$p = $field['priority'];
236 236
 
237
-					while ( isset( $fields[ $p ] ) ) {
237
+					while ( isset( $fields[$p] ) ) {
238 238
 						echo esc_html( $p++ );
239 239
 					}
240 240
 
241
-					$fields[ $p ] = $field;
241
+					$fields[$p] = $field;
242 242
 				}
243 243
 			}
244 244
 
@@ -259,11 +259,11 @@  discard block
 block discarded – undo
259 259
 			self::check_opt_name( $opt_name );
260 260
 
261 261
 			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
262
-				if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
262
+				if ( ! isset( self::$sections[$opt_name][$id] ) ) {
263 263
 					$id = strtolower( sanitize_html_class( $id ) );
264 264
 				}
265 265
 
266
-				return self::$sections[ $opt_name ][ $id ] ?? false;
266
+				return self::$sections[$opt_name][$id] ?? false;
267 267
 			}
268 268
 
269 269
 			return false;
@@ -286,11 +286,11 @@  discard block
 block discarded – undo
286 286
 						$section['id'] = 'section';
287 287
 					}
288 288
 
289
-					if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
289
+					if ( isset( self::$sections[$opt_name][$section['id']] ) ) {
290 290
 						$orig = $section['id'];
291 291
 						$i    = 0;
292 292
 
293
-						while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
293
+						while ( isset( self::$sections[$opt_name][$section['id']] ) ) {
294 294
 							$section['id'] = $orig . '_' . $i;
295 295
 						}
296 296
 					}
@@ -305,11 +305,11 @@  discard block
 block discarded – undo
305 305
 						if ( isset( $section['permissions'] ) || isset( $section['add_visibility'] ) ) {
306 306
 							foreach ( $section['fields'] as $key => $field ) {
307 307
 								if ( ! isset( $field['permissions'] ) && isset( $section['permissions'] ) ) {
308
-									$section['fields'][ $key ]['permissions'] = $section['permissions'];
308
+									$section['fields'][$key]['permissions'] = $section['permissions'];
309 309
 								}
310 310
 
311 311
 								if ( ! isset( $field['add_visibility'] ) && isset( $section['add_visibility'] ) ) {
312
-									$section['fields'][ $key ]['add_visibility'] = $section['add_visibility'];
312
+									$section['fields'][$key]['add_visibility'] = $section['add_visibility'];
313 313
 								}
314 314
 							}
315 315
 						}
@@ -320,9 +320,9 @@  discard block
 block discarded – undo
320 320
 					unset( $section['fields'] );
321 321
 				}
322 322
 
323
-				self::$sections[ $opt_name ][ $section['id'] ] = $section;
323
+				self::$sections[$opt_name][$section['id']] = $section;
324 324
 			} else {
325
-				self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
325
+				self::$errors[$opt_name]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
326 326
 			}
327 327
 		}
328 328
 
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
 			self::check_opt_name( $opt_name );
385 385
 
386 386
 			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
387
-				return self::$fields[ $opt_name ][ $id ] ?? false;
387
+				return self::$fields[$opt_name][$id] ?? false;
388 388
 			}
389 389
 
390 390
 			return false;
@@ -404,7 +404,7 @@  discard block
 block discarded – undo
404 404
 					$field['priority'] = self::get_priority( $opt_name, 'fields' );
405 405
 				}
406 406
 
407
-				self::$fields[ $opt_name ][ $field['id'] ] = $field;
407
+				self::$fields[$opt_name][$field['id']] = $field;
408 408
 			}
409 409
 		}
410 410
 
@@ -418,8 +418,8 @@  discard block
 block discarded – undo
418 418
 			self::check_opt_name( $opt_name );
419 419
 
420 420
 			if ( ! empty( $opt_name ) && is_array( $args ) && ! empty( $args ) ) {
421
-				self::$args[ $opt_name ] = self::$args[ $opt_name ] ?? array();
422
-				self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
421
+				self::$args[$opt_name] = self::$args[$opt_name] ?? array();
422
+				self::$args[$opt_name] = wp_parse_args( $args, self::$args[$opt_name] );
423 423
 			}
424 424
 		}
425 425
 
@@ -440,11 +440,11 @@  discard block
 block discarded – undo
440 440
 						$term['id'] = 'term';
441 441
 					}
442 442
 
443
-					if ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
443
+					if ( isset( self::$terms[$opt_name][$term['id']] ) ) {
444 444
 						$orig = $term['id'];
445 445
 						$i    = 0;
446 446
 
447
-						while ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
447
+						while ( isset( self::$terms[$opt_name][$term['id']] ) ) {
448 448
 							$term['id'] = $orig . '_' . $i;
449 449
 						}
450 450
 					}
@@ -455,11 +455,11 @@  discard block
 block discarded – undo
455 455
 						if ( isset( $term['permissions'] ) || isset( $term['add_visibility'] ) ) {
456 456
 							foreach ( $term['sections'] as $key => $section ) {
457 457
 								if ( ! isset( $section['permissions'] ) && isset( $term['permissions'] ) ) {
458
-									$term['sections'][ $key ]['permissions'] = $term['permissions'];
458
+									$term['sections'][$key]['permissions'] = $term['permissions'];
459 459
 								}
460 460
 
461 461
 								if ( ! isset( $section['add_visibility'] ) && isset( $term['add_visibility'] ) ) {
462
-									$term['sections'][ $key ]['add_visibility'] = $term['add_visibility'];
462
+									$term['sections'][$key]['add_visibility'] = $term['add_visibility'];
463 463
 								}
464 464
 							}
465 465
 						}
@@ -470,9 +470,9 @@  discard block
 block discarded – undo
470 470
 					unset( $term['sections'] );
471 471
 				}
472 472
 
473
-				self::$terms[ $opt_name ][ $term['id'] ] = $term;
473
+				self::$terms[$opt_name][$term['id']] = $term;
474 474
 			} else {
475
-				self::$errors[ $opt_name ]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
475
+				self::$errors[$opt_name]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
476 476
 			}
477 477
 		}
478 478
 
@@ -486,8 +486,8 @@  discard block
 block discarded – undo
486 486
 		public static function get_terms( string $opt_name = '' ) {
487 487
 			self::check_opt_name( $opt_name );
488 488
 
489
-			if ( ! empty( $opt_name ) && ! empty( self::$terms[ $opt_name ] ) ) {
490
-				return self::$terms[ $opt_name ];
489
+			if ( ! empty( $opt_name ) && ! empty( self::$terms[$opt_name] ) ) {
490
+				return self::$terms[$opt_name];
491 491
 			}
492 492
 
493 493
 			return false;
@@ -502,8 +502,8 @@  discard block
 block discarded – undo
502 502
 		 * @return mixed
503 503
 		 */
504 504
 		public static function get_priority( string $opt_name, string $type ) {
505
-			$priority                              = self::$priority[ $opt_name ][ $type ];
506
-			self::$priority[ $opt_name ][ $type ] += 1;
505
+			$priority                              = self::$priority[$opt_name][$type];
506
+			self::$priority[$opt_name][$type] += 1;
507 507
 
508 508
 			return $priority;
509 509
 		}
@@ -518,34 +518,34 @@  discard block
 block discarded – undo
518 518
 				return;
519 519
 			}
520 520
 
521
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
522
-				self::$terms[ $opt_name ] = array();
521
+			if ( ! isset( self::$terms[$opt_name] ) ) {
522
+				self::$terms[$opt_name] = array();
523 523
 			}
524 524
 
525
-			if ( ! isset( self::$priority[ $opt_name ] ) ) {
526
-				self::$priority[ $opt_name ]['args'] = 1;
525
+			if ( ! isset( self::$priority[$opt_name] ) ) {
526
+				self::$priority[$opt_name]['args'] = 1;
527 527
 			}
528 528
 
529
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
530
-				self::$sections[ $opt_name ]             = array();
531
-				self::$priority[ $opt_name ]['sections'] = 1;
529
+			if ( ! isset( self::$sections[$opt_name] ) ) {
530
+				self::$sections[$opt_name]             = array();
531
+				self::$priority[$opt_name]['sections'] = 1;
532 532
 			}
533 533
 
534
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
535
-				self::$fields[ $opt_name ]             = array();
536
-				self::$priority[ $opt_name ]['fields'] = 1;
534
+			if ( ! isset( self::$fields[$opt_name] ) ) {
535
+				self::$fields[$opt_name]             = array();
536
+				self::$priority[$opt_name]['fields'] = 1;
537 537
 			}
538 538
 
539
-			if ( ! isset( self::$errors[ $opt_name ] ) ) {
540
-				self::$errors[ $opt_name ] = array();
539
+			if ( ! isset( self::$errors[$opt_name] ) ) {
540
+				self::$errors[$opt_name] = array();
541 541
 			}
542 542
 
543
-			if ( ! isset( self::$init[ $opt_name ] ) ) {
544
-				self::$init[ $opt_name ] = false;
543
+			if ( ! isset( self::$init[$opt_name] ) ) {
544
+				self::$init[$opt_name] = false;
545 545
 			}
546 546
 
547
-			if ( ! isset( self::$args[ $opt_name ] ) ) {
548
-				self::$args[ $opt_name ] = false;
547
+			if ( ! isset( self::$args[$opt_name] ) ) {
548
+				self::$args[$opt_name] = false;
549 549
 			}
550 550
 		}
551 551
 
@@ -561,15 +561,15 @@  discard block
 block discarded – undo
561 561
 				return;
562 562
 			}
563 563
 
564
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
564
+			if ( ! isset( self::$fields[$opt_name] ) ) {
565 565
 				return array();
566 566
 			}
567 567
 
568 568
 			return array_map(
569
-				function ( $field ) {
569
+				function( $field ) {
570 570
 					return $field['default'] ?? '';
571 571
 				},
572
-				self::$fields[ $opt_name ]
572
+				self::$fields[$opt_name]
573 573
 			);
574 574
 		}
575 575
 
@@ -609,7 +609,7 @@  discard block
 block discarded – undo
609 609
 						$value = $value[0];
610 610
 					}
611 611
 
612
-					$meta[ $key ] = maybe_unserialize( $value );
612
+					$meta[$key] = maybe_unserialize( $value );
613 613
 				}
614 614
 			}
615 615
 
@@ -619,8 +619,8 @@  discard block
 block discarded – undo
619 619
 				if ( $single ) {
620 620
 					$default_value = '';
621 621
 
622
-					if ( isset( $defaults[ $key ] ) ) {
623
-						$default_value = $defaults[ $key ];
622
+					if ( isset( $defaults[$key] ) ) {
623
+						$default_value = $defaults[$key];
624 624
 					}
625 625
 
626 626
 					if ( is_array( $meta ) ) {
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/class-redux-extension-customizer.php 2 patches
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 		 *
56 56
 		 * @var array|null
57 57
 		 */
58
-		private static ?array $post_values = array();
58
+		private static ? array $post_values = array();
59 59
 
60 60
 		/**
61 61
 		 * Options array.
@@ -316,10 +316,10 @@  discard block
 block discarded – undo
316 316
 				foreach ( $the_data as $key => $value ) {
317 317
 					if ( strpos( wp_json_encode( $value ), 'data' ) > 0 ) {
318 318
 						foreach ( $value as $k => $v ) {
319
-							$decode           = (array) json_decode( rawurldecode( $v['data'] ) );
319
+							$decode           = ( array ) json_decode( rawurldecode( $v['data'] ) );
320 320
 							$v                = $decode;
321
-							$dumb_array[ $k ] = $v;
322
-							$the_data[ $key ] = $dumb_array;
321
+							$dumb_array[$k] = $v;
322
+							$the_data[$key] = $dumb_array;
323 323
 						}
324 324
 					}
325 325
 				}
@@ -343,10 +343,10 @@  discard block
 block discarded – undo
343 343
 					foreach ( self::$post_values as $key => $value ) {
344 344
 						if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
345 345
 							$key          = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, ']' ) );
346
-							$data[ $key ] = $value;
346
+							$data[$key] = $value;
347 347
 
348
-							$GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value;
349
-							$this->parent->options[ $key ]                             = $value;
348
+							$GLOBALS[$this->parent->args['global_variable']][$key] = $value;
349
+							$this->parent->options[$key]                             = $value;
350 350
 						}
351 351
 					}
352 352
 				}
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
 		 */
363 363
 		public function render( object $control ) {
364 364
 			$field_id = str_replace( $this->parent->args['opt_name'] . '-', '', $control->redux_id );
365
-			$field    = $this->options[ $field_id ];
365
+			$field    = $this->options[$field_id];
366 366
 
367 367
 			if ( ! empty( $field['compiler'] ) ) {
368 368
 				echo '<tr class="compiler">';
@@ -370,7 +370,7 @@  discard block
 block discarded – undo
370 370
 				echo '<tr>';
371 371
 			}
372 372
 
373
-			echo '<th scope="row">' . wp_kses_post( $this->parent->field_head[ $field['id'] ] ) . '</th>';
373
+			echo '<th scope="row">' . wp_kses_post( $this->parent->field_head[$field['id']] ) . '</th>';
374 374
 			echo '<td>';
375 375
 
376 376
 			$field['name'] = $field['id'];
@@ -414,8 +414,8 @@  discard block
 block discarded – undo
414 414
 			do_action( 'redux/extension/customizer/control/includes' );
415 415
 
416 416
 			$order = array(
417
-				'heading' => - 500,
418
-				'option'  => - 500,
417
+				'heading' => -500,
418
+				'option'  => -500,
419 419
 			);
420 420
 
421 421
 			$panel = '';
@@ -454,7 +454,7 @@  discard block
 block discarded – undo
454 454
 					$parent_section_id = null;
455 455
 					$new_parent        = true;
456 456
 				}
457
-				if ( isset( $parent_section_id ) && ( isset( $this->parent->sections[ $parent_section_id ]['customizer'] ) && false === $this->parent->sections[ $parent_section_id ]['customizer'] ) ) {
457
+				if ( isset( $parent_section_id ) && ( isset( $this->parent->sections[$parent_section_id]['customizer'] ) && false === $this->parent->sections[$parent_section_id]['customizer'] ) ) {
458 458
 					continue;
459 459
 				}
460 460
 
@@ -487,7 +487,7 @@  discard block
 block discarded – undo
487 487
 				}
488 488
 				$section['id'] = $this->parent->args['opt_name'] . '-' . $section['id'];
489 489
 
490
-				if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( true !== $section['subsection'] ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) {
490
+				if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( true !== $section['subsection'] ) ) && isset( $this->parent->sections[( $key + 1 )]['subsection'] ) && $this->parent->sections[( $key + 1 )]['subsection'] ) {
491 491
 					$this->add_panel(
492 492
 						$this->parent->args['opt_name'] . '-' . $section['id'],
493 493
 						array(
@@ -550,7 +550,7 @@  discard block
 block discarded – undo
550 550
 						continue;
551 551
 					}
552 552
 
553
-					$this->options[ $option['id'] ] = $option;
553
+					$this->options[$option['id']] = $option;
554 554
 					add_action( 'redux/customizer/control/render/' . $this->parent->args['opt_name'] . '-' . $option['id'], array( $this, 'render' ) );
555 555
 
556 556
 					$option['permissions'] = $option['permissions'] ?? 'edit_theme_options';
@@ -561,7 +561,7 @@  discard block
 block discarded – undo
561 561
 						++$order['option'];
562 562
 					}
563 563
 
564
-					if ( ! empty( $this->options_defaults[ $option['id'] ] ) ) {
564
+					if ( ! empty( $this->options_defaults[$option['id']] ) ) {
565 565
 						$option['default'] = $this->options_defaults['option']['id'];
566 566
 					}
567 567
 
@@ -634,12 +634,12 @@  discard block
 block discarded – undo
634 634
 						)
635 635
 					);
636 636
 
637
-					$section['fields'][ $skey ]['name'] = $option['id'];
638
-					if ( ! isset( $section['fields'][ $skey ]['class'] ) ) { // No errors please.
639
-						$section['fields'][ $skey ]['class'] = '';
637
+					$section['fields'][$skey]['name'] = $option['id'];
638
+					if ( ! isset( $section['fields'][$skey]['class'] ) ) { // No errors please.
639
+						$section['fields'][$skey]['class'] = '';
640 640
 					}
641 641
 
642
-					$this->controls[ $section['fields'][ $skey ]['id'] ] = $section['fields'][ $skey ];
642
+					$this->controls[$section['fields'][$skey]['id']] = $section['fields'][$skey];
643 643
 				}
644 644
 			}
645 645
 		}
@@ -706,11 +706,11 @@  discard block
 block discarded – undo
706 706
 					if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
707 707
 						$key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, ']' ) );
708 708
 
709
-						if ( ! isset( $this->orig_options[ $key ] ) || $value !== $this->orig_options[ $key ] || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) {
710
-							$this->parent->options[ $key ] = $value;
709
+						if ( ! isset( $this->orig_options[$key] ) || $value !== $this->orig_options[$key] || ( isset( $this->orig_options[$key] ) && ! empty( $this->orig_options[$key] ) && empty( $value ) ) ) {
710
+							$this->parent->options[$key] = $value;
711 711
 							$changed                       = true;
712 712
 
713
-							if ( isset( $this->parent->compiler_fields[ $key ] ) ) {
713
+							if ( isset( $this->parent->compiler_fields[$key] ) ) {
714 714
 								$compiler = true;
715 715
 							}
716 716
 						}
@@ -813,8 +813,8 @@  discard block
 block discarded – undo
813 813
 			if ( strpos( wp_json_encode( $value ), 'data' ) > 0 ) {
814 814
 				$replace = $value;
815 815
 				foreach ( $replace as $sub_array ) {
816
-					$cs_array                 = (array) json_decode( rawurldecode( $sub_array['data'] ) );
817
-					$value[ $cs_array['id'] ] = $cs_array;
816
+					$cs_array                 = ( array ) json_decode( rawurldecode( $sub_array['data'] ) );
817
+					$value[$cs_array['id']] = $cs_array;
818 818
 				}
819 819
 			}
820 820
 
Please login to merge, or discard this patch.
Indentation   +819 added lines, -819 removed lines patch added patch discarded remove patch
@@ -14,828 +14,828 @@
 block discarded – undo
14 14
 // Don't duplicate me!
15 15
 if ( ! class_exists( 'Redux_Extension_Customizer', false ) ) {
16 16
 
17
-	/**
18
-	 * Main ReduxFramework customizer extension class
19
-	 *
20
-	 * @since       1.0.0
21
-	 */
22
-	class Redux_Extension_Customizer extends Redux_Extension_Abstract {
23
-
24
-		/**
25
-		 * Set extension version.
26
-		 *
27
-		 * @var string
28
-		 */
29
-		public static $version = '4.5.1';
30
-
31
-		/**
32
-		 * Set the name of the field.  Ideally, this will also be your extension's name.
33
-		 * Please use underscores and NOT dashes.
34
-		 *
35
-		 * @var string
36
-		 */
37
-		public string $field_name = 'customizer';
38
-
39
-		/**
40
-		 * Set the friendly name of the extension.  This is for display purposes.  No underscores or dashes are required.
41
-		 *
42
-		 * @var string
43
-		 */
44
-		public string $extension_name = 'Customizer';
45
-
46
-		/**
47
-		 * Original options.
48
-		 *
49
-		 * @var array|null
50
-		 */
51
-		private ?array $orig_options = array();
52
-
53
-		/**
54
-		 * Post values.
55
-		 *
56
-		 * @var array|null
57
-		 */
58
-		private static ?array $post_values = array();
59
-
60
-		/**
61
-		 * Options array.
62
-		 *
63
-		 * @var array|null
64
-		 */
65
-		public ?array $options = array();
66
-
67
-		/**
68
-		 * Controls array.
69
-		 *
70
-		 * @var array|null
71
-		 */
72
-		public ?array $controls = array();
73
-
74
-		/**
75
-		 * Before save array.
76
-		 *
77
-		 * @var array|null
78
-		 */
79
-		public ?array $before_save = array();
80
-
81
-		/**
82
-		 * Redux object.
83
-		 *
84
-		 * @var ReduxFramework|null
85
-		 */
86
-		protected ?ReduxFramework $redux;
87
-
88
-		/**
89
-		 * Field array.
90
-		 *
91
-		 * @var array|null
92
-		 */
93
-		private ?array $redux_fields = array();
94
-
95
-		/**
96
-		 * Redux_Extension_my_extension constructor.
97
-		 *
98
-		 * @param ReduxFramework $redux ReduxFramework pointer.
99
-		 */
100
-		public function __construct( $redux ) {
101
-			global $pagenow;
102
-			global $wp_customize;
103
-
104
-			parent::__construct( $redux, __FILE__ );
105
-
106
-			if ( is_admin() && ! isset( $wp_customize ) && 'customize.php' !== $pagenow && 'admin-ajax.php' !== $pagenow ) {
107
-				return;
108
-			}
109
-
110
-			$this->add_field( 'customizer' );
111
-
112
-			$this->load();
113
-		}
114
-
115
-		/**
116
-		 * The customizer load code
117
-		 */
118
-		private function load() {
119
-			global $pagenow, $wp_customize;
120
-
121
-			if ( false === $this->parent->args['customizer'] ) {
122
-				return;
123
-			}
124
-
125
-			// Override the Redux_Core class.
126
-			add_filter( "redux/extension/{$this->parent->args['opt_name']}/customizer", array( $this, 'remove_core_customizer_class' ) );
127
-
128
-			if ( ! isset( $wp_customize ) && 'customize.php' !== $pagenow && 'admin-ajax.php' !== $pagenow ) {
129
-				return;
130
-			}
131
-
132
-			self::get_post_values();
133
-
134
-			if ( isset( $_POST['wp_customize'] ) && 'on' === $_POST['wp_customize'] ) { // phpcs:ignore WordPress.Security.NonceVerification
135
-				$this->parent->args['customizer_only'] = true;
136
-			}
137
-
138
-			if ( isset( $_POST['wp_customize'] ) && 'on' === $_POST['wp_customize'] && ! empty( $_POST['customized'] ) && ! isset( $_POST['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
139
-				add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( $this, 'override_values' ), 100 );
140
-			}
141
-
142
-			add_action( 'customize_register', array( $this, 'register_customizer_controls' ) ); // Create controls.
143
-			add_action( 'wp_head', array( $this, 'customize_preview_init' ) );
144
-
145
-			add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save.
146
-
147
-			// Add global controls CSS file.
148
-			add_action( 'customize_controls_print_scripts', array( $this, 'enqueue_controls_css' ) );
149
-			add_action( 'customize_controls_init', array( $this, 'enqueue_panel_css' ) );
150
-			add_action( 'wp_enqueue_styles', array( $this, 'custom_css' ), 11 );
151
-
152
-			add_action( 'redux/extension/customizer/control_init', array( $this, 'create_field_classes' ), 1, 2 );
153
-
154
-			add_action( 'wp_ajax_' . $this->parent->args['opt_name'] . '_customizer_save', array( $this, 'customizer' ) );
155
-			add_action( 'customize_controls_print_styles', array( $this, 'add_nonce_html' ) );
156
-		}
157
-
158
-		/**
159
-		 * Add nonce HTML for AJAX.
160
-		 */
161
-		public function add_nonce_html() {
162
-			$nonce = wp_create_nonce( 'redux_customer_nonce' );
163
-
164
-			?>
17
+    /**
18
+     * Main ReduxFramework customizer extension class
19
+     *
20
+     * @since       1.0.0
21
+     */
22
+    class Redux_Extension_Customizer extends Redux_Extension_Abstract {
23
+
24
+        /**
25
+         * Set extension version.
26
+         *
27
+         * @var string
28
+         */
29
+        public static $version = '4.5.1';
30
+
31
+        /**
32
+         * Set the name of the field.  Ideally, this will also be your extension's name.
33
+         * Please use underscores and NOT dashes.
34
+         *
35
+         * @var string
36
+         */
37
+        public string $field_name = 'customizer';
38
+
39
+        /**
40
+         * Set the friendly name of the extension.  This is for display purposes.  No underscores or dashes are required.
41
+         *
42
+         * @var string
43
+         */
44
+        public string $extension_name = 'Customizer';
45
+
46
+        /**
47
+         * Original options.
48
+         *
49
+         * @var array|null
50
+         */
51
+        private ?array $orig_options = array();
52
+
53
+        /**
54
+         * Post values.
55
+         *
56
+         * @var array|null
57
+         */
58
+        private static ?array $post_values = array();
59
+
60
+        /**
61
+         * Options array.
62
+         *
63
+         * @var array|null
64
+         */
65
+        public ?array $options = array();
66
+
67
+        /**
68
+         * Controls array.
69
+         *
70
+         * @var array|null
71
+         */
72
+        public ?array $controls = array();
73
+
74
+        /**
75
+         * Before save array.
76
+         *
77
+         * @var array|null
78
+         */
79
+        public ?array $before_save = array();
80
+
81
+        /**
82
+         * Redux object.
83
+         *
84
+         * @var ReduxFramework|null
85
+         */
86
+        protected ?ReduxFramework $redux;
87
+
88
+        /**
89
+         * Field array.
90
+         *
91
+         * @var array|null
92
+         */
93
+        private ?array $redux_fields = array();
94
+
95
+        /**
96
+         * Redux_Extension_my_extension constructor.
97
+         *
98
+         * @param ReduxFramework $redux ReduxFramework pointer.
99
+         */
100
+        public function __construct( $redux ) {
101
+            global $pagenow;
102
+            global $wp_customize;
103
+
104
+            parent::__construct( $redux, __FILE__ );
105
+
106
+            if ( is_admin() && ! isset( $wp_customize ) && 'customize.php' !== $pagenow && 'admin-ajax.php' !== $pagenow ) {
107
+                return;
108
+            }
109
+
110
+            $this->add_field( 'customizer' );
111
+
112
+            $this->load();
113
+        }
114
+
115
+        /**
116
+         * The customizer load code
117
+         */
118
+        private function load() {
119
+            global $pagenow, $wp_customize;
120
+
121
+            if ( false === $this->parent->args['customizer'] ) {
122
+                return;
123
+            }
124
+
125
+            // Override the Redux_Core class.
126
+            add_filter( "redux/extension/{$this->parent->args['opt_name']}/customizer", array( $this, 'remove_core_customizer_class' ) );
127
+
128
+            if ( ! isset( $wp_customize ) && 'customize.php' !== $pagenow && 'admin-ajax.php' !== $pagenow ) {
129
+                return;
130
+            }
131
+
132
+            self::get_post_values();
133
+
134
+            if ( isset( $_POST['wp_customize'] ) && 'on' === $_POST['wp_customize'] ) { // phpcs:ignore WordPress.Security.NonceVerification
135
+                $this->parent->args['customizer_only'] = true;
136
+            }
137
+
138
+            if ( isset( $_POST['wp_customize'] ) && 'on' === $_POST['wp_customize'] && ! empty( $_POST['customized'] ) && ! isset( $_POST['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
139
+                add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( $this, 'override_values' ), 100 );
140
+            }
141
+
142
+            add_action( 'customize_register', array( $this, 'register_customizer_controls' ) ); // Create controls.
143
+            add_action( 'wp_head', array( $this, 'customize_preview_init' ) );
144
+
145
+            add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save.
146
+
147
+            // Add global controls CSS file.
148
+            add_action( 'customize_controls_print_scripts', array( $this, 'enqueue_controls_css' ) );
149
+            add_action( 'customize_controls_init', array( $this, 'enqueue_panel_css' ) );
150
+            add_action( 'wp_enqueue_styles', array( $this, 'custom_css' ), 11 );
151
+
152
+            add_action( 'redux/extension/customizer/control_init', array( $this, 'create_field_classes' ), 1, 2 );
153
+
154
+            add_action( 'wp_ajax_' . $this->parent->args['opt_name'] . '_customizer_save', array( $this, 'customizer' ) );
155
+            add_action( 'customize_controls_print_styles', array( $this, 'add_nonce_html' ) );
156
+        }
157
+
158
+        /**
159
+         * Add nonce HTML for AJAX.
160
+         */
161
+        public function add_nonce_html() {
162
+            $nonce = wp_create_nonce( 'redux_customer_nonce' );
163
+
164
+            ?>
165 165
 			<div class="redux-customizer-nonce" data-nonce="<?php echo esc_attr( $nonce ); ?>"></div>
166 166
 			<?php
167
-		}
168
-
169
-		/**
170
-		 * AJAX callback for customizer save...to make sanitize/validate work.
171
-		 */
172
-		public function customizer() {
173
-			try {
174
-				$return_array = array();
175
-
176
-				if ( isset( $_POST['nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'redux_customer_nonce' ) && isset( $_POST['opt_name'] ) && '' !== $_POST['opt_name'] ) {
177
-					$redux = Redux::instance( sanitize_text_field( wp_unslash( $_POST['opt_name'] ) ) );
178
-
179
-					$post_data = wp_unslash( $_POST['data'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
180
-
181
-					// New method to avoid input_var nonsense.  Thanks @harunbasic.
182
-					$values = Redux_Functions_Ex::parse_str( $post_data );
183
-
184
-					$all_options = get_option( sanitize_text_field( wp_unslash( $_POST['opt_name'] ) ) );
185
-
186
-					$values = wp_parse_args( $values, $all_options );
187
-
188
-					$redux->options_class->set( $redux->options_class->validate_options( $values ) );
189
-
190
-					$redux->enqueue_class->get_warnings_and_errors_array();
191
-
192
-					$return_array = array(
193
-						'status'   => 'success',
194
-						'options'  => $redux->options,
195
-						'errors'   => $redux->enqueue_class->localize_data['errors'] ?? null,
196
-						'warnings' => $redux->enqueue_class->localize_data['warnings'] ?? null,
197
-						'sanitize' => $redux->enqueue_class->localize_data['sanitize'] ?? null,
198
-					);
199
-				}
200
-			} catch ( Exception $e ) {
201
-				$return_array = array( 'status' => $e->getMessage() );
202
-			}
203
-
204
-			echo wp_json_encode( $return_array );
205
-
206
-			die;
207
-		}
208
-
209
-		/**
210
-		 * Field classes.
211
-		 *
212
-		 * @param array $option Option.
213
-		 */
214
-		public function create_field_classes( array $option ) {
215
-			if ( empty( $this->redux_fields ) ) {
216
-				$file_paths = glob( Redux_Core::$dir . 'inc/fields/*' );
217
-
218
-				foreach ( $file_paths as $file ) {
219
-					if ( 'section' !== $file && 'divide' !== $file && 'editor' !== $file ) {
220
-						$this->redux_fields[] = str_replace( Redux_Core::$dir . 'inc/fields/', '', $file );
221
-					}
222
-				}
223
-
224
-				$file_paths = glob( Redux_Core::$dir . 'inc/extensions/*' );
225
-
226
-				foreach ( $file_paths as $file ) {
227
-					if ( 'section' !== $file && 'divide' !== $file && 'editor' !== $file ) {
228
-						$this->redux_fields[] = str_replace( Redux_Core::$dir . 'inc/extensions/', '', $file );
229
-					}
230
-				}
231
-			}
232
-
233
-			$class_name = 'Redux_Customizer_Control_' . $option['type'];
234
-
235
-			if ( ! class_exists( $class_name ) && ( in_array( $option['type'], $this->redux_fields, true ) || ( isset( $option['customizer_enabled'] ) && $option['customizer_enabled'] ) ) ) {
236
-				$upload_dir = Redux_Core::$upload_dir;
237
-
238
-				if ( ! file_exists( $upload_dir . $option['type'] . '.php' ) ) {
239
-					if ( ! is_dir( $upload_dir ) ) {
240
-						Redux_Core::$filesystem->execute( 'mkdir', $upload_dir );
241
-					}
242
-
243
-					$template = str_replace( '{{type}}', $option['type'], '<?php' . PHP_EOL . '   class Redux_Customizer_Control_{{type}} extends Redux_Customizer_Control {' . PHP_EOL . '     public $type = "redux-{{type}}";' . PHP_EOL . '   }' );
244
-
245
-					Redux_Core::$filesystem->execute( 'put_contents', $upload_dir . $option['type'] . '.php', array( 'content' => $template ) );
246
-				}
247
-
248
-				if ( file_exists( $upload_dir . $option['type'] . '.php' ) ) {
249
-					include_once $upload_dir . $option['type'] . '.php';
250
-				}
251
-			}
252
-		}
253
-
254
-		/**
255
-		 * Enqueue extension scripts/styles.
256
-		 */
257
-		public function enqueue_controls_css() {
258
-			$this->parent->enqueue_class->get_warnings_and_errors_array();
259
-			$this->parent->enqueue_class->init();
260
-
261
-			if ( $this->parent->args['dev_mode'] ) {
262
-				wp_enqueue_style(
263
-					'redux-extension-customizer',
264
-					$this->extension_url . 'redux-extension-customizer.css',
265
-					array(),
266
-					self::$version
267
-				);
268
-			}
269
-
270
-			wp_enqueue_script(
271
-				'redux-extension-customizer',
272
-				$this->extension_url . 'redux-extension-customizer' . Redux_Functions::is_min() . '.js',
273
-				array( 'jquery', 'redux-js' ),
274
-				self::$version,
275
-				true
276
-			);
277
-
278
-			wp_localize_script(
279
-				'redux-extension-customizer',
280
-				'redux_customizer',
281
-				array(
282
-					'body_class' => sanitize_html_class( 'admin-color-' . get_user_option( 'admin_color' ), 'fresh' ),
283
-				)
284
-			);
285
-		}
286
-
287
-		/**
288
-		 * Enqueue panel CSS>
289
-		 */
290
-		public function enqueue_panel_css() {}
291
-
292
-		/**
293
-		 * Remove core customizer class.
294
-		 *
295
-		 * @return string
296
-		 */
297
-		public function remove_core_customizer_class(): string {
298
-			return '';
299
-		}
300
-
301
-		/**
302
-		 * Customize preview init.
303
-		 */
304
-		public function customize_preview_init() {
305
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
306
-			do_action( 'redux/customizer/live_preview' );
307
-		}
308
-
309
-		/**
310
-		 * Get post values.
311
-		 */
312
-		protected static function get_post_values() {
313
-			if ( empty( self::$post_values ) && ! empty( $_POST['customized'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
314
-				$the_data = json_decode( stripslashes_deep( ( wp_unslash( $_POST['customized'] ) ) ), true ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput
315
-
316
-				foreach ( $the_data as $key => $value ) {
317
-					if ( strpos( wp_json_encode( $value ), 'data' ) > 0 ) {
318
-						foreach ( $value as $k => $v ) {
319
-							$decode           = (array) json_decode( rawurldecode( $v['data'] ) );
320
-							$v                = $decode;
321
-							$dumb_array[ $k ] = $v;
322
-							$the_data[ $key ] = $dumb_array;
323
-						}
324
-					}
325
-				}
326
-
327
-				self::$post_values = $the_data;
328
-			}
329
-		}
330
-
331
-		/**
332
-		 * Override customizer values.
333
-		 *
334
-		 * @param array $data Values.
335
-		 *
336
-		 * @return array
337
-		 */
338
-		public function override_values( array $data ): array {
339
-			self::get_post_values();
340
-
341
-			if ( isset( $_POST['customized'] ) && ! empty( self::$post_values ) ) { // phpcs:ignore WordPress.Security.NonceVerification
342
-				if ( is_array( self::$post_values ) ) {
343
-					foreach ( self::$post_values as $key => $value ) {
344
-						if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
345
-							$key          = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, ']' ) );
346
-							$data[ $key ] = $value;
347
-
348
-							$GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value;
349
-							$this->parent->options[ $key ]                             = $value;
350
-						}
351
-					}
352
-				}
353
-			}
354
-
355
-			return $data;
356
-		}
357
-
358
-		/**
359
-		 * Render Redux fields.
360
-		 *
361
-		 * @param object $control .
362
-		 */
363
-		public function render( object $control ) {
364
-			$field_id = str_replace( $this->parent->args['opt_name'] . '-', '', $control->redux_id );
365
-			$field    = $this->options[ $field_id ];
366
-
367
-			if ( ! empty( $field['compiler'] ) ) {
368
-				echo '<tr class="compiler">';
369
-			} else {
370
-				echo '<tr>';
371
-			}
372
-
373
-			echo '<th scope="row">' . wp_kses_post( $this->parent->field_head[ $field['id'] ] ) . '</th>';
374
-			echo '<td>';
375
-
376
-			$field['name'] = $field['id'];
377
-			$this->parent->render_class->field_input( $field );
378
-
379
-			echo '</td>';
380
-			echo '</tr>';
381
-		}
382
-
383
-		// All sections, settings, and controls will be added here.
384
-
385
-		/**
386
-		 * Register customizer controls.
387
-		 *
388
-		 * @param WP_Customize_Manager $wp_customize .
389
-		 *
390
-		 * @throws ReflectionException Exception.
391
-		 */
392
-		public function register_customizer_controls( WP_Customize_Manager $wp_customize ) {
393
-			if ( ! class_exists( 'Redux_Customizer_Section' ) ) {
394
-				require_once __DIR__ . '/inc/class-redux-customizer-section.php';
395
-
396
-				if ( method_exists( $wp_customize, 'register_section_type' ) ) {
397
-					$wp_customize->register_section_type( 'Redux_Customizer_Section' );
398
-				}
399
-			}
400
-
401
-			if ( ! class_exists( 'Redux_Customizer_Panel' ) ) {
402
-				require_once __DIR__ . '/inc/class-redux-customizer-panel.php';
403
-
404
-				if ( method_exists( $wp_customize, 'register_panel_type' ) ) {
405
-					$wp_customize->register_panel_type( 'Redux_Customizer_Panel' );
406
-				}
407
-			}
408
-
409
-			if ( ! class_exists( 'Redux_Customizer_Control' ) ) {
410
-				require_once __DIR__ . '/inc/class-redux-customizer-control.php';
411
-			}
412
-
413
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
414
-			do_action( 'redux/extension/customizer/control/includes' );
415
-
416
-			$order = array(
417
-				'heading' => - 500,
418
-				'option'  => - 500,
419
-			);
420
-
421
-			$panel = '';
422
-
423
-			$this->parent->args['options_api'] = false;
424
-			$this->parent->options_class->register();
425
-
426
-			$parent_section_id = null;
427
-			$new_parent        = true;
428
-
429
-			foreach ( $this->parent->sections as $key => $section ) {
430
-				// Not a type that should go on the customizer.
431
-
432
-				foreach ( $section['fields'] as $field ) {
433
-					if ( 'color_scheme' === $field['type'] || 'divide' === $field['type'] ) {
434
-						continue 2;
435
-					}
436
-				}
437
-
438
-				if ( isset( $section['id'] ) && 'import/export' === $section['id'] ) {
439
-					continue;
440
-				}
441
-
442
-				// If section customizer is set to false.
443
-				if ( isset( $section['customizer'] ) && false === $section['customizer'] ) {
444
-					continue;
445
-				}
446
-
447
-				// if we are in a subsection and parent is set to customizer false !!!
448
-				if ( ( isset( $section['subsection'] ) && $section['subsection'] ) ) {
449
-					if ( $new_parent ) {
450
-						$new_parent        = false;
451
-						$parent_section_id = ( $key - 1 );
452
-					}
453
-				} else { // not a subsection reset.
454
-					$parent_section_id = null;
455
-					$new_parent        = true;
456
-				}
457
-				if ( isset( $parent_section_id ) && ( isset( $this->parent->sections[ $parent_section_id ]['customizer'] ) && false === $this->parent->sections[ $parent_section_id ]['customizer'] ) ) {
458
-					continue;
459
-				}
460
-
461
-				$section['permissions'] = $section['permissions'] ?? 'edit_theme_options';
462
-
463
-				// No errors please.
464
-				if ( ! isset( $section['desc'] ) ) {
465
-					$section['desc'] = '';
466
-				}
467
-
468
-				// Fill the description if there is a subtitle.
469
-				if ( empty( $section['desc'] ) && ! empty( $section['subtitle'] ) ) {
470
-					$section['desc'] = $section['subtitle'];
471
-				}
472
-
473
-				// No title is present, let's show what section is missing a title.
474
-				if ( ! isset( $section['title'] ) ) {
475
-					$section['title'] = '';
476
-				}
477
-
478
-				// Let's make a section ID from the title.
479
-				if ( empty( $section['id'] ) ) {
480
-					$section['id'] = Redux_Core::strtolower( str_replace( ' ', '', $section['title'] ) );
481
-				}
482
-
483
-				// Let's set a default priority.
484
-				if ( empty( $section['priority'] ) ) {
485
-					$section['priority'] = $order['heading'];
486
-					++$order['heading'];
487
-				}
488
-				$section['id'] = $this->parent->args['opt_name'] . '-' . $section['id'];
489
-
490
-				if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( true !== $section['subsection'] ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) {
491
-					$this->add_panel(
492
-						$this->parent->args['opt_name'] . '-' . $section['id'],
493
-						array(
494
-							'priority'    => $section['priority'],
495
-							'capability'  => $section['permissions'],
496
-							'title'       => $section['title'],
497
-							'section'     => $section,
498
-							'opt_name'    => $this->parent->args['opt_name'],
499
-							'description' => '',
500
-						),
501
-						$wp_customize
502
-					);
503
-
504
-					$panel = $this->parent->args['opt_name'] . '-' . $section['id'];
505
-
506
-					$this->add_section(
507
-						$section['id'],
508
-						array(
509
-							'title'       => $section['title'],
510
-							'priority'    => $section['priority'],
511
-							'description' => $section['desc'],
512
-							'section'     => $section,
513
-							'opt_name'    => $this->parent->args['opt_name'],
514
-							'capability'  => $section['permissions'],
515
-							'panel'       => $panel,
516
-						),
517
-						$wp_customize
518
-					);
519
-				} else {
520
-					if ( ! isset( $section['subsection'] ) || ( true !== $section['subsection'] ) ) {
521
-						$panel = '';
522
-					}
523
-
524
-					$this->add_section(
525
-						$section['id'],
526
-						array(
527
-							'title'       => $section['title'],
528
-							'priority'    => $section['priority'],
529
-							'description' => $section['desc'],
530
-							'opt_name'    => $this->parent->args['opt_name'],
531
-							'section'     => $section,
532
-							'capability'  => $section['permissions'],
533
-							'panel'       => $panel,
534
-						),
535
-						$wp_customize
536
-					);
537
-				}
538
-
539
-				if ( ( empty( $section['fields'] ) ) ) {
540
-					continue;
541
-				}
542
-
543
-				foreach ( $section['fields'] as $skey => $option ) {
544
-
545
-					if ( isset( $option['customizer'] ) && false === $option['customizer'] ) {
546
-						continue;
547
-					}
548
-
549
-					if ( false === $this->parent->args['customizer'] && ( ! isset( $option['customizer'] ) || true !== $option['customizer'] ) ) {
550
-						continue;
551
-					}
552
-
553
-					$this->options[ $option['id'] ] = $option;
554
-					add_action( 'redux/customizer/control/render/' . $this->parent->args['opt_name'] . '-' . $option['id'], array( $this, 'render' ) );
555
-
556
-					$option['permissions'] = $option['permissions'] ?? 'edit_theme_options';
557
-
558
-					// Change the item priority if not set.
559
-					if ( 'heading' !== $option['type'] && ! isset( $option['priority'] ) ) {
560
-						$option['priority'] = $order['option'];
561
-						++$order['option'];
562
-					}
563
-
564
-					if ( ! empty( $this->options_defaults[ $option['id'] ] ) ) {
565
-						$option['default'] = $this->options_defaults['option']['id'];
566
-					}
567
-
568
-					if ( ! isset( $option['default'] ) ) {
569
-						$option['default'] = '';
570
-					}
571
-					if ( ! isset( $option['title'] ) ) {
572
-						$option['title'] = '';
573
-					}
574
-
575
-					$option['id'] = $this->parent->args['opt_name'] . '[' . $option['id'] . ']';
576
-
577
-					if ( 'heading' !== $option['type'] && 'import_export' !== $option['type'] && ! empty( $option['type'] ) ) {
578
-
579
-						$wp_customize->add_setting(
580
-							$option['id'],
581
-							array(
582
-								'default'           => $option['default'],
583
-								'transport'         => 'refresh',
584
-								'opt_name'          => $this->parent->args['opt_name'],
585
-								'sanitize_callback' => array( $this, 'field_validation' ),
586
-							)
587
-						);
588
-					}
589
-
590
-					if ( ! empty( $option['data'] ) && empty( $option['options'] ) ) {
591
-						if ( empty( $option['args'] ) ) {
592
-							$option['args'] = array();
593
-						}
594
-
595
-						if ( 'elusive-icons' === $option['data'] || 'elusive-icon' === $option['data'] || 'elusive' === $option['data'] ) {
596
-							$icons_file = Redux_Core::$dir . 'inc/fields/select/elusive-icons.php';
597
-
598
-							// phpcs:ignore WordPress.NamingConventions.ValidHookName
599
-							$icons_file = apply_filters( 'redux-font-icons-file', $icons_file );
600
-
601
-							if ( file_exists( $icons_file ) ) {
602
-								require_once $icons_file;
603
-							}
604
-						}
605
-						$option['options'] = $this->parent->wordpress_data->get( $option['data'], $option['args'] );
606
-					}
607
-
608
-					$class_name = 'Redux_Customizer_Control_' . $option['type'];
609
-
610
-					// phpcs:ignore WordPress.NamingConventions.ValidHookName
611
-					do_action( 'redux/extension/customizer/control_init', $option );
612
-
613
-					if ( ! class_exists( $class_name ) ) {
614
-						continue;
615
-					}
616
-
617
-					$wp_customize->add_control(
618
-						new $class_name(
619
-							$wp_customize,
620
-							$option['id'],
621
-							array(
622
-								'label'           => $option['title'],
623
-								'section'         => $section['id'],
624
-								'settings'        => $option['id'],
625
-								'type'            => 'redux-' . $option['type'],
626
-								'field'           => $option,
627
-								'ReduxFramework'  => $this->parent,
628
-								'active_callback' => ( isset( $option['required'] ) && class_exists( 'Redux_Customizer_Active_Callback' ) ) ? array(
629
-									'Redux_Customizer_Active_Callback',
630
-									'evaluate',
631
-								) : '__return_true',
632
-								'priority'        => $option['priority'],
633
-							)
634
-						)
635
-					);
636
-
637
-					$section['fields'][ $skey ]['name'] = $option['id'];
638
-					if ( ! isset( $section['fields'][ $skey ]['class'] ) ) { // No errors please.
639
-						$section['fields'][ $skey ]['class'] = '';
640
-					}
641
-
642
-					$this->controls[ $section['fields'][ $skey ]['id'] ] = $section['fields'][ $skey ];
643
-				}
644
-			}
645
-		}
646
-
647
-		/**
648
-		 * Add customizer section.
649
-		 *
650
-		 * @param string               $id           ID.
651
-		 * @param array                $args         Args.
652
-		 * @param WP_Customize_Manager $wp_customize .
653
-		 */
654
-		public function add_section( string $id, array $args, WP_Customize_Manager $wp_customize ) {
655
-
656
-			if ( is_a( $id, 'WP_Customize_Section' ) ) {
657
-				$section = $id;
658
-			} else {
659
-				$section = new Redux_Customizer_Section( $wp_customize, $id, $args );
660
-			}
661
-
662
-			$wp_customize->add_section( $section, $args );
663
-		}
664
-
665
-		/**
666
-		 * Add a customize panel.
667
-		 *
668
-		 * @param WP_Customize_Panel|string $id           Customize Panel object, or Panel ID.
669
-		 * @param array                     $args         Optional. Panel arguments. Default empty array.
670
-		 * @param WP_Customize_Manager      $wp_customize .
671
-		 *
672
-		 * @since  4.0.0
673
-		 * @access public
674
-		 */
675
-		public function add_panel( $id, array $args, WP_Customize_Manager $wp_customize ) {
676
-			if ( is_a( $id, 'WP_Customize_Panel' ) ) {
677
-				$panel = $id;
678
-			} else {
679
-				$panel = new Redux_Customizer_Panel( $wp_customize, $id, $args );
680
-			}
681
-
682
-			$wp_customize->add_panel( $panel, $args );
683
-		}
684
-
685
-		/**
686
-		 * Actions to take after customizer save.
687
-		 *
688
-		 * @throws ReflectionException Exception.
689
-		 */
690
-		public function customizer_save_after() {
691
-			if ( empty( $this->parent->options ) ) {
692
-				$this->parent->get_options();
693
-			}
694
-
695
-			if ( empty( $this->orig_options ) && ! empty( $this->parent->options ) ) {
696
-				$this->orig_options = $this->parent->options;
697
-			}
698
-
699
-			if ( isset( $_POST['customized'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
700
-				$options = json_decode( sanitize_text_field( wp_unslash( $_POST['customized'] ) ), true ); // phpcs:ignore WordPress.Security.NonceVerification
701
-
702
-				$compiler = false;
703
-				$changed  = false;
704
-
705
-				foreach ( $options as $key => $value ) {
706
-					if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
707
-						$key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, ']' ) );
708
-
709
-						if ( ! isset( $this->orig_options[ $key ] ) || $value !== $this->orig_options[ $key ] || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) {
710
-							$this->parent->options[ $key ] = $value;
711
-							$changed                       = true;
712
-
713
-							if ( isset( $this->parent->compiler_fields[ $key ] ) ) {
714
-								$compiler = true;
715
-							}
716
-						}
717
-					}
718
-				}
719
-
720
-				if ( $changed ) {
721
-					$this->parent->options_class->set( $this->parent->options );
722
-					if ( $compiler ) {
723
-						// Have to set this to stop the output of the CSS and typography stuff.
724
-						Redux_Core::$no_output = true;
725
-						$this->parent->output_class->enqueue();
726
-
727
-						// phpcs:ignore WordPress.NamingConventions.ValidHookName
728
-						do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS );
729
-
730
-						// phpcs:ignore WordPress.NamingConventions.ValidHookName
731
-						do_action( "redux/options/{$this->parent->args['opt_name']}/compiler/advanced", $this->parent );
732
-					}
733
-				}
734
-			}
735
-		}
736
-
737
-		/**
738
-		 * Enqueue CSS/JS for the customizer controls
739
-		 *
740
-		 * @since       1.0.0
741
-		 * @access      public
742
-		 * @global      $wp_styles
743
-		 * @return      void
744
-		 */
745
-		public function enqueue() {
746
-			$localize = array(
747
-				'save_pending'   => esc_html__( 'You have changes that are not saved.  Would you like to save them now?', 'redux-framework' ),
748
-				'reset_confirm'  => esc_html__( 'Are you sure?  Resetting will lose all custom values.', 'redux-framework' ),
749
-				'preset_confirm' => esc_html__( 'Your current options will be replaced with the values of this preset.  Would you like to proceed?', 'redux-framework' ),
750
-				'opt_name'       => $this->parent->args['opt_name'],
751
-				'field'          => $this->parent->options,
752
-				'defaults'       => $this->parent->options_defaults,
753
-				'folds'          => Redux_Core::$folds,
754
-			);
755
-
756
-			// Values used by the javascript.
757
-			wp_localize_script( 'redux-js', 'redux_opts', $localize );
758
-
759
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
760
-			do_action( 'redux-enqueue-' . $this->parent->args['opt_name'] );
761
-
762
-			foreach ( $this->parent->sections as $section ) {
763
-				if ( isset( $section['fields'] ) ) {
764
-					foreach ( $section['fields'] as $field ) {
765
-						if ( isset( $field['type'] ) ) {
766
-							$field_classes = array( 'Redux_' . $field['type'], 'ReduxFramework_' . $field['type'] );
767
-
768
-							$field_class = Redux_Functions::class_exists_ex( $field_classes );
769
-
770
-							if ( false === $field_class ) {
771
-
772
-								// phpcs:ignore WordPress.NamingConventions.ValidHookName
773
-								$class_file = apply_filters( 'redux-typeclass-load', $this->path . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field_class );
774
-
775
-								if ( $class_file ) {
776
-									require_once $class_file;
777
-
778
-									$field_class = Redux_Functions::class_exists_ex( $field_classes );
779
-
780
-								}
781
-							}
782
-
783
-							if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) {
784
-								$enqueue = new $field_class( '', '', $this );
785
-								$enqueue->enqueue();
786
-							}
787
-						}
788
-					}
789
-				}
790
-			}
791
-		}
792
-
793
-		/**
794
-		 * Register Option for use
795
-		 *
796
-		 * @since       1.0.0
797
-		 * @access      public
798
-		 * @return      void
799
-		 */
800
-		public function register_setting() {
801
-		}
802
-
803
-		/**
804
-		 * Validate the options before insertion
805
-		 *
806
-		 * @param array|string $value The options array.
807
-		 *
808
-		 * @return array|string $value
809
-		 * @since       3.0.0
810
-		 * @access      public
811
-		 */
812
-		public function field_validation( $value ) {
813
-			if ( strpos( wp_json_encode( $value ), 'data' ) > 0 ) {
814
-				$replace = $value;
815
-				foreach ( $replace as $sub_array ) {
816
-					$cs_array                 = (array) json_decode( rawurldecode( $sub_array['data'] ) );
817
-					$value[ $cs_array['id'] ] = $cs_array;
818
-				}
819
-			}
820
-
821
-			return $value;
822
-		}
823
-	}
824
-
825
-	if ( ! function_exists( 'redux_customizer_custom_validation' ) ) {
826
-		/**
827
-		 * Custom validation.
828
-		 *
829
-		 * @param mixed $field Field.
830
-		 *
831
-		 * @return mixed
832
-		 */
833
-		function redux_customizer_custom_validation( $field ) {
834
-			return $field;
835
-		}
836
-	}
167
+        }
168
+
169
+        /**
170
+         * AJAX callback for customizer save...to make sanitize/validate work.
171
+         */
172
+        public function customizer() {
173
+            try {
174
+                $return_array = array();
175
+
176
+                if ( isset( $_POST['nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'redux_customer_nonce' ) && isset( $_POST['opt_name'] ) && '' !== $_POST['opt_name'] ) {
177
+                    $redux = Redux::instance( sanitize_text_field( wp_unslash( $_POST['opt_name'] ) ) );
178
+
179
+                    $post_data = wp_unslash( $_POST['data'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
180
+
181
+                    // New method to avoid input_var nonsense.  Thanks @harunbasic.
182
+                    $values = Redux_Functions_Ex::parse_str( $post_data );
183
+
184
+                    $all_options = get_option( sanitize_text_field( wp_unslash( $_POST['opt_name'] ) ) );
185
+
186
+                    $values = wp_parse_args( $values, $all_options );
187
+
188
+                    $redux->options_class->set( $redux->options_class->validate_options( $values ) );
189
+
190
+                    $redux->enqueue_class->get_warnings_and_errors_array();
191
+
192
+                    $return_array = array(
193
+                        'status'   => 'success',
194
+                        'options'  => $redux->options,
195
+                        'errors'   => $redux->enqueue_class->localize_data['errors'] ?? null,
196
+                        'warnings' => $redux->enqueue_class->localize_data['warnings'] ?? null,
197
+                        'sanitize' => $redux->enqueue_class->localize_data['sanitize'] ?? null,
198
+                    );
199
+                }
200
+            } catch ( Exception $e ) {
201
+                $return_array = array( 'status' => $e->getMessage() );
202
+            }
203
+
204
+            echo wp_json_encode( $return_array );
205
+
206
+            die;
207
+        }
208
+
209
+        /**
210
+         * Field classes.
211
+         *
212
+         * @param array $option Option.
213
+         */
214
+        public function create_field_classes( array $option ) {
215
+            if ( empty( $this->redux_fields ) ) {
216
+                $file_paths = glob( Redux_Core::$dir . 'inc/fields/*' );
217
+
218
+                foreach ( $file_paths as $file ) {
219
+                    if ( 'section' !== $file && 'divide' !== $file && 'editor' !== $file ) {
220
+                        $this->redux_fields[] = str_replace( Redux_Core::$dir . 'inc/fields/', '', $file );
221
+                    }
222
+                }
223
+
224
+                $file_paths = glob( Redux_Core::$dir . 'inc/extensions/*' );
225
+
226
+                foreach ( $file_paths as $file ) {
227
+                    if ( 'section' !== $file && 'divide' !== $file && 'editor' !== $file ) {
228
+                        $this->redux_fields[] = str_replace( Redux_Core::$dir . 'inc/extensions/', '', $file );
229
+                    }
230
+                }
231
+            }
232
+
233
+            $class_name = 'Redux_Customizer_Control_' . $option['type'];
234
+
235
+            if ( ! class_exists( $class_name ) && ( in_array( $option['type'], $this->redux_fields, true ) || ( isset( $option['customizer_enabled'] ) && $option['customizer_enabled'] ) ) ) {
236
+                $upload_dir = Redux_Core::$upload_dir;
237
+
238
+                if ( ! file_exists( $upload_dir . $option['type'] . '.php' ) ) {
239
+                    if ( ! is_dir( $upload_dir ) ) {
240
+                        Redux_Core::$filesystem->execute( 'mkdir', $upload_dir );
241
+                    }
242
+
243
+                    $template = str_replace( '{{type}}', $option['type'], '<?php' . PHP_EOL . '   class Redux_Customizer_Control_{{type}} extends Redux_Customizer_Control {' . PHP_EOL . '     public $type = "redux-{{type}}";' . PHP_EOL . '   }' );
244
+
245
+                    Redux_Core::$filesystem->execute( 'put_contents', $upload_dir . $option['type'] . '.php', array( 'content' => $template ) );
246
+                }
247
+
248
+                if ( file_exists( $upload_dir . $option['type'] . '.php' ) ) {
249
+                    include_once $upload_dir . $option['type'] . '.php';
250
+                }
251
+            }
252
+        }
253
+
254
+        /**
255
+         * Enqueue extension scripts/styles.
256
+         */
257
+        public function enqueue_controls_css() {
258
+            $this->parent->enqueue_class->get_warnings_and_errors_array();
259
+            $this->parent->enqueue_class->init();
260
+
261
+            if ( $this->parent->args['dev_mode'] ) {
262
+                wp_enqueue_style(
263
+                    'redux-extension-customizer',
264
+                    $this->extension_url . 'redux-extension-customizer.css',
265
+                    array(),
266
+                    self::$version
267
+                );
268
+            }
269
+
270
+            wp_enqueue_script(
271
+                'redux-extension-customizer',
272
+                $this->extension_url . 'redux-extension-customizer' . Redux_Functions::is_min() . '.js',
273
+                array( 'jquery', 'redux-js' ),
274
+                self::$version,
275
+                true
276
+            );
277
+
278
+            wp_localize_script(
279
+                'redux-extension-customizer',
280
+                'redux_customizer',
281
+                array(
282
+                    'body_class' => sanitize_html_class( 'admin-color-' . get_user_option( 'admin_color' ), 'fresh' ),
283
+                )
284
+            );
285
+        }
286
+
287
+        /**
288
+         * Enqueue panel CSS>
289
+         */
290
+        public function enqueue_panel_css() {}
291
+
292
+        /**
293
+         * Remove core customizer class.
294
+         *
295
+         * @return string
296
+         */
297
+        public function remove_core_customizer_class(): string {
298
+            return '';
299
+        }
300
+
301
+        /**
302
+         * Customize preview init.
303
+         */
304
+        public function customize_preview_init() {
305
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
306
+            do_action( 'redux/customizer/live_preview' );
307
+        }
308
+
309
+        /**
310
+         * Get post values.
311
+         */
312
+        protected static function get_post_values() {
313
+            if ( empty( self::$post_values ) && ! empty( $_POST['customized'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
314
+                $the_data = json_decode( stripslashes_deep( ( wp_unslash( $_POST['customized'] ) ) ), true ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput
315
+
316
+                foreach ( $the_data as $key => $value ) {
317
+                    if ( strpos( wp_json_encode( $value ), 'data' ) > 0 ) {
318
+                        foreach ( $value as $k => $v ) {
319
+                            $decode           = (array) json_decode( rawurldecode( $v['data'] ) );
320
+                            $v                = $decode;
321
+                            $dumb_array[ $k ] = $v;
322
+                            $the_data[ $key ] = $dumb_array;
323
+                        }
324
+                    }
325
+                }
326
+
327
+                self::$post_values = $the_data;
328
+            }
329
+        }
330
+
331
+        /**
332
+         * Override customizer values.
333
+         *
334
+         * @param array $data Values.
335
+         *
336
+         * @return array
337
+         */
338
+        public function override_values( array $data ): array {
339
+            self::get_post_values();
340
+
341
+            if ( isset( $_POST['customized'] ) && ! empty( self::$post_values ) ) { // phpcs:ignore WordPress.Security.NonceVerification
342
+                if ( is_array( self::$post_values ) ) {
343
+                    foreach ( self::$post_values as $key => $value ) {
344
+                        if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
345
+                            $key          = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, ']' ) );
346
+                            $data[ $key ] = $value;
347
+
348
+                            $GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value;
349
+                            $this->parent->options[ $key ]                             = $value;
350
+                        }
351
+                    }
352
+                }
353
+            }
354
+
355
+            return $data;
356
+        }
357
+
358
+        /**
359
+         * Render Redux fields.
360
+         *
361
+         * @param object $control .
362
+         */
363
+        public function render( object $control ) {
364
+            $field_id = str_replace( $this->parent->args['opt_name'] . '-', '', $control->redux_id );
365
+            $field    = $this->options[ $field_id ];
366
+
367
+            if ( ! empty( $field['compiler'] ) ) {
368
+                echo '<tr class="compiler">';
369
+            } else {
370
+                echo '<tr>';
371
+            }
372
+
373
+            echo '<th scope="row">' . wp_kses_post( $this->parent->field_head[ $field['id'] ] ) . '</th>';
374
+            echo '<td>';
375
+
376
+            $field['name'] = $field['id'];
377
+            $this->parent->render_class->field_input( $field );
378
+
379
+            echo '</td>';
380
+            echo '</tr>';
381
+        }
382
+
383
+        // All sections, settings, and controls will be added here.
384
+
385
+        /**
386
+         * Register customizer controls.
387
+         *
388
+         * @param WP_Customize_Manager $wp_customize .
389
+         *
390
+         * @throws ReflectionException Exception.
391
+         */
392
+        public function register_customizer_controls( WP_Customize_Manager $wp_customize ) {
393
+            if ( ! class_exists( 'Redux_Customizer_Section' ) ) {
394
+                require_once __DIR__ . '/inc/class-redux-customizer-section.php';
395
+
396
+                if ( method_exists( $wp_customize, 'register_section_type' ) ) {
397
+                    $wp_customize->register_section_type( 'Redux_Customizer_Section' );
398
+                }
399
+            }
400
+
401
+            if ( ! class_exists( 'Redux_Customizer_Panel' ) ) {
402
+                require_once __DIR__ . '/inc/class-redux-customizer-panel.php';
403
+
404
+                if ( method_exists( $wp_customize, 'register_panel_type' ) ) {
405
+                    $wp_customize->register_panel_type( 'Redux_Customizer_Panel' );
406
+                }
407
+            }
408
+
409
+            if ( ! class_exists( 'Redux_Customizer_Control' ) ) {
410
+                require_once __DIR__ . '/inc/class-redux-customizer-control.php';
411
+            }
412
+
413
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
414
+            do_action( 'redux/extension/customizer/control/includes' );
415
+
416
+            $order = array(
417
+                'heading' => - 500,
418
+                'option'  => - 500,
419
+            );
420
+
421
+            $panel = '';
422
+
423
+            $this->parent->args['options_api'] = false;
424
+            $this->parent->options_class->register();
425
+
426
+            $parent_section_id = null;
427
+            $new_parent        = true;
428
+
429
+            foreach ( $this->parent->sections as $key => $section ) {
430
+                // Not a type that should go on the customizer.
431
+
432
+                foreach ( $section['fields'] as $field ) {
433
+                    if ( 'color_scheme' === $field['type'] || 'divide' === $field['type'] ) {
434
+                        continue 2;
435
+                    }
436
+                }
437
+
438
+                if ( isset( $section['id'] ) && 'import/export' === $section['id'] ) {
439
+                    continue;
440
+                }
441
+
442
+                // If section customizer is set to false.
443
+                if ( isset( $section['customizer'] ) && false === $section['customizer'] ) {
444
+                    continue;
445
+                }
446
+
447
+                // if we are in a subsection and parent is set to customizer false !!!
448
+                if ( ( isset( $section['subsection'] ) && $section['subsection'] ) ) {
449
+                    if ( $new_parent ) {
450
+                        $new_parent        = false;
451
+                        $parent_section_id = ( $key - 1 );
452
+                    }
453
+                } else { // not a subsection reset.
454
+                    $parent_section_id = null;
455
+                    $new_parent        = true;
456
+                }
457
+                if ( isset( $parent_section_id ) && ( isset( $this->parent->sections[ $parent_section_id ]['customizer'] ) && false === $this->parent->sections[ $parent_section_id ]['customizer'] ) ) {
458
+                    continue;
459
+                }
460
+
461
+                $section['permissions'] = $section['permissions'] ?? 'edit_theme_options';
462
+
463
+                // No errors please.
464
+                if ( ! isset( $section['desc'] ) ) {
465
+                    $section['desc'] = '';
466
+                }
467
+
468
+                // Fill the description if there is a subtitle.
469
+                if ( empty( $section['desc'] ) && ! empty( $section['subtitle'] ) ) {
470
+                    $section['desc'] = $section['subtitle'];
471
+                }
472
+
473
+                // No title is present, let's show what section is missing a title.
474
+                if ( ! isset( $section['title'] ) ) {
475
+                    $section['title'] = '';
476
+                }
477
+
478
+                // Let's make a section ID from the title.
479
+                if ( empty( $section['id'] ) ) {
480
+                    $section['id'] = Redux_Core::strtolower( str_replace( ' ', '', $section['title'] ) );
481
+                }
482
+
483
+                // Let's set a default priority.
484
+                if ( empty( $section['priority'] ) ) {
485
+                    $section['priority'] = $order['heading'];
486
+                    ++$order['heading'];
487
+                }
488
+                $section['id'] = $this->parent->args['opt_name'] . '-' . $section['id'];
489
+
490
+                if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( true !== $section['subsection'] ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) {
491
+                    $this->add_panel(
492
+                        $this->parent->args['opt_name'] . '-' . $section['id'],
493
+                        array(
494
+                            'priority'    => $section['priority'],
495
+                            'capability'  => $section['permissions'],
496
+                            'title'       => $section['title'],
497
+                            'section'     => $section,
498
+                            'opt_name'    => $this->parent->args['opt_name'],
499
+                            'description' => '',
500
+                        ),
501
+                        $wp_customize
502
+                    );
503
+
504
+                    $panel = $this->parent->args['opt_name'] . '-' . $section['id'];
505
+
506
+                    $this->add_section(
507
+                        $section['id'],
508
+                        array(
509
+                            'title'       => $section['title'],
510
+                            'priority'    => $section['priority'],
511
+                            'description' => $section['desc'],
512
+                            'section'     => $section,
513
+                            'opt_name'    => $this->parent->args['opt_name'],
514
+                            'capability'  => $section['permissions'],
515
+                            'panel'       => $panel,
516
+                        ),
517
+                        $wp_customize
518
+                    );
519
+                } else {
520
+                    if ( ! isset( $section['subsection'] ) || ( true !== $section['subsection'] ) ) {
521
+                        $panel = '';
522
+                    }
523
+
524
+                    $this->add_section(
525
+                        $section['id'],
526
+                        array(
527
+                            'title'       => $section['title'],
528
+                            'priority'    => $section['priority'],
529
+                            'description' => $section['desc'],
530
+                            'opt_name'    => $this->parent->args['opt_name'],
531
+                            'section'     => $section,
532
+                            'capability'  => $section['permissions'],
533
+                            'panel'       => $panel,
534
+                        ),
535
+                        $wp_customize
536
+                    );
537
+                }
538
+
539
+                if ( ( empty( $section['fields'] ) ) ) {
540
+                    continue;
541
+                }
542
+
543
+                foreach ( $section['fields'] as $skey => $option ) {
544
+
545
+                    if ( isset( $option['customizer'] ) && false === $option['customizer'] ) {
546
+                        continue;
547
+                    }
548
+
549
+                    if ( false === $this->parent->args['customizer'] && ( ! isset( $option['customizer'] ) || true !== $option['customizer'] ) ) {
550
+                        continue;
551
+                    }
552
+
553
+                    $this->options[ $option['id'] ] = $option;
554
+                    add_action( 'redux/customizer/control/render/' . $this->parent->args['opt_name'] . '-' . $option['id'], array( $this, 'render' ) );
555
+
556
+                    $option['permissions'] = $option['permissions'] ?? 'edit_theme_options';
557
+
558
+                    // Change the item priority if not set.
559
+                    if ( 'heading' !== $option['type'] && ! isset( $option['priority'] ) ) {
560
+                        $option['priority'] = $order['option'];
561
+                        ++$order['option'];
562
+                    }
563
+
564
+                    if ( ! empty( $this->options_defaults[ $option['id'] ] ) ) {
565
+                        $option['default'] = $this->options_defaults['option']['id'];
566
+                    }
567
+
568
+                    if ( ! isset( $option['default'] ) ) {
569
+                        $option['default'] = '';
570
+                    }
571
+                    if ( ! isset( $option['title'] ) ) {
572
+                        $option['title'] = '';
573
+                    }
574
+
575
+                    $option['id'] = $this->parent->args['opt_name'] . '[' . $option['id'] . ']';
576
+
577
+                    if ( 'heading' !== $option['type'] && 'import_export' !== $option['type'] && ! empty( $option['type'] ) ) {
578
+
579
+                        $wp_customize->add_setting(
580
+                            $option['id'],
581
+                            array(
582
+                                'default'           => $option['default'],
583
+                                'transport'         => 'refresh',
584
+                                'opt_name'          => $this->parent->args['opt_name'],
585
+                                'sanitize_callback' => array( $this, 'field_validation' ),
586
+                            )
587
+                        );
588
+                    }
589
+
590
+                    if ( ! empty( $option['data'] ) && empty( $option['options'] ) ) {
591
+                        if ( empty( $option['args'] ) ) {
592
+                            $option['args'] = array();
593
+                        }
594
+
595
+                        if ( 'elusive-icons' === $option['data'] || 'elusive-icon' === $option['data'] || 'elusive' === $option['data'] ) {
596
+                            $icons_file = Redux_Core::$dir . 'inc/fields/select/elusive-icons.php';
597
+
598
+                            // phpcs:ignore WordPress.NamingConventions.ValidHookName
599
+                            $icons_file = apply_filters( 'redux-font-icons-file', $icons_file );
600
+
601
+                            if ( file_exists( $icons_file ) ) {
602
+                                require_once $icons_file;
603
+                            }
604
+                        }
605
+                        $option['options'] = $this->parent->wordpress_data->get( $option['data'], $option['args'] );
606
+                    }
607
+
608
+                    $class_name = 'Redux_Customizer_Control_' . $option['type'];
609
+
610
+                    // phpcs:ignore WordPress.NamingConventions.ValidHookName
611
+                    do_action( 'redux/extension/customizer/control_init', $option );
612
+
613
+                    if ( ! class_exists( $class_name ) ) {
614
+                        continue;
615
+                    }
616
+
617
+                    $wp_customize->add_control(
618
+                        new $class_name(
619
+                            $wp_customize,
620
+                            $option['id'],
621
+                            array(
622
+                                'label'           => $option['title'],
623
+                                'section'         => $section['id'],
624
+                                'settings'        => $option['id'],
625
+                                'type'            => 'redux-' . $option['type'],
626
+                                'field'           => $option,
627
+                                'ReduxFramework'  => $this->parent,
628
+                                'active_callback' => ( isset( $option['required'] ) && class_exists( 'Redux_Customizer_Active_Callback' ) ) ? array(
629
+                                    'Redux_Customizer_Active_Callback',
630
+                                    'evaluate',
631
+                                ) : '__return_true',
632
+                                'priority'        => $option['priority'],
633
+                            )
634
+                        )
635
+                    );
636
+
637
+                    $section['fields'][ $skey ]['name'] = $option['id'];
638
+                    if ( ! isset( $section['fields'][ $skey ]['class'] ) ) { // No errors please.
639
+                        $section['fields'][ $skey ]['class'] = '';
640
+                    }
641
+
642
+                    $this->controls[ $section['fields'][ $skey ]['id'] ] = $section['fields'][ $skey ];
643
+                }
644
+            }
645
+        }
646
+
647
+        /**
648
+         * Add customizer section.
649
+         *
650
+         * @param string               $id           ID.
651
+         * @param array                $args         Args.
652
+         * @param WP_Customize_Manager $wp_customize .
653
+         */
654
+        public function add_section( string $id, array $args, WP_Customize_Manager $wp_customize ) {
655
+
656
+            if ( is_a( $id, 'WP_Customize_Section' ) ) {
657
+                $section = $id;
658
+            } else {
659
+                $section = new Redux_Customizer_Section( $wp_customize, $id, $args );
660
+            }
661
+
662
+            $wp_customize->add_section( $section, $args );
663
+        }
664
+
665
+        /**
666
+         * Add a customize panel.
667
+         *
668
+         * @param WP_Customize_Panel|string $id           Customize Panel object, or Panel ID.
669
+         * @param array                     $args         Optional. Panel arguments. Default empty array.
670
+         * @param WP_Customize_Manager      $wp_customize .
671
+         *
672
+         * @since  4.0.0
673
+         * @access public
674
+         */
675
+        public function add_panel( $id, array $args, WP_Customize_Manager $wp_customize ) {
676
+            if ( is_a( $id, 'WP_Customize_Panel' ) ) {
677
+                $panel = $id;
678
+            } else {
679
+                $panel = new Redux_Customizer_Panel( $wp_customize, $id, $args );
680
+            }
681
+
682
+            $wp_customize->add_panel( $panel, $args );
683
+        }
684
+
685
+        /**
686
+         * Actions to take after customizer save.
687
+         *
688
+         * @throws ReflectionException Exception.
689
+         */
690
+        public function customizer_save_after() {
691
+            if ( empty( $this->parent->options ) ) {
692
+                $this->parent->get_options();
693
+            }
694
+
695
+            if ( empty( $this->orig_options ) && ! empty( $this->parent->options ) ) {
696
+                $this->orig_options = $this->parent->options;
697
+            }
698
+
699
+            if ( isset( $_POST['customized'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
700
+                $options = json_decode( sanitize_text_field( wp_unslash( $_POST['customized'] ) ), true ); // phpcs:ignore WordPress.Security.NonceVerification
701
+
702
+                $compiler = false;
703
+                $changed  = false;
704
+
705
+                foreach ( $options as $key => $value ) {
706
+                    if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) {
707
+                        $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, ']' ) );
708
+
709
+                        if ( ! isset( $this->orig_options[ $key ] ) || $value !== $this->orig_options[ $key ] || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) {
710
+                            $this->parent->options[ $key ] = $value;
711
+                            $changed                       = true;
712
+
713
+                            if ( isset( $this->parent->compiler_fields[ $key ] ) ) {
714
+                                $compiler = true;
715
+                            }
716
+                        }
717
+                    }
718
+                }
719
+
720
+                if ( $changed ) {
721
+                    $this->parent->options_class->set( $this->parent->options );
722
+                    if ( $compiler ) {
723
+                        // Have to set this to stop the output of the CSS and typography stuff.
724
+                        Redux_Core::$no_output = true;
725
+                        $this->parent->output_class->enqueue();
726
+
727
+                        // phpcs:ignore WordPress.NamingConventions.ValidHookName
728
+                        do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS );
729
+
730
+                        // phpcs:ignore WordPress.NamingConventions.ValidHookName
731
+                        do_action( "redux/options/{$this->parent->args['opt_name']}/compiler/advanced", $this->parent );
732
+                    }
733
+                }
734
+            }
735
+        }
736
+
737
+        /**
738
+         * Enqueue CSS/JS for the customizer controls
739
+         *
740
+         * @since       1.0.0
741
+         * @access      public
742
+         * @global      $wp_styles
743
+         * @return      void
744
+         */
745
+        public function enqueue() {
746
+            $localize = array(
747
+                'save_pending'   => esc_html__( 'You have changes that are not saved.  Would you like to save them now?', 'redux-framework' ),
748
+                'reset_confirm'  => esc_html__( 'Are you sure?  Resetting will lose all custom values.', 'redux-framework' ),
749
+                'preset_confirm' => esc_html__( 'Your current options will be replaced with the values of this preset.  Would you like to proceed?', 'redux-framework' ),
750
+                'opt_name'       => $this->parent->args['opt_name'],
751
+                'field'          => $this->parent->options,
752
+                'defaults'       => $this->parent->options_defaults,
753
+                'folds'          => Redux_Core::$folds,
754
+            );
755
+
756
+            // Values used by the javascript.
757
+            wp_localize_script( 'redux-js', 'redux_opts', $localize );
758
+
759
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
760
+            do_action( 'redux-enqueue-' . $this->parent->args['opt_name'] );
761
+
762
+            foreach ( $this->parent->sections as $section ) {
763
+                if ( isset( $section['fields'] ) ) {
764
+                    foreach ( $section['fields'] as $field ) {
765
+                        if ( isset( $field['type'] ) ) {
766
+                            $field_classes = array( 'Redux_' . $field['type'], 'ReduxFramework_' . $field['type'] );
767
+
768
+                            $field_class = Redux_Functions::class_exists_ex( $field_classes );
769
+
770
+                            if ( false === $field_class ) {
771
+
772
+                                // phpcs:ignore WordPress.NamingConventions.ValidHookName
773
+                                $class_file = apply_filters( 'redux-typeclass-load', $this->path . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field_class );
774
+
775
+                                if ( $class_file ) {
776
+                                    require_once $class_file;
777
+
778
+                                    $field_class = Redux_Functions::class_exists_ex( $field_classes );
779
+
780
+                                }
781
+                            }
782
+
783
+                            if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) {
784
+                                $enqueue = new $field_class( '', '', $this );
785
+                                $enqueue->enqueue();
786
+                            }
787
+                        }
788
+                    }
789
+                }
790
+            }
791
+        }
792
+
793
+        /**
794
+         * Register Option for use
795
+         *
796
+         * @since       1.0.0
797
+         * @access      public
798
+         * @return      void
799
+         */
800
+        public function register_setting() {
801
+        }
802
+
803
+        /**
804
+         * Validate the options before insertion
805
+         *
806
+         * @param array|string $value The options array.
807
+         *
808
+         * @return array|string $value
809
+         * @since       3.0.0
810
+         * @access      public
811
+         */
812
+        public function field_validation( $value ) {
813
+            if ( strpos( wp_json_encode( $value ), 'data' ) > 0 ) {
814
+                $replace = $value;
815
+                foreach ( $replace as $sub_array ) {
816
+                    $cs_array                 = (array) json_decode( rawurldecode( $sub_array['data'] ) );
817
+                    $value[ $cs_array['id'] ] = $cs_array;
818
+                }
819
+            }
820
+
821
+            return $value;
822
+        }
823
+    }
824
+
825
+    if ( ! function_exists( 'redux_customizer_custom_validation' ) ) {
826
+        /**
827
+         * Custom validation.
828
+         *
829
+         * @param mixed $field Field.
830
+         *
831
+         * @return mixed
832
+         */
833
+        function redux_customizer_custom_validation( $field ) {
834
+            return $field;
835
+        }
836
+    }
837 837
 }
838 838
 
839 839
 if ( ! class_exists( 'ReduxFramework_extension_customizer' ) ) {
840
-	class_alias( 'Redux_Extension_Customizer', 'ReduxFramework_extension_customizer' );
840
+    class_alias( 'Redux_Extension_Customizer', 'ReduxFramework_extension_customizer' );
841 841
 }
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/inc/class-redux-customizer-control.php 1 patch
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -10,40 +10,40 @@  discard block
 block discarded – undo
10 10
 
11 11
 if ( ! class_exists( 'Redux_Customizer_Control', false ) ) {
12 12
 
13
-	/**
14
-	 * Class Redux_Customizer_Control
15
-	 */
16
-	class Redux_Customizer_Control extends WP_Customize_Control {
13
+    /**
14
+     * Class Redux_Customizer_Control
15
+     */
16
+    class Redux_Customizer_Control extends WP_Customize_Control {
17 17
 
18
-		/**
19
-		 * Redux ID.
20
-		 *
21
-		 * @var string
22
-		 */
23
-		public string $redux_id = '';
18
+        /**
19
+         * Redux ID.
20
+         *
21
+         * @var string
22
+         */
23
+        public string $redux_id = '';
24 24
 
25
-		/**
26
-		 * Field render.
27
-		 */
28
-		public function render() {
25
+        /**
26
+         * Field render.
27
+         */
28
+        public function render() {
29 29
 
30
-			$this->redux_id = str_replace( 'customize-control-', '', 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ) );
31
-			$class          = 'customize-control redux-group-tab redux-field customize-control-' . $this->type;
32
-			$opt_name_arr   = explode( '[', $this->id );
33
-			$opt_name       = $opt_name_arr[0];
34
-			$field_id       = str_replace( ']', '', $opt_name_arr[1] );
30
+            $this->redux_id = str_replace( 'customize-control-', '', 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ) );
31
+            $class          = 'customize-control redux-group-tab redux-field customize-control-' . $this->type;
32
+            $opt_name_arr   = explode( '[', $this->id );
33
+            $opt_name       = $opt_name_arr[0];
34
+            $field_id       = str_replace( ']', '', $opt_name_arr[1] );
35 35
 
36
-			$section = Redux_Helpers::section_from_field_id( $opt_name, $field_id );
36
+            $section = Redux_Helpers::section_from_field_id( $opt_name, $field_id );
37 37
 
38
-			if ( isset( $section['disabled'] ) && true === $section['disabled'] ) {
39
-				$class .= ' disabled';
40
-			}
38
+            if ( isset( $section['disabled'] ) && true === $section['disabled'] ) {
39
+                $class .= ' disabled';
40
+            }
41 41
 
42
-			if ( isset( $section['hidden'] ) && true === $section['hidden'] ) {
43
-				$class .= ' hidden';
44
-			}
42
+            if ( isset( $section['hidden'] ) && true === $section['hidden'] ) {
43
+                $class .= ' hidden';
44
+            }
45 45
 
46
-			?>
46
+            ?>
47 47
 			<li id="<?php echo esc_attr( $this->redux_id ); ?>-li" class="<?php echo esc_attr( $class ); ?>">
48 48
 				<?php if ( 'repeater' !== $this->type ) { ?>
49 49
 					<input
@@ -57,42 +57,42 @@  discard block
 block discarded – undo
57 57
 				<?php $this->render_content(); ?>
58 58
 			</li>
59 59
 			<?php
60
-		}
60
+        }
61 61
 
62
-		/**
63
-		 * Render content hook.
64
-		 */
65
-		public function render_content() {
66
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
67
-			do_action( 'redux/customizer/control/render/' . $this->redux_id, $this );
68
-		}
62
+        /**
63
+         * Render content hook.
64
+         */
65
+        public function render_content() {
66
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
67
+            do_action( 'redux/customizer/control/render/' . $this->redux_id, $this );
68
+        }
69 69
 
70
-		/**
71
-		 * Label output.
72
-		 */
73
-		public function label() {
74
-			// The label has already been sanitized in the Fields class, no need to re-sanitize it.
75
-			echo( $this->label ); // phpcs:ignore WordPress.Security.EscapeOutput
76
-		}
70
+        /**
71
+         * Label output.
72
+         */
73
+        public function label() {
74
+            // The label has already been sanitized in the Fields class, no need to re-sanitize it.
75
+            echo( $this->label ); // phpcs:ignore WordPress.Security.EscapeOutput
76
+        }
77 77
 
78
-		/**
79
-		 * Description output.
80
-		 */
81
-		public function description() {
82
-			if ( ! empty( $this->description ) ) {
83
-				// The description has already been sanitized in the Fields class, no need to re-sanitize it.
84
-				echo '<span class="description customize-control-description">' . esc_html( $this->description ) . '</span>';
85
-			}
86
-		}
78
+        /**
79
+         * Description output.
80
+         */
81
+        public function description() {
82
+            if ( ! empty( $this->description ) ) {
83
+                // The description has already been sanitized in the Fields class, no need to re-sanitize it.
84
+                echo '<span class="description customize-control-description">' . esc_html( $this->description ) . '</span>';
85
+            }
86
+        }
87 87
 
88
-		/**
89
-		 * Title output.
90
-		 */
91
-		public function title() {
92
-			echo '<span class="customize-control-title">';
93
-			$this->label();
94
-			$this->description();
95
-			echo '</span>';
96
-		}
97
-	}
88
+        /**
89
+         * Title output.
90
+         */
91
+        public function title() {
92
+            echo '<span class="customize-control-title">';
93
+            $this->label();
94
+            $this->description();
95
+            echo '</span>';
96
+        }
97
+    }
98 98
 }
Please login to merge, or discard this patch.
redux-core/inc/fields/background/class-redux-background.php 1 patch
Indentation   +423 added lines, -423 removed lines patch added patch discarded remove patch
@@ -12,429 +12,429 @@
 block discarded – undo
12 12
 // Don't duplicate me!
13 13
 if ( ! class_exists( 'Redux_Background', false ) ) {
14 14
 
15
-	/**
16
-	 * Main Redux_background class
17
-	 *
18
-	 * @since       3.1.5
19
-	 */
20
-	class Redux_Background extends Redux_Field {
21
-
22
-		/**
23
-		 * Set field and value defaults.
24
-		 */
25
-		public function set_defaults() {
26
-			$defaults = array(
27
-				'background-color'      => true,
28
-				'background-repeat'     => true,
29
-				'background-attachment' => true,
30
-				'background-position'   => true,
31
-				'background-image'      => true,
32
-				'background-gradient'   => false,
33
-				'background-clip'       => false,
34
-				'background-origin'     => false,
35
-				'background-size'       => true,
36
-				'preview_media'         => false,
37
-				'preview'               => true,
38
-				'preview_height'        => '200px',
39
-				'transparent'           => true,
40
-			);
41
-
42
-			$this->field = wp_parse_args( $this->field, $defaults );
43
-
44
-			// No errors please.
45
-			$defaults = array(
46
-				'background-color'      => '',
47
-				'background-repeat'     => '',
48
-				'background-attachment' => '',
49
-				'background-position'   => '',
50
-				'background-image'      => '',
51
-				'background-clip'       => '',
52
-				'background-origin'     => '',
53
-				'background-size'       => '',
54
-				'media'                 => array(),
55
-			);
56
-
57
-			$this->value = wp_parse_args( $this->value, $defaults );
58
-
59
-			$defaults = array(
60
-				'id'        => '',
61
-				'width'     => '',
62
-				'height'    => '',
63
-				'thumbnail' => '',
64
-			);
65
-
66
-			$this->value['media'] = wp_parse_args( $this->value['media'], $defaults );
67
-		}
68
-
69
-		/**
70
-		 * Field Render Function.
71
-		 * Takes the vars and outputs the HTML for the field in the settings
72
-		 *
73
-		 * @since       1.0.0
74
-		 * @access      public
75
-		 * @return      void
76
-		 */
77
-		public function render() {
78
-			$this->select2_config['allowClear'] = true;
79
-
80
-			if ( isset( $this->field['select2'] ) ) {
81
-				$this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
82
-			} else {
83
-				$this->field['select2'] = $this->select2_config;
84
-			}
85
-
86
-			$this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
87
-
88
-			$select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
89
-
90
-			if ( true === $this->field['background-color'] ) {
91
-				if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) {
92
-					$this->value['background-color'] = $this->value['color'];
93
-				}
94
-
95
-				$def_bg_color = $this->field['default']['background-color'] ?? '';
96
-
97
-				echo '<input ';
98
-				echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
99
-				echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-color]"';
100
-				echo 'id="' . esc_attr( $this->field['id'] ) . '-color"';
101
-				echo 'class="color-picker redux-color redux-background-input redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
102
-				echo 'type="text" value="' . esc_attr( $this->value['background-color'] ) . '"';
103
-				echo 'data-default-color="' . esc_attr( $def_bg_color ) . '"';
104
-
105
-				$data = array(
106
-					'field' => $this->field,
107
-					'index' => 'color',
108
-				);
109
-
110
-				echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
111
-
112
-				echo '>';
113
-
114
-				echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-saved-color" value="">';
115
-
116
-				if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
117
-					$is_checked = '';
118
-					if ( 'transparent' === $this->value['background-color'] ) {
119
-						$is_checked = ' checked="checked"';
120
-					}
121
-					echo '<label for="' . esc_attr( $this->field['id'] ) . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency redux-background-input ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-color" value="1" ' . esc_html( $is_checked ) . '> ' . esc_html__( 'Transparent', 'redux-framework' ) . '</label>';
122
-				}
123
-
124
-				if ( true === $this->field['background-repeat'] || true === $this->field['background-position'] || true === $this->field['background-attachment'] ) {
125
-					echo '<br />';
126
-				}
127
-			}
128
-
129
-			if ( true === $this->field['background-repeat'] ) {
130
-				$array = array(
131
-					'no-repeat' => esc_html__( 'No Repeat', 'redux-framework' ),
132
-					'repeat'    => esc_html__( 'Repeat All', 'redux-framework' ),
133
-					'repeat-x'  => esc_html__( 'Repeat Horizontally', 'redux-framework' ),
134
-					'repeat-y'  => esc_html__( 'Repeat Vertically', 'redux-framework' ),
135
-					'inherit'   => esc_html__( 'Inherit', 'redux-framework' ),
136
-				);
137
-
138
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-repeat-select" data-placeholder="' . esc_html__( 'Background Repeat', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-repeat]" class="redux-select-item redux-background-input redux-background-repeat ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
139
-				echo '<option></option>';
140
-
141
-				foreach ( $array as $k => $v ) {
142
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-repeat'], $k, false ) . '>' . esc_html( $v ) . '</option>';
143
-				}
144
-
145
-				echo '</select>';
146
-			}
147
-
148
-			if ( true === $this->field['background-clip'] ) {
149
-				$array = array(
150
-					'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
151
-					'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
152
-					'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
153
-					'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
154
-				);
155
-
156
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-clip-select" data-placeholder="' . esc_html__( 'Background Clip', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-clip]" class="redux-select-item redux-background-input redux-background-clip ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
157
-				echo '<option></option>';
158
-
159
-				foreach ( $array as $k => $v ) {
160
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-clip'], $k, false ) . '>' . esc_html( $v ) . '</option>';
161
-				}
162
-
163
-				echo '</select>';
164
-			}
165
-
166
-			if ( true === $this->field['background-origin'] ) {
167
-				$array = array(
168
-					'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
169
-					'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
170
-					'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
171
-					'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
172
-				);
173
-
174
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-origin-select" data-placeholder="' . esc_html__( 'Background Origin', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-origin]" class="redux-select-item redux-background-input redux-background-origin ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
175
-				echo '<option></option>';
176
-
177
-				foreach ( $array as $k => $v ) {
178
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-origin'], $k, false ) . '>' . esc_html( $v ) . '</option>';
179
-				}
180
-
181
-				echo '</select>';
182
-			}
183
-
184
-			if ( true === $this->field['background-size'] ) {
185
-				$array = array(
186
-					'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
187
-					'cover'   => esc_html__( 'Cover', 'redux-framework' ),
188
-					'contain' => esc_html__( 'Contain', 'redux-framework' ),
189
-				);
190
-
191
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-size-select" data-placeholder="' . esc_html__( 'Background Size', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-size]" class="redux-select-item redux-background-input redux-background-size ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
192
-				echo '<option></option>';
193
-
194
-				foreach ( $array as $k => $v ) {
195
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-size'], $k, false ) . '>' . esc_html( $v ) . '</option>';
196
-				}
197
-
198
-				echo '</select>';
199
-			}
200
-
201
-			if ( true === $this->field['background-attachment'] ) {
202
-				$array = array(
203
-					'fixed'   => esc_html__( 'Fixed', 'redux-framework' ),
204
-					'scroll'  => esc_html__( 'Scroll', 'redux-framework' ),
205
-					'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
206
-				);
207
-
208
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-attachment-select" data-placeholder="' . esc_html__( 'Background Attachment', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-attachment]" class="redux-select-item redux-background-input redux-background-attachment ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
209
-				echo '<option></option>';
210
-
211
-				foreach ( $array as $k => $v ) {
212
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-attachment'], $k, false ) . '>' . esc_html( $v ) . '</option>';
213
-				}
214
-
215
-				echo '</select>';
216
-			}
217
-
218
-			if ( true === $this->field['background-position'] ) {
219
-				$array = array(
220
-					'left top'      => esc_html__( 'Left Top', 'redux-framework' ),
221
-					'left center'   => esc_html__( 'Left center', 'redux-framework' ),
222
-					'left bottom'   => esc_html__( 'Left Bottom', 'redux-framework' ),
223
-					'center top'    => esc_html__( 'Center Top', 'redux-framework' ),
224
-					'center center' => esc_html__( 'Center Center', 'redux-framework' ),
225
-					'center bottom' => esc_html__( 'Center Bottom', 'redux-framework' ),
226
-					'right top'     => esc_html__( 'Right Top', 'redux-framework' ),
227
-					'right center'  => esc_html__( 'Right center', 'redux-framework' ),
228
-					'right bottom'  => esc_html__( 'Right Bottom', 'redux-framework' ),
229
-				);
230
-
231
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-position-select" data-placeholder="' . esc_html__( 'Background Position', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-position]" class="redux-select-item redux-background-input redux-background-position ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
232
-				echo '<option></option>';
233
-
234
-				foreach ( $array as $k => $v ) {
235
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-position'], $k, false ) . '>' . esc_html( $v ) . '</option>';
236
-				}
237
-
238
-				echo '</select>';
239
-			}
240
-
241
-			if ( $this->field['background-image'] ) {
242
-				echo '<br />';
243
-
244
-				if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) {
245
-					if ( is_array( $this->field['default'] ) ) {
246
-						if ( ! empty( $this->field['default']['media']['id'] ) ) {
247
-							$this->value['media']['id'] = $this->field['default']['media']['id'];
248
-						} elseif ( ! empty( $this->field['default']['id'] ) ) {
249
-							$this->value['media']['id'] = $this->field['default']['id'];
250
-						}
251
-
252
-						if ( ! empty( $this->field['default']['url'] ) ) {
253
-							$this->value['background-image'] = $this->field['default']['url'];
254
-						} elseif ( ! empty( $this->field['default']['media']['url'] ) ) {
255
-							$this->value['background-image'] = $this->field['default']['media']['url'];
256
-						} elseif ( ! empty( $this->field['default']['background-image'] ) ) {
257
-							$this->value['background-image'] = $this->field['default']['background-image'];
258
-						}
259
-					} elseif ( is_numeric( $this->field['default'] ) ) {
260
-						// Check if it's an attachment ID.
261
-							$this->value['media']['id'] = $this->field['default'];
262
-					} else { // Must be a URL.
263
-						$this->value['background-image'] = $this->field['default'];
264
-					}
265
-				}
266
-
267
-				if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) {
268
-					$img                             = wp_get_attachment_image_src( $this->value['media']['id'], 'full' );
269
-					$this->value['background-image'] = $img[0];
270
-					$this->value['media']['width']   = $img[1];
271
-					$this->value['media']['height']  = $img[2];
272
-				}
273
-
274
-				$hide = 'hide ';
275
-
276
-				if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) ) {
277
-					$this->field['class'] .= ' noPreview';
278
-				}
279
-
280
-				if ( ( ! empty( $this->field['background-image'] ) && true === $this->field['background-image'] ) || ( isset( $this->field['preview'] ) && false === $this->field['preview'] ) ) {
281
-					$hide = '';
282
-				}
283
-
284
-				$placeholder = $this->field['placeholder'] ?? esc_html__( 'No media selected', 'redux-framework' );
285
-
286
-				echo '<input placeholder="' . esc_html( $placeholder ) . '" type="text" class="redux-background-input ' . esc_attr( $hide ) . 'upload ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-image]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][background-image]" value="' . esc_url( $this->value['background-image'] ) . '" />';
287
-				echo '<input type="hidden" class="upload-id ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][id]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][id]" value="' . esc_attr( $this->value['media']['id'] ) . '" />';
288
-				echo '<input type="hidden" class="upload-height" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][height]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][height]" value="' . esc_attr( $this->value['media']['height'] ) . '" />';
289
-				echo '<input type="hidden" class="upload-width" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][width]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][width]" value="' . esc_attr( $this->value['media']['width'] ) . '" />';
290
-				echo '<input type="hidden" class="upload-thumbnail" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][thumbnail]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][thumbnail]" value="' . esc_url( $this->value['media']['thumbnail'] ) . '" />';
291
-
292
-				// Preview.
293
-				$hide = '';
294
-
295
-				if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) || empty( $this->value['background-image'] ) ) {
296
-					$hide = 'hide ';
297
-				}
298
-
299
-				if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case.
300
-					if ( ! empty( $this->value['media']['id'] ) ) {
301
-						$image = wp_get_attachment_image_src(
302
-							$this->value['media']['id'],
303
-							array(
304
-								150,
305
-								150,
306
-							)
307
-						);
308
-
309
-						$this->value['media']['thumbnail'] = $image[0];
310
-					} else {
311
-						$this->value['media']['thumbnail'] = $this->value['background-image'];
312
-					}
313
-				}
314
-
315
-				echo '<div class="' . esc_attr( $hide ) . 'screenshot">';
316
-				echo '<a class="of-uploaded-image" href="' . esc_url( $this->value['background-image'] ) . '" target="_blank">';
317
-
318
-				$alt = wp_prepare_attachment_for_js( $this->value['media']['id'] );
319
-				$alt = $alt['alt'] ?? '';
320
-
321
-				echo '<img class="redux-option-image" id="image_' . esc_attr( $this->value['media']['id'] ) . '" src="' . esc_url( $this->value['media']['thumbnail'] ) . '" alt="' . esc_attr( $alt ) . '" target="_blank" rel="external" />';
322
-				echo '</a>';
323
-				echo '</div>';
324
-
325
-				// Upload controls DIV.
326
-				echo '<div class="upload_button_div">';
327
-
328
-				// If the user has WP3.5+ show upload/remove button.
329
-				echo '<span class="button redux-background-upload" id="' . esc_attr( $this->field['id'] ) . '-media">' . esc_html__( 'Upload', 'redux-framework' ) . '</span>';
330
-
331
-				$hide = '';
332
-				if ( empty( $this->value['background-image'] ) || '' === $this->value['background-image'] ) {
333
-					$hide = ' hide';
334
-				}
335
-
336
-				echo '<span class="button removeCSS redux-remove-background' . esc_attr( $hide ) . '" id="reset_' . esc_attr( $this->field['id'] ) . '" rel="' . esc_attr( $this->field['id'] ) . '">' . esc_html__( 'Remove', 'redux-framework' ) . '</span>';
337
-
338
-				echo '</div>';
339
-			}
340
-
341
-			/**
342
-			 * Preview
343
-			 * */
344
-			if ( ! isset( $this->field['preview'] ) || false !== $this->field['preview'] ) {
345
-				$css = $this->css_style( $this->value );
346
-
347
-				$is_bg = strpos( $css, 'background-image' );
348
-
349
-				if ( empty( $css ) || ! $is_bg ) {
350
-					$css = 'display:none;';
351
-				}
352
-
353
-				$css .= 'height: ' . esc_attr( $this->field['preview_height'] ) . ';';
354
-				echo '<p class="clear ' . esc_attr( $this->field['id'] ) . '_previewer background-preview" style="' . esc_attr( $css ) . '">&nbsp;</p>';
355
-			}
356
-		}
357
-
358
-		/**
359
-		 * Enqueue Function.
360
-		 * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
361
-		 *
362
-		 * @since       1.0.0
363
-		 * @access      public
364
-		 * @return      void
365
-		 */
366
-		public function enqueue() {
367
-			if ( function_exists( 'wp_enqueue_media' ) ) {
368
-				wp_enqueue_media();
369
-			} elseif ( ! wp_script_is( 'media-upload' ) ) {
370
-				wp_enqueue_script( 'media-upload' );
371
-			}
372
-
373
-			if ( ! wp_style_is( 'select2-css' ) ) {
374
-				wp_enqueue_style( 'select2-css' );
375
-			}
376
-
377
-			if ( ! wp_style_is( 'wp-color-picker' ) ) {
378
-				wp_enqueue_style( 'wp-color-picker' );
379
-			}
380
-
381
-			$dep_array = array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' );
382
-
383
-			wp_enqueue_script(
384
-				'redux-field-background',
385
-				Redux_Core::$url . 'inc/fields/background/redux-background' . Redux_Functions::is_min() . '.js',
386
-				$dep_array,
387
-				$this->timestamp,
388
-				true
389
-			);
390
-
391
-			if ( $this->parent->args['dev_mode'] ) {
392
-				wp_enqueue_style(
393
-					'redux-field-background',
394
-					Redux_Core::$url . 'inc/fields/background/redux-background.css',
395
-					array(),
396
-					$this->timestamp
397
-				);
398
-
399
-				wp_enqueue_style( 'redux-color-picker' );
400
-			}
401
-		}
402
-
403
-		/**
404
-		 * Output CSS styling.
405
-		 *
406
-		 * @param array $data Value array.
407
-		 *
408
-		 * @return string
409
-		 */
410
-		public function css_style( $data = array() ): string {
411
-			$css = '';
412
-
413
-			if ( ! empty( $data ) && is_array( $data ) ) {
414
-				foreach ( $data as $key => $val ) {
415
-					if ( ! empty( $val ) && 'media' !== $key ) {
416
-						if ( 'background-image' === $key ) {
417
-							$css .= $key . ":url('" . esc_url( $val ) . "');";
418
-						} else {
419
-							$css .= $key . ':' . esc_attr( $val ) . ';';
420
-						}
421
-					}
422
-				}
423
-			}
424
-
425
-			return $css;
426
-		}
427
-
428
-		/**
429
-		 * Enable output_variables to be generated.
430
-		 *
431
-		 * @since       4.0.3
432
-		 * @return void
433
-		 */
434
-		public function output_variables() {
435
-			// No code needed, just defining the method is enough.
436
-		}
437
-	}
15
+    /**
16
+     * Main Redux_background class
17
+     *
18
+     * @since       3.1.5
19
+     */
20
+    class Redux_Background extends Redux_Field {
21
+
22
+        /**
23
+         * Set field and value defaults.
24
+         */
25
+        public function set_defaults() {
26
+            $defaults = array(
27
+                'background-color'      => true,
28
+                'background-repeat'     => true,
29
+                'background-attachment' => true,
30
+                'background-position'   => true,
31
+                'background-image'      => true,
32
+                'background-gradient'   => false,
33
+                'background-clip'       => false,
34
+                'background-origin'     => false,
35
+                'background-size'       => true,
36
+                'preview_media'         => false,
37
+                'preview'               => true,
38
+                'preview_height'        => '200px',
39
+                'transparent'           => true,
40
+            );
41
+
42
+            $this->field = wp_parse_args( $this->field, $defaults );
43
+
44
+            // No errors please.
45
+            $defaults = array(
46
+                'background-color'      => '',
47
+                'background-repeat'     => '',
48
+                'background-attachment' => '',
49
+                'background-position'   => '',
50
+                'background-image'      => '',
51
+                'background-clip'       => '',
52
+                'background-origin'     => '',
53
+                'background-size'       => '',
54
+                'media'                 => array(),
55
+            );
56
+
57
+            $this->value = wp_parse_args( $this->value, $defaults );
58
+
59
+            $defaults = array(
60
+                'id'        => '',
61
+                'width'     => '',
62
+                'height'    => '',
63
+                'thumbnail' => '',
64
+            );
65
+
66
+            $this->value['media'] = wp_parse_args( $this->value['media'], $defaults );
67
+        }
68
+
69
+        /**
70
+         * Field Render Function.
71
+         * Takes the vars and outputs the HTML for the field in the settings
72
+         *
73
+         * @since       1.0.0
74
+         * @access      public
75
+         * @return      void
76
+         */
77
+        public function render() {
78
+            $this->select2_config['allowClear'] = true;
79
+
80
+            if ( isset( $this->field['select2'] ) ) {
81
+                $this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
82
+            } else {
83
+                $this->field['select2'] = $this->select2_config;
84
+            }
85
+
86
+            $this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
87
+
88
+            $select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
89
+
90
+            if ( true === $this->field['background-color'] ) {
91
+                if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) {
92
+                    $this->value['background-color'] = $this->value['color'];
93
+                }
94
+
95
+                $def_bg_color = $this->field['default']['background-color'] ?? '';
96
+
97
+                echo '<input ';
98
+                echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
99
+                echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-color]"';
100
+                echo 'id="' . esc_attr( $this->field['id'] ) . '-color"';
101
+                echo 'class="color-picker redux-color redux-background-input redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
102
+                echo 'type="text" value="' . esc_attr( $this->value['background-color'] ) . '"';
103
+                echo 'data-default-color="' . esc_attr( $def_bg_color ) . '"';
104
+
105
+                $data = array(
106
+                    'field' => $this->field,
107
+                    'index' => 'color',
108
+                );
109
+
110
+                echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
111
+
112
+                echo '>';
113
+
114
+                echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-saved-color" value="">';
115
+
116
+                if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
117
+                    $is_checked = '';
118
+                    if ( 'transparent' === $this->value['background-color'] ) {
119
+                        $is_checked = ' checked="checked"';
120
+                    }
121
+                    echo '<label for="' . esc_attr( $this->field['id'] ) . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency redux-background-input ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-color" value="1" ' . esc_html( $is_checked ) . '> ' . esc_html__( 'Transparent', 'redux-framework' ) . '</label>';
122
+                }
123
+
124
+                if ( true === $this->field['background-repeat'] || true === $this->field['background-position'] || true === $this->field['background-attachment'] ) {
125
+                    echo '<br />';
126
+                }
127
+            }
128
+
129
+            if ( true === $this->field['background-repeat'] ) {
130
+                $array = array(
131
+                    'no-repeat' => esc_html__( 'No Repeat', 'redux-framework' ),
132
+                    'repeat'    => esc_html__( 'Repeat All', 'redux-framework' ),
133
+                    'repeat-x'  => esc_html__( 'Repeat Horizontally', 'redux-framework' ),
134
+                    'repeat-y'  => esc_html__( 'Repeat Vertically', 'redux-framework' ),
135
+                    'inherit'   => esc_html__( 'Inherit', 'redux-framework' ),
136
+                );
137
+
138
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-repeat-select" data-placeholder="' . esc_html__( 'Background Repeat', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-repeat]" class="redux-select-item redux-background-input redux-background-repeat ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
139
+                echo '<option></option>';
140
+
141
+                foreach ( $array as $k => $v ) {
142
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-repeat'], $k, false ) . '>' . esc_html( $v ) . '</option>';
143
+                }
144
+
145
+                echo '</select>';
146
+            }
147
+
148
+            if ( true === $this->field['background-clip'] ) {
149
+                $array = array(
150
+                    'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
151
+                    'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
152
+                    'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
153
+                    'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
154
+                );
155
+
156
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-clip-select" data-placeholder="' . esc_html__( 'Background Clip', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-clip]" class="redux-select-item redux-background-input redux-background-clip ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
157
+                echo '<option></option>';
158
+
159
+                foreach ( $array as $k => $v ) {
160
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-clip'], $k, false ) . '>' . esc_html( $v ) . '</option>';
161
+                }
162
+
163
+                echo '</select>';
164
+            }
165
+
166
+            if ( true === $this->field['background-origin'] ) {
167
+                $array = array(
168
+                    'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
169
+                    'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
170
+                    'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
171
+                    'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
172
+                );
173
+
174
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-origin-select" data-placeholder="' . esc_html__( 'Background Origin', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-origin]" class="redux-select-item redux-background-input redux-background-origin ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
175
+                echo '<option></option>';
176
+
177
+                foreach ( $array as $k => $v ) {
178
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-origin'], $k, false ) . '>' . esc_html( $v ) . '</option>';
179
+                }
180
+
181
+                echo '</select>';
182
+            }
183
+
184
+            if ( true === $this->field['background-size'] ) {
185
+                $array = array(
186
+                    'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
187
+                    'cover'   => esc_html__( 'Cover', 'redux-framework' ),
188
+                    'contain' => esc_html__( 'Contain', 'redux-framework' ),
189
+                );
190
+
191
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-size-select" data-placeholder="' . esc_html__( 'Background Size', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-size]" class="redux-select-item redux-background-input redux-background-size ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
192
+                echo '<option></option>';
193
+
194
+                foreach ( $array as $k => $v ) {
195
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-size'], $k, false ) . '>' . esc_html( $v ) . '</option>';
196
+                }
197
+
198
+                echo '</select>';
199
+            }
200
+
201
+            if ( true === $this->field['background-attachment'] ) {
202
+                $array = array(
203
+                    'fixed'   => esc_html__( 'Fixed', 'redux-framework' ),
204
+                    'scroll'  => esc_html__( 'Scroll', 'redux-framework' ),
205
+                    'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
206
+                );
207
+
208
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-attachment-select" data-placeholder="' . esc_html__( 'Background Attachment', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-attachment]" class="redux-select-item redux-background-input redux-background-attachment ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
209
+                echo '<option></option>';
210
+
211
+                foreach ( $array as $k => $v ) {
212
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-attachment'], $k, false ) . '>' . esc_html( $v ) . '</option>';
213
+                }
214
+
215
+                echo '</select>';
216
+            }
217
+
218
+            if ( true === $this->field['background-position'] ) {
219
+                $array = array(
220
+                    'left top'      => esc_html__( 'Left Top', 'redux-framework' ),
221
+                    'left center'   => esc_html__( 'Left center', 'redux-framework' ),
222
+                    'left bottom'   => esc_html__( 'Left Bottom', 'redux-framework' ),
223
+                    'center top'    => esc_html__( 'Center Top', 'redux-framework' ),
224
+                    'center center' => esc_html__( 'Center Center', 'redux-framework' ),
225
+                    'center bottom' => esc_html__( 'Center Bottom', 'redux-framework' ),
226
+                    'right top'     => esc_html__( 'Right Top', 'redux-framework' ),
227
+                    'right center'  => esc_html__( 'Right center', 'redux-framework' ),
228
+                    'right bottom'  => esc_html__( 'Right Bottom', 'redux-framework' ),
229
+                );
230
+
231
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-position-select" data-placeholder="' . esc_html__( 'Background Position', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-position]" class="redux-select-item redux-background-input redux-background-position ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
232
+                echo '<option></option>';
233
+
234
+                foreach ( $array as $k => $v ) {
235
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-position'], $k, false ) . '>' . esc_html( $v ) . '</option>';
236
+                }
237
+
238
+                echo '</select>';
239
+            }
240
+
241
+            if ( $this->field['background-image'] ) {
242
+                echo '<br />';
243
+
244
+                if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) {
245
+                    if ( is_array( $this->field['default'] ) ) {
246
+                        if ( ! empty( $this->field['default']['media']['id'] ) ) {
247
+                            $this->value['media']['id'] = $this->field['default']['media']['id'];
248
+                        } elseif ( ! empty( $this->field['default']['id'] ) ) {
249
+                            $this->value['media']['id'] = $this->field['default']['id'];
250
+                        }
251
+
252
+                        if ( ! empty( $this->field['default']['url'] ) ) {
253
+                            $this->value['background-image'] = $this->field['default']['url'];
254
+                        } elseif ( ! empty( $this->field['default']['media']['url'] ) ) {
255
+                            $this->value['background-image'] = $this->field['default']['media']['url'];
256
+                        } elseif ( ! empty( $this->field['default']['background-image'] ) ) {
257
+                            $this->value['background-image'] = $this->field['default']['background-image'];
258
+                        }
259
+                    } elseif ( is_numeric( $this->field['default'] ) ) {
260
+                        // Check if it's an attachment ID.
261
+                            $this->value['media']['id'] = $this->field['default'];
262
+                    } else { // Must be a URL.
263
+                        $this->value['background-image'] = $this->field['default'];
264
+                    }
265
+                }
266
+
267
+                if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) {
268
+                    $img                             = wp_get_attachment_image_src( $this->value['media']['id'], 'full' );
269
+                    $this->value['background-image'] = $img[0];
270
+                    $this->value['media']['width']   = $img[1];
271
+                    $this->value['media']['height']  = $img[2];
272
+                }
273
+
274
+                $hide = 'hide ';
275
+
276
+                if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) ) {
277
+                    $this->field['class'] .= ' noPreview';
278
+                }
279
+
280
+                if ( ( ! empty( $this->field['background-image'] ) && true === $this->field['background-image'] ) || ( isset( $this->field['preview'] ) && false === $this->field['preview'] ) ) {
281
+                    $hide = '';
282
+                }
283
+
284
+                $placeholder = $this->field['placeholder'] ?? esc_html__( 'No media selected', 'redux-framework' );
285
+
286
+                echo '<input placeholder="' . esc_html( $placeholder ) . '" type="text" class="redux-background-input ' . esc_attr( $hide ) . 'upload ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-image]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][background-image]" value="' . esc_url( $this->value['background-image'] ) . '" />';
287
+                echo '<input type="hidden" class="upload-id ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][id]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][id]" value="' . esc_attr( $this->value['media']['id'] ) . '" />';
288
+                echo '<input type="hidden" class="upload-height" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][height]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][height]" value="' . esc_attr( $this->value['media']['height'] ) . '" />';
289
+                echo '<input type="hidden" class="upload-width" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][width]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][width]" value="' . esc_attr( $this->value['media']['width'] ) . '" />';
290
+                echo '<input type="hidden" class="upload-thumbnail" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][thumbnail]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][thumbnail]" value="' . esc_url( $this->value['media']['thumbnail'] ) . '" />';
291
+
292
+                // Preview.
293
+                $hide = '';
294
+
295
+                if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) || empty( $this->value['background-image'] ) ) {
296
+                    $hide = 'hide ';
297
+                }
298
+
299
+                if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case.
300
+                    if ( ! empty( $this->value['media']['id'] ) ) {
301
+                        $image = wp_get_attachment_image_src(
302
+                            $this->value['media']['id'],
303
+                            array(
304
+                                150,
305
+                                150,
306
+                            )
307
+                        );
308
+
309
+                        $this->value['media']['thumbnail'] = $image[0];
310
+                    } else {
311
+                        $this->value['media']['thumbnail'] = $this->value['background-image'];
312
+                    }
313
+                }
314
+
315
+                echo '<div class="' . esc_attr( $hide ) . 'screenshot">';
316
+                echo '<a class="of-uploaded-image" href="' . esc_url( $this->value['background-image'] ) . '" target="_blank">';
317
+
318
+                $alt = wp_prepare_attachment_for_js( $this->value['media']['id'] );
319
+                $alt = $alt['alt'] ?? '';
320
+
321
+                echo '<img class="redux-option-image" id="image_' . esc_attr( $this->value['media']['id'] ) . '" src="' . esc_url( $this->value['media']['thumbnail'] ) . '" alt="' . esc_attr( $alt ) . '" target="_blank" rel="external" />';
322
+                echo '</a>';
323
+                echo '</div>';
324
+
325
+                // Upload controls DIV.
326
+                echo '<div class="upload_button_div">';
327
+
328
+                // If the user has WP3.5+ show upload/remove button.
329
+                echo '<span class="button redux-background-upload" id="' . esc_attr( $this->field['id'] ) . '-media">' . esc_html__( 'Upload', 'redux-framework' ) . '</span>';
330
+
331
+                $hide = '';
332
+                if ( empty( $this->value['background-image'] ) || '' === $this->value['background-image'] ) {
333
+                    $hide = ' hide';
334
+                }
335
+
336
+                echo '<span class="button removeCSS redux-remove-background' . esc_attr( $hide ) . '" id="reset_' . esc_attr( $this->field['id'] ) . '" rel="' . esc_attr( $this->field['id'] ) . '">' . esc_html__( 'Remove', 'redux-framework' ) . '</span>';
337
+
338
+                echo '</div>';
339
+            }
340
+
341
+            /**
342
+             * Preview
343
+             * */
344
+            if ( ! isset( $this->field['preview'] ) || false !== $this->field['preview'] ) {
345
+                $css = $this->css_style( $this->value );
346
+
347
+                $is_bg = strpos( $css, 'background-image' );
348
+
349
+                if ( empty( $css ) || ! $is_bg ) {
350
+                    $css = 'display:none;';
351
+                }
352
+
353
+                $css .= 'height: ' . esc_attr( $this->field['preview_height'] ) . ';';
354
+                echo '<p class="clear ' . esc_attr( $this->field['id'] ) . '_previewer background-preview" style="' . esc_attr( $css ) . '">&nbsp;</p>';
355
+            }
356
+        }
357
+
358
+        /**
359
+         * Enqueue Function.
360
+         * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
361
+         *
362
+         * @since       1.0.0
363
+         * @access      public
364
+         * @return      void
365
+         */
366
+        public function enqueue() {
367
+            if ( function_exists( 'wp_enqueue_media' ) ) {
368
+                wp_enqueue_media();
369
+            } elseif ( ! wp_script_is( 'media-upload' ) ) {
370
+                wp_enqueue_script( 'media-upload' );
371
+            }
372
+
373
+            if ( ! wp_style_is( 'select2-css' ) ) {
374
+                wp_enqueue_style( 'select2-css' );
375
+            }
376
+
377
+            if ( ! wp_style_is( 'wp-color-picker' ) ) {
378
+                wp_enqueue_style( 'wp-color-picker' );
379
+            }
380
+
381
+            $dep_array = array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' );
382
+
383
+            wp_enqueue_script(
384
+                'redux-field-background',
385
+                Redux_Core::$url . 'inc/fields/background/redux-background' . Redux_Functions::is_min() . '.js',
386
+                $dep_array,
387
+                $this->timestamp,
388
+                true
389
+            );
390
+
391
+            if ( $this->parent->args['dev_mode'] ) {
392
+                wp_enqueue_style(
393
+                    'redux-field-background',
394
+                    Redux_Core::$url . 'inc/fields/background/redux-background.css',
395
+                    array(),
396
+                    $this->timestamp
397
+                );
398
+
399
+                wp_enqueue_style( 'redux-color-picker' );
400
+            }
401
+        }
402
+
403
+        /**
404
+         * Output CSS styling.
405
+         *
406
+         * @param array $data Value array.
407
+         *
408
+         * @return string
409
+         */
410
+        public function css_style( $data = array() ): string {
411
+            $css = '';
412
+
413
+            if ( ! empty( $data ) && is_array( $data ) ) {
414
+                foreach ( $data as $key => $val ) {
415
+                    if ( ! empty( $val ) && 'media' !== $key ) {
416
+                        if ( 'background-image' === $key ) {
417
+                            $css .= $key . ":url('" . esc_url( $val ) . "');";
418
+                        } else {
419
+                            $css .= $key . ':' . esc_attr( $val ) . ';';
420
+                        }
421
+                    }
422
+                }
423
+            }
424
+
425
+            return $css;
426
+        }
427
+
428
+        /**
429
+         * Enable output_variables to be generated.
430
+         *
431
+         * @since       4.0.3
432
+         * @return void
433
+         */
434
+        public function output_variables() {
435
+            // No code needed, just defining the method is enough.
436
+        }
437
+    }
438 438
 }
439 439
 
440 440
 class_alias( 'Redux_Background', 'ReduxFramework_Background' );
Please login to merge, or discard this patch.
color_scheme/color_scheme/inc/class-redux-color-scheme-functions.php 2 patches
Spacing   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
 		 *
43 43
 		 * @var array|null
44 44
 		 */
45
-		public static ?array $field;
45
+		public static ? array $field;
46 46
 
47 47
 		/**
48 48
 		 * WP Upload directory.
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
 		 *
64 64
 		 * @var array|null
65 65
 		 */
66
-		public static ?array $select;
66
+		public static ? array $select;
67 67
 
68 68
 		/**
69 69
 		 * Class init.
@@ -399,8 +399,8 @@  discard block
 block discarded – undo
399 399
 				$html .= '<select name="' . self::$parent->args['opt_name'] . '[' . self::$field_id . '][' . $id . ']" id="redux-color-scheme-opt-select-' . $id . '"' . $width . ' class="redux-color-scheme-opt-select">';
400 400
 
401 401
 				foreach ( $v['options'] as $opt_id => $opt_val ) {
402
-					$data[ $id ]['value'] = $data[ $id ]['value'] ?? '';
403
-					$html                .= '<option value="' . $opt_id . '" ' . selected( $opt_id, $data[ $id ]['value'], false ) . '>' . $opt_val . '</option>';
402
+					$data[$id]['value'] = $data[$id]['value'] ?? '';
403
+					$html                .= '<option value="' . $opt_id . '" ' . selected( $opt_id, $data[$id]['value'], false ) . '>' . $opt_val . '</option>';
404 404
 				}
405 405
 
406 406
 				$html .= '</select>';
@@ -545,7 +545,7 @@  discard block
 block discarded – undo
545 545
 						$val['rgba']  = $val['rgba'] ?? $res;
546 546
 						$val['group'] = $val['group'] ?? '';
547 547
 
548
-						$scheme[ $val['id'] ] = $val;
548
+						$scheme[$val['id']] = $val;
549 549
 					}
550 550
 				}
551 551
 
@@ -579,9 +579,9 @@  discard block
 block discarded – undo
579 579
 					foreach ( self::$select as $sel_arr ) {
580 580
 						$sel_grp = $sel_arr['group'];
581 581
 						if ( ! array_key_exists( $sel_grp, $sel_grps ) ) {
582
-							$sel_grps[ $sel_grp ] = array();
582
+							$sel_grps[$sel_grp] = array();
583 583
 						}
584
-						$sel_grps[ $sel_grp ][] = $sel_arr;
584
+						$sel_grps[$sel_grp][] = $sel_arr;
585 585
 					}
586 586
 				}
587 587
 
@@ -589,19 +589,19 @@  discard block
 block discarded – undo
589 589
 				$group_arr = self::get_group_names();
590 590
 
591 591
 				foreach ( $group_arr as $group_name => $description ) {
592
-					$groups[ $group_name ] = array();
592
+					$groups[$group_name] = array();
593 593
 
594 594
 					if ( is_array( $description ) ) {
595
-						$grp_desc[ $group_name ]           = $description['desc'] ?? '';
596
-						$grp_grpdesc[ $group_name ]        = $description['group_desc'] ?? '';
597
-						$grp_hidden[ $group_name ]         = $description['hidden'] ?? false;
598
-						$grp_accordion_open[ $group_name ] = $description['accordion_open'] ?? false;
595
+						$grp_desc[$group_name]           = $description['desc'] ?? '';
596
+						$grp_grpdesc[$group_name]        = $description['group_desc'] ?? '';
597
+						$grp_hidden[$group_name]         = $description['hidden'] ?? false;
598
+						$grp_accordion_open[$group_name] = $description['accordion_open'] ?? false;
599 599
 
600 600
 					} else {
601
-						$grp_desc[ $group_name ]           = $description;
602
-						$grp_hidden[ $group_name ]         = false;
603
-						$grp_accordion_open[ $group_name ] = false;
604
-						$grp_grpdesc[ $group_name ]        = false;
601
+						$grp_desc[$group_name]           = $description;
602
+						$grp_hidden[$group_name]         = false;
603
+						$grp_accordion_open[$group_name] = false;
604
+						$grp_grpdesc[$group_name]        = false;
605 605
 					}
606 606
 				}
607 607
 
@@ -610,7 +610,7 @@  discard block
 block discarded – undo
610 610
 					if ( is_array( $arr ) ) {
611 611
 						if ( ! empty( $arr['group'] ) ) {
612 612
 							if ( array_key_exists( $arr['group'], $group_arr ) ) {
613
-								$groups[ $arr['group'] ][] = $arr;
613
+								$groups[$arr['group']][] = $arr;
614 614
 							} else {
615 615
 								$groups[''][] = $arr;
616 616
 							}
@@ -656,10 +656,10 @@  discard block
 block discarded – undo
656 656
 					$class_hide = '';
657 657
 					$is_open    = '';
658 658
 
659
-					if ( isset( $grp_hidden[ $title ] ) && '' !== $grp_hidden[ $title ] ) {
660
-						$is_hidden  = $grp_hidden[ $title ];
659
+					if ( isset( $grp_hidden[$title] ) && '' !== $grp_hidden[$title] ) {
660
+						$is_hidden  = $grp_hidden[$title];
661 661
 						$class_hide = ( true === $is_hidden ) ? ' hidden ' : '';
662
-						$is_open    = $grp_accordion_open[ $title ];
662
+						$is_open    = $grp_accordion_open[$title];
663 663
 					}
664 664
 
665 665
 					$add_class = '';
@@ -689,8 +689,8 @@  discard block
 block discarded – undo
689 689
 						}
690 690
 
691 691
 						// apply group description, if any.
692
-						if ( isset( $grp_desc[ $title ] ) && '' !== $grp_desc[ $title ] ) {
693
-							$html  .= '<span class="redux-label redux-layout-group-desc-label' . $icon_class . '">' . esc_attr( $grp_desc[ $title ] ) . '</label>';
692
+						if ( isset( $grp_desc[$title] ) && '' !== $grp_desc[$title] ) {
693
+							$html  .= '<span class="redux-label redux-layout-group-desc-label' . $icon_class . '">' . esc_attr( $grp_desc[$title] ) . '</label>';
694 694
 							$add_hr = true;
695 695
 
696 696
 							if ( $is_accordion ) {
@@ -716,14 +716,14 @@  discard block
 block discarded – undo
716 716
 							$html .= '<div class="redux-color-scheme-accordion-section" data-state="' . esc_attr( $is_open ) . '">';
717 717
 							if ( false !== $grp_grpdesc ) {
718 718
 								$html .= '<div class="redux-color-scheme-group-desc">';
719
-								$html .= esc_attr( $grp_grpdesc[ $title ] );
719
+								$html .= esc_attr( $grp_grpdesc[$title] );
720 720
 								$html .= '</div>';
721 721
 							}
722 722
 						}
723 723
 
724 724
 						// Select box render.
725 725
 						if ( array_key_exists( $title, $sel_grps ) ) {
726
-							$html .= self::render_selects( $sel_grps[ $title ], $scheme );
726
+							$html .= self::render_selects( $sel_grps[$title], $scheme );
727 727
 						}
728 728
 					} elseif ( $is_accordion ) {
729 729
 						$html .= '<div class="redux-color-scheme-accordion-section">';
@@ -798,7 +798,7 @@  discard block
 block discarded – undo
798 798
 								return '';
799 799
 							}
800 800
 
801
-							$picker_data = $scheme_data[ $v['id'] ];
801
+							$picker_data = $scheme_data[$v['id']];
802 802
 
803 803
 							// Hidden input for data string.
804 804
 							$html .= '<input
@@ -962,7 +962,7 @@  discard block
 block discarded – undo
962 962
 				return false;
963 963
 			}
964 964
 
965
-			return $data[ $scheme_name ];
965
+			return $data[$scheme_name];
966 966
 		}
967 967
 
968 968
 		/**
@@ -989,7 +989,7 @@  discard block
 block discarded – undo
989 989
 				// Enum through values and assign them to new array.
990 990
 				foreach ( $arr as $val ) {
991 991
 					if ( isset( $val['id'] ) ) {
992
-						$new_scheme[ $val['id'] ] = $val;
992
+						$new_scheme[$val['id']] = $val;
993 993
 					}
994 994
 				}
995 995
 
@@ -1001,12 +1001,12 @@  discard block
 block discarded – undo
1001 1001
 					$schemes = array();
1002 1002
 				}
1003 1003
 
1004
-				$scheme_data = $schemes[ $name ] ?? '';
1004
+				$scheme_data = $schemes[$name] ?? '';
1005 1005
 
1006 1006
 				if ( $scheme_data !== $new_scheme ) {
1007 1007
 
1008 1008
 					// Add new scheme to array that will be saved.
1009
-					$schemes[ $name ] = $new_scheme;
1009
+					$schemes[$name] = $new_scheme;
1010 1010
 
1011 1011
 					// Write the data to the JSON file.
1012 1012
 					return self::write_scheme_file( $schemes );
@@ -1076,9 +1076,9 @@  discard block
 block discarded – undo
1076 1076
 					if ( isset( $v['type'] ) ) {
1077 1077
 						$val = $v['value'];
1078 1078
 
1079
-						unset( $data[ $k ] );
1079
+						unset( $data[$k] );
1080 1080
 
1081
-						$data[ $k ] = $val;
1081
+						$data[$k] = $val;
1082 1082
 					}
1083 1083
 				}
1084 1084
 			}
@@ -1111,7 +1111,7 @@  discard block
 block discarded – undo
1111 1111
 			}
1112 1112
 
1113 1113
 			// Append ID to variable that holds the current scheme ID data.
1114
-			$redux_options[ self::$field_id ] = $data;
1114
+			$redux_options[self::$field_id] = $data;
1115 1115
 
1116 1116
 			// Save the modified settings.
1117 1117
 			update_option( $opt_name, $redux_options );
Please login to merge, or discard this patch.
Indentation   +1082 added lines, -1082 removed lines patch added patch discarded remove patch
@@ -11,773 +11,773 @@  discard block
 block discarded – undo
11 11
 defined( 'ABSPATH' ) || exit;
12 12
 
13 13
 if ( ! class_exists( 'Redux_Color_Scheme_Functions' ) ) {
14
-	/**
15
-	 * Class Redux_Color_Scheme_Functions
16
-	 */
17
-	class Redux_Color_Scheme_Functions {
18
-
19
-		/**
20
-		 * ReduxFramework object.
21
-		 *
22
-		 * @var null|ReduxFramework
23
-		 */
24
-		public static ?ReduxFramework $parent;
25
-
26
-		/**
27
-		 * Field ID
28
-		 *
29
-		 * @var string|null
30
-		 */
31
-		public static ?string $field_id;
32
-
33
-		/**
34
-		 * Field class.
35
-		 *
36
-		 * @var string|null
37
-		 */
38
-		public static ?string $field_class;
39
-
40
-		/**
41
-		 * Field array.
42
-		 *
43
-		 * @var array|null
44
-		 */
45
-		public static ?array $field;
46
-
47
-		/**
48
-		 * WP Upload directory.
49
-		 *
50
-		 * @var string|null
51
-		 */
52
-		public static ?string $upload_dir = '';
53
-
54
-		/**
55
-		 * WP Upload URI
56
-		 *
57
-		 * @var string|null
58
-		 */
59
-		public static ?string $upload_url = '';
60
-
61
-		/**
62
-		 * Select fields.
63
-		 *
64
-		 * @var array|null
65
-		 */
66
-		public static ?array $select;
67
-
68
-		/**
69
-		 * Class init.
70
-		 *
71
-		 * @param ReduxFramework $redux ReduxFramework object.
72
-		 */
73
-		public static function init( ReduxFramework $redux ) {
74
-			self::$parent = $redux;
75
-
76
-			if ( empty( self::$field_id ) ) {
77
-				self::$field = self::get_field( $redux );
78
-
79
-				if ( ! is_array( self::$field ) ) {
80
-					return;
81
-				}
82
-
83
-				self::$field_id = self::$field['id'];
84
-			}
85
-
86
-			// Make sanitized upload dir DIR.
87
-			self::$upload_dir = Redux_Functions_Ex::wp_normalize_path( ReduxFramework::$_upload_dir . 'color-schemes/' );
88
-
89
-			// Make sanitized upload dir URL.
90
-			self::$upload_url = Redux_Functions_Ex::wp_normalize_path( ReduxFramework::$_upload_url . 'color-schemes/' );
91
-
92
-			Redux_Functions::init_wp_filesystem();
93
-		}
94
-
95
-		/**
96
-		 * Checks if tooltips are in use.
97
-		 *
98
-		 * @param array $field Field array.
99
-		 *
100
-		 * @return bool
101
-		 */
102
-		public static function tooltips_in_use( array $field ): bool {
103
-			$blocks = $field['default'];
104
-
105
-			foreach ( $blocks as $arr ) {
106
-				if ( isset( $arr['tooltip'] ) ) {
107
-					return true;
108
-				}
109
-			}
110
-
111
-			return false;
112
-		}
113
-
114
-		/**
115
-		 * Convert DB values.
116
-		 */
117
-		public static function convert_to_db() {
118
-			$upload_dir = Redux_Functions_Ex::wp_normalize_path( ReduxFramework::$_upload_dir . 'color-schemes/' );
119
-
120
-			$cur_scheme_file = Redux_Functions_Ex::wp_normalize_path( $upload_dir . '/' . self::$parent->args['opt_name'] . '_' . self::$field_id . '.json' );
121
-
122
-			if ( is_dir( $upload_dir ) ) {
123
-				if ( file_exists( $cur_scheme_file ) ) {
124
-					$data = Redux_Core::$filesystem->execute( 'get_contents', $cur_scheme_file );
125
-					if ( ! empty( $data ) ) {
126
-						$data = json_decode( $data, true );
127
-
128
-						update_option( self::get_scheme_key(), $data );
129
-
130
-						Redux_Core::$filesystem->execute( 'delete', $cur_scheme_file );
131
-					}
132
-				}
133
-			}
134
-		}
135
-
136
-		/**
137
-		 * Get scheme key.
138
-		 *
139
-		 * @return string
140
-		 */
141
-		public static function get_scheme_key(): string {
142
-			return 'redux_cs_' . self::$parent->args['opt_name'] . '_' . self::$field_id;
143
-		}
144
-
145
-		/**
146
-		 * Get the list of groups names for the color scheme table.
147
-		 *
148
-		 * @since       2.0.0
149
-		 * @access      public static
150
-		 * @return      array Array of group names.
151
-		 */
152
-		public static function get_group_names(): array {
153
-			if ( empty( self::$field ) ) {
154
-				self::$field = self::get_field();
155
-			}
156
-
157
-			if ( isset( self::$field['groups'] ) ) {
158
-				if ( is_array( self::$field['groups'] ) && ! empty( self::$field['groups'] ) ) {
159
-					return self::$field['groups'];
160
-				}
161
-			}
162
-
163
-			return array();
164
-		}
165
-
166
-		/**
167
-		 * Get output transparent value.
168
-		 *
169
-		 * @return mixed
170
-		 */
171
-		public static function get_output_transparent_val() {
172
-			if ( empty( self::$field ) ) {
173
-				self::$field = self::get_field();
174
-			}
175
-
176
-			if ( isset( self::$field['output_transparent'] ) ) {
177
-				if ( ! empty( self::$field['output_transparent'] ) ) {
178
-					return self::$field['output_transparent'];
179
-				}
180
-			}
181
-
182
-			return false;
183
-		}
184
-
185
-		/**
186
-		 * Get select field name.
187
-		 *
188
-		 * @return array
189
-		 */
190
-		private static function get_select_names(): array {
191
-			if ( empty( self::$field ) ) {
192
-				self::$field = self::get_field();
193
-			}
194
-
195
-			if ( isset( self::$field['select'] ) ) {
196
-				if ( is_array( self::$field['select'] ) && ! empty( self::$field['select'] ) ) {
197
-					return self::$field['select'];
198
-				}
199
-			}
200
-
201
-			return array();
202
-		}
203
-
204
-		/**
205
-		 * Get color scheme field.
206
-		 *
207
-		 * @param ReduxFramework|null $redux pointer.
208
-		 *
209
-		 * @return mixed
210
-		 */
211
-		public static function get_field( ?ReduxFramework $redux = null ) {
212
-			if ( ! is_null( $redux ) ) {
213
-				self::$parent = $redux;
214
-			}
215
-
216
-			if ( isset( $redux->field_sections['color_scheme'] ) ) {
217
-				return reset( $redux->field_sections['color_scheme'] );
218
-			}
219
-
220
-			$arr = self::$parent;
221
-
222
-			foreach ( $arr as $part => $bla ) {
223
-				if ( 'sections' === $part ) {
224
-					foreach ( $bla as $field ) {
225
-						foreach ( $field as $arg => $val ) {
226
-							if ( 'fields' === $arg ) {
227
-								foreach ( $val as $v ) {
228
-									if ( ! empty( $v ) ) {
229
-										foreach ( $v as $id => $x ) {
230
-											if ( 'type' === $id ) {
231
-												if ( 'color_scheme' === $x ) {
232
-													return $v;
233
-												}
234
-											}
235
-										}
236
-									}
237
-								}
238
-							}
239
-						}
240
-					}
241
-				}
242
-			}
243
-
244
-			return null;
245
-		}
246
-
247
-		/**
248
-		 * Output scheme dropdown selector.
249
-		 *
250
-		 * @param       string $selected Selected scheme name.
251
-		 *
252
-		 * @return      string HTML of dropdown selector.
253
-		 * @since       1.0.0
254
-		 * @access      public static
255
-		 */
256
-		public static function get_scheme_select_html( string $selected ): string {
257
-
258
-			$html  = '<select name="' . esc_attr( self::$parent->args['opt_name'] ) . '[redux-scheme-select]" id="redux-scheme-select-' . esc_attr( self::$field_id ) . '" class="redux-scheme-select">';
259
-			$html .= self::get_scheme_list_html( $selected );
260
-			$html .= '</select>';
261
-
262
-			return $html;
263
-		}
264
-
265
-		/**
266
-		 * Set current scheme ID, if one isn't specified.
267
-		 *
268
-		 * @param       string $id Scheme name to set.
269
-		 *
270
-		 * @return      void
271
-		 * @since       1.0.0
272
-		 * @access      public static
273
-		 */
274
-		public static function set_current_scheme_id( string $id ) {
275
-
276
-			// Get opt name, for database.
277
-			$opt_name = self::$parent->args['opt_name'];
278
-
279
-			// Get all options from database.
280
-			$redux_options = get_option( $opt_name, array() );
281
-			if ( ! is_array( $redux_options ) ) {
282
-				$redux_options = array();
283
-			}
284
-			// Append ID to variable that holds the current scheme ID data.
285
-			$redux_options['redux-scheme-select'] = $id;
286
-
287
-			// Save the modified settings.
288
-			update_option( $opt_name, $redux_options );
289
-		}
290
-
291
-		/**
292
-		 * Get tooltip toggle state.
293
-		 *
294
-		 * @return bool
295
-		 */
296
-		public static function get_tooltip_toggle_state(): bool {
297
-
298
-			// Retrieve the opt_name, needed for database.
299
-			$opt_name = self::$parent->args['opt_name'];
300
-
301
-			// Get the entire options array.
302
-			$redux_options = get_option( $opt_name );
303
-
304
-			return $redux_options['redux-color-scheme-tooltip-toggle'] ?? true;
305
-		}
306
-
307
-		/**
308
-		 * Gets the current schem ID from the database.
309
-		 *
310
-		 * @since       1.0.0
311
-		 * @access      public static
312
-		 *
313
-		 * @return      string Current scheme ID.
314
-		 */
315
-		public static function get_current_scheme_id(): string {
316
-
317
-			// Retrieve the opt_name, needed for databasae.
318
-			$opt_name = self::$parent->args['opt_name'];
319
-
320
-			// Get the entire options array.
321
-			$redux_options = get_option( $opt_name );
322
-
323
-			// If the current scheme key exists...
324
-			return $redux_options['redux-scheme-select'] ?? 'Default';
325
-		}
326
-
327
-		/**
328
-		 * Get the list of schemes for the selector.
329
-		 *
330
-		 * @param       string $sel Scheme name to select.
331
-		 *
332
-		 * @return      string HTML option values.
333
-		 * @since       1.0.0
334
-		 * @access      static private
335
-		 */
336
-		private static function get_scheme_list_html( string $sel = '' ): string {
337
-			// no errors, please.
338
-			$html = '';
339
-
340
-			// Retrieves the list of saved schemes into an array variable.
341
-			$dropdown_values = self::get_scheme_names();
342
-
343
-			// If the dropdown array has items...
344
-			if ( ! empty( $dropdown_values ) ) {
345
-
346
-				// Sort them alphbetically.
347
-				asort( $dropdown_values );
348
-			}
349
-
350
-			// trim the selected item.
351
-			$sel = trim( $sel );
352
-
353
-			// If it's empty.
354
-			if ( '' === $sel ) {
355
-
356
-				// Make the current scheme id the selected value.
357
-				$selected = self::get_current_scheme_id();
358
-			} else {
359
-
360
-				// Otherwise, set it to the value passed to this function.
361
-				$selected = $sel;
362
-			}
363
-
364
-			// Enum through the dropdown array and append the necessary HTML for the selector.
365
-			foreach ( $dropdown_values as $k ) {
366
-				$html .= '<option value="' . $k . '" ' . selected( $k, $selected, false ) . '>' . $k . '</option>';
367
-			}
368
-
369
-			// Send it all packin'.
370
-			return $html;
371
-		}
372
-
373
-		/**
374
-		 * Returns select HTML.
375
-		 *
376
-		 * @param array $arr  Array of select fields to render.
377
-		 * @param array $data Array of scheme data.
378
-		 *
379
-		 * @return      string HTML of select fields.
380
-		 * @since       1.0.4
381
-		 * @access      static private
382
-		 */
383
-		private static function render_selects( array $arr, array $data ): string {
384
-
385
-			$html = '';
386
-			foreach ( $arr as $v ) {
387
-				$id = $v['id'];
388
-
389
-				if ( isset( $v['width'] ) && ! empty( $v['width'] ) ) {
390
-					$size = $v['width'];
391
-				} else {
392
-					$size = '40%';
393
-				}
394
-
395
-				$width = ' style="width: ' . $size . ';"';
396
-
397
-				$html .= '<span class="redux-label redux-color-scheme-opt-select-title">' . $v['title'] . '</span>';
398
-
399
-				$html .= '<select name="' . self::$parent->args['opt_name'] . '[' . self::$field_id . '][' . $id . ']" id="redux-color-scheme-opt-select-' . $id . '"' . $width . ' class="redux-color-scheme-opt-select">';
400
-
401
-				foreach ( $v['options'] as $opt_id => $opt_val ) {
402
-					$data[ $id ]['value'] = $data[ $id ]['value'] ?? '';
403
-					$html                .= '<option value="' . $opt_id . '" ' . selected( $opt_id, $data[ $id ]['value'], false ) . '>' . $opt_val . '</option>';
404
-				}
405
-
406
-				$html .= '</select>';
407
-				$html .= '<span class="redux-label redux-color-scheme-opt-select-desc">' . $v['desc'] . '</span>';
408
-				$html .= '<hr class="redux-color-scheme-select-close-hr">';
409
-				$html .= '<br/>';
410
-			}
411
-
412
-			return $html;
413
-		}
414
-
415
-		/**
416
-		 * Do diff.
417
-		 *
418
-		 * @param array $first_array  Array one.
419
-		 * @param array $second_array Array two.
420
-		 *
421
-		 * @return array
422
-		 */
423
-		private static function do_diff( array $first_array, array $second_array ): array {
424
-
425
-			/**
426
-			 * Serialize callback.
427
-			 *
428
-			 * @param array $arr Array.
429
-			 */
430
-			function my_serialize( array &$arr ) {
431
-				$arr = maybe_serialize( $arr );
432
-			}
433
-
434
-			/**
435
-			 * Unserialize callback.
436
-			 *
437
-			 * @param array $arr Array.
438
-			 */
439
-			function my_unserialize( &$arr ) {
440
-				$arr = maybe_unserialize( $arr );
441
-			}
442
-
443
-			// make a copy.
444
-			$first_array_s  = $first_array;
445
-			$second_array_s = $second_array;
446
-
447
-			// serialize all sub-arrays.
448
-			array_walk( $first_array_s, 'my_serialize' );
449
-			array_walk( $second_array_s, 'my_serialize' );
450
-
451
-			// array_diff the serialized versions.
452
-			$diff = array_diff( $first_array_s, $second_array_s );
453
-
454
-			// unserialize the result.
455
-			array_walk( $diff, 'my_unserialize' );
456
-
457
-			// you've got it!
458
-			return $diff;
459
-		}
460
-
461
-		/**
462
-		 * Returns colour pickers HTML table.
463
-		 *
464
-		 * @since       1.0.0
465
-		 * @access      public static
466
-		 *
467
-		 * @param       string $scheme_id Scheme name of HTML to return.
468
-		 *
469
-		 * @return      string HTML of colour picker table.
470
-		 */
471
-		public static function get_current_color_scheme_html( $scheme_id = false ): string {
472
-
473
-			// If scheme_id is false.
474
-			if ( ! $scheme_id ) {
475
-
476
-				// Attempt to get the current scheme.
477
-				$scheme_id = self::get_current_scheme_id();
478
-
479
-				// dummy check, because this shit happens!
480
-				$arr_schemes = self::get_scheme_names();
481
-
482
-				if ( ! in_array( $scheme_id, $arr_schemes, true ) ) {
483
-					$scheme_id = 'Default';
484
-					self::set_current_scheme_id( 'Default' );
485
-				}
486
-			}
487
-
488
-			// Set oft used variables.
489
-			$opt_name    = esc_attr( self::$parent->args['opt_name'] );
490
-			$field_id    = esc_attr( self::$field_id );
491
-			$field_class = esc_attr( self::$field_class );
492
-
493
-			// Get the default options.
494
-			$field = self::get_field();
495
-
496
-			$field['output_transparent'] = $field['output_transparent'] ?? '';
497
-			$is_accordion                = $field['accordion'] ?? true;
498
-
499
-			$def_opts = $field['default'];
500
-
501
-			// Create array of element ids from default options.
502
-			if ( ! empty( $def_opts ) ) {
503
-				$id_arr = array();
504
-
505
-				foreach ( $def_opts as $vv ) {
506
-					$id_arr[] = $vv['id'];
507
-				}
508
-			}
509
-
510
-			// Get last saved default.
511
-			$saved_def = get_option( 'redux_' . $opt_name . '_' . $field_id . '_color_scheme' );
512
-
513
-			// Compare key counts between saved and current defaults to check
514
-			// for changes in color scheme.
515
-			if ( false !== $saved_def && is_array( $saved_def ) ) {
516
-
517
-				// Get the new color inputs.
518
-				$arr_diff = self::do_diff( $def_opts, $saved_def );
519
-
520
-				if ( ! empty( $arr_diff ) ) {
521
-					update_option( 'redux_' . $opt_name . '_' . $field_id . '_color_scheme', $def_opts );
522
-				}                //}
523
-			} else {
524
-				update_option( 'redux_' . $opt_name . '_' . $field_id . '_color_scheme', $def_opts );
525
-			}
526
-
527
-			// get current scheme data.
528
-			$scheme = self::get_scheme_data( $scheme_id );
529
-
530
-			if ( false === $scheme ) {
531
-				return '';
532
-			}
533
-
534
-			// If new color inputs exist...
535
-			if ( ! empty( $arr_diff ) ) {
536
-				foreach ( $arr_diff as $val ) {
537
-					if ( ! empty( $val ) && isset( $val['id'] ) ) {
538
-
539
-						$val['title'] = $val['title'] ?? $val['id'];
540
-						$val['color'] = $val['color'] ?? '';
541
-						$val['alpha'] = $val['alpha'] ?? 1;
542
-
543
-						$trans        = $field['output_transparent'];
544
-						$res          = ( '' === $val['color'] || 'transparent' === $val['color'] ) ? $trans : Redux_Helpers::hex2rgba( $val['color'], $val['alpha'] );
545
-						$val['rgba']  = $val['rgba'] ?? $res;
546
-						$val['group'] = $val['group'] ?? '';
547
-
548
-						$scheme[ $val['id'] ] = $val;
549
-					}
550
-				}
551
-
552
-				// Get list of scheme names.
553
-				$scheme_names = self::get_scheme_names();
554
-
555
-				// Update is saved scheme with new picker data.
556
-				foreach ( $scheme_names as $name ) {
557
-					self::set_scheme_data( $name, $scheme );
558
-				}
559
-
560
-				// update the database.
561
-				self::set_database_data( $scheme_id );
562
-			}
563
-
564
-			// If it's not empty then...
565
-			if ( ! empty( $scheme ) ) {
566
-
567
-				// init arrays.
568
-				$groups     = array();
569
-				$grp_desc   = array();
570
-				$groups[''] = array();
571
-				$sel_grps   = array();
572
-
573
-				if ( ! isset( self::$select ) ) {
574
-					self::$select = self::get_select_names();
575
-				}
576
-
577
-				// Enum select fields into groups array for later render.
578
-				if ( isset( self::$select ) ) {
579
-					foreach ( self::$select as $sel_arr ) {
580
-						$sel_grp = $sel_arr['group'];
581
-						if ( ! array_key_exists( $sel_grp, $sel_grps ) ) {
582
-							$sel_grps[ $sel_grp ] = array();
583
-						}
584
-						$sel_grps[ $sel_grp ][] = $sel_arr;
585
-					}
586
-				}
587
-
588
-				// Enum groups names.
589
-				$group_arr = self::get_group_names();
590
-
591
-				foreach ( $group_arr as $group_name => $description ) {
592
-					$groups[ $group_name ] = array();
593
-
594
-					if ( is_array( $description ) ) {
595
-						$grp_desc[ $group_name ]           = $description['desc'] ?? '';
596
-						$grp_grpdesc[ $group_name ]        = $description['group_desc'] ?? '';
597
-						$grp_hidden[ $group_name ]         = $description['hidden'] ?? false;
598
-						$grp_accordion_open[ $group_name ] = $description['accordion_open'] ?? false;
599
-
600
-					} else {
601
-						$grp_desc[ $group_name ]           = $description;
602
-						$grp_hidden[ $group_name ]         = false;
603
-						$grp_accordion_open[ $group_name ] = false;
604
-						$grp_grpdesc[ $group_name ]        = false;
605
-					}
606
-				}
607
-
608
-				// Assign color pickers to their specified group.
609
-				foreach ( $scheme as $arr ) {
610
-					if ( is_array( $arr ) ) {
611
-						if ( ! empty( $arr['group'] ) ) {
612
-							if ( array_key_exists( $arr['group'], $group_arr ) ) {
613
-								$groups[ $arr['group'] ][] = $arr;
614
-							} else {
615
-								$groups[''][] = $arr;
616
-							}
617
-						} else {
618
-							$groups[''][] = $arr;
619
-						}
620
-					}
621
-				}
622
-
623
-				$open_icon  = '';
624
-				$close_icon = '';
625
-
626
-				if ( $is_accordion ) {
627
-					$open_icon  = apply_filters( 'redux/extension/color_scheme/' . self::$parent->args['opt_name'] . '/icon/open', 'dashicons dashicons-arrow-down' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName
628
-					$close_icon = apply_filters( 'redux/extension/color_scheme/' . self::$parent->args['opt_name'] . '/icon/close', 'dashicons dashicons-arrow-up' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName
629
-				}
630
-
631
-				// open the list.
632
-				$html = '<ul class="redux-scheme-layout" data-open-icon="' . $open_icon . '" data-close-icon="' . $close_icon . '">';
633
-
634
-				// Enumerate groups.
635
-				foreach ( $groups as $title => $scheme_arr ) {
636
-
637
-					if ( '' === $title ) {
638
-						if ( empty( $scheme_arr ) ) {
639
-							continue;
640
-						}
641
-
642
-						$kill_me = false;
643
-						foreach ( $scheme_arr as $data ) {
644
-							if ( ! array_key_exists( 'color', $data ) ) {
645
-								$kill_me = true;
646
-								break;
647
-							}
648
-						}
649
-						if ( $kill_me ) {
650
-							continue;
651
-						}
652
-					}
653
-
654
-					$add_hr     = false;
655
-					$is_hidden  = false;
656
-					$class_hide = '';
657
-					$is_open    = '';
658
-
659
-					if ( isset( $grp_hidden[ $title ] ) && '' !== $grp_hidden[ $title ] ) {
660
-						$is_hidden  = $grp_hidden[ $title ];
661
-						$class_hide = ( true === $is_hidden ) ? ' hidden ' : '';
662
-						$is_open    = $grp_accordion_open[ $title ];
663
-					}
664
-
665
-					$add_class = '';
666
-					if ( $is_accordion ) {
667
-						$add_class = ' accordion ';
668
-					}
669
-
670
-					$html .= '<div class="redux-color-scheme-group' . $add_class . $class_hide . '">';
671
-
672
-					if ( ! $is_hidden ) {
673
-
674
-						if ( $is_accordion ) {
675
-							$html .= '<div class="redux-color-scheme-accordion">';
676
-						}
677
-						$icon_class = '';
678
-
679
-						// apply group title, if any.
680
-						if ( '' !== $title ) {
681
-							$html .= '<br><span class="redux-label redux-layout-group-label">' . esc_attr( $title ) . '</span>';
682
-
683
-							if ( $is_accordion ) {
684
-								$icon_class = ' titled';
685
-							}
686
-							$add_hr = true;
687
-						} elseif ( $is_accordion ) {
688
-							$icon_class = ' not-titled';
689
-						}
690
-
691
-						// apply group description, if any.
692
-						if ( isset( $grp_desc[ $title ] ) && '' !== $grp_desc[ $title ] ) {
693
-							$html  .= '<span class="redux-label redux-layout-group-desc-label' . $icon_class . '">' . esc_attr( $grp_desc[ $title ] ) . '</label>';
694
-							$add_hr = true;
695
-
696
-							if ( $is_accordion ) {
697
-								$icon_class .= ' subtitled';
698
-							}
699
-						} else {
700
-							$icon_class .= ' not-subtitled';
701
-						}
702
-
703
-						if ( $is_accordion ) {
704
-							$html .= '<span class="' . esc_attr( $open_icon ) . $icon_class . '"></span>';
705
-						}
706
-
707
-						// Add HR, if needed.
708
-						if ( true === $add_hr ) {
709
-							if ( ! $is_accordion ) {
710
-								$html .= '<hr>';
711
-							}
712
-						}
713
-
714
-						if ( $is_accordion ) {
715
-							$html .= '</div>';
716
-							$html .= '<div class="redux-color-scheme-accordion-section" data-state="' . esc_attr( $is_open ) . '">';
717
-							if ( false !== $grp_grpdesc ) {
718
-								$html .= '<div class="redux-color-scheme-group-desc">';
719
-								$html .= esc_attr( $grp_grpdesc[ $title ] );
720
-								$html .= '</div>';
721
-							}
722
-						}
723
-
724
-						// Select box render.
725
-						if ( array_key_exists( $title, $sel_grps ) ) {
726
-							$html .= self::render_selects( $sel_grps[ $title ], $scheme );
727
-						}
728
-					} elseif ( $is_accordion ) {
729
-						$html .= '<div class="redux-color-scheme-accordion-section">';
730
-					}
731
-
732
-					$html .= "<ul class='redux-scheme-layout'>";
733
-
734
-					// Enum through each element/id.
735
-					foreach ( $scheme_arr as $v ) {
736
-						if ( in_array( $v['id'], $id_arr, true ) ) {
737
-
738
-							// If no title, use ID.
739
-							$v['title'] = $v['title'] ?? $v['id'];
740
-
741
-							// If no alpha, use 1 (solid).
742
-							$v['alpha'] = $v['alpha'] ?? 1;
743
-
744
-							// Fuck forbid no colour, set to white.
745
-							$v['color'] = $v['color'] ?? '';
746
-
747
-							// RGBA..
748
-							$trans     = $field['output_transparent'];
749
-							$res       = ( '' === $v['color'] || 'transparent' === $v['color'] ) ? $trans : Redux_Helpers::hex2rgba( $v['color'], $v['alpha'] );
750
-							$v['rgba'] = $v['rgba'] ?? $res;
751
-
752
-							// group name.
753
-							$v['group'] = $v['group'] ?? '';
754
-
755
-							$v['class'] = self::get_color_block_class( $field, $v['id'] );
756
-
757
-							$block_hide = self::get_block_hidden( $field, $v['id'] ) ? 'hidden' : '';
758
-
759
-							// tooltips.
760
-							$tip_title = '';
761
-							$tip_text  = '';
762
-
763
-							$tooltip_data = self::get_tooltip_data( $field, $v['id'] );
764
-							if ( false !== $tooltip_data ) {
765
-								$tip_title = $tooltip_data['title'] ?? '';
766
-								$tip_text  = $tooltip_data['text'] ?? '';
767
-							}
768
-
769
-							// Begin the layout.
770
-							$html .= '<li class="redux-scheme-layout ' . $class_hide . ' redux-cs-qtip ' . $block_hide . '" qtip-title="' . esc_attr( $tip_title ) . '" qtip-content="' . esc_attr( $tip_text ) . '">';
771
-							$html .= '<div class="redux-scheme-layout-container" data-id="' . $field_id . '-' . $v['id'] . '">';
772
-
773
-							if ( '' === $v['color'] || 'transparent' === $v['color'] ) {
774
-								$color = '';
775
-							} else {
776
-								$color = 'rgba(' . $v['rgba'] . ')';
777
-							}
778
-
779
-							// colour picker dropdown.
780
-							$html .= '<input
14
+    /**
15
+     * Class Redux_Color_Scheme_Functions
16
+     */
17
+    class Redux_Color_Scheme_Functions {
18
+
19
+        /**
20
+         * ReduxFramework object.
21
+         *
22
+         * @var null|ReduxFramework
23
+         */
24
+        public static ?ReduxFramework $parent;
25
+
26
+        /**
27
+         * Field ID
28
+         *
29
+         * @var string|null
30
+         */
31
+        public static ?string $field_id;
32
+
33
+        /**
34
+         * Field class.
35
+         *
36
+         * @var string|null
37
+         */
38
+        public static ?string $field_class;
39
+
40
+        /**
41
+         * Field array.
42
+         *
43
+         * @var array|null
44
+         */
45
+        public static ?array $field;
46
+
47
+        /**
48
+         * WP Upload directory.
49
+         *
50
+         * @var string|null
51
+         */
52
+        public static ?string $upload_dir = '';
53
+
54
+        /**
55
+         * WP Upload URI
56
+         *
57
+         * @var string|null
58
+         */
59
+        public static ?string $upload_url = '';
60
+
61
+        /**
62
+         * Select fields.
63
+         *
64
+         * @var array|null
65
+         */
66
+        public static ?array $select;
67
+
68
+        /**
69
+         * Class init.
70
+         *
71
+         * @param ReduxFramework $redux ReduxFramework object.
72
+         */
73
+        public static function init( ReduxFramework $redux ) {
74
+            self::$parent = $redux;
75
+
76
+            if ( empty( self::$field_id ) ) {
77
+                self::$field = self::get_field( $redux );
78
+
79
+                if ( ! is_array( self::$field ) ) {
80
+                    return;
81
+                }
82
+
83
+                self::$field_id = self::$field['id'];
84
+            }
85
+
86
+            // Make sanitized upload dir DIR.
87
+            self::$upload_dir = Redux_Functions_Ex::wp_normalize_path( ReduxFramework::$_upload_dir . 'color-schemes/' );
88
+
89
+            // Make sanitized upload dir URL.
90
+            self::$upload_url = Redux_Functions_Ex::wp_normalize_path( ReduxFramework::$_upload_url . 'color-schemes/' );
91
+
92
+            Redux_Functions::init_wp_filesystem();
93
+        }
94
+
95
+        /**
96
+         * Checks if tooltips are in use.
97
+         *
98
+         * @param array $field Field array.
99
+         *
100
+         * @return bool
101
+         */
102
+        public static function tooltips_in_use( array $field ): bool {
103
+            $blocks = $field['default'];
104
+
105
+            foreach ( $blocks as $arr ) {
106
+                if ( isset( $arr['tooltip'] ) ) {
107
+                    return true;
108
+                }
109
+            }
110
+
111
+            return false;
112
+        }
113
+
114
+        /**
115
+         * Convert DB values.
116
+         */
117
+        public static function convert_to_db() {
118
+            $upload_dir = Redux_Functions_Ex::wp_normalize_path( ReduxFramework::$_upload_dir . 'color-schemes/' );
119
+
120
+            $cur_scheme_file = Redux_Functions_Ex::wp_normalize_path( $upload_dir . '/' . self::$parent->args['opt_name'] . '_' . self::$field_id . '.json' );
121
+
122
+            if ( is_dir( $upload_dir ) ) {
123
+                if ( file_exists( $cur_scheme_file ) ) {
124
+                    $data = Redux_Core::$filesystem->execute( 'get_contents', $cur_scheme_file );
125
+                    if ( ! empty( $data ) ) {
126
+                        $data = json_decode( $data, true );
127
+
128
+                        update_option( self::get_scheme_key(), $data );
129
+
130
+                        Redux_Core::$filesystem->execute( 'delete', $cur_scheme_file );
131
+                    }
132
+                }
133
+            }
134
+        }
135
+
136
+        /**
137
+         * Get scheme key.
138
+         *
139
+         * @return string
140
+         */
141
+        public static function get_scheme_key(): string {
142
+            return 'redux_cs_' . self::$parent->args['opt_name'] . '_' . self::$field_id;
143
+        }
144
+
145
+        /**
146
+         * Get the list of groups names for the color scheme table.
147
+         *
148
+         * @since       2.0.0
149
+         * @access      public static
150
+         * @return      array Array of group names.
151
+         */
152
+        public static function get_group_names(): array {
153
+            if ( empty( self::$field ) ) {
154
+                self::$field = self::get_field();
155
+            }
156
+
157
+            if ( isset( self::$field['groups'] ) ) {
158
+                if ( is_array( self::$field['groups'] ) && ! empty( self::$field['groups'] ) ) {
159
+                    return self::$field['groups'];
160
+                }
161
+            }
162
+
163
+            return array();
164
+        }
165
+
166
+        /**
167
+         * Get output transparent value.
168
+         *
169
+         * @return mixed
170
+         */
171
+        public static function get_output_transparent_val() {
172
+            if ( empty( self::$field ) ) {
173
+                self::$field = self::get_field();
174
+            }
175
+
176
+            if ( isset( self::$field['output_transparent'] ) ) {
177
+                if ( ! empty( self::$field['output_transparent'] ) ) {
178
+                    return self::$field['output_transparent'];
179
+                }
180
+            }
181
+
182
+            return false;
183
+        }
184
+
185
+        /**
186
+         * Get select field name.
187
+         *
188
+         * @return array
189
+         */
190
+        private static function get_select_names(): array {
191
+            if ( empty( self::$field ) ) {
192
+                self::$field = self::get_field();
193
+            }
194
+
195
+            if ( isset( self::$field['select'] ) ) {
196
+                if ( is_array( self::$field['select'] ) && ! empty( self::$field['select'] ) ) {
197
+                    return self::$field['select'];
198
+                }
199
+            }
200
+
201
+            return array();
202
+        }
203
+
204
+        /**
205
+         * Get color scheme field.
206
+         *
207
+         * @param ReduxFramework|null $redux pointer.
208
+         *
209
+         * @return mixed
210
+         */
211
+        public static function get_field( ?ReduxFramework $redux = null ) {
212
+            if ( ! is_null( $redux ) ) {
213
+                self::$parent = $redux;
214
+            }
215
+
216
+            if ( isset( $redux->field_sections['color_scheme'] ) ) {
217
+                return reset( $redux->field_sections['color_scheme'] );
218
+            }
219
+
220
+            $arr = self::$parent;
221
+
222
+            foreach ( $arr as $part => $bla ) {
223
+                if ( 'sections' === $part ) {
224
+                    foreach ( $bla as $field ) {
225
+                        foreach ( $field as $arg => $val ) {
226
+                            if ( 'fields' === $arg ) {
227
+                                foreach ( $val as $v ) {
228
+                                    if ( ! empty( $v ) ) {
229
+                                        foreach ( $v as $id => $x ) {
230
+                                            if ( 'type' === $id ) {
231
+                                                if ( 'color_scheme' === $x ) {
232
+                                                    return $v;
233
+                                                }
234
+                                            }
235
+                                        }
236
+                                    }
237
+                                }
238
+                            }
239
+                        }
240
+                    }
241
+                }
242
+            }
243
+
244
+            return null;
245
+        }
246
+
247
+        /**
248
+         * Output scheme dropdown selector.
249
+         *
250
+         * @param       string $selected Selected scheme name.
251
+         *
252
+         * @return      string HTML of dropdown selector.
253
+         * @since       1.0.0
254
+         * @access      public static
255
+         */
256
+        public static function get_scheme_select_html( string $selected ): string {
257
+
258
+            $html  = '<select name="' . esc_attr( self::$parent->args['opt_name'] ) . '[redux-scheme-select]" id="redux-scheme-select-' . esc_attr( self::$field_id ) . '" class="redux-scheme-select">';
259
+            $html .= self::get_scheme_list_html( $selected );
260
+            $html .= '</select>';
261
+
262
+            return $html;
263
+        }
264
+
265
+        /**
266
+         * Set current scheme ID, if one isn't specified.
267
+         *
268
+         * @param       string $id Scheme name to set.
269
+         *
270
+         * @return      void
271
+         * @since       1.0.0
272
+         * @access      public static
273
+         */
274
+        public static function set_current_scheme_id( string $id ) {
275
+
276
+            // Get opt name, for database.
277
+            $opt_name = self::$parent->args['opt_name'];
278
+
279
+            // Get all options from database.
280
+            $redux_options = get_option( $opt_name, array() );
281
+            if ( ! is_array( $redux_options ) ) {
282
+                $redux_options = array();
283
+            }
284
+            // Append ID to variable that holds the current scheme ID data.
285
+            $redux_options['redux-scheme-select'] = $id;
286
+
287
+            // Save the modified settings.
288
+            update_option( $opt_name, $redux_options );
289
+        }
290
+
291
+        /**
292
+         * Get tooltip toggle state.
293
+         *
294
+         * @return bool
295
+         */
296
+        public static function get_tooltip_toggle_state(): bool {
297
+
298
+            // Retrieve the opt_name, needed for database.
299
+            $opt_name = self::$parent->args['opt_name'];
300
+
301
+            // Get the entire options array.
302
+            $redux_options = get_option( $opt_name );
303
+
304
+            return $redux_options['redux-color-scheme-tooltip-toggle'] ?? true;
305
+        }
306
+
307
+        /**
308
+         * Gets the current schem ID from the database.
309
+         *
310
+         * @since       1.0.0
311
+         * @access      public static
312
+         *
313
+         * @return      string Current scheme ID.
314
+         */
315
+        public static function get_current_scheme_id(): string {
316
+
317
+            // Retrieve the opt_name, needed for databasae.
318
+            $opt_name = self::$parent->args['opt_name'];
319
+
320
+            // Get the entire options array.
321
+            $redux_options = get_option( $opt_name );
322
+
323
+            // If the current scheme key exists...
324
+            return $redux_options['redux-scheme-select'] ?? 'Default';
325
+        }
326
+
327
+        /**
328
+         * Get the list of schemes for the selector.
329
+         *
330
+         * @param       string $sel Scheme name to select.
331
+         *
332
+         * @return      string HTML option values.
333
+         * @since       1.0.0
334
+         * @access      static private
335
+         */
336
+        private static function get_scheme_list_html( string $sel = '' ): string {
337
+            // no errors, please.
338
+            $html = '';
339
+
340
+            // Retrieves the list of saved schemes into an array variable.
341
+            $dropdown_values = self::get_scheme_names();
342
+
343
+            // If the dropdown array has items...
344
+            if ( ! empty( $dropdown_values ) ) {
345
+
346
+                // Sort them alphbetically.
347
+                asort( $dropdown_values );
348
+            }
349
+
350
+            // trim the selected item.
351
+            $sel = trim( $sel );
352
+
353
+            // If it's empty.
354
+            if ( '' === $sel ) {
355
+
356
+                // Make the current scheme id the selected value.
357
+                $selected = self::get_current_scheme_id();
358
+            } else {
359
+
360
+                // Otherwise, set it to the value passed to this function.
361
+                $selected = $sel;
362
+            }
363
+
364
+            // Enum through the dropdown array and append the necessary HTML for the selector.
365
+            foreach ( $dropdown_values as $k ) {
366
+                $html .= '<option value="' . $k . '" ' . selected( $k, $selected, false ) . '>' . $k . '</option>';
367
+            }
368
+
369
+            // Send it all packin'.
370
+            return $html;
371
+        }
372
+
373
+        /**
374
+         * Returns select HTML.
375
+         *
376
+         * @param array $arr  Array of select fields to render.
377
+         * @param array $data Array of scheme data.
378
+         *
379
+         * @return      string HTML of select fields.
380
+         * @since       1.0.4
381
+         * @access      static private
382
+         */
383
+        private static function render_selects( array $arr, array $data ): string {
384
+
385
+            $html = '';
386
+            foreach ( $arr as $v ) {
387
+                $id = $v['id'];
388
+
389
+                if ( isset( $v['width'] ) && ! empty( $v['width'] ) ) {
390
+                    $size = $v['width'];
391
+                } else {
392
+                    $size = '40%';
393
+                }
394
+
395
+                $width = ' style="width: ' . $size . ';"';
396
+
397
+                $html .= '<span class="redux-label redux-color-scheme-opt-select-title">' . $v['title'] . '</span>';
398
+
399
+                $html .= '<select name="' . self::$parent->args['opt_name'] . '[' . self::$field_id . '][' . $id . ']" id="redux-color-scheme-opt-select-' . $id . '"' . $width . ' class="redux-color-scheme-opt-select">';
400
+
401
+                foreach ( $v['options'] as $opt_id => $opt_val ) {
402
+                    $data[ $id ]['value'] = $data[ $id ]['value'] ?? '';
403
+                    $html                .= '<option value="' . $opt_id . '" ' . selected( $opt_id, $data[ $id ]['value'], false ) . '>' . $opt_val . '</option>';
404
+                }
405
+
406
+                $html .= '</select>';
407
+                $html .= '<span class="redux-label redux-color-scheme-opt-select-desc">' . $v['desc'] . '</span>';
408
+                $html .= '<hr class="redux-color-scheme-select-close-hr">';
409
+                $html .= '<br/>';
410
+            }
411
+
412
+            return $html;
413
+        }
414
+
415
+        /**
416
+         * Do diff.
417
+         *
418
+         * @param array $first_array  Array one.
419
+         * @param array $second_array Array two.
420
+         *
421
+         * @return array
422
+         */
423
+        private static function do_diff( array $first_array, array $second_array ): array {
424
+
425
+            /**
426
+             * Serialize callback.
427
+             *
428
+             * @param array $arr Array.
429
+             */
430
+            function my_serialize( array &$arr ) {
431
+                $arr = maybe_serialize( $arr );
432
+            }
433
+
434
+            /**
435
+             * Unserialize callback.
436
+             *
437
+             * @param array $arr Array.
438
+             */
439
+            function my_unserialize( &$arr ) {
440
+                $arr = maybe_unserialize( $arr );
441
+            }
442
+
443
+            // make a copy.
444
+            $first_array_s  = $first_array;
445
+            $second_array_s = $second_array;
446
+
447
+            // serialize all sub-arrays.
448
+            array_walk( $first_array_s, 'my_serialize' );
449
+            array_walk( $second_array_s, 'my_serialize' );
450
+
451
+            // array_diff the serialized versions.
452
+            $diff = array_diff( $first_array_s, $second_array_s );
453
+
454
+            // unserialize the result.
455
+            array_walk( $diff, 'my_unserialize' );
456
+
457
+            // you've got it!
458
+            return $diff;
459
+        }
460
+
461
+        /**
462
+         * Returns colour pickers HTML table.
463
+         *
464
+         * @since       1.0.0
465
+         * @access      public static
466
+         *
467
+         * @param       string $scheme_id Scheme name of HTML to return.
468
+         *
469
+         * @return      string HTML of colour picker table.
470
+         */
471
+        public static function get_current_color_scheme_html( $scheme_id = false ): string {
472
+
473
+            // If scheme_id is false.
474
+            if ( ! $scheme_id ) {
475
+
476
+                // Attempt to get the current scheme.
477
+                $scheme_id = self::get_current_scheme_id();
478
+
479
+                // dummy check, because this shit happens!
480
+                $arr_schemes = self::get_scheme_names();
481
+
482
+                if ( ! in_array( $scheme_id, $arr_schemes, true ) ) {
483
+                    $scheme_id = 'Default';
484
+                    self::set_current_scheme_id( 'Default' );
485
+                }
486
+            }
487
+
488
+            // Set oft used variables.
489
+            $opt_name    = esc_attr( self::$parent->args['opt_name'] );
490
+            $field_id    = esc_attr( self::$field_id );
491
+            $field_class = esc_attr( self::$field_class );
492
+
493
+            // Get the default options.
494
+            $field = self::get_field();
495
+
496
+            $field['output_transparent'] = $field['output_transparent'] ?? '';
497
+            $is_accordion                = $field['accordion'] ?? true;
498
+
499
+            $def_opts = $field['default'];
500
+
501
+            // Create array of element ids from default options.
502
+            if ( ! empty( $def_opts ) ) {
503
+                $id_arr = array();
504
+
505
+                foreach ( $def_opts as $vv ) {
506
+                    $id_arr[] = $vv['id'];
507
+                }
508
+            }
509
+
510
+            // Get last saved default.
511
+            $saved_def = get_option( 'redux_' . $opt_name . '_' . $field_id . '_color_scheme' );
512
+
513
+            // Compare key counts between saved and current defaults to check
514
+            // for changes in color scheme.
515
+            if ( false !== $saved_def && is_array( $saved_def ) ) {
516
+
517
+                // Get the new color inputs.
518
+                $arr_diff = self::do_diff( $def_opts, $saved_def );
519
+
520
+                if ( ! empty( $arr_diff ) ) {
521
+                    update_option( 'redux_' . $opt_name . '_' . $field_id . '_color_scheme', $def_opts );
522
+                }                //}
523
+            } else {
524
+                update_option( 'redux_' . $opt_name . '_' . $field_id . '_color_scheme', $def_opts );
525
+            }
526
+
527
+            // get current scheme data.
528
+            $scheme = self::get_scheme_data( $scheme_id );
529
+
530
+            if ( false === $scheme ) {
531
+                return '';
532
+            }
533
+
534
+            // If new color inputs exist...
535
+            if ( ! empty( $arr_diff ) ) {
536
+                foreach ( $arr_diff as $val ) {
537
+                    if ( ! empty( $val ) && isset( $val['id'] ) ) {
538
+
539
+                        $val['title'] = $val['title'] ?? $val['id'];
540
+                        $val['color'] = $val['color'] ?? '';
541
+                        $val['alpha'] = $val['alpha'] ?? 1;
542
+
543
+                        $trans        = $field['output_transparent'];
544
+                        $res          = ( '' === $val['color'] || 'transparent' === $val['color'] ) ? $trans : Redux_Helpers::hex2rgba( $val['color'], $val['alpha'] );
545
+                        $val['rgba']  = $val['rgba'] ?? $res;
546
+                        $val['group'] = $val['group'] ?? '';
547
+
548
+                        $scheme[ $val['id'] ] = $val;
549
+                    }
550
+                }
551
+
552
+                // Get list of scheme names.
553
+                $scheme_names = self::get_scheme_names();
554
+
555
+                // Update is saved scheme with new picker data.
556
+                foreach ( $scheme_names as $name ) {
557
+                    self::set_scheme_data( $name, $scheme );
558
+                }
559
+
560
+                // update the database.
561
+                self::set_database_data( $scheme_id );
562
+            }
563
+
564
+            // If it's not empty then...
565
+            if ( ! empty( $scheme ) ) {
566
+
567
+                // init arrays.
568
+                $groups     = array();
569
+                $grp_desc   = array();
570
+                $groups[''] = array();
571
+                $sel_grps   = array();
572
+
573
+                if ( ! isset( self::$select ) ) {
574
+                    self::$select = self::get_select_names();
575
+                }
576
+
577
+                // Enum select fields into groups array for later render.
578
+                if ( isset( self::$select ) ) {
579
+                    foreach ( self::$select as $sel_arr ) {
580
+                        $sel_grp = $sel_arr['group'];
581
+                        if ( ! array_key_exists( $sel_grp, $sel_grps ) ) {
582
+                            $sel_grps[ $sel_grp ] = array();
583
+                        }
584
+                        $sel_grps[ $sel_grp ][] = $sel_arr;
585
+                    }
586
+                }
587
+
588
+                // Enum groups names.
589
+                $group_arr = self::get_group_names();
590
+
591
+                foreach ( $group_arr as $group_name => $description ) {
592
+                    $groups[ $group_name ] = array();
593
+
594
+                    if ( is_array( $description ) ) {
595
+                        $grp_desc[ $group_name ]           = $description['desc'] ?? '';
596
+                        $grp_grpdesc[ $group_name ]        = $description['group_desc'] ?? '';
597
+                        $grp_hidden[ $group_name ]         = $description['hidden'] ?? false;
598
+                        $grp_accordion_open[ $group_name ] = $description['accordion_open'] ?? false;
599
+
600
+                    } else {
601
+                        $grp_desc[ $group_name ]           = $description;
602
+                        $grp_hidden[ $group_name ]         = false;
603
+                        $grp_accordion_open[ $group_name ] = false;
604
+                        $grp_grpdesc[ $group_name ]        = false;
605
+                    }
606
+                }
607
+
608
+                // Assign color pickers to their specified group.
609
+                foreach ( $scheme as $arr ) {
610
+                    if ( is_array( $arr ) ) {
611
+                        if ( ! empty( $arr['group'] ) ) {
612
+                            if ( array_key_exists( $arr['group'], $group_arr ) ) {
613
+                                $groups[ $arr['group'] ][] = $arr;
614
+                            } else {
615
+                                $groups[''][] = $arr;
616
+                            }
617
+                        } else {
618
+                            $groups[''][] = $arr;
619
+                        }
620
+                    }
621
+                }
622
+
623
+                $open_icon  = '';
624
+                $close_icon = '';
625
+
626
+                if ( $is_accordion ) {
627
+                    $open_icon  = apply_filters( 'redux/extension/color_scheme/' . self::$parent->args['opt_name'] . '/icon/open', 'dashicons dashicons-arrow-down' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName
628
+                    $close_icon = apply_filters( 'redux/extension/color_scheme/' . self::$parent->args['opt_name'] . '/icon/close', 'dashicons dashicons-arrow-up' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName
629
+                }
630
+
631
+                // open the list.
632
+                $html = '<ul class="redux-scheme-layout" data-open-icon="' . $open_icon . '" data-close-icon="' . $close_icon . '">';
633
+
634
+                // Enumerate groups.
635
+                foreach ( $groups as $title => $scheme_arr ) {
636
+
637
+                    if ( '' === $title ) {
638
+                        if ( empty( $scheme_arr ) ) {
639
+                            continue;
640
+                        }
641
+
642
+                        $kill_me = false;
643
+                        foreach ( $scheme_arr as $data ) {
644
+                            if ( ! array_key_exists( 'color', $data ) ) {
645
+                                $kill_me = true;
646
+                                break;
647
+                            }
648
+                        }
649
+                        if ( $kill_me ) {
650
+                            continue;
651
+                        }
652
+                    }
653
+
654
+                    $add_hr     = false;
655
+                    $is_hidden  = false;
656
+                    $class_hide = '';
657
+                    $is_open    = '';
658
+
659
+                    if ( isset( $grp_hidden[ $title ] ) && '' !== $grp_hidden[ $title ] ) {
660
+                        $is_hidden  = $grp_hidden[ $title ];
661
+                        $class_hide = ( true === $is_hidden ) ? ' hidden ' : '';
662
+                        $is_open    = $grp_accordion_open[ $title ];
663
+                    }
664
+
665
+                    $add_class = '';
666
+                    if ( $is_accordion ) {
667
+                        $add_class = ' accordion ';
668
+                    }
669
+
670
+                    $html .= '<div class="redux-color-scheme-group' . $add_class . $class_hide . '">';
671
+
672
+                    if ( ! $is_hidden ) {
673
+
674
+                        if ( $is_accordion ) {
675
+                            $html .= '<div class="redux-color-scheme-accordion">';
676
+                        }
677
+                        $icon_class = '';
678
+
679
+                        // apply group title, if any.
680
+                        if ( '' !== $title ) {
681
+                            $html .= '<br><span class="redux-label redux-layout-group-label">' . esc_attr( $title ) . '</span>';
682
+
683
+                            if ( $is_accordion ) {
684
+                                $icon_class = ' titled';
685
+                            }
686
+                            $add_hr = true;
687
+                        } elseif ( $is_accordion ) {
688
+                            $icon_class = ' not-titled';
689
+                        }
690
+
691
+                        // apply group description, if any.
692
+                        if ( isset( $grp_desc[ $title ] ) && '' !== $grp_desc[ $title ] ) {
693
+                            $html  .= '<span class="redux-label redux-layout-group-desc-label' . $icon_class . '">' . esc_attr( $grp_desc[ $title ] ) . '</label>';
694
+                            $add_hr = true;
695
+
696
+                            if ( $is_accordion ) {
697
+                                $icon_class .= ' subtitled';
698
+                            }
699
+                        } else {
700
+                            $icon_class .= ' not-subtitled';
701
+                        }
702
+
703
+                        if ( $is_accordion ) {
704
+                            $html .= '<span class="' . esc_attr( $open_icon ) . $icon_class . '"></span>';
705
+                        }
706
+
707
+                        // Add HR, if needed.
708
+                        if ( true === $add_hr ) {
709
+                            if ( ! $is_accordion ) {
710
+                                $html .= '<hr>';
711
+                            }
712
+                        }
713
+
714
+                        if ( $is_accordion ) {
715
+                            $html .= '</div>';
716
+                            $html .= '<div class="redux-color-scheme-accordion-section" data-state="' . esc_attr( $is_open ) . '">';
717
+                            if ( false !== $grp_grpdesc ) {
718
+                                $html .= '<div class="redux-color-scheme-group-desc">';
719
+                                $html .= esc_attr( $grp_grpdesc[ $title ] );
720
+                                $html .= '</div>';
721
+                            }
722
+                        }
723
+
724
+                        // Select box render.
725
+                        if ( array_key_exists( $title, $sel_grps ) ) {
726
+                            $html .= self::render_selects( $sel_grps[ $title ], $scheme );
727
+                        }
728
+                    } elseif ( $is_accordion ) {
729
+                        $html .= '<div class="redux-color-scheme-accordion-section">';
730
+                    }
731
+
732
+                    $html .= "<ul class='redux-scheme-layout'>";
733
+
734
+                    // Enum through each element/id.
735
+                    foreach ( $scheme_arr as $v ) {
736
+                        if ( in_array( $v['id'], $id_arr, true ) ) {
737
+
738
+                            // If no title, use ID.
739
+                            $v['title'] = $v['title'] ?? $v['id'];
740
+
741
+                            // If no alpha, use 1 (solid).
742
+                            $v['alpha'] = $v['alpha'] ?? 1;
743
+
744
+                            // Fuck forbid no colour, set to white.
745
+                            $v['color'] = $v['color'] ?? '';
746
+
747
+                            // RGBA..
748
+                            $trans     = $field['output_transparent'];
749
+                            $res       = ( '' === $v['color'] || 'transparent' === $v['color'] ) ? $trans : Redux_Helpers::hex2rgba( $v['color'], $v['alpha'] );
750
+                            $v['rgba'] = $v['rgba'] ?? $res;
751
+
752
+                            // group name.
753
+                            $v['group'] = $v['group'] ?? '';
754
+
755
+                            $v['class'] = self::get_color_block_class( $field, $v['id'] );
756
+
757
+                            $block_hide = self::get_block_hidden( $field, $v['id'] ) ? 'hidden' : '';
758
+
759
+                            // tooltips.
760
+                            $tip_title = '';
761
+                            $tip_text  = '';
762
+
763
+                            $tooltip_data = self::get_tooltip_data( $field, $v['id'] );
764
+                            if ( false !== $tooltip_data ) {
765
+                                $tip_title = $tooltip_data['title'] ?? '';
766
+                                $tip_text  = $tooltip_data['text'] ?? '';
767
+                            }
768
+
769
+                            // Begin the layout.
770
+                            $html .= '<li class="redux-scheme-layout ' . $class_hide . ' redux-cs-qtip ' . $block_hide . '" qtip-title="' . esc_attr( $tip_title ) . '" qtip-content="' . esc_attr( $tip_text ) . '">';
771
+                            $html .= '<div class="redux-scheme-layout-container" data-id="' . $field_id . '-' . $v['id'] . '">';
772
+
773
+                            if ( '' === $v['color'] || 'transparent' === $v['color'] ) {
774
+                                $color = '';
775
+                            } else {
776
+                                $color = 'rgba(' . $v['rgba'] . ')';
777
+                            }
778
+
779
+                            // colour picker dropdown.
780
+                            $html .= '<input
781 781
                                         id="' . $field_id . '-' . esc_attr( $v['id'] ) . '-color"
782 782
                                         class="' . $field_class . ' ' . esc_attr( $v['class'] ) . '"
783 783
                                         type="text"
@@ -793,15 +793,15 @@  discard block
 block discarded – undo
793 793
                                         data-output-transparent="' . esc_attr( $field['output_transparent'] ) . '"
794 794
                                       />';
795 795
 
796
-							$scheme_data = self::get_scheme_data( $scheme_id );
797
-							if ( false === $scheme_data ) {
798
-								return '';
799
-							}
796
+                            $scheme_data = self::get_scheme_data( $scheme_id );
797
+                            if ( false === $scheme_data ) {
798
+                                return '';
799
+                            }
800 800
 
801
-							$picker_data = $scheme_data[ $v['id'] ];
801
+                            $picker_data = $scheme_data[ $v['id'] ];
802 802
 
803
-							// Hidden input for data string.
804
-							$html .= '<input
803
+                            // Hidden input for data string.
804
+                            $html .= '<input
805 805
                                         type="hidden"
806 806
                                         class="redux-hidden-data"
807 807
                                         name="' . esc_attr( $opt_name ) . '[' . esc_attr( $field_id ) . '][' . esc_attr( $v['id'] ) . '][data]"
@@ -809,312 +809,312 @@  discard block
 block discarded – undo
809 809
                                         value="' . rawurlencode( wp_json_encode( $picker_data ) ) . '"
810 810
                                       />';
811 811
 
812
-							// closing html tags.
813
-							$html .= '</div>';
814
-							$html .= '<span class="redux-label redux-layout-label">' . esc_attr( $v['title'] ) . '</span>';
815
-							$html .= '</li>';
816
-						}
817
-					}
818
-					$html .= '</ul>';
819
-
820
-					$html .= '<hr class="redux-color-scheme-blank-hr">';
821
-
822
-					if ( $is_accordion ) {
823
-						$html .= '</div>';
824
-					}
825
-
826
-					$html .= '</div>';
827
-				}
828
-
829
-				// Close list.
830
-				$html .= '</ul>';
831
-			}
832
-
833
-			// html var not empty, return it.
834
-			if ( ! empty( $html ) ) {
835
-				return $html;
836
-			}
837
-
838
-			return '';
839
-		}
840
-
841
-		/**
842
-		 * Get color block class.
843
-		 *
844
-		 * @param array  $field Field array.
845
-		 * @param string $id    Field ID.
846
-		 *
847
-		 * @return string
848
-		 */
849
-		private static function get_color_block_class( array $field, string $id ): string {
850
-			$def = $field['default'];
851
-
852
-			if ( ! empty( $def ) ) {
853
-				foreach ( $def as $arr ) {
854
-					if ( $arr['id'] === $id ) {
855
-						if ( isset( $arr['class'] ) ) {
856
-							return $arr['class'];
857
-						}
858
-					}
859
-				}
860
-			}
861
-
862
-			return '';
863
-		}
864
-
865
-		/**
866
-		 * Get tooltip data.
867
-		 *
868
-		 * @param array  $field Field array.
869
-		 * @param string $id    Field ID.
870
-		 *
871
-		 * @return mixed
872
-		 */
873
-		private static function get_tooltip_data( array $field, string $id ) {
874
-			$def = $field['default'];
875
-
876
-			if ( ! empty( $def ) ) {
877
-				foreach ( $def as $arr ) {
878
-					if ( $arr['id'] === $id ) {
879
-						if ( isset( $arr['tooltip'] ) ) {
880
-							return $arr['tooltip'];
881
-						}
882
-					}
883
-				}
884
-			}
885
-
886
-			return false;
887
-		}
888
-
889
-		/**
890
-		 * Get hidden blocks.
891
-		 *
892
-		 * @param array  $field Field ID.
893
-		 * @param string $id    Field ID.
894
-		 *
895
-		 * @return bool
896
-		 */
897
-		private static function get_block_hidden( array $field, string $id ): bool {
898
-			$def = $field['default'];
899
-
900
-			if ( ! empty( $def ) ) {
901
-				foreach ( $def as $arr ) {
902
-					if ( $arr['id'] === $id ) {
903
-						if ( isset( $arr['hidden'] ) ) {
904
-							return $arr['hidden'];
905
-						}
906
-					}
907
-				}
908
-			}
909
-
910
-			return false;
911
-		}
912
-
913
-		/**
914
-		 * Returns scheme file contents.
915
-		 *
916
-		 * @since       1.0.0
917
-		 * @access      public static
918
-		 *
919
-		 * @return      array Array of scheme data.
920
-		 */
921
-		public static function read_scheme_file() {
922
-			$key  = self::get_scheme_key();
923
-			$data = get_option( $key );
924
-
925
-			if ( empty( $data ) ) {
926
-				$arr_data = false;
927
-			} else {
928
-				$arr_data = $data;
929
-			}
930
-
931
-			return $arr_data;
932
-		}
933
-
934
-		/**
935
-		 * Sets scheme file contents.
936
-		 *
937
-		 * @param       array $arr_data PHP array of data to encode.
938
-		 *
939
-		 * @return      bool Result of write function.
940
-		 * @since       1.0.0
941
-		 * @access      public static
942
-		 */
943
-		public static function write_scheme_file( array $arr_data ): bool {
944
-			$key = self::get_scheme_key();
945
-
946
-			return update_option( $key, $arr_data );
947
-		}
948
-
949
-		/**
950
-		 * Gets individual scheme data from scheme JSON file.
951
-		 *
952
-		 * @param       string $scheme_name Name of scheme.
953
-		 *
954
-		 * @return      mixed PHP array of scheme data.
955
-		 * @since       1.0.0
956
-		 * @access      public static
957
-		 */
958
-		public static function get_scheme_data( string $scheme_name ) {
959
-			$data = self::read_scheme_file();
960
-
961
-			if ( false === $data ) {
962
-				return false;
963
-			}
964
-
965
-			return $data[ $scheme_name ];
966
-		}
967
-
968
-		/**
969
-		 * Sets individual scheme data to scheme JSON file.
970
-		 *
971
-		 * @param string $name  Name of a scheme to save.
972
-		 * @param array  $arr   Scheme data to encode.
973
-		 *
974
-		 * @return      bool Result of file written.
975
-		 * @since       1.0.0
976
-		 * @access      public static
977
-		 */
978
-		public static function set_scheme_data( string $name, array $arr ): bool {
979
-
980
-			// Create blank array.
981
-			$new_scheme = array();
982
-
983
-			// If name is present.
984
-			if ( $name ) {
985
-
986
-				// then add the name at the new array's key.
987
-				$new_scheme['color_scheme_name'] = $name;
988
-
989
-				// Enum through values and assign them to new array.
990
-				foreach ( $arr as $val ) {
991
-					if ( isset( $val['id'] ) ) {
992
-						$new_scheme[ $val['id'] ] = $val;
993
-					}
994
-				}
995
-
996
-				// read the contents of the current scheme file.
997
-				$schemes = self::read_scheme_file();
998
-
999
-				// If returned false (not there) then create a new array.
1000
-				if ( false === $schemes ) {
1001
-					$schemes = array();
1002
-				}
1003
-
1004
-				$scheme_data = $schemes[ $name ] ?? '';
1005
-
1006
-				if ( $scheme_data !== $new_scheme ) {
1007
-
1008
-					// Add new scheme to array that will be saved.
1009
-					$schemes[ $name ] = $new_scheme;
1010
-
1011
-					// Write the data to the JSON file.
1012
-					return self::write_scheme_file( $schemes );
1013
-				}
1014
-			}
1015
-
1016
-			// !success
1017
-			return false;
1018
-		}
1019
-
1020
-		/**
1021
-		 * Enumerate the scheme names from the JSON store file.
1022
-		 *
1023
-		 * @since       1.0.0
1024
-		 * @access      public static
1025
-		 * @return      array Array of stored scheme names.
1026
-		 */
1027
-		public static function get_scheme_names(): array {
1028
-
1029
-			// Read the JSON file, which returns a PHP array.
1030
-			$schemes = self::read_scheme_file();
1031
-
1032
-			// Create a new array.
1033
-			$output = array();
1034
-
1035
-			if ( false !== $schemes ) {
1036
-
1037
-				// If the schemes array IS an array (versus false), then...
1038
-				if ( is_array( $schemes ) ) {
1039
-
1040
-					// Enum them.
1041
-					foreach ( $schemes as $scheme ) {
1042
-
1043
-						// If the color_scheme_name key is set...
1044
-						if ( isset( $scheme['color_scheme_name'] ) ) {
1045
-
1046
-							// Push it onto the array stack.
1047
-							$output[] = $scheme['color_scheme_name'];
1048
-						}
1049
-					}
1050
-				}
1051
-			}
1052
-
1053
-			// Kick the full array out the door.
1054
-			return $output;
1055
-		}
1056
-
1057
-		/**
1058
-		 * Get data array from scheme.
1059
-		 *
1060
-		 * @param string $scheme Scheme name.
1061
-		 *
1062
-		 * @return array
1063
-		 */
1064
-		public static function data_array_from_scheme( string $scheme ): array {
1065
-
1066
-			// Get scheme data from JSON file.
1067
-			$data = self::get_scheme_data( $scheme );
1068
-			if ( false === $data ) {
1069
-				return array();
1070
-			}
1071
-
1072
-			// Don't need to save select arrays to database,
1073
-			// just the id => value.
1074
-			if ( ! empty( $data ) ) {
1075
-				foreach ( $data as $k => $v ) {
1076
-					if ( isset( $v['type'] ) ) {
1077
-						$val = $v['value'];
1078
-
1079
-						unset( $data[ $k ] );
1080
-
1081
-						$data[ $k ] = $val;
1082
-					}
1083
-				}
1084
-			}
1085
-
1086
-			return $data;
1087
-		}
1088
-
1089
-		/**
1090
-		 * Sets current scheme to database.
1091
-		 *
1092
-		 * @param       string $scheme Current scheme name.
1093
-		 *
1094
-		 * @return      void
1095
-		 * @since       1.0.0
1096
-		 * @access      private
1097
-		 */
1098
-		public static function set_database_data( string $scheme = 'Default' ) {
1099
-
1100
-			$data = self::data_array_from_scheme( $scheme );
1101
-
1102
-			// Get opt name, for database.
1103
-			$opt_name = self::$parent->args['opt_name'];
1104
-
1105
-			// Get all options from database.
1106
-			$redux_options = get_option( $opt_name );
1107
-
1108
-			if ( empty( self::$field_id ) ) {
1109
-				self::$field    = self::get_field();
1110
-				self::$field_id = self::$field['id'];
1111
-			}
1112
-
1113
-			// Append ID to variable that holds the current scheme ID data.
1114
-			$redux_options[ self::$field_id ] = $data;
1115
-
1116
-			// Save the modified settings.
1117
-			update_option( $opt_name, $redux_options );
1118
-		}
1119
-	}
812
+                            // closing html tags.
813
+                            $html .= '</div>';
814
+                            $html .= '<span class="redux-label redux-layout-label">' . esc_attr( $v['title'] ) . '</span>';
815
+                            $html .= '</li>';
816
+                        }
817
+                    }
818
+                    $html .= '</ul>';
819
+
820
+                    $html .= '<hr class="redux-color-scheme-blank-hr">';
821
+
822
+                    if ( $is_accordion ) {
823
+                        $html .= '</div>';
824
+                    }
825
+
826
+                    $html .= '</div>';
827
+                }
828
+
829
+                // Close list.
830
+                $html .= '</ul>';
831
+            }
832
+
833
+            // html var not empty, return it.
834
+            if ( ! empty( $html ) ) {
835
+                return $html;
836
+            }
837
+
838
+            return '';
839
+        }
840
+
841
+        /**
842
+         * Get color block class.
843
+         *
844
+         * @param array  $field Field array.
845
+         * @param string $id    Field ID.
846
+         *
847
+         * @return string
848
+         */
849
+        private static function get_color_block_class( array $field, string $id ): string {
850
+            $def = $field['default'];
851
+
852
+            if ( ! empty( $def ) ) {
853
+                foreach ( $def as $arr ) {
854
+                    if ( $arr['id'] === $id ) {
855
+                        if ( isset( $arr['class'] ) ) {
856
+                            return $arr['class'];
857
+                        }
858
+                    }
859
+                }
860
+            }
861
+
862
+            return '';
863
+        }
864
+
865
+        /**
866
+         * Get tooltip data.
867
+         *
868
+         * @param array  $field Field array.
869
+         * @param string $id    Field ID.
870
+         *
871
+         * @return mixed
872
+         */
873
+        private static function get_tooltip_data( array $field, string $id ) {
874
+            $def = $field['default'];
875
+
876
+            if ( ! empty( $def ) ) {
877
+                foreach ( $def as $arr ) {
878
+                    if ( $arr['id'] === $id ) {
879
+                        if ( isset( $arr['tooltip'] ) ) {
880
+                            return $arr['tooltip'];
881
+                        }
882
+                    }
883
+                }
884
+            }
885
+
886
+            return false;
887
+        }
888
+
889
+        /**
890
+         * Get hidden blocks.
891
+         *
892
+         * @param array  $field Field ID.
893
+         * @param string $id    Field ID.
894
+         *
895
+         * @return bool
896
+         */
897
+        private static function get_block_hidden( array $field, string $id ): bool {
898
+            $def = $field['default'];
899
+
900
+            if ( ! empty( $def ) ) {
901
+                foreach ( $def as $arr ) {
902
+                    if ( $arr['id'] === $id ) {
903
+                        if ( isset( $arr['hidden'] ) ) {
904
+                            return $arr['hidden'];
905
+                        }
906
+                    }
907
+                }
908
+            }
909
+
910
+            return false;
911
+        }
912
+
913
+        /**
914
+         * Returns scheme file contents.
915
+         *
916
+         * @since       1.0.0
917
+         * @access      public static
918
+         *
919
+         * @return      array Array of scheme data.
920
+         */
921
+        public static function read_scheme_file() {
922
+            $key  = self::get_scheme_key();
923
+            $data = get_option( $key );
924
+
925
+            if ( empty( $data ) ) {
926
+                $arr_data = false;
927
+            } else {
928
+                $arr_data = $data;
929
+            }
930
+
931
+            return $arr_data;
932
+        }
933
+
934
+        /**
935
+         * Sets scheme file contents.
936
+         *
937
+         * @param       array $arr_data PHP array of data to encode.
938
+         *
939
+         * @return      bool Result of write function.
940
+         * @since       1.0.0
941
+         * @access      public static
942
+         */
943
+        public static function write_scheme_file( array $arr_data ): bool {
944
+            $key = self::get_scheme_key();
945
+
946
+            return update_option( $key, $arr_data );
947
+        }
948
+
949
+        /**
950
+         * Gets individual scheme data from scheme JSON file.
951
+         *
952
+         * @param       string $scheme_name Name of scheme.
953
+         *
954
+         * @return      mixed PHP array of scheme data.
955
+         * @since       1.0.0
956
+         * @access      public static
957
+         */
958
+        public static function get_scheme_data( string $scheme_name ) {
959
+            $data = self::read_scheme_file();
960
+
961
+            if ( false === $data ) {
962
+                return false;
963
+            }
964
+
965
+            return $data[ $scheme_name ];
966
+        }
967
+
968
+        /**
969
+         * Sets individual scheme data to scheme JSON file.
970
+         *
971
+         * @param string $name  Name of a scheme to save.
972
+         * @param array  $arr   Scheme data to encode.
973
+         *
974
+         * @return      bool Result of file written.
975
+         * @since       1.0.0
976
+         * @access      public static
977
+         */
978
+        public static function set_scheme_data( string $name, array $arr ): bool {
979
+
980
+            // Create blank array.
981
+            $new_scheme = array();
982
+
983
+            // If name is present.
984
+            if ( $name ) {
985
+
986
+                // then add the name at the new array's key.
987
+                $new_scheme['color_scheme_name'] = $name;
988
+
989
+                // Enum through values and assign them to new array.
990
+                foreach ( $arr as $val ) {
991
+                    if ( isset( $val['id'] ) ) {
992
+                        $new_scheme[ $val['id'] ] = $val;
993
+                    }
994
+                }
995
+
996
+                // read the contents of the current scheme file.
997
+                $schemes = self::read_scheme_file();
998
+
999
+                // If returned false (not there) then create a new array.
1000
+                if ( false === $schemes ) {
1001
+                    $schemes = array();
1002
+                }
1003
+
1004
+                $scheme_data = $schemes[ $name ] ?? '';
1005
+
1006
+                if ( $scheme_data !== $new_scheme ) {
1007
+
1008
+                    // Add new scheme to array that will be saved.
1009
+                    $schemes[ $name ] = $new_scheme;
1010
+
1011
+                    // Write the data to the JSON file.
1012
+                    return self::write_scheme_file( $schemes );
1013
+                }
1014
+            }
1015
+
1016
+            // !success
1017
+            return false;
1018
+        }
1019
+
1020
+        /**
1021
+         * Enumerate the scheme names from the JSON store file.
1022
+         *
1023
+         * @since       1.0.0
1024
+         * @access      public static
1025
+         * @return      array Array of stored scheme names.
1026
+         */
1027
+        public static function get_scheme_names(): array {
1028
+
1029
+            // Read the JSON file, which returns a PHP array.
1030
+            $schemes = self::read_scheme_file();
1031
+
1032
+            // Create a new array.
1033
+            $output = array();
1034
+
1035
+            if ( false !== $schemes ) {
1036
+
1037
+                // If the schemes array IS an array (versus false), then...
1038
+                if ( is_array( $schemes ) ) {
1039
+
1040
+                    // Enum them.
1041
+                    foreach ( $schemes as $scheme ) {
1042
+
1043
+                        // If the color_scheme_name key is set...
1044
+                        if ( isset( $scheme['color_scheme_name'] ) ) {
1045
+
1046
+                            // Push it onto the array stack.
1047
+                            $output[] = $scheme['color_scheme_name'];
1048
+                        }
1049
+                    }
1050
+                }
1051
+            }
1052
+
1053
+            // Kick the full array out the door.
1054
+            return $output;
1055
+        }
1056
+
1057
+        /**
1058
+         * Get data array from scheme.
1059
+         *
1060
+         * @param string $scheme Scheme name.
1061
+         *
1062
+         * @return array
1063
+         */
1064
+        public static function data_array_from_scheme( string $scheme ): array {
1065
+
1066
+            // Get scheme data from JSON file.
1067
+            $data = self::get_scheme_data( $scheme );
1068
+            if ( false === $data ) {
1069
+                return array();
1070
+            }
1071
+
1072
+            // Don't need to save select arrays to database,
1073
+            // just the id => value.
1074
+            if ( ! empty( $data ) ) {
1075
+                foreach ( $data as $k => $v ) {
1076
+                    if ( isset( $v['type'] ) ) {
1077
+                        $val = $v['value'];
1078
+
1079
+                        unset( $data[ $k ] );
1080
+
1081
+                        $data[ $k ] = $val;
1082
+                    }
1083
+                }
1084
+            }
1085
+
1086
+            return $data;
1087
+        }
1088
+
1089
+        /**
1090
+         * Sets current scheme to database.
1091
+         *
1092
+         * @param       string $scheme Current scheme name.
1093
+         *
1094
+         * @return      void
1095
+         * @since       1.0.0
1096
+         * @access      private
1097
+         */
1098
+        public static function set_database_data( string $scheme = 'Default' ) {
1099
+
1100
+            $data = self::data_array_from_scheme( $scheme );
1101
+
1102
+            // Get opt name, for database.
1103
+            $opt_name = self::$parent->args['opt_name'];
1104
+
1105
+            // Get all options from database.
1106
+            $redux_options = get_option( $opt_name );
1107
+
1108
+            if ( empty( self::$field_id ) ) {
1109
+                self::$field    = self::get_field();
1110
+                self::$field_id = self::$field['id'];
1111
+            }
1112
+
1113
+            // Append ID to variable that holds the current scheme ID data.
1114
+            $redux_options[ self::$field_id ] = $data;
1115
+
1116
+            // Save the modified settings.
1117
+            update_option( $opt_name, $redux_options );
1118
+        }
1119
+    }
1120 1120
 }
Please login to merge, or discard this patch.