Changeset 3339544
- Timestamp:
- 08/05/2025 09:57:10 AM (8 months ago)
- Location:
- replypilot-ai
- Files:
-
- 38 added
- 1 deleted
- 9 edited
-
tags/1.8.0 (added)
-
tags/1.8.0/LICENSE.txt (added)
-
tags/1.8.0/admin.php (added)
-
tags/1.8.0/ai-chatbot.php (added)
-
tags/1.8.0/ai-generator.php (added)
-
tags/1.8.0/assets (added)
-
tags/1.8.0/assets/autoreply-ai.png (added)
-
tags/1.8.0/assets/chat.png (added)
-
tags/1.8.0/assets/css (added)
-
tags/1.8.0/assets/css/chatbot-style.css (added)
-
tags/1.8.0/assets/css/style.css (added)
-
tags/1.8.0/assets/fontawesome (added)
-
tags/1.8.0/assets/fontawesome/css (added)
-
tags/1.8.0/assets/fontawesome/css/all.min.css (added)
-
tags/1.8.0/assets/fontawesome/webfonts (added)
-
tags/1.8.0/assets/fontawesome/webfonts/fa-solid-900.ttf (added)
-
tags/1.8.0/assets/fontawesome/webfonts/fa-solid-900.woff2 (added)
-
tags/1.8.0/assets/js (added)
-
tags/1.8.0/assets/js/replypilot-ai.js (added)
-
tags/1.8.0/assets/js/script.js (added)
-
tags/1.8.0/assets/logo.png (added)
-
tags/1.8.0/assets/sales-logo.png (added)
-
tags/1.8.0/autoreply-comments.php (added)
-
tags/1.8.0/custom-handle-ai-reply.php (added)
-
tags/1.8.0/forum-functions (added)
-
tags/1.8.0/forum-functions/Asgaros-Forum.php (added)
-
tags/1.8.0/forum-functions/ForumWP.php (added)
-
tags/1.8.0/forum-functions/bbpress-auto-reply.php (added)
-
tags/1.8.0/forum-functions/buddypress-auto-reply.php (added)
-
tags/1.8.0/forum-functions/wpForo-Forum.php (added)
-
tags/1.8.0/includes (added)
-
tags/1.8.0/includes/functions.php (added)
-
tags/1.8.0/index.php (added)
-
tags/1.8.0/readme.txt (added)
-
tags/1.8.0/replypilot-ai.php (added)
-
trunk/admin.php (modified) (11 diffs)
-
trunk/ai-chatbot.php (modified) (11 diffs)
-
trunk/assets/autoreply-ai.png (added)
-
trunk/assets/css/chatbot-style.css (modified) (1 diff)
-
trunk/assets/css/style.css (modified) (7 diffs)
-
trunk/assets/icon-256x256.png (deleted)
-
trunk/assets/js/replypilot-ai.js (modified) (2 diffs)
-
trunk/assets/js/script.js (modified) (8 diffs)
-
trunk/assets/logo.png (added)
-
trunk/assets/sales-logo.png (added)
-
trunk/custom-handle-ai-reply.php (modified) (1 diff)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/replypilot-ai.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
replypilot-ai/trunk/admin.php
r3314646 r3339544 56 56 $replypilot_ai_chatbot_about_business = isset($_POST['replypilot_ai_chatbot_about_business']) ? wp_kses_post(wp_unslash($_POST['replypilot_ai_chatbot_about_business'])) : ''; 57 57 $replypilot_ai_chatbot_enable = isset($_POST['replypilot_ai_chatbot_enable']) ? 1 : 0; 58 $replypilot_name_email_enable = isset($_POST['replypilot_name_email_enable']) ? 1 : 0; 58 59 $replypilot_chatbot_header_msg = isset($_POST['replypilot_chatbot_header_msg']) ? sanitize_text_field(wp_unslash($_POST['replypilot_chatbot_header_msg'])) : 'Hello! Before we begin, could you please provide your name and email?'; 60 $replypilot_chatbot_first_msg = isset($_POST['replypilot_chatbot_first_msg']) ? sanitize_text_field(wp_unslash($_POST['replypilot_chatbot_first_msg'])) : 'Hello! How can I help you today?'; 61 $replypilot_chatbot_first_suggest = isset($_POST['replypilot_chatbot_first_suggest']) ? sanitize_text_field(wp_unslash($_POST['replypilot_chatbot_first_suggest'])) : ''; 59 62 60 63 … … 71 74 update_option('replypilot_ai_chatbot_about_business', $replypilot_ai_chatbot_about_business); 72 75 update_option('replypilot_ai_chatbot_enable', $replypilot_ai_chatbot_enable); 76 update_option('replypilot_name_email_enable', $replypilot_name_email_enable); 73 77 update_option('replypilot_chatbot_header_msg', $replypilot_chatbot_header_msg); 78 update_option('replypilot_chatbot_first_msg', $replypilot_chatbot_first_msg); 79 update_option('replypilot_chatbot_first_suggest', $replypilot_chatbot_first_suggest); 74 80 75 81 … … 93 99 $api_key = get_option('replypilot_ai_api_key', '1'); 94 100 $replypilot_ai_chatbot_enable = get_option('replypilot_ai_chatbot_enable', '1'); 101 $replypilot_name_email_enable = get_option('replypilot_name_email_enable', '1'); 95 102 $user_email = get_option('replypilot_ai_email'); 96 103 $user_key = substr(hash('sha256', $user_email), 0, 16); … … 110 117 $replypilot_ai_chatbot_about_business = get_option('replypilot_ai_chatbot_about_business', ''); 111 118 $replypilot_chatbot_header_msg = get_option('replypilot_chatbot_header_msg', 'Hello! Before we begin, could you please provide your name and email?'); 119 $replypilot_chatbot_first_msg = get_option('replypilot_chatbot_first_msg', 'Hello! How can I help you today?'); 120 $replypilot_chatbot_first_suggest = get_option('replypilot_chatbot_first_suggest',''); 112 121 113 122 // Get all users … … 140 149 <div class="rp-plugin-brand" bis_skin_checked="1"> 141 150 <div class="rp-plugin-icon" bis_skin_checked="1"> 142 <img src="<?php echo esc_url(plugins_url('assets/ icon-256x256.png', REPLYPILOT_AI_TBS_URL)); ?>" alt="ReplyPilot AI Logo" class="rp-logo">151 <img src="<?php echo esc_url(plugins_url('assets/logo.png', REPLYPILOT_AI_TBS_URL)); ?>" alt="ReplyPilot AI Logo" class="rp-logo"> 143 152 144 153 … … 189 198 </a> 190 199 </li> 200 201 <li class="rp-nav-item"> 202 <a href="#" class="rp-nav-link rp-nav-tab" data-tab="general5"> 203 <i class="fas fa-question-circle"></i> 204 <span>About</span> 205 </a> 206 </li> 191 207 </ul> 192 208 </aside> … … 363 379 364 380 </div> 365 <div id="Chatbot" class="rp-tab-content active">381 <div id="Chatbot" class="rp-tab-content"> 366 382 <div class="rp-content-header" bis_skin_checked="1"> 367 383 <div bis_skin_checked="1"> … … 387 403 </div> 388 404 <div class="form-group" bis_skin_checked="1"> 389 <label class="form-label">Enable ChatBot </label> 405 390 406 <div bis_skin_checked="1"> 407 <label class="form-label">Enable ChatBot </label> 391 408 <div class="rp-toggle-slider-div" bis_skin_checked="1"> 392 409 <label class="toggle-switch"> … … 398 415 <br> 399 416 <div class="form-group" bis_skin_checked="1"> 417 <label class="form-label">Chatbot first Message</label> 418 <input type="text" class="form-control" name="replypilot_chatbot_first_msg" value="<?php echo esc_html($replypilot_chatbot_first_msg) ?>" placeholder="Enter Chatbot First Message"> 419 </div> 420 <label class="form-label">Getting Started Suggestions</label> 421 <div class="rp-tag-container"> 422 <div id="rp-tags"></div> 423 <textarea id="rp-tag-input" placeholder="Type a tag and press Enter"></textarea> 424 </div> 425 <input type="hidden" name="replypilot_chatbot_first_suggest" value="<?php echo esc_html($replypilot_chatbot_first_suggest) ?>" id="rp-hidden-suggestion-tags"> 426 427 <label class="form-label">Name/Email Collection Enable</label> 428 <div class="rp-toggle-slider-div" bis_skin_checked="1"> 429 <label class="toggle-switch"> 430 <input type="checkbox" id="replypilot_ai_chatbot_enable" name="replypilot_name_email_enable" value="1" <?php checked(1, $replypilot_name_email_enable); ?>> 431 <span class="rp-toggle-slider"></span> 432 </label> 433 <span><?php echo esc_html($replypilot_name_email_enable ? 'Enabled' : 'Disabled'); ?> </span> 434 </div> 435 436 <br> 437 <div class="form-group" bis_skin_checked="1"> 400 438 <label class="form-label">Chatbot Header Message</label> 401 439 <input type="text" class="form-control" name="replypilot_chatbot_header_msg" value="<?php echo esc_html($replypilot_chatbot_header_msg) ?>" placeholder="Enter Chatbot Header Message"> 402 403 440 </div> 404 441 … … 648 685 </div> 649 686 <div style="padding: 20px;"> 650 <p>For support, please contact our team at support@techbeeps.com</p> 687 <a href="https://wordpress.org/support/plugin/replypilot-ai/" target="_blank" class="rp-about-button rp-about-button-primary"> 688 <span class="dashicons dashicons-email-alt"></span> Contact Support 689 </a> 651 690 </div> 652 691 </div> … … 656 695 </div> 657 696 658 697 <div id="general5" class="rp-tab-content"> 698 <div class="rp-content-header" bis_skin_checked="1"> 699 <div bis_skin_checked="1"> 700 <h1 class="rp-page-title">Settings</h1> 701 <div class="rp-breadcrumbs" bis_skin_checked="1"> 702 <a href="#">ReplyPilot AI</a> 703 704 <span>/</span> 705 <span>Support</span> 706 </div> 707 </div> 708 709 </div> 710 <div class=""> 711 <div class="rp-about-about-hero"> 712 <div class="rp-about-about-hero-content"> 713 <img src="<?php echo esc_url(REPLYPILOT_AI_TBS_URL_PLUGIN . 'assets/logo.png'); ?>" alt="AutoReply AI" class="rp-about-logo"> 714 <h1>ReplyPilot AI<span>v<?php echo esc_html(REPLYPILOT_AI_TBS); ?></span></h1> 715 <p class="rp-about-tagline"> ReplyPilot AI is a powerful WordPress plugin that auto-generates smart, context-aware replies to user comments. Now with a built-in AI chatbot, it helps boost engagement and streamline support across WordPress, forums, and communities.</p> 716 717 </div> 718 </div> 719 720 <div class="rp-about-about-container"> 721 722 <section class="rp-about-about-section"> 723 <div class="rp-about-section-header"> 724 <h2>More From Us</h2> 725 <p>Explore our other powerful plugins designed to grow your business and accelerate success.</p> 726 </div> 727 <div class="rp-about-plugins-grid"> 728 <div class="rp-about-plugin-card"> 729 <img src="<?php echo esc_url(REPLYPILOT_AI_TBS_URL_PLUGIN . 'assets/sales-logo.png'); ?>" alt="ChatBot Pro"> 730 <div class="rp-about-plugin-content"> 731 <h3>Sales Analytics for WooCommerce</h3> 732 <p>Sales Analytics for WooCommerce is a powerful plugin designed to generate custom analytics reports for WooCommerce stores. It provides detailed insights into sales, revenue, product performance, and now introduces AI-powered analysis for smarter decision-making.</p> 733 <div class="rp-about-plugin-footer"> 734 <a href="<?php echo esc_url(admin_url('plugin-install.php?tab=plugin-information&plugin=sales-analytics-for-woocommerce&TB_iframe=true&width=600&height=550')); ?>" class="thickbox salesafw-ab-button salesafw-ab-button-secondary">Install</a> 735 <div class="rp-about-rating"> 736 </div> 737 </div> 738 </div> 739 </div> 740 <div class="rp-about-plugin-card"> 741 <img src="<?php echo esc_url(REPLYPILOT_AI_TBS_URL_PLUGIN . 'assets/autoreply-ai.png'); ?>" alt="SEO Optimizer"> 742 <div class="rp-about-plugin-content"> 743 <h3>AutoReply AI</h3> 744 <p>AutoReply AI is an intelligent WordPress plugin that automatically generates human-like, context-aware replies to user comments. Powered by advanced AI, it analyzes comment intent and context to deliver smart, personalized responses—perfect for blogs, forums, and community sites.</p> 745 <div class="rp-about-plugin-footer"> 746 <a href="<?php echo esc_url(admin_url('plugin-install.php?tab=plugin-information&plugin=autoreply-ai&TB_iframe=true&width=600&height=550')); ?>" class="thickbox salesafw-ab-button salesafw-ab-button-secondary">Install</a> 747 <div class="rp-about-rating"> 748 </div> 749 </div> 750 </div> 751 </div> 752 </div> 753 </section> 754 755 <section class="rp-about-about-section rp-about-about-cta"> 756 <div class="rp-about-cta-content"> 757 <h2>Need Help or Have Suggestions?</h2> 758 <p>We're here to help you get the most out of AutoReply AI</p> 759 <div class="rp-about-cta-buttons"> 760 <a href="https://wordpress.org/support/plugin/replypilot-ai/" target="_blank" class="rp-about-button rp-about-button-primary"> 761 <span class="dashicons dashicons-email-alt"></span> Contact Support 762 </a> 763 <a href="https://wordpress.org/support/plugin/replypilot-ai/reviews/#new-post" target="_blank" class="rp-about-button rp-about-button-secondary"> 764 <span class="dashicons dashicons-star-filled"></span> Leave a Review 765 </a> 766 </div> 767 </div> 768 </section> 769 <section class="rp-about-about-section rp-about-about-footer "> 770 <div class="rp-about-footer-content"> 771 <p>ReplyPilot AI v<?php echo esc_html( REPLYPILOT_AI_TBS); ?> - Developed by <a href="https://techbeeps.com">Techbeeps</a></p> 772 </div> 773 </section> 774 </div> 775 </div> 776 777 </div> 659 778 660 779 </main> -
replypilot-ai/trunk/ai-chatbot.php
r3335155 r3339544 56 56 function replypilot_chatbot_save_user_data() 57 57 { 58 $replypilot_chatbot_first_msg = get_option('replypilot_chatbot_first_msg', 'Hello! How can I help you today?'); 59 $replypilot_chatbot_first_suggest = get_option('replypilot_chatbot_first_suggest',''); 60 58 61 global $wpdb; 59 62 // Verify nonce … … 90 93 'conversation_id' => $conversation_id, 91 94 'message_type' => 'bot', 92 'content' => 'Hello! How can I help you today?',95 'content' => $replypilot_chatbot_first_msg, 93 96 'sent_at' => current_time('mysql') 94 97 )); … … 98 101 wp_send_json_success(array( 99 102 'conversation_id' => $conversation_id, 100 'welcome_message' => 'Hello! How can I help you today?' 103 'welcome_message' => $replypilot_chatbot_first_msg, 104 'suggest'=> explode(",", $replypilot_chatbot_first_suggest) 101 105 )); 102 106 } … … 141 145 // Prepare the conversation context 142 146 $context = [ 143 //2. suggestes: Related topics only if the response doesn\'t fully cover them or if a logical or natural next step is helpful.147 //2. suggestes: Related topics only if the response doesn\'t fully cover them or if a logical or natural next step is helpful. 144 148 [ 145 149 'parts' => [ 146 150 [ 147 'text' => 'You must return ONLY valid JSON. Do not include markdown, explanations, or text before/after the JSON. Here is the format:148 { 149 "chatresponse": "This is the response to the user\'s question .",151 'text' => 'You must return ONLY valid JSON. Do not include markdown, explanations, or text before/after the JSON. Here is the format: 152 { 153 "chatresponse": "This is the response to the user\'s question as short and highlight some focus word.,**All link must be return in ancher :<a href="url" target="_blank">?</a>**", 150 154 "suggests": ["Follow-up suggestion 1","Follow-up suggestion 2","Follow-up suggestion 3"] 151 155 } 152 156 instructions: 153 157 1. chatresponse: Provide a concise, accurate response to the user\'s question. 154 2. suggests:Relevant follow-up questions or next-step topics that logically extend the conversation.155 3. Follow-up questions must be 2– 6words long.158 2. suggests:Relevant follow-up questions or What the user wants to do next Type for relevant topics, next-step topics that logically extend the conversation. 159 3. Follow-up questions must be 2–4 words long. 156 160 Use this exact structure. Respond to the user\'s message now.' 157 161 ] … … 161 165 [ 162 166 'parts' => [ 163 ['text' => 'You are a helpful AI assistant for my personal website (' .esc_url( site_url() ).'). Communicate in a friendly, professional, and concise tone. Provide clear, accurate, and relevant answers to assist visitors efficiently. Do not provide code or respond to requests involving personal work.' . $replypilot_chatbot_tone ?? '']167 ['text' => 'You are a helpful AI assistant for my personal website (' . esc_url(site_url()) . '). Communicate in a friendly, professional, and concise tone. Provide clear, accurate, and relevant answers to assist visitors efficiently. Do not provide code or respond to requests involving personal work.' . $replypilot_chatbot_tone ?? ''] 164 168 ], 165 169 'role' => 'user' … … 279 283 { 280 284 $replypilot_ai_chatbot_enable = get_option('replypilot_ai_chatbot_enable', '1'); 285 $replypilot_name_email_enable = (bool)get_option('replypilot_name_email_enable', '1') ? true : false; 281 286 282 287 if ($replypilot_ai_chatbot_enable) { … … 285 290 plugins_url('assets/css/chatbot-style.css', REPLYPILOT_AI_TBS_URL), 286 291 array(), 287 filemtime(plugin_dir_path(REPLYPILOT_AI_TBS_URL) . 'assets/css/chatbot-style.css') 292 filemtime(plugin_dir_path(REPLYPILOT_AI_TBS_URL) . 'assets/css/chatbot-style.css')+21 288 293 ); 289 294 … … 298 303 wp_localize_script('replypilot_ai-chatbot-script', 'replypilotChatbot', array( 299 304 'ajaxurl' => admin_url('admin-ajax.php'), 300 'nonce' => wp_create_nonce('replypilot_ai_chatbot_nonce') 305 'nonce' => wp_create_nonce('replypilot_ai_chatbot_nonce'), 306 'user_data_collection' => $replypilot_name_email_enable 301 307 )); 302 308 } … … 473 479 add_action('wp_ajax_nopriv_replypilot_get_chatbot_messages', 'replypilot_get_chatbot_messages_callback'); 474 480 475 function replypilot_get_chatbot_messages_callback() { 481 function replypilot_get_chatbot_messages_callback() 482 { 476 483 check_ajax_referer('replypilot_ai_chatbot_nonce', 'nonce'); 477 484 … … 486 493 ); 487 494 // Escape output 488 $escaped_messages = array_map(function ($message) {495 $escaped_messages = array_map(function ($message) { 489 496 return [ 490 497 'message_type' => esc_html($message['message_type']), … … 496 503 wp_send_json_success(['messages' => $escaped_messages]); 497 504 } 498 -
replypilot-ai/trunk/assets/css/chatbot-style.css
r3322100 r3339544 151 151 height: 20px; 152 152 } 153 153 .replypilot-message-content a{ 154 text-decoration: none; 155 color: #4285f4; 156 } 154 157 .replypilot-typing-dot { 155 158 display: inline-block; -
replypilot-ai/trunk/assets/css/style.css
r3314646 r3339544 18 18 } 19 19 20 #replypilot_ai_chatbot_tone,#replypilot_ai_chatbot_about_business{ 21 max-width: 100%; 22 } 23 #wpbody-content{ 20 #replypilot_ai_chatbot_tone, 21 #replypilot_ai_chatbot_about_business { 22 max-width: 100%; 23 } 24 25 #wpbody-content { 24 26 display: flex; 25 27 flex-wrap: wrap; 26 28 } 29 27 30 .rp-plugin-admin { 28 31 display: flex; … … 57 60 } 58 61 59 .rp-plugin-icon>img {62 .rp-plugin-icon>img { 60 63 width: 80px; 61 64 height: 80px; … … 339 342 color: #f50b0b; 340 343 } 344 341 345 .rp-pricing-container { 342 display: flex; 343 344 justify-content: center; 345 gap: 10px; 346 max-width: 1200px; 347 margin: 0 auto; 348 } 349 350 .rp-pricing-card { 351 background: var(--rp-white); 352 border-radius: 10px; 353 overflow: hidden; 354 box-shadow: var(--rp-shadow); 355 width: 100%; 356 max-width: 300px; 357 transition: var(--rp-transition); 358 position: relative; 359 } 360 361 .rp-pricing-card:hover { 362 transform: translateY(-10px); 363 box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15); 364 } 365 366 .rp-pricing-header { 367 padding: 1rem; 368 text-align: center; 369 background: linear-gradient(135deg, var(--rp-primary), #6a5acd); 370 color: var(--rp-white); 371 position: relative; 372 } 373 374 .popular-tag { 375 position: absolute; 376 top: 0; 377 right: 2rem; 378 background: var(--rp-accent-color); 379 color: var(--rp-white); 380 padding: 0.5rem 1.5rem; 381 font-size: 0.8rem; 382 font-weight: bold; 383 text-transform: uppercase; 384 border-bottom-left-radius: 5px; 385 border-bottom-right-radius: 5px; 386 } 387 388 .rp-pricing-title { 389 font-size: 2.0rem; 390 margin: 0; 391 margin-top: 0.5rem; 392 font-weight: 600; 393 color: #fba724; 394 } 395 396 .rp-pricing-price { 397 font-size: 3rem; 398 font-weight: 700; 399 margin: 0; 400 } 401 402 .rp-pricing-price span { 403 font-size: 1rem; 404 font-weight: 400; 405 } 406 407 .rp-pricing-period { 408 font-size: 0.9rem; 409 opacity: 0.8; 410 margin:0; 411 } 412 413 .rp-pricing-features { 414 padding: 1rem; 415 } 416 417 .rp-feature-list { 418 list-style: none; 419 margin-bottom: 2rem; 420 } 421 422 .rp-feature-list li { 423 padding: 0.8rem 0; 424 border-bottom: 1px solid #eee; 425 display: flex; 426 font-size:12px; 427 align-items: center; 428 } 429 430 .rp-feature-list li:last-child { 431 border-bottom: none; 432 } 433 434 .rp-feature-list li::before { 435 content: "✓"; 436 color: var(--rp-primary); 437 font-weight: bold; 438 margin-right: 0.5rem; 439 } 440 441 .rp-feature-list .not-included { 442 opacity: 0.5; 443 } 444 445 .rp-feature-list .not-included::before { 446 content: "✕"; 447 color: #ff4d4d; 448 } 449 450 .rp-pricing-button { 451 display: block; 452 width: 100%; 453 padding: 10px 0; 454 border: none; 455 background: var(--rp-primary); 456 color: var(--rp-white); 457 font-size: 1rem; 458 font-weight: 600; 459 border-radius: 5px; 460 cursor: pointer; 461 transition: var(--rp-transition); 462 text-align: center; 463 text-decoration: none; 464 } 465 466 .rp-pricing-button:hover { 467 background: #3a5bed; 468 transform: translateY(-2px); 469 color:#ff7043; 470 } 471 472 .popular .rp-pricing-button { 473 background: var(--rp-accent-color); 474 } 475 476 .popular .rp-pricing-button:hover { 477 background: #f45c2c; 478 color:#3a5bed; 479 } 480 .save-popup-rp{ 346 display: flex; 347 348 justify-content: center; 349 gap: 10px; 350 max-width: 1200px; 351 margin: 0 auto; 352 } 353 354 .rp-pricing-card { 355 background: var(--rp-white); 356 border-radius: 10px; 357 overflow: hidden; 358 box-shadow: var(--rp-shadow); 359 width: 100%; 360 max-width: 300px; 361 transition: var(--rp-transition); 362 position: relative; 363 } 364 365 .rp-pricing-card:hover { 366 transform: translateY(-10px); 367 box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15); 368 } 369 370 .rp-pricing-header { 371 padding: 1rem; 372 text-align: center; 373 background: linear-gradient(135deg, var(--rp-primary), #6a5acd); 374 color: var(--rp-white); 375 position: relative; 376 } 377 378 .popular-tag { 379 position: absolute; 380 top: 0; 381 right: 2rem; 382 background: var(--rp-accent-color); 383 color: var(--rp-white); 384 padding: 0.5rem 1.5rem; 385 font-size: 0.8rem; 386 font-weight: bold; 387 text-transform: uppercase; 388 border-bottom-left-radius: 5px; 389 border-bottom-right-radius: 5px; 390 } 391 392 .rp-pricing-title { 393 font-size: 2.0rem; 394 margin: 0; 395 margin-top: 0.5rem; 396 font-weight: 600; 397 color: #fba724; 398 } 399 400 .rp-pricing-price { 401 font-size: 3rem; 402 font-weight: 700; 403 margin: 0; 404 } 405 406 .rp-pricing-price span { 407 font-size: 1rem; 408 font-weight: 400; 409 } 410 411 .rp-pricing-period { 412 font-size: 0.9rem; 413 opacity: 0.8; 414 margin: 0; 415 } 416 417 418 .rp-feature-list { 419 list-style: none; 420 margin-bottom: 2rem; 421 } 422 423 .rp-feature-list li { 424 padding: 0.8rem 0; 425 border-bottom: 1px solid #eee; 426 display: flex; 427 font-size: 12px; 428 align-items: center; 429 } 430 431 .rp-feature-list li:last-child { 432 border-bottom: none; 433 } 434 435 .rp-feature-list li::before { 436 content: "✓"; 437 color: var(--rp-primary); 438 font-weight: bold; 439 margin-right: 0.5rem; 440 } 441 442 .rp-feature-list .not-included { 443 opacity: 0.5; 444 } 445 446 .rp-feature-list .not-included::before { 447 content: "✕"; 448 color: #ff4d4d; 449 } 450 451 .rp-pricing-button { 452 display: block; 453 width: 100%; 454 padding: 10px 0; 455 border: none; 456 background: var(--rp-primary); 457 color: var(--rp-white); 458 font-size: 1rem; 459 font-weight: 600; 460 border-radius: 5px; 461 cursor: pointer; 462 transition: var(--rp-transition); 463 text-align: center; 464 text-decoration: none; 465 } 466 467 .rp-pricing-button:hover { 468 background: #3a5bed; 469 transform: translateY(-2px); 470 color: #ff7043; 471 } 472 473 .popular .rp-pricing-button { 474 background: var(--rp-accent-color); 475 } 476 477 .popular .rp-pricing-button:hover { 478 background: #f45c2c; 479 color: #3a5bed; 480 } 481 482 .save-popup-rp { 481 483 position: absolute !important; 482 484 top: 100px; … … 487 489 @media (max-width: 768px) { 488 490 .rp-pricing-container { 489 flex-direction: column; 490 align-items: center; 491 } 492 493 .rp-pricing-card { 494 max-width: 100%; 495 } 491 flex-direction: column; 492 align-items: center; 493 } 494 495 .rp-pricing-card { 496 max-width: 100%; 497 } 498 496 499 .rp-plugin-admin { 497 flex-direction: column;500 flex-direction: column; 498 501 } 499 502 500 503 .rp-sidebar { 501 width: 100%;502 height: auto;503 padding: 16px;504 border-right: none;505 border-bottom: 1px solid var(--rp-border);504 width: 100%; 505 height: auto; 506 padding: 16px; 507 border-right: none; 508 border-bottom: 1px solid var(--rp-border); 506 509 } 507 510 508 511 .rp-sidebar-header { 509 padding: 0 0 16px;512 padding: 0 0 16px; 510 513 } 511 514 512 515 .rp-nav-menu { 513 display: flex;514 overflow-x: auto;515 padding-bottom: 8px;516 display: flex; 517 overflow-x: auto; 518 padding-bottom: 8px; 516 519 } 517 520 518 521 .rp-nav-item { 519 flex: 0 0 auto;520 margin-bottom: 0;521 margin-right: 8px;522 flex: 0 0 auto; 523 margin-bottom: 0; 524 margin-right: 8px; 522 525 } 523 526 524 527 .rp-main-content { 525 padding: 24px;526 } 527 } 528 529 530 531 .chatbot-conversations {528 padding: 24px; 529 } 530 } 531 532 533 534 .chatbot-conversations { 532 535 margin: 0 auto; 533 536 padding-right: 20px; 534 537 } 535 .chatbot-conversations h1{ 538 539 .chatbot-conversations h1 { 536 540 line-height: 3; 537 541 } … … 540 544 /* Conversation Detail View */ 541 545 .chatbot-admin-conversation { 542 background: #fff;543 border-radius: 12px;544 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);545 margin-bottom: 30px;546 overflow: hidden;547 padding: 10px 20px;548 width: 900px;549 margin-top: 20px;546 background: #fff; 547 border-radius: 12px; 548 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); 549 margin-bottom: 30px; 550 overflow: hidden; 551 padding: 10px 20px; 552 width: 900px; 553 margin-top: 20px; 550 554 551 555 } 552 556 553 557 .chatbot-admin-conversation-header { 554 background: linear-gradient(135deg, #4285f4, #34a853);555 color: white;556 padding: 18px 25px;557 display: flex;558 justify-content: space-between;559 align-items: center;558 background: linear-gradient(135deg, #4285f4, #34a853); 559 color: white; 560 padding: 18px 25px; 561 display: flex; 562 justify-content: space-between; 563 align-items: center; 560 564 } 561 565 562 566 .chatbot-admin-conversation-header h2 { 563 margin: 0;564 font-size: 18px;565 font-weight: 500;567 margin: 0; 568 font-size: 18px; 569 font-weight: 500; 566 570 } 567 571 568 572 .chatbot-admin-conversation-meta { 569 background: #f8fafc;570 padding: 15px 25px;571 border-bottom: 1px solid #e2e8f0;572 font-size: 13px;573 color: #64748b;574 display: flex;575 justify-content: space-between;573 background: #f8fafc; 574 padding: 15px 25px; 575 border-bottom: 1px solid #e2e8f0; 576 font-size: 13px; 577 color: #64748b; 578 display: flex; 579 justify-content: space-between; 576 580 } 577 581 578 582 /* Chat Messages Container */ 579 583 .chatbot-admin-messages { 580 padding: 25px;581 background: #f5f7fb;582 min-height: 500px;583 max-height: 60vh;584 overflow-y: auto;585 display: flex;586 flex-direction: column;584 padding: 25px; 585 background: #f5f7fb; 586 min-height: 500px; 587 max-height: 60vh; 588 overflow-y: auto; 589 display: flex; 590 flex-direction: column; 587 591 588 592 } … … 590 594 /* Message Bubbles */ 591 595 .chatbot-admin-message { 592 max-width: 75%;593 position: relative;594 animation: fadeIn 0.3s ease;596 max-width: 75%; 597 position: relative; 598 animation: fadeIn 0.3s ease; 595 599 } 596 600 597 601 @keyframes fadeIn { 598 from { opacity: 0; transform: translateY(8px); } 599 to { opacity: 1; transform: translateY(0); } 602 from { 603 opacity: 0; 604 transform: translateY(8px); 605 } 606 607 to { 608 opacity: 1; 609 transform: translateY(0); 610 } 600 611 } 601 612 602 613 .chatbot-admin-message.user { 603 margin-right: auto;614 margin-right: auto; 604 615 } 605 616 606 617 .chatbot-admin-message.bot { 607 608 margin-left: auto;618 619 margin-left: auto; 609 620 } 610 621 611 622 .message-bubble { 612 padding: 14px 18px;613 border-radius: 18px;614 line-height: 1.5;615 word-wrap: break-word;616 position: relative;617 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);623 padding: 14px 18px; 624 border-radius: 18px; 625 line-height: 1.5; 626 word-wrap: break-word; 627 position: relative; 628 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); 618 629 } 619 630 620 631 .chatbot-admin-message.user.message-bubble { 621 622 background: white;623 color: #334155;624 border: 1px solid #e2e8f0;625 border-bottom-left-radius: 4px;632 633 background: white; 634 color: #334155; 635 border: 1px solid #e2e8f0; 636 border-bottom-left-radius: 4px; 626 637 } 627 638 628 639 .chatbot-admin-message.bot.message-bubble { 629 background: #4285f4;630 color: white;631 border-bottom-right-radius: 4px;640 background: #4285f4; 641 color: white; 642 border-bottom-right-radius: 4px; 632 643 } 633 644 634 645 .message-time { 635 font-size: 11px;636 margin-top: 6px;637 display: block;638 text-align: right;639 opacity: 0.8;646 font-size: 11px; 647 margin-top: 6px; 648 display: block; 649 text-align: right; 650 opacity: 0.8; 640 651 } 641 652 642 653 .chatbot-admin-message.user .message-time { 643 color: #94a3b8;654 color: #94a3b8; 644 655 } 645 656 646 657 .chatbot-admin-message.bot .message-time { 647 color: rgba(255, 255, 255, 0.7);658 color: rgba(255, 255, 255, 0.7); 648 659 } 649 660 650 661 /* Back Link */ 651 662 .back-to-conversations { 652 display: inline-flex;653 align-items: center;654 padding: 10px 15px;655 background: #f1f5f9;656 border-radius: 6px;657 color: #334155;658 text-decoration: none;659 margin: 20px 0;660 transition: all 0.2s;663 display: inline-flex; 664 align-items: center; 665 padding: 10px 15px; 666 background: #f1f5f9; 667 border-radius: 6px; 668 color: #334155; 669 text-decoration: none; 670 margin: 20px 0; 671 transition: all 0.2s; 661 672 } 662 673 663 674 .back-to-conversations:hover { 664 background: #e2e8f0;665 color: #1e40af;675 background: #e2e8f0; 676 color: #1e40af; 666 677 } 667 678 … … 670 681 /* Responsive Design */ 671 682 @media (max-width: 1024px) { 672 673 .chatbot-admin-messages { 674 padding: 15px; 675 min-height: 400px; 676 } 677 678 .message-bubble { 679 padding: 12px 16px; 680 } 681 .chatbot-admin-conversation{ 682 width: 100%; 683 } 683 684 .chatbot-admin-messages { 685 padding: 15px; 686 min-height: 400px; 687 } 688 689 .message-bubble { 690 padding: 12px 16px; 691 } 692 693 .chatbot-admin-conversation { 694 width: 100%; 695 } 684 696 } 685 697 686 698 @media (max-width: 782px) { 687 .chatbot-admin-conversation-header, 688 .chatbot-admin-conversation-meta { 689 flex-direction: column; 690 gap: 8px; 691 } 692 693 .chatbot-admin-message { 694 max-width: 85%; 695 } 696 .chatbot-admin-conversation{ 697 width: auto; 698 } 699 700 .chatbot-admin-conversation-header, 701 .chatbot-admin-conversation-meta { 702 flex-direction: column; 703 gap: 8px; 704 } 705 706 .chatbot-admin-message { 707 max-width: 85%; 708 } 709 710 .chatbot-admin-conversation { 711 width: auto; 712 } 699 713 } 700 714 701 715 .replypilot-table { 702 width: 100%;703 border-collapse: separate;704 border-spacing: 0;705 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;706 font-size: 14px;707 color: #333;708 background-color: #fff;709 border: 1px solid #e0e0e0;710 border-radius: 8px;711 overflow: hidden;712 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);713 border: none !important;714 padding: 20px;716 width: 100%; 717 border-collapse: separate; 718 border-spacing: 0; 719 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 720 font-size: 14px; 721 color: #333; 722 background-color: #fff; 723 border: 1px solid #e0e0e0; 724 border-radius: 8px; 725 overflow: hidden; 726 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); 727 border: none !important; 728 padding: 20px; 715 729 } 716 730 717 731 .replypilot-table thead { 718 background: linear-gradient(to right, #f7f7f7, #f0f0f0);732 background: linear-gradient(to right, #f7f7f7, #f0f0f0); 719 733 } 720 734 721 735 .replypilot-table thead th { 722 padding: 14px 18px;723 text-align: left;724 font-weight: 600;725 color: #444;726 border-bottom: 1px solid #ddd;727 text-transform: uppercase;728 font-size: 13px;729 letter-spacing: 0.6px;736 padding: 14px 18px; 737 text-align: left; 738 font-weight: 600; 739 color: #444; 740 border-bottom: 1px solid #ddd; 741 text-transform: uppercase; 742 font-size: 13px; 743 letter-spacing: 0.6px; 730 744 } 731 745 732 746 .replypilot-table tbody tr { 733 background-color: #fff;734 transition: background-color 0.3s ease;747 background-color: #fff; 748 transition: background-color 0.3s ease; 735 749 } 736 750 737 751 .replypilot-table tbody tr:hover { 738 background-color: #f9fbfc;752 background-color: #f9fbfc; 739 753 } 740 754 741 755 .replypilot-table td { 742 padding: 14px 18px;743 border-bottom: 1px solid #eee;744 vertical-align: middle;756 padding: 14px 18px; 757 border-bottom: 1px solid #eee; 758 vertical-align: middle; 745 759 } 746 760 747 761 .replypilot-table tbody tr:last-child td { 748 border-bottom: none;762 border-bottom: none; 749 763 } 750 764 751 765 .replypilot-table a { 752 color: #0066cc;753 font-weight: 500;754 text-decoration: none;755 transition: color 0.2s;766 color: #0066cc; 767 font-weight: 500; 768 text-decoration: none; 769 transition: color 0.2s; 756 770 } 757 771 758 772 .replypilot-table a:hover { 759 color: #004a99;760 text-decoration: underline;773 color: #004a99; 774 text-decoration: underline; 761 775 } 762 776 763 777 /* Optional: Highlight Action buttons with subtle UI */ 764 778 .replypilot-table td:last-child a { 765 background-color: #2271b1;766 padding: 6px 12px;767 border-radius: 4px;768 font-size: 13px;769 font-weight: 500;770 color: #fff;779 background-color: #2271b1; 780 padding: 6px 12px; 781 border-radius: 4px; 782 font-size: 13px; 783 font-weight: 500; 784 color: #fff; 771 785 } 772 786 773 787 .replypilot-table td:last-child a:hover { 774 background-color: #024276; 775 } 788 background-color: #024276; 789 } 790 776 791 /* Simple Pagination Styles */ 777 792 .replypilot-pagination { 778 text-align: center;779 margin: 20px 0;780 font-size: 14px;781 } 782 783 .replypilot-pagination a, 793 text-align: center; 794 margin: 20px 0; 795 font-size: 14px; 796 } 797 798 .replypilot-pagination a, 784 799 .replypilot-pagination span { 785 display: inline-block;786 padding: 5px 10px;787 margin: 0 2px;788 border: 1px solid #ddd;789 background: #f7f7f7;790 text-decoration: none;791 color: #555;800 display: inline-block; 801 padding: 5px 10px; 802 margin: 0 2px; 803 border: 1px solid #ddd; 804 background: #f7f7f7; 805 text-decoration: none; 806 color: #555; 792 807 } 793 808 794 809 .replypilot-pagination a:hover { 795 background: #e0e0e0;810 background: #e0e0e0; 796 811 } 797 812 798 813 .replypilot-pagination .current { 799 background: #0073aa;800 color: white;801 border-color: #0073aa;814 background: #0073aa; 815 color: white; 816 border-color: #0073aa; 802 817 } 803 818 804 819 /* Delete Button Styling */ 805 820 .delete-conversation { 806 color: #d63638 ; 807 padding: 5px 17px; 808 margin-left: 8px; 809 border-color: #d63638; 810 background: #ffa4a4; 811 border-radius: 4px; 812 border-width: 0px; 813 font-size: 15px; 814 cursor: pointer; 815 } 821 color: #d63638; 822 padding: 5px 17px; 823 margin-left: 8px; 824 border-color: #d63638; 825 background: #ffa4a4; 826 border-radius: 4px; 827 border-width: 0px; 828 font-size: 15px; 829 cursor: pointer; 830 } 831 816 832 .delete-conversation:hover { 817 background: #d63638; 818 color: white; 819 border-color: #d63638; 820 } 833 background: #d63638; 834 color: white; 835 border-color: #d63638; 836 } 837 838 .rp-tag-container { 839 width: 100%; 840 max-width: 500px; 841 border: 1px solid #ccc; 842 background-color: #fff; 843 padding: 10px; 844 border-radius: 5px; 845 margin-bottom: 20px; 846 box-sizing: border-box; 847 } 848 849 #rp-tags { 850 display: flex; 851 flex-wrap: wrap; 852 gap: 5px; 853 } 854 855 .rp-tag { 856 background-color: var(--rp-primary); 857 color: white; 858 padding: 5px 10px; 859 border-radius: 15px; 860 font-size: 14px; 861 display: flex; 862 align-items: center; 863 } 864 865 .rp-tag .rp-remove-btn { 866 margin-left: 8px; 867 cursor: pointer; 868 font-weight: bold; 869 } 870 871 #rp-tag-input { 872 border: none; 873 resize: none; 874 min-height: 30px; 875 font-size: 14px; 876 padding: 5px; 877 outline: none; 878 width: 100%; 879 } 880 881 #rp-tag-input:focus { 882 box-shadow: 0 0 0 0px #2271b1; 883 } 884 885 :root { 886 --primary: #6e48aa; 887 --primary-light: #9d50bb; 888 --secondary: #3858e9; 889 --text: #1d2327; 890 --text-light: #646970; 891 --bg: #f8f9fa; 892 --card-bg: rgba(255, 255, 255, 0.85); 893 --border-radius: 12px; 894 --box-shadow: 0 8px 32px rgba(0, 0, 0, 0.05); 895 --transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.1); 896 } 897 898 /* Base Styles */ 899 .rp-about-about-wrap { 900 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif; 901 color: var(--text); 902 line-height: 1.6; 903 max-width: 1200px; 904 margin: 0 auto; 905 padding: 0 20px; 906 background-color: var(--bg); 907 -webkit-font-smoothing: antialiased; 908 } 909 910 /* Hero Section - Glass Morphism Effect */ 911 .rp-about-about-hero { 912 background: linear-gradient(135deg, var(--rp-primary), #6a5acd); 913 backdrop-filter: blur(12px); 914 -webkit-backdrop-filter: blur(12px); 915 color: white; 916 padding: 15px; 917 border-radius: var(--border-radius); 918 margin: 2rem 0 3rem; 919 text-align: center; 920 box-shadow: var(--box-shadow); 921 border: 1px solid rgba(255, 255, 255, 0.18); 922 position: relative; 923 overflow: hidden; 924 } 925 926 @keyframes rotate { 927 from { 928 transform: rotate(0deg); 929 } 930 931 to { 932 transform: rotate(360deg); 933 } 934 } 935 936 .rp-about-about-hero-content { 937 max-width: 800px; 938 margin: 0 auto; 939 position: relative; 940 z-index: 1; 941 } 942 943 .rp-about-logo { 944 height: 100px; 945 width: auto; 946 margin-bottom: 1.5rem; 947 filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.1)); 948 transition: var(--transition); 949 border-radius: 29px; 950 overflow: visible; 951 background: #fff; 952 953 } 954 955 .rp-about-logo:hover { 956 transform: scale(1.05) rotate(-5deg); 957 } 958 959 .rp-about-about-hero h1 { 960 color: #fff; 961 } 962 963 .rp-about-about-hero h1 span { 964 font-size: 0.9rem; 965 background: rgba(255, 255, 255, 0.2); 966 padding: 0.3rem 0.8rem; 967 border-radius: 20px; 968 vertical-align: middle; 969 margin-left: 0.75rem; 970 font-weight: 500; 971 backdrop-filter: blur(4px); 972 } 973 974 .rp-about-tagline { 975 font-size: 15px; 976 opacity: 0.9; 977 margin-left: auto; 978 margin-right: auto; 979 } 980 981 982 983 .rp-about-button { 984 display: inline-flex; 985 align-items: center; 986 padding: 0.85rem 1.75rem; 987 margin: 0 0.5rem; 988 border-radius: var(--border-radius); 989 text-decoration: none; 990 font-weight: 600; 991 transition: var(--transition); 992 position: relative; 993 overflow: hidden; 994 border: none; 995 cursor: pointer; 996 z-index: 1; 997 } 998 999 .rp-about-button::before { 1000 content: ''; 1001 position: absolute; 1002 top: 0; 1003 left: 0; 1004 width: 100%; 1005 height: 100%; 1006 background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0) 100%); 1007 z-index: -1; 1008 transition: var(--transition); 1009 opacity: 0; 1010 } 1011 1012 .rp-about-button:hover::before { 1013 opacity: 1; 1014 } 1015 1016 1017 1018 .rp-about-button { 1019 background: rgb(200, 212, 255); 1020 color: #444edb; 1021 backdrop-filter: blur(4px); 1022 border: 1px solid rgba(255, 255, 255, 0.2); 1023 box-shadow: 0 4px 14px rgba(0, 0, 0, 0.1); 1024 } 1025 1026 .rp-about-button:hover { 1027 background: rgba(255, 255, 255, 0.25); 1028 transform: translateY(-3px); 1029 box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); 1030 } 1031 1032 .rp-about-cta-buttons .dashicons { 1033 margin-right: 10px; 1034 vertical-align: middle; 1035 } 1036 1037 /* Section Headers */ 1038 .rp-about-section-header { 1039 text-align: center; 1040 margin-bottom: 2rem; 1041 } 1042 1043 .rp-about-section-header h2 { 1044 font-size: 26px; 1045 color: var(--text); 1046 margin-bottom: 0.75rem; 1047 font-weight: 700; 1048 position: relative; 1049 display: inline-block; 1050 } 1051 1052 .rp-about-section-header h2::after { 1053 content: ''; 1054 position: absolute; 1055 bottom: -10px; 1056 left: 50%; 1057 transform: translateX(-50%); 1058 width: 60px; 1059 height: 3px; 1060 background: linear-gradient(90deg, var(--primary), var(--primary-light)); 1061 border-radius: 3px; 1062 } 1063 1064 .rp-about-section-header p { 1065 font-size: 16px; 1066 color: var(--text-light); 1067 margin-top: 1rem; 1068 max-width: 700px; 1069 margin-left: auto; 1070 margin-right: auto; 1071 } 1072 1073 /* Plugins Grid - Modern App Store Style */ 1074 .rp-about-plugins-grid { 1075 display: grid; 1076 grid-template-columns:repeat(auto-fit, minmax(250px, 1fr)); 1077 gap: 20px; 1078 margin-bottom: 3rem; 1079 } 1080 1081 .rp-about-plugin-card { 1082 display: flex; 1083 background: var(--card-bg); 1084 border-radius: var(--border-radius); 1085 overflow: hidden; 1086 box-shadow: var(--box-shadow); 1087 transition: var(--transition); 1088 border: 1px solid rgba(0, 0, 0, 0.05); 1089 flex-direction: column; 1090 } 1091 1092 .rp-about-plugin-card:hover { 1093 transform: translateY(-8px); 1094 box-shadow: 0 15px 40px rgba(0, 0, 0, 0.1); 1095 } 1096 1097 .rp-about-plugin-card img { 1098 width: 90px; 1099 height: 90px; 1100 object-fit: contain; 1101 padding: 1.5rem; 1102 align-self: center; 1103 transition: var(--transition); 1104 } 1105 1106 .rp-about-plugin-card:hover img { 1107 transform: scale(1.1); 1108 } 1109 1110 .rp-about-plugin-content { 1111 padding: 0 10px 20px; 1112 flex: 1; 1113 display: flex; 1114 flex-direction: column; 1115 } 1116 1117 .rp-about-plugin-content h3 { 1118 margin-top: 0; 1119 margin-bottom: 1rem; 1120 color: var(--text); 1121 font-size: 18px; 1122 font-weight: 600; 1123 text-align: center; 1124 } 1125 1126 .rp-about-plugin-content p { 1127 color: var(--text-light); 1128 margin-bottom: 1.5rem; 1129 font-size: 14px; 1130 line-height: 1.7; 1131 flex-grow: 1; 1132 } 1133 1134 .rp-about-plugin-footer { 1135 display: flex; 1136 justify-content: space-between; 1137 align-items: center; 1138 } 1139 1140 .salesafw-ab-button { 1141 padding: 0.65rem 1.25rem; 1142 border-radius: var(--border-radius); 1143 text-decoration: none; 1144 font-weight: 600; 1145 transition: var(--transition); 1146 border: none; 1147 cursor: pointer; 1148 } 1149 1150 .salesafw-ab-button-secondary { 1151 background: linear-gradient(135deg, #f5f5f5 0%, #e9e9e9 100%); 1152 color: var(--text); 1153 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); 1154 } 1155 1156 .salesafw-ab-button-secondary:hover { 1157 background: linear-gradient(135deg, #e9e9e9 0%, #ddd 100%); 1158 transform: translateY(-2px); 1159 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); 1160 } 1161 1162 /* CTA Section - Floating Effect */ 1163 .rp-about-about-cta { 1164 background: linear-gradient(135deg, rgba(248, 249, 250, 0.9) 0%, rgba(241, 242, 246, 0.9) 100%); 1165 border-radius: var(--border-radius); 1166 padding: 4rem 2rem; 1167 text-align: center; 1168 margin-bottom: 3rem; 1169 box-shadow: var(--box-shadow); 1170 border: 1px solid rgba(255, 255, 255, 0.5); 1171 position: relative; 1172 overflow: hidden; 1173 } 1174 1175 .rp-about-cta-content { 1176 position: relative; 1177 z-index: 1; 1178 } 1179 1180 .rp-about-cta-content h2 { 1181 font-size: 24px; 1182 margin-top: 0; 1183 margin-bottom: 0.75rem; 1184 font-weight: 700; 1185 } 1186 1187 .rp-about-cta-content p { 1188 font-size: 16px; 1189 color: var(--text-light); 1190 margin-bottom: 2.5rem; 1191 max-width: 700px; 1192 margin-left: auto; 1193 margin-right: auto; 1194 } 1195 1196 .rp-about-cta-buttons { 1197 display: flex; 1198 justify-content: center; 1199 gap: 1.5rem; 1200 flex-wrap: wrap; 1201 } 1202 1203 /* Footer */ 1204 .rp-about-about-footer { 1205 text-align: center; 1206 color: var(--text-light); 1207 font-size: 0.95rem; 1208 border-top: 1px solid rgba(0, 0, 0, 0.05); 1209 position: relative; 1210 } 1211 1212 .rp-about-about-footer::before { 1213 content: ''; 1214 position: absolute; 1215 top: 0; 1216 left: 50%; 1217 transform: translateX(-50%); 1218 width: 100px; 1219 height: 3px; 1220 background: linear-gradient(90deg, var(--primary), var(--primary-light)); 1221 } 1222 1223 .rp-about-about-footer a { 1224 color: var(--primary); 1225 text-decoration: none; 1226 font-weight: 500; 1227 transition: var(--transition); 1228 } 1229 1230 .rp-about-about-footer a:hover { 1231 color: var(--primary-light); 1232 text-decoration: underline; 1233 } 1234 1235 /* Responsive Design */ 1236 @media (max-width: 1024px) { 1237 .rp-about-about-hero h1 { 1238 font-size: 2.5rem; 1239 } 1240 1241 .rp-about-section-header h2 { 1242 font-size: 2rem; 1243 } 1244 } 1245 1246 @media (max-width: 768px) { 1247 .rp-about-about-hero { 1248 padding: 3rem 1.5rem; 1249 } 1250 1251 .rp-about-about-hero h1 { 1252 font-size: 2.25rem; 1253 } 1254 1255 .rp-about-tagline { 1256 font-size: 1.2rem; 1257 } 1258 1259 1260 .rp-about-button { 1261 width: 100%; 1262 justify-content: center; 1263 } 1264 1265 .rp-about-plugin-card { 1266 flex-direction: column; 1267 } 1268 1269 .rp-about-plugin-card img { 1270 width: 100%; 1271 max-height: 150px; 1272 padding: 1.5rem 1.5rem 0; 1273 } 1274 1275 .rp-about-cta-buttons { 1276 flex-direction: column; 1277 gap: 1rem; 1278 } 1279 } 1280 1281 @media (max-width: 480px) { 1282 .rp-about-about-hero h1 { 1283 font-size: 2rem; 1284 } 1285 1286 1287 .rp-about-plugins-grid { 1288 grid-template-columns: 1fr; 1289 } 1290 1291 .rp-about-section-header h2 { 1292 font-size: 1.75rem; 1293 } 1294 } -
replypilot-ai/trunk/assets/js/replypilot-ai.js
r3320959 r3339544 1 1 document.addEventListener('DOMContentLoaded', function () { 2 2 3 const tabs = document.querySelectorAll('.rp-nav-tab');4 const tabContents = document.querySelectorAll('.rp-tab-content');3 const tabs = document.querySelectorAll('.rp-nav-tab'); 4 const tabContents = document.querySelectorAll('.rp-tab-content'); 5 5 6 tabs.forEach(tab => {7 tab.addEventListener('click', function (e) {8 e.preventDefault();6 tabs.forEach(tab => { 7 tab.addEventListener('click', function (e) { 8 e.preventDefault(); 9 9 10 // Remove active class from all tabs and contents11 tabs.forEach(t => t.classList.remove('active'));12 tabContents.forEach(c => c.classList.remove('active'));10 // Remove active class from all tabs and contents 11 tabs.forEach(t => t.classList.remove('active')); 12 tabContents.forEach(c => c.classList.remove('active')); 13 13 14 // Add active class to clicked tab and corresponding content15 this.classList.add('active');16 const tabId = this.getAttribute('data-tab');17 console.log(tabId);18 document.getElementById(tabId).classList.add('active');19 });20 });14 // Add active class to clicked tab and corresponding content 15 this.classList.add('active'); 16 const tabId = this.getAttribute('data-tab'); 17 console.log(tabId); 18 document.getElementById(tabId).classList.add('active'); 19 }); 20 }); 21 21 22 // Range slider value display22 // Range slider value display 23 23 24 const rangeSlider = document.querySelector('input[type="range"]');25 if(rangeSlider){26 const rangeValue = rangeSlider.nextElementSibling;24 const rangeSlider = document.querySelector('input[type="range"]'); 25 if (rangeSlider) { 26 const rangeValue = rangeSlider.nextElementSibling; 27 27 28 rangeSlider.addEventListener('input', function () { 29 rangeValue.textContent = this.value; 30 }); 31 } 32 // Toggle switches 28 rangeSlider.addEventListener('input', function () { 29 rangeValue.textContent = this.value; 30 }); 31 } 32 33 // Save button animation 34 const saveBtn = document.querySelectorAll('.rp-save-button'); 35 saveBtn.forEach(btn => { 36 btn.addEventListener('click', function (e) { 37 console.log('Save button clicked'); 38 const originalText = this.innerHTML; 39 this.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Saving...'; 40 41 }); 42 }); 43 44 const tagInput = document.getElementById('rp-tag-input'); 45 const tagsContainer = document.getElementById('rp-tags'); 46 const hiddenInput = document.getElementById('rp-hidden-suggestion-tags'); 47 let tags = []; 48 tagInput.addEventListener('keydown', function (e) { 49 if (e.key === 'Enter') { 50 e.preventDefault(); 51 const value = tagInput.value.trim(); 52 if (value !== '' && !tags.includes(value)) { 53 tags.push(value); 54 tagInput.value = ''; 55 updateTags(); 56 } 57 } 58 }); 59 60 function updateTags() { 61 tagsContainer.innerHTML = ''; 62 tags.forEach(tag => { 63 const tagEl = document.createElement('span'); 64 tagEl.className = 'rp-tag'; 65 tagEl.innerHTML = `${tag} <span class="rp-remove-btn">×</span>`; 66 tagEl.querySelector('.rp-remove-btn').addEventListener('click', () => { 67 tags = tags.filter(t => t !== tag); 68 updateTags(); 69 }); 70 tagsContainer.appendChild(tagEl); 71 }); 72 hiddenInput.value = tags.join(','); 73 } 74 const storedTags = hiddenInput.value.trim(); 75 if (storedTags !== '') { 76 tags = storedTags.split(',').map(t => t.trim()).filter(t => t); 77 updateTags(); 78 } 79 }); 33 80 34 81 35 82 36 // Save button animation37 const saveBtn = document.querySelectorAll('.rp-save-button');38 saveBtn.forEach(btn => {39 btn.addEventListener('click', function (e) {40 console.log('Save button clicked');41 const originalText = this.innerHTML;42 this.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Saving...';43 44 });45 });46 83 47 84 48 49 }); 50 51 52 jQuery(document).ready(function($) { 53 $('.delete-conversation').on('click', function(e) { 85 jQuery(document).ready(function ($) { 86 $('.delete-conversation').on('click', function (e) { 54 87 if (!confirm('Are you sure you want to delete this conversation? This cannot be undone.')) { 55 88 e.preventDefault(); … … 57 90 }); 58 91 }); 92 -
replypilot-ai/trunk/assets/js/script.js
r3335155 r3339544 8 8 9 9 function chatbotfetchMessages(conversation_id) { 10 if (!conversation_id) { 11 return; 12 } 10 13 fetch(replypilotChatbot.ajaxurl, { 11 14 method: 'POST', … … 32 35 33 36 // Chatbot state 34 const userid = get_chatbot_Cookie("replypilot_conversation_id"); 37 var user_data_collection = replypilotChatbot.user_data_collection 38 var userid = get_chatbot_Cookie("replypilot_conversation_id"); 35 39 let chatHistory = []; 36 40 let isOpen = userid ? true : false; 37 41 let conversationId = userid ?? null; 38 42 let userData = null; 39 43 $('#replypilot-chatbot-toggle').on('click', function () { 44 if (!user_data_collection && !userid) { 45 userid = submitUserData(true); 46 isOpen = true 47 } 48 }); 40 49 // Initialize chatbot 41 50 function initChatbot() { … … 117 126 118 127 // Submit user data 119 function submitUserData() { 120 const name = $('#replypilot-user-name').val().trim(); 121 const email = $('#replypilot-user-email').val().trim(); 128 function submitUserData(withOut) { 129 let name = $('#replypilot-user-name').val().trim(); 130 let email = $('#replypilot-user-email').val().trim(); 131 if (withOut) { 132 name = 'Visitor '; 133 email = 'visitor@email.com'; 134 } 122 135 123 136 // Basic validation … … 126 139 return; 127 140 } 128 141 const typingId = typing_alart() 129 142 // Show loading state 130 143 $('#replypilot-user-data-submit').prop('disabled', true).text('Starting...'); … … 148 161 hideUserDataForm(); 149 162 toggleChatbot(); 163 $(`#${typingId}`).remove(); 164 userid = response.data.conversation_id; 150 165 // Add welcome message 151 addMessage('bot', response.data.welcome_message );166 addMessage('bot', response.data.welcome_message,response.data.suggest); 152 167 153 168 // Focus input … … 178 193 } 179 194 180 message = message.replace(/\*\*/g, '');181 195 message = message.replace(/\n/g, '<br>'); 196 message = message.replace(/\*\*(.*?)\*\*/g, '<b>$1</b>') 182 197 date = data ? new Date(data) : new Date(); 183 198 const timestamp = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); … … 202 217 } 203 218 204 // Send message to server 205 function sendMessage(selectedService = false) { 206 if (!conversationId) { 207 showUserDataForm(); 208 return; 209 } 210 if (selectedService) { 211 var input = selectedService; 212 } else { 213 var input = $('#replypilot-chatbot-user-input').val().trim(); 214 if (!input) return; 215 } 216 // Add user message to chat 217 addMessage('user', input); 218 219 $('#replypilot-chatbot-user-input').val('').css('height', '40px'); 220 221 // Show typing indicator 222 const typingId = 'replypilot-typing-' + Date.now(); 219 function typing_alart(){ 220 let typingId_alrt = 'replypilot-typing-' + Date.now(); 223 221 $('#replypilot-chatbot-messages').append(` 224 <div id="${typingId }" class="replypilot-message replypilot-bot-message replypilot-typing">222 <div id="${typingId_alrt}" class="replypilot-message replypilot-bot-message replypilot-typing"> 225 223 <div class="message-content"> 226 224 <span class="replypilot-typing-dot"></span> … … 230 228 </div> 231 229 `); 230 return typingId_alrt; 231 } 232 // Send message to server 233 function sendMessage(selectedService = false) { 234 if (!conversationId) { 235 showUserDataForm(); 236 return; 237 } 238 if (selectedService) { 239 var input = selectedService; 240 } else { 241 var input = $('#replypilot-chatbot-user-input').val().trim(); 242 if (!input) return; 243 } 244 // Add user message to chat 245 addMessage('user', input); 246 247 $('#replypilot-chatbot-user-input').val('').css('height', '40px'); 248 249 // Show typing indicator 250 const typingId = typing_alart() 232 251 scrollToBottom(); 233 252 // Send to server -
replypilot-ai/trunk/custom-handle-ai-reply.php
r3297027 r3339544 44 44 45 45 $post_content = $selected_comment_basedr == 'content' ? $post->post_content : $post->post_title; 46 // Ensure it's not the comment itself that is replying47 46 if (true) { 48 // Get the content of the comment49 47 $comment_content = $comment->comment_content; 48 if ($comment->comment_approved == '1') { 50 49 51 if ($comment->comment_approved == '1') {52 // Call AI API to generate a reply53 50 $ai_reply = replypilot_ai_get_ai_reply($comment_content, $post_content, true); 54 51 -
replypilot-ai/trunk/readme.txt
r3335160 r3339544 5 5 Tested up to: 6.8 6 6 Requires PHP: 7.4 7 Stable tag: 1. 7.17 Stable tag: 1.8.0 8 8 License: GPL-2.0+ 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 140 140 141 141 == Changelog == 142 = 1.8.0 = 143 * Added new plugin setting options for enhanced customization. 144 * Added "About" page with additional information and improved layout. 145 142 146 = 1.7 = 143 147 * Now user can refresh the page and close the browser but still the chat history will be back". … … 167 171 == Upgrade Notice == 168 172 169 = 1. 7=170 * New Feature: Now user can refresh the page and close the browser but still the chat history will be back.171 173 = 1.8.0 = 174 * Added new plugin setting options for enhanced customization. 175 * Added "About" page with additional information and improved layout. 172 176 173 177 == External Services == -
replypilot-ai/trunk/replypilot-ai.php
r3335160 r3339544 4 4 Plugin URI: https://replypilot.techbeeps.com/ 5 5 Description: AI-powered plugin that auto-generates human-like replies to user comments and provides a real-time chatbot on your website. 6 Version: 1. 7.16 Version: 1.8.0 7 7 Author: Techbeeps 8 8 Author URI: https://techbeeps.co.in/ … … 16 16 } 17 17 18 define('REPLYPILOT_AI_TBS', '1. 7.1');18 define('REPLYPILOT_AI_TBS', '1.8.0'); 19 19 define('REPLYPILOT_AI_TBS_PATH', plugin_dir_path(__FILE__)); 20 20 define('REPLYPILOT_AI_TBS_URL', __FILE__); 21 define('REPLYPILOT_AI_TBS_URL_PLUGIN', plugin_dir_url(__FILE__)); 21 22 22 23
Note: See TracChangeset
for help on using the changeset viewer.