%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/1857783/root/var/www/cwg/wp-content/plugins/wp-grid-builder/admin/settings/
Upload File :
Create Path :
Current File : //proc/1857783/root/var/www/cwg/wp-content/plugins/wp-grid-builder/admin/settings/grid.php

<?php
/**
 * Grid settings
 *
 * @package   WP Grid Builder
 * @author    Loïc Blascos
 * @copyright 2019-2021 Loïc Blascos
 */

use WP_Grid_Builder\Includes\Helpers;
use WP_Grid_Builder\Includes\Loaders;
use WP_Grid_Builder\Includes\Database;
use WP_Grid_Builder\Includes\Animations;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$grid_id     = isset( $_GET['id'] ) ? (int) $_GET['id'] : 0;
$grid_name   = __( 'New Grid', 'wp-grid-builder' );
$has_cards   = false;
$grid_values = [];

// Query settings.
if ( $grid_id > 0 ) {

	$grid = Database::query_row(
		[
			'select' => 'name, settings',
			'from'   => 'grids',
			'id'     => $grid_id,
		]
	);

	$grid_name   = $grid['name'];
	$grid_values = $grid['settings'];
	$grid_values = json_decode( $grid_values, true );

}

// Prepare select options.
$user_options = [];
$tax_options  = [];
$term_options = [];
$post_options = [];
$card_options = [];
$image_sizes  = Helpers::get_image_sizes();
$post_status  = Helpers::get_post_status();
$post_types   = Helpers::get_post_types();
$taxonomies   = Helpers::get_taxonomies_list();
$user_roles   = Helpers::get_roles();

if ( ! wp_doing_ajax() ) {

	// Count cards.
	$has_cards = ! empty( Database::count_items( 'cards' ) );

	// Prepare user select options.
	$author__in   = ! empty( $grid_values['author__in'] ) ? $grid_values['author__in'] : [];
	$user__in     = ! empty( $grid_values['user__in'] ) ? $grid_values['user__in'] : [];
	$user__not_in = ! empty( $grid_values['user__not_in'] ) ? $grid_values['user__not_in'] : [];
	$user_ids     = array_merge( (array) $author__in, (array) $user__in, (array) $user__not_in );
	$user_options = Helpers::get_users( $user_ids );

	// Prepare tax query select options.
	$tax_query   = ! empty( $grid_values['tax_query'] ) ? $grid_values['tax_query'] : [];
	$tax_options = Helpers::get_taxonomy_terms( (array) $tax_query );

	// Prepare term select options.
	$term__in     = ! empty( $grid_values['term__in'] ) ? $grid_values['term__in'] : [];
	$term__not_in = ! empty( $grid_values['term__not_in'] ) ? $grid_values['term__not_in'] : [];
	$term_ids     = array_merge( (array) $term__in, (array) $term__not_in );
	$term_options = Helpers::get_terms( $term_ids, [] );

	// Prepare post select options.
	$post__in     = ! empty( $grid_values['post__in'] ) ? $grid_values['post__in'] : [];
	$post__not_in = ! empty( $grid_values['post__not_in'] ) ? $grid_values['post__not_in'] : [];
	$post_ids     = array_merge( (array) $post__in, (array) $post__not_in );
	$post_options = Helpers::get_posts( $post_ids );

	$custom_cards  = apply_filters( 'wp_grid_builder/cards', [] );
	$builder_cards = ! empty( $grid_values['cards'] ) ? $grid_values['cards'] : [];
	$builder_cards = array_values( $builder_cards );
	$builder_cards = array_unique( $builder_cards );
	$builder_cards = ! empty( $builder_cards ) ? Database::query_results(
		[
			'select' => 'id, name',
			'from'   => 'cards',
			'id'     => $builder_cards,
		]
	) : [];

	foreach ( $builder_cards as $card ) {
		$card_options[ (int) $card['id'] ] = esc_html( $card['name'] );
	}

	foreach ( $custom_cards as $slug => $args ) {
		$card_options[ esc_html( $slug ) ] = esc_html( $args['name'] );
	}
}

$card_link = add_query_arg(
	[
		'page'   => WPGB_SLUG . '-card-builder',
		'create' => 'true',
	],
	admin_url( 'admin.php' )
);

$demo_link = add_query_arg(
	[ 'page' => WPGB_SLUG . '-cards' ],
	admin_url( 'admin.php' )
);

$naming = [
	// name.
	[
		'id'          => 'name',
		'type'        => 'text',
		'label'       => __( 'Grid Name', 'wp-grid-builder' ),
		'placeholder' => __( 'Enter a grid name', 'wp-grid-builder' ),
		'value'       => $grid_name,
		'width'       => 380,
	],
	// class.
	[
		'id'          => 'class',
		'type'        => 'text',
		'label'       => __( 'Custom CSS Class', 'wp-grid-builder' ),
		'placeholder' => __( 'Enter a class name', 'wp-grid-builder' ),
		'width'       => 380,
	],
	// id.
	[
		'id'       => 'id',
		'type'     => 'text',
		'label'    => __( 'Generated CSS Class', 'wp-grid-builder' ),
		'width'    => 380,
		'disabled' => true,
		'value'    => empty( $grid_id ) ? __( 'Please save the grid to generate the CSS class.', 'wp-grid-builder' ) : 'wpgb-grid-' . $grid_id,
		'tooltip'  => __( 'Useful to target a particular grid with CSS or JS.', 'wp-grid-builder' ),
	],
	// shortcode.
	[
		'id'       => 'shortcode',
		'type'     => 'text',
		'label'    => __( 'Generated Shortcode', 'wp-grid-builder' ),
		'width'    => 380,
		'disabled' => true,
		'value'    => empty( $grid_id ) ? __( 'Please save the grid to generate the shortcode.', 'wp-grid-builder' ) : '[wpgb_grid id="' . $grid_id . '"]',
		'tooltip'  => __( 'Copy/paste this shortcode anywhere in a post/page to display a grid.', 'wp-grid-builder' ),
	],
];

$error_messages = [
	// no_posts_msg.
	[
		'id'          => 'no_posts_msg',
		'type'        => 'text',
		'label'       => __( 'No Content Message', 'wp-grid-builder' ),
		'placeholder' => __( 'Sorry, no content found.', 'wp-grid-builder' ),
		'width'       => 380,
	],
	// no_results_msg.
	[
		'id'          => 'no_results_msg',
		'type'        => 'text',
		'label'       => __( 'No Results Message', 'wp-grid-builder' ),
		'placeholder' => __( 'Sorry, no results match your search criteria.', 'wp-grid-builder' ),
		'width'       => 380,
	],
];

$content_type = [
	// source.
	[
		'id'      => 'source',
		'type'    => 'radio',
		'options' => [
			'post_type' => __( 'Post Types', 'wp-grid-builder' ),
			'term'      => __( 'Terms', 'wp-grid-builder' ),
			'user'      => __( 'Users', 'wp-grid-builder' ),
		],
		'icons'   => [
			'post_type' => Helpers::get_icon( 'post-type', true ),
			'term'      => Helpers::get_icon( 'post-terms', true ),
			'user'      => Helpers::get_icon( 'user', true ),
		],
	],
];

$items_number = [
	// posts_per_page.
	[
		'id'      => 'posts_per_page',
		'type'    => 'number',
		'label'   => __( 'Items Per Page', 'wp-grid-builder' ),
		'tooltip' => __( '"-1" to show all items. "0" corresponds to the default number of posts per page set in WordPress Settings.', 'wp-grid-builder' ),
		'min'     => -1,
		'max'     => 100,
		'step'    => 1,
		'width'   => 80,
	],
	// offset.
	[
		'id'                => 'offset',
		'type'              => 'number',
		'label'             => __( 'Offset Items By', 'wp-grid-builder' ),
		'tooltip'           => __( 'The "offset" parameter is ignored when the number of items per page is set to "-1" (show all items).', 'wp-grid-builder' ),
		'min'               => 0,
		'max'               => 999,
		'step'              => 1,
		'width'             => 80,
		'conditional_logic' => [
			[
				'field'   => 'source',
				'compare' => 'IN',
				'value'   => [ 'post_type', 'user', 'term' ],
			],
		],
	],
];

