|null */ private static ?array $widgets = null; /** * All widgets, keyed by folder slug. Built on first call (after the text * domain is available) so titles and descriptions are translated. */ public static function all(): array { if ( null !== self::$widgets ) return self::$widgets; self::$widgets = [ 'advanced-button' => [ 'class' => 'EPPRO_Advanced_Button_Widget', 'title' => __( 'Advanced Button', 'admore-widgets-suite' ), 'desc' => __( 'Styled CTA buttons with icons, animations and hover effects.', 'admore-widgets-suite' ), 'icon' => 'dashicons-button', ], 'advanced-faq' => [ 'class' => 'EPPRO_Advanced_FAQ_Widget', 'title' => __( 'FAQ Pro', 'admore-widgets-suite' ), 'desc' => __( 'Searchable FAQ accordion with categories and smooth animations.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-help', ], 'form' => [ 'class' => 'EPPRO_Form_Widget', 'title' => __( 'Advanced Form', 'admore-widgets-suite' ), 'desc' => __( 'Multi-step forms with CAPTCHA, file upload, and conditional logic.', 'admore-widgets-suite' ), 'icon' => 'dashicons-feedback', ], 'mega-menu' => [ 'class' => 'EPPRO_Mega_Menu_Widget', 'title' => __( 'Mega Menu', 'admore-widgets-suite' ), 'desc' => __( 'Responsive mega menus powered by Elementor templates.', 'admore-widgets-suite' ), 'icon' => 'dashicons-menu-alt', ], 'advanced-slider' => [ 'class' => 'EPPRO_Advanced_Slider_Widget', 'title' => __( 'Advanced Slider', 'admore-widgets-suite' ), 'desc' => __( 'Full-featured content slider with animations and overlays.', 'admore-widgets-suite' ), 'icon' => 'dashicons-images-alt2', ], 'advanced-tabs' => [ 'class' => 'EPPRO_Advanced_Tabs_Widget', 'title' => __( 'Advanced Tabs', 'admore-widgets-suite' ), 'desc' => __( 'Horizontal/vertical tabs with template support and URL hash.', 'admore-widgets-suite' ), 'icon' => 'dashicons-index-card', ], 'advanced-search' => [ 'class' => 'EPPRO_Advanced_Search_Widget', 'title' => __( 'Advanced Search', 'admore-widgets-suite' ), 'desc' => __( 'Live AJAX search with results dropdown, keyword highlighting, and post-type filtering.', 'admore-widgets-suite' ), 'icon' => 'dashicons-search', ], 'breadcrumbs' => [ 'class' => 'EPPRO_Breadcrumbs_Widget', 'title' => __( 'Breadcrumbs', 'admore-widgets-suite' ), 'desc' => __( 'Dynamic breadcrumb trail with full hierarchy, custom separator, and typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-admin-links', ], 'pricing-table' => [ 'class' => 'EPPRO_Pricing_Table_Widget', 'title' => __( 'Pricing Table', 'admore-widgets-suite' ), 'desc' => __( 'Advanced pricing table with billing toggle, popular badge, tooltips, and comparison mode.', 'admore-widgets-suite' ), 'icon' => 'dashicons-money-alt', ], 'gallery-pro' => [ 'class' => 'EPPRO_Gallery_Pro_Widget', 'title' => __( 'Gallery Pro', 'admore-widgets-suite' ), 'desc' => __( 'Pro gallery with category filter, masonry/justified layout, lightbox, and load more.', 'admore-widgets-suite' ), 'icon' => 'dashicons-format-gallery', ], 'post-grid' => [ 'class' => 'EPPRO_Post_Grid_Widget', 'title' => __( 'Post Grid', 'admore-widgets-suite' ), 'desc' => __( 'Post grid/list/carousel with query builder, pagination, and rich styling.', 'admore-widgets-suite' ), 'icon' => 'dashicons-grid-view', ], 'off-canvas' => [ 'class' => 'EPPRO_Off_Canvas_Widget', 'title' => __( 'Off-Canvas Panel', 'admore-widgets-suite' ), 'desc' => __( 'Slide-in drawer panel from any side with overlay and smooth animations.', 'admore-widgets-suite' ), 'icon' => 'dashicons-menu-alt3', ], 'stats-counter' => [ 'class' => 'EPPRO_Stats_Counter_Widget', 'title' => __( 'Stats Counter', 'admore-widgets-suite' ), 'desc' => __( 'Animated number counters with scroll triggers and customizable easing.', 'admore-widgets-suite' ), 'icon' => 'dashicons-chart-line', ], 'before-after' => [ 'class' => 'EPPRO_Before_After_Widget', 'title' => __( 'Before / After Image', 'admore-widgets-suite' ), 'desc' => __( 'Interactive before/after image comparison with draggable slider.', 'admore-widgets-suite' ), 'icon' => 'dashicons-image-filter', ], 'logo-grid' => [ 'class' => 'EPPRO_Logo_Grid_Widget', 'title' => __( 'Logo Grid / Clients', 'admore-widgets-suite' ), 'desc' => __( 'Client logo showcase in grid or carousel mode with hover effects.', 'admore-widgets-suite' ), 'icon' => 'dashicons-images-alt', ], 'team-member' => [ 'class' => 'EPPRO_Team_Member_Widget', 'title' => __( 'Team Member', 'admore-widgets-suite' ), 'desc' => __( 'Showcase team members with photo, role, bio and social links in 4 card styles.', 'admore-widgets-suite' ), 'icon' => 'dashicons-businessperson', ], 'icon-box' => [ 'class' => 'EPPRO_Icon_Box_Widget', 'title' => __( 'Icon Box', 'admore-widgets-suite' ), 'desc' => __( 'Icon + title + description box with top/left/right icon position and full style controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-star-filled', ], 'image-box' => [ 'class' => 'EPPRO_Image_Box_Widget', 'title' => __( 'Image Box', 'admore-widgets-suite' ), 'desc' => __( 'Image + title + description box with top/left/right image position, hover effects, and full style controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-format-image', ], 'timeline' => [ 'class' => 'EPPRO_Timeline_Widget', 'title' => __( 'Timeline', 'admore-widgets-suite' ), 'desc' => __( 'Vertical timeline with repeater items — date, title, description, icon — in left, right, or alternating layout with scroll animation.', 'admore-widgets-suite' ), 'icon' => 'dashicons-list-view', ], 'fancy-heading' => [ 'class' => 'EPPRO_Fancy_Heading_Widget', 'title' => __( 'Fancy Heading', 'admore-widgets-suite' ), 'desc' => __( 'Decorative headings with prefix/suffix text, gradient or highlight fills, and letter-spacing controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-textcolor', ], 'image-carousel' => [ 'class' => 'EPPRO_Image_Carousel_Widget', 'title' => __( 'Image Carousel', 'admore-widgets-suite' ), 'desc' => __( 'Swiper-powered image carousel with lightbox, zoom hover, arrows, dots, and autoplay.', 'admore-widgets-suite' ), 'icon' => 'dashicons-images-alt2', ], 'lottie' => [ 'class' => 'EPPRO_Lottie_Widget', 'title' => __( 'Lottie Animation', 'admore-widgets-suite' ), 'desc' => __( 'Renders Lottie JSON animations with autoplay, loop, speed, hover-trigger, and scroll-trigger.', 'admore-widgets-suite' ), 'icon' => 'dashicons-format-video', ], 'pie-chart' => [ 'class' => 'EPPRO_Pie_Chart_Widget', 'title' => __( 'Pie Chart', 'admore-widgets-suite' ), 'desc' => __( 'Animated SVG donut chart with scroll-trigger, percentage label, stroke color/width, and typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-chart-pie', ], 'author-box' => [ 'class' => 'EPPRO_Author_Box_Widget', 'title' => __( 'Author Box', 'admore-widgets-suite' ), 'desc' => __( 'Post author avatar, name, bio, and social links with configurable size, tag, and card style controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-admin-users', ], 'related-posts' => [ 'class' => 'EPPRO_Related_Posts_Widget', 'title' => __( 'Related Posts', 'admore-widgets-suite' ), 'desc' => __( 'Related posts grid by category or tag with thumbnail, title, date, and read-more link.', 'admore-widgets-suite' ), 'icon' => 'dashicons-admin-post', ], 'google-map' => [ 'class' => 'EPPRO_Google_Map_Widget', 'title' => __( 'Google Map', 'admore-widgets-suite' ), 'desc' => __( 'Google Maps iframe embed by address or coordinates with configurable zoom and height.', 'admore-widgets-suite' ), 'icon' => 'dashicons-location-alt', ], 'woo-products' => [ 'class' => 'EPPRO_Woo_Products_Widget', 'title' => __( 'WooCommerce Products', 'admore-widgets-suite' ), 'desc' => __( 'WooCommerce product grid with category/tag filtering, columns, and full card style controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-cart', ], 'post-comments' => [ 'class' => 'EPPRO_Post_Comments_Widget', 'title' => __( 'Post Comments', 'admore-widgets-suite' ), 'desc' => __( 'Native WordPress comment list and form for the current post with typography/color controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-admin-comments', ], 'woo-mini-cart' => [ 'class' => 'EPPRO_Woo_Mini_Cart_Widget', 'title' => __( 'WooCommerce Mini Cart', 'admore-widgets-suite' ), 'desc' => __( 'WooCommerce cart icon with item count badge and flyout mini cart dropdown for headers.', 'admore-widgets-suite' ), 'icon' => 'dashicons-cart', ], 'woo-add-to-cart' => [ 'class' => 'EPPRO_Woo_Add_To_Cart_Widget', 'title' => __( 'WooCommerce Add to Cart', 'admore-widgets-suite' ), 'desc' => __( 'Standalone Add to Cart button with quantity input for any product — great for landing pages.', 'admore-widgets-suite' ), 'icon' => 'dashicons-plus-alt', ], 'site-logo' => [ 'class' => 'EPPRO_Site_Logo_Widget', 'title' => __( 'Site Logo', 'admore-widgets-suite' ), 'desc' => __( 'Site logo from Customizer or custom image, with link, width, opacity, and CSS filter controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-admin-appearance', ], 'nav-menu' => [ 'class' => 'EPPRO_Nav_Menu_Widget', 'title' => __( 'Nav Menu', 'admore-widgets-suite' ), 'desc' => __( 'WordPress navigation menu — horizontal or vertical, dropdown on hover, hamburger on mobile.', 'admore-widgets-suite' ), 'icon' => 'dashicons-menu', ], 'site-title' => [ 'class' => 'EPPRO_Site_Title_Widget', 'title' => __( 'Site Title', 'admore-widgets-suite' ), 'desc' => __( 'Site name (from Settings → General) with home link, HTML tag, and typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-admin-settings', ], 'site-tagline' => [ 'class' => 'EPPRO_Site_Tagline_Widget', 'title' => __( 'Site Tagline', 'admore-widgets-suite' ), 'desc' => __( 'Site tagline (from Settings → General) with HTML tag and typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-textcolor', ], 'post-title' => [ 'class' => 'EPPRO_Post_Title_Widget', 'title' => __( 'Post Title', 'admore-widgets-suite' ), 'desc' => __( 'Dynamic current-post title with HTML tag selector, optional permalink link, and typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-heading', ], 'post-content' => [ 'class' => 'EPPRO_Post_Content_Widget', 'title' => __( 'Post Content', 'admore-widgets-suite' ), 'desc' => __( 'Outputs the_content() of the current post/page — use inside Theme Builder single templates.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-paragraph', ], 'post-featured-image' => [ 'class' => 'EPPRO_Post_Featured_Image_Widget', 'title' => __( 'Post Featured Image', 'admore-widgets-suite' ), 'desc' => __( 'Current post featured image with size picker, link target, border-radius, shadow, and hover filters.', 'admore-widgets-suite' ), 'icon' => 'dashicons-format-image', ], 'post-excerpt' => [ 'class' => 'EPPRO_Post_Excerpt_Widget', 'title' => __( 'Post Excerpt', 'admore-widgets-suite' ), 'desc' => __( 'Post excerpt with configurable word limit and optional styled Read More link.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-quote', ], 'post-meta' => [ 'class' => 'EPPRO_Post_Meta_Widget', 'title' => __( 'Post Meta', 'admore-widgets-suite' ), 'desc' => __( 'Repeater of meta items: date, modified, author, categories, tags, comments, reading time, custom key.', 'admore-widgets-suite' ), 'icon' => 'dashicons-info', ], 'archive-title' => [ 'class' => 'EPPRO_Archive_Title_Widget', 'title' => __( 'Archive Title', 'admore-widgets-suite' ), 'desc' => __( 'Dynamic archive/category/tag/author page title with optional type prefix and typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-archive', ], 'archive-description' => [ 'class' => 'EPPRO_Archive_Description_Widget', 'title' => __( 'Archive Description', 'admore-widgets-suite' ), 'desc' => __( 'Taxonomy term description (category/tag description) for use in Theme Builder archive templates.', 'admore-widgets-suite' ), 'icon' => 'dashicons-text-page', ], 'post-navigation' => [ 'class' => 'EPPRO_Post_Navigation_Widget', 'title' => __( 'Post Navigation', 'admore-widgets-suite' ), 'desc' => __( 'Previous/Next post links with label, title, arrows, and full typography/color/border style controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-arrow-left-alt', ], 'animated-heading' => [ 'class' => 'EPPRO_Animated_Heading_Widget', 'title' => __( 'Animated Heading', 'admore-widgets-suite' ), 'desc' => __( 'Typewriter, rotating text, and highlight headline effects with rich typography controls.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-textcolor', ], 'countdown-timer' => [ 'class' => 'EPPRO_Countdown_Timer_Widget', 'title' => __( 'Countdown Timer', 'admore-widgets-suite' ), 'desc' => __( 'Fixed-date and evergreen countdown with expiry actions, flip/circle/plain styles.', 'admore-widgets-suite' ), 'icon' => 'dashicons-backup', ], 'flip-box' => [ 'class' => 'EPPRO_Flip_Box_Widget', 'title' => __( 'Flip Box', 'admore-widgets-suite' ), 'desc' => __( '3D flip card with front and back faces, hover-triggered with multiple flip directions.', 'admore-widgets-suite' ), 'icon' => 'dashicons-image-rotate', ], 'hotspot' => [ 'class' => 'EPPRO_Hotspot_Widget', 'title' => __( 'Hotspot', 'admore-widgets-suite' ), 'desc' => __( 'Place interactive hotspot markers on an image with tooltip popups.', 'admore-widgets-suite' ), 'icon' => 'dashicons-location', ], 'price-list' => [ 'class' => 'EPPRO_Price_List_Widget', 'title' => __( 'Price List', 'admore-widgets-suite' ), 'desc' => __( 'Restaurant/service style price list with image, title, description, and price.', 'admore-widgets-suite' ), 'icon' => 'dashicons-editor-ul', ], 'progress-bar' => [ 'class' => 'EPPRO_Progress_Bar_Widget', 'title' => __( 'Progress Bar', 'admore-widgets-suite' ), 'desc' => __( 'Animated horizontal progress bar with percentage label and scroll trigger.', 'admore-widgets-suite' ), 'icon' => 'dashicons-minus', ], 'social-icons' => [ 'class' => 'EPPRO_Social_Icons_Widget', 'title' => __( 'Social Icons', 'admore-widgets-suite' ), 'desc' => __( 'Social media icon set with brand colors, hover effects, and multiple shape styles.', 'admore-widgets-suite' ), 'icon' => 'dashicons-share', ], 'testimonial' => [ 'class' => 'EPPRO_Testimonial_Widget', 'title' => __( 'Testimonial', 'admore-widgets-suite' ), 'desc' => __( 'Customer testimonial/review card with avatar, name, role, rating stars, and quote.', 'admore-widgets-suite' ), 'icon' => 'dashicons-format-quote', ], 'video' => [ 'class' => 'EPPRO_Video_Widget', 'title' => __( 'Video', 'admore-widgets-suite' ), 'desc' => __( 'Self-hosted or embed video player with custom poster, play button overlay, and lightbox.', 'admore-widgets-suite' ), 'icon' => 'dashicons-video-alt3', ], ]; return self::$widgets; } /** PHP class of the widget in widgets/{$slug}/, or null. */ public static function class_for( string $slug ): ?string { return self::all()[ $slug ]['class'] ?? null; } /** slug => translated title. */ public static function titles(): array { return wp_list_pluck( self::all(), 'title' ); } }