PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.1.2
ShopBuilder – WooCommerce Builder For Elementor v3.1.2
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
← All changes | app/Models/ModuleList.php +162 -681 3.4.03.1.2 View file →
@@ -7,19 +7,16 @@
7 7
8 8 namespace RadiusTheme\SB\Models;
9 9
10 10 use RadiusTheme\SB\Helpers\Fns;
11 -use RadiusTheme\SB\Helpers\SvgIcons;
12 11 use RadiusTheme\SB\Models\Base\ListModel;
13 12 use RadiusTheme\SB\Modules\Badges\Badges;
13 +use RadiusTheme\SB\Modules\CheckoutEditor\CheckoutEditorInit;
14 14 use RadiusTheme\SB\Modules\CheckoutEditor\CheckoutFns;
15 +use RadiusTheme\SB\Modules\ShopifyCheckout\ShopifyCheckout;
16 +use RadiusTheme\SB\Modules\VariationGallery\VariationGalleryInit;
15 17 use RadiusTheme\SB\Modules\VariationSwatches\SwatchesFns;
16 -use RadiusTheme\SB\Modules\ShopifyCheckout\ShopifyCheckout;
17 -use RadiusTheme\SB\Modules\CheckoutEditor\CheckoutEditorInit;
18 -use RadiusTheme\SB\Modules\AbandonedCartRecovery\CartRecoveryInit;
19 18 use RadiusTheme\SB\Modules\VariationSwatches\VariationSwatches;
20 -use RadiusTheme\SB\Modules\VariationGallery\VariationGalleryInit;
21 -use RadiusTheme\SB\Modules\AbandonedCartRecovery\CartRecoveryOptions;
22 19 use RadiusTheme\SB\Traits\SingletonTrait;
23 20 use RadiusTheme\SB\Modules\Compare\Compare;
24 21 use RadiusTheme\SB\Modules\WishList\Wishlist;
25 22 use RadiusTheme\SB\Modules\Compare\CompareFns;
@@ -68,8 +65,9 @@
68 65 'badge' => 'new',
69 66 'package' => 'free',
70 67 'active' => 'on',
71 68 'base_class' => VariationSwatches::class,
69 + 'category' => 'general',
72 70 'active_field' => [
73 71 'label' => esc_html__( 'Enable Variation Swatches Module?', 'shopbuilder' ),
74 72 'help' => esc_html__( 'Switch on to enable variation swatches module.', 'shopbuilder' ),
75 73 ],
@@ -95,8 +93,9 @@
95 93 'rtsb/module/variation_swatches/options',
96 94 [
97 95 'id' => 'variation_swatches',
98 96 'external' => true,
97 + 'category' => 'general',
99 98 'title' => esc_html__( 'Variation Swatches', 'shopbuilder' ),
100 99 'pluginSlug' => 'woo-product-variation-swatches',
101 100 'pluginIsInstalled' => Fns::check_plugin_installed( 'woo-product-variation-swatches/woo-product-variation-swatches.php' ),
102 101 'pluginIsActive' => Fns::check_plugin_active( 'woo-product-variation-swatches/woo-product-variation-swatches.php' ),
@@ -126,8 +125,9 @@
126 125 'badge' => 'new',
127 126 'package' => 'free',
128 127 'active' => 'on',
129 128 'base_class' => VariationGalleryInit::class,
129 + 'category' => 'general',
130 130 'active_field' => [
131 131 'label' => esc_html__( 'Enable Variation Gallery Module?', 'shopbuilder' ),
132 132 'help' => esc_html__( 'Switch on to enable variation gallery module.', 'shopbuilder' ),
133 133 ],
@@ -149,8 +149,9 @@
149 149 'rtsb/module/variation_gallery/options',
150 150 [
151 151 'id' => 'variation_gallery',
152 152 'external' => true,
153 + 'category' => 'general',
153 154 'title' => esc_html__( 'Variation Gallery', 'shopbuilder' ),
154 155 'pluginSlug' => 'woo-product-variation-gallery',
155 156 'pluginIsInstalled' => Fns::check_plugin_installed( 'woo-product-variation-gallery/woo-product-variation-gallery.php' ),
156 157 'pluginIsActive' => Fns::check_plugin_active( 'woo-product-variation-gallery/woo-product-variation-gallery.php' ),
@@ -178,8 +179,9 @@
178 179 [
179 180 'id' => 'quick_view',
180 181 'title' => esc_html__( 'Quick View', 'shopbuilder' ),
181 182 'base_class' => QuickView::class,
183 + 'category' => 'general',
182 184 'active' => 'on',
183 185 'package' => 'free',
184 186 'active_field' => [
185 187 'label' => esc_html__( 'Enable Quick View?', 'shopbuilder' ),
@@ -199,14 +201,14 @@
199 201 'loop_btn_position' => [
200 202 'id' => 'loop_btn_position',
201 203 'type' => 'select',
202 204 'value' => 'custom',
203 - 'label' => esc_html__( 'Showcase Button Position', 'shopbuilder' ),
204 - 'help' => esc_html__( 'Manage quick view button position in product showcases (Shop, Related, Upsells, Cross-sells, etc.).', 'shopbuilder' ),
205 + 'label' => esc_html__( 'Shop Page Button Position', 'shopbuilder' ),
206 + 'help' => esc_html__( 'You can manage quick view button position in shop page.', 'shopbuilder' ),
205 207 'tab' => 'general',
206 208 'options' => [
207 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
208 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
209 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
210 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
209 211 'shortcode' => esc_html__( 'Use Shortcode', 'shopbuilder' ),
210 212 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
211 213 ],
212 214
@@ -290,11 +292,11 @@
290 292 ],
291 293
292 294 'modal_height' => [
293 295 'id' => 'modal_height',
294 - 'label' => esc_html__( 'Modal Height (in px)', 'shopbuilder' ),
295 - 'help' => esc_html__( 'Quick view button modal height. Example: 450', 'shopbuilder' ),
296 - 'type' => 'number',
296 + 'label' => esc_html__( 'Modal Height', 'shopbuilder' ),
297 + 'help' => esc_html__( 'Quick view button modal height. Example: 450px', 'shopbuilder' ),
298 + 'type' => 'text',
297 299 'value' => '',
298 300 'tab' => 'style',
299 301 ],
300 302
@@ -343,8 +345,9 @@
343 345 'title' => esc_html__( 'Wishlist', 'shopbuilder' ),
344 346 'package' => 'free',
345 347 'active' => 'on',
346 348 'base_class' => Wishlist::class,
349 + 'category' => 'general',
347 350 'active_field' => [
348 351 'label' => esc_html__( 'Enable Wishlist?', 'shopbuilder' ),
349 352 'help' => esc_html__( 'Switch on to enable wishlist module.', 'shopbuilder' ),
350 353 ],
@@ -376,9 +379,9 @@
376 379 ],
377 380 'wishlist_shop_wrapper_heading' => [
378 381 'id' => 'wishlist_shop_wrapper_heading',
379 382 'type' => 'title',
380 - 'label' => esc_html__( 'Product Showcase Settings', 'shopbuilder' ),
383 + 'label' => esc_html__( 'Shop Page Settings', 'shopbuilder' ),
381 384 'tab' => 'button',
382 385 ],
383 386 'show_btn_on_loop' => [
384 387 'id' => 'show_btn_on_loop',
@@ -383,9 +386,9 @@
383 386 'show_btn_on_loop' => [
384 387 'id' => 'show_btn_on_loop',
385 388 'value' => 'on',
386 389 'type' => 'switch',
387 - 'label' => esc_html__( 'Show in Product Showcase', 'shopbuilder' ),
390 + 'label' => esc_html__( 'Show in Shop Page', 'shopbuilder' ),
388 391 'tab' => 'button',
389 392 ],
390 393 'loop_btn_position' => [
391 394 'id' => 'loop_btn_position',
@@ -390,13 +393,13 @@
390 393 'loop_btn_position' => [
391 394 'id' => 'loop_btn_position',
392 395 'type' => 'select',
393 396 'value' => 'custom',
394 - 'label' => esc_html__( 'Showcase Button Position', 'shopbuilder' ),
395 - 'help' => esc_html__( 'Manage wishlist button position in product showcases (Shop, Related, Upsells, Cross-sells, etc.).', 'shopbuilder' ),
397 + 'label' => esc_html__( 'Shop Page Button Position', 'shopbuilder' ),
398 + 'help' => esc_html__( 'You can manage wishlist button position in shop page.', 'shopbuilder' ),
396 399 'options' => [
397 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
398 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
400 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
401 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
399 402 'shortcode' => esc_html__( 'Use Shortcode', 'shopbuilder' ),
400 403 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
401 404 ],
402 405 'dependency' => [
@@ -503,10 +506,10 @@
503 506 'help' => esc_html__( 'You can manage compare button position in single product page.', 'shopbuilder' ),
504 507 'type' => 'select',
505 508 'value' => 'custom',
506 509 'options' => [
507 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
508 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
510 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
511 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
509 512 'after_thumbnail' => esc_html__( 'After Image', 'shopbuilder' ),
510 513 'after_summary' => esc_html__( 'After Summary', 'shopbuilder' ),
511 514 'shortcode' => esc_html__( 'Use Shortcode', 'shopbuilder' ),
512 515 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
@@ -655,54 +658,20 @@
655 658 'label' => esc_html__( 'Wishlist Table Fields Visibility', 'shopbuilder' ),
656 659 'tab' => 'page',
657 660 ],
658 661
659 - 'shortcode_list_heading' => [
660 - 'id' => 'shortcode_list_heading',
661 - 'type' => 'title',
662 - 'label' => esc_html__( 'Available Shortcodes', 'shopbuilder' ),
663 - 'tab' => 'shortcodes',
664 - ],
665 - 'shortcode_wishlist_table' => [
666 - 'type' => 'raw',
667 - 'label' => esc_html__( 'Wishlist Table', 'shopbuilder' ),
668 - 'html' => '<code>[rtsb_wishlist]</code><p class="description">'
669 - . esc_html__( 'Displays the wishlist table with all added products. Use this shortcode on the wishlist page.', 'shopbuilder' )
670 - . '</p>',
671 - 'tab' => 'shortcodes',
672 - ],
673 - 'shortcode_wishlist_button' => [
674 - 'type' => 'raw',
675 - 'label' => esc_html__( 'Wishlist Button', 'shopbuilder' ),
676 - 'html' => '<code>[rtsb_wishlist_button]</code><p class="description">'
677 - . esc_html__( 'Displays the "Add to Wishlist" button. Use inside a product loop or on a single product page.', 'shopbuilder' )
678 - . '</p>',
679 - 'tab' => 'shortcodes',
680 - ],
681 - 'shortcode_wishlist_counter' => [
682 - 'type' => 'raw',
683 - 'label' => esc_html__( 'Wishlist Counter', 'shopbuilder' ),
684 - 'html' => '<code>[rtsb_wishlist_counter]</code><p class="description">'
685 - . esc_html__( 'Displays the wishlist item count. Place it in the header or menu to show total wishlist items.', 'shopbuilder' )
686 - . '</p>',
687 - 'tab' => 'shortcodes',
688 - ],
689 -
690 662 ]
691 663 ),
692 664 'tabs' => [
693 - 'general' => [
665 + 'general' => [
694 666 'title' => esc_html__( 'General', 'shopbuilder' ),
695 667 ],
696 - 'button' => [
668 + 'button' => [
697 669 'title' => esc_html__( 'Button', 'shopbuilder' ),
698 670 ],
699 - 'page' => [
671 + 'page' => [
700 672 'title' => esc_html__( 'Page', 'shopbuilder' ),
701 673 ],
702 - 'shortcodes' => [
703 - 'title' => esc_html__( 'Shortcodes', 'shopbuilder' ),
704 - ],
705 674 ],
706 675 ]
707 676 ),
708 677 'compare' => apply_filters(
@@ -709,8 +678,9 @@
709 678 'rtsb/module/compare/options',
710 679 [
711 680 'id' => 'compare',
712 681 'base_class' => Compare::class,
682 + 'category' => 'general',
713 683 'title' => esc_html__( 'Product Compare', 'shopbuilder' ),
714 684 'package' => 'free',
715 685 'active' => 'on',
716 686 'active_field' => [
@@ -722,9 +692,9 @@
722 692 [
723 693 'compare_shop_wrapper_heading' => [
724 694 'id' => 'compare_shop_wrapper_heading',
725 695 'type' => 'title',
726 - 'label' => esc_html__( 'Product Showcase Settings', 'shopbuilder' ),
696 + 'label' => esc_html__( 'Shop Page Settings', 'shopbuilder' ),
727 697 'tab' => 'button',
728 698 ],
729 699 'show_btn_on_loop' => [
730 700 'id' => 'show_btn_on_loop',
@@ -729,9 +699,9 @@
729 699 'show_btn_on_loop' => [
730 700 'id' => 'show_btn_on_loop',
731 701 'value' => 'on',
732 702 'type' => 'switch',
733 - 'label' => esc_html__( 'Show in Product Showcase', 'shopbuilder' ),
703 + 'label' => esc_html__( 'Show in Shop Page', 'shopbuilder' ),
734 704 'tab' => 'button',
735 705 ],
736 706 'loop_btn_position' => [
737 707 'id' => 'loop_btn_position',
@@ -736,13 +706,13 @@
736 706 'loop_btn_position' => [
737 707 'id' => 'loop_btn_position',
738 708 'type' => 'select',
739 709 'value' => 'custom',
740 - 'label' => esc_html__( 'Showcase Button Position', 'shopbuilder' ),
741 - 'help' => esc_html__( 'Manage compare button position in product showcases (Shop, Related, Upsells, Cross-sells, etc.).', 'shopbuilder' ),
710 + 'label' => esc_html__( 'Shop Page Button Position', 'shopbuilder' ),
711 + 'help' => esc_html__( 'You can manage wishlist button position in shop page.', 'shopbuilder' ),
742 712 'options' => [
743 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
744 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
713 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
714 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
745 715 'shortcode' => esc_html__( 'Use Shortcode', 'shopbuilder' ),
746 716 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
747 717 ],
748 718 'dependency' => [
@@ -849,10 +819,10 @@
849 819 'help' => esc_html__( 'You can manage compare button position in single product page.', 'shopbuilder' ),
850 820 'type' => 'select',
851 821 'value' => 'custom',
852 822 'options' => [
853 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
854 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
823 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
824 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
855 825 'after_thumbnail' => esc_html__( 'After Image', 'shopbuilder' ),
856 826 'after_summary' => esc_html__( 'After Summary', 'shopbuilder' ),
857 827 'shortcode' => esc_html__( 'Use Shortcode', 'shopbuilder' ),
858 828 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
@@ -1432,9 +1402,9 @@
1432 1402 'rtsb/module/bulk_discounts/options',
1433 1403 [
1434 1404 'id' => 'bulk_discounts',
1435 1405 'active' => '',
1436 - 'title' => esc_html__( 'Volume Discount', 'shopbuilder' ),
1406 + 'title' => esc_html__( 'Bulk Discounts', 'shopbuilder' ),
1437 1407 'active_field' => [
1438 1408 'label' => esc_html__( 'Enable Bulk Discounts?', 'shopbuilder' ),
1439 1409 'help' => esc_html__( 'Switch on to enable bulk discounts module.', 'shopbuilder' ),
1440 1410 ],
@@ -1488,8 +1458,9 @@
1488 1458 'rtsb/module/pdf_invoice/options',
1489 1459 [
1490 1460 'id' => 'pdf_invoice',
1491 1461 'active' => '',
1462 + 'badge' => 'new',
1492 1463 'title' => esc_html__( 'PDF Invoice', 'shopbuilder' ),
1493 1464 'active_field' => [
1494 1465 'label' => esc_html__( 'Enable PDF Invoice?', 'shopbuilder' ),
1495 1466 'help' => esc_html__( 'Switch on to enable PDF Invoice module.', 'shopbuilder' ),
@@ -1497,278 +1468,14 @@
1497 1468 'package' => $this->pro_package(),
1498 1469 'fields' => Fns::pro_version_notice( '2.1.0', 'general', 'ShopBuilder Pro', false ),
1499 1470 ]
1500 1471 ),
1501 - 'extended_cross_sell' => apply_filters(
1502 - 'rtsb/module/extended_cross_sell/options',
1503 - [
1504 - 'id' => 'extended_cross_sell',
1505 - 'active' => '',
1506 - 'title' => esc_html__( 'Extended Cross Sell', 'shopbuilder' ),
1507 - 'active_field' => [
1508 - 'label' => esc_html__( 'Enable Extended Cross Sell?', 'shopbuilder' ),
1509 - 'help' => esc_html__( 'Switch on to enable Extended Cross Sell.', 'shopbuilder' ),
1510 - ],
1511 - 'package' => $this->pro_package(),
1512 - 'fields' => Fns::pro_version_notice( '2.1.4', 'general', 'ShopBuilder Pro', false ),
1513 - ]
1514 - ),
1515 - 'abandoned_cart_recovery' => apply_filters(
1516 - 'rtsb/module/abandoned_cart_recovery/options',
1517 - [
1518 - 'id' => 'abandoned_cart_recovery',
1519 - 'active' => '',
1520 - 'badge' => 'new',
1521 - 'title' => esc_html__( 'Abandoned Cart Recovery', 'shopbuilder' ),
1522 - 'active_field' => [
1523 - 'label' => esc_html__( 'Enable Abandoned Cart Recovery?', 'shopbuilder' ),
1524 - 'help' => esc_html__( 'Cart will be considered abandoned if order is not completed in cut-off time.', 'shopbuilder' ),
1525 - ],
1526 - 'fields' => CartRecoveryOptions::get_cart_recovery_fields(),
1527 - 'base_class' => CartRecoveryInit::class,
1528 - 'tabs' => [
1529 - 'general' => [
1530 - 'title' => esc_html__( 'General', 'shopbuilder' ),
1531 - ],
1532 - 'emailTemplates' => [
1533 - 'title' => esc_html__( 'Email Templates', 'shopbuilder' ),
1534 - ],
1535 - ],
1536 - ]
1537 - ),
1538 - 'popup_builder' => apply_filters(
1539 - 'rtsb/module/popup_builder/options',
1540 - [
1541 - 'id' => 'popup_builder',
1542 - 'active' => '',
1543 - 'title' => esc_html__( 'Popup Builder', 'shopbuilder' ),
1544 - 'active_field' => [
1545 - 'label' => esc_html__( 'Enable Popup Builder?', 'shopbuilder' ),
1546 - 'help' => esc_html__( 'Switch on to enable Popup Builder.', 'shopbuilder' ),
1547 - ],
1548 - 'package' => $this->pro_package(),
1549 - 'fields' => Fns::pro_version_notice( '2.1.5', 'general', 'ShopBuilder Pro', false ),
1550 - ]
1551 - ),
1552 - 'save_for_buy_later' => apply_filters(
1553 - 'rtsb/module/save_for_buy_later/options',
1554 - [
1555 - 'id' => 'save_for_buy_later',
1556 - 'active' => '',
1557 - 'title' => esc_html__( 'Save Cart For Buy Later', 'shopbuilder' ),
1558 - 'active_field' => [
1559 - 'label' => esc_html__( 'Enable Save Cart For Buy Later?', 'shopbuilder' ),
1560 - 'help' => esc_html__( 'Switch on to enable Save Cart For Buy Later.', 'shopbuilder' ),
1561 - ],
1562 - 'package' => $this->pro_package(),
1563 - 'fields' => Fns::pro_version_notice( '2.1.8', 'general', 'ShopBuilder Pro', false ),
1564 - ]
1565 - ),
1566 - 'catalog_mode' => apply_filters(
1567 - 'rtsb/module/catalog_mode/options',
1568 - [
1569 - 'id' => 'catalog_mode',
1570 - 'active' => '',
1571 - 'title' => esc_html__( 'Catalog Mode', 'shopbuilder' ),
1572 - 'active_field' => [
1573 - 'label' => esc_html__( 'Enable Catalog Mode?', 'shopbuilder' ),
1574 - 'help' => esc_html__( 'Switch on to enable Catalog Mode.', 'shopbuilder' ),
1575 - ],
1576 - 'package' => $this->pro_package(),
1577 - 'fields' => Fns::pro_version_notice( '2.1.9', 'general', 'ShopBuilder Pro', false ),
1578 - ]
1579 - ),
1580 - 'back_in_stock_notifier' => apply_filters(
1581 - 'rtsb/module/back_in_stock_notifier/options',
1582 - [
1583 - 'id' => 'back_in_stock_notifier',
1584 - 'active' => '',
1585 - 'title' => esc_html__( 'Back In Stock Notifier', 'shopbuilder' ),
1586 - 'active_field' => [
1587 - 'label' => esc_html__( 'Enable Back In Stock Notifier?', 'shopbuilder' ),
1588 - 'help' => esc_html__( 'Switch on to enable Back In Stock Notifier.', 'shopbuilder' ),
1589 - ],
1590 - 'package' => $this->pro_package(),
1591 - 'fields' => Fns::pro_version_notice( '2.1.11', 'general', 'ShopBuilder Pro', false ),
1592 - ]
1593 - ),
1594 - 'mega_menu' => apply_filters(
1595 - 'rtsb/module/mega_menu/options',
1596 - [
1597 - 'id' => 'mega_menu',
1598 - 'active' => '',
1599 - 'title' => esc_html__( 'Mega Menu', 'shopbuilder' ),
1600 - 'active_field' => [
1601 - 'label' => esc_html__( 'Enable Mega Menu?', 'shopbuilder' ),
1602 - 'help' => esc_html__( 'Switch on to enable Mega Menu module.', 'shopbuilder' ),
1603 - ],
1604 - 'package' => $this->pro_package(),
1605 - 'fields' => Fns::pro_version_notice( '2.1.12', 'general', 'ShopBuilder Pro', false ),
1606 - ]
1607 - ),
1472 +
1608 1473 ];
1609 - // Inject icons, descriptions and links per module.
1610 - $meta = self::module_meta();
1611 - foreach ( $list as $key => &$item ) {
1612 - if ( isset( $meta[ $key ] ) ) {
1613 - $item['icon'] = SvgIcons::get( $meta[ $key ]['icon'] ?? 'default' );
1614 - $item['description'] = $meta[ $key ]['desc'] ?? '';
1615 - } else {
1616 - $item['icon'] = SvgIcons::get( 'default' );
1617 - $item['description'] = '';
1618 - }
1619 - $item['links'] = [
1620 - 'doc' => '',
1621 - 'video' => '',
1622 - ];
1623 - }
1624 - unset( $item );
1625 -
1626 1474 return apply_filters( 'rtsb/core/modules/raw_list', $list );
1627 1475 }
1628 1476
1629 1477 /**
1630 - * Module icon and description metadata.
1631 - *
1632 - * @return array<string, array{icon: string, desc: string}>
1633 - */
1634 - private static function module_meta() {
1635 - return [
1636 - 'variation_swatches' => [
1637 - 'icon' => 'dots',
1638 - 'desc' => 'Replace dropdowns with color, image, label, or radio swatches.',
1639 - ],
1640 - 'variation_gallery' => [
1641 - 'icon' => 'image',
1642 - 'desc' => 'Show a unique product gallery for every variation.',
1643 - ],
1644 - 'quick_view' => [
1645 - 'icon' => 'eye',
1646 - 'desc' => 'Open a popup product preview from grids without a full page load.',
1647 - ],
1648 - 'wishlist' => [
1649 - 'icon' => 'heart',
1650 - 'desc' => 'Let customers save products to a wishlist they can revisit or share.',
1651 - ],
1652 - 'compare' => [
1653 - 'icon' => 'flip_box',
1654 - 'desc' => 'Side-by-side product attribute comparison with sticky header.',
1655 - ],
1656 - 'product_badges' => [
1657 - 'icon' => 'onsale',
1658 - 'desc' => 'Sale, new, featured, low-stock, and custom badges with rules.',
1659 - ],
1660 - 'checkout_fields_editor' => [
1661 - 'icon' => 'form',
1662 - 'desc' => 'Add, edit, reorder, or remove billing, shipping, and checkout fields.',
1663 - ],
1664 - 'shopify_checkout' => [
1665 - 'icon' => 'cart',
1666 - 'desc' => 'Single-page Shopify-style checkout with autofill and express pay.',
1667 - ],
1668 - 'mini_cart' => [
1669 - 'icon' => 'cart',
1670 - 'desc' => 'Sliding cart drawer with AJAX add-to-cart and quantity edits.',
1671 - ],
1672 - 'product_size_chart' => [
1673 - 'icon' => 'ruler',
1674 - 'desc' => 'Per-category size guides with units, conversion, and modal preview.',
1675 - ],
1676 - 'customize_my_account' => [
1677 - 'icon' => 'user',
1678 - 'desc' => 'Build the customer dashboard with custom tabs, fields, and layouts.',
1679 - ],
1680 - 'pre_order' => [
1681 - 'icon' => 'countdown',
1682 - 'desc' => 'Accept orders before launch with deposit and scheduled release.',
1683 - ],
1684 - 'currency_switcher' => [
1685 - 'icon' => 'currency',
1686 - 'desc' => 'Geo-detected switcher with live exchange rates and pricing rules.',
1687 - ],
1688 - 'product_add_ons' => [
1689 - 'icon' => 'grid',
1690 - 'desc' => 'Optional extras like gift wrap and warranties with conditional pricing.',
1691 - ],
1692 - 'sales_notification' => [
1693 - 'icon' => 'notification',
1694 - 'desc' => 'Real-time sales popups to create social proof and urgency.',
1695 - ],
1696 - 'flash_sale_countdown' => [
1697 - 'icon' => 'flash',
1698 - 'desc' => 'Scheduled flash sale countdown timers with auto-pricing.',
1699 - ],
1700 - 'quick_checkout' => [
1701 - 'icon' => 'checkout',
1702 - 'desc' => 'One-click checkout from product pages, skipping the cart.',
1703 - ],
1704 - 'multi_step_checkout' => [
1705 - 'icon' => 'multi_step',
1706 - 'desc' => 'Break checkout into guided steps with progress indicator.',
1707 - ],
1708 - 'back_order' => [
1709 - 'icon' => 'document',
1710 - 'desc' => 'Allow orders on out-of-stock products with availability dates.',
1711 - ],
1712 - 'sticky_add_to_cart' => [
1713 - 'icon' => 'button',
1714 - 'desc' => 'Sticky add-to-cart bar that follows the user on product pages.',
1715 - ],
1716 - 'smart_coupons' => [
1717 - 'icon' => 'discount',
1718 - 'desc' => 'Advanced coupon rules, URL coupons, and auto-apply conditions.',
1719 - ],
1720 - 'bulk_discounts' => [
1721 - 'icon' => 'pricing',
1722 - 'desc' => 'Tiered quantity-based pricing tables for bulk purchases.',
1723 - ],
1724 - 'bogo_bxgy_free_gift_discounts' => [
1725 - 'icon' => 'star',
1726 - 'desc' => 'Buy-one-get-one, buy-X-get-Y, and free gift promotions.',
1727 - ],
1728 - 'partial_pay' => [
1729 - 'icon' => 'payment',
1730 - 'desc' => 'Allow customers to pay in installments or deposits.',
1731 - ],
1732 - 'gift_card' => [
1733 - 'icon' => 'coupon',
1734 - 'desc' => 'Digital gift cards with email delivery and balance management.',
1735 - ],
1736 - 'pdf_invoice' => [
1737 - 'icon' => 'note',
1738 - 'desc' => 'Auto-generated PDF invoices and packing slips for orders.',
1739 - ],
1740 - 'extended_cross_sell' => [
1741 - 'icon' => 'grid',
1742 - 'desc' => 'Extended cross-sell recommendations across cart and checkout.',
1743 - ],
1744 - 'abandoned_cart_recovery' => [
1745 - 'icon' => 'cart',
1746 - 'desc' => 'Automated email nudges, discount triggers, and recovery analytics.',
1747 - ],
1748 - 'popup_builder' => [
1749 - 'icon' => 'popup',
1750 - 'desc' => 'Create promotional popups with triggers, targeting, and templates.',
1751 - ],
1752 - 'save_for_buy_later' => [
1753 - 'icon' => 'heart',
1754 - 'desc' => 'Save cart items for later purchase with one-click restore.',
1755 - ],
1756 - 'catalog_mode' => [
1757 - 'icon' => 'list',
1758 - 'desc' => 'Hide prices and add-to-cart buttons for catalog-only browsing.',
1759 - ],
1760 - 'back_in_stock_notifier' => [
1761 - 'icon' => 'notification',
1762 - 'desc' => 'Email notifications when out-of-stock products become available.',
1763 - ],
1764 - 'mega_menu' => [
1765 - 'icon' => 'grid',
1766 - 'desc' => 'Multi-column mega menus with widgets, images, and icons.',
1767 - ],
1768 - ];
1769 - }
1770 - /**
1771 1478 * Get All Menu
1772 1479 */
1773 1480 public function get_all_menu() {
1774 1481 $manus = [
@@ -3050,179 +2757,8 @@
3050 2757 ],
3051 2758 ],
3052 2759 ],
3053 2760 ],
3054 - 'cart_button_styles_settings' => [
3055 - 'id' => 'cart_button_styles_settings',
3056 - 'type' => 'title',
3057 - 'tab' => 'styles',
3058 - 'label' => esc_html__( 'Cart Button Style', 'shopbuilder' ),
3059 - 'dependency' => [
3060 - 'rules' => [
3061 - [
3062 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3063 - 'value' => 'select_icon',
3064 - 'operator' => '==',
3065 - ],
3066 - ],
3067 - ],
3068 - ],
3069 - 'cart_button_height' => [
3070 - 'id' => 'cart_button_height',
3071 - 'label' => esc_html__( 'Button Height (px)', 'shopbuilder' ),
3072 - 'type' => 'slider',
3073 - 'min' => 10,
3074 - 'max' => 200,
3075 - 'unit' => 'px',
3076 - 'tab' => 'styles',
3077 - 'dependency' => [
3078 - 'rules' => [
3079 - [
3080 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3081 - 'value' => 'select_icon',
3082 - 'operator' => '==',
3083 - ],
3084 - ],
3085 - ],
3086 - ],
3087 - 'cart_button_width' => [
3088 - 'id' => 'cart_button_width',
3089 - 'label' => esc_html__( 'Button Width (px)', 'shopbuilder' ),
3090 - 'type' => 'slider',
3091 - 'min' => 10,
3092 - 'max' => 200,
3093 - 'unit' => 'px',
3094 - 'tab' => 'styles',
3095 - 'dependency' => [
3096 - 'rules' => [
3097 - [
3098 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3099 - 'value' => 'select_icon',
3100 - 'operator' => '==',
3101 - ],
3102 - ],
3103 - ],
3104 - ],
3105 - 'cart_button_padding' => [
3106 - 'id' => 'cart_button_padding',
3107 - 'label' => esc_html__( 'Padding (px)', 'shopbuilder' ),
3108 - 'type' => 'slider',
3109 - 'min' => 0,
3110 - 'max' => 50,
3111 - 'unit' => 'px',
3112 - 'tab' => 'styles',
3113 - 'dependency' => [
3114 - 'rules' => [
3115 - [
3116 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3117 - 'value' => 'select_icon',
3118 - 'operator' => '==',
3119 - ],
3120 - ],
3121 - ],
3122 - ],
3123 - 'cart_button_border_style' => [
3124 - 'id' => 'cart_button_border_style',
3125 - 'label' => esc_html__( 'Border Style', 'shopbuilder' ),
3126 - 'type' => 'select',
3127 - 'options' => [
3128 - 'none' => esc_html__( 'None', 'shopbuilder' ),
3129 - 'solid' => esc_html__( 'Solid', 'shopbuilder' ),
3130 - 'dashed' => esc_html__( 'Dashed', 'shopbuilder' ),
3131 - 'dotted' => esc_html__( 'Dotted', 'shopbuilder' ),
3132 - ],
3133 - 'tab' => 'styles',
3134 - 'dependency' => [
3135 - 'rules' => [
3136 - [
3137 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3138 - 'value' => 'select_icon',
3139 - 'operator' => '==',
3140 - ],
3141 - ],
3142 - ],
3143 - ],
3144 - 'cart_button_border_width' => [
3145 - 'id' => 'cart_button_border_width',
3146 - 'label' => esc_html__( 'Border Width (px)', 'shopbuilder' ),
3147 - 'type' => 'slider',
3148 - 'min' => 0,
3149 - 'max' => 10,
3150 - 'unit' => 'px',
3151 - 'tab' => 'styles',
3152 - 'dependency' => [
3153 - 'rules' => [
3154 - [
3155 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3156 - 'value' => 'select_icon',
3157 - 'operator' => '==',
3158 - ],
3159 - ],
3160 - ],
3161 - ],
3162 - 'cart_button_border_color' => [
3163 - 'id' => 'cart_button_border_color',
3164 - 'label' => esc_html__( 'Border Color', 'shopbuilder' ),
3165 - 'tab' => 'styles',
3166 - 'type' => 'color',
3167 - 'dependency' => [
3168 - 'rules' => [
3169 - [
3170 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3171 - 'value' => 'select_icon',
3172 - 'operator' => '==',
3173 - ],
3174 - ],
3175 - ],
3176 - ],
3177 - 'cart_button_border_radius' => [
3178 - 'id' => 'cart_button_border_radius',
3179 - 'label' => esc_html__( 'Border Radius (px)', 'shopbuilder' ),
3180 - 'type' => 'slider',
3181 - 'min' => 0,
3182 - 'max' => 100,
3183 - 'unit' => 'px',
3184 - 'tab' => 'styles',
3185 - 'dependency' => [
3186 - 'rules' => [
3187 - [
3188 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3189 - 'value' => 'select_icon',
3190 - 'operator' => '==',
3191 - ],
3192 - ],
3193 - ],
3194 - ],
3195 - 'cart_button_bg_color' => [
3196 - 'id' => 'cart_button_bg_color',
3197 - 'label' => esc_html__( 'Background Color', 'shopbuilder' ),
3198 - 'tab' => 'styles',
3199 - 'type' => 'color',
3200 - 'dependency' => [
3201 - 'rules' => [
3202 - [
3203 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3204 - 'value' => 'select_icon',
3205 - 'operator' => '==',
3206 - ],
3207 - ],
3208 - ],
3209 - ],
3210 - 'cart_button_hover_bg_color' => [
3211 - 'id' => 'cart_button_hover_bg_color',
3212 - 'label' => esc_html__( 'Hover Background Color', 'shopbuilder' ),
3213 - 'tab' => 'styles',
3214 - 'type' => 'color',
3215 - 'dependency' => [
3216 - 'rules' => [
3217 - [
3218 - 'item' => 'modules.shopify_checkout.cart_icon_source',
3219 - 'value' => 'select_icon',
3220 - 'operator' => '==',
3221 - ],
3222 - ],
3223 - ],
3224 - ],
3225 2761 'footer_menu_styles_settings' => [
3226 2762 'id' => 'footer_menu_styles_settings',
3227 2763 'type' => 'title',
3228 2764 'tab' => 'styles',
@@ -3442,10 +2978,10 @@
3442 2978 'options' => [
3443 2979 'above_image' => esc_html__( 'Floating Above Image', 'shopbuilder' ),
3444 2980 'before_product_title' => esc_html__( 'Before Product Title', 'shopbuilder' ),
3445 2981 'after_product_title' => esc_html__( 'After Product Title', 'shopbuilder' ),
3446 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
3447 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
2982 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
2983 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
3448 2984 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
3449 2985 ],
3450 2986 'tab' => 'group',
3451 2987 ],
@@ -3524,10 +3060,10 @@
3524 3060 'label' => esc_html__( 'Product Page Group Position', 'shopbuilder' ),
3525 3061 'help' => esc_html__( 'Choose the group badges position in product page.', 'shopbuilder' ),
3526 3062 'options' => [
3527 3063 'above_image' => esc_html__( 'Floating Above Image', 'shopbuilder' ),
3528 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
3529 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
3064 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
3065 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
3530 3066 'after_summary' => esc_html__( 'After Summary', 'shopbuilder' ),
3531 3067 'after_short_desc' => esc_html__( 'After Short Description', 'shopbuilder' ),
3532 3068 'shortcode' => esc_html__( 'Use Shortcode', 'shopbuilder' ),
3533 3069 'custom' => esc_html__( 'Custom Position', 'shopbuilder' ),
@@ -3627,8 +3163,9 @@
3627 3163 'type' => 'repeaters',
3628 3164 'label' => '',
3629 3165 'tab' => 'badges',
3630 3166 'repeat' => [
3167 +
3631 3168 'title' => [
3632 3169 'id' => 'title',
3633 3170 'label' => esc_html__( 'Badge Name', 'shopbuilder' ),
3634 3171 'help' => esc_html__( 'Enter badge name.', 'shopbuilder' ),
@@ -4133,8 +3670,26 @@
4133 3670 'label' => esc_html__( 'Enable Tooltip', 'shopbuilder' ),
4134 3671 'help' => esc_html__( 'Enable / Disable plugin default tooltip on each product attribute.', 'shopbuilder' ),
4135 3672 'tab' => 'general',
4136 3673 ],
3674 + 'shape_style' => [
3675 + 'id' => 'shape_style',
3676 + 'label' => esc_html__( 'Default Shape Style', 'shopbuilder' ),
3677 + 'help' => esc_html__( 'Attribute Shape Style. Note: This option will not be applied to radio and button attributes.', 'shopbuilder' ),
3678 + 'type' => 'image_select',
3679 + 'value' => 'rounded',
3680 + 'options' => [
3681 + 'rounded' => [
3682 + 'label' => esc_html__( 'Rounded Shape', 'shopbuilder' ),
3683 + 'url' => esc_url( rtsb()->get_assets_uri( 'images/variation-swatch/rounded-shape.svg' ) ),
3684 + ],
3685 + 'squared' => [
3686 + 'label' => esc_html__( 'Squared Shape', 'shopbuilder' ),
3687 + 'url' => esc_url( rtsb()->get_assets_uri( 'images/variation-swatch/squared-shape.svg' ) ),
3688 + ],
3689 + ],
3690 + 'tab' => 'general',
3691 + ],
4137 3692 'shape_style_checkmark' => [
4138 3693 'id' => 'shape_style_checkmark',
4139 3694 'type' => 'switch',
4140 3695 'isPro' => ! rtsb()->has_pro(),
@@ -4304,27 +3859,8 @@
4304 3859 ],
4305 3860 ],
4306 3861 'tab' => 'showcase_shop',
4307 3862 ],
4308 - 'showcase_image_size' => [
4309 - 'id' => 'showcase_image_size',
4310 - 'label' => esc_html__( 'Showcase Image Size', 'shopbuilder' ),
4311 - 'help' => __( 'Choose showcase variation image size.', 'shopbuilder' ) ,
4312 - 'type' => 'select',
4313 - 'isPro' => ! rtsb()->has_pro(),
4314 - 'value' => 'woocommerce_thumbnail',
4315 - 'options' => array_diff_key( Fns::get_image_sizes(), [ 'rtsb_custom' => '' ] ),
4316 - 'dependency' => [
4317 - 'rules' => [
4318 - [
4319 - 'item' => 'modules.variation_swatches.enable_showcase_swatches',
4320 - 'value' => 'on',
4321 - 'operator' => '==',
4322 - ],
4323 - ],
4324 - ],
4325 - 'tab' => 'showcase_shop',
4326 - ],
4327 3863 'showcase_swatches_position' => [
4328 3864 'id' => 'showcase_swatches_position',
4329 3865 'label' => esc_html__( 'Swatches Position', 'shopbuilder' ),
4330 3866 'help' => esc_html__( 'Display showcase swatches in a specific position.', 'shopbuilder' ) . '<br/>' . __( 'Note: Some themes remove or override default WooCommerce hooks. If the swatches do not appear as expected, you may need to manually set a custom position.', 'shopbuilder' ),
@@ -4334,10 +3870,10 @@
4334 3870 'options' => apply_filters(
4335 3871 'rtsb_showcase_swatches_positions',
4336 3872 [
4337 3873 'custom_hook' => esc_html__( 'Custom Hook', 'shopbuilder' ),
4338 - 'before_add_to_cart' => esc_html__( 'Above Add To Cart', 'shopbuilder' ),
4339 - 'after_add_to_cart' => esc_html__( 'Below Add To Cart', 'shopbuilder' ),
3874 + 'before_add_to_cart' => esc_html__( 'Before Add To Cart', 'shopbuilder' ),
3875 + 'after_add_to_cart' => esc_html__( 'After Add To Cart', 'shopbuilder' ),
4340 3876 ]
4341 3877 ),
4342 3878 'dependency' => [
4343 3879 'rules' => [
@@ -4564,20 +4100,8 @@
4564 4100 'type' => 'color',
4565 4101 'value' => '#333333',
4566 4102 'tab' => 'style',
4567 4103 ],
4568 - 'attribute_border_radius' => [
4569 - 'id' => 'attribute_border_radius',
4570 - 'label' => esc_html__( 'Attribute Border Radius', 'shopbuilder' ),
4571 - 'isPro' => ! rtsb()->has_pro(),
4572 - 'help' => esc_html__( 'Set the border radius (in px) for attribute items. Use a small value for squared corners or a large value (e.g. 100+) for fully rounded / circular swatches.', 'shopbuilder' ),
4573 - 'type' => 'slider',
4574 - 'min' => 0,
4575 - 'max' => 200,
4576 - 'unit' => 'px',
4577 - 'value' => 4,
4578 - 'tab' => 'style',
4579 - ],
4580 4104 'details_page_attribute_size' => [
4581 4105 'id' => 'details_page_attribute_size',
4582 4106 'type' => 'title',
4583 4107 'label' => esc_html__( 'Details Page Attributes', 'shopbuilder' ),
@@ -4632,19 +4156,8 @@
4632 4156 'unit' => 'px',
4633 4157 'value' => 16,
4634 4158 'tab' => 'style',
4635 4159 ],
4636 - 'details_page_radio_size' => [
4637 - 'id' => 'details_page_radio_size',
4638 - 'label' => esc_html__( 'Radio Attribute Size', 'shopbuilder' ),
4639 - 'help' => esc_html__( 'Set the size (in px) for radio-button variation attributes. Independent from the Variation Item Width/Height settings.', 'shopbuilder' ),
4640 - 'type' => 'slider',
4641 - 'min' => 10,
4642 - 'max' => 80,
4643 - 'unit' => 'px',
4644 - 'value' => 25,
4645 - 'tab' => 'style',
4646 - ],
4647 4160 'showcase_attribute_size' => [
4648 4161 'id' => 'showcase_attribute_size',
4649 4162 'type' => 'title',
4650 4163 'label' => esc_html__( 'Shop Page / Product Showcase Attributes Size', 'shopbuilder' ),
@@ -4682,19 +4195,8 @@
4682 4195 'unit' => 'px',
4683 4196 'value' => 16,
4684 4197 'tab' => 'style',
4685 4198 ],
4686 - 'showcase_radio_size' => [
4687 - 'id' => 'showcase_radio_size',
4688 - 'label' => esc_html__( 'Radio Attribute Size', 'shopbuilder' ),
4689 - 'help' => esc_html__( 'Set the size (in px) for radio-button variation attributes in shop/showcase contexts.', 'shopbuilder' ),
4690 - 'type' => 'slider',
4691 - 'min' => 10,
4692 - 'max' => 80,
4693 - 'unit' => 'px',
4694 - 'value' => 25,
4695 - 'tab' => 'style',
4696 - ],
4697 4199 'tooltip_style' => [
4698 4200 'id' => 'tooltip_style',
4699 4201 'type' => 'title',
4700 4202 'label' => esc_html__( 'Tooltip Style', 'shopbuilder' ),
@@ -4699,22 +4201,8 @@
4699 4201 'type' => 'title',
4700 4202 'label' => esc_html__( 'Tooltip Style', 'shopbuilder' ),
4701 4203 'tab' => 'style',
4702 4204 ],
4703 - 'tooltip_text_color' => [
4704 - 'id' => 'tooltip_text_color',
4705 - 'label' => esc_html__( 'Tooltip Text Color', 'shopbuilder' ),
4706 - 'type' => 'color',
4707 - 'value' => '#ffffff',
4708 - 'tab' => 'style',
4709 - ],
4710 - 'tooltip_bg_color' => [
4711 - 'id' => 'tooltip_bg_color',
4712 - 'label' => esc_html__( 'Tooltip Background Color', 'shopbuilder' ),
4713 - 'type' => 'color',
4714 - 'value' => '#333333',
4715 - 'tab' => 'style',
4716 - ],
4717 4205 'tooltip_images_padding' => [
4718 4206 'id' => 'tooltip_images_padding',
4719 4207 'label' => esc_html__( 'Tooltip Images Padding', 'shopbuilder' ),
4720 4208 'type' => 'slider',
@@ -4723,16 +4211,29 @@
4723 4211 'unit' => 'px',
4724 4212 'value' => 3,
4725 4213 'tab' => 'style',
4726 4214 ],
4215 + 'tooltip_bg_color' => [
4216 + 'id' => 'tooltip_bg_color',
4217 + 'label' => esc_html__( 'Tooltip Background Color', 'shopbuilder' ),
4218 + 'type' => 'color',
4219 + 'value' => '#333333',
4220 + 'tab' => 'style',
4221 + ],
4727 4222 'tooltip_image_bg_color' => [
4728 - 'id' => 'tooltip_image_bg_color',
4223 + 'id' => 'tooltip_bg_color',
4729 4224 'label' => esc_html__( 'Tooltip Image Background Color', 'shopbuilder' ),
4730 4225 'type' => 'color',
4731 4226 'value' => '#333333',
4732 4227 'tab' => 'style',
4733 4228 ],
4734 -
4229 + 'tooltip_text_color' => [
4230 + 'id' => 'tooltip_text_color',
4231 + 'label' => esc_html__( 'Tooltip Text Color', 'shopbuilder' ),
4232 + 'type' => 'color',
4233 + 'value' => '#ffffff',
4234 + 'tab' => 'style',
4235 + ],
4735 4236 ]
4736 4237 ); // @phpstan-ignore-line
4737 4238 }
4738 4239 /**
@@ -4741,15 +4242,9 @@
4741 4242 public function get_variation_gallery_fields() {
4742 4243 return apply_filters(
4743 4244 'rtsb/module/variation_gallery/fields',
4744 4245 [
4745 - 'main_image_controls_title' => [
4746 - 'id' => 'main_image_controls_title',
4747 - 'type' => 'title',
4748 - 'label' => esc_html__( 'Main Image Controls', 'shopbuilder' ),
4749 - 'tab' => 'general',
4750 - ],
4751 - 'image_zoom' => [
4246 + 'image_zoom' => [
4752 4247 'id' => 'image_zoom',
4753 4248 'type' => 'switch',
4754 4249 'default' => false,
4755 4250 'label' => esc_html__( 'Zoom Gallery image', 'shopbuilder' ),
@@ -4754,9 +4249,9 @@
4754 4249 'default' => false,
4755 4250 'label' => esc_html__( 'Zoom Gallery image', 'shopbuilder' ),
4756 4251 'tab' => 'general',
4757 4252 ],
4758 - 'lightBox' => [
4253 + 'lightBox' => [
4759 4254 'id' => 'lightBox',
4760 4255 'type' => 'switch',
4761 4256 'default' => false,
4762 4257 'label' => esc_html__( 'Enable Images lightBox', 'shopbuilder' ),
@@ -4761,9 +4256,9 @@
4761 4256 'default' => false,
4762 4257 'label' => esc_html__( 'Enable Images lightBox', 'shopbuilder' ),
4763 4258 'tab' => 'general',
4764 4259 ],
4765 - 'lightBox_button_position' => [
4260 + 'lightBox_button_position' => [
4766 4261 'id' => 'lightBox_button_position',
4767 4262 'type' => 'select',
4768 4263 'value' => 'top-right',
4769 4264 'label' => esc_html__( 'Zoom Button Position', 'shopbuilder' ),
@@ -4775,26 +4270,61 @@
4775 4270 'bottom-left' => esc_html__( 'Bottom Left', 'shopbuilder' ),
4776 4271 ],
4777 4272 'tab' => 'general',
4778 4273 ],
4779 -
4780 - 'adaptive_height' => [
4274 + 'thumbnails_columns' => [
4275 + 'id' => 'thumbnails_columns',
4276 + 'type' => 'slider',
4277 + 'label' => esc_html__( 'Thumbnails Items per row / slider view', 'shopbuilder' ),
4278 + 'help' => esc_html__( 'Product Thumbnails Item Image. Default value is: 4. Limit: 2-8. The field required for slider.', 'shopbuilder' ),
4279 + 'min' => 2,
4280 + 'max' => 8,
4281 + 'unit' => '',
4282 + 'value' => 4,
4283 + 'tab' => 'general',
4284 + ],
4285 + 'thumbnails_gap' => [
4286 + 'id' => 'thumbnails_gap',
4287 + 'type' => 'slider',
4288 + 'label' => esc_html__( 'Thumbnails Gap', 'shopbuilder' ),
4289 + 'help' => esc_html__( 'Product Thumbnails Gap In Pixel. Default value is: 0. Limit: 0-50.', 'shopbuilder' ),
4290 + 'min' => 0,
4291 + 'max' => 50,
4292 + 'unit' => 'px',
4293 + 'value' => 0,
4294 + 'tab' => 'general',
4295 + ],
4296 + 'gallery_style' => [
4297 + 'id' => 'gallery_style',
4298 + 'type' => 'select',
4299 + 'value' => 'bottom',
4300 + 'label' => esc_html__( 'Gallery Style', 'shopbuilder' ),
4301 + 'isPro' => ! rtsb()->has_pro(),
4302 + 'options' => [
4303 + 'bottom' => esc_html__( 'Thumbnail Position Bottom', 'shopbuilder' ),
4304 + 'left' => esc_html__( 'Thumbnail Position Left', 'shopbuilder' ),
4305 + 'right' => esc_html__( 'Thumbnail Position Right', 'shopbuilder' ),
4306 + 'grid' => esc_html__( 'Grid View Images', 'shopbuilder' ),
4307 + ],
4308 + 'tab' => 'general',
4309 + ],
4310 + 'adaptive_height' => [
4781 4311 'id' => 'adaptive_height',
4782 4312 'type' => 'switch',
4783 4313 'default' => false,
4784 - 'label' => esc_html__( 'Main Images Slider Adaptive Height', 'shopbuilder' ),
4314 + 'label' => esc_html__( 'Main Slider Adaptive Height', 'shopbuilder' ),
4785 4315 'tab' => 'general',
4786 4316 'dependency' => [
4787 4317 'rules' => [
4788 4318 [
4789 4319 'item' => 'modules.variation_gallery.gallery_style',
4790 - 'value' => 'grid',
4791 - 'operator' => '!=',
4320 + 'value' => 'bottom',
4321 + 'operator' => '==',
4792 4322 ],
4793 4323 ],
4794 4324 ],
4795 4325 ],
4796 - 'main_slider_alignment' => [
4326 + 'main_slider_alignment' => [
4797 4327 'id' => 'main_slider_alignment',
4798 4328 'type' => 'switch',
4799 4329 'value' => 'center',
4800 4330 'label' => esc_html__( 'Main Image Middle Position', 'shopbuilder' ),
@@ -4809,13 +4339,14 @@
4809 4339 ],
4810 4340 ],
4811 4341 ],
4812 4342 ],
4813 - 'main_image_transition_effect' => [
4343 +
4344 + 'main_image_transition_effect' => [
4814 4345 'id' => 'main_image_transition_effect',
4815 4346 'type' => 'select',
4816 4347 'value' => 'slide',
4817 - 'label' => esc_html__( 'Transition Effect For Main Image Carousel', 'shopbuilder' ),
4348 + 'label' => esc_html__( 'Main Image Transition Effect', 'shopbuilder' ),
4818 4349 'isPro' => ! rtsb()->has_pro(),
4819 4350 'options' => [
4820 4351 'slide' => esc_html__( 'Slide', 'shopbuilder' ),
4821 4352 'fade' => esc_html__( 'Fade', 'shopbuilder' ),
@@ -4830,92 +4361,49 @@
4830 4361 ],
4831 4362 ],
4832 4363 ],
4833 4364 ],
4834 - 'preloader' => [
4835 - 'id' => 'preloader',
4836 - 'type' => 'switch',
4837 - 'default' => false,
4838 - 'label' => esc_html__( 'Preloader', 'shopbuilder' ),
4839 - 'help' => esc_html__( 'Show a loading animation while the gallery images are being loaded.', 'shopbuilder' ),
4840 - 'tab' => 'general',
4841 - ],
4842 - 'preloader_image' => [
4843 - 'id' => 'preloader_image',
4844 - 'type' => 'fileupload',
4845 - 'label' => esc_html__( 'Preloader Image', 'shopbuilder' ),
4846 - 'help' => esc_html__( 'Upload a custom preloader image to replace the default loading animation. Recommended size: 60x60 pixels.', 'shopbuilder' ),
4847 - 'tab' => 'general',
4848 - // Preserve the { id, source } media array on save (the default text
4849 - // sanitizer would flatten it to an empty string and drop the upload).
4850 - 'sanitize_fn' => [ Fns::class, 'sanitize_fileupload_value' ],
4851 - 'dependency' => [
4365 + 'thumb_image_section_width' => [
4366 + 'id' => 'thumb_image_section_width',
4367 + 'type' => 'slider',
4368 + 'label' => esc_html__( 'Thumbnail Image Section Width', 'shopbuilder' ),
4369 + 'help' => esc_html__( 'Product Thumbnails Section Width In Pixel.', 'shopbuilder' ),
4370 + 'min' => 150,
4371 + 'max' => 1000,
4372 + 'unit' => 'px',
4373 + 'value' => 150,
4374 + 'tab' => 'general',
4375 + 'dependency' => [
4852 4376 'rules' => [
4853 4377 [
4854 - 'item' => 'modules.variation_gallery.preloader',
4855 - 'value' => 'on',
4856 - 'operator' => '==',
4378 + 'item' => 'modules.variation_gallery.gallery_style',
4379 + 'value' => [ 'left', 'right' ],
4380 + 'operator' => 'in',
4857 4381 ],
4858 4382 ],
4859 4383 ],
4860 4384 ],
4861 - 'gallery_change_effect' => [
4862 - 'id' => 'gallery_change_effect',
4863 - 'type' => 'select',
4864 - 'value' => 'blur',
4865 - 'label' => esc_html__( 'Gallery Change Effect', 'shopbuilder' ),
4866 - 'help' => esc_html__( 'Choose the visual effect applied to the gallery when switching between variations.', 'shopbuilder' ),
4867 - 'options' => [
4868 - 'blur' => esc_html__( 'Blur', 'shopbuilder' ),
4869 - 'fade' => esc_html__( 'Fade', 'shopbuilder' ),
4870 - 'gray' => esc_html__( 'Gray', 'shopbuilder' ),
4871 - 'none' => esc_html__( 'No Effect', 'shopbuilder' ),
4385 + 'image_section_height' => [
4386 + 'id' => 'image_section_height',
4387 + 'type' => 'slider',
4388 + 'label' => esc_html__( 'Slider Height/Image Section Height', 'shopbuilder' ),
4389 + 'help' => esc_html__( 'Product Thumbnails And Main Image Section Height In Pixel.', 'shopbuilder' ),
4390 + 'min' => 400,
4391 + 'max' => 2000,
4392 + 'unit' => 'px',
4393 + 'value' => 500,
4394 + 'tab' => 'general',
4395 + 'dependency' => [
4396 + 'rules' => [
4397 + [
4398 + 'item' => 'modules.variation_gallery.gallery_style',
4399 + 'value' => [ 'left', 'right' ],
4400 + 'operator' => 'in',
4401 + ],
4402 + ],
4872 4403 ],
4873 - 'tab' => 'general',
4874 4404 ],
4875 - 'gallery_thumbnail_controls_title' => [
4876 - 'id' => 'gallery_thumbnail_controls_title',
4877 - 'type' => 'title',
4878 - 'label' => esc_html__( 'Gallery / Thumbnail Item Controls', 'shopbuilder' ),
4879 - 'tab' => 'general',
4880 - ],
4881 - 'gallery_style' => [
4882 - 'id' => 'gallery_style',
4883 - 'type' => 'select',
4884 - 'value' => 'bottom',
4885 - 'label' => esc_html__( 'Thumbnail Position/Gallery Style', 'shopbuilder' ),
4886 - 'isPro' => ! rtsb()->has_pro(),
4887 - 'options' => [
4888 - 'bottom' => esc_html__( 'Thumbnail Position Bottom', 'shopbuilder' ),
4889 - 'left' => esc_html__( 'Thumbnail Position Left', 'shopbuilder' ),
4890 - 'right' => esc_html__( 'Thumbnail Position Right', 'shopbuilder' ),
4891 - 'grid' => esc_html__( 'Grid View Images', 'shopbuilder' ),
4892 - ],
4893 - 'tab' => 'general',
4894 - ],
4895 - 'thumbnails_columns' => [
4896 - 'id' => 'thumbnails_columns',
4897 - 'type' => 'slider',
4898 - 'label' => esc_html__( 'Thumbnail Items', 'shopbuilder' ),
4899 - 'help' => esc_html__( 'Add slides per view, or items per row if the slider is not activated.', 'shopbuilder' ),
4900 - 'min' => 2,
4901 - 'max' => 8,
4902 - 'unit' => '',
4903 - 'value' => 4,
4904 - 'tab' => 'general',
4905 - ],
4906 - 'thumbnails_gap' => [
4907 - 'id' => 'thumbnails_gap',
4908 - 'type' => 'slider',
4909 - 'label' => esc_html__( 'Thumbnails Gap', 'shopbuilder' ),
4910 - 'help' => esc_html__( 'Product Thumbnails Gap In Pixel. Default value is: 0. Limit: 0-50.', 'shopbuilder' ),
4911 - 'min' => 0,
4912 - 'max' => 50,
4913 - 'unit' => 'px',
4914 - 'value' => 10,
4915 - 'tab' => 'general',
4916 - ],
4917 - 'main_image_border_color' => [
4405 + 'main_image_border_color' => [
4918 4406 'id' => 'main_image_border_color',
4919 4407 'label' => esc_html__( 'Main Image Border Color', 'shopbuilder' ),
4920 4408 'tab' => 'styles',
4921 4409 'type' => 'color',
@@ -4928,22 +4416,15 @@
4928 4416 ],
4929 4417 ],
4930 4418 ],
4931 4419 ],
4932 - 'thumbnail_item_border_color' => [
4420 + 'thumbnail_item_border_color' => [
4933 4421 'id' => 'thumbnail_item_border_color',
4934 4422 'label' => esc_html__( 'Thumbnail item Border Color', 'shopbuilder' ),
4935 4423 'tab' => 'styles',
4936 4424 'type' => 'color',
4937 4425 ],
4938 - 'thumbnail_active_border_color' => [
4939 - 'id' => 'thumbnail_active_border_color',
4940 - 'label' => esc_html__( 'Active Thumbnail Border Color', 'shopbuilder' ),
4941 - 'help' => esc_html__( 'Border color of the currently selected thumbnail.', 'shopbuilder' ),
4942 - 'tab' => 'styles',
4943 - 'type' => 'color',
4944 - ],
4945 - 'thumbnail_item_inner_padding' => [
4426 + 'thumbnail_item_inner_padding' => [
4946 4427 'id' => 'thumbnail_item_inner_padding',
4947 4428 'type' => 'slider',
4948 4429 'label' => esc_html__( 'Thumbnail Item Inner Padding', 'shopbuilder' ),
4949 4430 'min' => 0,
@@ -4951,9 +4432,9 @@
4951 4432 'unit' => 'px',
4952 4433 'value' => 10,
4953 4434 'tab' => 'styles',
4954 4435 ],
4955 - 'thumbnail_item_border_radius' => [
4436 + 'thumbnail_item_border_radius' => [
4956 4437 'id' => 'thumbnail_item_border_radius',
4957 4438 'type' => 'slider',
4958 4439 'label' => esc_html__( 'Thumbnail Item Border Radius', 'shopbuilder' ),
4959 4440 'min' => 0,