$queried_users = [
	// role.
	[
		'id'          => 'role',
		'type'        => 'select',
		'label'       => __( 'Users Roles', 'wp-grid-builder' ),
		'placeholder' => _x( 'Any', 'Users Roles default value', 'wp-grid-builder' ),
		'tooltip'     => __( 'Roles that users must match. Users must match each selected role.', 'wp-grid-builder' ),
		'options'     => $user_roles,
		'multiple'    => true,
		'search'      => true,
		'width'       => 380,
	],
	// role__in.
	[
		'id'          => 'role__in',
		'type'        => 'select',
		'label'       => __( 'Include Roles', 'wp-grid-builder' ),
		'placeholder' => _x( 'None', 'Include Roles default value', 'wp-grid-builder' ),
		'tooltip'     => __( 'Users must have at least one of the selected roles.', 'wp-grid-builder' ),
		'options'     => $user_roles,
		'multiple'    => true,
		'width'       => 380,
	],
	// role__not_in.
	[
		'id'          => 'role__not_in',
		'type'        => 'select',
		'label'       => __( 'Exclude Roles', 'wp-grid-builder' ),
		'placeholder' => _x( 'None', 'Exclude Roles default value', 'wp-grid-builder' ),
		'tooltip'     => __( 'Users matching one or more of the selected roles will not be included in results.', 'wp-grid-builder' ),
		'options'     => $user_roles,
		'multiple'    => true,
		'width'       => 380,
	],
	// user__in.
	[
		'id'                => 'user__in',
		'type'              => 'select',
		'label'             => __( 'Include Users', 'wp-grid-builder' ),
		'placeholder'       => _x( 'None', 'Include Users default value', 'wp-grid-builder' ),
		'options'           => $user_options,
		'async'             => 'search_users',
		'multiple'          => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'user__not_in',
				'compare' => '==',
				'value'   => '',
			],
		],
	],
	// user__not_in.
	[
		'id'                => 'user__not_in',
		'type'              => 'select',
		'label'             => __( 'Exclude Users', 'wp-grid-builder' ),
		'placeholder'       => _x( 'None', 'Exclude Users default value', 'wp-grid-builder' ),
		'options'           => $user_options,
		'async'             => 'search_users',
		'multiple'          => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'user__in',
				'compare' => '==',
				'value'   => '',
			],
		],
	],
	// has_published_posts.
	[
		'id'          => 'has_published_posts',
		'type'        => 'select',
		'label'       => __( 'Has Published Posts In', 'wp-grid-builder' ),
		'placeholder' => __( 'All post types', 'wp-grid-builder' ),
		'tooltip'     => __( 'Filter results to users who have published posts in the selected post types.', 'wp-grid-builder' ),
		'options'     => $post_types,
		'multiple'    => true,
		'search'      => true,
		'width'       => 380,
	],
];

$queried_taxonomy_terms = [
	// taxonomy.
	[
		'id'          => 'taxonomy',
		'type'        => 'select',
		'label'       => __( 'Taxonomies', 'wp-grid-builder' ),
		'placeholder' => _x( 'Any', 'Taxonomies default value', 'wp-grid-builder' ),
		'tooltip'     => __( 'Taxonomies, to which results should be limited.', 'wp-grid-builder' ),
		'options'     => $taxonomies,
		'multiple'    => true,
		'search'      => true,
		'width'       => 380,
	],
	// term__in.
	[
		'id'                => 'term__in',
		'type'              => 'select',
		'label'             => __( 'Include Terms', 'wp-grid-builder' ),
		'placeholder'       => _x( 'None', 'Include Terms default value', 'wp-grid-builder' ),
		'options'           => $term_options,
		'async'             => 'search_terms',
		'multiple'          => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'term__not_in',
				'compare' => '==',
				'value'   => '',
			],
		],
	],
	// term__not_in.
	[
		'id'                => 'term__not_in',
		'type'              => 'select',
		'label'             => __( 'Exclude Terms', 'wp-grid-builder' ),
		'placeholder'       => _x( 'None', 'Exclude Terms default value', 'wp-grid-builder' ),
		'options'           => $term_options,
		'async'             => 'search_terms',
		'multiple'          => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'term__in',
				'compare' => '==',
				'value'   => '',
			],
		],
	],
	// hide_empty.
	[
		'id'      => 'hide_empty',
		'type'    => 'toggle',
		'label'   => __( 'Hide Empty Terms', 'wp-grid-builder' ),
		'tooltip' => __( 'Whether to hide terms not assigned to any posts.', 'wp-grid-builder' ),
	],
	// childless.
	[
		'id'      => 'childless',
		'type'    => 'toggle',
		'label'   => __( 'Childless Terms', 'wp-grid-builder' ),
		'tooltip' => __( 'Limit results to terms that have no children.', 'wp-grid-builder' ),
	],
];

$queried_posts = [
	// post_type.
	[
		'id'          => 'post_type',
		'type'        => 'select',
		'label'       => __( 'Post Types', 'wp-grid-builder' ),
		'placeholder' => _x( 'Any', 'Post Types default value', 'wp-grid-builder' ),
		'options'     => $post_types,
		'multiple'    => true,
		'search'      => true,
		'width'       => 380,
	],
	// post_status.
	[
		'id'          => 'post_status',
		'type'        => 'select',
		'label'       => _x( 'Post Status', 'plural', 'wp-grid-builder' ),
		'placeholder' => __( 'Default', 'wp-grid-builder' ),
		'tooltip'     => __( 'Default value is "published", but if the user is logged in, "private" is added (according to WordPress).', 'wp-grid-builder' ),
		'options'     => $post_status,
		'multiple'    => true,
		'search'      => true,
		'width'       => 380,
	],
	// author__in.
	[
		'id'          => 'author__in',
		'type'        => 'select',
		'label'       => __( 'Post Authors', 'wp-grid-builder' ),
		'placeholder' => _x( 'Any', 'Post Authors default value', 'wp-grid-builder' ),
		'options'     => $user_options,
		'async'       => 'search_users',
		'multiple'    => true,
		'width'       => 380,
	],
	// post__in.
	[
		'id'                => 'post__in',
		'type'              => 'select',
		'label'             => __( 'Include Posts', 'wp-grid-builder' ),
		'placeholder'       => _x( 'None', 'Include Posts default value', 'wp-grid-builder' ),
		'options'           => $post_options,
		'async'             => 'search_posts',
		'multiple'          => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'post__not_in',
				'compare' => '==',
				'value'   => '',
			],
		],
	],
	// post__not_in.
	[
		'id'                => 'post__not_in',
		'type'              => 'select',
		'label'             => __( 'Exclude Posts', 'wp-grid-builder' ),
		'placeholder'       => _x( 'None', 'Exclude Posts default value', 'wp-grid-builder' ),
		'options'           => $post_options,
		'async'             => 'search_posts',
		'multiple'          => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'post__in',
				'compare' => '==',
				'value'   => '',
			],
		],
	],
	// post_mime_type.
	[
		'id'                => 'post_mime_type',
		'type'              => 'select',
		'label'             => __( 'Mime Types', 'wp-grid-builder' ),
		'placeholder'       => _x( 'Any', 'Mime Types default value', 'wp-grid-builder' ),
		'multiple'          => true,
		'width'             => 380,
		'options'           => [
			'image'       => __( 'Image', 'wp-grid-builder' ),
			'video'       => __( 'Video', 'wp-grid-builder' ),
			'audio'       => __( 'Audio', 'wp-grid-builder' ),
			'text'        => __( 'Text', 'wp-grid-builder' ),
			'application' => __( 'Applications', 'wp-grid-builder' ),
		],
		'conditional_logic' => [
			[
				'field'   => 'post_type',
				'compare' => '==',
				'value'   => 'attachment',
			],
			[
				'field'   => 'attachment_ids',
				'compare' => '==',
				'value'   => [],
			],
		],
	],
	// attachment_ids.
	[
		'id'                => 'attachment_ids',
		'type'              => 'gallery',
		'label'             => __( 'Include Media', 'wp-grid-builder' ),
		'tooltip'           => __( 'Drag &#38; drop media to create a custom order (only works if you have "Media" as unique post type). If no media are added, all media from your library will be queried.', 'wp-grid-builder' ),
		'mime_type'         => [],
		'conditional_logic' => [
			[
				'field'   => 'post_type',
				'compare' => 'CONTAINS',
				'value'   => 'attachment',
			],
		],
	],
];

