Changeset 3445042
- Timestamp:
- 01/22/2026 05:12:58 PM (4 weeks ago)
- Location:
- daily-slider
- Files:
-
- 119 added
- 5 edited
-
tags/2.6.0 (added)
-
tags/2.6.0/admin (added)
-
tags/2.6.0/admin/2.5.0 (added)
-
tags/2.6.0/admin/2.5.0/admin (added)
-
tags/2.6.0/admin/2.5.0/admin/dashboard.php (added)
-
tags/2.6.0/admin/2.5.0/admin/welcome-page.php (added)
-
tags/2.6.0/admin/2.5.0/admin/widget-manager.php (added)
-
tags/2.6.0/admin/2.5.0/assets (added)
-
tags/2.6.0/admin/2.5.0/assets/css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/common.css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets/eldorado.css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets/marqee.css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets/marquee.css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets/pixel.css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets/review-carousel.css (added)
-
tags/2.6.0/admin/2.5.0/assets/css/widgets/testimonials-marquee.css (added)
-
tags/2.6.0/admin/2.5.0/assets/images (added)
-
tags/2.6.0/admin/2.5.0/assets/images/item-1.svg (added)
-
tags/2.6.0/admin/2.5.0/assets/images/item-2.svg (added)
-
tags/2.6.0/admin/2.5.0/assets/images/item-3.svg (added)
-
tags/2.6.0/admin/2.5.0/assets/js (added)
-
tags/2.6.0/admin/2.5.0/assets/js/widgets (added)
-
tags/2.6.0/admin/2.5.0/assets/js/widgets/eldorado.js (added)
-
tags/2.6.0/admin/2.5.0/assets/js/widgets/marquee.js (added)
-
tags/2.6.0/admin/2.5.0/assets/js/widgets/pixel.js (added)
-
tags/2.6.0/admin/2.5.0/assets/js/widgets/review-carousel.js (added)
-
tags/2.6.0/admin/2.5.0/assets/js/widgets/testimonials-marquee.js (added)
-
tags/2.6.0/admin/2.5.0/daily-slider.php (added)
-
tags/2.6.0/admin/2.5.0/readme.txt (added)
-
tags/2.6.0/admin/2.5.0/widgets (added)
-
tags/2.6.0/admin/2.5.0/widgets/eldorado (added)
-
tags/2.6.0/admin/2.5.0/widgets/eldorado/eldorado.php (added)
-
tags/2.6.0/admin/2.5.0/widgets/marquee (added)
-
tags/2.6.0/admin/2.5.0/widgets/marquee/marquee.php (added)
-
tags/2.6.0/admin/2.5.0/widgets/pixel (added)
-
tags/2.6.0/admin/2.5.0/widgets/pixel/pixel.php (added)
-
tags/2.6.0/admin/2.5.0/widgets/review-carousel (added)
-
tags/2.6.0/admin/2.5.0/widgets/review-carousel/review-carousel.php (added)
-
tags/2.6.0/admin/2.5.0/widgets/testimonials-marquee (added)
-
tags/2.6.0/admin/2.5.0/widgets/testimonials-marquee/testimonials-marquee.php (added)
-
tags/2.6.0/admin/dashboard.php (added)
-
tags/2.6.0/admin/welcome-page.php (added)
-
tags/2.6.0/admin/widget-manager.php (added)
-
tags/2.6.0/assets (added)
-
tags/2.6.0/assets/css (added)
-
tags/2.6.0/assets/css/common.css (added)
-
tags/2.6.0/assets/css/widgets (added)
-
tags/2.6.0/assets/css/widgets/eldorado.css (added)
-
tags/2.6.0/assets/css/widgets/marqee.css (added)
-
tags/2.6.0/assets/css/widgets/marquee.css (added)
-
tags/2.6.0/assets/css/widgets/pixel.css (added)
-
tags/2.6.0/assets/css/widgets/review-carousel.css (added)
-
tags/2.6.0/assets/css/widgets/testimonials-marquee.css (added)
-
tags/2.6.0/assets/images (added)
-
tags/2.6.0/assets/images/item-1.svg (added)
-
tags/2.6.0/assets/images/item-2.svg (added)
-
tags/2.6.0/assets/images/item-3.svg (added)
-
tags/2.6.0/assets/images/widgets (added)
-
tags/2.6.0/assets/js (added)
-
tags/2.6.0/assets/js/widgets (added)
-
tags/2.6.0/assets/js/widgets/eldorado.js (added)
-
tags/2.6.0/assets/js/widgets/marquee.js (added)
-
tags/2.6.0/assets/js/widgets/pixel.js (added)
-
tags/2.6.0/assets/js/widgets/review-carousel.js (added)
-
tags/2.6.0/assets/js/widgets/testimonials-marquee.js (added)
-
tags/2.6.0/daily-slider.php (added)
-
tags/2.6.0/readme.txt (added)
-
tags/2.6.0/widgets (added)
-
tags/2.6.0/widgets/eldorado (added)
-
tags/2.6.0/widgets/eldorado/eldorado.php (added)
-
tags/2.6.0/widgets/marquee (added)
-
tags/2.6.0/widgets/marquee/marquee.php (added)
-
tags/2.6.0/widgets/pixel (added)
-
tags/2.6.0/widgets/pixel/pixel.php (added)
-
tags/2.6.0/widgets/review-carousel (added)
-
tags/2.6.0/widgets/review-carousel/review-carousel.php (added)
-
tags/2.6.0/widgets/testimonials-marquee (added)
-
tags/2.6.0/widgets/testimonials-marquee/testimonials-marquee.php (added)
-
trunk/admin/2.5.0 (added)
-
trunk/admin/2.5.0/admin (added)
-
trunk/admin/2.5.0/admin/dashboard.php (added)
-
trunk/admin/2.5.0/admin/welcome-page.php (added)
-
trunk/admin/2.5.0/admin/widget-manager.php (added)
-
trunk/admin/2.5.0/assets (added)
-
trunk/admin/2.5.0/assets/css (added)
-
trunk/admin/2.5.0/assets/css/common.css (added)
-
trunk/admin/2.5.0/assets/css/widgets (added)
-
trunk/admin/2.5.0/assets/css/widgets/eldorado.css (added)
-
trunk/admin/2.5.0/assets/css/widgets/marqee.css (added)
-
trunk/admin/2.5.0/assets/css/widgets/marquee.css (added)
-
trunk/admin/2.5.0/assets/css/widgets/pixel.css (added)
-
trunk/admin/2.5.0/assets/css/widgets/review-carousel.css (added)
-
trunk/admin/2.5.0/assets/css/widgets/testimonials-marquee.css (added)
-
trunk/admin/2.5.0/assets/images (added)
-
trunk/admin/2.5.0/assets/images/item-1.svg (added)
-
trunk/admin/2.5.0/assets/images/item-2.svg (added)
-
trunk/admin/2.5.0/assets/images/item-3.svg (added)
-
trunk/admin/2.5.0/assets/js (added)
-
trunk/admin/2.5.0/assets/js/widgets (added)
-
trunk/admin/2.5.0/assets/js/widgets/eldorado.js (added)
-
trunk/admin/2.5.0/assets/js/widgets/marquee.js (added)
-
trunk/admin/2.5.0/assets/js/widgets/pixel.js (added)
-
trunk/admin/2.5.0/assets/js/widgets/review-carousel.js (added)
-
trunk/admin/2.5.0/assets/js/widgets/testimonials-marquee.js (added)
-
trunk/admin/2.5.0/daily-slider.php (added)
-
trunk/admin/2.5.0/readme.txt (added)
-
trunk/admin/2.5.0/widgets (added)
-
trunk/admin/2.5.0/widgets/eldorado (added)
-
trunk/admin/2.5.0/widgets/eldorado/eldorado.php (added)
-
trunk/admin/2.5.0/widgets/marquee (added)
-
trunk/admin/2.5.0/widgets/marquee/marquee.php (added)
-
trunk/admin/2.5.0/widgets/pixel (added)
-
trunk/admin/2.5.0/widgets/pixel/pixel.php (added)
-
trunk/admin/2.5.0/widgets/review-carousel (added)
-
trunk/admin/2.5.0/widgets/review-carousel/review-carousel.php (added)
-
trunk/admin/2.5.0/widgets/testimonials-marquee (added)
-
trunk/admin/2.5.0/widgets/testimonials-marquee/testimonials-marquee.php (added)
-
trunk/admin/welcome-page.php (modified) (9 diffs)
-
trunk/admin/widget-manager.php (modified) (12 diffs)
-
trunk/assets/css/widgets/testimonials-marquee.css (modified) (1 diff)
-
trunk/assets/images/widgets (added)
-
trunk/daily-slider.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
daily-slider/trunk/admin/welcome-page.php
r3423731 r3445042 4 4 } 5 5 6 class DailySliderWelcomePage { 7 8 public static function render() { 9 ?> 10 <div class="daily-slider-welcome"> 11 12 <!-- Header Section --> 13 <?php self::render_header(); ?> 14 15 <!-- New Widget Notice --> 6 class DailySliderWelcomePage 7 { 8 9 public static function render() 10 { 11 $plugin_data = self::get_plugin_data(); 12 $version = !empty($plugin_data['Version']) ? $plugin_data['Version'] : ''; 13 14 $enabled_widgets = get_option('daily_slider_widgets', array()); 15 if (!is_array($enabled_widgets)) { 16 $enabled_widgets = array(); 17 } 18 19 $available_widgets = array( 20 'pixel' => array('name' => __('Pixel', 'daily-slider')), 21 'eldorado' => array('name' => __('Eldorado', 'daily-slider')), 22 'review_carousel' => array('name' => __('Review Carousel', 'daily-slider')), 23 'marquee' => array('name' => __('Marquee Slider', 'daily-slider')), 24 'testimonials_marquee' => array('name' => __('Testimonials Marquee', 'daily-slider')), 25 ); 26 27 $coming_features = array( 28 array( 29 'name' => __('Post Slider', 'daily-slider'), 30 'desc' => __('Display posts in a slider layout.', 'daily-slider'), 31 'icon' => 'dashicons-admin-post', 32 ), 33 array( 34 'name' => __('WooCommerce Slider', 'daily-slider'), 35 'desc' => __('Showcase products in a slider layout.', 'daily-slider'), 36 'icon' => 'dashicons-cart', 37 ), 38 array( 39 'name' => __('Showcase Slider', 'daily-slider'), 40 'desc' => __('Showcase projects in engaging slider layouts.', 'daily-slider'), 41 'icon' => 'dashicons-format-gallery', 42 ), 43 array( 44 'name' => __('Video Slider', 'daily-slider'), 45 'desc' => __('Display videos in engaging slider layouts.', 'daily-slider'), 46 'icon' => 'dashicons-video-alt3', 47 ), 48 ); 49 50 $active_count = count(array_filter($enabled_widgets)); 51 $available_count = count($available_widgets); 52 $coming_count_label = count($coming_features) >= 10 ? '10+' : (string)count($coming_features); 53 54 $welcome_url = admin_url('admin.php?page=daily-slider-dashboard'); 55 $widgets_url = admin_url('admin.php?page=daily-slider-widgets'); 56 $pages_url = admin_url('edit.php?post_type=page'); 57 $home_url = home_url('/'); 58 59 ?> 60 <div class="daily-slider-admin"> 61 <div class="ds-topbar"> 62 <div class="ds-topbar__left"> 63 <div class="ds-brand"> 64 <span class="ds-brand__icon dashicons dashicons-slides"></span> 65 </div> 66 <div class="ds-tabs"> 67 <a class="ds-tab is-active" href="<?php echo esc_url($welcome_url); ?>"><?php _e('Dashboard', 'daily-slider'); ?></a> 68 <a class="ds-tab" href="<?php echo esc_url($widgets_url); ?>"><?php _e('Widgets', 'daily-slider'); ?></a> 69 </div> 70 </div> 71 <div class="ds-topbar__right"> 72 <?php if (!empty($version)) : ?> 73 <span class="ds-version"><?php echo esc_html(sprintf(__('Version %s', 'daily-slider'), $version)); ?></span> 74 <?php endif; ?> 75 </div> 76 </div> 77 16 78 <?php self::render_new_widget_notice(); ?> 17 79 18 <!-- Main Content --> 19 <div class="welcome-content"> 20 <?php self::render_quick_actions(); ?> 21 <?php self::render_widgets_overview(); ?> 22 <?php self::render_coming_soon(); ?> 80 <div class="ds-grid"> 81 <div class="ds-col ds-col--main"> 82 <div class="ds-card ds-hero"> 83 <h1 class="ds-hero__title"><?php _e('Welcome to Daily Slider', 'daily-slider'); ?></h1> 84 <p class="ds-hero__subtitle"><?php _e('Build beautiful Elementor pages effortlessly with our advanced slider widgets and features.', 'daily-slider'); ?></p> 85 <div class="ds-hero__actions"> 86 <a class="ds-btn ds-btn--primary" href="https://xpospark.com/plugin/daily-slider/" target="_blank" rel="noopener noreferrer"> 87 <?php _e('View Website', 'daily-slider'); ?> 88 </a> 89 <a class="ds-btn ds-btn--ghost" href="<?php echo esc_url($pages_url); ?>"> 90 <span class="dashicons dashicons-plus-alt2"></span> 91 <?php _e('Create New Page', 'daily-slider'); ?> 92 </a> 93 </div> 94 </div> 95 96 <div class="ds-card"> 97 <div class="ds-card__head"> 98 <h2 class="ds-card__title"><?php _e('Widget Statistics Overview', 'daily-slider'); ?></h2> 99 </div> 100 <div class="ds-stats"> 101 <div class="ds-stat"> 102 <div class="ds-stat__icon dashicons dashicons-yes"></div> 103 <div class="ds-stat__meta"> 104 <div class="ds-stat__label"><?php _e('Active Widgets', 'daily-slider'); ?></div> 105 <div class="ds-stat__value"><?php echo esc_html((string)$active_count); ?></div> 106 </div> 107 </div> 108 <div class="ds-stat"> 109 <div class="ds-stat__icon dashicons dashicons-screenoptions"></div> 110 <div class="ds-stat__meta"> 111 <div class="ds-stat__label"><?php _e('Available Widgets', 'daily-slider'); ?></div> 112 <div class="ds-stat__value"><?php echo esc_html((string)$available_count); ?></div> 113 </div> 114 </div> 115 <div class="ds-stat"> 116 <div class="ds-stat__icon dashicons dashicons-backup"></div> 117 <div class="ds-stat__meta"> 118 <div class="ds-stat__label"><?php _e('Widgets Coming Soon', 'daily-slider'); ?></div> 119 <div class="ds-stat__value"><?php echo esc_html($coming_count_label); ?></div> 120 </div> 121 </div> 122 </div> 123 </div> 124 125 <div class="ds-card"> 126 <div class="ds-card__head ds-card__head--split"> 127 <h2 class="ds-card__title"><?php _e('Key Features', 'daily-slider'); ?></h2> 128 <span class="ds-pill"><?php _e('Coming Soon', 'daily-slider'); ?></span> 129 </div> 130 <div class="ds-features"> 131 <?php foreach ($coming_features as $feature) : ?> 132 <div class="ds-feature"> 133 <div class="ds-feature__meta"> 134 <div class="ds-feature__title"><?php echo esc_html($feature['name']); ?></div> 135 <div class="ds-feature__desc"><?php echo esc_html($feature['desc']); ?></div> 136 </div> 137 <div class="ds-feature__icon dashicons <?php echo esc_attr($feature['icon']); ?>"></div> 138 </div> 139 <?php endforeach; ?> 140 </div> 141 </div> 142 </div> 143 144 <div class="ds-col ds-col--side"> 145 <div class="ds-card ds-pro"> 146 <div class="ds-pro__badge"> 147 <span class="dashicons dashicons-star-filled"></span> 148 <?php _e('UNLOCK UPCOMING WIDGETS', 'daily-slider'); ?> 149 </div> 150 <div class="ds-pro__title"><?php _e('Design Smarter with Daily Slider!', 'daily-slider'); ?></div> 151 <div class="ds-pro__text"><?php _e('Craft stunning websites faster with powerful widgets, advanced features, and total flexibility.', 'daily-slider'); ?></div> 152 <div class="ds-pro__list"> 153 <div class="ds-pro__item"><span class="ds-check"></span><?php _e('Classic Slider', 'daily-slider'); ?></div> 154 <div class="ds-pro__item"><span class="ds-check"></span><?php _e('Post Slider', 'daily-slider'); ?></div> 155 <div class="ds-pro__item"><span class="ds-check"></span><?php _e('Product Slide', 'daily-slider'); ?></div> 156 <div class="ds-pro__item"><span class="ds-check"></span><?php _e('Video Slider', 'daily-slider'); ?></div> 157 <div class="ds-pro__item"><span class="ds-check"></span><?php _e('News / Blog Slider', 'daily-slider'); ?></div> 158 </div> 159 <a class="ds-btn ds-btn--wide" href="<?php echo esc_url($widgets_url); ?>"><?php _e('View Plans', 'daily-slider'); ?></a> 160 </div> 161 162 <div class="ds-card ds-quick"> 163 <div class="ds-card__head"> 164 <h2 class="ds-card__title"><?php _e('Quick Access', 'daily-slider'); ?></h2> 165 </div> 166 <div class="ds-quick__list"> 167 <a class="ds-quick__item" href="https://xpospark.com/plugin/daily-slider/" target="_blank" rel="noopener noreferrer"> 168 <span class="dashicons dashicons-book-alt"></span> 169 <?php _e('Knowledge Base', 'daily-slider'); ?> 170 </a> 171 <a class="ds-quick__item" href="https://xpospark.com/plugin/daily-slider/" target="_blank" rel="noopener noreferrer"> 172 <span class="dashicons dashicons-lightbulb"></span> 173 <?php _e('Request a Feature', 'daily-slider'); ?> 174 </a> 175 <a class="ds-quick__item" href="https://wordpress.org/support/plugin/daily-slider/reviews/#new-post" target="_blank" rel="noopener noreferrer"> 176 <span class="dashicons dashicons-star-empty"></span> 177 <?php _e('Rate Us', 'daily-slider'); ?> 178 </a> 179 </div> 180 </div> 181 </div> 23 182 </div> 24 183 184 <div class="ds-footer"> 185 <?php echo esc_html(sprintf(__('© %s Daily Slider. All rights reserved.', 'daily-slider'), date_i18n('Y'))); ?> 186 </div> 25 187 </div> 26 188 27 189 <?php self::render_styles(); ?> 28 <?php190 <?php 29 191 } 30 192 31 private static function render_header() { 32 ?> 193 private static function get_plugin_data() 194 { 195 if (!function_exists('get_plugin_data')) { 196 require_once ABSPATH . 'wp-admin/includes/plugin.php'; 197 } 198 $plugin_file = dirname(__DIR__) . '/daily-slider.php'; 199 if (!file_exists($plugin_file)) { 200 return array(); 201 } 202 $data = get_plugin_data($plugin_file, false, false); 203 return is_array($data) ? $data : array(); 204 } 205 206 private static function render_header() 207 { 208 ?> 33 209 <div class="welcome-hero"> 34 210 <!-- <div class="hero-background"> … … 40 216 </div> 41 217 </div> 42 <?php218 <?php 43 219 } 44 220 45 private static function render_new_widget_notice() { 221 private static function render_new_widget_notice() 222 { 46 223 // Check if user has seen this notice (you can implement this with user meta) 47 224 $notice_dismissed = get_user_meta(get_current_user_id(), 'daily_slider_testimonials_notice_dismissed', true); 48 225 49 226 if ($notice_dismissed) { 50 227 return; 51 228 } 52 ?>229 ?> 53 230 <div class="daily-slider-notice-container"> 54 231 <div class="new-widget-notice"> … … 58 235 </div> 59 236 <div class="notice-text"> 60 <h3><?php _e(' 🎉New Widget Added!', 'daily-slider'); ?></h3>237 <h3><?php _e('New Widget Added!', 'daily-slider'); ?></h3> 61 238 <p><?php _e('Introducing the <span class="highlight-widget-name">Testimonials Marquee</span> widget - showcase customer reviews with star ratings, author profiles, and smooth scrolling animations. Perfect for building trust and social proof!', 'daily-slider'); ?></p> 62 239 </div> … … 72 249 </div> 73 250 </div> 74 <?php251 <?php 75 252 } 76 253 77 private static function render_quick_actions() { 78 ?> 254 private static function render_quick_actions() 255 { 256 ?> 79 257 <div class="quick-actions-section"> 80 258 <div class="section-header"> … … 115 293 </div> 116 294 </div> 117 <?php295 <?php 118 296 } 119 297 120 private static function render_widgets_overview() { 298 private static function render_widgets_overview() 299 { 121 300 $widgets = [ 122 301 'pixel' => [ … … 152 331 ] 153 332 ]; 154 ?>333 ?> 155 334 <div class="widgets-showcase"> 156 335 <div class="section-header"> … … 160 339 <div class="widgets-grid"> 161 340 <?php foreach ($widgets as $key => $widget): ?> 162 <div class="widget-card"> 163 <div class="widget-header"> 164 <div class="widget-icon" style="background: <?php echo esc_attr($widget['icon_color']); ?>;"> 165 <span class="widget-letter"><?php echo strtoupper(substr($widget['name'], 0, 1)); ?></span> 341 <div class="widget-card"> 342 <div class="widget-header"> 343 <div class="widget-icon" style="background: <?php echo esc_attr($widget['icon_color']); ?>;"> 344 <span class="widget-letter"><?php echo strtoupper(substr($widget['name'], 0, 1)); ?></span> 345 </div> 346 <div class="widget-status free"> 347 <span class="status-dot"></span> 348 <?php _e('Free', 'daily-slider'); ?> 349 </div> 166 350 </div> 167 <div class="widget-status free"> 168 <span class="status-dot"></span> 169 <?php _e('Free', 'daily-slider'); ?> 351 <div class="widget-content"> 352 <h3><?php echo esc_html($widget['name']); ?></h3> 353 <p class="widget-description"><?php echo esc_html($widget['description']); ?></p> 354 <div class="widget-features"> 355 <?php foreach ($widget['features'] as $feature): ?> 356 <span class="feature-tag"><?php echo esc_html($feature); ?></span> 357 <?php endforeach; ?> 358 </div> 170 359 </div> 171 360 </div> 172 <div class="widget-content">173 <h3><?php echo esc_html($widget['name']); ?></h3>174 <p class="widget-description"><?php echo esc_html($widget['description']); ?></p>175 <div class="widget-features">176 <?php foreach ($widget['features'] as $feature): ?>177 <span class="feature-tag"><?php echo esc_html($feature); ?></span>178 <?php endforeach; ?>179 </div>180 </div>181 </div>182 361 <?php endforeach; ?> 183 362 </div> 184 363 </div> 185 <?php364 <?php 186 365 } 187 366 188 private static function render_coming_soon() { 367 private static function render_coming_soon() 368 { 189 369 $coming_features = [ 190 370 'post_slider' => [ … … 207 387 ] 208 388 ]; 209 ?>389 ?> 210 390 <div class="coming-soon-section"> 211 391 <div class="coming-content"> … … 219 399 <div class="coming-widgets"> 220 400 <?php foreach ($coming_features as $key => $feature): ?> 221 <div class="coming-widget"> 222 <div class="coming-widget-icon" style="background: <?php echo esc_attr($feature['gradient']); ?>;"> 223 <span class="widget-emoji"><?php echo $feature['emoji']; ?></span> 401 <div class="coming-widget"> 402 <div class="coming-widget-icon" style="background: <?php echo esc_attr($feature['gradient']); ?>;"> 403 <span class="widget-emoji"><?php echo $feature['emoji']; ?></span> 404 </div> 405 <div class="coming-widget-content"> 406 <h3><?php echo esc_html($feature['name']); ?></h3> 407 <p><?php echo esc_html($feature['description']); ?></p> 408 </div> 409 <div class="coming-status"> 410 <span class="status-text"><?php _e('Coming Soon', 'daily-slider'); ?></span> 411 </div> 224 412 </div> 225 <div class="coming-widget-content">226 <h3><?php echo esc_html($feature['name']); ?></h3>227 <p><?php echo esc_html($feature['description']); ?></p>228 </div>229 <div class="coming-status">230 <span class="status-text"><?php _e('Coming Soon', 'daily-slider'); ?></span>231 </div>232 </div>233 413 <?php endforeach; ?> 234 414 </div> 235 415 </div> 236 416 </div> 237 <?php417 <?php 238 418 } 239 419 240 420 241 421 242 private static function render_styles() { 243 ?> 422 private static function render_styles() 423 { 424 ?> 244 425 <style> 245 /* Welcome Page Styles */ 246 .daily-slider-welcome { 247 max-width: 1000px; 248 margin: 20px 0; 249 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 250 background: #f7f7f7; 251 padding: 30px; 252 border-radius: 10px; 253 } 254 255 /* New Widget Notice Styles */ 256 .daily-slider-notice-container { 257 margin: 20px 0; 258 } 259 .new-widget-notice { 260 background: linear-gradient(135deg, #000000 0%, #ff6b35 100%); 261 border-radius: 12px; 262 padding: 24px; 263 margin-bottom: 20px; 264 box-shadow: 0 4px 15px rgba(255, 107, 53, 0.3); 265 border: 1px solid rgba(255, 255, 255, 0.2); 266 } 267 .notice-content { 268 display: flex; 269 align-items: center; 270 justify-content: center; 271 gap: 20px; 272 text-align: left; 273 } 274 .notice-icon { 275 background: rgba(255, 255, 255, 0.3); 276 border-radius: 50%; 277 width: 60px; 278 height: 60px; 279 display: flex; 280 align-items: center; 281 justify-content: center; 282 flex-shrink: 0; 283 margin: 0 auto; 284 } 285 .notice-icon .dashicons { 286 color: #fff200; 287 font-size: 28px; 288 display: block; 289 width: 28px; 290 height: 28px; 291 } 292 .notice-text { 293 flex: 1; 294 color: white; 295 } 296 .notice-text h3 { 297 margin: 0 0 8px 0; 298 font-size: 18px; 299 font-weight: 600; 300 color: white; 301 } 302 .notice-text p { 303 margin: 0; 304 line-height: 1.5; 305 opacity: 0.95; 306 } 307 .highlight-widget-name { 308 background: rgba(255, 215, 0, 0.2); 309 color: #ffd700; 310 padding: 2px 8px; 311 border-radius: 4px; 312 font-weight: 700; 313 border: 1px solid rgba(255, 215, 0, 0.3); 314 font-style: normal; 315 text-shadow: 0 0 8px rgba(255, 215, 0, 0.3); 316 } 317 .notice-actions { 318 display: flex; 319 gap: 12px; 320 flex-shrink: 0; 321 } 322 .notice-btn { 323 padding: 8px 16px; 324 border-radius: 6px; 325 text-decoration: none; 326 font-weight: 500; 327 font-size: 14px; 328 border: none; 329 cursor: pointer; 330 transition: all 0.3s ease; 331 } 332 .notice-btn.primary { 333 background: rgba(255, 255, 255, 0.9); 334 color: #667eea; 335 } 336 .notice-btn.primary:hover { 337 background: white; 338 transform: translateY(-1px); 339 } 340 .notice-btn.secondary { 341 background: rgba(255, 255, 255, 0.2); 342 color: white; 343 border: 1px solid rgba(255, 255, 255, 0.3); 344 } 345 .notice-btn.secondary:hover { 346 background: rgba(255, 255, 255, 0.3); 347 } 348 @media (max-width: 768px) { 426 /* Atomic-style Dashboard (new design) */ 427 .daily-slider-admin { 428 max-width: 1200px; 429 margin: 20px 0 0; 430 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 431 background: #f9fafb; 432 border-radius: 6px; 433 overflow: hidden; 434 } 435 436 .daily-slider-admin a { 437 text-decoration: none; 438 } 439 440 .ds-topbar { 441 display: flex; 442 align-items: center; 443 justify-content: space-between; 444 background: #fff; 445 padding: 0 20px; 446 border-bottom: 1px solid #e5e7eb; 447 } 448 449 .ds-topbar__left { 450 display: flex; 451 align-items: center; 452 gap: 30px; 453 } 454 455 .ds-brand { 456 width: 40px; 457 height: 40px; 458 border-radius: 6px; 459 background: linear-gradient(135deg, #a855f7, #7c3aed); 460 display: flex; 461 align-items: center; 462 justify-content: center; 463 } 464 465 .ds-brand__icon { 466 color: #fff; 467 font-size: 18px; 468 width: 18px; 469 height: 18px; 470 } 471 472 .ds-tabs { 473 display: flex; 474 gap: 18px; 475 } 476 477 .ds-tab { 478 color: #111827; 479 font-weight: 600; 480 padding: 24px 0; 481 border-bottom: 2px solid transparent; 482 box-shadow: none !important; 483 outline: none !important; 484 } 485 486 .ds-tab.is-active { 487 color: #7c3aed; 488 border-bottom-color: #7c3aed; 489 } 490 491 .ds-version { 492 display: inline-flex; 493 align-items: center; 494 background: rgba(124, 58, 237, 0.12); 495 color: #7c3aed; 496 padding: 6px 12px; 497 border-radius: 999px; 498 font-weight: 700; 499 font-size: 12px; 500 } 501 502 .ds-grid { 503 display: grid; 504 grid-template-columns: 1.6fr 1fr; 505 gap: 18px; 506 align-items: start; 507 padding: 20px; 508 } 509 510 .ds-card { 511 background: #fff; 512 padding: 20px; 513 border-radius: 8px; 514 border: 1px solid #f1f1f1; 515 } 516 517 .ds-col--main, 518 .ds-col--side { 519 display: flex; 520 flex-direction: column; 521 gap: 18px; 522 } 523 524 .ds-hero { 525 padding: 22px; 526 } 527 528 .ds-hero__title { 529 margin: 0 0 15px; 530 font-size: 28px; 531 color: #111827; 532 font-weight: 700; 533 } 534 535 .ds-hero__subtitle { 536 margin: 0 0 16px; 537 color: #6b7280; 538 font-size: 14px; 539 line-height: 1.5; 540 max-width: 620px; 541 } 542 543 .ds-hero__actions { 544 display: flex; 545 gap: 12px; 546 flex-wrap: wrap; 547 } 548 549 .ds-btn { 550 display: inline-flex; 551 align-items: center; 552 justify-content: center; 553 gap: 8px; 554 padding: 10px 16px; 555 border-radius: 6px; 556 font-weight: 700; 557 font-size: 13px; 558 border: 1px solid transparent; 559 cursor: pointer; 560 } 561 562 .ds-btn .dashicons { 563 font-size: 16px; 564 width: 16px; 565 height: 16px; 566 } 567 568 .ds-btn--primary { 569 background: #a855f7; 570 color: #fff; 571 } 572 573 .ds-btn--primary:hover { 574 background: #9333ea; 575 color: #fff; 576 } 577 578 .ds-btn--ghost { 579 background: #fff; 580 border-color: #e5e7eb; 581 color: #111827; 582 } 583 584 .ds-btn--ghost:hover { 585 border-color: #cbd5e1; 586 background: #f9fafb; 587 color: #111827; 588 } 589 590 .ds-btn--wide { 591 width: 100%; 592 background: #a855f7; 593 color: #fff; 594 margin-top:20px; 595 padding: 12px 16px; 596 box-sizing: border-box; 597 } 598 599 .ds-btn--wide:hover { 600 background: #9333ea; 601 color: #fff; 602 } 603 604 .ds-card__head { 605 margin-bottom: 12px; 606 } 607 608 .ds-card__head--split { 609 display: flex; 610 align-items: center; 611 justify-content: space-between; 612 gap: 12px; 613 } 614 615 .ds-card__title { 616 margin: 0; 617 font-size: 16px; 618 color: #111827; 619 font-weight: 800; 620 } 621 622 .ds-pill { 623 font-size: 12px; 624 font-weight: 800; 625 color: #a855f7; 626 background: rgba(168, 85, 247, 0.12); 627 padding: 6px 10px; 628 border-radius: 999px; 629 } 630 631 .ds-stats { 632 display: grid; 633 grid-template-columns: repeat(3, minmax(0, 1fr)); 634 gap: 12px; 635 } 636 637 .ds-stat { 638 border: 1px solid #eef2f7; 639 border-radius: 6px; 640 padding: 14px; 641 display: flex; 642 align-items: center; 643 gap: 12px; 644 } 645 646 .ds-stat__icon { 647 width: 36px; 648 height: 36px; 649 border-radius: 6px; 650 background: #fff; 651 border: 1px solid #eef2f7; 652 display: flex; 653 align-items: center; 654 justify-content: center; 655 color: #111827; 656 font-size: 18px; 657 } 658 659 .ds-stat__label { 660 font-size: 12px; 661 color: #6b7280; 662 font-weight: 700; 663 } 664 665 .ds-stat__value { 666 font-size: 18px; 667 color: #111827; 668 font-weight: 900; 669 margin-top: 2px; 670 } 671 672 .ds-features { 673 display: grid; 674 grid-template-columns: repeat(2, minmax(0, 1fr)); 675 gap: 12px; 676 } 677 678 .ds-feature { 679 border: 1px solid #eef2f7; 680 border-radius: 6px; 681 padding: 14px; 682 display: flex; 683 align-items: center; 684 justify-content: space-between; 685 gap: 12px; 686 background: #fff; 687 } 688 689 .ds-feature__title { 690 font-weight: 800; 691 color: #111827; 692 margin-bottom: 4px; 693 } 694 695 .ds-feature__desc { 696 color: #6b7280; 697 font-size: 12px; 698 line-height: 1.4; 699 } 700 701 .ds-feature__icon { 702 color: #111827; 703 font-size: 18px; 704 width: 18px; 705 height: 18px; 706 opacity: 0.75; 707 } 708 709 .ds-pro__badge { 710 display: inline-flex; 711 align-items: center; 712 gap: 8px; 713 color: #111827; 714 font-weight: 900; 715 font-size: 12px; 716 letter-spacing: 0.04em; 717 margin-bottom: 10px; 718 } 719 720 .ds-pro__badge .dashicons { 721 color: #a855f7; 722 } 723 724 .ds-pro__title { 725 font-size: 20px; 726 font-weight: 900; 727 color: #111827; 728 margin: 0 0 8px; 729 } 730 731 .ds-pro__text { 732 color: #6b7280; 733 font-size: 13px; 734 line-height: 1.5; 735 margin-bottom: 20px; 736 } 737 738 .ds-pro__list { 739 display: grid; 740 grid-template-columns: repeat(2, minmax(0, 1fr)); 741 gap: 20px; 742 margin-top: 10px; 743 } 744 745 .ds-pro__item { 746 display: flex; 747 align-items: center; 748 gap: 8px; 749 color: #374151; 750 font-weight: 700; 751 font-size: 12px; 752 } 753 754 .ds-check { 755 width: 16px; 756 height: 16px; 757 border-radius: 999px; 758 background: rgba(168, 85, 247, 0.18); 759 border: 1px solid rgba(168, 85, 247, 0.25); 760 position: relative; 761 flex: 0 0 16px; 762 } 763 764 .ds-check:after { 765 content: ""; 766 position: absolute; 767 left: 5px; 768 top: 3px; 769 width: 5px; 770 height: 8px; 771 border-right: 2px solid #a855f7; 772 border-bottom: 2px solid #a855f7; 773 transform: rotate(45deg); 774 } 775 776 .ds-quick__list { 777 display: flex; 778 flex-direction: column; 779 gap: 10px; 780 } 781 782 .ds-quick__item { 783 display: flex; 784 align-items: center; 785 gap: 10px; 786 padding: 10px 12px; 787 border-radius: 6px; 788 border: 1px solid #eef2f7; 789 background: #fff; 790 color: #111827; 791 font-weight: 700; 792 } 793 794 .ds-quick__item:hover { 795 background: #f9fafb; 796 border-color: #e5e7eb; 797 color: #111827; 798 } 799 800 .ds-quick__item .dashicons { 801 color: #111827; 802 opacity: 0.75; 803 } 804 805 806 .ds-footer { 807 text-align: center; 808 padding: 20px 0; 809 border-top: 1px solid #f3f3f3; 810 background: #ffffff; 811 color: #6d7882; 812 font-size: 14px; 813 } 814 815 /* New Widget Notice Styles */ 816 .daily-slider-notice-container { 817 margin: 0 0 16px; 818 } 819 820 .new-widget-notice { 821 background: linear-gradient(135deg, #a855f7 0%, #7c3aed 100%); 822 border-radius: 6px; 823 padding: 24px; 824 margin-bottom: 20px; 825 box-shadow: 0 6px 18px rgba(124, 58, 237, 0.25); 826 border: 1px solid rgba(255, 255, 255, 0.2); 827 } 828 349 829 .notice-content { 830 display: flex; 831 align-items: center; 832 justify-content: center; 833 gap: 20px; 834 text-align: left; 835 } 836 837 .notice-icon { 838 background: rgba(255, 255, 255, 0.3); 839 border-radius: 50%; 840 width: 60px; 841 height: 60px; 842 display: flex; 843 align-items: center; 844 justify-content: center; 845 flex-shrink: 0; 846 margin: 0 auto; 847 } 848 849 .notice-icon .dashicons { 850 color: #ffffff; 851 font-size: 28px; 852 display: block; 853 width: 28px; 854 height: 28px; 855 } 856 857 .notice-text { 858 flex: 1; 859 color: white; 860 } 861 862 .notice-text h3 { 863 margin: 0 0 8px 0; 864 font-size: 18px; 865 font-weight: 600; 866 color: white; 867 } 868 869 .notice-text p { 870 margin: 0; 871 line-height: 1.5; 872 opacity: 0.95; 873 } 874 875 .highlight-widget-name { 876 background: rgba(255, 255, 255, 0.18); 877 color: #ffffff; 878 padding: 2px 8px; 879 border-radius: 4px; 880 font-weight: 700; 881 border: 1px solid rgba(255, 255, 255, 0.28); 882 font-style: normal; 883 text-shadow: 0 0 8px rgba(255, 255, 255, 0.12); 884 } 885 886 .notice-actions { 887 display: flex; 888 gap: 12px; 889 flex-shrink: 0; 890 } 891 892 .notice-btn { 893 padding: 8px 16px; 894 border-radius: 6px; 895 text-decoration: none; 896 font-weight: 500; 897 font-size: 14px; 898 border: none; 899 cursor: pointer; 900 transition: all 0.3s ease; 901 } 902 903 .notice-btn.primary { 904 background: rgba(255, 255, 255, 0.9); 905 color: #7c3aed; 906 } 907 908 .notice-btn.primary:hover { 909 background: white; 910 transform: translateY(-1px); 911 } 912 913 .notice-btn.secondary { 914 background: rgba(255, 255, 255, 0.2); 915 color: white; 916 border: 1px solid rgba(255, 255, 255, 0.3); 917 } 918 919 .notice-btn.secondary:hover { 920 background: rgba(255, 255, 255, 0.3); 921 } 922 923 @media (max-width: 768px) { 924 .ds-grid { 925 grid-template-columns: 1fr; 926 } 927 928 .ds-stats { 929 grid-template-columns: 1fr; 930 } 931 932 .ds-features { 933 grid-template-columns: 1fr; 934 } 935 936 .ds-pro__list { 937 grid-template-columns: 1fr; 938 } 939 940 .notice-content { 941 flex-direction: column; 942 text-align: center; 943 } 944 945 .notice-actions { 946 width: 100%; 947 justify-content: center; 948 } 949 } 950 951 /* Hero Section */ 952 .welcome-hero { 953 position: relative; 954 background: #000000; 955 border-radius: 6px; 956 padding: 30px 25px; 957 text-align: center; 958 color: white; 959 margin-bottom: 20px; 960 overflow: hidden; 961 } 962 963 964 .hero-content { 965 position: relative; 966 z-index: 2; 967 display: flex; 350 968 flex-direction: column; 351 text-align: center; 352 } 353 .notice-actions { 354 width: 100%; 969 align-items: flex-start; 970 } 971 972 .hero-icon { 973 width: 80px; 974 height: 80px; 975 background: rgba(255, 255, 255, 0.2); 976 border-radius: 50%; 977 display: inline-flex; 978 align-items: center; 355 979 justify-content: center; 356 } 357 } 358 359 /* Hero Section */ 360 .welcome-hero { 361 position: relative; 362 background: #000000; 363 border-radius: 12px; 364 padding: 30px 25px; 365 text-align: center; 366 color: white; 367 margin-bottom: 20px; 368 overflow: hidden; 369 } 370 371 372 .hero-content { 373 position: relative; 374 z-index: 2; 375 display: flex; 376 flex-direction: column; 377 align-items: flex-start; 378 } 379 380 .hero-icon { 381 width: 80px; 382 height: 80px; 383 background: rgba(255,255,255,0.2); 384 border-radius: 50%; 385 display: inline-flex; 386 align-items: center; 387 justify-content: center; 388 margin-bottom: 20px; 389 backdrop-filter: blur(10px); 390 border: 1px solid rgba(255,255,255,0.3); 391 } 392 393 .hero-icon .dashicons { 394 font-size: 40px; 395 color: white; 396 } 397 398 .welcome-hero h1 { 399 font-size: 28px; 400 margin: 0 0 8px; 401 font-weight: 600; 402 color: #ffffff; 403 padding: 0; 404 } 405 406 .hero-subtitle { 407 font-size: 16px; 408 margin: 0; 409 max-width: 600px; 410 line-height: 1.4; 411 color: #ddd; 412 text-align: left; 413 } 414 415 /* Content Sections */ 416 .welcome-content { 417 display: flex; 418 flex-direction: column; 419 gap: 20px; 420 } 421 422 .section-header { 423 text-align: center; 424 margin-bottom: 20px; 425 } 426 427 .section-header h2 { 428 margin: 0 0 6px; 429 font-size: 22px; 430 color: #1e1e1e; 431 font-weight: 600; 432 } 433 434 .section-header p { 435 margin: 0; 436 font-size: 14px; 437 color: #666; 438 } 439 440 /* Quick Actions */ 441 .quick-actions-section { 442 background: white; 443 padding: 25px; 444 border-radius: 12px; 445 box-shadow: 0 4px 20px rgba(0,0,0,0.08); 446 } 447 448 .actions-grid { 449 display: grid; 450 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); 451 gap: 15px; 452 } 453 454 .action-card { 455 display: flex; 456 align-items: center; 457 padding: 18px; 458 background: #f8f9fa; 459 border: 2px solid transparent; 460 border-radius: 10px; 461 text-decoration: none; 462 color: inherit; 463 transition: all 0.3s ease; 464 position: relative; 465 overflow: hidden; 466 } 467 468 .action-card:hover { 469 transform: translateY(-5px); 470 box-shadow: 0 10px 30px rgba(0,0,0,0.15); 471 border-color: #000000; 472 } 473 474 .action-icon { 475 width: 40px; 476 height: 40px; 477 background: #000; 478 border-radius: 10px; 479 display: flex; 480 align-items: center; 481 justify-content: center; 482 margin-right: 15px; 483 flex-shrink: 0; 484 } 485 486 487 .action-icon .dashicons { 488 font-size: 20px; 489 color: white; 490 } 491 492 .action-content { 493 flex: 1; 494 } 495 496 .action-content h3 { 497 margin: 0 0 4px; 498 font-size: 16px; 499 font-weight: 600; 500 } 501 502 .action-content p { 503 margin: 0; 504 font-size: 13px; 505 opacity: 0.8; 506 } 507 508 .action-arrow { 509 font-size: 20px; 510 font-weight: bold; 511 margin-left: 15px; 512 transition: transform 0.3s ease; 513 } 514 515 .action-card:hover .action-arrow { 516 transform: translateX(5px); 517 } 518 519 /* Widgets Showcase */ 520 .widgets-showcase { 521 background: white; 522 padding: 25px; 523 border-radius: 12px; 524 box-shadow: 0 4px 20px rgba(0,0,0,0.08); 525 } 526 527 .widgets-grid { 528 display: grid; 529 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 530 gap: 18px; 531 } 532 533 .widget-card { 534 background: #f8f9fa; 535 border-radius: 10px; 536 padding: 18px; 537 transition: all 0.3s ease; 538 border: 2px solid transparent; 539 position: relative; 540 } 541 542 .widget-card:hover { 543 transform: translateY(-5px); 544 box-shadow: 0 15px 40px rgba(0,0,0,0.1); 545 border-color: #e1e5f2; 546 background: white; 547 } 548 549 .widget-header { 550 display: flex; 551 justify-content: space-between; 552 align-items: center; 553 margin-bottom: 15px; 554 } 555 556 .widget-icon { 557 width: 38px; 558 height: 38px; 559 border-radius: 10px; 560 display: flex; 561 align-items: center; 562 justify-content: center; 563 color: white; 564 font-weight: bold; 565 font-size: 18px; 566 } 567 568 .widget-letter { 569 font-size: 18px; 570 font-weight: 700; 571 } 572 573 .widget-status { 574 display: flex; 575 align-items: center; 576 gap: 6px; 577 font-size: 12px; 578 color: #27ae60; 579 background: rgba(39, 174, 96, 0.1); 580 padding: 4px 10px; 581 border-radius: 20px; 582 } 583 584 .widget-status.free { 585 color: #2271b1; 586 background: rgba(34, 113, 177, 0.1); 587 } 588 589 .status-dot { 590 width: 6px; 591 height: 6px; 592 background: #27ae60; 593 border-radius: 50%; 594 animation: pulse-dot 2s infinite; 595 } 596 597 .widget-status.free .status-dot { 598 background: #2271b1; 599 } 600 601 @keyframes pulse-dot { 602 0%, 100% { opacity: 1; } 603 50% { opacity: 0.5; } 604 } 605 606 .widget-content h3 { 607 margin: 0 0 6px; 608 font-size: 17px; 609 font-weight: 600; 610 color: #1e1e1e; 611 } 612 613 .widget-description { 614 margin: 0 0 12px; 615 color: #666; 616 font-size: 13px; 617 } 618 619 .widget-features { 620 display: flex; 621 flex-wrap: wrap; 622 gap: 8px; 623 } 624 625 .feature-tag { 626 background: #e1e5f2; 627 color: #5a67d8; 628 padding: 3px 8px; 629 border-radius: 15px; 630 font-size: 10px; 631 font-weight: 500; 632 } 633 634 /* Coming Soon Section */ 635 .coming-soon-section { 636 position: relative; 637 margin-top: 20px; 638 } 639 640 .coming-content { 641 position: relative; 642 z-index: 2; 643 } 644 645 .coming-header { 646 text-align: center; 647 margin-bottom: 25px; 648 } 649 650 651 .coming-header h2 { 652 font-size: 24px; 653 margin: 0 0 12px; 654 font-weight: 600; 655 } 656 657 .beta-badge { 658 display: inline-flex; 659 align-items: center; 660 gap: 8px; 661 background: rgba(255,255,255,0.2); 662 padding: 8px 20px; 663 border-radius: 25px; 664 backdrop-filter: blur(10px); 665 border: 1px solid rgba(255,255,255,0.3); 666 } 667 668 .badge-text { 669 font-size: 12px; 670 font-weight: 500; 671 text-transform: uppercase; 672 letter-spacing: 1px; 673 } 674 675 .badge-pulse { 676 width: 8px; 677 height: 8px; 678 background: #ff4757; 679 border-radius: 50%; 680 animation: pulse-badge 1.5s infinite; 681 } 682 683 @keyframes pulse-badge { 684 0% { 685 box-shadow: 0 0 0 0 rgba(255, 71, 87, 0.7); 686 } 687 70% { 688 box-shadow: 0 0 0 10px rgba(255, 71, 87, 0); 689 } 690 100% { 691 box-shadow: 0 0 0 0 rgba(255, 71, 87, 0); 692 } 693 } 694 695 .coming-widgets { 696 display: grid; 697 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); 698 gap: 18px; 699 margin-bottom: 25px; 700 } 701 702 .coming-widget { 703 background: #fff; 704 border-radius: 12px; 705 padding: 20px; 706 backdrop-filter: blur(10px); 707 border: 1px solid rgba(255,255,255,0.2); 708 transition: all 0.3s ease; 709 } 710 711 .coming-widget:hover { 712 transform: translateY(-5px); 713 } 714 715 .coming-widget-icon { 716 width: 50px; 717 height: 50px; 718 border-radius: 12px; 719 display: flex; 720 align-items: center; 721 justify-content: center; 722 margin-bottom: 15px; 723 position: relative; 724 overflow: hidden; 725 } 726 727 .widget-emoji { 728 font-size: 20px; 729 z-index: 2; 730 } 731 732 .coming-widget-content h3 { 733 margin: 0 0 8px; 734 font-size: 17px; 735 font-weight: 600; 736 } 737 738 .coming-widget-content p { 739 margin: 0 0 12px; 740 opacity: 0.9; 741 line-height: 1.4; 742 font-size: 13px; 743 } 744 745 .coming-status { 746 display: inline-flex; 747 align-items: center; 748 background: rgba(255,255,255,0.2); 749 padding: 5px 12px; 750 border-radius: 20px; 751 font-size: 11px; 752 font-weight: 500; 753 } 754 755 .newsletter-signup { 756 display: flex; 757 align-items: center; 758 gap: 15px; 759 background: #fff; 760 padding: 18px; 761 border-radius: 12px; 762 backdrop-filter: blur(10px); 763 } 764 765 .newsletter-icon { 766 font-size: 32px; 767 } 768 769 .newsletter-content { 770 flex: 1; 771 } 772 773 .newsletter-content h4 { 774 margin: 0 0 4px; 775 font-size: 16px; 776 } 777 778 .newsletter-content p { 779 margin: 0; 780 opacity: 0.9; 781 font-size: 13px; 782 } 783 784 .newsletter-btn { 785 background: white; 786 color: #000000; 787 padding: 10px 20px; 788 border-radius: 20px; 789 text-decoration: none; 790 font-weight: 600; 791 transition: all 0.3s ease; 792 font-size: 13px; 793 box-shadow: 0 2px 8px rgba(0,0,0,0.15); 794 } 795 796 .newsletter-btn:hover { 797 transform: translateY(-2px); 798 box-shadow: 0 5px 15px rgba(0,0,0,0.2); 799 } 800 801 802 803 /* Responsive Design */ 804 @media (max-width: 768px) { 805 .daily-slider-welcome { 806 margin: 10px; 807 } 808 809 .welcome-hero { 810 padding: 40px 25px; 811 } 812 813 .hero-stats { 814 gap: 15px; 815 } 816 817 .quick-actions-section, 818 .widgets-showcase { 819 padding: 25px 20px; 820 } 821 822 .coming-soon-section { 823 padding: 40px 25px; 824 } 825 826 .actions-grid { 827 grid-template-columns: 1fr; 828 } 829 830 .widgets-grid { 831 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 832 gap: 20px; 833 } 834 835 .coming-widgets { 836 grid-template-columns: 1fr; 837 gap: 20px; 838 } 839 840 .newsletter-signup { 841 flex-direction: column; 842 text-align: center; 843 gap: 15px; 844 } 845 846 847 848 .section-header h2 { 849 font-size: 24px; 980 margin-bottom: 20px; 981 backdrop-filter: blur(10px); 982 border: 1px solid rgba(255, 255, 255, 0.3); 983 } 984 985 .hero-icon .dashicons { 986 font-size: 40px; 987 color: white; 850 988 } 851 989 852 990 .welcome-hero h1 { 853 991 font-size: 28px; 854 } 992 margin: 0 0 8px; 993 font-weight: 600; 994 color: #ffffff; 995 padding: 0; 996 } 997 998 .hero-subtitle { 999 font-size: 16px; 1000 margin: 0; 1001 max-width: 600px; 1002 line-height: 1.4; 1003 color: #ddd; 1004 text-align: left; 1005 } 1006 1007 /* Content Sections */ 1008 .welcome-content { 1009 display: flex; 1010 flex-direction: column; 1011 gap: 20px; 1012 } 1013 1014 .section-header { 1015 text-align: center; 1016 margin-bottom: 20px; 1017 } 1018 1019 .section-header h2 { 1020 margin: 0 0 6px; 1021 font-size: 22px; 1022 color: #1e1e1e; 1023 font-weight: 600; 1024 } 1025 1026 .section-header p { 1027 margin: 0; 1028 font-size: 14px; 1029 color: #666; 1030 } 1031 1032 /* Quick Actions */ 1033 .quick-actions-section { 1034 background: white; 1035 padding: 25px; 1036 border-radius: 6px; 1037 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); 1038 } 1039 1040 .actions-grid { 1041 display: grid; 1042 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); 1043 gap: 15px; 1044 } 1045 1046 .action-card { 1047 display: flex; 1048 align-items: center; 1049 padding: 18px; 1050 background: #f8f9fa; 1051 border: 2px solid transparent; 1052 border-radius: 6px; 1053 text-decoration: none; 1054 color: inherit; 1055 transition: all 0.3s ease; 1056 position: relative; 1057 overflow: hidden; 1058 } 1059 1060 .action-card:hover { 1061 transform: translateY(-5px); 1062 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); 1063 border-color: #000000; 1064 } 1065 1066 .action-icon { 1067 width: 40px; 1068 height: 40px; 1069 background: #000; 1070 border-radius: 6px; 1071 display: flex; 1072 align-items: center; 1073 justify-content: center; 1074 margin-right: 15px; 1075 flex-shrink: 0; 1076 } 1077 1078 1079 .action-icon .dashicons { 1080 font-size: 20px; 1081 color: white; 1082 } 1083 1084 .action-content { 1085 flex: 1; 1086 } 1087 1088 .action-content h3 { 1089 margin: 0 0 4px; 1090 font-size: 16px; 1091 font-weight: 600; 1092 } 1093 1094 .action-content p { 1095 margin: 0; 1096 font-size: 13px; 1097 opacity: 0.8; 1098 } 1099 1100 .action-arrow { 1101 font-size: 20px; 1102 font-weight: bold; 1103 margin-left: 15px; 1104 transition: transform 0.3s ease; 1105 } 1106 1107 .action-card:hover .action-arrow { 1108 transform: translateX(5px); 1109 } 1110 1111 /* Widgets Showcase */ 1112 .widgets-showcase { 1113 background: white; 1114 padding: 25px; 1115 border-radius: 6px; 1116 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); 1117 } 1118 1119 .widgets-grid { 1120 display: grid; 1121 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 1122 gap: 18px; 1123 } 1124 1125 .widget-card { 1126 background: #f8f9fa; 1127 border-radius: 6px; 1128 padding: 18px; 1129 transition: all 0.3s ease; 1130 border: 2px solid transparent; 1131 position: relative; 1132 } 1133 1134 .widget-card:hover { 1135 transform: translateY(-5px); 1136 box-shadow: 0 15px 40px rgba(0, 0, 0, 0.1); 1137 border-color: #e1e5f2; 1138 background: white; 1139 } 1140 1141 .widget-header { 1142 display: flex; 1143 justify-content: space-between; 1144 align-items: center; 1145 margin-bottom: 15px; 1146 } 1147 1148 .widget-icon { 1149 width: 38px; 1150 height: 38px; 1151 border-radius: 6px; 1152 display: flex; 1153 align-items: center; 1154 justify-content: center; 1155 color: white; 1156 font-weight: bold; 1157 font-size: 18px; 1158 } 1159 1160 .widget-letter { 1161 font-size: 18px; 1162 font-weight: 700; 1163 } 1164 1165 .widget-status { 1166 display: flex; 1167 align-items: center; 1168 gap: 6px; 1169 font-size: 12px; 1170 color: #27ae60; 1171 background: rgba(39, 174, 96, 0.1); 1172 padding: 4px 10px; 1173 border-radius: 20px; 1174 } 1175 1176 .widget-status.free { 1177 color: #2271b1; 1178 background: rgba(34, 113, 177, 0.1); 1179 } 1180 1181 .status-dot { 1182 width: 6px; 1183 height: 6px; 1184 background: #27ae60; 1185 border-radius: 50%; 1186 animation: pulse-dot 2s infinite; 1187 } 1188 1189 .widget-status.free .status-dot { 1190 background: #2271b1; 1191 } 1192 1193 @keyframes pulse-dot { 1194 1195 0%, 1196 100% { 1197 opacity: 1; 1198 } 1199 1200 50% { 1201 opacity: 0.5; 1202 } 1203 } 1204 1205 .widget-content h3 { 1206 margin: 0 0 6px; 1207 font-size: 17px; 1208 font-weight: 600; 1209 color: #1e1e1e; 1210 } 1211 1212 .widget-description { 1213 margin: 0 0 12px; 1214 color: #666; 1215 font-size: 13px; 1216 } 1217 1218 .widget-features { 1219 display: flex; 1220 flex-wrap: wrap; 1221 gap: 8px; 1222 } 1223 1224 .feature-tag { 1225 background: #e1e5f2; 1226 color: #5a67d8; 1227 padding: 3px 8px; 1228 border-radius: 15px; 1229 font-size: 10px; 1230 font-weight: 500; 1231 } 1232 1233 /* Coming Soon Section */ 1234 .coming-soon-section { 1235 position: relative; 1236 margin-top: 20px; 1237 } 1238 1239 .coming-content { 1240 position: relative; 1241 z-index: 2; 1242 } 1243 1244 .coming-header { 1245 text-align: center; 1246 margin-bottom: 25px; 1247 } 1248 855 1249 856 1250 .coming-header h2 { 857 font-size: 26px; 858 } 859 } 860 861 @media (max-width: 480px) { 862 .hero-stats { 863 flex-direction: column; 864 gap: 10px; 865 } 866 867 .stat-divider { 868 display: none; 869 } 870 } 1251 font-size: 24px; 1252 margin: 0 0 12px; 1253 font-weight: 600; 1254 } 1255 1256 .beta-badge { 1257 display: inline-flex; 1258 align-items: center; 1259 gap: 8px; 1260 background: rgba(255, 255, 255, 0.2); 1261 padding: 8px 20px; 1262 border-radius: 25px; 1263 backdrop-filter: blur(10px); 1264 border: 1px solid rgba(255, 255, 255, 0.3); 1265 } 1266 1267 .badge-text { 1268 font-size: 12px; 1269 font-weight: 500; 1270 text-transform: uppercase; 1271 letter-spacing: 1px; 1272 } 1273 1274 .badge-pulse { 1275 width: 8px; 1276 height: 8px; 1277 background: #ff4757; 1278 border-radius: 50%; 1279 animation: pulse-badge 1.5s infinite; 1280 } 1281 1282 @keyframes pulse-badge { 1283 0% { 1284 box-shadow: 0 0 0 0 rgba(255, 71, 87, 0.7); 1285 } 1286 1287 70% { 1288 box-shadow: 0 0 0 10px rgba(255, 71, 87, 0); 1289 } 1290 1291 100% { 1292 box-shadow: 0 0 0 0 rgba(255, 71, 87, 0); 1293 } 1294 } 1295 1296 .coming-widgets { 1297 display: grid; 1298 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); 1299 gap: 18px; 1300 margin-bottom: 25px; 1301 } 1302 1303 .coming-widget { 1304 background: #fff; 1305 border-radius: 6px; 1306 padding: 20px; 1307 backdrop-filter: blur(10px); 1308 border: 1px solid rgba(255, 255, 255, 0.2); 1309 transition: all 0.3s ease; 1310 } 1311 1312 .coming-widget:hover { 1313 transform: translateY(-5px); 1314 } 1315 1316 .coming-widget-icon { 1317 width: 50px; 1318 height: 50px; 1319 border-radius: 6px; 1320 display: flex; 1321 align-items: center; 1322 justify-content: center; 1323 margin-bottom: 15px; 1324 position: relative; 1325 overflow: hidden; 1326 } 1327 1328 .widget-emoji { 1329 font-size: 20px; 1330 z-index: 2; 1331 } 1332 1333 .coming-widget-content h3 { 1334 margin: 0 0 8px; 1335 font-size: 17px; 1336 font-weight: 600; 1337 } 1338 1339 .coming-widget-content p { 1340 margin: 0 0 12px; 1341 opacity: 0.9; 1342 line-height: 1.4; 1343 font-size: 13px; 1344 } 1345 1346 .coming-status { 1347 display: inline-flex; 1348 align-items: center; 1349 background: rgba(255, 255, 255, 0.2); 1350 padding: 5px 12px; 1351 border-radius: 20px; 1352 font-size: 11px; 1353 font-weight: 500; 1354 } 1355 1356 .newsletter-signup { 1357 display: flex; 1358 align-items: center; 1359 gap: 15px; 1360 background: #fff; 1361 padding: 18px; 1362 border-radius: 6px; 1363 backdrop-filter: blur(10px); 1364 } 1365 1366 .newsletter-icon { 1367 font-size: 32px; 1368 } 1369 1370 .newsletter-content { 1371 flex: 1; 1372 } 1373 1374 .newsletter-content h4 { 1375 margin: 0 0 4px; 1376 font-size: 16px; 1377 } 1378 1379 .newsletter-content p { 1380 margin: 0; 1381 opacity: 0.9; 1382 font-size: 13px; 1383 } 1384 1385 .newsletter-btn { 1386 background: white; 1387 color: #000000; 1388 padding: 10px 20px; 1389 border-radius: 20px; 1390 text-decoration: none; 1391 font-weight: 600; 1392 transition: all 0.3s ease; 1393 font-size: 13px; 1394 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); 1395 } 1396 1397 .newsletter-btn:hover { 1398 transform: translateY(-2px); 1399 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); 1400 } 1401 1402 1403 1404 /* Responsive Design */ 1405 @media (max-width: 768px) { 1406 .daily-slider-welcome { 1407 margin: 10px; 1408 } 1409 1410 .welcome-hero { 1411 padding: 40px 25px; 1412 } 1413 1414 .hero-stats { 1415 gap: 15px; 1416 } 1417 1418 .quick-actions-section, 1419 .widgets-showcase { 1420 padding: 25px 20px; 1421 } 1422 1423 .coming-soon-section { 1424 padding: 40px 25px; 1425 } 1426 1427 .actions-grid { 1428 grid-template-columns: 1fr; 1429 } 1430 1431 .widgets-grid { 1432 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); 1433 gap: 20px; 1434 } 1435 1436 .coming-widgets { 1437 grid-template-columns: 1fr; 1438 gap: 20px; 1439 } 1440 1441 .newsletter-signup { 1442 flex-direction: column; 1443 text-align: center; 1444 gap: 15px; 1445 } 1446 1447 1448 1449 .section-header h2 { 1450 font-size: 24px; 1451 } 1452 1453 .welcome-hero h1 { 1454 font-size: 28px; 1455 } 1456 1457 .coming-header h2 { 1458 font-size: 26px; 1459 } 1460 } 1461 1462 @media (max-width: 480px) { 1463 .hero-stats { 1464 flex-direction: column; 1465 gap: 10px; 1466 } 1467 1468 .stat-divider { 1469 display: none; 1470 } 1471 } 871 1472 </style> 872 1473 873 1474 <script> 874 jQuery(document).ready(function($) { 875 // Handle notice dismissal 876 $('.dismiss-notice').on('click', function(e) { 877 e.preventDefault(); 878 var widget = $(this).data('widget'); 879 880 $.ajax({ 881 url: ajaxurl, 882 type: 'POST', 883 data: { 884 action: 'dismiss_daily_slider_notice', 885 widget: widget, 886 nonce: '<?php echo wp_create_nonce('daily_slider_dismiss_notice'); ?>' 887 }, 888 success: function(response) { 889 $('.daily-slider-notice-container').fadeOut(300, function() { 890 $(this).remove(); 891 }); 892 } 1475 jQuery(document).ready(function($) { 1476 // Handle notice dismissal 1477 $('.dismiss-notice').on('click', function(e) { 1478 e.preventDefault(); 1479 var widget = $(this).data('widget'); 1480 1481 $.ajax({ 1482 url: ajaxurl, 1483 type: 'POST', 1484 data: { 1485 action: 'dismiss_daily_slider_notice', 1486 widget: widget, 1487 nonce: '<?php echo wp_create_nonce('daily_slider_dismiss_notice'); ?>' 1488 }, 1489 success: function(response) { 1490 $('.daily-slider-notice-container').fadeOut(300, function() { 1491 $(this).remove(); 1492 }); 1493 } 1494 }); 893 1495 }); 894 1496 }); 895 });896 1497 </script> 897 <?php1498 <?php 898 1499 } 899 1500 } -
daily-slider/trunk/admin/widget-manager.php
r3423716 r3445042 19 19 self::add_widget('pixel', [ 20 20 'name' => __('Pixel (Hero Slider)', 'daily-slider'), 21 'description' => __('Full-screen hero slider widget for showcasing high-quality images and content.', 'daily-slider'),22 21 'icon' => 'dashicons-format-image', 23 22 'category' => 'current', 24 23 'status' => 'active', 25 'features' => [ 26 __('Full-screen layouts', 'daily-slider'), 27 __('Responsive design', 'daily-slider'), 28 __('Custom animations', 'daily-slider') 29 ] 24 'url' => 'https://xpospark.com/plugin/daily-slider/demo/pixel/', 30 25 ]); 31 26 32 27 self::add_widget('eldorado', [ 33 28 'name' => __('Eldorado (Image Carousel)', 'daily-slider'), 34 'description' => __('Elegant image carousel for portfolio showcases and image galleries.', 'daily-slider'),35 29 'icon' => 'dashicons-images-alt2', 36 30 'category' => 'current', 37 31 'status' => 'active', 38 'features' => [ 39 __('Portfolio showcase', 'daily-slider'), 40 __('Image galleries', 'daily-slider'), 41 __('Hover effects', 'daily-slider') 42 ] 32 'url' => 'https://xpospark.com/plugin/daily-slider/demo/eldorado/', 43 33 ]); 44 34 45 35 self::add_widget('review_carousel', [ 46 36 'name' => __('Review Carousel', 'daily-slider'), 47 'description' => __('Display customer testimonials and reviews in an interactive carousel format.', 'daily-slider'),48 37 'icon' => 'dashicons-star-filled', 49 38 'category' => 'current', 50 39 'status' => 'active', 51 'features' => [ 52 __('Customer reviews', 'daily-slider'), 53 __('Star ratings', 'daily-slider'), 54 __('Interactive carousel', 'daily-slider') 55 ] 40 'url' => 'https://xpospark.com/plugin/daily-slider/demo/review-carousel/', 56 41 ]); 57 42 58 43 self::add_widget('marquee', [ 59 44 'name' => __('Marquee Slider', 'daily-slider'), 60 'description' => __('Smooth scrolling marquee for logos, testimonials, and continuous content loops with horizontal and vertical scrolling options.', 'daily-slider'),61 45 'icon' => 'dashicons-editor-code', 62 46 'category' => 'current', 63 47 'status' => 'active', 64 'features' => [ 65 __('Horizontal & vertical scrolling', 'daily-slider'), 66 __('Continuous scrolling', 'daily-slider'), 67 __('Logo showcase', 'daily-slider'), 68 __('Speed control', 'daily-slider'), 69 __('Pause on hover', 'daily-slider'), 70 __('Edge masking effects', 'daily-slider') 71 ] 48 'url' => 'https://xpospark.com/plugin/daily-slider/demo/marquee-slider/', 72 49 ]); 73 50 74 51 75 52 self::add_widget('testimonials_marquee', [ 76 'name' => __('Testimonials Slider', 'daily-slider'), 77 'description' => __('Smooth scrolling marquee for logos, testimonials, and continuous content loops with horizontal and vertical scrolling options.', 'daily-slider'), 53 'name' => __('Testimonials Marquee', 'daily-slider'), 78 54 'icon' => 'dashicons-editor-code', 79 55 'category' => 'current', 80 56 'status' => 'active', 81 'features' => [ 82 __('Horizontal & vertical scrolling', 'daily-slider'), 83 __('Continuous scrolling', 'daily-slider'), 84 __('Review showcase', 'daily-slider'), 85 __('Speed control', 'daily-slider'), 86 __('Pause on hover', 'daily-slider'), 87 __('Edge masking effects', 'daily-slider') 88 ] 57 'url' => 'https://xpospark.com/plugin/daily-slider/demo/marquee-testimonials/', 89 58 ]); 90 59 … … 92 61 self::add_widget('post_slider', [ 93 62 'name' => __('Post Slider', 'daily-slider'), 94 'description' => __('Dynamic blog post slider with custom layouts, filters, and WordPress integration.', 'daily-slider'),95 63 'icon' => 'dashicons-admin-post', 96 64 'category' => 'coming_soon', 97 65 'status' => 'coming_soon', 98 'features' => [99 __('Dynamic content', 'daily-slider'),100 __('Custom post types', 'daily-slider'),101 __('Advanced filters', 'daily-slider')102 ]103 66 ]); 104 67 105 68 self::add_widget('post_carousel', [ 106 69 'name' => __('Post Carousel', 'daily-slider'), 107 'description' => __('Interactive carousel for WordPress posts with categories, tags, and custom layouts.', 'daily-slider'),108 70 'icon' => 'dashicons-admin-page', 109 71 'category' => 'coming_soon', 110 72 'status' => 'coming_soon', 111 'features' => [112 __('WordPress posts', 'daily-slider'),113 __('Category filters', 'daily-slider'),114 __('Custom layouts', 'daily-slider')115 ]116 73 ]); 117 74 118 75 self::add_widget('woo_products', [ 119 76 'name' => __('WooCommerce Products', 'daily-slider'), 120 'description' => __('Product carousel with cart integration, pricing display, and WooCommerce compatibility.', 'daily-slider'),121 77 'icon' => 'dashicons-cart', 122 78 'category' => 'coming_soon', 123 79 'status' => 'coming_soon', 124 'features' => [125 __('Product showcase', 'daily-slider'),126 __('Cart integration', 'daily-slider'),127 __('Pricing display', 'daily-slider')128 ]129 80 ]); 130 81 } … … 199 150 $enabled_widgets = array(); 200 151 } 152 153 // Get plugin data for version 154 $plugin_data = get_file_data(plugin_dir_path(dirname(__FILE__)) . 'daily-slider.php', array( 155 'Version' => 'Version' 156 )); 157 $version = !empty($plugin_data['Version']) ? $plugin_data['Version'] : '1.0.4'; 158 159 // Calculate widget counts 160 $total_widgets = count($current_widgets); 161 $enabled_count = count(array_filter($enabled_widgets)); 162 163 // Dashboard and widgets URLs 164 $dashboard_url = admin_url('admin.php?page=daily-slider-dashboard'); 165 $widgets_url = admin_url('admin.php?page=daily-slider-widgets'); 166 201 167 ?> 202 <div class="daily-slider-widgets-manager"> 203 168 <div class="daily-slider-admin"> 169 <div class="ds-topbar"> 170 <div class="ds-topbar__left"> 171 <div class="ds-brand"> 172 <span class="ds-brand__icon dashicons dashicons-slides"></span> 173 </div> 174 <div class="ds-tabs"> 175 <a class="ds-tab" href="<?php echo esc_url($dashboard_url); ?>"><?php _e('Dashboard', 'daily-slider'); ?></a> 176 <a class="ds-tab is-active" href="<?php echo esc_url($widgets_url); ?>"><?php _e('Widgets', 'daily-slider'); ?></a> 177 </div> 178 </div> 179 <div class="ds-topbar__right"> 180 <span class="ds-version"><?php echo esc_html(sprintf(__('Version %s', 'daily-slider'), $version)); ?></span> 181 </div> 182 </div> 183 204 184 <!-- Show success message after saving --> 205 185 <?php if (isset($_GET['settings-updated']) && $_GET['settings-updated'] === 'true'): ?> … … 208 188 </div> 209 189 <?php endif; ?> 210 211 <!-- Header --> 212 <div class="widgets-header"> 213 <div class="header-content"> 214 <h1><?php _e('Widget Manager', 'daily-slider'); ?></h1> 215 <p><?php _e('Enable or disable widgets as needed for your website. Only enabled widgets will appear in Elementor.', 'daily-slider'); ?></p> 216 </div> 217 <div class="header-actions"> 218 <button type="submit" form="widgets-form" class="button button-primary button-large header-save-btn"> 219 <span class="dashicons dashicons-saved"></span> 220 <?php _e('Save Settings', 'daily-slider'); ?> 221 </button> 222 </div> 223 </div> 224 225 <!-- Widget Form --> 226 <form method="post" action="options.php" class="widgets-form" id="widgets-form"> 227 <?php settings_fields('daily_slider_settings'); ?> 228 229 <!-- Current Widgets Section --> 230 <div class="widgets-section"> 231 <div class="section-header"> 232 <h2><?php _e('Available Widgets', 'daily-slider'); ?></h2> 233 <div class="bulk-actions"> 234 <button type="button" class="button enable-all"><?php _e('Enable All', 'daily-slider'); ?></button> 235 <button type="button" class="button disable-all"><?php _e('Disable All', 'daily-slider'); ?></button> 190 191 <div class="ds-col ds-col--main"> 192 <form method="post" action="options.php" class="widgets-form" id="widgets-form"> 193 <?php settings_fields('daily_slider_settings'); ?> 194 195 <div class="ds-card"> 196 <div class="ds-card__head ds-card__head--split"> 197 <h2 class="ds-card__title"><?php _e('Available Widgets', 'daily-slider'); ?></h2> 198 <div class="ds-hero__actions"> 199 <button type="button" class="ds-btn ds-btn--ghost enable-all"> 200 <span class="dashicons dashicons-yes"></span> 201 <?php _e('Enable All', 'daily-slider'); ?> 202 </button> 203 <button type="button" class="ds-btn ds-btn--ghost disable-all"> 204 <span class="dashicons dashicons-dismiss"></span> 205 <?php _e('Disable All', 'daily-slider'); ?> 206 </button> 207 <button type="submit" form="widgets-form" class="ds-btn ds-btn--primary"> 208 <span class="dashicons dashicons-saved"></span> 209 <?php _e('Save Settings', 'daily-slider'); ?> 210 </button> 211 </div> 212 </div> 213 214 <div class="ds-features"> 215 <?php foreach ($current_widgets as $key => $widget): 216 $is_enabled = isset($enabled_widgets[$key]) && $enabled_widgets[$key]; 217 ?> 218 <div class="ds-feature ds-widget-item <?php echo $is_enabled ? 'is-enabled' : ''; ?>"> 219 <div class="ds-feature__meta"> 220 <div class="ds-feature__title"><?php echo esc_html($widget['name']); ?></div> 221 <a href="<?php echo esc_url($widget['url']); ?>" target="_blank" rel="noopener noreferrer" class="ds-feature__link"> 222 <?php _e('View Demo', 'daily-slider'); ?> 223 </a> 224 </div> 225 <div class="ds-feature__actions"> 226 <div class="ds-feature__icon"> 227 <span class="dashicons <?php echo esc_attr($widget['icon']); ?>"></span> 228 </div> 229 <div class="ds-widget-toggle"> 230 <label class="ds-toggle-switch"> 231 <input type="checkbox" 232 name="daily_slider_widgets[<?php echo esc_attr($key); ?>]" 233 value="1" 234 <?php checked($is_enabled); ?> 235 class="ds-widget-checkbox"> 236 <span class="ds-toggle-slider"></span> 237 </label> 238 </div> 239 </div> 240 </div> 241 <?php endforeach; ?> 236 242 </div> 237 243 </div> 238 239 <div class="widgets-grid"> 240 <?php foreach ($current_widgets as $key => $widget): ?> 241 <div class="widget-card"> 242 <div class="widget-header"> 243 <div class="widget-icon"> 244 <span class="dashicons <?php echo esc_attr($widget['icon']); ?>"></span> 245 </div> 246 <div class="widget-toggle"> 247 <label class="toggle-switch"> 248 <input type="checkbox" 249 name="daily_slider_widgets[<?php echo esc_attr($key); ?>]" 250 value="1" 251 <?php checked(isset($enabled_widgets[$key]) && $enabled_widgets[$key]); ?> 252 class="widget-checkbox"> 253 <span class="toggle-slider"></span> 254 </label> 255 </div> 256 </div> 257 258 <div class="widget-content"> 259 <h3><?php echo esc_html($widget['name']); ?></h3> 260 <p class="widget-description"><?php echo esc_html($widget['description']); ?></p> 261 262 <div class="widget-features"> 263 <h4><?php _e('Features:', 'daily-slider'); ?></h4> 264 <ul class="features-list"> 265 <?php foreach ($widget['features'] as $feature): ?> 266 <li><?php echo esc_html($feature); ?></li> 267 <?php endforeach; ?> 268 </ul> 269 </div> 270 271 <div class="widget-status"> 272 <span class="status-badge free"> 273 <span class="status-dot"></span> 274 <?php _e('Free', 'daily-slider'); ?> 275 </span> 276 </div> 277 </div> 278 </div> 279 <?php endforeach; ?> 280 </div> 281 </div> 282 283 </form> 284 244 </form> 245 </div> 246 247 <div class="ds-footer"> 248 <?php echo esc_html(sprintf(__('© %s Daily Slider. All rights reserved.', 'daily-slider'), date_i18n('Y'))); ?> 249 </div> 285 250 </div> 286 251 … … 296 261 ?> 297 262 <style> 298 .daily-slider-widgets-manager { 299 max-width: 1200px; 300 margin: 15px 0; 301 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 263 /* Atomic-style Dashboard (matching welcome page) */ 264 .daily-slider-admin { 265 max-width: 1200px; 266 margin: 20px 0 0; 267 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 268 background: #f9fafb; 269 border-radius: 6px; 270 overflow: hidden; 271 } 272 273 .daily-slider-admin a { 274 text-decoration: none; 275 } 276 277 .ds-topbar { 278 display: flex; 279 align-items: center; 280 justify-content: space-between; 281 background: #fff; 282 padding: 0 20px; 283 border-bottom: 1px solid #e5e7eb; 284 } 285 286 .ds-topbar__left { 287 display: flex; 288 align-items: center; 289 gap: 30px; 290 } 291 292 .ds-brand { 293 width: 40px; 294 height: 40px; 295 border-radius: 6px; 296 background: linear-gradient(135deg, #a855f7, #7c3aed); 297 display: flex; 298 align-items: center; 299 justify-content: center; 300 } 301 302 .ds-brand__icon { 303 color: #fff; 304 font-size: 18px; 305 width: 18px; 306 height: 18px; 307 } 308 309 .ds-tabs { 310 display: flex; 311 gap: 18px; 312 } 313 314 .ds-tab { 315 color: #111827; 316 font-weight: 600; 317 padding: 24px 0; 318 border-bottom: 2px solid transparent; 319 box-shadow: none !important; 320 outline: none !important; 321 } 322 323 .ds-tab.is-active { 324 color: #7c3aed; 325 border-bottom-color: #7c3aed; 326 } 327 328 .ds-version { 329 display: inline-flex; 330 align-items: center; 331 background: rgba(124, 58, 237, 0.12); 332 color: #7c3aed; 333 padding: 6px 12px; 334 border-radius: 999px; 335 font-weight: 700; 336 font-size: 12px; 337 } 338 339 .ds-grid { 340 display: grid; 341 grid-template-columns: 1.6fr 1fr; 342 gap: 18px; 343 align-items: start; 344 } 345 346 .ds-card { 347 background: #fff; 348 padding: 20px; 349 border-radius: 8px; 350 border: 1px solid #f1f1f1; 351 } 352 353 .ds-col--main{ 354 padding: 20px; 355 } 356 357 .ds-hero { 358 padding: 22px; 359 } 360 361 .ds-hero__title { 362 margin: 0 0 6px; 363 font-size: 28px; 364 color: #111827; 365 } 366 367 .ds-hero__subtitle { 368 margin: 0 0 16px; 369 color: #6b7280; 370 font-size: 14px; 371 line-height: 1.5; 372 max-width: 620px; 373 } 374 375 .ds-hero__actions { 376 display: flex; 377 gap: 12px; 378 flex-wrap: wrap; 379 } 380 381 .ds-btn { 382 display: inline-flex; 383 align-items: center; 384 justify-content: center; 385 gap: 8px; 386 padding: 10px 16px; 387 border-radius: 6px; 388 font-weight: 700; 389 font-size: 13px; 390 border: 1px solid transparent; 391 cursor: pointer; 392 background: transparent; 393 } 394 395 .ds-btn .dashicons { 396 font-size: 16px; 397 width: 16px; 398 height: 16px; 399 } 400 401 .ds-btn--primary { 402 background: #a855f7; 403 color: #fff; 404 } 405 406 .ds-btn--primary:hover { 407 background: #9333ea; 408 color: #fff; 409 } 410 411 .ds-btn--ghost { 412 background: #fff; 413 border-color: #e5e7eb; 414 color: #111827; 415 } 416 417 .ds-btn--ghost:hover { 418 border-color: #cbd5e1; 419 background: #f9fafb; 420 color: #111827; 421 } 422 423 .ds-btn--wide { 424 width: 100%; 425 background: #a855f7; 426 color: #fff; 427 margin-top: 14px; 428 padding: 12px 16px; 429 } 430 431 .ds-btn--wide:hover { 432 background: #9333ea; 433 color: #fff; 434 } 435 436 .ds-card__head { 437 margin-bottom: 20px; 438 } 439 440 .ds-card__head--split { 441 display: flex; 442 align-items: center; 443 justify-content: space-between; 444 gap: 12px; 445 } 446 447 .ds-card__title { 448 margin: 0; 449 font-size: 16px; 450 color: #111827; 451 font-weight: 800; 452 } 453 454 .ds-stats { 455 display: grid; 456 grid-template-columns: repeat(3, minmax(0, 1fr)); 457 gap: 12px; 458 } 459 460 .ds-stat { 461 background: #f9fafb; 462 border: 1px solid #eef2f7; 463 border-radius: 6px; 464 padding: 14px; 465 display: flex; 466 align-items: center; 467 gap: 12px; 468 } 469 470 .ds-stat__icon { 471 width: 36px; 472 height: 36px; 473 border-radius: 6px; 474 background: #fff; 475 border: 1px solid #eef2f7; 476 display: flex; 477 align-items: center; 478 justify-content: center; 479 color: #111827; 480 font-size: 18px; 481 } 482 483 .ds-stat__label { 484 font-size: 12px; 485 color: #6b7280; 486 font-weight: 700; 487 } 488 489 .ds-stat__value { 490 font-size: 18px; 491 color: #111827; 492 font-weight: 900; 493 margin-top: 2px; 494 } 495 496 .ds-features { 497 display: grid; 498 grid-template-columns: repeat(4, minmax(0, 1fr)); 499 gap: 12px; 500 } 501 502 .ds-feature { 503 border: 1px solid #eef2f7; 504 border-radius: 6px; 505 padding: 14px; 506 display: flex; 507 align-items: center; 508 justify-content: space-between; 509 flex-direction: column-reverse; 510 gap: 20px; 511 background: #fff; 512 transition: all 0.3s ease; 513 } 514 515 .ds-feature__actions, 516 .ds-feature__meta { 517 display: flex; 518 align-items: center; 519 justify-content: space-between; 520 width: 100%; 521 box-sizing: border-box; 522 } 523 524 .ds-feature__title { 525 font-weight: 800; 526 color: #111827; 527 margin: 0; 528 } 529 530 .ds-feature__link { 531 font-size: 12px; 532 font-weight: 500; 533 color: #626474; 534 outline: none; 535 text-decoration: none; 536 box-shadow: none; 537 &:hover { 538 color: #111827; 539 } 540 } 541 542 .ds-feature__desc { 543 color: #6b7280; 544 font-size: 12px; 545 line-height: 1.4; 546 } 547 548 .ds-widget-toggle { 549 flex-shrink: 0; 550 } 551 552 .ds-toggle-switch { 553 position: relative; 554 display: inline-block; 555 width: 44px; 556 height: 24px; 557 } 558 559 .ds-widget-checkbox { 560 opacity: 0; 561 width: 0; 562 height: 0; 563 } 564 565 .ds-toggle-slider { 566 position: absolute; 567 cursor: pointer; 568 top: 0; 569 left: 0; 570 right: 0; 571 bottom: 0; 572 background-color: #e5e7eb; 573 transition: .3s; 574 border-radius: 24px; 575 } 576 577 .ds-toggle-slider:before { 578 position: absolute; 579 content: ""; 580 height: 18px; 581 width: 18px; 582 left: 3px; 583 bottom: 3px; 584 background-color: white; 585 transition: .3s; 586 border-radius: 50%; 587 } 588 589 .ds-widget-checkbox:checked + .ds-toggle-slider { 590 background-color: #a855f7; 591 } 592 593 .ds-widget-checkbox:checked + .ds-toggle-slider:before { 594 transform: translateX(20px); 595 } 596 597 .ds-pro__badge { 598 display: inline-flex; 599 align-items: center; 600 gap: 8px; 601 color: #111827; 602 font-weight: 900; 603 font-size: 12px; 604 letter-spacing: 0.04em; 605 margin-bottom: 10px; 606 } 607 608 .ds-pro__badge .dashicons { 609 color: #a855f7; 610 } 611 612 .ds-pro__title { 613 font-size: 20px; 614 font-weight: 900; 615 color: #111827; 616 margin: 0 0 8px; 617 } 618 619 .ds-pro__text { 620 color: #6b7280; 621 font-size: 13px; 622 line-height: 1.5; 623 margin-bottom: 12px; 624 } 625 626 .ds-pro__list { 627 display: grid; 628 grid-template-columns: repeat(2, minmax(0, 1fr)); 629 gap: 10px 14px; 630 margin-top: 10px; 631 } 632 633 .ds-pro__item { 634 display: flex; 635 align-items: center; 636 gap: 8px; 637 color: #374151; 638 font-weight: 700; 639 font-size: 12px; 640 } 641 642 .ds-check { 643 width: 16px; 644 height: 16px; 645 border-radius: 999px; 646 background: rgba(168, 85, 247, 0.18); 647 border: 1px solid rgba(168, 85, 247, 0.25); 648 position: relative; 649 flex: 0 0 16px; 650 } 651 652 .ds-check:after { 653 content: ""; 654 position: absolute; 655 left: 5px; 656 top: 3px; 657 width: 5px; 658 height: 8px; 659 border-right: 2px solid #a855f7; 660 border-bottom: 2px solid #a855f7; 661 transform: rotate(45deg); 662 } 663 664 .ds-quick__list { 665 display: flex; 666 flex-direction: column; 667 gap: 10px; 668 } 669 670 .ds-quick__item { 671 display: flex; 672 align-items: center; 673 gap: 10px; 674 padding: 10px 12px; 675 border-radius: 6px; 676 border: 1px solid #eef2f7; 677 background: #fff; 678 color: #111827; 679 font-weight: 700; 680 cursor: pointer; 681 } 682 683 .ds-quick__item:hover { 684 background: #f9fafb; 685 border-color: #e5e7eb; 686 color: #111827; 687 } 688 689 .ds-quick__item--primary { 690 background: #a855f7; 691 color: #fff; 692 border-color: #a855f7; 693 } 694 695 .ds-quick__item--primary:hover { 696 background: #9333ea; 697 color: #fff; 698 border-color: #9333ea; 699 } 700 701 .ds-footer { 702 text-align: center; 703 padding: 20px 0; 704 border-top: 1px solid #f3f3f3; 705 background: #ffffff; 706 color: #6d7882; 707 font-size: 14px; 302 708 } 303 709 … … 319 725 } 320 726 727 /* Responsive Design */ 728 @media (max-width: 768px) { 729 .ds-grid { 730 grid-template-columns: 1fr; 731 } 732 733 .ds-stats { 734 grid-template-columns: 1fr; 735 } 736 737 .ds-pro__list { 738 grid-template-columns: 1fr; 739 } 740 741 .ds-hero__actions { 742 flex-direction: column; 743 align-items: stretch; 744 } 745 746 .ds-card__head--split { 747 flex-direction: column; 748 align-items: stretch; 749 gap: 8px; 750 } 751 } 752 321 753 /* Header */ 322 754 .widgets-header { … … 326 758 background: white; 327 759 padding: 30px 40px; 328 border-radius: 12px;760 border-radius: 6px; 329 761 box-shadow: 0 2px 10px rgba(0,0,0,0.08); 330 762 margin-bottom: 30px; … … 383 815 .widgets-section { 384 816 background: white; 385 border-radius: 12px;817 border-radius: 6px; 386 818 padding: 25px; 387 819 box-shadow: 0 2px 10px rgba(0,0,0,0.1); … … 433 865 .widget-card { 434 866 border: 2px solid #e1e1e1; 435 border-radius: 10px;867 border-radius: 6px; 436 868 padding: 20px; 437 869 transition: all 0.3s ease; … … 457 889 height: 42px; 458 890 background: #000000; 459 border-radius: 10px;891 border-radius: 6px; 460 892 display: flex; 461 893 align-items: center; … … 653 1085 $('.enable-all').on('click', function(e) { 654 1086 e.preventDefault(); 655 $('.widget-checkbox').prop('checked', true); 656 $('.header-save-btn, .form-actions .button-primary').addClass('button-pulse'); 1087 $('.ds-widget-checkbox').prop('checked', true); 1088 updateWidgetStates(); 1089 highlightSaveButton(); 657 1090 }); 658 1091 … … 660 1093 $('.disable-all').on('click', function(e) { 661 1094 e.preventDefault(); 662 $('.widget-checkbox').prop('checked', false); 663 $('.header-save-btn, .form-actions .button-primary').addClass('button-pulse'); 1095 $('.ds-widget-checkbox').prop('checked', false); 1096 updateWidgetStates(); 1097 highlightSaveButton(); 664 1098 }); 665 1099 666 1100 // Add visual feedback when checkboxes change 667 $('.widget-checkbox').on('change', function() { 668 $('.header-save-btn, .form-actions .button-primary').addClass('button-pulse'); 1101 $('.ds-widget-checkbox').on('change', function() { 1102 updateWidgetStates(); 1103 highlightSaveButton(); 669 1104 }); 670 671 // Remove pulse effect after a short time 672 setTimeout(function() { 673 $('.button-pulse').removeClass('button-pulse'); 674 }, 2000); 1105 1106 // Update widget visual states 1107 function updateWidgetStates() { 1108 $('.ds-widget-item').each(function() { 1109 var $item = $(this); 1110 var $checkbox = $item.find('.ds-widget-checkbox'); 1111 1112 if ($checkbox.prop('checked')) { 1113 $item.addClass('is-enabled'); 1114 } else { 1115 $item.removeClass('is-enabled'); 1116 } 1117 }); 1118 } 1119 1120 // Highlight save buttons when changes are made 1121 function highlightSaveButton() { 1122 $('.ds-btn--primary').addClass('ds-btn-pulse'); 1123 $('.ds-quick__item--primary').addClass('ds-btn-pulse'); 1124 1125 setTimeout(function() { 1126 $('.ds-btn-pulse').removeClass('ds-btn-pulse'); 1127 }, 2000); 1128 } 675 1129 676 1130 // Form submission handler 677 1131 $('.widgets-form').on('submit', function() { 678 $('. header-save-btn, .form-actions .button-primary').text('<?php _e('Saving...', 'daily-slider'); ?>').prop('disabled', true);679 $('. header-save-btn .dashicons').removeClass('dashicons-saved').addClass('dashicons-update');1132 $('.ds-btn--primary').text('<?php _e('Saving...', 'daily-slider'); ?>').prop('disabled', true); 1133 $('.ds-quick__item--primary').text('<?php _e('Saving...', 'daily-slider'); ?>').prop('disabled', true); 680 1134 }); 1135 1136 // Initialize widget states on page load 1137 updateWidgetStates(); 681 1138 }); 682 1139 </script> 683 1140 684 1141 <style> 685 . button-pulse {686 animation: pulse -button1s infinite;1142 .ds-btn-pulse { 1143 animation: pulse 1s infinite; 687 1144 } 688 1145 689 @keyframes pulse -button{690 0% { box-shadow: 0 0 0 0 rgba( 34, 113, 177, 0.7); }691 70% { box-shadow: 0 0 0 10px rgba( 34, 113, 177, 0); }692 100% { box-shadow: 0 0 0 0 rgba( 34, 113, 177, 0); }1146 @keyframes pulse { 1147 0% { box-shadow: 0 0 0 0 rgba(168, 85, 247, 0.7); } 1148 70% { box-shadow: 0 0 0 10px rgba(168, 85, 247, 0); } 1149 100% { box-shadow: 0 0 0 0 rgba(168, 85, 247, 0); } 693 1150 } 694 1151 </style> -
daily-slider/trunk/assets/css/widgets/testimonials-marquee.css
r3423716 r3445042 90 90 .testimonial-card { 91 91 background: #ffffff; 92 border-radius: 12px;92 border-radius: 6px; 93 93 padding: 24px; 94 94 border: 1px solid #f0f0f0; -
daily-slider/trunk/daily-slider.php
r3423731 r3445042 3 3 * Plugin Name: Daily Slider 4 4 * Description: Enhance Elementor with customizable hero sliders, review carousels, and portfolio showcases, featuring responsive design, animations, and hover effects. 5 * Version: 2. 5.05 * Version: 2.6.0 6 6 * Author: wpcoder75 7 7 * Author URI: https://github.com/asikwp75 … … 19 19 20 20 class DailySliderPlugin { 21 const VERSION = '2. 3.0';21 const VERSION = '2.6.0'; 22 22 const MINIMUM_ELEMENTOR_VERSION = '3.26.0'; 23 23 const MINIMUM_PHP_VERSION = '7.4'; -
daily-slider/trunk/readme.txt
r3423731 r3445042 4 4 Requires at least: 5.0 5 5 Tested up to: 6.9 6 Stable Tag: 2. 5.06 Stable Tag: 2.6.0 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 11 11 Professional Elementor slider addon with hero sliders, testimonial carousels, image galleries, and animated marquee widgets. Mobile-responsive with advanced customization options. 12 12 13 **[View Live Demos](https://xpospark.com/plugin/daily-slider/)** | **[Plugin Homepage](https://xpospark.com/plugin/daily-slider/)** 14 13 15 == Description == 14 16 … … 16 18 17 19 **Perfect for WordPress developers, designers, and business owners** who want to build engaging websites that convert visitors into customers. Our slider widgets are mobile-first, SEO-optimized, and performance-focused to ensure fast loading times across all devices. 20 21 ### 🎬 Live Demos 22 23 See Daily Slider in action! Explore our interactive demos to experience the full potential of each widget: 24 25 **[View All Demos](https://xpospark.com/plugin/daily-slider/)** | **[Pixel Hero Slider](https://xpospark.com/plugin/daily-slider/demo/pixel/)** | **[Review Carousel](https://xpospark.com/plugin/daily-slider/demo/review/)** | **[Eldorado Gallery](https://xpospark.com/plugin/daily-slider/demo/eldorado/)** | **[Marquee Slider](https://xpospark.com/plugin/daily-slider/demo/marquee-slider/)** | **[Testimonials Marquee](https://xpospark.com/plugin/daily-slider/demo/marquee-testimonials/)** 18 26 19 27 ### Why Choose Daily Slider? … … 27 35 **Regular Updates** - Compatible with latest WordPress and Elementor versions 28 36 29 30 31 37 ### Complete Slider Solution for WordPress: 32 38 … … 52 58 **Get started in minutes** with our intuitive drag-and-drop interface and transform your WordPress website into a conversion-focused, professional online presence. 53 59 60 **[Explore Live Demos →](https://xpospark.com/plugin/daily-slider/)** 61 54 62 == Premium Slider Widgets == 55 63 56 **Pixel Hero Slider** 64 **Explore each widget with live interactive demos:** 65 66 **Pixel Hero Slider** - **[View Demo](https://xpospark.com/plugin/daily-slider/demo/pixel/)** 57 67 - Full-screen responsive hero sections with parallax scrolling effects 58 68 - Custom call-to-action buttons with conversion tracking … … 60 70 - Perfect for landing pages, homepages, and sales pages 61 71 62 **Review & Testimonial Carousel** 72 **Review & Testimonial Carousel** - **[View Demo](https://xpospark.com/plugin/daily-slider/demo/review/)** 63 73 - Customer testimonial slider with star ratings and photos 64 74 - Social proof widgets to increase trust and conversions … … 66 76 - Ideal for service businesses and e-commerce stores 67 77 68 **Eldorado Image Gallery** 78 **Eldorado Image Gallery** - **[View Demo](https://xpospark.com/plugin/daily-slider/demo/eldorado/)** 69 79 - Portfolio and product image carousels with lightbox 70 80 - Masonry grid layouts and hover animation effects … … 72 82 - Great for photographers, designers, and online stores 73 83 74 **Marquee Slider (NEW)**84 **Marquee Slider** - **[View Demo](https://xpospark.com/plugin/daily-slider/demo/marquee-slider/)** 75 85 - Horizontal and vertical scrolling text/logo animations 76 86 - News ticker, brand showcase, and announcement bars … … 78 88 - Perfect for promotions, partnerships, and dynamic content 79 89 90 **Testimonials Marquee (NEW)** - **[View Demo](https://xpospark.com/plugin/daily-slider/demo/marquee-testimonials/)** 91 - Dedicated testimonial scrolling widget with smooth animations 92 - Star rating system with customizable colors and sizes 93 - User profile sections with author names and company details 94 - Comprehensive styling controls for cards, backgrounds, and hover effects 95 - Responsive width controls for optimal display on all devices 96 80 97 == Installation == 81 98 … … 109 126 110 127 == Changelog == 128 129 ### = 2.6.0 [22nd January 2026] = 130 131 * Improved: Widget Manager UI with enhanced layout featuring demo links and better visual organization. 132 * Improved: Welcome page dashboard with updated website links pointing to official plugin homepage. 133 * Improved: Quick Access section in dashboard with updated links to knowledge base and feature requests. 134 * Enhanced: Overall dashboard design with better spacing, alignment, and user-friendly interface improvements. 135 * Updated: Plugin homepage and demo URLs to https://xpospark.com/plugin/daily-slider/ for centralized documentation. 111 136 112 137 ### = 2.5.0 [19th December 2025] =
Note: See TracChangeset
for help on using the changeset viewer.