PluginProbe
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits / trunk
Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits vtrunk
3.2.2 3.2.3 3.2.1 3.2.0 3.1.9 3.1.8 3.1.7 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.9 trunk 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.3 1.1.4 1.1.5 All 174 releases
master-addons / inc / admin / config.php

config.php in Master Addons for Elementor – Elementor Addons, Widgets, Mega Menu Builder, Popup Builder, Widget Builder & Template Kits trunk, at inc/admin/config.php

2,812 lines 139.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Master Addons - Unified Configuration
5 *
6 * Single source of truth for all widgets, extensions, icons, and plugins.
7 * Addons and extensions are organized by groups for easier management.
8 *
9 * @package MasterAddons
10 * @since 2.1.0
11 */
12
13 namespace MasterAddons\Inc\Admin;
14
15 if (!defined('ABSPATH')) {
16 exit;
17 }
18
19 class Config
20 {
21 private static $instance = null;
22 private static $config = null;
23 private static $ribbon = null;
24 /**
25 * Get complete configuration
26 *
27 * @return array
28 */
29 public static function get_config()
30 {
31 if (self::$config !== null) {
32 return self::$config;
33 }
34
35 self::$ribbon = [
36 'new' => 'New',
37 'popular' => 'Popular',
38 'upcoming' => 'Upcoming',
39 'featured' => 'Featured',
40 'hot' => 'Hot',
41 'updated' => 'Updated'
42 ];
43
44 self::$config = [
45 'ribbons' => self::$ribbon,
46
47 /**
48 * UI Groups for Dashboard Display
49 * Each group can have optional subcategories for better organization
50 */
51 'addons_category' => [
52 'basic' => [
53 'title' => 'Basic',
54 'icon' => 'eicon-apps',
55 'order' => 10,
56 'addons' => [
57 'ma-dual-heading' => [
58 'title' => 'Dual Heading',
59 'icon' => 'eicon-heading',
60 'class' => 'MasterAddons\Addons\Dual_Heading',
61 'demo_url' => 'https://master-addons.com/element/dual-heading/',
62 'docs_url' => 'https://master-addons.com/docs/addons/dual-heading/',
63 'tuts_url' => 'https://www.youtube.com/watch?v=kXyvNe6l0Sg',
64 'tuts_features' => [
65 "Two-part heading with independent colors",
66 "Separate typography for each heading part",
67 "Add description text below heading",
68 "Fully responsive layout and styling"
69 ],
70 'is_pro' => false,
71 'assets' => [
72 'css' => true,
73 ],
74 ],
75 'ma-gradient-headline' => [
76 'title' => 'Gradient Headline',
77 'icon' => 'eicon-heading',
78 'class' => 'MasterAddons\Addons\Gradient_Headline',
79 'demo_url' => 'https://master-addons.com/element/gradient-headline/',
80 'docs_url' => 'https://master-addons.com/docs/addons/how-to-add-gradient-headline-in-elementor/',
81 'tuts_url' => 'https://www.youtube.com/watch?v=NgayEI4CthU',
82 'tuts_features' => [
83 "Multi-color gradient text headings",
84 "Fully responsive gradient design",
85 "No coding needed to configure",
86 "Custom gradient angle and colors"
87 ],
88 'is_pro' => false,
89 'ribbons' => [ 'hot' ]
90 ],
91 'ma-creative-buttons' => [
92 'title' => 'Creative Button',
93 'icon' => 'eicon-button',
94 'class' => 'MasterAddons\Addons\Creative_Button',
95 'demo_url' => 'https://master-addons.com/element/creative-button/',
96 'docs_url' => 'https://master-addons.com/docs/addons/creative-button/',
97 'tuts_url' => 'https://www.youtube.com/watch?v=kFq8l6wp1iI',
98 'tuts_features' => [
99 "30+ unique button styles available",
100 "Hover effects and icon support",
101 "Text alignment and border radius control",
102 "Full color and typography styling"
103 ],
104 'is_pro' => false,
105 'assets' => [
106 'css' => true,
107 ],
108 'ribbons' => [ 'hot' ]
109 ],
110 'ma-creative-links' => [
111 'title' => 'Creative Links',
112 'icon' => 'eicon-editor-external-link',
113 'class' => 'MasterAddons\Addons\Creative_Links',
114 'demo_url' => 'https://master-addons.com/element/creative-links/',
115 'docs_url' => 'https://master-addons.com/docs/addons/how-to-add-creative-links/',
116 'tuts_url' => 'https://www.youtube.com/watch?v=o6SmdwMJPyA',
117 'tuts_features' => [
118 "Animated hyperlinks with 3D effects",
119 "SVG icon support included",
120 "Custom hover state controls",
121 "Multiple animation style options"
122 ],
123 'is_pro' => false,
124 'assets' => [
125 'css' => true,
126 ],
127 ],
128 // 'ma-dropdown-button' => [
129 // 'title' => 'Dropdown Button',
130 // 'icon' => 'eicon-dual-button',
131 // 'class' => 'MasterAddons\Addons\Dropdown_Button',
132 // 'demo_url' => '',
133 // 'docs_url' => '',
134 // 'tuts_url' => '',
135 // 'is_pro' => false,
136 // 'assets' => [
137 // 'css' => true,
138 // ],
139 // ],
140 // 'ma-dual-button' => [
141 // 'title' => 'Dual Button',
142 // 'icon' => 'eicon-dual-button',
143 // 'class' => 'MasterAddons\Addons\Dual_Button',
144 // 'demo_url' => '',
145 // 'docs_url' => '',
146 // 'tuts_url' => '',
147 // 'is_pro' => false,
148 // 'assets' => [
149 // 'css' => true,
150 // ],
151 // ],
152 // 'ma-floating-button' => [
153 // 'title' => 'Floating Button',
154 // 'icon' => 'eicon-button',
155 // 'class' => 'MasterAddons\Addons\Floating_Button',
156 // 'demo_url' => '',
157 // 'docs_url' => '',
158 // 'tuts_url' => '',
159 // 'is_pro' => true,
160 // 'assets' => [
161 // 'css' => true,
162 // ],
163 // ],
164 'ma-counter-up' => [
165 'title' => 'Counter Up',
166 'icon' => 'eicon-counter',
167 'class' => 'MasterAddons\Addons\Counter_Up',
168 'demo_url' => 'https://master-addons.com/element/counter-up/',
169 'docs_url' => 'https://master-addons.com/docs/addons/counter-up-for-elementor/',
170 'tuts_url' => 'https://www.youtube.com/watch?v=9amvO6p9kpM',
171 'tuts_features' => [
172 "Animated number counter on scroll",
173 "Number prefix and suffix support",
174 "Responsive column layout control",
175 "Custom icon and color per counter"
176 ],
177 'is_pro' => false,
178 'assets' => [
179 'css' => true,
180 'js' => true,
181 'vendors' => ['common'],
182 ],
183 ],
184 'ma-countdown-timer' => [
185 'title' => 'Countdown Timer',
186 'icon' => 'eicon-countdown',
187 'class' => 'MasterAddons\Addons\Countdown_Timer',
188 'demo_url' => 'https://master-addons.com/element/countdown-timer/',
189 'docs_url' => 'https://master-addons.com/docs/addons/count-down-timer/',
190 'tuts_url' => 'https://www.youtube.com/watch?v=1lIbOLM9C1I',
191 'tuts_features' => [
192 "Evergreen and scheduled timer modes",
193 "Days, hours, minutes, seconds display",
194 "Custom expire message or action",
195 "Full typography and style controls"
196 ],
197 'is_pro' => false,
198 'assets' => [
199 'css' => true,
200 'js' => true,
201 'vendors' => ['countdown'],
202 ],
203 ],
204 'ma-progressbar' => [
205 'title' => 'Progress Bar',
206 'icon' => 'eicon-skill-bar',
207 'class' => 'MasterAddons\Addons\Progress_Bar',
208 'demo_url' => 'https://master-addons.com/element/progress-bar/',
209 'docs_url' => 'https://master-addons.com/docs/addons/how-to-create-and-customize-progressbar-in-elementor/',
210 'tuts_url' => 'https://www.youtube.com/watch?v=77-b1moRE8M',
211 'tuts_features' => [
212 "Single animated skill or stat bar",
213 "Multiple bar styles available",
214 "Custom color and label support",
215 "Smooth entrance animation on scroll"
216 ],
217 'is_pro' => false,
218 'assets' => [
219 'css' => true,
220 'js' => true,
221 'vendors' => ['loading-bar'],
222 ],
223 ],
224 'ma-progressbars' => [
225 'title' => 'Progress Bars',
226 'icon' => 'eicon-progress-tracker',
227 'class' => 'MasterAddons\Addons\Progress_Bars',
228 'demo_url' => 'https://master-addons.com/element/progress-bars/',
229 'docs_url' => 'https://master-addons.com/docs/addons/progress-bars-element/',
230 'tuts_url' => 'https://www.youtube.com/watch?v=Mc9uDWJQMIY',
231 'tuts_features' => [
232 "Display multiple skill bars grouped",
233 "Colorful grouped skill set layout",
234 "Individual color per bar supported",
235 "Responsive columns and spacing control"
236 ],
237 'is_pro' => false,
238 'assets' => [
239 'css' => true,
240 'js' => true,
241 ],
242 ],
243 // 'ma-piechart' => [
244 // 'title' => 'Pie Chart',
245 // 'icon' => 'eicon-counter-circle',
246 // 'class' => 'MasterAddons\Addons\Piechart',
247 // 'demo_url' => '',
248 // 'docs_url' => '',
249 // 'tuts_url' => '',
250 // 'is_pro' => true,
251 // 'pro_features' => [
252 // 'feature 1',
253 // 'feature 2',
254 // 'feature 3',
255 // 'feature 4'
256 // ],
257 // ],
258 'ma-infobox' => [
259 'title' => 'Infobox',
260 'icon' => 'eicon-info-box',
261 'class' => 'MasterAddons\Addons\Infobox',
262 'demo_url' => 'https://master-addons.com/element/infobox/',
263 'docs_url' => 'https://master-addons.com/docs/addons/infobox-element/',
264 'tuts_url' => 'https://www.youtube.com/watch?v=2-ymXAZfrF0',
265 'tuts_features' => [
266 "10+ design variations available",
267 "Icon, heading, and description controls",
268 "Hover effects and link support",
269 "Full color and typography styling"
270 ],
271 'is_pro' => false,
272 'assets' => [
273 'css' => true,
274 ],
275 ],
276 'ma-flipbox' => [
277 'title' => 'Flipbox',
278 'icon' => 'eicon-flip-box',
279 'class' => 'MasterAddons\Addons\Flipbox',
280 'demo_url' => 'https://master-addons.com/element/flipbox/',
281 'docs_url' => 'https://master-addons.com/docs/addons/how-to-configure-flipbox-element/',
282 'tuts_url' => 'https://www.youtube.com/watch?v=f-B35-xWqF0',
283 'tuts_features' => [
284 "Two-sided flip card on hover",
285 "10 unique flip animation styles",
286 "Custom front and back content",
287 "Icon, image, and text support"
288 ],
289 'is_pro' => false,
290 'assets' => [
291 'css' => true,
292 ],
293 ],
294 'ma-tooltip' => [
295 'title' => 'Tooltip',
296 'icon' => 'eicon-tools',
297 'class' => 'MasterAddons\Addons\Tooltip',
298 'demo_url' => 'https://master-addons.com/element/tooltip/',
299 'docs_url' => 'https://master-addons.com/docs/addons/adding-tooltip-in-elementor-editor/',
300 'tuts_url' => 'https://www.youtube.com/watch?v=Av3eTae9vaE',
301 'tuts_features' => [
302 "Hover or tap triggered tooltips",
303 "Works on text, icons, and images",
304 "Customizable position and animation",
305 "Full style and color controls"
306 ],
307 'is_pro' => false,
308 'assets' => [
309 'css' => true,
310 'js' => true,
311 'vendors' => ['tippy'],
312 ],
313 ],
314 'ma-blockquote' => [
315 'title' => 'Blockquote',
316 'icon' => 'eicon-blockquote',
317 'class' => 'MasterAddons\Addons\Blockquote',
318 'demo_url' => 'https://master-addons.com/element/blockquote/',
319 'docs_url' => 'https://master-addons.com/docs/addons/blockquote-element/',
320 'tuts_url' => 'https://www.youtube.com/watch?v=sSCULgPFSHU',
321 'tuts_features' => [
322 "Styled pull quotes with decorative marks",
323 "Author name and bio support",
324 "Author bar symbol customization",
325 "Full typography and color controls"
326 ],
327 'is_pro' => false,
328 'assets' => [
329 'css' => true,
330 ],
331 ],
332 'ma-business-hours' => [
333 'title' => 'Business Hours',
334 'icon' => 'eicon-clock-o',
335 'class' => 'MasterAddons\Addons\Business_Hours',
336 'demo_url' => 'https://master-addons.com/element/business-hours/',
337 'docs_url' => 'https://master-addons.com/docs/addons/business-hours-elementor/',
338 'tuts_url' => 'https://www.youtube.com/watch?v=x0_HY9uYgog',
339 'tuts_features' => [
340 "Weekly business hours table display",
341 "Highlight current day automatically",
342 "Custom open and closed labels",
343 "Placeable anywhere on your site"
344 ],
345 'is_pro' => false,
346 'assets' => [
347 'css' => true,
348 'vendors' => ['common'],
349 ],
350 'ribbons' => [ 'popular' ]
351 ],
352 // 'ma-cards' => [
353 // 'title' => 'Cards',
354 // 'icon' => 'eicon-image-box',
355 // 'class' => 'MasterAddons\Addons\Cards',
356 // 'demo_url' => '',
357 // 'docs_url' => '',
358 // 'tuts_url' => '',
359 // 'is_pro' => false,
360 // 'assets' => [
361 // 'css' => true,
362 // ],
363 // ],
364 // 'ma-google-maps' => [
365 // 'title' => 'Google Maps',
366 // 'icon' => 'eicon-google-maps',
367 // 'class' => 'MasterAddons\Addons\Google_Maps',
368 // 'demo_url' => '',
369 // 'docs_url' => '',
370 // 'tuts_url' => '',
371 // 'is_pro' => true,
372 // ],
373 'ma-accordion' => [
374 'title' => 'Advanced Accordion',
375 'icon' => 'eicon-accordion',
376 'class' => 'MasterAddons\Addons\Advanced_Accordion',
377 'demo_url' => 'https://master-addons.com/element/advanced-accordion/',
378 'docs_url' => 'https://master-addons.com/docs/addons/elementor-accordion-widget/',
379 'tuts_url' => 'https://www.youtube.com/watch?v=rdrqWa-tf6Q',
380 'tuts_features' => [
381 "Nested accordions with toggle icons",
382 "Custom icons per accordion item",
383 "Expand and collapse all controls",
384 "Border styling and color options"
385 ],
386 'is_pro' => false,
387 'assets' => [
388 'css' => true,
389 'js' => true,
390 ],
391 'ribbons' => [ 'popular' ]
392 ],
393 'ma-tabs' => [
394 'title' => 'Tabs',
395 'icon' => 'eicon-tabs',
396 'class' => 'MasterAddons\Addons\Tabs',
397 'demo_url' => 'https://master-addons.com/element/tabs/',
398 'docs_url' => 'https://master-addons.com/docs/addons/tabs-element/',
399 'tuts_url' => 'https://www.youtube.com/watch?v=lsqGmIrdahw',
400 'tuts_features' => [
401 "Interactive content tabs layout",
402 "Fully responsive tab design",
403 "Custom icon support per tab",
404 "Deep typography and color controls"
405 ],
406 'is_pro' => false,
407 'assets' => [
408 'css' => true,
409 'js' => true,
410 'vendors' => ['common'],
411 ],
412 'ribbons' => [ 'popular' ]
413 ],
414 'ma-team-members' => [
415 'title' => 'Team Member',
416 'icon' => 'eicon-person',
417 'class' => 'MasterAddons\Addons\Team_Member',
418 'demo_url' => 'https://master-addons.com/element/team-member/',
419 'docs_url' => 'https://master-addons.com/docs/addons/adding-team-members-in-elementor-page-builder/',
420 'tuts_url' => 'https://www.youtube.com/watch?v=wXPEl93_UBw',
421 'tuts_features' => [
422 "Showcase team profiles with bios",
423 "Display photo and social links",
424 "Custom typography and color styling",
425 "Flexible layout and image controls"
426 ],
427 'is_pro' => false,
428 'assets' => [
429 'css' => true,
430 ],
431 ],
432 'ma-changelog' => [
433 'title' => 'Changelogs',
434 'icon' => 'eicon-history',
435 'class' => 'MasterAddons\Addons\Changelogs',
436 'demo_url' => 'https://master-addons.com/element/changelogs/',
437 'docs_url' => 'https://master-addons.com/docs/addons/changelog-element/',
438 'tuts_url' => 'https://www.youtube.com/watch?v=qWRgJkFfBow',
439 'tuts_features' => [
440 "Structured changelog for digital products",
441 "Version badges with custom labels",
442 "Full typography and color controls",
443 "Clean and organized layout design"
444 ],
445 'is_pro' => false,
446 'assets' => [
447 'css' => true,
448 'vendors' => ['common']
449 ],
450 ],
451 ],
452 ],
453 'content' => [
454 'title' => 'Content',
455 'icon' => 'eicon-post-content',
456 'order' => 20,
457 'addons' => [
458 'ma-blog' => [
459 'title' => 'Blog',
460 'icon' => 'eicon-posts-grid',
461 'class' => 'MasterAddons\Addons\Blog',
462 'demo_url' => 'https://master-addons.com/element/blog/',
463 'docs_url' => 'https://master-addons.com/docs/addons/blog-element-customization/',
464 'tuts_url' => 'https://www.youtube.com/watch?v=03AcgVEsTaA',
465 'tuts_features' => [
466 "Grid, list, and card blog layouts",
467 "Category filtering and post queries",
468 "Custom post count and order",
469 "Responsive design with style controls"
470 ],
471 'is_pro' => false,
472 'assets' => [
473 'css' => true,
474 'js' => true,
475 'vendors' => ['common', 'swiper', 'swiper-carousel', 'isotope', 'masonry'],
476 ],
477 'ribbons' => [ 'featured' ]
478 ],
479 'ma-news-ticker' => [
480 'title' => 'News Ticker',
481 'icon' => 'eicon-posts-ticker',
482 'class' => 'MasterAddons\Addons\News_Ticker',
483 'demo_url' => 'https://master-addons.com/element/news-ticker/',
484 'docs_url' => 'https://master-addons.com/docs/addons/news-ticker-element/',
485 'tuts_url' => 'https://www.youtube.com/watch?v=jkrBCzebQ-E',
486 'tuts_features' => [
487 "Swiper-powered scrolling news ticker",
488 "Thumbnail, title, and height controls",
489 "Custom thumbnail shape options",
490 "Speed and direction control support"
491 ],
492 'is_pro' => true,
493 'ribbons' => [ 'hot' ]
494 ],
495 'ma-timeline' => [
496 'title' => 'Timeline',
497 'icon' => 'eicon-time-line',
498 'class' => 'MasterAddons\Addons\Timeline',
499 'demo_url' => 'https://master-addons.com/element/timeline/',
500 'docs_url' => 'https://master-addons.com/docs/addons/timeline-element/',
501 'tuts_url' => 'https://www.youtube.com/watch?v=0mcDMKrH1A0',
502 'tuts_features' => [
503 "Horizontal and vertical timeline layout",
504 "Supports post and custom timeline types",
505 "Icon and image per timeline item",
506 "Full color and typography controls"
507 ],
508 'is_pro' => false,
509 'assets' => [
510 'css' => true,
511 'js' => true,
512 'vendors' => ['common', 'animation', 'swiper', 'swiper-carousel'],
513 ],
514 ],
515 'ma-toggle-content' => [
516 'title' => 'Toggle Content',
517 'icon' => 'eicon-dual-button',
518 'class' => 'MasterAddons\Addons\Toggle_Content',
519 'demo_url' => 'https://master-addons.com/element/toggle-content/',
520 'docs_url' => 'https://master-addons.com/docs/addons/toggle-content/',
521 'tuts_url' => 'https://www.youtube.com/watch?v=TH6wbVuWdTA',
522 'tuts_features' => [
523 "Switch between two content sets",
524 "Perfect for monthly/yearly pricing toggle",
525 "Smooth animation on toggle switch",
526 "Custom label and color controls"
527 ],
528 'is_pro' => true,
529 ],
530 'ma-restrict-content' => [
531 'title' => 'Restrict Content',
532 'icon' => 'eicon-lock-user',
533 'class' => 'MasterAddons\Addons\Restrict_Content',
534 'demo_url' => 'https://master-addons.com/element/restrict-content/',
535 'docs_url' => 'https://master-addons.com/docs/addons/restrict-content-for-elementor/',
536 'tuts_url' => 'https://www.youtube.com/watch?v=Alc1R_W5_Z8',
537 'tuts_features' => [
538 "Gate content by user role",
539 "Password and age verification support",
540 "Custom styled error messages",
541 "Flexible content restriction rules"
542 ],
543 'is_pro' => true,
544 ],
545 'ma-source-code' => [
546 'title' => 'Source Code',
547 'icon' => 'eicon-code',
548 'class' => 'MasterAddons\Addons\Source_Code',
549 'demo_url' => 'https://master-addons.com/element/source-code/',
550 'docs_url' => 'https://master-addons.com/docs/addons/source-code-element/',
551 'tuts_url' => 'https://www.youtube.com/watch?v=Yz4m3FI_ccc',
552 'tuts_features' => [
553 "Syntax highlighting for 70+ languages",
554 "One-click copy button included",
555 "Custom theme and font size",
556 "Line numbers toggle support"
557 ],
558 'is_pro' => true,
559 ],
560 // 'ma-code-highlighter' => [
561 // 'title' => 'Code Highlighter',
562 // 'icon' => 'eicon-editor-code',
563 // 'class' => 'MasterAddons\Addons\Code_Highlighter',
564 // 'demo_url' => '',
565 // 'docs_url' => '',
566 // 'tuts_url' => '',
567 // 'is_pro' => false,
568 // ],
569 'ma-comments' => [
570 'title' => 'MA Comments',
571 'icon' => 'eicon-comments',
572 'class' => 'MasterAddons\Addons\Comments',
573 'demo_url' => 'https://master-addons.com/demos/comments-builder',
574 'docs_url' => 'https://master-addons.com/docs/addons/comments-builder/',
575 'tuts_url' => 'https://www.youtube.com/watch?v=vKglaHoWxQs',
576 'tuts_feature' => [
577 "Add conditional comment form",
578 "Design in Elementor Editor",
579 "Multiple Variation of Form",
580 "Design reply style"
581 ],
582 'is_pro' => false,
583 'assets' => [
584 'css' => true,
585 'js' => true,
586 ],
587 ],
588 // 'ma-iframe' => [
589 // 'title' => 'iFrame',
590 // 'icon' => 'eicon-frame-expand',
591 // 'class' => 'MasterAddons\Addons\IFrame',
592 // 'demo_url' => '',
593 // 'docs_url' => '',
594 // 'tuts_url' => '',
595 // 'is_pro' => false,
596 // ],
597 ],
598 ],
599 'media' => [
600 'title' => 'Media',
601 'icon' => 'eicon-image',
602 'order' => 30,
603 'addons' => [
604 'ma-advanced-image' => [
605 'title' => 'Advanced Image',
606 'icon' => 'eicon-image',
607 'class' => 'MasterAddons\Addons\Advanced_Image',
608 'demo_url' => 'https://master-addons.com/element/advanced-image/',
609 'docs_url' => 'https://master-addons.com/docs/addons/advanced-image-element/',
610 'tuts_url' => 'https://www.youtube.com/watch?v=fhdwiiy7JiE',
611 'tuts_features' => [
612 "Swap images on hover effect",
613 "Add stylish ribbons with positions",
614 "Lightbox and tilt effect support",
615 "Border radius and overlay styling"
616 ],
617 'is_pro' => false,
618 'assets' => [
619 'css' => true,
620 ],
621 ],
622 'ma-image-hover-effects' => [
623 'title' => 'Image Hover Effects',
624 'icon' => 'eicon-image-rollover',
625 'class' => 'MasterAddons\Addons\Image_Hover_Effects',
626 'demo_url' => 'https://master-addons.com/element/image-hover-effects/',
627 'docs_url' => 'https://master-addons.com/docs/addons/image-hover-effects-element/',
628 'tuts_url' => 'https://www.youtube.com/watch?v=vWGWzuRKIss',
629 'tuts_features' => [
630 "20+ hover animation effects",
631 "Title and description overlays",
632 "Supports Elementor Dynamic Tags",
633 "Custom color and typography controls"
634 ],
635 'is_pro' => false,
636 'assets' => [
637 'css' => true,
638 ],
639 'ribbons' => [ 'hot' ]
640 ],
641 'ma-image-hotspot' => [
642 'title' => 'Image Hotspot',
643 'icon' => 'eicon-image-hotspot',
644 'class' => 'MasterAddons\Addons\Image_Hotspot',
645 'demo_url' => 'https://master-addons.com/element/image-hotspot/',
646 'docs_url' => 'https://master-addons.com/docs/addons/image-hotspot/',
647 'tuts_url' => 'https://www.youtube.com/watch?v=IDAd_d986Hg',
648 'tuts_features' => [
649 "Click or hover hotspots on images",
650 "Tooltip-style info overlays on spots",
651 "Great for product and feature demos",
652 "Custom icon and pulse animation"
653 ],
654 'is_pro' => true,
655 'ribbons' => [ 'hot' ]
656 ],
657 'ma-image-comparison' => [
658 'title' => 'Image Comparison',
659 'icon' => 'eicon-image-before-after',
660 'class' => 'MasterAddons\Addons\Image_Comparison',
661 'demo_url' => 'https://master-addons.com/element/image-comparison/',
662 'docs_url' => 'https://master-addons.com/docs/addons/image-comparison-element/',
663 'tuts_url' => 'https://www.youtube.com/watch?v=3nqRRXSGk3M',
664 'tuts_features' => [
665 "Drag-to-compare before/after slider",
666 "Perfect for photographers and designers",
667 "Custom handle and divider styling",
668 "Vertical and horizontal orientation"
669 ],
670 'is_pro' => false,
671 'assets' => [
672 'css' => true,
673 'js' => true,
674 'vendors' => ['twentytwenty'],
675 ],
676 'ribbons' => [ 'hot' ]
677 ],
678 // 'ma-image-scroll' => [
679 // 'title' => 'Image Scroll',
680 // 'icon' => 'eicon-scroll',
681 // 'class' => 'MasterAddons\Addons\Image_Scroll',
682 // 'demo_url' => '',
683 // 'docs_url' => '',
684 // 'tuts_url' => '',
685 // 'is_pro' => true,
686 // ],
687 // 'ma-svg' => [
688 // 'title' => 'Inline SVG',
689 // 'icon' => 'eicon-code',
690 // 'class' => 'MasterAddons\Addons\Inline_Svg',
691 // 'demo_url' => '',
692 // 'docs_url' => '',
693 // 'tuts_url' => '',
694 // 'is_pro' => true,
695 // ],
696 'ma-image-filter-gallery' => [
697 'title' => 'Filterable Image Gallery',
698 'icon' => 'eicon-gallery-masonry',
699 'class' => 'MasterAddons\Addons\Filterable_Image_Gallery',
700 'demo_url' => 'https://master-addons.com/element/filterable-image-gallery/',
701 'docs_url' => 'https://master-addons.com/docs/addons/filterable-image-gallery/',
702 'tuts_url' => 'https://www.youtube.com/watch?v=h7egsnX4Ewc',
703 'tuts_features' => [
704 "Category-filtered image gallery layout",
705 "Custom filter labels per category",
706 "Page-link support for gallery items",
707 "Lightbox support for full view"
708 ],
709 'is_pro' => false,
710 'assets' => [
711 'css' => true,
712 'js' => true,
713 'vendors' => ['common', 'fancybox', 'isotope', 'tilt', 'tippy'],
714 ],
715 'ribbons' => [ 'popular' ]
716 ],
717 // 'ma-audio-playlist' => [
718 // 'title' => 'Audio Playlist',
719 // 'icon' => 'eicon-headphones',
720 // 'class' => 'MasterAddons\Addons\Audio_Playlist',
721 // 'demo_url' => '',
722 // 'docs_url' => '',
723 // 'tuts_url' => '',
724 // 'is_pro' => true,
725 // ],
726 // 'ma-video-playlist' => [
727 // 'title' => 'Video Playlist',
728 // 'icon' => 'eicon-headphones',
729 // 'class' => 'MasterAddons\Addons\Video_Playlist',
730 // 'demo_url' => '',
731 // 'docs_url' => '',
732 // 'tuts_url' => '',
733 // 'is_pro' => true,
734 // ],
735 // 'ma-morphing-blob' => [
736 // 'title' => 'Morphing Blob',
737 // 'icon' => 'eicon-shape',
738 // 'class' => 'MasterAddons\Addons\Morphing_Blob',
739 // 'demo_url' => '',
740 // 'docs_url' => '',
741 // 'tuts_url' => '',
742 // 'is_pro' => true,
743 // ],
744 // 'ma-pdf-viewer' => [
745 // 'title' => 'PDF Viewer',
746 // 'icon' => 'eicon-document-file',
747 // 'class' => 'MasterAddons\Addons\PDF_Viewer',
748 // 'demo_url' => '',
749 // 'docs_url' => '',
750 // 'tuts_url' => '',
751 // 'is_pro' => true,
752 // ],
753 // 'ma-pdfembed' => [
754 // 'title' => 'PDF Embed',
755 // 'icon' => 'eicon-document-file',
756 // 'class' => 'MasterAddons\Addons\WpmfPdfEmbedElementorWidget',
757 // 'demo_url' => '',
758 // 'docs_url' => '',
759 // 'tuts_url' => '',
760 // 'is_pro' => false,
761 // 'assets' => [],
762 // ],
763 // 'ma-filedesign' => [
764 // 'title' => 'File Design',
765 // 'icon' => 'eicon-folder-o',
766 // 'class' => 'MasterAddons\Addons\WpmfFileDesignElementorWidget',
767 // 'demo_url' => '',
768 // 'docs_url' => '',
769 // 'tuts_url' => '',
770 // 'is_pro' => false,
771 // 'assets' => [],
772 // ],
773 ],
774 ],
775 'slider' => [
776 'title' => 'Slider',
777 'icon' => 'eicon-slider-push',
778 'order' => 40,
779 'addons' => [
780 // 'ma-slider' => [
781 // 'title' => 'Slider',
782 // 'icon' => 'eicon-slider-push',
783 // 'class' => 'MasterAddons\Addons\Slider',
784 // 'demo_url' => '',
785 // 'docs_url' => '',
786 // 'tuts_url' => '',
787 // 'is_pro' => true,
788 // 'assets' => [
789 // 'css' => true,
790 // 'vendors' => ['swiper'],
791 // ],
792 // ],
793 'ma-image-carousel' => [
794 'title' => 'Image Carousel',
795 'icon' => 'eicon-media-carousel',
796 'class' => 'MasterAddons\Addons\Image_Carousel',
797 'demo_url' => 'https://master-addons.com/element/image-carousel/',
798 'docs_url' => 'https://master-addons.com/docs/addons/image-carousel/',
799 'tuts_url' => 'https://youtu.be/WD90-LdHXrU',
800 'tuts_features' => [
801 "Customizable photo carousel layout",
802 "Multiple navigation control options",
803 "Auto-play and loop settings",
804 "Responsive slides per view control"
805 ],
806 'is_pro' => false,
807 'assets' => [
808 'css' => true,
809 'js' => true,
810 'vendors' => ['swiper', 'swiper-carousel', 'fancybox'],
811 ],
812 'ribbons' => [ 'popular' ]
813 ],
814 'ma-gallery-slider' => [
815 'title' => 'Gallery Slider',
816 'icon' => 'eicon-gallery-group',
817 'class' => 'MasterAddons\Addons\Gallery_Slider',
818 'demo_url' => 'https://master-addons.com/element/gallery-slider/',
819 'docs_url' => 'https://master-addons.com/docs/addons/gallery-slider/',
820 'tuts_url' => 'https://youtu.be/ZNhGERmt5u0',
821 'tuts_features' => [
822 "Thumbnail-based photo gallery slider",
823 "Large image preview on selection",
824 "Auto-play and navigation controls",
825 "Custom style and spacing options"
826 ],
827 'is_pro' => true,
828 'assets' => [
829 'css' => true,
830 'js' => true,
831 'vendors' => ['swiper', 'swiper-carousel'],
832 ],
833 'ribbons' => [ 'popular' ]
834 ],
835 'ma-team-members-slider' => [
836 'title' => 'Team Slider',
837 'icon' => 'eicon-person',
838 'class' => 'MasterAddons\Addons\Team_Slider',
839 'demo_url' => 'https://master-addons.com/element/team-slider/',
840 'docs_url' => 'https://master-addons.com/docs/addons/team-members-carousel/',
841 'tuts_url' => 'https://www.youtube.com/watch?v=ubP_h86bP-c',
842 'tuts_features' => [
843 "Swipeable team member carousel",
844 "Responsive column count controls",
845 "Auto-play and navigation options",
846 "Custom style for each member card"
847 ],
848 'is_pro' => false,
849 'assets' => [
850 'css' => true,
851 'js' => true,
852 'vendors' => ['swiper', 'swiper-carousel', 'gridder'],
853 ],
854 'ribbons' => [ 'popular' ]
855 ],
856 // 'ma-twitter-slider' => [
857 // 'title' => 'Twitter Slider',
858 // 'icon' => 'eicon-twitter-feed',
859 // 'class' => 'MasterAddons\Addons\Twitter_Slider',
860 // 'demo_url' => '',
861 // 'docs_url' => '',
862 // 'tuts_url' => '',
863 // 'is_pro' => true,
864 // ],
865 // 'ma-devices-slider' => [
866 // 'title' => 'Devices Slider',
867 // 'icon' => 'eicon-device-mobile',
868 // 'class' => 'MasterAddons\Addons\Devices_Slider',
869 // 'demo_url' => '',
870 // 'docs_url' => '',
871 // 'tuts_url' => '',
872 // 'is_pro' => true,
873 // ],
874 'ma-logo-slider' => [
875 'title' => 'Logo Slider',
876 'icon' => 'eicon-slider-push',
877 'class' => 'MasterAddons\Addons\Logo_Slider',
878 'demo_url' => 'https://master-addons.com/element/logo-slider/',
879 'docs_url' => 'https://master-addons.com/docs/addons/logo-slider/',
880 'tuts_url' => 'https://www.youtube.com/watch?v=NHjqO0mbc_s',
881 'tuts_features' => [
882 "Auto-scrolling brand logo strip",
883 "Grayscale to color hover effect",
884 "Custom logo size and spacing",
885 "Responsive slides and speed control"
886 ],
887 'is_pro' => false,
888 'assets' => [
889 'css' => true,
890 'js' => true,
891 'vendors' => ['swiper', 'swiper-carousel'],
892 ],
893 'ribbons' => [ 'popular' ]
894 ],
895 ],
896 ],
897 'navigation' => [
898 'title' => 'Navigation',
899 'icon' => 'eicon-nav-menu',
900 'order' => 50,
901 'addons' => [
902 'ma-table-of-contents' => [
903 'title' => 'Table of Contents',
904 'icon' => 'eicon-post-list',
905 'class' => 'MasterAddons\Addons\Table_of_Contents',
906 'demo_url' => 'https://master-addons.com/element/table-of-contents/',
907 'docs_url' => 'https://master-addons.com/docs/addons/ma-table/',
908 'tuts_url' => 'https://youtu.be/gWmeINr5HjQ',
909 'tuts_features' => [
910 "Auto-generated navigation for long content",
911 "Personalized anchor link controls",
912 "Collapsible and sticky TOC support",
913 "Custom heading levels to include"
914 ],
915 'is_pro' => false,
916 'assets' => [
917 'css' => true,
918 'js' => true,
919 ],
920 'ribbons' => [ 'featured' ]
921 ],
922 'ma-off-canvas-content' => [
923 'title' => 'Off-Canvas Content',
924 'icon' => 'eicon-sidebar',
925 'class' => 'MasterAddons\Addons\Off_Canvas_Content',
926 'demo_url' => 'https://master-addons.com/element/off-canvas-content/',
927 'docs_url' => 'https://master-addons.com/docs/addons/off-canvas/',
928 'tuts_url' => 'https://www.youtube.com/watch?v=-weBko7ZMVg',
929 'tuts_features' => [
930 "Slide-in off-canvas sidebar panel",
931 "Triggered by button or menu icon",
932 "Custom width, position, and overlay",
933 "Add any Elementor content inside"
934 ],
935 'is_pro' => true,
936 'ribbons' => [ 'new' ]
937 ],
938 // 'ma-devices' => [
939 // 'title' => 'Devices',
940 // 'icon' => 'eicon-device-mobile',
941 // 'class' => 'MasterAddons\Addons\Devices',
942 // 'demo_url' => '',
943 // 'docs_url' => '',
944 // 'tuts_url' => '',
945 // 'is_pro' => true,
946 // 'assets' => [
947 // 'css' => ['devices'],
948 // ],
949 // ],
950 'ma-navmenu' => [
951 'title' => 'Nav Menu',
952 'icon' => 'eicon-nav-menu',
953 'class' => 'MasterAddons\Addons\Nav_Menu',
954 'demo_url' => 'https://master-addons.com/element/nav-menu/',
955 'docs_url' => 'https://master-addons.com/docs/addons/navigation-menu-element/',
956 'tuts_url' => 'https://www.youtube.com/watch?v=WhA5YnE4yJg',
957 'tuts_features' => [
958 "Fully responsive custom navigation menu",
959 "Use in headers and footers",
960 "Dropdown and mega menu support",
961 "Full color and typography controls"
962 ],
963 'is_pro' => false,
964 'assets' => [
965 'css' => true,
966 'js' => true,
967 ],
968 'ribbons' => [ 'featured' ]
969 ],
970 // 'ma-offcanvas-menu' => [
971 // 'title' => 'Off-Canvas Menu',
972 // 'icon' => 'eicon-sidebar',
973 // 'class' => 'MasterAddons\Addons\Offcanvas_Menu',
974 // 'demo_url' => '',
975 // 'docs_url' => '',
976 // 'tuts_url' => '',
977 // 'is_pro' => true,
978 // ],
979 // 'ma-post-pagination' => [
980 // 'title' => 'Post Pagination',
981 // 'icon' => 'eicon-post-navigation',
982 // 'class' => 'MasterAddons\Addons\Post_Pagination',
983 // 'demo_url' => '',
984 // 'docs_url' => '',
985 // 'tuts_url' => '',
986 // 'is_pro' => false,
987 // 'assets' => [
988 // 'css' => true,
989 // ],
990 // ],
991 // 'ma-quick-contact' => [
992 // 'title' => 'Quick Contact',
993 // 'icon' => 'eicon-call-to-action',
994 // 'class' => 'MasterAddons\Addons\Quick_Contact',
995 // 'demo_url' => '',
996 // 'docs_url' => '',
997 // 'tuts_url' => '',
998 // 'is_pro' => false,
999 // 'assets' => [
1000 // 'css' => true,
1001 // ],
1002 // ],
1003 ],
1004 ],
1005 'forms' => [
1006 'title' => 'Forms',
1007 'icon' => 'eicon-form-horizontal',
1008 'order' => 70,
1009 'addons' => [
1010 'contact-form-7' => [
1011 'title' => 'Contact Form 7',
1012 'icon' => 'eicon-mail',
1013 'class' => 'MasterAddons\Addons\Contact_Form_7',
1014 'demo_url' => 'https://master-addons.com/element/contact-form-7/',
1015 'docs_url' => 'https://master-addons.com/docs/addons/how-to-edit-contact-form-7/',
1016 'tuts_url' => 'https://www.youtube.com/watch?v=1fU6lWniRqo',
1017 'tuts_features' => [
1018 "Style CF7 forms inside Elementor",
1019 "10 layout variations available",
1020 "Custom input, label, button styling",
1021 "Full color and typography controls"
1022 ],
1023 'is_pro' => false,
1024 'assets' => [
1025 'css' => true,
1026 ],
1027 'ribbons' => [ 'featured' ]
1028 ],
1029 'ninja-forms' => [
1030 'title' => 'Ninja Form',
1031 'icon' => 'eicon-mail',
1032 'class' => 'MasterAddons\Addons\Ninja_Form',
1033 'demo_url' => 'https://master-addons.com/element/ninja-form/',
1034 'docs_url' => 'https://master-addons.com/docs/addons/how-to-edit-contact-form-7/',
1035 'tuts_url' => 'https://www.youtube.com/watch?v=1fU6lWniRqo',
1036 'tuts_features' => [
1037 "Full Ninja Forms styling in Elementor",
1038 "No Pro plugin required",
1039 "Custom field and button styling",
1040 "Responsive layout and color controls"
1041 ],
1042 'is_pro' => false,
1043 'assets' => [
1044 'css' => true,
1045 ],
1046 ],
1047 'wpforms' => [
1048 'title' => 'WP Forms',
1049 'icon' => 'eicon-mail',
1050 'class' => 'MasterAddons\Addons\WP_Forms',
1051 'demo_url' => 'https://master-addons.com/element/wp-forms/',
1052 'docs_url' => 'https://master-addons.com/docs/addons/how-to-edit-contact-form-7/',
1053 'tuts_url' => 'https://www.youtube.com/watch?v=1fU6lWniRqo',
1054 'tuts_features' => [
1055 "Drag-and-drop WPForms styling",
1056 "Style forms inside Elementor editor",
1057 "Custom input focus and hover state",
1058 "Full typography and spacing control"
1059 ],
1060 'is_pro' => false,
1061 'assets' => [
1062 'css' => true,
1063 ],
1064 ],
1065 'gravity-forms' => [
1066 'title' => 'Gravity Forms',
1067 'icon' => 'eicon-mail',
1068 'class' => 'MasterAddons\Addons\Gravity_Forms',
1069 'demo_url' => 'https://master-addons.com/element/gravity-forms/',
1070 'docs_url' => 'https://master-addons.com/docs/addons/how-to-edit-contact-form-7/',
1071 'tuts_url' => 'https://www.youtube.com/watch?v=1fU6lWniRqo',
1072 'tuts_features' => [
1073 "Brand-matched Gravity Forms styling",
1074 "Style forms directly in Elementor",
1075 "Custom field borders and colors",
1076 "Full typography and button control"
1077 ],
1078 'is_pro' => true,
1079 ],
1080 'caldera-forms' => [
1081 'title' => 'Caldera Forms',
1082 'icon' => 'eicon-mail',
1083 'class' => 'MasterAddons\Addons\Caldera_Forms',
1084 'demo_url' => 'https://master-addons.com/element/caldera-forms/',
1085 'docs_url' => 'https://master-addons.com/docs/addons/how-to-edit-contact-form-7/',
1086 'tuts_url' => 'https://www.youtube.com/watch?v=1fU6lWniRqo',
1087 'tuts_features' => [
1088 "Mobile-friendly Caldera Forms styling",
1089 "No CSS expertise required",
1090 "Custom color and field styling",
1091 "Responsive layout control support"
1092 ],
1093 'is_pro' => false,
1094 'assets' => [
1095 'css' => true,
1096 ],
1097 ],
1098 'weforms' => [
1099 'title' => 'weForms',
1100 'icon' => 'eicon-mail',
1101 'class' => 'MasterAddons\Addons\Weforms',
1102 'demo_url' => 'https://master-addons.com/demos/wp-forms/',
1103 'docs_url' => 'https://master-addons.com/docs/addons/how-to-edit-contact-form-7/',
1104 'tuts_url' => 'https://www.youtube.com/watch?v=1fU6lWniRqo',
1105 'tuts_features' => [
1106 "weForms layout customization in Elementor",
1107 "Style fields and buttons visually",
1108 "Custom color and typography controls",
1109 "Responsive design support included"
1110 ],
1111 'is_pro' => false,
1112 'assets' => [
1113 'css' => true,
1114 ],
1115 ],
1116 // 'fluent-form' => [
1117 // 'title' => 'Fluent Form',
1118 // 'icon' => 'eicon-form-horizontal',
1119 // 'class' => 'MasterAddons\Addons\Fluent_Form',
1120 // 'demo_url' => '',
1121 // 'docs_url' => '',
1122 // 'tuts_url' => '',
1123 // 'is_pro' => false,
1124 // 'assets' => [
1125 // 'css' => true,
1126 // ],
1127 // ],
1128 ],
1129 ],
1130 'marketing' => [
1131 'title' => 'Marketing',
1132 'icon' => 'eicon-price-table',
1133 'order' => 60,
1134 'addons' => [
1135 'ma-call-to-action' => [
1136 'title' => 'Call to Action',
1137 'icon' => 'eicon-call-to-action',
1138 'class' => 'MasterAddons\Addons\Call_to_Action',
1139 'demo_url' => 'https://master-addons.com/element/call-to-action/',
1140 'docs_url' => 'https://master-addons.com/docs/addons/call-to-action/',
1141 'tuts_url' => 'https://www.youtube.com/watch?v=iY2q1jtSV5o',
1142 'tuts_features' => [
1143 "Eye-catching title and description layout",
1144 "Customizable CTA button with hover effects",
1145 "Multiple design style variations",
1146 "Full color and typography controls"
1147 ],
1148 'is_pro' => false,
1149 'assets' => [
1150 'css' => true,
1151 'vendors' => ['common'],
1152 ],
1153 ],
1154 'ma-pricing-table' => [
1155 'title' => 'Pricing Table',
1156 'icon' => 'eicon-price-table',
1157 'class' => 'MasterAddons\Addons\Pricing_Table',
1158 'demo_url' => 'https://master-addons.com/element/pricing-table/',
1159 'docs_url' => 'https://master-addons.com/docs/addons/pricing-table-elementor-free-widget/',
1160 'tuts_url' => 'https://www.youtube.com/watch?v=_FUk1EfLBUs',
1161 'tuts_features' => [
1162 "Toggle switcher for monthly/yearly plans",
1163 "Tooltips on individual features",
1164 "Gradient buttons and feature list styling",
1165 "Highlighted recommended plan support"
1166 ],
1167 'is_pro' => false,
1168 'assets' => [
1169 'css' => true,
1170 'vendors' => ['common']
1171 ],
1172 ],
1173 'ma-comparison-table' => [
1174 'title' => 'Comparison Table',
1175 'icon' => 'eicon-price-table',
1176 'class' => 'MasterAddons\Addons\Comparison_Table',
1177 'demo_url' => 'https://master-addons.com/element/comparison-table/',
1178 'docs_url' => 'https://master-addons.com/docs/addons/elementor-comparison-table/',
1179 'tuts_url' => 'https://www.youtube.com/watch?v=qUkY1YwPz2Y',
1180 'tuts_features' => [
1181 "Side-by-side feature comparison layout",
1182 "Add titles, prices, and checkmarks",
1183 "Highlight recommended column option",
1184 "Full color and typography styling"
1185 ],
1186 'is_pro' => true,
1187 ],
1188 // 'ma-coupon-code' => [
1189 // 'title' => 'Coupon Code',
1190 // 'icon' => 'eicon-barcode',
1191 // 'class' => 'MasterAddons\Addons\Coupon_Code',
1192 // 'demo_url' => '',
1193 // 'docs_url' => '',
1194 // 'tuts_url' => '',
1195 // 'is_pro' => true,
1196 // ],
1197 'ma-mailchimp' => [
1198 'title' => 'Mailchimp',
1199 'icon' => 'eicon-mailchimp',
1200 'class' => 'MasterAddons\Addons\Mailchimp',
1201 'demo_url' => 'https://master-addons.com/element/mailchimp/',
1202 'docs_url' => 'https://master-addons.com/docs/addons/mailchimp-element/',
1203 'tuts_url' => 'https://www.youtube.com/watch?v=hST5tycqCsw',
1204 'tuts_features' => [
1205 "Native Mailchimp form integration",
1206 "No Pro plugin needed",
1207 "Full input and button styling",
1208 "Custom success and error messages"
1209 ],
1210 'is_pro' => false,
1211 'assets' => [
1212 'css' => true,
1213 ],
1214 ],
1215 'ma-domain-checker' => [
1216 'title' => 'Domain Search',
1217 'icon' => 'eicon-check-circle',
1218 'class' => 'MasterAddons\Addons\Domain_Search',
1219 'demo_url' => 'https://master-addons.com/element/domain-search/',
1220 'docs_url' => 'https://master-addons.com/docs/addons/how-ma-domain-checker-works/',
1221 'tuts_url' => 'https://www.youtube.com/watch?v=eRjGflYhHdY',
1222 'tuts_features' => [
1223 "White-label domain search tool",
1224 "Ideal for hosting and affiliates",
1225 "Custom button and input styling",
1226 "TLD filter and results display"
1227 ],
1228 'is_pro' => true,
1229 ],
1230 'ma-popup-trigger' => [
1231 'title' => 'Popup Trigger',
1232 'icon' => 'eicon-button',
1233 'class' => 'MasterAddons\Addons\Popup_Trigger',
1234 'demo_url' => 'https://master-addons.com/demos/popup-trigger/',
1235 'docs_url' => 'https://master-addons.com/docs/addons/popup-trigger/',
1236 'tuts_url' => '',
1237 'is_pro' => false,
1238 'assets' => [
1239 'css' => true,
1240 ],
1241 'ribbons' => [ 'new' ]
1242 ],
1243 // 'ma-social-share' => [
1244 // 'title' => 'Social Share',
1245 // 'icon' => 'eicon-share',
1246 // 'class' => 'MasterAddons\Addons\Social_Share',
1247 // 'demo_url' => '',
1248 // 'docs_url' => '',
1249 // 'tuts_url' => '',
1250 // 'is_pro' => false,
1251 // 'assets' => [
1252 // 'css' => true,
1253 // ],
1254 // ],
1255 // 'ma-calendar' => [
1256 // 'title' => 'Calendar',
1257 // 'icon' => 'eicon-calendar',
1258 // 'class' => 'MasterAddons\Addons\Calendar',
1259 // 'demo_url' => '',
1260 // 'docs_url' => '',
1261 // 'tuts_url' => '',
1262 // 'is_pro' => true,
1263 // ],
1264 // 'ma-pros-and-cons' => [
1265 // 'title' => 'Pros and Cons',
1266 // 'icon' => 'eicon-columns',
1267 // 'class' => 'MasterAddons\Addons\Pros_Cons',
1268 // 'demo_url' => '',
1269 // 'docs_url' => '',
1270 // 'tuts_url' => '',
1271 // 'is_pro' => true,
1272 // ],
1273 ],
1274 ],
1275 'animation' => [
1276 'title' => 'Animation',
1277 'icon' => 'eicon-animation',
1278 'order' => 70,
1279 'addons' => [
1280 'ma-animated-headlines' => [
1281 'title' => 'Animated Headlines',
1282 'icon' => 'eicon-animated-headline',
1283 'class' => 'MasterAddons\Addons\Animated_Headlines',
1284 'demo_url' => 'https://master-addons.com/element/animated-headlines/',
1285 'docs_url' => 'https://master-addons.com/docs/addons/animated-headline-elementor-page-builder/',
1286 'tuts_url' => 'https://www.youtube.com/watch?v=09QIUPdUQnM',
1287 'tuts_features' => [
1288 "Multiple dynamic text animation styles",
1289 "Customizable animation delay and speed",
1290 "Loading bar with color controls",
1291 "Fully responsive typography settings"
1292 ],
1293 'is_pro' => false,
1294 'assets' => [
1295 'css' => true,
1296 'js' => true,
1297 ],
1298 'ribbons' => [ 'hot' ]
1299 ],
1300
1301 // 'ma-scroll-indicator' => [
1302 // 'title' => 'Scroll Indicator',
1303 // 'icon' => 'eicon-scroll',
1304 // 'class' => 'MasterAddons\Addons\Scroll_Indicator',
1305 // 'demo_url' => '',
1306 // 'docs_url' => '',
1307 // 'tuts_url' => '',
1308 // 'is_pro' => true,
1309 // ],
1310 ],
1311 ],
1312 'dynamic' => [
1313 'title' => 'Dynamic',
1314 'icon' => 'eicon-flash',
1315 'order' => 80,
1316 'addons' => [
1317 'ma-current-time' => [
1318 'title' => 'Current Time',
1319 'icon' => 'eicon-clock-o',
1320 'class' => 'MasterAddons\Addons\Current_Time',
1321 'demo_url' => 'https://master-addons.com/element/current-time/',
1322 'docs_url' => 'https://master-addons.com/docs/addons/current-time/',
1323 'tuts_url' => 'https://www.youtube.com/watch?v=Icwi5ynmzkQ',
1324 'tuts_features' => [
1325 "Live clock widget in real-time",
1326 "Customizable time and date format",
1327 "Styled like a newspaper masthead",
1328 "Full typography and color control"
1329 ],
1330 'is_pro' => false,
1331 // 'assets' => [
1332 // 'css' => true,
1333 // ],
1334 ],
1335 // 'ma-site-logo' => [
1336 // 'title' => 'Site Logo',
1337 // 'icon' => 'eicon-site-logo',
1338 // 'class' => 'MasterAddons\Addons\Site_Logo',
1339 // 'demo_url' => '',
1340 // 'docs_url' => '',
1341 // 'tuts_url' => '',
1342 // 'is_pro' => false,
1343 // 'assets' => [
1344 // 'css' => true,
1345 // ],
1346 // ],
1347 // 'ma-data-table' => [
1348 // 'title' => 'Data Table',
1349 // 'icon' => 'eicon-table',
1350 // 'class' => 'MasterAddons\Addons\Data_Table',
1351 // 'demo_url' => '',
1352 // 'docs_url' => '',
1353 // 'tuts_url' => '',
1354 // 'is_pro' => false,
1355 // 'assets' => [
1356 // 'css' => true,
1357 // ],
1358 // ],
1359 'ma-table' => [
1360 'title' => 'Dynamic Table',
1361 'icon' => 'eicon-table',
1362 'class' => 'MasterAddons\Addons\Dynamic_Table',
1363 'demo_url' => 'https://master-addons.com/element/dynamic-table/',
1364 'docs_url' => 'https://master-addons.com/docs/addons/dynamic-table-element/',
1365 'tuts_url' => 'https://www.youtube.com/watch?v=bn0TvaGf9l8',
1366 'tuts_features' => [
1367 "Drag-and-drop table builder",
1368 "Add images, colors, and columns",
1369 "Odd/even row coloring support",
1370 "Border radius and non-responsive mode"
1371 ],
1372 'is_pro' => false,
1373 'assets' => [
1374 'css' => true,
1375 'vendors' => ['common'],
1376 ],
1377 ],
1378 // 'ma-chatgpt' => [
1379 // 'title' => 'ChatGPT',
1380 // 'icon' => 'eicon-ai',
1381 // 'class' => 'MasterAddons\Addons\CHATGPT',
1382 // 'demo_url' => '',
1383 // 'docs_url' => '',
1384 // 'tuts_url' => '',
1385 // 'is_pro' => true,
1386 // ],
1387 'ma-search' => [
1388 'title' => 'Search',
1389 'icon' => 'eicon-search',
1390 'class' => 'MasterAddons\Addons\Search',
1391 'demo_url' => 'https://master-addons.com/element/search/',
1392 'docs_url' => 'https://master-addons.com/docs/addons/search-element/',
1393 'tuts_url' => 'https://www.youtube.com/watch?v=Uk6nnoN5AJ4',
1394 'tuts_features' => [
1395 "Standalone or popup search bar",
1396 "Instant site-wide search results",
1397 "Custom placeholder and icon styling",
1398 "Fully responsive design support"
1399 ],
1400 'is_pro' => false,
1401 'assets' => [
1402 'css' => true,
1403 'js' => true,
1404 ],
1405 ],
1406
1407 ],
1408 ],
1409 'woocommerce' => [
1410 'title' => 'WooCommerce',
1411 'icon' => 'eicon-woocommerce',
1412 'order' => 80,
1413 'addons' => [
1414 // 'ma-product-listing' => [
1415 // 'title' => 'Product Listing',
1416 // 'icon' => 'eicon-product-tabs',
1417 // 'class' => 'MasterAddons\Addons\Product_Listing',
1418 // 'demo_url' => '',
1419 // 'docs_url' => '',
1420 // 'tuts_url' => '',
1421 // 'is_pro' => true,
1422 // ],
1423 'ma-featured-product' => [
1424 'title' => 'Featured Product',
1425 'icon' => 'eicon-image-box',
1426 'class' => 'MasterAddons\Addons\Featured_Product',
1427 'demo_url' => 'https://master-addons.com/element/featured-product/',
1428 'docs_url' => 'https://master-addons.com/docs/addons/featured-product-element/',
1429 'tuts_url' => 'https://youtu.be/nh6NVP5IQf0',
1430 'tuts_features' => [
1431 "Visually highlight a single product",
1432 "Great for affiliate offer layouts",
1433 "Custom image, title, and CTA",
1434 "Attractive and flexible design options"
1435 ],
1436 'is_pro' => true,
1437 ],
1438 // 'ma-product-review' => [
1439 // 'title' => 'Product Review',
1440 // 'icon' => 'eicon-columns',
1441 // 'class' => 'MasterAddons\Addons\Product_Review',
1442 // 'demo_url' => '',
1443 // 'docs_url' => '',
1444 // 'tuts_url' => '',
1445 // 'is_pro' => true,
1446 // ],
1447 // 'ma-wc-product-carousel' => [
1448 // 'title' => 'WC Product Carousel',
1449 // 'icon' => 'eicon-slideshow',
1450 // 'class' => 'MasterAddons\Addons\WC_Product_Carousel',
1451 // 'demo_url' => '',
1452 // 'docs_url' => '',
1453 // 'tuts_url' => '',
1454 // 'is_pro' => true,
1455 // ],
1456 // 'ma-wc-product-table' => [
1457 // 'title' => 'WC Product Table',
1458 // 'icon' => 'eicon-woocommerce',
1459 // 'class' => 'MasterAddons\Addons\WC_Product_Table',
1460 // 'demo_url' => '',
1461 // 'docs_url' => '',
1462 // 'tuts_url' => '',
1463 // 'is_pro' => true,
1464 // ],
1465 // 'ma-wc-products-gallery' => [
1466 // 'title' => 'WC Products Gallery',
1467 // 'icon' => 'eicon-gallery-grid',
1468 // 'class' => 'MasterAddons\Addons\WC_Products_Gallery',
1469 // 'demo_url' => '',
1470 // 'docs_url' => '',
1471 // 'tuts_url' => '',
1472 // 'is_pro' => true,
1473 // ],
1474 // 'ma-wc-single-product' => [
1475 // 'title' => 'WC Single Product',
1476 // 'icon' => 'eicon-product-info',
1477 // 'class' => 'MasterAddons\Addons\WC_Single_Product',
1478 // 'demo_url' => '',
1479 // 'docs_url' => '',
1480 // 'tuts_url' => '',
1481 // 'is_pro' => true,
1482 // ],
1483 // 'ma-wc-add-to-cart' => [
1484 // 'title' => 'WC Add to Cart',
1485 // 'icon' => 'eicon-cart',
1486 // 'class' => 'MasterAddons\Addons\WC_Add_To_Cart',
1487 // 'demo_url' => '',
1488 // 'docs_url' => '',
1489 // 'tuts_url' => '',
1490 // 'is_pro' => true,
1491 // ],
1492 // 'woocommerce-products-display' => [
1493 // 'title' => 'WC Products',
1494 // 'icon' => 'eicon-woocommerce',
1495 // 'class' => 'MasterAddons\Addons\Woocommerce_Products_Display',
1496 // 'demo_url' => '',
1497 // 'docs_url' => '',
1498 // 'tuts_url' => '',
1499 // 'is_pro' => false,
1500 // 'assets' => [
1501 // 'css' => true,
1502 // ],
1503 // ],
1504 // 'woocommerce-products-carousel-layouts' => [
1505 // 'title' => 'WC Products Carousel',
1506 // 'icon' => 'eicon-woocommerce',
1507 // 'class' => 'MasterAddons\Addons\Woocommerce_Products_Carousel_Display',
1508 // 'demo_url' => '',
1509 // 'docs_url' => '',
1510 // 'tuts_url' => '',
1511 // 'is_pro' => false,
1512 // 'assets' => [
1513 // 'css' => true,
1514 // ],
1515 // ],
1516 // 'woocommerce-products-gallery' => [
1517 // 'title' => 'WC Products Gallery',
1518 // 'icon' => 'eicon-woocommerce',
1519 // 'class' => 'MasterAddons\Addons\WooCommerce_Products_Gallery',
1520 // 'demo_url' => '',
1521 // 'docs_url' => '',
1522 // 'tuts_url' => '',
1523 // 'is_pro' => false,
1524 // 'assets' => [
1525 // 'css' => true,
1526 // ],
1527 // ],
1528 // 'woocommerce-header-products' => [
1529 // 'title' => 'WC Header Products',
1530 // 'icon' => 'eicon-woocommerce',
1531 // 'class' => 'MasterAddons\Addons\WooCommerce_Header_Products',
1532 // 'demo_url' => '',
1533 // 'docs_url' => '',
1534 // 'tuts_url' => '',
1535 // 'is_pro' => false,
1536 // 'assets' => [
1537 // 'css' => true,
1538 // ],
1539 // ],
1540 // 'woocommerce-products-showcase' => [
1541 // 'title' => 'WC Products Showcase',
1542 // 'icon' => 'eicon-woocommerce',
1543 // 'class' => 'MasterAddons\Addons\WooCommerce_Products_Showcase',
1544 // 'demo_url' => '',
1545 // 'docs_url' => '',
1546 // 'tuts_url' => '',
1547 // 'is_pro' => false,
1548 // 'assets' => [
1549 // 'css' => true,
1550 // ],
1551 // ],
1552 // 'woocommerce-products-tab' => [
1553 // 'title' => 'WC Products Tab',
1554 // 'icon' => 'eicon-woocommerce',
1555 // 'class' => 'MasterAddons\Addons\WooCommerce_Products_Tab',
1556 // 'demo_url' => '',
1557 // 'docs_url' => '',
1558 // 'tuts_url' => '',
1559 // 'is_pro' => false,
1560 // 'assets' => [
1561 // 'css' => true,
1562 // ],
1563 // ],
1564 // 'woocommerce-sale-products-display' => [
1565 // 'title' => 'WC Sale Products',
1566 // 'icon' => 'eicon-woocommerce',
1567 // 'class' => 'MasterAddons\Addons\Woocommerce_Sale_Products_Display',
1568 // 'demo_url' => '',
1569 // 'docs_url' => '',
1570 // 'tuts_url' => '',
1571 // 'is_pro' => false,
1572 // 'assets' => [
1573 // 'css' => true,
1574 // ],
1575 // ],
1576 // 'woocommerce-sale-products-carousel-layouts' => [
1577 // 'title' => 'WC Sale Products Carousel',
1578 // 'icon' => 'eicon-woocommerce',
1579 // 'class' => 'MasterAddons\Addons\Woocommerce_Sale_Products_Carousel_Display',
1580 // 'demo_url' => '',
1581 // 'docs_url' => '',
1582 // 'tuts_url' => '',
1583 // 'is_pro' => false,
1584 // 'assets' => [
1585 // 'css' => true,
1586 // ],
1587 // ],
1588 ]
1589 ],
1590 ],
1591
1592 /**
1593 * Extension Groups
1594 */
1595 'extensions_category' => [
1596 'animation' => [
1597 'title' => 'Animation',
1598 'icon' => 'eicon-animation',
1599 'order' => 10,
1600 'extensions' => [
1601 'transition' => [
1602 'title' => 'Entrance Animation',
1603 'icon' => 'eicon-animation',
1604 'class' => 'MasterAddons\Pro\Modules\Animation\Transition',
1605 'demo_url' => 'https://master-addons.com/extension/entrance-animation/',
1606 'docs_url' => 'https://master-addons.com/docs/extensions/entrance-animation/',
1607 'tuts_url' => 'https://www.youtube.com/watch?v=kphJEszEAFQ',
1608 'tuts_features' => [
1609 "Extended entrance animation library",
1610 "Custom duration, delay, and repeat",
1611 "Triggers on scroll into viewport",
1612 "Dozens of animation style options"
1613 ],
1614 'is_pro' => true,
1615 'ribbons' => [ 'hot' ]
1616 ],
1617 'transforms' => [
1618 'title' => 'Transforms',
1619 'icon' => 'eicon-sync',
1620 'class' => 'MasterAddons\Pro\Modules\Animation\Transforms',
1621 'demo_url' => 'https://master-addons.com/extension/transforms/',
1622 'docs_url' => 'https://master-addons.com/docs/extensions/transforms-extension/',
1623 'tuts_url' => 'https://www.youtube.com/watch?v=sH2BQT0xOnY',
1624 'tuts_features' => [
1625 "CSS transform animations on elements",
1626 "Move, rotate, scale, and skew",
1627 "Trigger on load or interaction",
1628 "Per-device transform control support"
1629 ],
1630 'is_pro' => true,
1631 'ribbons' => [ 'hot' ]
1632 ],
1633 'reveal' => [
1634 'title' => 'Reveal',
1635 'icon' => 'eicon-animation-text',
1636 'class' => 'MasterAddons\Pro\Modules\Animation\Reveal',
1637 'demo_url' => 'https://master-addons.com/extension/reveal/',
1638 'docs_url' => 'https://master-addons.com/docs/extensions/reveal-extension/',
1639 'tuts_url' => 'https://www.youtube.com/watch?v=xEG1fi_lY1M',
1640 'tuts_features' => [
1641 "Directional reveal animation on scroll",
1642 "Custom speed, delay, and direction",
1643 "Custom background color for reveal",
1644 "Works on any Elementor element"
1645 ],
1646 'is_pro' => true,
1647 'ribbons' => [ 'hot' ]
1648 ],
1649 'rellax' => [
1650 'title' => 'Rellax',
1651 'icon' => 'eicon-scroll',
1652 'class' => 'MasterAddons\Pro\Modules\Animation\Rellax',
1653 'demo_url' => 'https://master-addons.com/extension/rellax/',
1654 'docs_url' => 'https://master-addons.com/docs/extensions/rellax-extension/',
1655 'tuts_url' => 'https://www.youtube.com/watch?v=xYvMVXoZ_NE',
1656 'tuts_features' => [
1657 "Smooth parallax scrolling effect",
1658 "Custom speed and layer depth",
1659 "Per-device parallax control",
1660 "Adds depth and motion to layouts"
1661 ],
1662 'is_pro' => true,
1663 ],
1664 'floating-effects' => [
1665 'title' => 'Floating Effects',
1666 'icon' => 'eicon-parallax',
1667 'class' => 'MasterAddons\Pro\Modules\Animation\FloatingEffects',
1668 'demo_url' => 'https://master-addons.com/extension/floating-effects/',
1669 'docs_url' => 'https://master-addons.com/docs/extensions/floating-effects/',
1670 'tuts_url' => 'https://youtu.be/GG-hl3cG3Dw',
1671 'tuts_features' => [
1672 "Floating and bobbing animations",
1673 "Rotating effects on any element",
1674 "Custom speed and direction control",
1675 "Makes elements visually stand out"
1676 ],
1677 'is_pro' => true,
1678 'ribbons' => [ 'popular' ]
1679 ],
1680 'particles' => [
1681 'title' => 'Particles',
1682 'icon' => 'eicon-background',
1683 'class' => 'MasterAddons\Modules\Animation\Particles',
1684 'demo_url' => 'https://master-addons.com/extension/particles/',
1685 'docs_url' => 'https://master-addons.com/docs/extensions/particles-extension/',
1686 'tuts_url' => 'https://www.youtube.com/watch?v=sNC0pik_g3Q',
1687 'tuts_features' => [
1688 "Animated particle effects on sections",
1689 "Polygons, snow, and stars options",
1690 "Custom particle count and speed",
1691 "Interactive mouse hover movement"
1692 ],
1693 'is_pro' => false,
1694 'assets' => [
1695 'js' => true,
1696 'vendors' => ['particles'],
1697 ],
1698 ],
1699 'animated-gradient' => [
1700 'title' => 'Animated Gradient BG',
1701 'icon' => 'eicon-barcode',
1702 'class' => 'MasterAddons\Pro\Modules\Animation\AnimatedGradient',
1703 'demo_url' => 'https://master-addons.com/extension/animated-gradient-bg/',
1704 'docs_url' => 'https://master-addons.com/docs/extensions/animated-gradient-background-extension/',
1705 'tuts_url' => 'https://www.youtube.com/watch?v=jANMWGDaeG0',
1706 'tuts_features' => [
1707 "Smoothly transitioning animated gradients",
1708 "Apply to sections and columns",
1709 "Custom color stops and speed",
1710 "No coding required to configure"
1711 ],
1712 'is_pro' => true,
1713 'assets' => [
1714 'js' => true,
1715 ],
1716 ],
1717 'bg-slider' => [
1718 'title' => 'Background Slider',
1719 'icon' => 'eicon-slider-push',
1720 'class' => 'MasterAddons\Modules\Animation\BgSlider',
1721 'demo_url' => 'https://master-addons.com/extension/background-slider/',
1722 'docs_url' => 'https://master-addons.com/docs/extensions/background-slider-extension/',
1723 'tuts_url' => 'https://www.youtube.com/watch?v=Z6ujz7Hunjg',
1724 'tuts_features' => [
1725 "Multi-image background slideshow",
1726 "Ken Burns zoom and pan effect",
1727 "Custom transition speed and style",
1728 "Works on any section or container"
1729 ],
1730 'is_pro' => false,
1731 'assets' => [
1732 'js' => true,
1733 'vendors' => ['vegas'],
1734 ],
1735 ],
1736 // 'morphing-effects' => [
1737 // 'title' => 'Morphing Effects',
1738 // 'icon' => 'eicon-parallax',
1739 // 'class' => 'MasterAddons\Pro\Modules\Animation\MorphingEffects',
1740 // 'demo_url' => '',
1741 // 'docs_url' => '',
1742 // 'tuts_url' => '',
1743 // 'is_pro' => true,
1744 // ],
1745 // 'parallax-background' => [
1746 // 'title' => 'Parallax Background',
1747 // 'icon' => 'eicon-parallax',
1748 // 'class' => 'MasterAddons\Pro\Modules\Animation\ParallaxBackground',
1749 // 'demo_url' => '',
1750 // 'docs_url' => '',
1751 // 'tuts_url' => '',
1752 // 'is_pro' => true,
1753 // ],
1754 // 'parallax-elements' => [
1755 // 'title' => 'Parallax Elements',
1756 // 'icon' => 'eicon-parallax',
1757 // 'class' => 'MasterAddons\Pro\Modules\Animation\ParallaxElements',
1758 // 'demo_url' => '',
1759 // 'docs_url' => '',
1760 // 'tuts_url' => '',
1761 // 'is_pro' => true,
1762 // ],
1763 ],
1764 ],
1765 'display' => [
1766 'title' => 'Display',
1767 'icon' => 'eicon-preview-medium',
1768 'order' => 20,
1769 'extensions' => [
1770 'glassmorphism' => [
1771 'title' => 'Glassmorphism',
1772 'icon' => 'eicon-adjust',
1773 'class' => 'MasterAddons\Modules\Display\Glassmorphism',
1774 'demo_url' => 'https://master-addons.com/extension/glassmorphism/',
1775 'docs_url' => 'https://master-addons.com/docs/extensions/elementor-glassmorphism-effects/',
1776 'tuts_url' => 'https://www.youtube.com/watch?v=P_2IZVslLlE',
1777 'tuts_features' => [
1778 "Frosted glass effect on sections",
1779 "Background blur and opacity control",
1780 "Modern layered design aesthetic",
1781 "Custom border and shadow styling"
1782 ],
1783 'is_pro' => false,
1784 'ribbons' => [ 'popular' ]
1785 ],
1786 'patterns' => [
1787 'title' => 'Patterns',
1788 'icon' => 'eicon-global-colors',
1789 'class' => 'MasterAddons\Modules\Display\Patterns',
1790 'demo_url' => 'https://master-addons.com/extension/patterns/',
1791 'docs_url' => 'https://master-addons.com/docs/extensions/pattern/',
1792 'tuts_url' => 'https://www.youtube.com/watch?v=AKXqXttG5zI',
1793 'tuts_features' => [
1794 "Decorative pattern overlays on sections",
1795 "Multiple pattern style options",
1796 "Custom color and opacity control",
1797 "Works on any section background"
1798 ],
1799 'is_pro' => false,
1800 ],
1801 'grid-line' => [
1802 'title' => 'Grid Line',
1803 'icon' => 'eicon-inner-section',
1804 'class' => 'MasterAddons\Pro\Modules\Display\GridLine',
1805 'demo_url' => 'https://master-addons.com/extension/grid-line/',
1806 'docs_url' => 'https://master-addons.com/docs/extensions/grid-line/',
1807 'tuts_url' => 'https://www.youtube.com/watch?v=LsY14ldpXXI',
1808 'tuts_features' => [
1809 "Decorative grid lines on sections",
1810 "Custom line color and opacity",
1811 "Horizontal and vertical line options",
1812 "Adds structured visual depth effect"
1813 ],
1814 'is_pro' => true,
1815 'ribbons' => [ 'popular' ]
1816 ],
1817 'positioning' => [
1818 'title' => 'Positioning',
1819 'icon' => 'eicon-column',
1820 'class' => 'MasterAddons\Modules\Display\Positioning',
1821 'demo_url' => 'https://master-addons.com/extension/positioning/',
1822 'docs_url' => 'https://master-addons.com/docs/extensions/positioning-extension/',
1823 'tuts_url' => 'https://www.youtube.com/watch?v=sXPZv3zVlmY',
1824 'tuts_features' => [
1825 "Absolute, relative, or fixed positioning",
1826 "Per-device positioning controls",
1827 "Custom top, left, right, bottom offset",
1828 "Works on any Elementor element"
1829 ],
1830 'is_pro' => false,
1831 ],
1832 'extras' => [
1833 'title' => 'Container Extras',
1834 'icon' => 'eicon-plus-square',
1835 'class' => 'MasterAddons\Modules\Display\Extras',
1836 'demo_url' => 'https://master-addons.com/extension/container-extras/',
1837 'docs_url' => 'https://master-addons.com/docs/extensions/container-extras/',
1838 'tuts_url' => 'https://www.youtube.com/watch?v=-_ZsQFq9Z-k',
1839 'tuts_features' => [
1840 "Precise px or % size control",
1841 "Beyond Elementor built-in limits",
1842 "Custom min and max width support",
1843 "Works on sections and columns"
1844 ],
1845 'is_pro' => false,
1846 ],
1847 'mega-menu' => [
1848 'title' => 'Mega Menu',
1849 'icon' => 'eicon-nav-menu',
1850 'class' => 'MasterAddons\Modules\Display\MegaMenu',
1851 'demo_url' => 'https://master-addons.com/extension/mega-menu/',
1852 'docs_url' => 'https://master-addons.com/docs/addons/navigation-menu/',
1853 'tuts_url' => 'https://www.youtube.com/watch?v=HIf0ud-5Wpo',
1854 'tuts_features' => [
1855 "Feature-rich mega menu builder",
1856 "Use any Elementor widget inside",
1857 "3000+ icon support in menus",
1858 "Full color and typography controls"
1859 ],
1860 'is_pro' => false,
1861 'assets' => [
1862 'css' => ['megamenu'],
1863 'js' => ['mega-script'],
1864 ],
1865 'ribbons' => [ 'featured' ]
1866 ],
1867 // 'image-masking' => [
1868 // 'title' => 'Image Masking',
1869 // 'icon' => 'eicon-image-rollover',
1870 // 'class' => 'MasterAddons\Modules\Display\ImageMasking',
1871 // 'demo_url' => '',
1872 // 'docs_url' => '',
1873 // 'tuts_url' => '',
1874 // 'is_pro' => false,
1875 // 'assets' => [],
1876 // ],
1877 // 'shape-divider' => [
1878 // 'title' => 'Shape Divider',
1879 // 'icon' => 'eicon-divider-shape',
1880 // 'class' => 'MasterAddons\Modules\Display\ShapeDivider',
1881 // 'demo_url' => '',
1882 // 'docs_url' => '',
1883 // 'tuts_url' => '',
1884 // 'is_pro' => false,
1885 // 'assets' => [],
1886 // ],
1887 ],
1888 ],
1889 'dynamic' => [
1890 'title' => 'Dynamic',
1891 'icon' => 'eicon-database',
1892 'order' => 30,
1893 'extensions' => [
1894 'dynamic-tags' => [
1895 'title' => 'Dynamic Tags',
1896 'icon' => 'eicon-database',
1897 'class' => 'MasterAddons\Modules\Dynamic\DynamicTags',
1898 'demo_url' => 'https://master-addons.com/extension/dynamic-tags/',
1899 'docs_url' => 'https://master-addons.com/docs/extensions/dynamic-tags/',
1900 'tuts_url' => 'https://www.youtube.com/watch?v=89-whEg85uE',
1901 'tuts_features' => [
1902 "Support all Elements",
1903 "Archive support",
1904 "ACF support (coming soon)",
1905 "Taxonomy & Meta support"
1906 ],
1907 'is_pro' => false,
1908 'ribbons' => [ 'featured' ]
1909 ],
1910 // 'acf-dynamic-tags' => [
1911 // 'title' => 'ACF Dynamic Tags',
1912 // 'icon' => 'eicon-database',
1913 // 'class' => 'MasterAddons\Pro\Modules\Dynamic\AcfDynamicTags',
1914 // 'group' => 'dynamic',
1915 // 'subcategory' => 'tags',
1916 // 'demo_url' => 'https://master-addons.com/demos/acf-dynamic-tags/',
1917 // 'docs_url' => 'https://master-addons.com/docs/addons/acf-dynamic-tags/',
1918 // 'tuts_url' => '',
1919 // 'is_pro' => true,
1920 // ],
1921 'tooltips' => [
1922 'title' => 'Tooltips',
1923 'icon' => 'eicon-info-circle',
1924 'class' => 'MasterAddons\Pro\Modules\Dynamic\Tooltips',
1925 'demo_url' => 'https://master-addons.com/extension/tooltips/',
1926 'docs_url' => 'https://master-addons.com/docs/extensions/tooltip-extension-for-elementor/',
1927 'tuts_url' => 'https://www.youtube.com/watch?v=x-9tBsm6yCg',
1928 'tuts_features' => [
1929 "Add tooltips to any widget",
1930 "Custom content, position, and style",
1931 "Works on sections and columns",
1932 "Hover and click trigger options"
1933 ],
1934 'is_pro' => true,
1935 'ribbons' => [ 'popular' ]
1936 ],
1937 'wrapper-link' => [
1938 'title' => 'Wrapper Link',
1939 'icon' => 'eicon-editor-external-link',
1940 'class' => 'MasterAddons\Modules\Dynamic\WrapperLink',
1941 'demo_url' => 'https://master-addons.com/extension/wrapper-link/',
1942 'docs_url' => 'https://master-addons.com/docs/extensions/wrapper-link/',
1943 'tuts_url' => 'https://www.youtube.com/watch?v=fsbK4G9T-qM',
1944 'tuts_features' => [
1945 "Make any section fully clickable",
1946 "Single URL for entire container",
1947 "Works on sections, columns, containers",
1948 "No extra markup or coding needed"
1949 ],
1950 'is_pro' => false,
1951 'assets' => [
1952 'js' => true,
1953 ],
1954 'ribbons' => [ 'popular' ]
1955 ],
1956 'display-conditions' => [
1957 'title' => 'Display Conditions',
1958 'icon' => 'eicon-flow',
1959 'class' => 'MasterAddons\Pro\Modules\Dynamic\DisplayConditions',
1960 'demo_url' => 'https://master-addons.com/extension/display-conditions/',
1961 'docs_url' => 'https://master-addons.com/docs/extensions/display-conditions/',
1962 'tuts_url' => 'https://www.youtube.com/watch?v=6hDqKVQmsr8',
1963 'tuts_features' => [
1964 "Show or hide sections by user role",
1965 "Target by browser, OS, or URL",
1966 "Login status and date conditions",
1967 "Per-element visibility rule control"
1968 ],
1969 'is_pro' => true,
1970 'ribbons' => [ 'featured' ]
1971 ],
1972 ],
1973 ],
1974 'utilities' => [
1975 'title' => 'Utilities',
1976 'icon' => 'eicon-tools',
1977 'order' => 40,
1978 'extensions' => [
1979 'reading-progress-bar' => [
1980 'title' => 'Reading Progress Bar',
1981 'icon' => 'eicon-skill-bar',
1982 'class' => 'MasterAddons\Modules\Utilities\ReadingProgressBar',
1983 'demo_url' => 'https://master-addons.com/extension/reading-progress-bar/',
1984 'docs_url' => 'https://master-addons.com/docs/extensions/reading-progress-bar/',
1985 'tuts_url' => 'https://www.youtube.com/watch?v=eJIDMioxbZI',
1986 'tuts_features' => [
1987 "Reading progress indicator for posts",
1988 "Configurable color and height",
1989 "Ideal for long-form blog content",
1990 "Fixed position at top of page"
1991 ],
1992 'is_pro' => false,
1993 ],
1994 'custom-css' => [
1995 'title' => 'Custom CSS',
1996 'icon' => 'eicon-code',
1997 'class' => 'MasterAddons\Modules\Utilities\CustomCss',
1998 'demo_url' => 'https://master-addons.com/extension/custom-css/',
1999 'docs_url' => 'https://master-addons.com/docs/extensions/custom-css-extension/',
2000 'tuts_url' => 'https://www.youtube.com/watch?v=ajXVVGJZuuM',
2001 'tuts_features' => [
2002 "Write scoped CSS on any element",
2003 "Applied only to that element",
2004 "No global stylesheet conflicts",
2005 "Supports all valid CSS properties"
2006 ],
2007 'is_pro' => false,
2008 'ribbons' => [ 'popular' ]
2009 ],
2010 'custom-js' => [
2011 'title' => 'Custom JS',
2012 'icon' => 'eicon-code-bold',
2013 'class' => 'MasterAddons\Pro\Modules\Utilities\CustomJs',
2014 'demo_url' => 'https://master-addons.com/extension/custom-js/',
2015 'docs_url' => 'https://master-addons.com/docs/extensions/custom-js/',
2016 'tuts_url' => 'https://www.youtube.com/watch?v=8G4JLw0s8sI',
2017 'tuts_features' => [
2018 "Add scoped JavaScript to any element",
2019 "Advanced functionality and interactivity",
2020 "Runs only on the target element",
2021 "No extra plugin or coding setup"
2022 ],
2023 'is_pro' => true,
2024 ],
2025 'duplicator' => [
2026 'title' => 'Post/Page Duplicator',
2027 'icon' => 'eicon-clone',
2028 'class' => 'MasterAddons\Modules\Utilities\Duplicator',
2029 'demo_url' => 'https://master-addons.com/extension/post-page-duplicator/',
2030 'docs_url' => 'https://master-addons.com/docs/extensions/post-page-duplicator/',
2031 'tuts_url' => 'https://www.youtube.com/watch?v=12xY7wMrzHM',
2032 'tuts_features' => [
2033 "Clone any post or page instantly",
2034 "Includes full metadata duplication",
2035 "Works with WooCommerce products",
2036 "One-click duplicate from dashboard"
2037 ],
2038 'is_pro' => false,
2039 'ribbons' => [ 'popular' ]
2040 ],
2041 'which-element' => [
2042 'title' => 'Which Element',
2043 'icon' => 'eicon-handle',
2044 'class' => 'MasterAddons\Modules\Utilities\WhichElement',
2045 'demo_url' => 'https://master-addons.com/extension/which-element/',
2046 'docs_url' => 'https://master-addons.com/docs/extensions/which-element/',
2047 'tuts_url' => 'https://www.youtube.com/watch?v=LMjHXR0FzaY',
2048 'tuts_features' => [
2049 "Identify any element on the page",
2050 "Quickly inspect widget and settings",
2051 "Useful for debugging layouts fast",
2052 "Click-to-identify element tool"
2053 ],
2054 'is_pro' => false,
2055 'ribbons' => [ 'featured' ]
2056 ],
2057 'magic-copy' => [
2058 'title' => 'Magic Copy',
2059 'icon' => 'eicon-clone',
2060 'class' => 'MasterAddons\Pro\Modules\Utilities\MagicCopy',
2061 'demo_url' => 'https://master-addons.com/extension/magic-copy/',
2062 'docs_url' => 'https://master-addons.com/docs/extensions/magic-copy/',
2063 'tuts_url' => '',
2064 'tuts_features' => [
2065 "Copy any element across two sites",
2066 "Carries source global colors and fonts",
2067 "Imports media into the destination",
2068 "Does not change destination globals"
2069 ],
2070 'is_pro' => true,
2071 ],
2072 // 'image-optimizer' => [
2073 // 'title' => 'Image Optimizer',
2074 // 'icon' => 'eicon-image-rollover',
2075 // 'class' => 'MasterAddons\Pro\Admin\Image_Optimizer\Image_Optimizer',
2076 // 'demo_url' => '',
2077 // 'docs_url' => '',
2078 // 'tuts_url' => '',
2079 // 'is_pro' => true,
2080 // 'ribbons' => [ 'upcoming' ]
2081 // ],
2082 // 'cloudflare-turnstile' => [
2083 // 'title' => 'Cloudflare Turnstile',
2084 // 'icon' => 'eicon-lock-user',
2085 // 'class' => 'MasterAddons\Pro\Modules\Utilities\CloudflareTurnstile',
2086 // 'demo_url' => '',
2087 // 'docs_url' => '',
2088 // 'tuts_url' => '',
2089 // 'is_pro' => true,
2090 // 'ribbons' => [ 'upcoming' ]
2091 // ],
2092 ]
2093 ],
2094 ],
2095
2096 'icons_extended' => [
2097 'title' => 'Icons Extended',
2098 'icon' => 'eicon-favorite',
2099 'class' => 'MasterAddons\Modules\Utilities\IconsExtended',
2100 'is_pro' => false,
2101 'libraries' => [
2102 'simple-line-icons' => [
2103 'title' => 'Simple Line Icons',
2104 'icon' => 'icon-fire',
2105 'is_pro' => false,
2106 'demo_url' => 'https://master-addons.com/icon-library/',
2107 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2108 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2109 'tuts_features' => [
2110 "5 Free Icon library",
2111 "3 Pro icon library",
2112 "Lightweight icons",
2113 "Faster performance on loading"
2114 ],
2115 ],
2116 'elementor-icons' => [
2117 'title' => 'Elementor Icons',
2118 'icon' => 'eicon-elementor',
2119 'is_pro' => false,
2120 'demo_url' => 'https://master-addons.com/icon-library/',
2121 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2122 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2123 'tuts_features' => [
2124 "5 Free Icon library",
2125 "3 Pro icon library",
2126 "Lightweight icons",
2127 "Faster performance on loading"
2128 ],
2129 ],
2130 'iconic-fonts' => [
2131 'title' => 'Ionic Font',
2132 'is_pro' => false,
2133 'demo_url' => 'https://master-addons.com/icon-library/',
2134 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2135 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2136 'tuts_features' => [
2137 "5 Free Icon library",
2138 "3 Pro icon library",
2139 "Lightweight icons",
2140 "Faster performance on loading"
2141 ],
2142 ],
2143 'linear-icons' => [
2144 'title' => 'Linear Icons',
2145 'is_pro' => false,
2146 'demo_url' => 'https://master-addons.com/icon-library/',
2147 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2148 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2149 'tuts_features' => [
2150 "5 Free Icon library",
2151 "3 Pro icon library",
2152 "Lightweight icons",
2153 "Faster performance on loading"
2154 ],
2155 ],
2156 'material-icons' => [
2157 'title' => 'Material Icons',
2158 'is_pro' => false,
2159 'demo_url' => 'https://master-addons.com/icon-library/',
2160 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2161 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2162 'tuts_features' => [
2163 "5 Free Icon library",
2164 "3 Pro icon library",
2165 "Lightweight icons",
2166 "Faster performance on loading"
2167 ],
2168 ],
2169 'feather-icons' => [
2170 'title' => 'Feather Icons',
2171 'is_pro' => true,
2172 'demo_url' => 'https://master-addons.com/icon-library/',
2173 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2174 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2175 'tuts_features' => [
2176 "5 Free Icon library",
2177 "3 Pro icon library",
2178 "Lightweight icons",
2179 "Faster performance on loading"
2180 ],
2181 ],
2182 'remix-icons' => [
2183 'title' => 'Remix Icons',
2184 'is_pro' => true,
2185 'demo_url' => 'https://master-addons.com/icon-library/',
2186 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2187 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2188 'tuts_features' => [
2189 "5 Free Icon library",
2190 "3 Pro icon library",
2191 "Lightweight icons",
2192 "Faster performance on loading"
2193 ],
2194 ],
2195 'teeny-icons' => [
2196 'title' => 'Teeny Icons',
2197 'is_pro' => true,
2198 'demo_url' => 'https://master-addons.com/icon-library/',
2199 'docs_url' => 'https://master-addons.com/docs/extensions/icon-library/',
2200 'tuts_url' => 'https://www.youtube.com/watch?v=sp3XSiB_Uu8',
2201 'tuts_features' => [
2202 "5 Free Icon library",
2203 "3 Pro icon library",
2204 "Lightweight icons",
2205 "Faster performance on loading"
2206 ],
2207 ],
2208 ],
2209 ],
2210
2211 /**
2212 * Third-Party Plugin Integrations
2213 */
2214 'integrations' => [
2215 'custom-breakpoints' => [
2216 'title' => 'Custom Breakpoints',
2217 'class' => 'MasterCustomBreakPoint\JLTMA_Master_Custom_Breakpoint',
2218 'wp_slug' => 'custom-breakpoints-for-elementor',
2219 'plugin_file' => 'custom-breakpoints-for-elementor/custom-breakpoints-for-elementor.php',
2220 ],
2221 'adminify' => [
2222 'title' => 'WP Adminify',
2223 'class' => 'WPAdminify\WP_Adminify',
2224 'wp_slug' => 'adminify',
2225 'plugin_file' => 'adminify/adminify.php',
2226 ],
2227 ],
2228 ];
2229
2230 /**
2231 * Filter: Allow pro and third-party to modify config
2232 *
2233 * @param array $config Complete configuration array
2234 */
2235 self::$config = apply_filters('jltma_config', self::$config);
2236
2237 return self::$config;
2238 }
2239
2240 /**
2241 * Get all addons (widgets) - flattened for backward compatibility
2242 * Structure: addons_category > group > {title, icon, order, addons: widgets}
2243 *
2244 * @return array Flat array of all addons with group info added
2245 */
2246 public static function get_addons()
2247 {
2248 $config = self::get_config();
2249 $categories = $config['addons_category'] ?? [];
2250 $flat_addons = [];
2251
2252 foreach ($categories as $group => $group_data) {
2253 if (!is_array($group_data) || !isset($group_data['addons'])) {
2254 continue;
2255 }
2256
2257 $addons = $group_data['addons'];
2258 foreach ($addons as $key => $addon) {
2259 if (!is_array($addon)) {
2260 continue;
2261 }
2262 $addon['group'] = $group;
2263 $flat_addons[$key] = $addon;
2264 }
2265 }
2266
2267 return $flat_addons;
2268 }
2269
2270 /**
2271 * Get addons organized by groups (new structure)
2272 *
2273 * @return array Grouped addons array (group > {title, icon, order, addons})
2274 */
2275 public static function get_addons_grouped()
2276 {
2277 $config = self::get_config();
2278 return $config['addons_category'] ?? [];
2279 }
2280
2281 /**
2282 * Get addons by group
2283 *
2284 * @param string $group Group key (basic, content, media, forms, etc.)
2285 * @return array Flat array of addons in this group
2286 */
2287 public static function get_addons_by_group($group)
2288 {
2289 $config = self::get_config();
2290 $group_data = $config['addons_category'][$group] ?? [];
2291
2292 if (empty($group_data) || !isset($group_data['addons'])) {
2293 return [];
2294 }
2295
2296 $flat_addons = [];
2297 foreach ($group_data['addons'] as $key => $addon) {
2298 if (is_array($addon)) {
2299 $addon['group'] = $group;
2300 $flat_addons[$key] = $addon;
2301 }
2302 }
2303
2304 return $flat_addons;
2305 }
2306
2307 /**
2308 * Get all extensions - flattened for backward compatibility
2309 * Structure: extensions_category > group > {title, icon, order, extensions: items}
2310 *
2311 * @return array Flat array of all extensions with group info added
2312 */
2313 public static function get_extensions()
2314 {
2315 $config = self::get_config();
2316 $categories = $config['extensions_category'] ?? [];
2317 $flat_extensions = [];
2318
2319 foreach ($categories as $group => $group_data) {
2320 if (!is_array($group_data) || !isset($group_data['extensions'])) {
2321 continue;
2322 }
2323
2324 $extensions = $group_data['extensions'];
2325 foreach ($extensions as $key => $extension) {
2326 if (!is_array($extension)) {
2327 continue;
2328 }
2329 $extension['group'] = $group;
2330 $flat_extensions[$key] = $extension;
2331 }
2332 }
2333
2334 return $flat_extensions;
2335 }
2336
2337 /**
2338 * Get extensions organized by groups
2339 *
2340 * @return array Grouped extensions array (group > {title, icon, order, extensions})
2341 */
2342 public static function get_extensions_grouped()
2343 {
2344 $config = self::get_config();
2345 return $config['extensions_category'] ?? [];
2346 }
2347
2348 /**
2349 * Get extensions by group
2350 *
2351 * @param string $group Group key (animation, display, dynamic, utilities)
2352 * @return array Flat array of extensions in this group
2353 */
2354 public static function get_extensions_by_group($group)
2355 {
2356 $config = self::get_config();
2357 $group_data = $config['extensions_category'][$group] ?? [];
2358
2359 if (empty($group_data) || !isset($group_data['extensions'])) {
2360 return [];
2361 }
2362
2363 $flat_extensions = [];
2364 foreach ($group_data['extensions'] as $key => $extension) {
2365 if (is_array($extension)) {
2366 $extension['group'] = $group;
2367 $flat_extensions[$key] = $extension;
2368 }
2369 }
2370
2371 return $flat_extensions;
2372 }
2373
2374 /**
2375 * Get all icon libraries
2376 *
2377 * @return array
2378 */
2379 public static function get_icons()
2380 {
2381 $config = self::get_config();
2382 return $config['icons_extended']['libraries'] ?? [];
2383 }
2384
2385 /**
2386 * Get all recommended plugins / integrations
2387 *
2388 * @return array
2389 */
2390 public static function get_plugins()
2391 {
2392 $config = self::get_config();
2393 return $config['integrations'] ?? [];
2394 }
2395
2396 /**
2397 * Get UI groups configuration
2398 *
2399 * @return array
2400 */
2401 public static function get_groups()
2402 {
2403 $config = self::get_config();
2404 return $config['groups'] ?? [];
2405 }
2406
2407 /**
2408 * Get a single addon by key
2409 *
2410 * Supports legacy prefixes by normalizing to 'ma-' prefix:
2411 * - 'ma-el-' → 'ma-'
2412 * - 'jltma-' → 'ma-'
2413 *
2414 * @param string $key Addon key (e.g., 'ma-accordion', 'ma-el-countdown-timer', 'jltma-blog')
2415 * @return array|null
2416 */
2417 public static function get_addon($key)
2418 {
2419 $addons = self::get_addons();
2420
2421 // Try exact match first
2422 if (isset($addons[$key])) {
2423 return $addons[$key];
2424 }
2425
2426 // Normalize legacy 'ma-el-' prefix to 'ma-'
2427 if (strpos($key, 'ma-el-') === 0) {
2428 $normalized_key = 'ma-' . substr($key, 6); // Remove 'ma-el-' and add 'ma-'
2429 if (isset($addons[$normalized_key])) {
2430 return $addons[$normalized_key];
2431 }
2432 }
2433
2434 // Normalize 'jltma-' prefix to 'ma-'
2435 if (strpos($key, 'jltma-') === 0) {
2436 $normalized_key = 'ma-' . substr($key, 6); // Remove 'jltma-' and add 'ma-'
2437 if (isset($addons[$normalized_key])) {
2438 return $addons[$normalized_key];
2439 }
2440 }
2441
2442 return null;
2443 }
2444
2445 /**
2446 * Get addon config by class name
2447 *
2448 * Looks up addon configuration using the widget's class name.
2449 * Returns both the config key and the addon data.
2450 *
2451 * @param string $class_name Full class name (e.g., 'MasterAddons\Addons\Counter_Up')
2452 * @return array|null Array with 'key' and 'config', or null if not found
2453 */
2454 public static function get_addon_by_class($class_name)
2455 {
2456 $addons = self::get_addons();
2457
2458 foreach ($addons as $key => $addon) {
2459 if (isset($addon['class']) && $addon['class'] === $class_name) {
2460 return [
2461 'key' => $key,
2462 'config' => $addon,
2463 ];
2464 }
2465 }
2466
2467 return null;
2468 }
2469
2470 /**
2471 * Get a single extension by key
2472 *
2473 * @param string $key Extension key
2474 * @return array|null
2475 */
2476 public static function get_extension($key)
2477 {
2478 $extensions = self::get_extensions();
2479 return $extensions[$key] ?? null;
2480 }
2481
2482 /**
2483 * Get addon/extension docs (demo_url, docs_url, tuts_url)
2484 *
2485 * @param string $key Addon or extension key
2486 * @return array
2487 */
2488 public static function get_addon_docs($key)
2489 {
2490 // Try addons first, then extensions
2491 $config = self::get_addon($key) ?? self::get_extension($key);
2492
2493 return [
2494 'demo_url' => $config['demo_url'] ?? '',
2495 'docs_url' => $config['docs_url'] ?? '',
2496 'tuts_url' => $config['tuts_url'] ?? '',
2497 ];
2498 }
2499
2500 /**
2501 * Get addon assets with fallback
2502 *
2503 * @param string $key Addon key
2504 * @return array
2505 */
2506 public static function get_addon_assets($key)
2507 {
2508 $addon = self::get_addon($key);
2509
2510 if (!$addon) {
2511 // Fallback: derive from key
2512 $css_name = str_replace('ma-', '', $key);
2513 return [
2514 'css' => [$css_name],
2515 'js' => [],
2516 'vendors' => [],
2517 ];
2518 }
2519
2520 return wp_parse_args($addon['assets'] ?? [], [
2521 'css' => [],
2522 'js' => [],
2523 'vendors' => [],
2524 ]);
2525 }
2526
2527 /**
2528 * Check if an addon/extension/icon is pro
2529 *
2530 * @param string $key Item key
2531 * @return bool
2532 */
2533 public static function is_pro($key)
2534 {
2535 // Check addons
2536 $addon = self::get_addon($key);
2537 if ($addon) {
2538 return !empty($addon['is_pro']);
2539 }
2540
2541 // Check extensions
2542 $extensions = self::get_extensions();
2543 if (isset($extensions[$key])) {
2544 return !empty($extensions[$key]['is_pro']);
2545 }
2546
2547 // Check icons
2548 $icons = self::get_icons();
2549 if (isset($icons[$key])) {
2550 return !empty($icons[$key]['is_pro']);
2551 }
2552
2553 return false;
2554 }
2555
2556 /**
2557 * Get all items (addons + extensions) for settings page
2558 * Returns in old format for backward compatibility
2559 *
2560 * @return array
2561 */
2562 public static function get_all_elements_for_settings()
2563 {
2564 $addons = self::get_addons();
2565 $result = [];
2566
2567 foreach ($addons as $key => $addon) {
2568 $result[] = [
2569 'key' => $key,
2570 'title' => $addon['title'] ?? '',
2571 'class' => $addon['class'] ?? '',
2572 'demo_url' => $addon['demo_url'] ?? '',
2573 'docs_url' => $addon['docs_url'] ?? '',
2574 'tuts_url' => $addon['tuts_url'] ?? '',
2575 'is_pro' => $addon['is_pro'] ?? false,
2576 'group' => $addon['group'] ?? '',
2577 'subcategory' => $addon['subcategory'] ?? '',
2578 ];
2579 }
2580
2581 return $result;
2582 }
2583
2584 /**
2585 * Get all extensions for settings page
2586 * Returns in old format for backward compatibility
2587 *
2588 * @return array
2589 */
2590 public static function get_all_extensions_for_settings()
2591 {
2592 $extensions = self::get_extensions();
2593 $result = [];
2594
2595 foreach ($extensions as $key => $extension) {
2596 $result[] = [
2597 'key' => $key,
2598 'title' => $extension['title'],
2599 'class' => $extension['class'] ?? '',
2600 'demo_url' => $extension['demo_url'] ?? '',
2601 'docs_url' => $extension['docs_url'] ?? '',
2602 'tuts_url' => $extension['tuts_url'] ?? '',
2603 'is_pro' => $extension['is_pro'] ?? false,
2604 ];
2605 }
2606
2607 return $result;
2608 }
2609
2610 /**
2611 * Get subcategories for a group
2612 *
2613 * @param string $group Group key
2614 * @return array
2615 */
2616 public static function get_subcategories($group)
2617 {
2618 $config = self::get_config();
2619 return $config['groups'][$group]['subcategories'] ?? [];
2620 }
2621
2622 /**
2623 * Get extension groups configuration
2624 *
2625 * @return array
2626 */
2627 public static function get_extension_groups()
2628 {
2629 $config = self::get_config();
2630 return $config['extension_groups'] ?? [];
2631 }
2632
2633 /**
2634 * Get addons by group and subcategory - directly from nested structure
2635 * For groups without subcategories, returns all addons when subcategory matches group name
2636 *
2637 * @param string $group Group key
2638 * @param string $subcategory Subcategory key
2639 * @return array
2640 */
2641 public static function get_addons_by_subcategory($group, $subcategory)
2642 {
2643 $config = self::get_config();
2644 $group_data = $config['addons'][$group] ?? [];
2645
2646 if (empty($group_data)) {
2647 return [];
2648 }
2649
2650 // Check if this group has direct widgets (no subcategories)
2651 $first_item = reset($group_data);
2652 $has_direct_widgets = is_array($first_item) && isset($first_item['title']);
2653
2654 if ($has_direct_widgets) {
2655 // Group has widgets directly - return all widgets if subcategory matches group
2656 return ($subcategory === $group) ? $group_data : [];
2657 }
2658
2659 return $group_data[$subcategory] ?? [];
2660 }
2661
2662 /**
2663 * Get addons grouped by subcategory within a group
2664 * Returns the nested structure with subcategory metadata
2665 * For groups without subcategories, returns a single virtual subcategory
2666 *
2667 * @param string $group Group key
2668 * @return array Addons organized by subcategory with titles and order
2669 */
2670 public static function get_addons_grouped_by_subcategory($group)
2671 {
2672 $config = self::get_config();
2673 $group_addons = $config['addons'][$group] ?? [];
2674 $result = [];
2675
2676 if (empty($group_addons)) {
2677 return $result;
2678 }
2679
2680 // Check if this group has direct widgets (no subcategories)
2681 $first_item = reset($group_addons);
2682 $has_direct_widgets = is_array($first_item) && isset($first_item['title']);
2683
2684 if ($has_direct_widgets) {
2685 // Group has widgets directly - create a single virtual subcategory
2686 $group_info = self::get_groups()[$group] ?? ['title' => ucfirst($group)];
2687 $result[$group] = [
2688 'title' => $group_info['title'] ?? ucfirst($group),
2689 'order' => 10,
2690 'addons' => $group_addons,
2691 ];
2692 } else {
2693 // Group has subcategories
2694 $subcategories = self::get_subcategories($group);
2695 foreach ($group_addons as $subcategory => $addons) {
2696 $subcat_info = $subcategories[$subcategory] ?? ['title' => ucfirst($subcategory), 'order' => 999];
2697 $result[$subcategory] = [
2698 'title' => $subcat_info['title'],
2699 'order' => $subcat_info['order'] ?? 999,
2700 'addons' => $addons,
2701 ];
2702 }
2703 }
2704
2705 // Sort by order
2706 uasort($result, function ($a, $b) {
2707 return ($a['order'] ?? 999) <=> ($b['order'] ?? 999);
2708 });
2709
2710 return $result;
2711 }
2712
2713 /**
2714 * Get extensions by group and subcategory - directly from nested structure
2715 *
2716 * @param string $group Group key
2717 * @param string $subcategory Subcategory key
2718 * @return array
2719 */
2720 public static function get_extensions_by_subcategory($group, $subcategory)
2721 {
2722 $config = self::get_config();
2723 return $config['extensions'][$group][$subcategory] ?? [];
2724 }
2725
2726 /**
2727 * Get extensions grouped by subcategory within a group
2728 *
2729 * @param string $group Group key
2730 * @return array Extensions organized by subcategory
2731 */
2732 public static function get_extensions_grouped_by_subcategory($group)
2733 {
2734 $config = self::get_config();
2735 $group_extensions = $config['extensions'][$group] ?? [];
2736 $extension_groups = self::get_extension_groups();
2737 $subcategories = $extension_groups[$group]['subcategories'] ?? [];
2738 $result = [];
2739
2740 // Build result with subcategory metadata
2741 foreach ($group_extensions as $subcategory => $extensions) {
2742 $subcat_info = $subcategories[$subcategory] ?? ['title' => ucfirst($subcategory), 'order' => 999];
2743 $result[$subcategory] = [
2744 'title' => $subcat_info['title'],
2745 'order' => $subcat_info['order'] ?? 999,
2746 'extensions' => $extensions,
2747 ];
2748 }
2749
2750 // Sort by order
2751 uasort($result, function ($a, $b) {
2752 return ($a['order'] ?? 999) <=> ($b['order'] ?? 999);
2753 });
2754
2755 return $result;
2756 }
2757
2758 /**
2759 * Get addon icon by key
2760 *
2761 * @param string $key Addon key (e.g., 'ma-accordion')
2762 * @return string Icon class (without jltma-icon prefix)
2763 */
2764 public static function get_addon_icon($key)
2765 {
2766 $addon = self::get_addon($key);
2767 if ($addon && !empty($addon['icon'])) {
2768 return $addon['icon'];
2769 }
2770
2771 // Fallback icons based on addon type
2772 $fallbacks = [
2773 'ma-' => 'eicon-apps',
2774 ];
2775
2776 foreach ($fallbacks as $prefix => $icon) {
2777 if (strpos($key, $prefix) === 0) {
2778 return $icon;
2779 }
2780 }
2781
2782 return 'eicon-apps';
2783 }
2784
2785 /**
2786 * Get extension icon by key
2787 *
2788 * @param string $key Extension key
2789 * @return string Icon class (without jltma-icon prefix)
2790 */
2791 public static function get_extension_icon($key)
2792 {
2793 $extension = self::get_extension($key);
2794 if ($extension && !empty($extension['icon'])) {
2795 return $extension['icon'];
2796 }
2797
2798 return 'eicon-settings';
2799 }
2800
2801 /**
2802 * Singleton
2803 */
2804 public static function get_instance()
2805 {
2806 if (self::$instance === null) {
2807 self::$instance = new self();
2808 }
2809 return self::$instance;
2810 }
2811 }
2812