$queried_order = [
	// orderby.
	[
		'id'                => 'orderby',
		'type'              => 'select',
		'label'             => __( 'Order By', 'wp-grid-builder' ),
		'placeholder'       => __( 'Post date (default)', 'wp-grid-builder' ),
		'options'           => [
			'none'           => __( 'None', 'wp-grid-builder' ),
			'ID'             => __( 'Post ID', 'wp-grid-builder' ),
			'title'          => __( 'Post title', 'wp-grid-builder' ),
			'name'           => __( 'Post name (slug)', 'wp-grid-builder' ),
			'author'         => __( 'Post author', 'wp-grid-builder' ),
			'date'           => __( 'Post date', 'wp-grid-builder' ),
			'modified'       => __( 'Post modified date', 'wp-grid-builder' ),
			'parent'         => __( 'Post parent ID', 'wp-grid-builder' ),
			'post__in'       => __( 'Included posts', 'wp-grid-builder' ),
			'rand'           => __( 'Random order', 'wp-grid-builder' ),
			'menu_order'     => __( 'Menu order', 'wp-grid-builder' ),
			'meta_value'     => __( 'Custom field', 'wp-grid-builder' ),
			'meta_value_num' => __( 'Numeric custom field', 'wp-grid-builder' ),
			'comment_count'  => __( 'Number of comments', 'wp-grid-builder' ),
		],
		'multiple'          => true,
		'search'            => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'source',
				'compare' => '===',
				'value'   => 'post_type',
			],
		],
	],
	// user_orderby.
	[
		'id'                => 'user_orderby',
		'type'              => 'select',
		'label'             => __( 'Order By', 'wp-grid-builder' ),
		'placeholder'       => __( 'User login (default)', 'wp-grid-builder' ),
		'options'           => [
			'none'            => __( 'None', 'wp-grid-builder' ),
			'ID'              => __( 'User ID', 'wp-grid-builder' ),
			'display_name'    => __( 'User display name', 'wp-grid-builder' ),
			'user_name'       => __( 'User name', 'wp-grid-builder' ),
			'user_login'      => __( 'User login', 'wp-grid-builder' ),
			'user_nicename'   => __( 'User nicename', 'wp-grid-builder' ),
			'user_email'      => __( 'User email', 'wp-grid-builder' ),
			'user_url'        => __( 'User url', 'wp-grid-builder' ),
			'user_registered' => __( 'User registered date', 'wp-grid-builder' ),
			'include'         => __( 'Included users', 'wp-grid-builder' ),
			'post_count'      => __( 'Post count', 'wp-grid-builder' ),
			'meta_value'      => __( 'Custom field', 'wp-grid-builder' ),
			'meta_value_num'  => __( 'Numeric custom field', 'wp-grid-builder' ),
		],
		'multiple'          => true,
		'search'            => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'source',
				'compare' => '===',
				'value'   => 'user',
			],
		],
	],
	// term_orderby.
	[
		'id'                => 'term_orderby',
		'type'              => 'select',
		'label'             => __( 'Order By', 'wp-grid-builder' ),
		'placeholder'       => __( 'Term name (default)', 'wp-grid-builder' ),
		'options'           => [
			'none'           => __( 'None', 'wp-grid-builder' ),
			'term_id'        => __( 'Term ID', 'wp-grid-builder' ),
			'name'           => __( 'Term name', 'wp-grid-builder' ),
			'slug'           => __( 'Term slug', 'wp-grid-builder' ),
			'description'    => __( 'Term description', 'wp-grid-builder' ),
			'parent'         => __( 'Term parent', 'wp-grid-builder' ),
			'term_order'     => __( 'Term order', 'wp-grid-builder' ),
			'term_group'     => __( 'Term group', 'wp-grid-builder' ),
			'count'          => __( 'Term count', 'wp-grid-builder' ),
			'include'        => __( 'Included terms', 'wp-grid-builder' ),
			'meta_value'     => __( 'Custom field', 'wp-grid-builder' ),
			'meta_value_num' => __( 'Numeric custom field', 'wp-grid-builder' ),
		],
		'multiple'          => true,
		'search'            => true,
		'width'             => 380,
		'conditional_logic' => [
			[
				'field'   => 'source',
				'compare' => '===',
				'value'   => 'term',
			],
		],
	],
	// order.
	[
		'id'      => 'order',
		'type'    => 'radio',
		'label'   => __( 'Order', 'wp-grid-builder' ),
		'options' => [
			'DESC' => __( 'Descending', 'wp-grid-builder' ),
			'ASC'  => __( 'Ascending', 'wp-grid-builder' ),
		],
		'width'   => 380,
	],
	// meta_key.
	[
		'id'                => 'meta_key',
		'type'              => 'text',
		'label'             => __( 'Custom Field', 'wp-grid-builder' ),
		'placeholder'       => __( 'Enter a field name', 'wp-grid-builder' ),
		'width'             => 380,
		'conditional_logic' => [
			'relation' => 'OR',
			[
				'field'   => 'orderby',
				'compare' => 'CONTAINS',
				'value'   => 'meta_value',
			],
			[
				'field'   => 'user_orderby',
				'compare' => 'CONTAINS',
				'value'   => 'meta_value',
			],
			[
				'field'   => 'term_orderby',
				'compare' => 'CONTAINS',
				'value'   => 'meta_value',
			],
		],
	],
];

$queried_terms = [
	// tax_query.
	[
		'id'          => 'tax_query',
		'type'        => 'select',
		'label'       => __( 'Taxonomy Terms', 'wp-grid-builder' ),
		'placeholder' => _x( 'Any', 'Taxonomy terms default value', 'wp-grid-builder' ),
		'tooltip'     => __( 'Show posts associated with certain taxonomy.', 'wp-grid-builder' ),
		'options'     => $tax_options,
		'async'       => 'search_taxonomy_terms',
		'multiple'    => true,
		'width'       => 380,
	],
	// tax_query_operator.
	[
		'id'      => 'tax_query_operator',
		'type'    => 'radio',
		'label'   => __( 'Terms Operator', 'wp-grid-builder' ),
		'tooltip' => __( 'Operator to test selected terms. By default queried posts must include selected terms.', 'wp-grid-builder' ),
		'options' => [
			'IN'     => __( 'Include', 'wp-grid-builder' ),
			'NOT IN' => __( 'Exclude', 'wp-grid-builder' ),
		],
	],
	// tax_query_relation.
	[
		'id'      => 'tax_query_relation',
		'type'    => 'radio',
		'label'   => __( 'Terms Relation', 'wp-grid-builder' ),
		'tooltip' => __( 'Logical relationship between each taxonomy term.', 'wp-grid-builder' ),
		'options' => [
			'OR'  => __( 'OR', 'wp-grid-builder' ),
			'AND' => __( 'AND', 'wp-grid-builder' ),
		],
	],
	// tax_query_children.
	[
		'id'      => 'tax_query_children',
		'type'    => 'toggle',
		'label'   => __( 'Child Terms', 'wp-grid-builder' ),
		'tooltip' => __( 'Include children for hierarchical taxonomies.', 'wp-grid-builder' ),
	],
];

$queried_meta_data = [
	// meta_query.
	[
		'id'      => 'meta_query',
		'type'    => 'meta_query',
		'tooltip' => __( 'Show content associated with a certain custom field.', 'wp-grid-builder' ),
		'fields'  => [
			'relation' => [
				'id'      => 'relation',
				'type'    => 'select',
				'label'   => __( 'Relation', 'wp-grid-builder' ),
				'width'   => 80,
				'options' => [
					'AND' => __( 'AND', 'wp-grid-builder' ),
					'OR'  => __( 'OR', 'wp-grid-builder' ),
				],
			],
			'key'      => [
				'id'    => 'key',
				'type'  => 'text',
				'label' => __( 'Field Key', 'wp-grid-builder' ),
				'width' => 248,
			],
			'compare'  => [
				'id'      => 'compare',
				'type'    => 'select',
				'label'   => __( 'Compare With', 'wp-grid-builder' ),
				'width'   => 248,
				'options' => [
					'='           => __( 'Equals (=)', 'wp-grid-builder' ),
					'!='          => __( 'Does not equal (!=)', 'wp-grid-builder' ),
					'>'           => __( 'Greater than (>)', 'wp-grid-builder' ),
					'>='          => __( 'Greater than or equal to (>=)', 'wp-grid-builder' ),
					'<'           => __( 'Less than (&lt;)', 'wp-grid-builder' ),
					'<='          => __( 'Less than or equal to (&lt;=)', 'wp-grid-builder' ),
					'LIKE'        => __( 'Like', 'wp-grid-builder' ),
					'NOT LIKE'    => __( 'Not like', 'wp-grid-builder' ),
					'IN'          => __( 'In', 'wp-grid-builder' ),
					'NOT IN'      => __( 'Not in', 'wp-grid-builder' ),
					'BETWEEN'     => __( 'Between', 'wp-grid-builder' ),
					'NOT BETWEEN' => __( 'Not between', 'wp-grid-builder' ),
					'EXISTS'      => __( 'Exists', 'wp-grid-builder' ),
					'NOT EXISTS'  => __( 'Not exists', 'wp-grid-builder' ),
				],
			],
			'value'    => [
				'id'    => 'value',
				'type'  => 'text',
				'label' => __( 'Field Value', 'wp-grid-builder' ),
				'width' => 248,
			],
			'type'     => [
				'id'      => 'type',
				'type'    => 'select',
				'label'   => __( 'Field Type', 'wp-grid-builder' ),
				'width'   => 248,
				'options' => [
					'CHAR'     => __( 'Character', 'wp-grid-builder' ),
					'NUMERIC'  => __( 'Numeric', 'wp-grid-builder' ),
					'BINARY'   => __( 'Binary', 'wp-grid-builder' ),
					'DATE'     => __( 'Date', 'wp-grid-builder' ),
					'DATETIME' => __( 'Date time', 'wp-grid-builder' ),
					'TIME'     => __( 'Time', 'wp-grid-builder' ),
					'DECIMAL'  => __( 'Decimal', 'wp-grid-builder' ),
					'SIGNED'   => __( 'Signed', 'wp-grid-builder' ),
					'UNSIGNED' => __( 'Unsigned', 'wp-grid-builder' ),
				],
			],
		],
	],
];

