Changeset 3481851
- Timestamp:
- 03/13/2026 10:07:58 AM (3 weeks ago)
- Location:
- bettercx-widget
- Files:
-
- 12 added
- 7 edited
- 22 copied
-
tags/1.0.25 (copied) (copied from bettercx-widget/trunk)
-
tags/1.0.25/assets/bettercx-widget.esm.js (copied) (copied from bettercx-widget/trunk/assets/bettercx-widget.esm.js) (1 diff)
-
tags/1.0.25/assets/index.esm.js (copied) (copied from bettercx-widget/trunk/assets/index.esm.js) (1 diff)
-
tags/1.0.25/assets/p-02209231.js (copied) (copied from bettercx-widget/trunk/assets/p-02209231.js)
-
tags/1.0.25/assets/p-0900f9d9.entry.js (copied) (copied from bettercx-widget/trunk/assets/p-0900f9d9.entry.js)
-
tags/1.0.25/assets/p-10dff694.system.entry.js (added)
-
tags/1.0.25/assets/p-6cbd07ab.system.entry.js (copied) (copied from bettercx-widget/trunk/assets/p-6cbd07ab.system.entry.js)
-
tags/1.0.25/assets/p-71e36b4a.entry.js (copied) (copied from bettercx-widget/trunk/assets/p-71e36b4a.entry.js)
-
tags/1.0.25/assets/p-BM7E0UzD.system.js (added)
-
tags/1.0.25/assets/p-BodaAW6_.system.js (copied) (copied from bettercx-widget/trunk/assets/p-BodaAW6_.system.js)
-
tags/1.0.25/assets/p-CUsPTxey.js (added)
-
tags/1.0.25/assets/p-CdlSLMZr.system.js (added)
-
tags/1.0.25/assets/p-DHO4AMPS.system.js (copied) (copied from bettercx-widget/trunk/assets/p-DHO4AMPS.system.js)
-
tags/1.0.25/assets/p-V8up-zPo.system.js (copied) (copied from bettercx-widget/trunk/assets/p-V8up-zPo.system.js) (1 diff)
-
tags/1.0.25/assets/p-agAx4my6.js (copied) (copied from bettercx-widget/trunk/assets/p-agAx4my6.js)
-
tags/1.0.25/assets/p-e12f10e7.js (added)
-
tags/1.0.25/assets/p-ee803924.system.entry.js (copied) (copied from bettercx-widget/trunk/assets/p-ee803924.system.entry.js)
-
tags/1.0.25/assets/p-fa269bc6.entry.js (added)
-
tags/1.0.25/bettercx-widget.php (copied) (copied from bettercx-widget/trunk/bettercx-widget.php) (3 diffs)
-
tags/1.0.25/readme.txt (copied) (copied from bettercx-widget/trunk/readme.txt) (5 diffs)
-
tags/1.0.25/src/components.d.ts (copied) (copied from bettercx-widget/trunk/src/components.d.ts)
-
tags/1.0.25/src/components/bcx-message-composer/bcx-message-composer.scss (copied) (copied from bettercx-widget/trunk/src/components/bcx-message-composer/bcx-message-composer.scss)
-
tags/1.0.25/src/components/bettercx-widget/bettercx-widget.scss (copied) (copied from bettercx-widget/trunk/src/components/bettercx-widget/bettercx-widget.scss) (18 diffs)
-
tags/1.0.25/src/components/bettercx-widget/bettercx-widget.tsx (copied) (copied from bettercx-widget/trunk/src/components/bettercx-widget/bettercx-widget.tsx)
-
tags/1.0.25/src/components/bettercx-widget/readme.md (copied) (copied from bettercx-widget/trunk/src/components/bettercx-widget/readme.md)
-
tags/1.0.25/src/services/__tests__/theme.service.spec.ts (copied) (copied from bettercx-widget/trunk/src/services/__tests__/theme.service.spec.ts)
-
tags/1.0.25/src/services/api.service.ts (copied) (copied from bettercx-widget/trunk/src/services/api.service.ts)
-
tags/1.0.25/src/services/theme.service.ts (copied) (copied from bettercx-widget/trunk/src/services/theme.service.ts) (1 diff)
-
trunk/assets/bettercx-widget.esm.js (modified) (1 diff)
-
trunk/assets/index.esm.js (modified) (1 diff)
-
trunk/assets/p-10dff694.system.entry.js (added)
-
trunk/assets/p-BM7E0UzD.system.js (added)
-
trunk/assets/p-CUsPTxey.js (added)
-
trunk/assets/p-CdlSLMZr.system.js (added)
-
trunk/assets/p-V8up-zPo.system.js (modified) (1 diff)
-
trunk/assets/p-e12f10e7.js (added)
-
trunk/assets/p-fa269bc6.entry.js (added)
-
trunk/bettercx-widget.php (modified) (3 diffs)
-
trunk/readme.txt (modified) (5 diffs)
-
trunk/src/components/bettercx-widget/bettercx-widget.scss (modified) (18 diffs)
-
trunk/src/services/theme.service.ts (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
bettercx-widget/tags/1.0.25/assets/bettercx-widget.esm.js
r3479213 r3481851 1 import{p as e,g as a,b as t}from"./p-BnsX22WT.js";export{s as setNonce}from"./p-BnsX22WT.js";(()=>{const a=import.meta.url,s={};return""!==a&&(s.resourcesUrl=new URL(".",a).href),e(s)})().then((async e=>(await a(),t([["p-71e36b4a",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p- 0900f9d9",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],e))));1 import{p as e,g as a,b as t}from"./p-BnsX22WT.js";export{s as setNonce}from"./p-BnsX22WT.js";(()=>{const a=import.meta.url,s={};return""!==a&&(s.resourcesUrl=new URL(".",a).href),e(s)})().then((async e=>(await a(),t([["p-71e36b4a",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p-fa269bc6",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],e)))); -
bettercx-widget/tags/1.0.25/assets/index.esm.js
r3479213 r3481851 1 export{a as ApiService,A as AuthService,B as BetterCXWidget,T as ThemeService}from"./p- agAx4my6.js";import"./p-BnsX22WT.js";import"./p-BU1bGO0l.js";function e(e,r,t){return(e||"")+(r?` ${r}`:"")+(t?` ${t}`:"")}export{e as format}1 export{a as ApiService,A as AuthService,B as BetterCXWidget,T as ThemeService}from"./p-CUsPTxey.js";import"./p-BnsX22WT.js";import"./p-BU1bGO0l.js";function e(e,r,t){return(e||"")+(r?` ${r}`:"")+(t?` ${t}`:"")}export{e as format} -
bettercx-widget/tags/1.0.25/assets/p-V8up-zPo.system.js
r3479213 r3481851 1 var __awaiter=this&&this.__awaiter||function(e,t,n,a){function i(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,r){function s(e){try{c(a.next(e))}catch(e){r(e)}}function o(e){try{c(a["throw"](e))}catch(e){r(e)}}function c(e){e.done?n(e.value):i(e.value).then(s,o)}c((a=a.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},a,i,r,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(e){return function(t){return c([e,t])}}function c(o){if(a)throw new TypeError("Generator is already executing.");while(s&&(s=0,o[0]&&(n=0)),n)try{if(a=1,i&&(r=o[0]&2?i["return"]:o[0]?i["throw"]||((r=i["return"])&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;if(i=0,r)o=[o[0]&2,r.value];switch(o[0]){case 0:case 1:r=o;break;case 4:n.label++;return{value:o[1],done:false};case 5:n.label++;i=o[1];o=[0];continue;case 7:o=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!r||o[1]>r[0]&&o[1]<r[3])){n.label=o[1];break}if(o[0]===6&&n.label<r[1]){n.label=r[1];r=o;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(o);break}if(r[2])n.ops.pop();n.trys.pop();continue}o=t.call(e,n)}catch(e){o=[6,e];i=0}finally{a=r=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}};System.register(["./p-Cbgoi924.system.js"],(function(e,t){"use strict";var n,a,i;return{setters:[function(t){n=t.p;a=t.g;i=t.b;e("setNonce",t.s)}],execute:function(){var e=this;var r=function(){var e=t.meta.url;var a={};if(e!==""){a.resourcesUrl=new URL(".",e).href}return n(a)};r().then((function(t){return __awaiter(e,void 0,void 0,(function(){return __generator(this,(function(e){switch(e.label){case 0:return[4,a()];case 1:e.sent();return[2,i([["p-6cbd07ab.system",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p- ee803924.system",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],t)]}}))}))}))}}}));1 var __awaiter=this&&this.__awaiter||function(e,t,n,a){function i(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,r){function s(e){try{c(a.next(e))}catch(e){r(e)}}function o(e){try{c(a["throw"](e))}catch(e){r(e)}}function c(e){e.done?n(e.value):i(e.value).then(s,o)}c((a=a.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},a,i,r,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(e){return function(t){return c([e,t])}}function c(o){if(a)throw new TypeError("Generator is already executing.");while(s&&(s=0,o[0]&&(n=0)),n)try{if(a=1,i&&(r=o[0]&2?i["return"]:o[0]?i["throw"]||((r=i["return"])&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;if(i=0,r)o=[o[0]&2,r.value];switch(o[0]){case 0:case 1:r=o;break;case 4:n.label++;return{value:o[1],done:false};case 5:n.label++;i=o[1];o=[0];continue;case 7:o=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!r||o[1]>r[0]&&o[1]<r[3])){n.label=o[1];break}if(o[0]===6&&n.label<r[1]){n.label=r[1];r=o;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(o);break}if(r[2])n.ops.pop();n.trys.pop();continue}o=t.call(e,n)}catch(e){o=[6,e];i=0}finally{a=r=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}};System.register(["./p-Cbgoi924.system.js"],(function(e,t){"use strict";var n,a,i;return{setters:[function(t){n=t.p;a=t.g;i=t.b;e("setNonce",t.s)}],execute:function(){var e=this;var r=function(){var e=t.meta.url;var a={};if(e!==""){a.resourcesUrl=new URL(".",e).href}return n(a)};r().then((function(t){return __awaiter(e,void 0,void 0,(function(){return __generator(this,(function(e){switch(e.label){case 0:return[4,a()];case 1:e.sent();return[2,i([["p-6cbd07ab.system",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p-10dff694.system",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],t)]}}))}))}))}}})); -
bettercx-widget/tags/1.0.25/bettercx-widget.php
r3479213 r3481851 4 4 * Plugin URI: https://wordpress.org/plugins/bettercx-widget/ 5 5 * Description: Professional AI-powered chat widget for BetterCX platform. Seamlessly integrate intelligent customer support into any website with full WordPress compatibility. Fully functional out of the box with no trial limitations. 6 * Version: 1.0.2 46 * Version: 1.0.25 7 7 * Author: BetterCX 8 8 * Author URI: https://bettercx.ai … … 16 16 * 17 17 * @package BetterCX_Widget 18 * @version 1.0.2 418 * @version 1.0.25 19 19 * @author BetterCX 20 20 * @license GPLv2+ … … 37 37 38 38 // Define plugin constants 39 define('BETTERCX_WIDGET_VERSION', '1.0.2 4');39 define('BETTERCX_WIDGET_VERSION', '1.0.25'); 40 40 define('BETTERCX_WIDGET_PLUGIN_FILE', __FILE__); 41 41 define('BETTERCX_WIDGET_PLUGIN_DIR', plugin_dir_path(__FILE__)); -
bettercx-widget/tags/1.0.25/readme.txt
r3479213 r3481851 5 5 Tested up to: 6.8 6 6 Requires PHP: 7.4 7 Stable tag: 1.0.2 47 Stable tag: 1.0.25 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 248 248 == Changelog == 249 249 250 = 1.0.25 = 251 * Fixed mobile UI bug where two floating widget buttons could appear at the same time 252 250 253 = 1.0.24 = 251 254 * Added visible close (X) button next to the menu ("...") in the header on mobile devices for quick widget dismissal without opening the dropdown … … 420 423 == Upgrade Notice == 421 424 425 = 1.0.25 = 426 Fix: Resolved a mobile issue where two widget buttons could be displayed simultaneously. 427 422 428 = 1.0.24 = 423 429 Update: Added visible close (X) button in header on mobile for quick widget dismissal. Improved long title handling with ellipsis. Fixed header overflow and online indicator clipping. Enhanced language detection reliability. Added Shopify integration module. Fixed all test failures. … … 717 723 718 724 = Last Updated = 719 202 5-12-18725 2026-03-13 720 726 721 727 = Version = 722 1.0.2 1728 1.0.25 723 729 724 730 = Minimum WordPress Version = … … 735 741 736 742 = Stable Tag = 737 1.0.2 1743 1.0.25 738 744 739 745 = Development Version = 740 1.0.2 1746 1.0.25 741 747 742 748 = Requires at least = -
bettercx-widget/tags/1.0.25/src/components/bettercx-widget/bettercx-widget.scss
r3479213 r3481851 458 458 459 459 .bcx-widget__header-body { 460 display: flex; 460 display: grid; 461 grid-template-columns: max-content minmax(0, 1fr) max-content; 462 grid-template-rows: auto; 461 463 align-items: center; 462 justify-content: center;464 column-gap: var(--bcx-space-2); 463 465 width: 100%; 464 466 border-radius: var(--bcx-widget-header-border-radius); … … 501 503 gap: var(--bcx-space-3); 502 504 flex: 1; 505 width: 100%; 506 min-width: 0; 507 grid-column: 1; 508 grid-row: 1; 503 509 transition: 504 510 flex-direction 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94), … … 507 513 transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); 508 514 will-change: flex-direction, align-items, gap, transform; 509 min-width: 0; // Allows flex items to shrink below their content size510 515 transform: translateX(0); 511 516 /* AUDYT: usunięto backface-visibility - animacja 2D (flex-direction change) */ … … 554 559 h3 { 555 560 margin: 0; 556 font-size: var(--bcx-text- 2xl);561 font-size: var(--bcx-text-lg); 557 562 font-weight: 700; 558 563 letter-spacing: -0.025em; … … 682 687 &--initial { 683 688 .bcx-widget__header-body { 684 justify-content: center; 689 grid-template-columns: max-content minmax(0, 1fr) max-content; 690 grid-template-rows: auto auto; 691 align-items: start; 685 692 } 686 693 687 694 .bcx-widget__header-content { 688 flex-direction: column; 689 align-items: center; 690 gap: 0; 691 text-align: center; 692 transform: translateX(0); 693 width: 100%; 695 display: contents; 694 696 } 695 697 696 698 .bcx-widget__header-title { 697 justify-content: center; 698 transform: translateX(0); 699 width: 100%; 699 display: contents; 700 700 } 701 701 702 702 .bcx-widget__header-avatar { 703 703 transform: translateX(0); 704 grid-column: 1; 705 grid-row: 1; 706 align-self: center; 704 707 } 705 708 706 709 h3 { 707 710 transform: translateX(0); 708 white-space: normal; 709 text-align: center; 711 white-space: nowrap; 712 overflow: hidden; 713 text-overflow: ellipsis; 714 text-align: left; 715 grid-column: 2; 716 grid-row: 1; 717 min-width: 0; 718 max-width: 100%; 719 align-self: center; 710 720 } 711 721 712 722 .bcx-widget__header-extra { 723 grid-column: 1 / 4; 724 grid-row: 2; 713 725 max-height: 200px; 714 726 opacity: 1; … … 716 728 visibility: visible; 717 729 pointer-events: auto; 718 margin-top: var(--bcx-space-5); 730 margin-top: var(--bcx-space-2); 731 margin-left: var(--bcx-space-1); 719 732 text-align: center; 720 733 align-items: center; … … 729 742 .bcx-widget__close, 730 743 .bcx-widget__dropdown { 731 position: absolute; 732 top: var(--bcx-space-2); 733 right: var(--bcx-space-2); 744 position: relative; 745 flex-shrink: 0; 734 746 transition: 735 747 opacity 0.3s ease, 736 748 transform 0.3s ease; 737 749 } 750 751 .bcx-widget__header-actions { 752 grid-column: 3; 753 grid-row: 1; 754 justify-self: end; 755 align-self: start; 756 width: max-content; 757 } 738 758 } 739 759 … … 741 761 &--compact { 742 762 .bcx-widget__header-body { 743 justify-content: space-between; 763 grid-template-columns: max-content minmax(0, 1fr) max-content; 764 grid-template-rows: auto; 765 align-items: center; 744 766 } 745 767 746 768 .bcx-widget__header-content { 747 flex-direction: row; 748 align-items: center; 749 justify-content: flex-start; 750 gap: var(--bcx-space-3); 751 transform: translateX(0); 752 width: auto; 753 flex: 1; 754 min-width: 0; 769 display: contents; 755 770 } 756 771 757 772 .bcx-widget__header-title { 758 justify-content: flex-start; 759 transform: translateX(0); 760 width: auto; 773 display: contents; 761 774 } 762 775 763 776 .bcx-widget__header-avatar { 764 777 transform: translateX(0); 778 grid-column: 1; 779 grid-row: 1; 780 align-self: center; 765 781 } 766 782 … … 772 788 pointer-events: none; 773 789 margin-top: 0; 790 width: 0; 791 min-width: 0; 792 flex: 0 0 0; 793 overflow: hidden; 774 794 transition: 775 795 opacity 0.12s cubic-bezier(0.4, 0, 1, 1) 0s, … … 789 809 } 790 810 811 .bcx-widget__header-actions { 812 grid-column: 3; 813 grid-row: 1; 814 justify-self: end; 815 align-self: center; 816 width: max-content; 817 margin-left: var(--bcx-space-1); 818 } 819 791 820 h3 { 792 font-size: var(--bcx-text- xl);821 font-size: var(--bcx-text-lg); 793 822 white-space: nowrap; 794 823 text-align: left; 795 824 transform: translateX(0); 825 grid-column: 2; 826 grid-row: 1; 827 min-width: 0; 828 flex: 1; 829 overflow: hidden; 830 text-overflow: ellipsis; 831 max-width: 100%; 796 832 } 797 833 } … … 808 844 align-items: center; 809 845 justify-content: center; 810 width: 40px; /* Slightly larger for better touch target */811 height: 40px;846 width: 38px; 847 height: 38px; 812 848 position: relative; 813 849 z-index: 1; … … 816 852 817 853 svg { 818 width: 2 2px;819 height: 2 2px;854 width: 20px; 855 height: 20px; 820 856 stroke-width: 2; 821 857 display: block; … … 847 883 gap: var(--bcx-space-1); 848 884 flex-shrink: 0; 885 width: max-content; 849 886 } 850 887 … … 858 895 align-items: center; 859 896 justify-content: center; 860 width: 40px;861 height: 40px;897 width: 38px; 898 height: 38px; 862 899 transition: all var(--bcx-transition-fast); 863 900 border-radius: var(--bcx-radius-md); … … 865 902 866 903 svg { 867 width: 1 8px;868 height: 1 8px;904 width: 17px; 905 height: 17px; 869 906 stroke-width: 2; 870 907 display: block; … … 901 938 align-items: center; 902 939 justify-content: center; 903 width: 40px;904 height: 40px;940 width: 38px; 941 height: 38px; 905 942 position: relative; 906 943 transition: all var(--bcx-transition-fast); … … 909 946 910 947 svg { 911 width: 1 8px;912 height: 1 8px;948 width: 17px; 949 height: 17px; 913 950 stroke-width: 2; 914 951 display: block; … … 2996 3033 .bcx-widget__header { 2997 3034 border-radius: 0 !important; 3035 3036 h3 { 3037 font-size: 15px; 3038 } 3039 3040 .bcx-widget__header-subdescription { 3041 font-size: 13px; 3042 } 3043 3044 .bcx-widget__header-avatar { 3045 width: 34px; 3046 height: 34px; 3047 } 3048 3049 .bcx-widget__online-indicator { 3050 width: 9px; 3051 height: 9px; 3052 } 3053 } 3054 3055 .bcx-widget__header-close-mobile, 3056 .bcx-widget__dropdown-toggle, 3057 .bcx-widget__close { 3058 width: 36px; 3059 height: 36px; 3060 padding: 7px; 3061 } 3062 3063 .bcx-widget__header-close-mobile svg, 3064 .bcx-widget__dropdown-toggle svg { 3065 width: 16px; 3066 height: 16px; 3067 } 3068 3069 .bcx-widget__close svg { 3070 width: 18px; 3071 height: 18px; 2998 3072 } 2999 3073 -
bettercx-widget/tags/1.0.25/src/services/theme.service.ts
r3479213 r3481851 122 122 123 123 /** 124 * Extract visible text content from the page using TreeWalker125 * Skips script/style/noscript/svg/code/pre elements and hidden elements126 */127 private getVisibleText(): string {128 if (!document.body) return '';129 130 const chunks: string[] = [];131 let totalLength = 0;132 const maxLength = 5000;133 134 const skipTags = new Set(['SCRIPT', 'STYLE', 'NOSCRIPT', 'SVG', 'CODE', 'PRE']);135 136 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, {137 acceptNode(node: Node): number {138 const parent = node.parentElement;139 if (!parent) return NodeFilter.FILTER_REJECT;140 if (skipTags.has(parent.tagName)) return NodeFilter.FILTER_REJECT;141 142 // Skip hidden elements143 try {144 const style = window.getComputedStyle(parent);145 if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {146 return NodeFilter.FILTER_REJECT;147 }148 } catch {149 // Skip if we can't compute style150 }151 152 return NodeFilter.FILTER_ACCEPT;153 },154 });155 156 let node: Node | null;157 while ((node = walker.nextNode()) && totalLength < maxLength) {158 const text = (node.textContent || '').trim();159 if (text.length > 0) {160 chunks.push(text);161 totalLength += text.length;162 }163 }164 165 const result = chunks.join(' ').substring(0, maxLength);166 167 // Fallback to textContent if TreeWalker returned nothing (e.g. jsdom)168 if (result.length === 0) {169 const fallback = (document.body.innerText || document.body.textContent || '').trim();170 return fallback.substring(0, maxLength);171 }172 173 return result;174 }175 176 /**177 124 * Apply widget configuration to CSS custom properties 178 125 */ -
bettercx-widget/trunk/assets/bettercx-widget.esm.js
r3479213 r3481851 1 import{p as e,g as a,b as t}from"./p-BnsX22WT.js";export{s as setNonce}from"./p-BnsX22WT.js";(()=>{const a=import.meta.url,s={};return""!==a&&(s.resourcesUrl=new URL(".",a).href),e(s)})().then((async e=>(await a(),t([["p-71e36b4a",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p- 0900f9d9",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],e))));1 import{p as e,g as a,b as t}from"./p-BnsX22WT.js";export{s as setNonce}from"./p-BnsX22WT.js";(()=>{const a=import.meta.url,s={};return""!==a&&(s.resourcesUrl=new URL(".",a).href),e(s)})().then((async e=>(await a(),t([["p-71e36b4a",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p-fa269bc6",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],e)))); -
bettercx-widget/trunk/assets/index.esm.js
r3479213 r3481851 1 export{a as ApiService,A as AuthService,B as BetterCXWidget,T as ThemeService}from"./p- agAx4my6.js";import"./p-BnsX22WT.js";import"./p-BU1bGO0l.js";function e(e,r,t){return(e||"")+(r?` ${r}`:"")+(t?` ${t}`:"")}export{e as format}1 export{a as ApiService,A as AuthService,B as BetterCXWidget,T as ThemeService}from"./p-CUsPTxey.js";import"./p-BnsX22WT.js";import"./p-BU1bGO0l.js";function e(e,r,t){return(e||"")+(r?` ${r}`:"")+(t?` ${t}`:"")}export{e as format} -
bettercx-widget/trunk/assets/p-V8up-zPo.system.js
r3479213 r3481851 1 var __awaiter=this&&this.__awaiter||function(e,t,n,a){function i(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,r){function s(e){try{c(a.next(e))}catch(e){r(e)}}function o(e){try{c(a["throw"](e))}catch(e){r(e)}}function c(e){e.done?n(e.value):i(e.value).then(s,o)}c((a=a.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},a,i,r,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(e){return function(t){return c([e,t])}}function c(o){if(a)throw new TypeError("Generator is already executing.");while(s&&(s=0,o[0]&&(n=0)),n)try{if(a=1,i&&(r=o[0]&2?i["return"]:o[0]?i["throw"]||((r=i["return"])&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;if(i=0,r)o=[o[0]&2,r.value];switch(o[0]){case 0:case 1:r=o;break;case 4:n.label++;return{value:o[1],done:false};case 5:n.label++;i=o[1];o=[0];continue;case 7:o=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!r||o[1]>r[0]&&o[1]<r[3])){n.label=o[1];break}if(o[0]===6&&n.label<r[1]){n.label=r[1];r=o;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(o);break}if(r[2])n.ops.pop();n.trys.pop();continue}o=t.call(e,n)}catch(e){o=[6,e];i=0}finally{a=r=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}};System.register(["./p-Cbgoi924.system.js"],(function(e,t){"use strict";var n,a,i;return{setters:[function(t){n=t.p;a=t.g;i=t.b;e("setNonce",t.s)}],execute:function(){var e=this;var r=function(){var e=t.meta.url;var a={};if(e!==""){a.resourcesUrl=new URL(".",e).href}return n(a)};r().then((function(t){return __awaiter(e,void 0,void 0,(function(){return __generator(this,(function(e){switch(e.label){case 0:return[4,a()];case 1:e.sent();return[2,i([["p-6cbd07ab.system",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p- ee803924.system",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],t)]}}))}))}))}}}));1 var __awaiter=this&&this.__awaiter||function(e,t,n,a){function i(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,r){function s(e){try{c(a.next(e))}catch(e){r(e)}}function o(e){try{c(a["throw"](e))}catch(e){r(e)}}function c(e){e.done?n(e.value):i(e.value).then(s,o)}c((a=a.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},a,i,r,s;return s={next:o(0),throw:o(1),return:o(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function o(e){return function(t){return c([e,t])}}function c(o){if(a)throw new TypeError("Generator is already executing.");while(s&&(s=0,o[0]&&(n=0)),n)try{if(a=1,i&&(r=o[0]&2?i["return"]:o[0]?i["throw"]||((r=i["return"])&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;if(i=0,r)o=[o[0]&2,r.value];switch(o[0]){case 0:case 1:r=o;break;case 4:n.label++;return{value:o[1],done:false};case 5:n.label++;i=o[1];o=[0];continue;case 7:o=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!r||o[1]>r[0]&&o[1]<r[3])){n.label=o[1];break}if(o[0]===6&&n.label<r[1]){n.label=r[1];r=o;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(o);break}if(r[2])n.ops.pop();n.trys.pop();continue}o=t.call(e,n)}catch(e){o=[6,e];i=0}finally{a=r=0}if(o[0]&5)throw o[1];return{value:o[0]?o[1]:void 0,done:true}}};System.register(["./p-Cbgoi924.system.js"],(function(e,t){"use strict";var n,a,i;return{setters:[function(t){n=t.p;a=t.g;i=t.b;e("setNonce",t.s)}],execute:function(){var e=this;var r=function(){var e=t.meta.url;var a={};if(e!==""){a.resourcesUrl=new URL(".",e).href}return n(a)};r().then((function(t){return __awaiter(e,void 0,void 0,(function(){return __generator(this,(function(e){switch(e.label){case 0:return[4,a()];case 1:e.sent();return[2,i([["p-6cbd07ab.system",[[257,"bcx-chat-list",{apiService:[16,"api-service"],language:[1],theme:[1],chats:[32],selectedChatId:[32],messages:[32],isLoading:[32],isLoadingMore:[32],hasMore:[32],currentPage:[32],error:[32]},null,{language:["onLanguageChange"]}],[257,"bcx-message-composer",{disabled:[4],loading:[4],placeholder:[1],maxLength:[2,"max-length"],theme:[1],isAttachmentsDisabled:[4,"is-attachments-disabled"],message:[32],images:[32]}],[257,"bcx-product-slider",{products:[16],language:[1],showAfterStreaming:[4,"show-after-streaming"],currentIndex:[32],isVisible:[32]},null,{products:["onProductsChange"],showAfterStreaming:["onShowAfterStreamingChange"]}]]],["p-10dff694.system",[[257,"bettercx-widget",{publicKey:[1,"public-key"],theme:[1],debug:[4],baseUrl:[1,"base-url"],aiServiceUrl:[1,"ai-service-url"],autoInit:[4,"auto-init"],position:[1],language:[1],embedded:[4],embeddedSize:[1,"embedded-size"],embeddedPlacement:[1,"embedded-placement"],isAttachmentsDisabled:[4,"is-attachments-disabled"],state:[32],timeUpdateTrigger:[32],isDropdownOpen:[32],isFullscreen:[32],showChatList:[32],hasUserSentMessage:[32],showDelayMessage:[32],delayMessageType:[32],open:[64],close:[64],toggle:[64],sendMessage:[64]},null,{publicKey:["onPublicKeyChange"],theme:["onThemeChange"],language:["onLanguageChange"],"state.messages":["onMessagesChange"],embedded:["onEmbeddedChange"],embeddedSize:["onEmbeddedSizeChange"],embeddedPlacement:["onEmbeddedPlacementChange"]}]]]],t)]}}))}))}))}}})); -
bettercx-widget/trunk/bettercx-widget.php
r3479213 r3481851 4 4 * Plugin URI: https://wordpress.org/plugins/bettercx-widget/ 5 5 * Description: Professional AI-powered chat widget for BetterCX platform. Seamlessly integrate intelligent customer support into any website with full WordPress compatibility. Fully functional out of the box with no trial limitations. 6 * Version: 1.0.2 46 * Version: 1.0.25 7 7 * Author: BetterCX 8 8 * Author URI: https://bettercx.ai … … 16 16 * 17 17 * @package BetterCX_Widget 18 * @version 1.0.2 418 * @version 1.0.25 19 19 * @author BetterCX 20 20 * @license GPLv2+ … … 37 37 38 38 // Define plugin constants 39 define('BETTERCX_WIDGET_VERSION', '1.0.2 4');39 define('BETTERCX_WIDGET_VERSION', '1.0.25'); 40 40 define('BETTERCX_WIDGET_PLUGIN_FILE', __FILE__); 41 41 define('BETTERCX_WIDGET_PLUGIN_DIR', plugin_dir_path(__FILE__)); -
bettercx-widget/trunk/readme.txt
r3479213 r3481851 5 5 Tested up to: 6.8 6 6 Requires PHP: 7.4 7 Stable tag: 1.0.2 47 Stable tag: 1.0.25 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 248 248 == Changelog == 249 249 250 = 1.0.25 = 251 * Fixed mobile UI bug where two floating widget buttons could appear at the same time 252 250 253 = 1.0.24 = 251 254 * Added visible close (X) button next to the menu ("...") in the header on mobile devices for quick widget dismissal without opening the dropdown … … 420 423 == Upgrade Notice == 421 424 425 = 1.0.25 = 426 Fix: Resolved a mobile issue where two widget buttons could be displayed simultaneously. 427 422 428 = 1.0.24 = 423 429 Update: Added visible close (X) button in header on mobile for quick widget dismissal. Improved long title handling with ellipsis. Fixed header overflow and online indicator clipping. Enhanced language detection reliability. Added Shopify integration module. Fixed all test failures. … … 717 723 718 724 = Last Updated = 719 202 5-12-18725 2026-03-13 720 726 721 727 = Version = 722 1.0.2 1728 1.0.25 723 729 724 730 = Minimum WordPress Version = … … 735 741 736 742 = Stable Tag = 737 1.0.2 1743 1.0.25 738 744 739 745 = Development Version = 740 1.0.2 1746 1.0.25 741 747 742 748 = Requires at least = -
bettercx-widget/trunk/src/components/bettercx-widget/bettercx-widget.scss
r3479213 r3481851 458 458 459 459 .bcx-widget__header-body { 460 display: flex; 460 display: grid; 461 grid-template-columns: max-content minmax(0, 1fr) max-content; 462 grid-template-rows: auto; 461 463 align-items: center; 462 justify-content: center;464 column-gap: var(--bcx-space-2); 463 465 width: 100%; 464 466 border-radius: var(--bcx-widget-header-border-radius); … … 501 503 gap: var(--bcx-space-3); 502 504 flex: 1; 505 width: 100%; 506 min-width: 0; 507 grid-column: 1; 508 grid-row: 1; 503 509 transition: 504 510 flex-direction 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94), … … 507 513 transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94); 508 514 will-change: flex-direction, align-items, gap, transform; 509 min-width: 0; // Allows flex items to shrink below their content size510 515 transform: translateX(0); 511 516 /* AUDYT: usunięto backface-visibility - animacja 2D (flex-direction change) */ … … 554 559 h3 { 555 560 margin: 0; 556 font-size: var(--bcx-text- 2xl);561 font-size: var(--bcx-text-lg); 557 562 font-weight: 700; 558 563 letter-spacing: -0.025em; … … 682 687 &--initial { 683 688 .bcx-widget__header-body { 684 justify-content: center; 689 grid-template-columns: max-content minmax(0, 1fr) max-content; 690 grid-template-rows: auto auto; 691 align-items: start; 685 692 } 686 693 687 694 .bcx-widget__header-content { 688 flex-direction: column; 689 align-items: center; 690 gap: 0; 691 text-align: center; 692 transform: translateX(0); 693 width: 100%; 695 display: contents; 694 696 } 695 697 696 698 .bcx-widget__header-title { 697 justify-content: center; 698 transform: translateX(0); 699 width: 100%; 699 display: contents; 700 700 } 701 701 702 702 .bcx-widget__header-avatar { 703 703 transform: translateX(0); 704 grid-column: 1; 705 grid-row: 1; 706 align-self: center; 704 707 } 705 708 706 709 h3 { 707 710 transform: translateX(0); 708 white-space: normal; 709 text-align: center; 711 white-space: nowrap; 712 overflow: hidden; 713 text-overflow: ellipsis; 714 text-align: left; 715 grid-column: 2; 716 grid-row: 1; 717 min-width: 0; 718 max-width: 100%; 719 align-self: center; 710 720 } 711 721 712 722 .bcx-widget__header-extra { 723 grid-column: 1 / 4; 724 grid-row: 2; 713 725 max-height: 200px; 714 726 opacity: 1; … … 716 728 visibility: visible; 717 729 pointer-events: auto; 718 margin-top: var(--bcx-space-5); 730 margin-top: var(--bcx-space-2); 731 margin-left: var(--bcx-space-1); 719 732 text-align: center; 720 733 align-items: center; … … 729 742 .bcx-widget__close, 730 743 .bcx-widget__dropdown { 731 position: absolute; 732 top: var(--bcx-space-2); 733 right: var(--bcx-space-2); 744 position: relative; 745 flex-shrink: 0; 734 746 transition: 735 747 opacity 0.3s ease, 736 748 transform 0.3s ease; 737 749 } 750 751 .bcx-widget__header-actions { 752 grid-column: 3; 753 grid-row: 1; 754 justify-self: end; 755 align-self: start; 756 width: max-content; 757 } 738 758 } 739 759 … … 741 761 &--compact { 742 762 .bcx-widget__header-body { 743 justify-content: space-between; 763 grid-template-columns: max-content minmax(0, 1fr) max-content; 764 grid-template-rows: auto; 765 align-items: center; 744 766 } 745 767 746 768 .bcx-widget__header-content { 747 flex-direction: row; 748 align-items: center; 749 justify-content: flex-start; 750 gap: var(--bcx-space-3); 751 transform: translateX(0); 752 width: auto; 753 flex: 1; 754 min-width: 0; 769 display: contents; 755 770 } 756 771 757 772 .bcx-widget__header-title { 758 justify-content: flex-start; 759 transform: translateX(0); 760 width: auto; 773 display: contents; 761 774 } 762 775 763 776 .bcx-widget__header-avatar { 764 777 transform: translateX(0); 778 grid-column: 1; 779 grid-row: 1; 780 align-self: center; 765 781 } 766 782 … … 772 788 pointer-events: none; 773 789 margin-top: 0; 790 width: 0; 791 min-width: 0; 792 flex: 0 0 0; 793 overflow: hidden; 774 794 transition: 775 795 opacity 0.12s cubic-bezier(0.4, 0, 1, 1) 0s, … … 789 809 } 790 810 811 .bcx-widget__header-actions { 812 grid-column: 3; 813 grid-row: 1; 814 justify-self: end; 815 align-self: center; 816 width: max-content; 817 margin-left: var(--bcx-space-1); 818 } 819 791 820 h3 { 792 font-size: var(--bcx-text- xl);821 font-size: var(--bcx-text-lg); 793 822 white-space: nowrap; 794 823 text-align: left; 795 824 transform: translateX(0); 825 grid-column: 2; 826 grid-row: 1; 827 min-width: 0; 828 flex: 1; 829 overflow: hidden; 830 text-overflow: ellipsis; 831 max-width: 100%; 796 832 } 797 833 } … … 808 844 align-items: center; 809 845 justify-content: center; 810 width: 40px; /* Slightly larger for better touch target */811 height: 40px;846 width: 38px; 847 height: 38px; 812 848 position: relative; 813 849 z-index: 1; … … 816 852 817 853 svg { 818 width: 2 2px;819 height: 2 2px;854 width: 20px; 855 height: 20px; 820 856 stroke-width: 2; 821 857 display: block; … … 847 883 gap: var(--bcx-space-1); 848 884 flex-shrink: 0; 885 width: max-content; 849 886 } 850 887 … … 858 895 align-items: center; 859 896 justify-content: center; 860 width: 40px;861 height: 40px;897 width: 38px; 898 height: 38px; 862 899 transition: all var(--bcx-transition-fast); 863 900 border-radius: var(--bcx-radius-md); … … 865 902 866 903 svg { 867 width: 1 8px;868 height: 1 8px;904 width: 17px; 905 height: 17px; 869 906 stroke-width: 2; 870 907 display: block; … … 901 938 align-items: center; 902 939 justify-content: center; 903 width: 40px;904 height: 40px;940 width: 38px; 941 height: 38px; 905 942 position: relative; 906 943 transition: all var(--bcx-transition-fast); … … 909 946 910 947 svg { 911 width: 1 8px;912 height: 1 8px;948 width: 17px; 949 height: 17px; 913 950 stroke-width: 2; 914 951 display: block; … … 2996 3033 .bcx-widget__header { 2997 3034 border-radius: 0 !important; 3035 3036 h3 { 3037 font-size: 15px; 3038 } 3039 3040 .bcx-widget__header-subdescription { 3041 font-size: 13px; 3042 } 3043 3044 .bcx-widget__header-avatar { 3045 width: 34px; 3046 height: 34px; 3047 } 3048 3049 .bcx-widget__online-indicator { 3050 width: 9px; 3051 height: 9px; 3052 } 3053 } 3054 3055 .bcx-widget__header-close-mobile, 3056 .bcx-widget__dropdown-toggle, 3057 .bcx-widget__close { 3058 width: 36px; 3059 height: 36px; 3060 padding: 7px; 3061 } 3062 3063 .bcx-widget__header-close-mobile svg, 3064 .bcx-widget__dropdown-toggle svg { 3065 width: 16px; 3066 height: 16px; 3067 } 3068 3069 .bcx-widget__close svg { 3070 width: 18px; 3071 height: 18px; 2998 3072 } 2999 3073 -
bettercx-widget/trunk/src/services/theme.service.ts
r3479213 r3481851 122 122 123 123 /** 124 * Extract visible text content from the page using TreeWalker125 * Skips script/style/noscript/svg/code/pre elements and hidden elements126 */127 private getVisibleText(): string {128 if (!document.body) return '';129 130 const chunks: string[] = [];131 let totalLength = 0;132 const maxLength = 5000;133 134 const skipTags = new Set(['SCRIPT', 'STYLE', 'NOSCRIPT', 'SVG', 'CODE', 'PRE']);135 136 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, {137 acceptNode(node: Node): number {138 const parent = node.parentElement;139 if (!parent) return NodeFilter.FILTER_REJECT;140 if (skipTags.has(parent.tagName)) return NodeFilter.FILTER_REJECT;141 142 // Skip hidden elements143 try {144 const style = window.getComputedStyle(parent);145 if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {146 return NodeFilter.FILTER_REJECT;147 }148 } catch {149 // Skip if we can't compute style150 }151 152 return NodeFilter.FILTER_ACCEPT;153 },154 });155 156 let node: Node | null;157 while ((node = walker.nextNode()) && totalLength < maxLength) {158 const text = (node.textContent || '').trim();159 if (text.length > 0) {160 chunks.push(text);161 totalLength += text.length;162 }163 }164 165 const result = chunks.join(' ').substring(0, maxLength);166 167 // Fallback to textContent if TreeWalker returned nothing (e.g. jsdom)168 if (result.length === 0) {169 const fallback = (document.body.innerText || document.body.textContent || '').trim();170 return fallback.substring(0, maxLength);171 }172 173 return result;174 }175 176 /**177 124 * Apply widget configuration to CSS custom properties 178 125 */
Note: See TracChangeset
for help on using the changeset viewer.