$media_formats = [
	// post_formats.
	[
		'id'      => 'post_formats',
		'type'    => 'checkbox',
		'tooltip' => __( 'If no post formats are selected, only image will be displayed in cards (if available).', 'wp-grid-builder' ),
		'options' => [
			'gallery' => __( 'Gallery', 'wp-grid-builder' ),
			'audio'   => __( 'Audio', 'wp-grid-builder' ),
			'video'   => __( 'Video', 'wp-grid-builder' ),
		],
		'icons'   => [
			'gallery' => Helpers::get_icon( 'gallery-large', true ),
			'audio'   => Helpers::get_icon( 'audio-large', true ),
			'video'   => Helpers::get_icon( 'video-large', true ),
		],
	],
	// first_media.
	[
		'id'                => 'first_media',
		'type'              => 'toggle',
		'label'             => __( 'First Media Content', 'wp-grid-builder' ),
		'tooltip'           => __( 'Fetch first media in post content if missing (according to the post format).', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'source',
				'compare' => '===',
				'value'   => 'post_type',
			],
		],
	],
	// gallery_slideshow.
	[
		'id'                => 'gallery_slideshow',
		'type'              => 'toggle',
		'label'             => __( 'Gallery Slideshow', 'wp-grid-builder' ),
		'tooltip'           => __( 'Enable slideshow for gallery post format.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'post_formats',
				'compare' => 'CONTAINS',
				'value'   => 'gallery',
			],
		],
	],
	// product_image_hover.
	class_exists( 'WooCommerce' ) ? [
		'id'                => 'product_image_hover',
		'type'              => 'toggle',
		'label'             => __( 'Product Image Hover', 'wp-grid-builder' ),
		'tooltip'           => __( 'Reveal first gallery image when hovering the main product image (WooCommerce).', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'post_type',
				'compare' => 'CONTAINS',
				'value'   => 'product',
			],
		],
	] : '',
	// embed_video_poster.
	[
		'id'                => 'embedded_video_poster',
		'type'              => 'toggle',
		'label'             => __( 'Embedded Video Posters', 'wp-grid-builder' ),
		'tooltip'           => __( 'Automatically fetches embedded video posters (Youtube, Vimeo and Wistia).', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'post_formats',
				'compare' => 'CONTAINS',
				'value'   => 'video',
			],
		],
	],
	// video_lightbox.
	[
		'id'                => 'video_lightbox',
		'type'              => 'toggle',
		'label'             => __( 'Open Videos in Lightbox', 'wp-grid-builder' ),
		'tooltip'           => __( 'When disabled, videos will be played in cards.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'post_formats',
				'compare' => 'CONTAINS',
				'value'   => 'video',
			],
		],
	],
];

$default_thumbnail = [
	// default_thumbnail.
	[
		'id'      => 'default_thumbnail',
		'type'    => 'image',
		'tooltip' => __( 'Add a default thumbnail in each grid card if missing.', 'wp-grid-builder' ),
	],
];

$thumbnail_ratio = [
	// thumbnail_aspect.
	[
		'id'      => 'thumbnail_aspect',
		'type'    => 'toggle',
		'label'   => __( 'Override Aspect Ratio', 'wp-grid-builder' ),
		'tooltip' => __( 'Allows to set the same image aspect ratio for all thumbnails in the grid.', 'wp-grid-builder' ),
	],
	// thumbnail_ratio.
	[
		'id'                => 'thumbnail_ratio',
		'type'              => 'group',
		'label'             => __( 'Thumbnail Aspect Ratio', 'wp-grid-builder' ),
		'group_names'       => true,
		'separator'         => '&nbsp;:&nbsp;',
		'fields'            => [
			[
				'id'    => 'x',
				'type'  => 'number',
				'min'   => 1,
				'max'   => 999,
				'width' => 64,
			],
			[
				'id'    => 'y',
				'type'  => 'number',
				'min'   => 1,
				'max'   => 999,
				'width' => 64,
			],
		],
		'conditional_logic' => [
			[
				'field'   => 'thumbnail_aspect',
				'compare' => '==',
				'value'   => 1,
			],
		],
	],
];

$thumbnail_sizes = [
	// thumbnail_size.
	[
		'id'      => 'thumbnail_size',
		'type'    => 'select',
		'label'   => __( 'Desktop Size', 'wp-grid-builder' ),
		'options' => $image_sizes,
		'width'   => 380,
	],
	// thumbnail_size_mobile.
	[
		'id'          => 'thumbnail_size_mobile',
		'type'        => 'select',
		'label'       => __( 'Mobile Size', 'wp-grid-builder' ),
		'options'     => $image_sizes,
		'description' => sprintf(
			/* translators: %s: Settings panel url */
			__( 'Additional image sizes can be set in the <a href="%s" target="_blank">plugin settings</a>.', 'wp-grid-builder' ),
			esc_url( add_query_arg( 'page', WPGB_SLUG . '-settings&tab=sizes', admin_url( 'admin.php' ) ) )
		),
		'width'       => 380,
	],
];

$layout_type = [
	// type.
	[
		'id'      => 'type',
		'type'    => 'radio',
		'options' => [
			'masonry'   => __( 'Masonry', 'wp-grid-builder' ),
			'metro'     => __( 'Metro', 'wp-grid-builder' ),
			'justified' => __( 'Justified', 'wp-grid-builder' ),
		],
		'icons'   => [
			'masonry'   => Helpers::get_icon( 'masonry-grid-large', true ),
			'metro'     => Helpers::get_icon( 'metro-grid-large', true ),
			'justified' => Helpers::get_icon( 'justified-grid-large', true ),
		],
	],
	// full_width.
	[
		'id'      => 'full_width',
		'type'    => 'toggle',
		'label'   => __( 'Full Width', 'wp-grid-builder' ),
		'tooltip' => __( 'Fills the entire browser width.', 'wp-grid-builder' ),
	],
];

$cards_position = [
	// horizontal_order.
	[
		'id'                => 'horizontal_order',
		'type'              => 'toggle',
		'label'             => __( 'Horizontal Order', 'wp-grid-builder' ),
		'tooltip'           => __( 'Lays out cards to (mostly) maintain horizontal left-to-right order. By default, a Masonry grid is ordered vertically from top-to-bottom.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'masonry',
			],
		],
	],
	// fit_rows.
	[
		'id'                => 'fit_rows',
		'type'              => 'toggle',
		'label'             => __( 'Fit into Rows', 'wp-grid-builder' ),
		'tooltip'           => __( 'Arrange cards into rows. Rows progress vertically. Similar to what you would expect from a classic column layout.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'masonry',
			],
		],
	],
	// equal_columns.
	[
		'id'                => 'equal_columns',
		'type'              => 'toggle',
		'label'             => __( 'Equal Height Columns', 'wp-grid-builder' ),
		'tooltip'           => __( 'Equalize column heights in each row in order to create a perfect Masonry layout.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'masonry',
			],
		],
	],
	// equal_rows.
	[
		'id'                => 'equal_rows',
		'type'              => 'toggle',
		'label'             => __( 'Equal Height Rows', 'wp-grid-builder' ),
		'tooltip'           => __( 'Equalize row heights in order to create a perfect Justified layout. This option will crop images.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'justified',
			],
		],
	],
	// fill_last_row.
	[
		'id'                => 'fill_last_row',
		'type'              => 'toggle',
		'label'             => __( 'Fill Last Row', 'wp-grid-builder' ),
		'tooltip'           => __( 'Force the last row to be fully filled by cards. This option will crop images.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'justified',
			],
			[
				'field'   => 'layout',
				'compare' => '===',
				'value'   => 'vertical',
			],
		],
	],
	// center_last_row.
	[
		'id'                => 'center_last_row',
		'type'              => 'toggle',
		'label'             => __( 'Center Last Row', 'wp-grid-builder' ),
		'tooltip'           => __( 'Center cards in the lasy row.', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'justified',
			],
			[
				'field'   => 'layout',
				'compare' => '===',
				'value'   => 'vertical',
			],
		],
	],
];

$cards_layout = [
	// layout.
	[
		'id'      => 'layout',
		'type'    => 'radio',
		'options' => [
			'vertical'   => __( 'Standard', 'wp-grid-builder' ),
			'horizontal' => __( 'Carousel', 'wp-grid-builder' ),
		],
		'icons'   => [
			'vertical'   => Helpers::get_icon( 'vertical-layout', true ),
			'horizontal' => Helpers::get_icon( 'horizontal-layout', true ),
		],
	],
];

$slide_positions = [
	// initial_index.
	[
		'id'      => 'initial_index',
		'type'    => 'number',
		'label'   => __( 'Initial Slide Index', 'wp-grid-builder' ),
		'tooltip' => __( 'Zero-based index of the initial selected slide in the carousel.', 'wp-grid-builder' ),
		'width'   => 68,
		'min'     => 0,
		'max'     => 999,
	],
	// contain.
	[
		'id'      => 'contain',
		'type'    => 'toggle',
		'label'   => __( 'Contain Slides', 'wp-grid-builder' ),
		'tooltip' => __( 'Contains slides to carousel to prevent excess scroll at beginning or end.', 'wp-grid-builder' ),
		'min'     => 1,
		'max'     => 999,
	],
	// slide_align.
	[
		'id'      => 'slide_align',
		'type'    => 'radio',
		'label'   => __( 'Slides Alignment', 'wp-grid-builder' ),
		'options' => [
			'left'   => __( 'Left', 'wp-grid-builder' ),
			'center' => __( 'Center', 'wp-grid-builder' ),
			'right'  => __( 'Right', 'wp-grid-builder' ),
		],
	],
	// group_cells.
	[
		'id'      => 'group_cells',
		'type'    => 'slider',
		'label'   => __( 'Groups Cards By', 'wp-grid-builder' ),
		'tooltip' => __( 'Groups cards together in slides by a number or viewport percent. Flicking, page dots, and previous/next buttons are mapped to group slides.', 'wp-grid-builder' ),
		'steps'   => [ 1, 1 ],
		'units'   => [ '', '%' ],
		'unit'    => true,
		'min'     => 1,
		'max'     => 100,
	],
	// rows_number.
	[
		'id'                => 'rows_number',
		'type'              => 'slider',
		'label'             => __( 'Number of Rows', 'wp-grid-builder' ),
		'steps'             => [ 1 ],
		'units'             => [ '' ],
		'min'               => 1,
		'max'               => 12,
		'conditional_logic' => [
			[
				'field'   => 'type',
				'compare' => '!==',
				'value'   => 'masonry',
			],
		],
	],
	// auto_play.
	[
		'id'      => 'auto_play',
		'type'    => 'slider',
		'label'   => __( 'Auto Play', 'wp-grid-builder' ),
		'tooltip' => __( 'Auto-playing will pause when mouse is hovered over, and resume when mouse is hovered off.', 'wp-grid-builder' ),
		'steps'   => [ 100 ],
		'units'   => [ 'ms' ],
		'unit'    => false,
		'min'     => 0,
		'max'     => 60000,
	],
];

$physics_behaviour = [
	// draggable.
	[
		'id'      => 'draggable',
		'type'    => 'toggle',
		'label'   => __( 'Draggable', 'wp-grid-builder' ),
		'tooltip' => __( 'Enables dragging and flicking thanks to a pointer (mouse, fingers, etc.).', 'wp-grid-builder' ),
	],
	// free_scroll.
	[
		'id'      => 'free_scroll',
		'type'    => 'toggle',
		'label'   => __( 'Free Scroll', 'wp-grid-builder' ),
		'tooltip' => __( 'Enables content to be freely scrolled and flicked without aligning slides to an end position.', 'wp-grid-builder' ),
		'min'     => 1,
		'max'     => 999,
	],
	// free_friction.
	[
		'id'                => 'free_friction',
		'type'              => 'slider',
		'label'             => __( 'Free Scroll Friction', 'wp-grid-builder' ),
		'tooltip'           => __( 'Friction used when free scrolling. When carousel ends are reached, standard friction is used.', 'wp-grid-builder' ),
		'steps'             => [ 0.001 ],
		'units'             => [ '' ],
		'min'               => 0.001,
		'max'               => 1.000,
		'conditional_logic' => [
			[
				'field'   => 'free_scroll',
				'compare' => '==',
				'value'   => '1',
			],
		],
	],
	// friction.
	[
		'id'      => 'friction',
		'type'    => 'slider',
		'label'   => __( 'Friction', 'wp-grid-builder' ),
		'tooltip' => __( 'Friction slows the movement of carousel. Higher friction makes the carousel feel stickier and less bouncy. Lower friction makes the carousel feel looser and more wobbly.', 'wp-grid-builder' ),
		'steps'   => [ 0.001 ],
		'units'   => [ '' ],
		'min'     => 0.001,
		'max'     => 1.000,
	],
	// attraction.
	[
		'id'      => 'attraction',
		'type'    => 'slider',
		'label'   => __( 'Attraction', 'wp-grid-builder' ),
		'tooltip' => __( 'Attraction attracts the position of the carousel to the selected slide. Higher attraction makes the carousel move faster. Lower makes it move slower.', 'wp-grid-builder' ),
		'steps'   => [ 0.001 ],
		'units'   => [ '' ],
		'min'     => 0.001,
		'max'     => 1,
	],
];

$carousel_appearance = [
	// prev_next_buttons_size.
	[
		'id'    => 'prev_next_buttons_size',
		'type'  => 'slider',
		'label' => __( 'Prev/next Buttons Size', 'wp-grid-builder' ),
		'steps' => [ 1, 0.001, 0.001, 0.01, 0.01 ],
		'units' => [ 'px', 'em', 'rem' ],
		'unit'  => true,
		'min'   => 1,
		'max'   => 100,
	],
	// prev_next_buttons_color.
	[
		'id'    => 'prev_next_buttons_color',
		'type'  => 'color',
		'label' => __( 'Prev/Next Color', 'wp-grid-builder' ),
		'alpha' => true,
	],
	// prev_next_buttons_background.
	[
		'id'       => 'prev_next_buttons_background',
		'type'     => 'color',
		'label'    => __( 'Prev/Next Background', 'wp-grid-builder' ),
		'alpha'    => true,
		'gradient' => true,
	],
	// page_dots_color.
	[
		'id'       => 'page_dots_color',
		'type'     => 'color',
		'label'    => __( 'Page Dots Color', 'wp-grid-builder' ),
		'alpha'    => true,
		'gradient' => true,
	],
	// page_dots_selected_color.
	[
		'id'       => 'page_dots_selected_color',
		'type'     => 'color',
		'label'    => __( 'Page Dots Selected Color', 'wp-grid-builder' ),
		'alpha'    => true,
		'gradient' => true,
	],
];

$grid_builder = [
	// builder-info.
	[
		'id'      => 'builder-info',
		'type'    => 'info',
		'content' =>
			'<strong>' . __( 'Facets can be added anywhere in pages thanks to Gutenberg Blocks, Shortcodes, and Widgets.', 'wp-grid-builder' ) . '</strong><br>' .
			__( 'The following builder is limited and offers a basic solution if you do not use Gutenberg or a page builder.', 'wp-grid-builder' ) . '<br>' .
			__( 'Using Gutenberg or a page builder will offer more possibilities to build your layout.', 'wp-grid-builder' ),
	],
	// grid_layout.
	[
		'id'      => 'grid_layout',
		'type'    => 'builder',
		'tooltip' => __( 'Drag &#38; drop available facets to compose your grid layout. For each layout area you can set alignment, margins, paddings, and background color.', 'wp-grid-builder' ),
		'fields'  => [
			[
				'id'       => 'facets',
				'type'     => 'select',
				'multiple' => true,
				'validate' => false,
			],
			[
				'id'     => 'margins',
				'type'   => 'group',
				'label'  => __( 'Margin', 'wp-grid-builder' ),
				'fields' => [
					[
						'id'    => 'margin-top',
						'type'  => 'text_number',
						'label' => __( 'Top', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => -999,
						'max'   => 999,
						'width' => 70,
					],
					[
						'id'    => 'margin-right',
						'type'  => 'text_number',
						'label' => __( 'Right', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => -999,
						'max'   => 999,
						'width' => 70,
					],
					[
						'id'    => 'margin-bottom',
						'type'  => 'text_number',
						'label' => __( 'Bottom', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => -999,
						'max'   => 999,
						'width' => 70,
					],
					[
						'id'    => 'margin-left',
						'type'  => 'text_number',
						'label' => __( 'Left', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => -999,
						'max'   => 999,
						'width' => 70,
					],
				],
			],
			[
				'id'     => 'paddings',
				'type'   => 'group',
				'label'  => __( 'Padding', 'wp-grid-builder' ),
				'fields' => [
					[
						'id'    => 'padding-top',
						'type'  => 'text_number',
						'label' => __( 'Top', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => 0,
						'max'   => 999,
						'width' => 70,
					],
					[
						'id'    => 'padding-right',
						'type'  => 'text_number',
						'label' => __( 'Right', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => 0,
						'max'   => 999,
						'width' => 70,
					],
					[
						'id'    => 'padding-bottom',
						'type'  => 'text_number',
						'label' => __( 'Bottom', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => 0,
						'max'   => 999,
						'width' => 70,
					],
					[
						'id'    => 'padding-left',
						'type'  => 'text_number',
						'label' => __( 'Left', 'wp-grid-builder' ),
						'steps' => [ 1, 0.01, 0.0001, 0.0001 ],
						'units' => [ 'px', '%', 'em', 'rem' ],
						'min'   => 0,
						'max'   => 999,
						'width' => 70,
					],
				],
			],
			[
				'id'       => 'background',
				'type'     => 'color',
				'label'    => __( 'Background Color', 'wp-grid-builder' ),
				'alpha'    => true,
				'gradient' => true,
			],
			[
				'id'      => 'justify-content',
				'type'    => 'radio',
				'label'   => __( 'Content Alignment', 'wp-grid-builder' ),
				'options' => [
					'flex-start' => __( 'Left', 'wp-grid-builder' ),
					'center'     => __( 'Center', 'wp-grid-builder' ),
					'flex-end'   => __( 'Right', 'wp-grid-builder' ),
				],
			],
		],
	],
];

$cards_aspect = [
	// override_card_sizes.
	[
		'id'      => 'override_card_sizes',
		'type'    => 'toggle',
		'label'   => __( 'Override Card Sizes', 'wp-grid-builder' ),
		'tooltip' => __( 'Override all sizes set for each card in the grid.', 'wp-grid-builder' ),
	],
	// columns.
	[
		'id'                => 'columns',
		'type'              => 'number',
		'label'             => __( 'Columns Number', 'wp-grid-builder' ),
		'min'               => 1,
		'max'               => 12,
		'step'              => 1,
		'width'             => 68,
		'conditional_logic' => [
			[
				'field'   => 'override_card_sizes',
				'compare' => '==',
				'value'   => 1,
			],
		],
	],
	// rows.
	[
		'id'                => 'rows',
		'type'              => 'number',
		'label'             => __( 'Rows Number', 'wp-grid-builder' ),
		'min'               => 1,
		'max'               => 12,
		'step'              => 1,
		'width'             => 68,
		'conditional_logic' => [
			[
				'field'   => 'override_card_sizes',
				'compare' => '==',
				'value'   => 1,
			],
			[
				'field'   => 'type',
				'compare' => '===',
				'value'   => 'metro',
			],
		],
	],
];

$grid_responsivity = [
	// card_sizes.
	[
		'id'      => 'card_sizes',
		'type'    => 'table',
		'class'   => 'wpgb-table-card-sizes',
		'tooltip' => __( 'Card spacing set to "-1" allows to inherit of the previous value and in a recursive way.', 'wp-grid-builder' ),
		'rows'    => [
			[
				'name'  => 'size',
				'icon'  => Helpers::get_icon( 'screen-size-0', true ),
				'label' => '',
			],
			[
				'name'  => 'size',
				'icon'  => Helpers::get_icon( 'screen-size-1', true ),
				'label' => '',
			],
			[
				'name'  => 'size',
				'icon'  => Helpers::get_icon( 'screen-size-2', true ),
				'label' => '',
			],
			[
				'name'  => 'size',
				'icon'  => Helpers::get_icon( 'screen-size-3', true ),
				'label' => '',
			],
			[
				'name'  => 'size',
				'icon'  => Helpers::get_icon( 'screen-size-4', true ),
				'label' => '',
			],
			[
				'name'  => 'size',
				'icon'  => Helpers::get_icon( 'screen-size-5', true ),
				'label' => '',
			],
		],
		'fields'  => [
			[
				'id'    => 'browser',
				'type'  => 'number',
				'label' => __( 'Browser (px)', 'wp-grid-builder' ),
				'min'   => 1,
				'max'   => 9999,
				'step'  => 1,
				'width' => 68,
			],
			[
				'id'    => 'columns',
				'type'  => 'slider',
				'label' => __( 'Columns', 'wp-grid-builder' ),
				'steps' => [ 1 ],
				'units' => [ ' ' . __( 'cols', 'wp-grid-builder' ) ],
				'min'   => 1,
				'max'   => 12,
				'unit'  => false,
				'width' => 80,
			],
			[
				'id'    => 'height',
				'type'  => 'slider',
				'label' => __( 'Row height', 'wp-grid-builder' ),
				'steps' => [ 1 ],
				'units' => [ 'px' ],
				'min'   => 1,
				'max'   => 1000,
				'unit'  => false,
				'width' => 80,
			],
			[
				'id'    => 'gutter',
				'type'  => 'number',
				'label' => __( 'Spacing (px)', 'wp-grid-builder' ),
				'min'   => -1,
				'max'   => 999,
				'step'  => 1,
				'width' => 80,
				'unit'  => 'px',
			],
			[
				'id'          => 'ratio',
				'type'        => 'group',
				'label'       => __( 'Aspect ratio', 'wp-grid-builder' ),
				'group_names' => true,
				'separator'   => '&nbsp;:&nbsp;',
				'fields'      => [
					[
						'id'    => 'x',
						'type'  => 'number',
						'min'   => 1,
						'max'   => 999,
						'step'  => 1,
						'width' => 54,
					],
					[
						'id'    => 'y',
						'type'  => 'number',
						'min'   => 1,
						'max'   => 999,
						'step'  => 1,
						'width' => 54,
					],
				],
			],
		],
	],
];

$default_card = [
	[
		'id'          => 'cards',
		'type'        => 'card',
		'name'        => 'wpgb[cards][default]',
		'value'       => isset( $grid_values['cards']['default'] ) ? $grid_values['cards']['default'] : '',
		'label'       => __( 'Default', 'wp-grid-builder' ),
		'width'       => 240,
		'search'      => true,
		'async'       => 'search_cards',
		'options'     => $card_options,
		'placeholder' => __( 'Default card', 'wp-grid-builder' ),
	],
];

$post_type_cards = [];

foreach ( $post_types as $key => $name ) {

	// Post type cards.
	$post_type_cards[] = [
		'id'                => 'cards',
		'type'              => 'card',
		'name'              => 'wpgb[cards][' . $key . ']',
		'value'             => isset( $grid_values['cards'][ $key ] ) ? $grid_values['cards'][ $key ] : '',
		'label'             => $name,
		'width'             => 240,
		'search'            => true,
		'async'             => 'search_cards',
		'options'           => $card_options,
		'placeholder'       => __( 'Default card', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'post_type',
				'compare' => 'CONTAINS',
				'value'   => $key,
			],
		],
	];

}

$post_format_cards = [];
$post_formats      = get_post_format_strings();
unset( $post_formats['standard'] );

foreach ( $post_formats as $key => $name ) {

	// Post format cards.
	$post_format_cards[] = [
		'id'                => 'cards',
		'type'              => 'card',
		'name'              => 'wpgb[cards][' . $key . ']',
		'value'             => isset( $grid_values['cards'][ $key ] ) ? $grid_values['cards'][ $key ] : '',
		'label'             => $name,
		'width'             => 240,
		'search'            => true,
		'async'             => 'search_cards',
		'options'           => $card_options,
		'placeholder'       => __( 'Default card', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'source',
				'compare' => '===',
				'value'   => 'post_type',
			],
		],
	];

}

$card_colors = [
	// content_background.
	[
		'id'       => 'content_background',
		'type'     => 'color',
		'label'    => __( 'Content Background', 'wp-grid-builder' ),
		'alpha'    => true,
		'gradient' => true,
	],
	// overlay_background.
	[
		'id'       => 'overlay_background',
		'type'     => 'color',
		'label'    => __( 'Overlay Background', 'wp-grid-builder' ),
		'alpha'    => true,
		'gradient' => true,
	],
	// content_color_scheme.
	[
		'id'      => 'content_color_scheme',
		'type'    => 'radio',
		'label'   => __( 'Content Color Scheme', 'wp-grid-builder' ),
		'options' => [
			'light' => __( 'Light', 'wp-grid-builder' ),
			'dark'  => __( 'Dark', 'wp-grid-builder' ),
		],
	],
	// overlay_color_scheme.
	[
		'id'      => 'overlay_color_scheme',
		'type'    => 'radio',
		'label'   => __( 'Overlay Color Scheme', 'wp-grid-builder' ),
		'options' => [
			'light' => __( 'Light', 'wp-grid-builder' ),
			'dark'  => __( 'Dark', 'wp-grid-builder' ),
		],
	],
];

$cards_animation = [
	// animation.
	[
		'id'          => 'animation',
		'type'        => 'select',
		'label'       => __( 'Animation Type', 'wp-grid-builder' ),
		'placeholder' => __( 'Select an animation', 'wp-grid-builder' ),
		'options'     => Animations::get_list( 'name' ),
		'search'      => true,
		'width'       => 262,
	],
	// timing_function.
	[
		'id'      => 'timing_function',
		'type'    => 'select',
		'label'   => __( 'Animation Easing', 'wp-grid-builder' ),
		'search'  => true,
		'width'   => 262,
		'options' => [
			'ease'                                      => 'Ease',
			'linear'                                    => 'Linear',
			'ease-in'                                   => 'Ease In',
			'ease-out'                                  => 'Ease Out',
			'ease-in-out'                               => 'Ease In Out',
			'cubic-bezier(0.550, 0.055, 0.675, 0.190)'  => 'Ease In Cubic',
			'cubic-bezier(0.215, 0.610, 0.355, 1.000)'  => 'Ease Out Cubic',
			'cubic-bezier(0.645, 0.045, 0.355, 1.000)'  => 'Ease In OutCubic',
			'cubic-bezier(0.600, 0.040, 0.980, 0.335)'  => 'Ease In Circ',
			'cubic-bezier(0.075, 0.820, 0.165, 1.000)'  => 'Ease Out Circ',
			'cubic-bezier(0.785, 0.135, 0.150, 0.860)'  => 'Ease In Out Circ',
			'cubic-bezier(0.950, 0.050, 0.795, 0.035)'  => 'Ease In Expo',
			'cubic-bezier(0.190, 1.000, 0.220, 1.000)'  => 'Ease Out Expo',
			'cubic-bezier(1.000, 0.000, 0.000, 1.000)'  => 'Ease In Out Expo',
			'cubic-bezier(0.550, 0.085, 0.680, 0.530)'  => 'Ease In Quad',
			'cubic-bezier(0.250, 0.460, 0.450, 0.940)'  => 'Ease Out Quad',
			'cubic-bezier(0.455, 0.030, 0.515, 0.955)'  => 'Ease In Out Quad',
			'cubic-bezier(0.895, 0.030, 0.685, 0.220)'  => 'Ease In Quart',
			'cubic-bezier(0.165, 0.840, 0.440, 1.000)'  => 'Ease Out Quart',
			'cubic-bezier(0.770, 0.000, 0.175, 1.000)'  => 'Ease In Out Quart',
			'cubic-bezier(0.755, 0.050, 0.855, 0.060)'  => 'Ease In Quint',
			'cubic-bezier(0.230, 1.000, 0.320, 1.000)'  => 'Ease Out Quint',
			'cubic-bezier(0.860, 0.000, 0.070, 1.000)'  => 'Ease In Out Quint',
			'cubic-bezier(0.470, 0.000, 0.745, 0.715)'  => 'Ease In Sine',
			'cubic-bezier(0.390, 0.575, 0.565, 1.000)'  => 'Ease Out Sine',
			'cubic-bezier(0.445, 0.050, 0.550, 0.950)'  => 'Ease In Out Sine',
			'cubic-bezier(0.600, -0.280, 0.735, 0.045)' => 'Ease In Back',
			'cubic-bezier(0.175,  0.885, 0.320, 1.275)' => 'Ease Out Back',
			'cubic-bezier(0.680, -0.550, 0.265, 1.550)' => 'Ease In Out Back',
			'custom'                                    => __( 'Custom Easing', 'wp-grid-builder' ),
		],
	],
	// cubic_bezier_function.
	[
		'id'                => 'cubic_bezier_function',
		'type'              => 'text',
		'width'             => 262,
		'label'             => __( 'Cubic Bezier Function', 'wp-grid-builder' ),
		'conditional_logic' => [
			[
				'field'   => 'timing_function',
				'compare' => '===',
				'value'   => 'custom',
			],
		],
	],
	// transition.
	[
		'id'    => 'transition',
		'type'  => 'slider',
		'label' => __( 'Animation Duration', 'wp-grid-builder' ),
		'steps' => [ 1 ],
		'units' => [ 'ms' ],
		'min'   => 0,
		'max'   => 3000,
	],
	// transition_delay.
	[
		'id'      => 'transition_delay',
		'type'    => 'slider',
		'label'   => __( 'Animation Delay', 'wp-grid-builder' ),
		'tooltip' => __( 'Animation delay, in millisecond, between each card in a grid. It allows to stagger card animations.', 'wp-grid-builder' ),
		'steps'   => [ 1 ],
		'units'   => [ 'ms' ],
		'min'     => 0,
		'max'     => 1000,
	],
	// animation_placeholder.
	[
		'id'      => 'animation_placeholder',
		'type'    => 'custom',
		'content' => sprintf(
			'<br><img class="wpgb-animation-placeholder" width="320" height="270" alt="" src="%s"><br>
			<button type="button" class="wpgb-button wpgb-button-icon wpgb-run-animation wpgb-green">%s%s</button>',
			esc_url( WPGB_URL . 'admin/assets/svg/placeholder.svg' ),
			Helpers::get_icon( 'play', false, false ),
			__( 'Play Animation', 'wp-grid-builder' )
		),
	],
];

$images_loading = [
	// loader.
	[
		'id'      => 'lazy_load',
		'type'    => 'toggle',
		'label'   => __( 'Lazy Load Images', 'wp-grid-builder' ),
		'tooltip' => __( 'Defer the loading of images until there are visible in the viewport.', 'wp-grid-builder' ),
	],
	// lazy_load_spinner.
	[
		'id'      => 'lazy_load_spinner',
		'type'    => 'toggle',
		'label'   => __( 'Loading Spinner', 'wp-grid-builder' ),
		'tooltip' => __( 'Show a loading animation until the image is loaded.', 'wp-grid-builder' ),
		'alpha'   => true,
	],
	// lazy_load_blurred_image.
	[
		'id'      => 'lazy_load_blurred_image',
		'type'    => 'toggle',
		'label'   => __( 'Blurred Image', 'wp-grid-builder' ),
		'tooltip' => __( 'Display a blurred image during loading. This option generates and uploads additional tiny image sizes on your WordPress site.', 'wp-grid-builder' ),
	],
	// lazy_load_background.
	[
		'id'    => 'lazy_load_background',
		'type'  => 'color',
		'label' => __( 'Background Color', 'wp-grid-builder' ),
	],
	// lazy_load_blurred_image.
	[
		'id'    => 'lazy_load_spinner_color',
		'type'  => 'color',
		'label' => __( 'Spinner Color', 'wp-grid-builder' ),
	],
];

$content_loading = [
	// loader.
	[
		'id'      => 'loader',
		'type'    => 'toggle',
		'label'   => __( 'Loader', 'wp-grid-builder' ),
		'tooltip' => __( 'Loader will be displayed when loading content in the grid (loading pages, filtering and sorting).', 'wp-grid-builder' ),
	],
	// loader_color.
	[
		'id'    => 'loader_color',
		'type'  => 'color',
		'label' => __( 'Loader Color', 'wp-grid-builder' ),
		'alpha' => true,
	],
	// loader_size.
	[
		'id'    => 'loader_size',
		'type'  => 'slider',
		'label' => __( 'Loader Size', 'wp-grid-builder' ),
		'steps' => [ 0.01 ],
		'units' => [ 'X' ],
		'min'   => 0.1,
		'max'   => 2,
	],
	// loader_type.
	[
		'id'      => 'loader_type',
		'type'    => 'radio',
		'label'   => __( 'Loader Type', 'wp-grid-builder' ),
		'options' => Loaders::get_list(),
		'html'    => Loaders::get_markup(),
		'width'   => 220,
	],
];

$custom_js = [
	'id'     => 'custom_js_section',
	'tab'    => 'customization',
	'type'   => 'section',
	'title'  => __( 'Custom JavaScript', 'wp-grid-builder' ),
	'fields' => [
		// not-allowed.
		[
			'id'      => 'not-allowed',
			'type'    => 'info',
			'content' => '<strong>' . __( 'You are not allowed to add/edit JavaScript code.', 'wp-grid-builder' ) . '</strong><br>' .
						__( 'Only user with <code>edit_plugins</code> capability and <code>DISALLOW_FILE_EDIT</code> constant set to <code>false</code> can add/edit JavaScript code.', 'wp-grid-builder' ) . '<br>' .
						__( 'This behaviour is the same as the WordPress plugin editor.', 'wp-grid-builder' ),
		],
	],
];

if ( current_user_can( 'edit_plugins' ) ) {

	$custom_js = [
		'id'     => 'custom_js_section',
		'tab'    => 'customization',
		'type'   => 'section',
		'title'  => __( 'Custom JavaScript', 'wp-grid-builder' ),
		'fields' => [
			// custom_js.
			[
				'id'    => 'custom_js',
				'type'  => 'code',
				'mode'  => 'javascript',
				'label' => __( 'Enter your JS code:', 'wp-grid-builder' ),
			],
		],
	];

}

$grid_settings = [
	'id'     => 'grid',
	'header' => [
		'toggle'  => true,
		'buttons' => [
			[
				'title'  => __( 'Preview', 'wp-grid-builder' ),
				'icon'   => 'preview',
				'color'  => 'purple',
				'action' => 'preview',
			],
			[
				'title'  => __( 'Save Changes', 'wp-grid-builder' ),
				'icon'   => 'save',
				'color'  => 'green',
				'action' => 'save',
			],
		],
	],
	'tabs'   => [
		[
			'id'       => 'naming',
			'label'    => __( 'Naming', 'wp-grid-builder' ),
			'title'    => __( 'Naming', 'wp-grid-builder' ),
			'subtitle' => __( 'Define the grid name and messages.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'shortcode', true ),
		],
		[
			'id'       => 'query',
			'label'    => __( 'Content Query', 'wp-grid-builder' ),
			'title'    => __( 'Content Query', 'wp-grid-builder' ),
			'subtitle' => __( 'Set up the content type to query and to display in the grid.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'folder', true ),
		],
		[
			'id'       => 'formats',
			'label'    => __( 'Media Formats', 'wp-grid-builder' ),
			'title'    => __( 'Media Formats', 'wp-grid-builder' ),
			'subtitle' => __( 'Manage the allowed media formats in the cards and their behaviors.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'image', true ),
		],
		[
			'id'       => 'layout',
			'label'    => __( 'Grid Layout', 'wp-grid-builder' ),
			'title'    => __( 'Grid Layout', 'wp-grid-builder' ),
			'subtitle' => __( 'Control the layout of the grid and the card positions.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'grid-outline', true ),
		],
		[
			'id'       => 'carousel',
			'label'    => __( 'Grid Carousel', 'wp-grid-builder' ),
			'title'    => __( 'Grid Carousel', 'wp-grid-builder' ),
			'subtitle' => __( 'Set up the layout and behaviour of slides in the carousel.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'slider', true ),
		],
		[
			'id'       => 'builder',
			'label'    => __( 'Grid Builder', 'wp-grid-builder' ),
			'title'    => __( 'Grid Builder', 'wp-grid-builder' ),
			'subtitle' => __( 'Build the grid layout and add facets to filter the grid content.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'layout', true ),
		],
		[
			'id'       => 'cards',
			'label'    => __( 'Card Styles', 'wp-grid-builder' ),
			'title'    => __( 'Card Styles', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'card', true ),
			'subtitle' => __( 'Assign cards to the different types of content queried in the grid.', 'wp-grid-builder' ) . '<br>' .
			( ! $has_cards ?
				(
					__( 'You don\'t have any card yet. Use the link below to import card demos.', 'wp-grid-builder' ) . '<br><br>' .
					'<a class="wpgb-button wpgb-button-small wpgb-button-icon wpgb-green" href="' . esc_url( $demo_link ) . '" target="_blank">' .
					Helpers::get_icon( 'card', false, false ) .
					__( 'Import Card Demos', 'wp-grid-builder' ) .
					'</a>'
				) : (
					'<br><a class="wpgb-button wpgb-button-small wpgb-button-icon wpgb-green" href="' . esc_url( $card_link ) . '" target="_blank">' .
					Helpers::get_icon( 'card', false, false ) .
					__( 'Create a Card', 'wp-grid-builder' ) .
					'</a>'
				)
			),
		],
		[
			'id'       => 'animations',
			'label'    => __( 'Animations', 'wp-grid-builder' ),
			'title'    => __( 'Animations', 'wp-grid-builder' ),
			'subtitle' => __( 'Add animations to reveal cards when scrolling page.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'animation', true ),
		],
		[
			'id'       => 'loading',
			'label'    => __( 'Loading', 'wp-grid-builder' ),
			'title'    => __( 'Loading', 'wp-grid-builder' ),
			'subtitle' => __( 'Control the loading of images and content in the grid.', 'wp-grid-builder' ),
			'icon'     => Helpers::get_icon( 'load', true ),
		],
		[
			'id'       => 'customization',
			'label'    => __( 'Customization', 'wp-grid-builder' ),
			'title'    => __( 'Customization', 'wp-grid-builder' ),
			'subtitle' => __( 'Customization is not covered by the scope of the support included with the plugin.', 'wp-grid-builder' ) . '<br>' .
						sprintf(
							/* translators: 1: external url, 2: rel external */
							__( 'If you are looking for customization service, we recommend <a href="%1$s" rel="%2$s" target="_blank">Codeable.io</a>.', 'wp-grid-builder' ),
							'https://codeable.io/?ref=paT8V',
							'external noopener noreferrer'
						),
			'icon'     => Helpers::get_icon( 'code', true ),
		],
	],
	'fields' => [
		[
			'id'     => 'naming_section',
			'tab'    => 'naming',
			'type'   => 'section',
			'fields' => $naming,
		],
		[
			'id'     => 'messages_section',
			'tab'    => 'naming',
			'type'   => 'section',
			'title'  => __( 'Error Messages', 'wp-grid-builder' ),
			'fields' => $error_messages,
		],
		[
			'id'     => 'source_type_section',
			'tab'    => 'query',
			'type'   => 'section',
			'title'  => __( 'Content Type', 'wp-grid-builder' ),
			'fields' => $content_type,
		],
		[
			'id'     => 'queried_number_section',
			'tab'    => 'query',
			'type'   => 'section',
			'title'  => __( 'Items Number', 'wp-grid-builder' ),
			'fields' => $items_number,
		],
		[
			'id'                => 'queried_order_section',
			'tab'               => 'query',
			'type'              => 'section',
			'title'             => __( 'Ordering', 'wp-grid-builder' ),
			'fields'            => $queried_order,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => 'IN',
					'value'   => [ 'post_type', 'term', 'user' ],
				],
			],
		],
		[
			'id'                => 'queried_posts_section',
			'tab'               => 'query',
			'type'              => 'section',
			'title'             => __( 'Post Types', 'wp-grid-builder' ),
			'fields'            => $queried_posts,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => '===',
					'value'   => 'post_type',
				],
			],
		],
		[
			'id'                => 'queried_users_section',
			'tab'               => 'query',
			'type'              => 'section',
			'title'             => __( 'Users & Roles', 'wp-grid-builder' ),
			'fields'            => $queried_users,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => '===',
					'value'   => 'user',
				],
			],
		],
		[
			'id'                => 'queried_taxonomies_section',
			'tab'               => 'query',
			'type'              => 'section',
			'title'             => __( 'Taxonomies & Terms', 'wp-grid-builder' ),
			'fields'            => $queried_taxonomy_terms,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => '===',
					'value'   => 'term',
				],
			],
		],
		[
			'id'                => 'queried_terms_section',
			'tab'               => 'query',
			'type'              => 'section',
			'title'             => __( 'Taxonomies', 'wp-grid-builder' ),
			'fields'            => $queried_terms,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => '===',
					'value'   => 'post_type',
				],
			],
		],
		[
			'id'                => 'queried_custom_fields_section',
			'tab'               => 'query',
			'type'              => 'section',
			'title'             => __( 'Custom Fields', 'wp-grid-builder' ),
			'fields'            => $queried_meta_data,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => 'IN',
					'value'   => [ 'post_type', 'term', 'user' ],
				],
			],
		],
		[
			'id'     => 'supported_formats_section',
			'tab'    => 'formats',
			'type'   => 'section',
			'title'  => __( 'Supported Formats', 'wp-grid-builder' ),
			'fields' => $media_formats,
		],
		[
			'id'     => 'default_thumbnail_section',
			'tab'    => 'formats',
			'type'   => 'section',
			'title'  => __( 'Default Thumbnail', 'wp-grid-builder' ),
			'fields' => $default_thumbnail,
		],
		[
			'id'                => 'thumbnail_ratio_section',
			'tab'               => 'formats',
			'type'              => 'section',
			'title'             => __( 'Thumbnail Ratio', 'wp-grid-builder' ),
			'fields'            => $thumbnail_ratio,
			'conditional_logic' => [
				[
					'field'   => 'type',
					'compare' => '===',
					'value'   => 'masonry',
				],
			],
		],
		[
			'id'                => 'thumbnail_sizes_section',
			'tab'               => 'formats',
			'type'              => 'section',
			'title'             => __( 'Thumbnail Sizes', 'wp-grid-builder' ),
			'fields'            => $thumbnail_sizes,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => 'IN',
					'value'   => [ 'post_type', 'term', 'user' ],
				],
			],
		],
		[
			'id'     => 'grid_type_section',
			'tab'    => 'layout',
			'type'   => 'section',
			'title'  => __( 'Layout Type', 'wp-grid-builder' ),
			'fields' => $layout_type,
		],
		[
			'id'                => 'grid_behaviour_section',
			'tab'               => 'layout',
			'type'              => 'section',
			'title'             => __( 'Cards Position', 'wp-grid-builder' ),
			'fields'            => $cards_position,
			'conditional_logic' => [
				[
					'field'   => 'type',
					'compare' => '!==',
					'value'   => 'metro',
				],
			],
		],
		[
			'id'                => 'grid_cards_aspect_section',
			'tab'               => 'layout',
			'type'              => 'section',
			'title'             => __( 'Cards Aspect', 'wp-grid-builder' ),
			'fields'            => $cards_aspect,
			'conditional_logic' => [
				[
					'field'   => 'type',
					'compare' => '!==',
					'value'   => 'justified',
				],
			],
		],
		[
			'id'     => 'responsivity_section',
			'tab'    => 'layout',
			'type'   => 'section',
			'title'  => __( 'Grid Responsivity', 'wp-grid-builder' ),
			'fields' => $grid_responsivity,
		],
		[
			'id'     => 'layout_type_section',
			'tab'    => 'carousel',
			'type'   => 'section',
			'title'  => __( 'Cards Layout', 'wp-grid-builder' ),
			'fields' => $cards_layout,
		],
		[
			'id'                => 'carousel_slides_section',
			'tab'               => 'carousel',
			'type'              => 'section',
			'title'             => __( 'Slide Positions', 'wp-grid-builder' ),
			'fields'            => $slide_positions,
			'conditional_logic' => [
				[
					'field'   => 'layout',
					'compare' => '===',
					'value'   => 'horizontal',
				],
			],
		],
		[
			'id'                => 'carousel_physics_section',
			'tab'               => 'carousel',
			'type'              => 'section',
			'title'             => __( 'Physics Behaviour', 'wp-grid-builder' ),
			'fields'            => $physics_behaviour,
			'conditional_logic' => [
				[
					'field'   => 'layout',
					'compare' => '===',
					'value'   => 'horizontal',
				],
			],
		],
		[
			'id'                => 'carousel_appearance_section',
			'tab'               => 'carousel',
			'type'              => 'section',
			'title'             => __( 'Appearance', 'wp-grid-builder' ),
			'fields'            => $carousel_appearance,
			'conditional_logic' => [
				[
					'field'   => 'layout',
					'compare' => '===',
					'value'   => 'horizontal',
				],
			],
		],
		[
			'id'     => 'grid_builder_section',
			'tab'    => 'builder',
			'type'   => 'section',
			'fields' => $grid_builder,
		],
		[
			'id'     => 'default_card_section',
			'tab'    => 'cards',
			'type'   => 'section',
			'title'  => __( 'Default Card', 'wp-grid-builder' ),
			'fields' => $default_card,
		],
		[
			'id'                => 'post_type_cards_section',
			'tab'               => 'cards',
			'type'              => 'section',
			'title'             => __( 'Post Type Cards', 'wp-grid-builder' ),
			'fields'            => $post_type_cards,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => '===',
					'value'   => 'post_type',
				],
			],
		],
		[
			'id'                => 'post_format_cards_section',
			'tab'               => 'cards',
			'type'              => 'section',
			'title'             => __( 'Post Format Cards', 'wp-grid-builder' ),
			'fields'            => $post_format_cards,
			'conditional_logic' => [
				[
					'field'   => 'source',
					'compare' => '===',
					'value'   => 'post_type',
				],
			],
		],
		[
			'id'     => 'card_colors_section',
			'tab'    => 'cards',
			'type'   => 'section',
			'title'  => __( 'Card Colors', 'wp-grid-builder' ),
			'fields' => $card_colors,
		],
		[
			'id'     => 'animations_section',
			'tab'    => 'animations',
			'type'   => 'section',
			'title'  => __( 'Cards Animation', 'wp-grid-builder' ),
			'fields' => $cards_animation,
		],
		[
			'id'     => 'lazy_load_section',
			'tab'    => 'loading',
			'type'   => 'section',
			'title'  => __( 'Images Loading', 'wp-grid-builder' ),
			'fields' => $images_loading,
		],
		[
			'id'     => 'loader_section',
			'tab'    => 'loading',
			'type'   => 'section',
			'title'  => __( 'Content Loading', 'wp-grid-builder' ),
			'fields' => $content_loading,
		],
		[
			'id'     => 'customization_section',
			'tab'    => 'customization',
			'type'   => 'section',
			'title'  => __( 'Custom CSS', 'wp-grid-builder' ),
			'fields' => [
				// custom_html.
				[
					'id'    => 'custom_css',
					'type'  => 'code',
					'mode'  => 'css',
					'label' => __( 'Enter your CSS code:', 'wp-grid-builder' ),
				],

			],
		],
		$custom_js,
	],
];

$defaults = require WPGB_PATH . 'admin/settings/defaults/grid.php';

wp_grid_builder()->settings->register( $grid_settings, $defaults );

Zerion Mini Shell 1.0