@eshal-bot/chat-widget 0.2.53 → 0.2.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chat-widget-MarkdownRenderer-DqmoqLph.esm.js → chat-widget-MarkdownRenderer-ZdeOxy4H.esm.js} +3 -3
- package/dist/chat-widget-index-CWsNv0xr.esm.js +20 -0
- package/dist/chat-widget.esm.js +1 -1
- package/dist/chat-widget.js +796 -453
- package/dist/chat-widget.min.js +6 -6
- package/dist/chat-widget.umd.js +8 -8
- package/package.json +1 -1
- package/dist/chat-widget-index-bgKYLm2D.esm.js +0 -20
package/dist/chat-widget.js
CHANGED
|
@@ -7803,9 +7803,9 @@
|
|
|
7803
7803
|
m$1.hydrateRoot;
|
|
7804
7804
|
}
|
|
7805
7805
|
|
|
7806
|
-
var css_248z$1 = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.chat-widget-root{--cw-primary:#1d4ed8;--cw-primary-hover:#1e40af;--cw-status-success:160 84% 39%;--cw-status-success-bg:152 81% 96%;--cw-status-warning:35 100% 50%;--cw-status-warning-bg:34 100% 95%;--cw-status-error:350 89% 60%;--cw-status-error-bg:356 100% 97%;--cw-status-info:199 89% 48%;--cw-status-info-bg:204 100% 97%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chat-widget-root.dark{--cw-status-success:158 64% 52%;--cw-status-success-bg:152 36% 14%;--cw-status-warning:38 92% 60%;--cw-status-warning-bg:36 33% 14%;--cw-status-error:350 89% 65%;--cw-status-error-bg:356 33% 16%;--cw-status-info:199 89% 58%;--cw-status-info-bg:204 33% 14%}.\\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}#chat-widget-root .chat-widget-root *{box-sizing:border-box;margin:0;padding:0}#chat-widget-root .chat-messages::-webkit-scrollbar{width:6px}#chat-widget-root .chat-messages::-webkit-scrollbar-track{background:transparent}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb{background:rgba(156,163,175,.5);border-radius:10px}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(156,163,175,.7)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb{background:rgba(75,85,99,.5)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(75,85,99,.7)}#chat-widget-root .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}#chat-widget-root .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#chat-widget-root .invisible{visibility:hidden}#chat-widget-root .collapse{visibility:collapse}#chat-widget-root .static{position:static}#chat-widget-root .fixed{position:fixed}#chat-widget-root .absolute{position:absolute}#chat-widget-root .relative{position:relative}#chat-widget-root .sticky{position:sticky}#chat-widget-root .inset-0{inset:0}#chat-widget-root .-bottom-1\\/3{bottom:-33.333333%}#chat-widget-root .-left-\\[15\\%\\]{left:-15%}#chat-widget-root .-right-\\[15\\%\\]{right:-15%}#chat-widget-root .-top-8{top:-2rem}#chat-widget-root .bottom-0{bottom:0}#chat-widget-root .bottom-5{bottom:1.25rem}#chat-widget-root .bottom-full{bottom:100%}#chat-widget-root .left-0{left:0}#chat-widget-root .left-1\\/2{left:50%}#chat-widget-root .left-5{left:1.25rem}#chat-widget-root .left-\\[20\\%\\]{left:20%}#chat-widget-root .right-0{right:0}#chat-widget-root .right-5{right:1.25rem}#chat-widget-root .top-0{top:0}#chat-widget-root .top-1\\/2{top:50%}#chat-widget-root .top-5{top:1.25rem}#chat-widget-root .top-full{top:100%}#chat-widget-root .isolate{isolation:isolate}#chat-widget-root .z-10{z-index:10}#chat-widget-root .z-50{z-index:50}#chat-widget-root .z-\\[60\\]{z-index:60}#chat-widget-root .z-\\[70\\]{z-index:70}#chat-widget-root .z-\\[71\\]{z-index:71}#chat-widget-root .z-\\[999999\\]{z-index:999999}#chat-widget-root .z-\\[9999\\]{z-index:9999}#chat-widget-root .m-0{margin:0}#chat-widget-root .mx-2{margin-left:.5rem;margin-right:.5rem}#chat-widget-root .mx-3{margin-left:.75rem;margin-right:.75rem}#chat-widget-root .mx-5{margin-left:1.25rem;margin-right:1.25rem}#chat-widget-root .my-3{margin-bottom:.75rem;margin-top:.75rem}#chat-widget-root .my-4{margin-bottom:1rem;margin-top:1rem}#chat-widget-root .-mb-px{margin-bottom:-1px}#chat-widget-root .mb-0{margin-bottom:0}#chat-widget-root .mb-1{margin-bottom:.25rem}#chat-widget-root .mb-1\\.5{margin-bottom:.375rem}#chat-widget-root .mb-2{margin-bottom:.5rem}#chat-widget-root .mb-3{margin-bottom:.75rem}#chat-widget-root .mb-4{margin-bottom:1rem}#chat-widget-root .mb-5{margin-bottom:1.25rem}#chat-widget-root .ml-1{margin-left:.25rem}#chat-widget-root .ms-0\\.5{margin-inline-start:.125rem}#chat-widget-root .mt-0\\.5{margin-top:.125rem}#chat-widget-root .mt-1{margin-top:.25rem}#chat-widget-root .mt-1\\.5{margin-top:.375rem}#chat-widget-root .mt-2{margin-top:.5rem}#chat-widget-root .mt-3{margin-top:.75rem}#chat-widget-root .mt-4{margin-top:1rem}#chat-widget-root .block{display:block}#chat-widget-root .inline-block{display:inline-block}#chat-widget-root .inline{display:inline}#chat-widget-root .flex{display:flex}#chat-widget-root .inline-flex{display:inline-flex}#chat-widget-root .table{display:table}#chat-widget-root .grid{display:grid}#chat-widget-root .contents{display:contents}#chat-widget-root .hidden{display:none}#chat-widget-root .h-1\\.5{height:.375rem}#chat-widget-root .h-10{height:2.5rem}#chat-widget-root .h-11{height:2.75rem}#chat-widget-root .h-12{height:3rem}#chat-widget-root .h-16{height:4rem}#chat-widget-root .h-2{height:.5rem}#chat-widget-root .h-3{height:.75rem}#chat-widget-root .h-3\\.5{height:.875rem}#chat-widget-root .h-4{height:1rem}#chat-widget-root .h-5{height:1.25rem}#chat-widget-root .h-6{height:1.5rem}#chat-widget-root .h-7{height:1.75rem}#chat-widget-root .h-8{height:2rem}#chat-widget-root .h-\\[120\\%\\]{height:120%}#chat-widget-root .h-\\[130\\%\\]{height:130%}#chat-widget-root .h-\\[650px\\]{height:650px}#chat-widget-root .h-auto{height:auto}#chat-widget-root .h-full{height:100%}#chat-widget-root .h-px{height:1px}#chat-widget-root .max-h-\\[85vh\\]{max-height:85vh}#chat-widget-root .min-h-0{min-height:0}#chat-widget-root .min-h-\\[48px\\]{min-height:48px}#chat-widget-root .w-1\\.5{width:.375rem}#chat-widget-root .w-10{width:2.5rem}#chat-widget-root .w-11{width:2.75rem}#chat-widget-root .w-12{width:3rem}#chat-widget-root .w-16{width:4rem}#chat-widget-root .w-2{width:.5rem}#chat-widget-root .w-3{width:.75rem}#chat-widget-root .w-3\\.5{width:.875rem}#chat-widget-root .w-4{width:1rem}#chat-widget-root .w-44{width:11rem}#chat-widget-root .w-5{width:1.25rem}#chat-widget-root .w-6{width:1.5rem}#chat-widget-root .w-7{width:1.75rem}#chat-widget-root .w-8{width:2rem}#chat-widget-root .w-80{width:20rem}#chat-widget-root .w-96{width:24rem}#chat-widget-root .w-\\[380px\\]{width:380px}#chat-widget-root .w-\\[60\\%\\]{width:60%}#chat-widget-root .w-\\[70\\%\\]{width:70%}#chat-widget-root .w-full{width:100%}#chat-widget-root .min-w-0{min-width:0}#chat-widget-root .min-w-\\[60px\\]{min-width:60px}#chat-widget-root .min-w-full{min-width:100%}#chat-widget-root .max-w-\\[75\\%\\]{max-width:75%}#chat-widget-root .max-w-\\[92vw\\]{max-width:92vw}#chat-widget-root .max-w-full{max-width:100%}#chat-widget-root .max-w-none{max-width:none}#chat-widget-root .max-w-sm{max-width:24rem}#chat-widget-root .max-w-xs{max-width:20rem}#chat-widget-root .flex-1{flex:1 1 0%}#chat-widget-root .flex-shrink-0,#chat-widget-root .shrink-0{flex-shrink:0}#chat-widget-root .grow{flex-grow:1}#chat-widget-root .border-collapse{border-collapse:collapse}#chat-widget-root .origin-bottom{transform-origin:bottom}#chat-widget-root .-translate-x-1\\/2{--tw-translate-x:-50%}#chat-widget-root .-translate-x-1\\/2,#chat-widget-root .-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .-translate-y-1\\/2{--tw-translate-y:-50%}#chat-widget-root .-rotate-90{--tw-rotate:-90deg}#chat-widget-root .-rotate-90,#chat-widget-root .rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .rotate-180{--tw-rotate:180deg}#chat-widget-root .rotate-90{--tw-rotate:90deg}#chat-widget-root .rotate-90,#chat-widget-root .scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-0{--tw-scale-x:0;--tw-scale-y:0}#chat-widget-root .scale-100{--tw-scale-x:1;--tw-scale-y:1}#chat-widget-root .scale-100,#chat-widget-root .scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}#chat-widget-root .scale-125,#chat-widget-root .scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-95{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}#chat-widget-root .animate-bounce{animation:bounce 1s infinite}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}#chat-widget-root .animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}#chat-widget-root .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}#chat-widget-root .animate-spin{animation:spin 1s linear infinite}#chat-widget-root .animate-voice-glow{animation:voice-glow 7s ease-in-out infinite}@keyframes voice-glow{0%,to{transform:translate(0) scale(1)}50%{transform:translate(12%,-8%) scale(1.15)}}#chat-widget-root .animate-voice-glow-slow{animation:voice-glow 11s ease-in-out infinite reverse}#chat-widget-root .cursor-ew-resize{cursor:ew-resize}#chat-widget-root .cursor-nesw-resize{cursor:nesw-resize}#chat-widget-root .cursor-not-allowed{cursor:not-allowed}#chat-widget-root .cursor-ns-resize{cursor:ns-resize}#chat-widget-root .cursor-nwse-resize{cursor:nwse-resize}#chat-widget-root .cursor-pointer{cursor:pointer}#chat-widget-root .resize-none{resize:none}#chat-widget-root .resize{resize:both}#chat-widget-root .list-decimal{list-style-type:decimal}#chat-widget-root .list-disc{list-style-type:disc}#chat-widget-root .list-none{list-style-type:none}#chat-widget-root .flex-row{flex-direction:row}#chat-widget-root .flex-row-reverse{flex-direction:row-reverse}#chat-widget-root .flex-col{flex-direction:column}#chat-widget-root .flex-wrap{flex-wrap:wrap}#chat-widget-root .items-start{align-items:flex-start}#chat-widget-root .items-end{align-items:flex-end}#chat-widget-root .items-center{align-items:center}#chat-widget-root .justify-start{justify-content:flex-start}#chat-widget-root .justify-end{justify-content:flex-end}#chat-widget-root .justify-center{justify-content:center}#chat-widget-root .justify-between{justify-content:space-between}#chat-widget-root .gap-0{gap:0}#chat-widget-root .gap-0\\.5{gap:.125rem}#chat-widget-root .gap-1{gap:.25rem}#chat-widget-root .gap-1\\.5{gap:.375rem}#chat-widget-root .gap-10{gap:2.5rem}#chat-widget-root .gap-2{gap:.5rem}#chat-widget-root .gap-2\\.5{gap:.625rem}#chat-widget-root .gap-3{gap:.75rem}#chat-widget-root .gap-4{gap:1rem}#chat-widget-root .gap-6{gap:1.5rem}#chat-widget-root :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root .overflow-hidden{overflow:hidden}#chat-widget-root .overflow-visible{overflow:visible}#chat-widget-root .overflow-x-auto{overflow-x:auto}#chat-widget-root .overflow-y-auto{overflow-y:auto}#chat-widget-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#chat-widget-root .whitespace-nowrap{white-space:nowrap}#chat-widget-root .whitespace-pre-wrap{white-space:pre-wrap}#chat-widget-root .break-words{overflow-wrap:break-word}#chat-widget-root .break-all{word-break:break-all}#chat-widget-root .rounded{border-radius:.25rem}#chat-widget-root .rounded-2xl{border-radius:1rem}#chat-widget-root .rounded-3xl{border-radius:1.5rem}#chat-widget-root .rounded-full{border-radius:9999px}#chat-widget-root .rounded-lg{border-radius:.5rem}#chat-widget-root .rounded-md{border-radius:.375rem}#chat-widget-root .rounded-xl{border-radius:.75rem}#chat-widget-root .rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}#chat-widget-root .rounded-tl-sm{border-top-left-radius:.125rem}#chat-widget-root .rounded-tr-sm{border-top-right-radius:.125rem}#chat-widget-root .border{border-width:1px}#chat-widget-root .border-0{border-width:0}#chat-widget-root .border-b{border-bottom-width:1px}#chat-widget-root .border-l-4{border-left-width:4px}#chat-widget-root .border-t{border-top-width:1px}#chat-widget-root .border-t-2{border-top-width:2px}#chat-widget-root .border-solid{border-style:solid}#chat-widget-root .border-dotted{border-style:dotted}#chat-widget-root .border-none{border-style:none}#chat-widget-root .\\!border-status-error{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}#chat-widget-root .border-amber-700\\/50{border-color:rgba(180,83,9,.5)}#chat-widget-root .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}#chat-widget-root .border-blue-700\\/50{border-color:rgba(29,78,216,.5)}#chat-widget-root .border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200\\/60{border-color:rgba(229,231,235,.6)}#chat-widget-root .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700\\/50{border-color:rgba(55,65,81,.5)}#chat-widget-root .border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}#chat-widget-root .border-transparent{border-color:transparent}#chat-widget-root .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}#chat-widget-root .bg-amber-900\\/40{background-color:rgba(120,53,15,.4)}#chat-widget-root .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}#chat-widget-root .bg-current{background-color:currentColor}#chat-widget-root .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50\\/30{background-color:rgba(249,250,251,.3)}#chat-widget-root .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700\\/50{background-color:rgba(55,65,81,.5)}#chat-widget-root .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-800\\/50{background-color:rgba(31,41,55,.5)}#chat-widget-root .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}#chat-widget-root .bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}#chat-widget-root .bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}#chat-widget-root .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}#chat-widget-root .bg-slate-50\\/50{background-color:rgba(248,250,252,.5)}#chat-widget-root .bg-slate-800\\/50{background-color:rgba(30,41,59,.5)}#chat-widget-root .bg-status-success{background-color:hsl(var(--cw-status-success))}#chat-widget-root .bg-status-warning{background-color:hsl(var(--cw-status-warning))}#chat-widget-root .bg-transparent{background-color:transparent}#chat-widget-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-white\\/10{background-color:hsla(0,0%,100%,.1)}#chat-widget-root .bg-white\\/20{background-color:hsla(0,0%,100%,.2)}#chat-widget-root .bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}#chat-widget-root .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}#chat-widget-root .from-gray-50\\/50{--tw-gradient-from:rgba(249,250,251,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/0{--tw-gradient-from:hsla(0,0%,100%,0) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/10{--tw-gradient-from:hsla(0,0%,100%,.1) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-yellow-200{--tw-gradient-from:#fef08a var(--tw-gradient-from-position);--tw-gradient-to:hsla(53,98%,77%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .via-white\\/5{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.05) var(--tw-gradient-via-position),var(--tw-gradient-to)}#chat-widget-root .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}#chat-widget-root .to-white\\/10{--tw-gradient-to:hsla(0,0%,100%,.1) var(--tw-gradient-to-position)}#chat-widget-root .to-yellow-400{--tw-gradient-to:#facc15 var(--tw-gradient-to-position)}#chat-widget-root .object-contain{-o-object-fit:contain;object-fit:contain}#chat-widget-root .p-0{padding:0}#chat-widget-root .p-0\\.5{padding:.125rem}#chat-widget-root .p-3{padding:.75rem}#chat-widget-root .p-5{padding:1.25rem}#chat-widget-root .p-6{padding:1.5rem}#chat-widget-root .p-8{padding:2rem}#chat-widget-root .px-1{padding-left:.25rem;padding-right:.25rem}#chat-widget-root .px-2{padding-left:.5rem;padding-right:.5rem}#chat-widget-root .px-2\\.5{padding-left:.625rem;padding-right:.625rem}#chat-widget-root .px-3{padding-left:.75rem;padding-right:.75rem}#chat-widget-root .px-3\\.5{padding-left:.875rem;padding-right:.875rem}#chat-widget-root .px-4{padding-left:1rem;padding-right:1rem}#chat-widget-root .px-5{padding-left:1.25rem;padding-right:1.25rem}#chat-widget-root .py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}#chat-widget-root .py-1{padding-bottom:.25rem;padding-top:.25rem}#chat-widget-root .py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}#chat-widget-root .py-12{padding-bottom:3rem;padding-top:3rem}#chat-widget-root .py-2{padding-bottom:.5rem;padding-top:.5rem}#chat-widget-root .py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}#chat-widget-root .py-3{padding-bottom:.75rem;padding-top:.75rem}#chat-widget-root .py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}#chat-widget-root .py-4{padding-bottom:1rem;padding-top:1rem}#chat-widget-root .pb-1{padding-bottom:.25rem}#chat-widget-root .pb-2{padding-bottom:.5rem}#chat-widget-root .pb-6{padding-bottom:1.5rem}#chat-widget-root .pl-1{padding-left:.25rem}#chat-widget-root .pl-2{padding-left:.5rem}#chat-widget-root .pl-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pr-1{padding-right:.25rem}#chat-widget-root .pt-1{padding-top:.25rem}#chat-widget-root .pt-10{padding-top:2.5rem}#chat-widget-root .pt-3{padding-top:.75rem}#chat-widget-root .pt-4{padding-top:1rem}#chat-widget-root .text-left{text-align:left}#chat-widget-root .text-center{text-align:center}#chat-widget-root .text-right{text-align:right}#chat-widget-root .text-start{text-align:start}#chat-widget-root .align-text-bottom{vertical-align:text-bottom}#chat-widget-root .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}#chat-widget-root .text-2xl{font-size:1.5rem;line-height:2rem}#chat-widget-root .text-\\[10px\\]{font-size:10px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#chat-widget-root .text-chip{font-size:11px;letter-spacing:0;line-height:1.4}#chat-widget-root .text-h4{font-size:18px;letter-spacing:0;line-height:1.3}#chat-widget-root .text-lg{font-size:1.125rem;line-height:1.75rem}#chat-widget-root .text-sm{font-size:.875rem;line-height:1.25rem}#chat-widget-root .text-xl{font-size:1.25rem;line-height:1.75rem}#chat-widget-root .text-xs{font-size:.75rem;line-height:1rem}#chat-widget-root .font-bold{font-weight:700}#chat-widget-root .font-medium{font-weight:500}#chat-widget-root .font-semibold{font-weight:600}#chat-widget-root .uppercase{text-transform:uppercase}#chat-widget-root .lowercase{text-transform:lowercase}#chat-widget-root .italic{font-style:italic}#chat-widget-root .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}#chat-widget-root .leading-5{line-height:1.25rem}#chat-widget-root .leading-none{line-height:1}#chat-widget-root .leading-normal{line-height:1.5}#chat-widget-root .leading-relaxed{line-height:1.625}#chat-widget-root .leading-snug{line-height:1.375}#chat-widget-root .tracking-wide{letter-spacing:.025em}#chat-widget-root .text-\\[\\#4A5568\\]{--tw-text-opacity:1;color:rgb(74 85 104/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}#chat-widget-root .text-current{color:currentColor}#chat-widget-root .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500\\/80{color:hsla(220,9%,46%,.8)}#chat-widget-root .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}#chat-widget-root .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}#chat-widget-root .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}#chat-widget-root .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}#chat-widget-root .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#chat-widget-root .text-status-error{color:hsl(var(--cw-status-error))}#chat-widget-root .text-status-success{color:hsl(var(--cw-status-success))}#chat-widget-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#chat-widget-root .text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}#chat-widget-root .underline{text-decoration-line:underline}#chat-widget-root .no-underline{text-decoration-line:none}#chat-widget-root .placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .opacity-0{opacity:0}#chat-widget-root .opacity-50{opacity:.5}#chat-widget-root .opacity-60{opacity:.6}#chat-widget-root .opacity-70{opacity:.7}#chat-widget-root .opacity-75{opacity:.75}#chat-widget-root .opacity-80{opacity:.8}#chat-widget-root .opacity-90{opacity:.9}#chat-widget-root .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}#chat-widget-root .shadow,#chat-widget-root .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}#chat-widget-root .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}#chat-widget-root .shadow-lg,#chat-widget-root .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}#chat-widget-root .shadow-sm,#chat-widget-root .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .shadow-black\\/20{--tw-shadow-color:rgba(0,0,0,.2);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .shadow-gray-200\\/80{--tw-shadow-color:rgba(229,231,235,.8);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .outline-none{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .outline{outline-style:solid}#chat-widget-root .ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring,#chat-widget-root .ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity,1))}#chat-widget-root .ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}#chat-widget-root .ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}#chat-widget-root .blur{--tw-blur:blur(8px)}#chat-widget-root .blur,#chat-widget-root .blur-2xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .blur-2xl{--tw-blur:blur(40px)}#chat-widget-root .drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow,#chat-widget-root .drop-shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}#chat-widget-root .drop-shadow-sm,#chat-widget-root .grayscale-\\[0\\.3\\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .grayscale-\\[0\\.3\\]{--tw-grayscale:grayscale(0.3)}#chat-widget-root .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}#chat-widget-root .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-\\[opacity\\2c transform\\]{transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .duration-150{transition-duration:.15s}#chat-widget-root .duration-200{transition-duration:.2s}#chat-widget-root .duration-300{transition-duration:.3s}#chat-widget-root .duration-500{transition-duration:.5s}#chat-widget-root .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}#chat-widget-root :is(#chat-widget-root .animate-in){animation:slideIn .3s ease-out}#chat-widget-root :is(#chat-widget-root .transition-all){transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .\\[font-family\\:inherit\\]{font-family:inherit}#chat-widget-root .\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}#chat-widget-root .hover\\:scale-105:hover,#chat-widget-root .hover\\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-blue-500\\/20:hover{background-color:rgba(59,130,246,.2)}#chat-widget-root .hover\\:bg-blue-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-transparent:hover{background-color:transparent}#chat-widget-root .hover\\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:underline:hover{text-decoration-line:underline}#chat-widget-root .hover\\:opacity-80:hover{opacity:.8}#chat-widget-root .hover\\:opacity-90:hover{opacity:.9}#chat-widget-root .hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .hover\\:shadow-md:hover,#chat-widget-root .hover\\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .hover\\:grayscale-0:hover{--tw-grayscale:grayscale(0);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .focus\\:\\!border-status-error:focus{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .focus\\:border-\\[\\#5A6069\\]:focus{--tw-border-opacity:1;border-color:rgb(90 96 105/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:border-\\[\\#B0B0B0\\]:focus{--tw-border-opacity:1;border-color:rgb(176 176 176/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus\\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-0:focus,#chat-widget-root .focus\\:ring-1:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus\\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}#chat-widget-root .focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus-visible\\:ring-blue-700:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-primary:focus-visible{--tw-ring-color:var(--cw-primary,#1d4ed8)}#chat-widget-root .focus-visible\\:ring-red-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-white\\/40:focus-visible{--tw-ring-color:hsla(0,0%,100%,.4)}#chat-widget-root .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}#chat-widget-root .focus-visible\\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:#111827}#chat-widget-root .active\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .active\\:scale-95:active,#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{--tw-scale-x:0.97;--tw-scale-y:0.97}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active,#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{--tw-scale-x:0.99;--tw-scale-y:0.99}#chat-widget-root .active\\:outline-none:active{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .active\\:ring-0:active{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}#chat-widget-root .disabled\\:opacity-40:disabled{opacity:.4}#chat-widget-root .disabled\\:opacity-50:disabled{opacity:.5}#chat-widget-root .disabled\\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root :is(.group:hover .group-hover\\:scale-100){--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root :is(.group:hover .group-hover\\:opacity-100){opacity:1}#chat-widget-root .dark\\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .dark\\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}@media (min-width:768px){#chat-widget-root .md\\:text-sm{font-size:.875rem;line-height:1.25rem}}#chat-widget-root .rtl\\:rounded-tl-2xl:where([dir=rtl],[dir=rtl] *){border-top-left-radius:1rem}#chat-widget-root .rtl\\:rounded-tr-sm:where([dir=rtl],[dir=rtl] *){border-top-right-radius:.125rem}#chat-widget-root .\\[\\&\\:first-child\\]\\:\\!mt-0:first-child{margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:first-child\\]\\:\\!mt-0>:first-child){margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:last-child\\]\\:\\!mb-0>:last-child){margin-bottom:0!important}";
|
|
7806
|
+
var css_248z$1 = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.chat-widget-root{--cw-primary:#1d4ed8;--cw-primary-hover:#1e40af;--cw-status-success:160 84% 39%;--cw-status-success-bg:152 81% 96%;--cw-status-warning:35 100% 50%;--cw-status-warning-bg:34 100% 95%;--cw-status-error:350 89% 60%;--cw-status-error-bg:356 100% 97%;--cw-status-info:199 89% 48%;--cw-status-info-bg:204 100% 97%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.chat-widget-root.dark{--cw-status-success:158 64% 52%;--cw-status-success-bg:152 36% 14%;--cw-status-warning:38 92% 60%;--cw-status-warning-bg:36 33% 14%;--cw-status-error:350 89% 65%;--cw-status-error-bg:356 33% 16%;--cw-status-info:199 89% 58%;--cw-status-info-bg:204 33% 14%}.\\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}#chat-widget-root .chat-widget-root *{box-sizing:border-box;margin:0;padding:0}#chat-widget-root .chat-messages::-webkit-scrollbar{width:6px}#chat-widget-root .chat-messages::-webkit-scrollbar-track{background:transparent}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb{background:rgba(156,163,175,.5);border-radius:10px}#chat-widget-root .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(156,163,175,.7)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb{background:rgba(75,85,99,.5)}#chat-widget-root .dark .chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(75,85,99,.7)}#chat-widget-root .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}#chat-widget-root .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#chat-widget-root .invisible{visibility:hidden}#chat-widget-root .collapse{visibility:collapse}#chat-widget-root .static{position:static}#chat-widget-root .fixed{position:fixed}#chat-widget-root .absolute{position:absolute}#chat-widget-root .relative{position:relative}#chat-widget-root .sticky{position:sticky}#chat-widget-root .inset-0{inset:0}#chat-widget-root .-bottom-1\\/3{bottom:-33.333333%}#chat-widget-root .-left-\\[15\\%\\]{left:-15%}#chat-widget-root .-right-\\[15\\%\\]{right:-15%}#chat-widget-root .-top-8{top:-2rem}#chat-widget-root .bottom-0{bottom:0}#chat-widget-root .bottom-5{bottom:1.25rem}#chat-widget-root .bottom-full{bottom:100%}#chat-widget-root .left-0{left:0}#chat-widget-root .left-1\\/2{left:50%}#chat-widget-root .left-5{left:1.25rem}#chat-widget-root .left-\\[20\\%\\]{left:20%}#chat-widget-root .right-0{right:0}#chat-widget-root .right-5{right:1.25rem}#chat-widget-root .top-0{top:0}#chat-widget-root .top-1\\/2{top:50%}#chat-widget-root .top-5{top:1.25rem}#chat-widget-root .top-full{top:100%}#chat-widget-root .isolate{isolation:isolate}#chat-widget-root .z-10{z-index:10}#chat-widget-root .z-50{z-index:50}#chat-widget-root .z-\\[60\\]{z-index:60}#chat-widget-root .z-\\[70\\]{z-index:70}#chat-widget-root .z-\\[71\\]{z-index:71}#chat-widget-root .z-\\[999999\\]{z-index:999999}#chat-widget-root .z-\\[9999\\]{z-index:9999}#chat-widget-root .m-0{margin:0}#chat-widget-root .mx-2{margin-left:.5rem;margin-right:.5rem}#chat-widget-root .mx-3{margin-left:.75rem;margin-right:.75rem}#chat-widget-root .mx-5{margin-left:1.25rem;margin-right:1.25rem}#chat-widget-root .my-3{margin-bottom:.75rem;margin-top:.75rem}#chat-widget-root .my-4{margin-bottom:1rem;margin-top:1rem}#chat-widget-root .-mb-px{margin-bottom:-1px}#chat-widget-root .mb-0{margin-bottom:0}#chat-widget-root .mb-1{margin-bottom:.25rem}#chat-widget-root .mb-1\\.5{margin-bottom:.375rem}#chat-widget-root .mb-2{margin-bottom:.5rem}#chat-widget-root .mb-3{margin-bottom:.75rem}#chat-widget-root .mb-4{margin-bottom:1rem}#chat-widget-root .mb-5{margin-bottom:1.25rem}#chat-widget-root .ml-1{margin-left:.25rem}#chat-widget-root .ms-0\\.5{margin-inline-start:.125rem}#chat-widget-root .mt-0\\.5{margin-top:.125rem}#chat-widget-root .mt-1{margin-top:.25rem}#chat-widget-root .mt-1\\.5{margin-top:.375rem}#chat-widget-root .mt-2{margin-top:.5rem}#chat-widget-root .mt-3{margin-top:.75rem}#chat-widget-root .mt-4{margin-top:1rem}#chat-widget-root .block{display:block}#chat-widget-root .inline-block{display:inline-block}#chat-widget-root .inline{display:inline}#chat-widget-root .flex{display:flex}#chat-widget-root .inline-flex{display:inline-flex}#chat-widget-root .table{display:table}#chat-widget-root .grid{display:grid}#chat-widget-root .contents{display:contents}#chat-widget-root .hidden{display:none}#chat-widget-root .h-1\\.5{height:.375rem}#chat-widget-root .h-10{height:2.5rem}#chat-widget-root .h-11{height:2.75rem}#chat-widget-root .h-12{height:3rem}#chat-widget-root .h-16{height:4rem}#chat-widget-root .h-2{height:.5rem}#chat-widget-root .h-3{height:.75rem}#chat-widget-root .h-3\\.5{height:.875rem}#chat-widget-root .h-4{height:1rem}#chat-widget-root .h-5{height:1.25rem}#chat-widget-root .h-6{height:1.5rem}#chat-widget-root .h-7{height:1.75rem}#chat-widget-root .h-8{height:2rem}#chat-widget-root .h-\\[120\\%\\]{height:120%}#chat-widget-root .h-\\[130\\%\\]{height:130%}#chat-widget-root .h-\\[650px\\]{height:650px}#chat-widget-root .h-auto{height:auto}#chat-widget-root .h-full{height:100%}#chat-widget-root .h-px{height:1px}#chat-widget-root .max-h-\\[85vh\\]{max-height:85vh}#chat-widget-root .min-h-0{min-height:0}#chat-widget-root .min-h-\\[48px\\]{min-height:48px}#chat-widget-root .w-1\\.5{width:.375rem}#chat-widget-root .w-10{width:2.5rem}#chat-widget-root .w-11{width:2.75rem}#chat-widget-root .w-12{width:3rem}#chat-widget-root .w-16{width:4rem}#chat-widget-root .w-2{width:.5rem}#chat-widget-root .w-3{width:.75rem}#chat-widget-root .w-3\\.5{width:.875rem}#chat-widget-root .w-4{width:1rem}#chat-widget-root .w-44{width:11rem}#chat-widget-root .w-5{width:1.25rem}#chat-widget-root .w-6{width:1.5rem}#chat-widget-root .w-7{width:1.75rem}#chat-widget-root .w-8{width:2rem}#chat-widget-root .w-80{width:20rem}#chat-widget-root .w-96{width:24rem}#chat-widget-root .w-\\[380px\\]{width:380px}#chat-widget-root .w-\\[60\\%\\]{width:60%}#chat-widget-root .w-\\[70\\%\\]{width:70%}#chat-widget-root .w-full{width:100%}#chat-widget-root .min-w-0{min-width:0}#chat-widget-root .min-w-\\[60px\\]{min-width:60px}#chat-widget-root .min-w-full{min-width:100%}#chat-widget-root .max-w-\\[75\\%\\]{max-width:75%}#chat-widget-root .max-w-\\[92vw\\]{max-width:92vw}#chat-widget-root .max-w-full{max-width:100%}#chat-widget-root .max-w-none{max-width:none}#chat-widget-root .max-w-sm{max-width:24rem}#chat-widget-root .max-w-xs{max-width:20rem}#chat-widget-root .flex-1{flex:1 1 0%}#chat-widget-root .flex-shrink-0,#chat-widget-root .shrink-0{flex-shrink:0}#chat-widget-root .grow{flex-grow:1}#chat-widget-root .border-collapse{border-collapse:collapse}#chat-widget-root .origin-bottom{transform-origin:bottom}#chat-widget-root .-translate-x-1\\/2{--tw-translate-x:-50%}#chat-widget-root .-translate-x-1\\/2,#chat-widget-root .-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .-translate-y-1\\/2{--tw-translate-y:-50%}#chat-widget-root .-rotate-90{--tw-rotate:-90deg}#chat-widget-root .-rotate-90,#chat-widget-root .rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .rotate-180{--tw-rotate:180deg}#chat-widget-root .rotate-90{--tw-rotate:90deg}#chat-widget-root .rotate-90,#chat-widget-root .scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-0{--tw-scale-x:0;--tw-scale-y:0}#chat-widget-root .scale-100{--tw-scale-x:1;--tw-scale-y:1}#chat-widget-root .scale-100,#chat-widget-root .scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}#chat-widget-root .scale-125,#chat-widget-root .scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .scale-95{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}#chat-widget-root .animate-bounce{animation:bounce 1s infinite}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}#chat-widget-root .animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}#chat-widget-root .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}#chat-widget-root .animate-spin{animation:spin 1s linear infinite}#chat-widget-root .animate-voice-glow{animation:voice-glow 7s ease-in-out infinite}@keyframes voice-glow{0%,to{transform:translate(0) scale(1)}50%{transform:translate(12%,-8%) scale(1.15)}}#chat-widget-root .animate-voice-glow-slow{animation:voice-glow 11s ease-in-out infinite reverse}#chat-widget-root .cursor-ew-resize{cursor:ew-resize}#chat-widget-root .cursor-nesw-resize{cursor:nesw-resize}#chat-widget-root .cursor-not-allowed{cursor:not-allowed}#chat-widget-root .cursor-ns-resize{cursor:ns-resize}#chat-widget-root .cursor-nwse-resize{cursor:nwse-resize}#chat-widget-root .cursor-pointer{cursor:pointer}#chat-widget-root .resize-none{resize:none}#chat-widget-root .resize{resize:both}#chat-widget-root .list-decimal{list-style-type:decimal}#chat-widget-root .list-disc{list-style-type:disc}#chat-widget-root .list-none{list-style-type:none}#chat-widget-root .flex-row{flex-direction:row}#chat-widget-root .flex-row-reverse{flex-direction:row-reverse}#chat-widget-root .flex-col{flex-direction:column}#chat-widget-root .flex-wrap{flex-wrap:wrap}#chat-widget-root .items-start{align-items:flex-start}#chat-widget-root .items-end{align-items:flex-end}#chat-widget-root .items-center{align-items:center}#chat-widget-root .justify-start{justify-content:flex-start}#chat-widget-root .justify-end{justify-content:flex-end}#chat-widget-root .justify-center{justify-content:center}#chat-widget-root .justify-between{justify-content:space-between}#chat-widget-root .gap-0{gap:0}#chat-widget-root .gap-0\\.5{gap:.125rem}#chat-widget-root .gap-1{gap:.25rem}#chat-widget-root .gap-1\\.5{gap:.375rem}#chat-widget-root .gap-10{gap:2.5rem}#chat-widget-root .gap-2{gap:.5rem}#chat-widget-root .gap-2\\.5{gap:.625rem}#chat-widget-root .gap-3{gap:.75rem}#chat-widget-root :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}#chat-widget-root .overflow-hidden{overflow:hidden}#chat-widget-root .overflow-visible{overflow:visible}#chat-widget-root .overflow-x-auto{overflow-x:auto}#chat-widget-root .overflow-y-auto{overflow-y:auto}#chat-widget-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#chat-widget-root .whitespace-nowrap{white-space:nowrap}#chat-widget-root .whitespace-pre-wrap{white-space:pre-wrap}#chat-widget-root .break-words{overflow-wrap:break-word}#chat-widget-root .break-all{word-break:break-all}#chat-widget-root .rounded{border-radius:.25rem}#chat-widget-root .rounded-2xl{border-radius:1rem}#chat-widget-root .rounded-3xl{border-radius:1.5rem}#chat-widget-root .rounded-full{border-radius:9999px}#chat-widget-root .rounded-lg{border-radius:.5rem}#chat-widget-root .rounded-md{border-radius:.375rem}#chat-widget-root .rounded-xl{border-radius:.75rem}#chat-widget-root .rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}#chat-widget-root .rounded-tl-sm{border-top-left-radius:.125rem}#chat-widget-root .rounded-tr-sm{border-top-right-radius:.125rem}#chat-widget-root .border{border-width:1px}#chat-widget-root .border-0{border-width:0}#chat-widget-root .border-b{border-bottom-width:1px}#chat-widget-root .border-l-4{border-left-width:4px}#chat-widget-root .border-t{border-top-width:1px}#chat-widget-root .border-t-2{border-top-width:2px}#chat-widget-root .border-solid{border-style:solid}#chat-widget-root .border-dotted{border-style:dotted}#chat-widget-root .border-none{border-style:none}#chat-widget-root .\\!border-status-error{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}#chat-widget-root .border-amber-700\\/50{border-color:rgba(180,83,9,.5)}#chat-widget-root .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}#chat-widget-root .border-blue-700\\/50{border-color:rgba(29,78,216,.5)}#chat-widget-root .border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-200\\/60{border-color:rgba(229,231,235,.6)}#chat-widget-root .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}#chat-widget-root .border-gray-700\\/50{border-color:rgba(55,65,81,.5)}#chat-widget-root .border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}#chat-widget-root .border-transparent{border-color:transparent}#chat-widget-root .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}#chat-widget-root .bg-amber-900\\/40{background-color:rgba(120,53,15,.4)}#chat-widget-root .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}#chat-widget-root .bg-current{background-color:currentColor}#chat-widget-root .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-50\\/30{background-color:rgba(249,250,251,.3)}#chat-widget-root .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-700\\/50{background-color:rgba(55,65,81,.5)}#chat-widget-root .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}#chat-widget-root .bg-gray-800\\/50{background-color:rgba(31,41,55,.5)}#chat-widget-root .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}#chat-widget-root .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}#chat-widget-root .bg-status-success{background-color:hsl(var(--cw-status-success))}#chat-widget-root .bg-status-warning{background-color:hsl(var(--cw-status-warning))}#chat-widget-root .bg-transparent{background-color:transparent}#chat-widget-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .bg-white\\/10{background-color:hsla(0,0%,100%,.1)}#chat-widget-root .bg-white\\/20{background-color:hsla(0,0%,100%,.2)}#chat-widget-root .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}#chat-widget-root .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}#chat-widget-root .from-gray-50\\/50{--tw-gradient-from:rgba(249,250,251,.5) var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,250,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/0{--tw-gradient-from:hsla(0,0%,100%,0) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-white\\/10{--tw-gradient-from:hsla(0,0%,100%,.1) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .from-yellow-200{--tw-gradient-from:#fef08a var(--tw-gradient-from-position);--tw-gradient-to:hsla(53,98%,77%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}#chat-widget-root .via-white\\/5{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.05) var(--tw-gradient-via-position),var(--tw-gradient-to)}#chat-widget-root .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}#chat-widget-root .to-white\\/10{--tw-gradient-to:hsla(0,0%,100%,.1) var(--tw-gradient-to-position)}#chat-widget-root .to-yellow-400{--tw-gradient-to:#facc15 var(--tw-gradient-to-position)}#chat-widget-root .object-contain{-o-object-fit:contain;object-fit:contain}#chat-widget-root .p-0{padding:0}#chat-widget-root .p-0\\.5{padding:.125rem}#chat-widget-root .p-3{padding:.75rem}#chat-widget-root .p-5{padding:1.25rem}#chat-widget-root .p-6{padding:1.5rem}#chat-widget-root .p-8{padding:2rem}#chat-widget-root .px-1{padding-left:.25rem;padding-right:.25rem}#chat-widget-root .px-2{padding-left:.5rem;padding-right:.5rem}#chat-widget-root .px-2\\.5{padding-left:.625rem;padding-right:.625rem}#chat-widget-root .px-3{padding-left:.75rem;padding-right:.75rem}#chat-widget-root .px-3\\.5{padding-left:.875rem;padding-right:.875rem}#chat-widget-root .px-4{padding-left:1rem;padding-right:1rem}#chat-widget-root .px-5{padding-left:1.25rem;padding-right:1.25rem}#chat-widget-root .py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}#chat-widget-root .py-1{padding-bottom:.25rem;padding-top:.25rem}#chat-widget-root .py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}#chat-widget-root .py-12{padding-bottom:3rem;padding-top:3rem}#chat-widget-root .py-2{padding-bottom:.5rem;padding-top:.5rem}#chat-widget-root .py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}#chat-widget-root .py-3{padding-bottom:.75rem;padding-top:.75rem}#chat-widget-root .py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}#chat-widget-root .py-4{padding-bottom:1rem;padding-top:1rem}#chat-widget-root .pb-1{padding-bottom:.25rem}#chat-widget-root .pb-2{padding-bottom:.5rem}#chat-widget-root .pb-6{padding-bottom:1.5rem}#chat-widget-root .pl-1{padding-left:.25rem}#chat-widget-root .pl-2{padding-left:.5rem}#chat-widget-root .pl-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pr-1{padding-right:.25rem}#chat-widget-root .pt-1{padding-top:.25rem}#chat-widget-root .pt-10{padding-top:2.5rem}#chat-widget-root .pt-3{padding-top:.75rem}#chat-widget-root .pt-4{padding-top:1rem}#chat-widget-root .text-left{text-align:left}#chat-widget-root .text-center{text-align:center}#chat-widget-root .text-right{text-align:right}#chat-widget-root .text-start{text-align:start}#chat-widget-root .align-text-bottom{vertical-align:text-bottom}#chat-widget-root .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}#chat-widget-root .text-2xl{font-size:1.5rem;line-height:2rem}#chat-widget-root .text-\\[10px\\]{font-size:10px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#chat-widget-root .text-chip{font-size:11px;letter-spacing:0;line-height:1.4}#chat-widget-root .text-h4{font-size:18px;letter-spacing:0;line-height:1.3}#chat-widget-root .text-lg{font-size:1.125rem;line-height:1.75rem}#chat-widget-root .text-sm{font-size:.875rem;line-height:1.25rem}#chat-widget-root .text-xl{font-size:1.25rem;line-height:1.75rem}#chat-widget-root .text-xs{font-size:.75rem;line-height:1rem}#chat-widget-root .font-bold{font-weight:700}#chat-widget-root .font-medium{font-weight:500}#chat-widget-root .font-semibold{font-weight:600}#chat-widget-root .uppercase{text-transform:uppercase}#chat-widget-root .lowercase{text-transform:lowercase}#chat-widget-root .italic{font-style:italic}#chat-widget-root .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}#chat-widget-root .leading-5{line-height:1.25rem}#chat-widget-root .leading-none{line-height:1}#chat-widget-root .leading-normal{line-height:1.5}#chat-widget-root .leading-relaxed{line-height:1.625}#chat-widget-root .leading-snug{line-height:1.375}#chat-widget-root .tracking-wide{letter-spacing:.025em}#chat-widget-root .text-\\[\\#4A5568\\]{--tw-text-opacity:1;color:rgb(74 85 104/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}#chat-widget-root .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}#chat-widget-root .text-current{color:currentColor}#chat-widget-root .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}#chat-widget-root .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}#chat-widget-root .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}#chat-widget-root .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}#chat-widget-root .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}#chat-widget-root .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}#chat-widget-root .text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}#chat-widget-root .text-status-error{color:hsl(var(--cw-status-error))}#chat-widget-root .text-status-success{color:hsl(var(--cw-status-success))}#chat-widget-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}#chat-widget-root .text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}#chat-widget-root .underline{text-decoration-line:underline}#chat-widget-root .no-underline{text-decoration-line:none}#chat-widget-root .placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}#chat-widget-root .opacity-0{opacity:0}#chat-widget-root .opacity-50{opacity:.5}#chat-widget-root .opacity-60{opacity:.6}#chat-widget-root .opacity-70{opacity:.7}#chat-widget-root .opacity-75{opacity:.75}#chat-widget-root .opacity-80{opacity:.8}#chat-widget-root .opacity-90{opacity:.9}#chat-widget-root .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}#chat-widget-root .shadow,#chat-widget-root .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}#chat-widget-root .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}#chat-widget-root .shadow-lg,#chat-widget-root .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}#chat-widget-root .shadow-sm,#chat-widget-root .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .shadow-black\\/20{--tw-shadow-color:rgba(0,0,0,.2);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .shadow-gray-200\\/80{--tw-shadow-color:rgba(229,231,235,.8);--tw-shadow:var(--tw-shadow-colored)}#chat-widget-root .outline-none{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .outline{outline-style:solid}#chat-widget-root .ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring,#chat-widget-root .ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity,1))}#chat-widget-root .ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}#chat-widget-root .ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}#chat-widget-root .blur{--tw-blur:blur(8px)}#chat-widget-root .blur,#chat-widget-root .blur-2xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .blur-2xl{--tw-blur:blur(40px)}#chat-widget-root .drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}#chat-widget-root .drop-shadow-md,#chat-widget-root .drop-shadow-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}#chat-widget-root .grayscale-\\[0\\.3\\]{--tw-grayscale:grayscale(0.3)}#chat-widget-root .filter,#chat-widget-root .grayscale-\\[0\\.3\\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}#chat-widget-root .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-\\[opacity\\2c transform\\]{transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .duration-150{transition-duration:.15s}#chat-widget-root .duration-200{transition-duration:.2s}#chat-widget-root .duration-300{transition-duration:.3s}#chat-widget-root .duration-500{transition-duration:.5s}#chat-widget-root .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}#chat-widget-root :is(#chat-widget-root .animate-in){animation:slideIn .3s ease-out}#chat-widget-root :is(#chat-widget-root .transition-all){transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}#chat-widget-root .\\[font-family\\:inherit\\]{font-family:inherit}#chat-widget-root .\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#A2A9B2\\]::placeholder{--tw-text-opacity:1;color:rgb(162 169 178/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}#chat-widget-root .hover\\:scale-105:hover,#chat-widget-root .hover\\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}#chat-widget-root .hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .hover\\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}#chat-widget-root .hover\\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-blue-500\\/20:hover{background-color:rgba(59,130,246,.2)}#chat-widget-root .hover\\:bg-blue-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}#chat-widget-root .hover\\:bg-transparent:hover{background-color:transparent}#chat-widget-root .hover\\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}#chat-widget-root .hover\\:underline:hover{text-decoration-line:underline}#chat-widget-root .hover\\:opacity-80:hover{opacity:.8}#chat-widget-root .hover\\:opacity-90:hover{opacity:.9}#chat-widget-root .hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}#chat-widget-root .hover\\:shadow-md:hover,#chat-widget-root .hover\\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root .hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}#chat-widget-root .hover\\:grayscale-0:hover{--tw-grayscale:grayscale(0);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}#chat-widget-root .focus\\:\\!border-status-error:focus{border-color:hsl(var(--cw-status-error))!important}#chat-widget-root .focus\\:border-\\[\\#5A6069\\]:focus{--tw-border-opacity:1;border-color:rgb(90 96 105/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:border-\\[\\#B0B0B0\\]:focus{--tw-border-opacity:1;border-color:rgb(176 176 176/var(--tw-border-opacity,1))}#chat-widget-root .focus\\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}#chat-widget-root .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus\\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-0:focus,#chat-widget-root .focus\\:ring-1:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus\\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}#chat-widget-root .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}#chat-widget-root .focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .focus-visible\\:ring-blue-700:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-primary:focus-visible{--tw-ring-color:var(--cw-primary,#1d4ed8)}#chat-widget-root .focus-visible\\:ring-red-600:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity,1))}#chat-widget-root .focus-visible\\:ring-white\\/40:focus-visible{--tw-ring-color:hsla(0,0%,100%,.4)}#chat-widget-root .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}#chat-widget-root .focus-visible\\:ring-offset-gray-900:focus-visible{--tw-ring-offset-color:#111827}#chat-widget-root .active\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95}#chat-widget-root .active\\:scale-95:active,#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.97\\]:active{--tw-scale-x:0.97;--tw-scale-y:0.97}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#chat-widget-root .active\\:scale-\\[0\\.98\\]:active,#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root .active\\:scale-\\[0\\.99\\]:active{--tw-scale-x:0.99;--tw-scale-y:0.99}#chat-widget-root .active\\:outline-none:active{outline:2px solid transparent;outline-offset:2px}#chat-widget-root .active\\:ring-0:active{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#chat-widget-root .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}#chat-widget-root .disabled\\:opacity-40:disabled{opacity:.4}#chat-widget-root .disabled\\:opacity-50:disabled{opacity:.5}#chat-widget-root .disabled\\:shadow-none:disabled{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#chat-widget-root :is(.group:hover .group-hover\\:scale-100){--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#chat-widget-root :is(.group:hover .group-hover\\:opacity-100){opacity:1}#chat-widget-root .dark\\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}#chat-widget-root .dark\\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}@media (min-width:768px){#chat-widget-root .md\\:text-sm{font-size:.875rem;line-height:1.25rem}}#chat-widget-root .rtl\\:rounded-tl-2xl:where([dir=rtl],[dir=rtl] *){border-top-left-radius:1rem}#chat-widget-root .rtl\\:rounded-tr-sm:where([dir=rtl],[dir=rtl] *){border-top-right-radius:.125rem}#chat-widget-root .\\[\\&\\:first-child\\]\\:\\!mt-0:first-child{margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:first-child\\]\\:\\!mt-0>:first-child){margin-top:0!important}#chat-widget-root :is(.\\[\\&\\>\\*\\:last-child\\]\\:\\!mb-0>:last-child){margin-bottom:0!important}";
|
|
7807
7807
|
|
|
7808
|
-
var css_248z = ".chat-widget-root{position:fixed;z-index:999999}.chat-widget-container{color:var(--cw-text-color,inherit);font-family:var(\n --cw-font-family,-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",sans-serif\n )}#chat-widget-root .chat-messages p{overflow-wrap:anywhere;word-break:break-word}textarea#chat-widget-input::-moz-placeholder{border:none;line-height:48px;outline:none}textarea#chat-widget-input::placeholder{border:none;line-height:48px;outline:none}textarea#chat-widget-input{border:none;line-height:48px;outline:none}@keyframes slideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}#chat-widget-root .scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}#chat-widget-root .scrollbar-hide::-webkit-scrollbar{display:none}#chat-widget-root .slim-scrollbar-x{scrollbar-width:thin}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar{height:3px!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-track{background:transparent!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-thumb{background:#d1d5db!important;border-radius:2px!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-thumb:hover{background:#9ca3af!important}@media print{.chat-widget-root{display:none!important}}";
|
|
7808
|
+
var css_248z = ".chat-widget-root{position:fixed;z-index:999999}.chat-widget-container{color:var(--cw-text-color,inherit);font-family:var(\n --cw-font-family,-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",sans-serif\n )}#chat-widget-root .chat-messages p{overflow-wrap:anywhere;word-break:break-word}textarea#chat-widget-input::-moz-placeholder{border:none;line-height:48px;outline:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}textarea#chat-widget-input::placeholder{border:none;line-height:48px;outline:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}textarea#chat-widget-input{border:none;line-height:48px;outline:none}@keyframes slideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}#chat-widget-root .scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}#chat-widget-root .scrollbar-hide::-webkit-scrollbar{display:none}#chat-widget-root .slim-scrollbar-x{scrollbar-width:thin}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar{height:3px!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-track{background:transparent!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-thumb{background:#d1d5db!important;border-radius:2px!important}#chat-widget-root .slim-scrollbar-x::-webkit-scrollbar-thumb:hover{background:#9ca3af!important}@media print{.chat-widget-root{display:none!important}}";
|
|
7809
7809
|
|
|
7810
7810
|
/**
|
|
7811
7811
|
* SSE (Server-Sent Events) parsing utilities
|
|
@@ -12898,6 +12898,237 @@
|
|
|
12898
12898
|
callEndLabel: "Kết thúc"
|
|
12899
12899
|
}
|
|
12900
12900
|
};
|
|
12901
|
+
|
|
12902
|
+
// EV-4968 / EV-5040: the survey's thank-you, the line above a rating an agent
|
|
12903
|
+
// asked for, and the header menu's End chat. Kept as its own table, like
|
|
12904
|
+
// VOICE_CALL_TEXTS above, so every supported locale carries the full set.
|
|
12905
|
+
const SURVEY_TEXTS = {
|
|
12906
|
+
en: {
|
|
12907
|
+
surveyThanks: "Thank you for your feedback!",
|
|
12908
|
+
surveyRequestedNote: "Our agent has asked you to rate this conversation.",
|
|
12909
|
+
endChat: "End chat"
|
|
12910
|
+
},
|
|
12911
|
+
ar: {
|
|
12912
|
+
surveyThanks: "شكرًا لك على ملاحظاتك!",
|
|
12913
|
+
surveyRequestedNote: "طلب منك موظف الدعم تقييم هذه المحادثة.",
|
|
12914
|
+
endChat: "إنهاء المحادثة"
|
|
12915
|
+
},
|
|
12916
|
+
es: {
|
|
12917
|
+
surveyThanks: "¡Gracias por tus comentarios!",
|
|
12918
|
+
surveyRequestedNote: "Nuestro agente te ha pedido que valores esta conversación.",
|
|
12919
|
+
endChat: "Finalizar chat"
|
|
12920
|
+
},
|
|
12921
|
+
be: {
|
|
12922
|
+
surveyThanks: "Дзякуй за ваш водгук!",
|
|
12923
|
+
surveyRequestedNote: "Наш агент папрасіў вас ацаніць гэту размову.",
|
|
12924
|
+
endChat: "Завяршыць чат"
|
|
12925
|
+
},
|
|
12926
|
+
bs: {
|
|
12927
|
+
surveyThanks: "Hvala vam na povratnim informacijama!",
|
|
12928
|
+
surveyRequestedNote: "Naš agent vas je zamolio da ocijenite ovaj razgovor.",
|
|
12929
|
+
endChat: "Završi chat"
|
|
12930
|
+
},
|
|
12931
|
+
bg: {
|
|
12932
|
+
surveyThanks: "Благодарим ви за отзива!",
|
|
12933
|
+
surveyRequestedNote: "Нашият агент ви помоли да оцените този разговор.",
|
|
12934
|
+
endChat: "Приключи чата"
|
|
12935
|
+
},
|
|
12936
|
+
my: {
|
|
12937
|
+
surveyThanks: "သင့်အကြံပြုချက်အတွက် ကျေးဇူးတင်ပါသည်!",
|
|
12938
|
+
surveyRequestedNote: "ကျွန်ုပ်တို့၏ ကိုယ်စားလှယ်က ဤစကားဝိုင်းကို အဆင့်သတ်မှတ်ပေးရန် တောင်းဆိုထားပါသည်။",
|
|
12939
|
+
endChat: "ချတ် အဆုံးသတ်ပါ"
|
|
12940
|
+
},
|
|
12941
|
+
ca: {
|
|
12942
|
+
surveyThanks: "Gràcies pels teus comentaris!",
|
|
12943
|
+
surveyRequestedNote: "El nostre agent t'ha demanat que valoris aquesta conversa.",
|
|
12944
|
+
endChat: "Finalitza el xat"
|
|
12945
|
+
},
|
|
12946
|
+
zh: {
|
|
12947
|
+
surveyThanks: "感谢您的反馈!",
|
|
12948
|
+
surveyRequestedNote: "我们的客服请您为本次对话评分。",
|
|
12949
|
+
endChat: "结束聊天"
|
|
12950
|
+
},
|
|
12951
|
+
hr: {
|
|
12952
|
+
surveyThanks: "Hvala vam na povratnim informacijama!",
|
|
12953
|
+
surveyRequestedNote: "Naš vas je agent zamolio da ocijenite ovaj razgovor.",
|
|
12954
|
+
endChat: "Završi chat"
|
|
12955
|
+
},
|
|
12956
|
+
cs: {
|
|
12957
|
+
surveyThanks: "Děkujeme za vaši zpětnou vazbu!",
|
|
12958
|
+
surveyRequestedNote: "Náš agent vás požádal o hodnocení této konverzace.",
|
|
12959
|
+
endChat: "Ukončit chat"
|
|
12960
|
+
},
|
|
12961
|
+
da: {
|
|
12962
|
+
surveyThanks: "Tak for din feedback!",
|
|
12963
|
+
surveyRequestedNote: "Vores medarbejder har bedt dig om at bedømme denne samtale.",
|
|
12964
|
+
endChat: "Afslut chat"
|
|
12965
|
+
},
|
|
12966
|
+
nl: {
|
|
12967
|
+
surveyThanks: "Bedankt voor je feedback!",
|
|
12968
|
+
surveyRequestedNote: "Onze medewerker heeft je gevraagd dit gesprek te beoordelen.",
|
|
12969
|
+
endChat: "Chat beëindigen"
|
|
12970
|
+
},
|
|
12971
|
+
et: {
|
|
12972
|
+
surveyThanks: "Täname tagasiside eest!",
|
|
12973
|
+
surveyRequestedNote: "Meie klienditeenindaja palus teil seda vestlust hinnata.",
|
|
12974
|
+
endChat: "Lõpeta vestlus"
|
|
12975
|
+
},
|
|
12976
|
+
fi: {
|
|
12977
|
+
surveyThanks: "Kiitos palautteestasi!",
|
|
12978
|
+
surveyRequestedNote: "Asiakaspalvelijamme pyysi sinua arvioimaan tämän keskustelun.",
|
|
12979
|
+
endChat: "Lopeta keskustelu"
|
|
12980
|
+
},
|
|
12981
|
+
fr: {
|
|
12982
|
+
surveyThanks: "Merci pour vos commentaires !",
|
|
12983
|
+
surveyRequestedNote: "Notre agent vous a demandé d'évaluer cette conversation.",
|
|
12984
|
+
endChat: "Terminer le chat"
|
|
12985
|
+
},
|
|
12986
|
+
de: {
|
|
12987
|
+
surveyThanks: "Vielen Dank für Ihr Feedback!",
|
|
12988
|
+
surveyRequestedNote: "Unser Mitarbeiter hat Sie gebeten, dieses Gespräch zu bewerten.",
|
|
12989
|
+
endChat: "Chat beenden"
|
|
12990
|
+
},
|
|
12991
|
+
el: {
|
|
12992
|
+
surveyThanks: "Σας ευχαριστούμε για τα σχόλιά σας!",
|
|
12993
|
+
surveyRequestedNote: "Ο εκπρόσωπός μας σας ζήτησε να αξιολογήσετε αυτή τη συνομιλία.",
|
|
12994
|
+
endChat: "Τερματισμός συνομιλίας"
|
|
12995
|
+
},
|
|
12996
|
+
hi: {
|
|
12997
|
+
surveyThanks: "आपकी प्रतिक्रिया के लिए धन्यवाद!",
|
|
12998
|
+
surveyRequestedNote: "हमारे एजेंट ने आपसे इस बातचीत को रेट करने का अनुरोध किया है।",
|
|
12999
|
+
endChat: "चैट समाप्त करें"
|
|
13000
|
+
},
|
|
13001
|
+
mr: {
|
|
13002
|
+
surveyThanks: "आपल्या अभिप्रायाबद्दल धन्यवाद!",
|
|
13003
|
+
surveyRequestedNote: "आमच्या एजंटने आपल्याला या संभाषणाला रेटिंग देण्याची विनंती केली आहे.",
|
|
13004
|
+
endChat: "चॅट समाप्त करा"
|
|
13005
|
+
},
|
|
13006
|
+
hu: {
|
|
13007
|
+
surveyThanks: "Köszönjük a visszajelzését!",
|
|
13008
|
+
surveyRequestedNote: "Munkatársunk arra kérte, hogy értékelje ezt a beszélgetést.",
|
|
13009
|
+
endChat: "Csevegés befejezése"
|
|
13010
|
+
},
|
|
13011
|
+
is: {
|
|
13012
|
+
surveyThanks: "Takk fyrir endurgjöfina!",
|
|
13013
|
+
surveyRequestedNote: "Þjónustufulltrúi okkar hefur beðið þig að gefa þessu samtali einkunn.",
|
|
13014
|
+
endChat: "Ljúka spjalli"
|
|
13015
|
+
},
|
|
13016
|
+
id: {
|
|
13017
|
+
surveyThanks: "Terima kasih atas masukan Anda!",
|
|
13018
|
+
surveyRequestedNote: "Agen kami meminta Anda menilai percakapan ini.",
|
|
13019
|
+
endChat: "Akhiri obrolan"
|
|
13020
|
+
},
|
|
13021
|
+
it: {
|
|
13022
|
+
surveyThanks: "Grazie per il tuo feedback!",
|
|
13023
|
+
surveyRequestedNote: "Il nostro operatore ti ha chiesto di valutare questa conversazione.",
|
|
13024
|
+
endChat: "Termina chat"
|
|
13025
|
+
},
|
|
13026
|
+
ja: {
|
|
13027
|
+
surveyThanks: "フィードバックをありがとうございます!",
|
|
13028
|
+
surveyRequestedNote: "担当者がこの会話の評価をお願いしています。",
|
|
13029
|
+
endChat: "チャットを終了"
|
|
13030
|
+
},
|
|
13031
|
+
ko: {
|
|
13032
|
+
surveyThanks: "피드백을 주셔서 감사합니다!",
|
|
13033
|
+
surveyRequestedNote: "상담원이 이 대화에 대한 평가를 요청했습니다.",
|
|
13034
|
+
endChat: "채팅 종료"
|
|
13035
|
+
},
|
|
13036
|
+
lv: {
|
|
13037
|
+
surveyThanks: "Paldies par jūsu atsauksmi!",
|
|
13038
|
+
surveyRequestedNote: "Mūsu konsultants lūdza jūs novērtēt šo sarunu.",
|
|
13039
|
+
endChat: "Beigt tērzēšanu"
|
|
13040
|
+
},
|
|
13041
|
+
lt: {
|
|
13042
|
+
surveyThanks: "Dėkojame už jūsų atsiliepimą!",
|
|
13043
|
+
surveyRequestedNote: "Mūsų konsultantas paprašė jūsų įvertinti šį pokalbį.",
|
|
13044
|
+
endChat: "Baigti pokalbį"
|
|
13045
|
+
},
|
|
13046
|
+
mk: {
|
|
13047
|
+
surveyThanks: "Ви благодариме за повратните информации!",
|
|
13048
|
+
surveyRequestedNote: "Нашиот агент ве замоли да го оцените овој разговор.",
|
|
13049
|
+
endChat: "Заврши го разговорот"
|
|
13050
|
+
},
|
|
13051
|
+
ms: {
|
|
13052
|
+
surveyThanks: "Terima kasih atas maklum balas anda!",
|
|
13053
|
+
surveyRequestedNote: "Ejen kami meminta anda menilai perbualan ini.",
|
|
13054
|
+
endChat: "Tamatkan sembang"
|
|
13055
|
+
},
|
|
13056
|
+
no: {
|
|
13057
|
+
surveyThanks: "Takk for tilbakemeldingen!",
|
|
13058
|
+
surveyRequestedNote: "Vår medarbeider har bedt deg om å vurdere denne samtalen.",
|
|
13059
|
+
endChat: "Avslutt chat"
|
|
13060
|
+
},
|
|
13061
|
+
fa: {
|
|
13062
|
+
surveyThanks: "از بازخورد شما سپاسگزاریم!",
|
|
13063
|
+
surveyRequestedNote: "کارشناس ما از شما خواسته است به این گفتگو امتیاز دهید.",
|
|
13064
|
+
endChat: "پایان چت"
|
|
13065
|
+
},
|
|
13066
|
+
pl: {
|
|
13067
|
+
surveyThanks: "Dziękujemy za opinię!",
|
|
13068
|
+
surveyRequestedNote: "Nasz konsultant poprosił Cię o ocenę tej rozmowy.",
|
|
13069
|
+
endChat: "Zakończ czat"
|
|
13070
|
+
},
|
|
13071
|
+
pt: {
|
|
13072
|
+
surveyThanks: "Obrigado pelo seu feedback!",
|
|
13073
|
+
surveyRequestedNote: "Nosso atendente pediu que você avalie esta conversa.",
|
|
13074
|
+
endChat: "Encerrar chat"
|
|
13075
|
+
},
|
|
13076
|
+
ro: {
|
|
13077
|
+
surveyThanks: "Vă mulțumim pentru feedback!",
|
|
13078
|
+
surveyRequestedNote: "Agentul nostru v-a rugat să evaluați această conversație.",
|
|
13079
|
+
endChat: "Încheie chatul"
|
|
13080
|
+
},
|
|
13081
|
+
ru: {
|
|
13082
|
+
surveyThanks: "Спасибо за ваш отзыв!",
|
|
13083
|
+
surveyRequestedNote: "Наш специалист попросил вас оценить этот разговор.",
|
|
13084
|
+
endChat: "Завершить чат"
|
|
13085
|
+
},
|
|
13086
|
+
sr: {
|
|
13087
|
+
surveyThanks: "Hvala vam na povratnim informacijama!",
|
|
13088
|
+
surveyRequestedNote: "Naš agent vas je zamolio da ocenite ovaj razgovor.",
|
|
13089
|
+
endChat: "Završi ćaskanje"
|
|
13090
|
+
},
|
|
13091
|
+
sk: {
|
|
13092
|
+
surveyThanks: "Ďakujeme za vašu spätnú väzbu!",
|
|
13093
|
+
surveyRequestedNote: "Náš agent vás požiadal o ohodnotenie tohto rozhovoru.",
|
|
13094
|
+
endChat: "Ukončiť chat"
|
|
13095
|
+
},
|
|
13096
|
+
sl: {
|
|
13097
|
+
surveyThanks: "Hvala za vaše povratne informacije!",
|
|
13098
|
+
surveyRequestedNote: "Naš svetovalec vas je prosil, da ocenite ta pogovor.",
|
|
13099
|
+
endChat: "Končaj klepet"
|
|
13100
|
+
},
|
|
13101
|
+
sv: {
|
|
13102
|
+
surveyThanks: "Tack för din feedback!",
|
|
13103
|
+
surveyRequestedNote: "Vår medarbetare har bett dig betygsätta det här samtalet.",
|
|
13104
|
+
endChat: "Avsluta chatten"
|
|
13105
|
+
},
|
|
13106
|
+
th: {
|
|
13107
|
+
surveyThanks: "ขอบคุณสำหรับความคิดเห็นของคุณ!",
|
|
13108
|
+
surveyRequestedNote: "เจ้าหน้าที่ของเราขอให้คุณให้คะแนนการสนทนานี้",
|
|
13109
|
+
endChat: "จบการแชท"
|
|
13110
|
+
},
|
|
13111
|
+
tr: {
|
|
13112
|
+
surveyThanks: "Geri bildiriminiz için teşekkür ederiz!",
|
|
13113
|
+
surveyRequestedNote: "Temsilcimiz bu görüşmeyi değerlendirmenizi istedi.",
|
|
13114
|
+
endChat: "Sohbeti bitir"
|
|
13115
|
+
},
|
|
13116
|
+
uk: {
|
|
13117
|
+
surveyThanks: "Дякуємо за ваш відгук!",
|
|
13118
|
+
surveyRequestedNote: "Наш фахівець попросив вас оцінити цю розмову.",
|
|
13119
|
+
endChat: "Завершити чат"
|
|
13120
|
+
},
|
|
13121
|
+
ur: {
|
|
13122
|
+
surveyThanks: "آپ کی رائے کا شکریہ!",
|
|
13123
|
+
surveyRequestedNote: "ہمارے نمائندے نے آپ سے اس گفتگو کی درجہ بندی کرنے کی درخواست کی ہے۔",
|
|
13124
|
+
endChat: "چیٹ ختم کریں"
|
|
13125
|
+
},
|
|
13126
|
+
vi: {
|
|
13127
|
+
surveyThanks: "Cảm ơn bạn đã gửi phản hồi!",
|
|
13128
|
+
surveyRequestedNote: "Nhân viên của chúng tôi đã đề nghị bạn đánh giá cuộc trò chuyện này.",
|
|
13129
|
+
endChat: "Kết thúc trò chuyện"
|
|
13130
|
+
}
|
|
13131
|
+
};
|
|
12901
13132
|
const ONBOARDING_PLACEHOLDERS = {
|
|
12902
13133
|
en: {
|
|
12903
13134
|
onboardingNamePlaceholder: "Please enter your name",
|
|
@@ -13226,7 +13457,7 @@
|
|
|
13226
13457
|
const normalized = normalizeLocale(locale);
|
|
13227
13458
|
const dict = DICTIONARIES[normalized] || EN;
|
|
13228
13459
|
const onboarding = ONBOARDING_PLACEHOLDERS[normalized];
|
|
13229
|
-
return onboarding?.[key] ?? dict[key] ?? A11Y_LABELS[normalized]?.[key] ?? VOICE_CALL_TEXTS[normalized]?.[key] ?? ATTACHMENT_REJECTION_TEXTS[normalized]?.[key] ?? ONBOARDING_PLACEHOLDERS.en[key] ?? A11Y_LABELS.en[key] ?? VOICE_CALL_TEXTS.en[key] ?? ATTACHMENT_REJECTION_TEXTS.en[key] ?? EN[key] ?? key;
|
|
13460
|
+
return onboarding?.[key] ?? dict[key] ?? A11Y_LABELS[normalized]?.[key] ?? VOICE_CALL_TEXTS[normalized]?.[key] ?? SURVEY_TEXTS[normalized]?.[key] ?? ATTACHMENT_REJECTION_TEXTS[normalized]?.[key] ?? ONBOARDING_PLACEHOLDERS.en[key] ?? A11Y_LABELS.en[key] ?? VOICE_CALL_TEXTS.en[key] ?? SURVEY_TEXTS.en[key] ?? ATTACHMENT_REJECTION_TEXTS.en[key] ?? EN[key] ?? key;
|
|
13230
13461
|
}
|
|
13231
13462
|
function createTranslator(locale) {
|
|
13232
13463
|
const normalized = normalizeLocale(locale);
|
|
@@ -13512,7 +13743,8 @@
|
|
|
13512
13743
|
* Inbox (contentType human_reply, handoff_ack), the away and holding lines
|
|
13513
13744
|
* sent while the visitor waits for a person (handoff_wait, EV-4803; backend
|
|
13514
13745
|
* services/widgetHandoffLines.ts), the code card an agent sends with Request
|
|
13515
|
-
* verification (verification_request; backend services/verificationRequest.ts)
|
|
13746
|
+
* verification (verification_request; backend services/verificationRequest.ts),
|
|
13747
|
+
* a payment's outcome (payment_status; backend services/paymentEvents.ts)
|
|
13516
13748
|
* and a Skill's reply to a staff
|
|
13517
13749
|
* turn (staffTurn: Instruct Skill, or a hand-back that resumes the Skill;
|
|
13518
13750
|
* backend services/staffTurn.ts). Dev, 15 Oct 2026: a Skill reply sent while
|
|
@@ -13520,7 +13752,7 @@
|
|
|
13520
13752
|
* replies were merged. Mirrors packages/frontend/src/lib/messages/repliedOutsideStream.ts.
|
|
13521
13753
|
*/
|
|
13522
13754
|
function isRepliedOutsideStream(m) {
|
|
13523
|
-
return m?.contentType === 'human_reply' || m?.contentType === 'handoff_ack' || m?.contentType === 'handoff_wait' || m?.contentType === 'verification_request' || m?.staffTurn === true;
|
|
13755
|
+
return m?.contentType === 'human_reply' || m?.contentType === 'handoff_ack' || m?.contentType === 'handoff_wait' || m?.contentType === 'verification_request' || m?.contentType === 'payment_status' || m?.staffTurn === true;
|
|
13524
13756
|
}
|
|
13525
13757
|
|
|
13526
13758
|
/**
|
|
@@ -13532,6 +13764,84 @@
|
|
|
13532
13764
|
return m?.responder === 'ai' || m?.responder === 'human' ? m.responder : null;
|
|
13533
13765
|
}
|
|
13534
13766
|
|
|
13767
|
+
/**
|
|
13768
|
+
* Whether an agent reply put a payment link on the screen.
|
|
13769
|
+
*
|
|
13770
|
+
* Dev, 13 Nov 2026, Aurelia Airways: the agent held a booking and put the
|
|
13771
|
+
* secure payment link on the screen; the customer paid, and heard nothing until
|
|
13772
|
+
* they asked. A payment's outcome now reaches the conversation's event stream
|
|
13773
|
+
* (backend services/paymentEvents.ts, contentType payment_status). The widget
|
|
13774
|
+
* listens to that stream only once a person has the chat, so while a reply's
|
|
13775
|
+
* payment link is open it listens too, and the outcome shows the moment it
|
|
13776
|
+
* lands.
|
|
13777
|
+
*
|
|
13778
|
+
* The link rides an `eshal-ui` card the Skill writes: an action whose value is
|
|
13779
|
+
* the address ("Go to checkout", a Shopify cart; "Pay securely", a checkout
|
|
13780
|
+
* page). Mirrors services/voice-runtime/voice_runtime/payment_link.py `find`.
|
|
13781
|
+
*/
|
|
13782
|
+
|
|
13783
|
+
const FENCE = /```eshal-ui\s*([\s\S]*?)```/g;
|
|
13784
|
+
const PAY_WORDS = /\b(pay|pay now|payment|checkout|check out|purchase|complete (?:the )?(?:booking|order|purchase)|secure (?:payment|checkout)|place (?:the )?order)\b/i;
|
|
13785
|
+
const PAY_PATH = /(?:^|[/._?=&-])(pay|payment|payments|checkout|checkouts|cart|invoice)(?:$|[/._?=&-])/i;
|
|
13786
|
+
function cardsIn(content) {
|
|
13787
|
+
const cards = [];
|
|
13788
|
+
if (typeof content !== 'string' || !content.includes('eshal-ui')) return cards;
|
|
13789
|
+
for (const match of content.matchAll(FENCE)) {
|
|
13790
|
+
try {
|
|
13791
|
+
const parsed = JSON.parse(match[1].trim());
|
|
13792
|
+
if (Array.isArray(parsed)) cards.push(...parsed.filter(c => c && typeof c === 'object'));else if (parsed && typeof parsed === 'object') cards.push(parsed);
|
|
13793
|
+
} catch {
|
|
13794
|
+
/* not a card */
|
|
13795
|
+
}
|
|
13796
|
+
}
|
|
13797
|
+
return cards;
|
|
13798
|
+
}
|
|
13799
|
+
function actionsOf(card) {
|
|
13800
|
+
const own = Array.isArray(card.actions) ? card.actions.filter(a => a && typeof a === 'object') : [];
|
|
13801
|
+
const children = Array.isArray(card.children) ? card.children : Array.isArray(card.items) ? card.items : [];
|
|
13802
|
+
return own.concat(...children.filter(c => c && typeof c === 'object').map(actionsOf));
|
|
13803
|
+
}
|
|
13804
|
+
function addressOf(action) {
|
|
13805
|
+
for (const key of ['value', 'url', 'href', 'link']) {
|
|
13806
|
+
const v = action[key];
|
|
13807
|
+
if (typeof v === 'string' && /^https?:\/\//.test(v)) return v;
|
|
13808
|
+
}
|
|
13809
|
+
return null;
|
|
13810
|
+
}
|
|
13811
|
+
|
|
13812
|
+
/** True when the reply's text carries a card with a payment link. */
|
|
13813
|
+
function hasPaymentLink(content) {
|
|
13814
|
+
for (const card of cardsIn(content)) {
|
|
13815
|
+
const title = String(card.title || '');
|
|
13816
|
+
for (const action of actionsOf(card)) {
|
|
13817
|
+
const url = addressOf(action);
|
|
13818
|
+
if (!url) continue;
|
|
13819
|
+
let path = '';
|
|
13820
|
+
try {
|
|
13821
|
+
const u = new URL(url);
|
|
13822
|
+
path = `${u.pathname}?${u.search.replace(/^\?/, '')}`;
|
|
13823
|
+
} catch {
|
|
13824
|
+
continue;
|
|
13825
|
+
}
|
|
13826
|
+
if (PAY_WORDS.test(String(action.label || '')) || PAY_WORDS.test(title) || PAY_PATH.test(path)) return true;
|
|
13827
|
+
}
|
|
13828
|
+
}
|
|
13829
|
+
return false;
|
|
13830
|
+
}
|
|
13831
|
+
|
|
13832
|
+
/** True when the newest agent reply in the transcript put a payment link on the screen. */
|
|
13833
|
+
function awaitsPayment(messages) {
|
|
13834
|
+
if (!Array.isArray(messages)) return false;
|
|
13835
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
13836
|
+
const m = messages[i];
|
|
13837
|
+
if (m?.role !== 'assistant') continue;
|
|
13838
|
+
if (m?.metadata?.contentType === 'payment_status') return false; // the outcome is in
|
|
13839
|
+
if (m?.isProcessing) continue;
|
|
13840
|
+
return hasPaymentLink(m.content);
|
|
13841
|
+
}
|
|
13842
|
+
return false;
|
|
13843
|
+
}
|
|
13844
|
+
|
|
13535
13845
|
// EV-4048: human-agent identification in the widget transcript.
|
|
13536
13846
|
//
|
|
13537
13847
|
// A message pushed by a human agent (inbox reply / takeover) carries
|
|
@@ -13769,6 +14079,34 @@
|
|
|
13769
14079
|
return ONBOARDING_FIELD_ORDER[key] ?? 99;
|
|
13770
14080
|
};
|
|
13771
14081
|
|
|
14082
|
+
// The answers /support/onboarding stores: one per question, in field order
|
|
14083
|
+
// (name, email, phone, then the rest), blanks dropped.
|
|
14084
|
+
function onboardingPayload(questions, answers) {
|
|
14085
|
+
const sorted = [...(Array.isArray(questions) ? questions : [])].sort((a, b) => getOnboardingFieldOrder(a?.fieldType) - getOnboardingFieldOrder(b?.fieldType));
|
|
14086
|
+
const payload = {};
|
|
14087
|
+
for (const q of sorted) {
|
|
14088
|
+
const key = q?.fieldType || "question";
|
|
14089
|
+
const value = String(answers?.[key] ?? "").trim();
|
|
14090
|
+
if (value) payload[key] = value;
|
|
14091
|
+
}
|
|
14092
|
+
return payload;
|
|
14093
|
+
}
|
|
14094
|
+
|
|
14095
|
+
// EV-5040: after a survey the same visitor starts the next chat without the
|
|
14096
|
+
// onboarding form again. Returns the answers to send for that chat, or null
|
|
14097
|
+
// when the visitor is not kept: no keepVisitor request, onboarding not done,
|
|
14098
|
+
// or no answers in memory (they are never written to storage, so after a page
|
|
14099
|
+
// reload the form asks again rather than leave the chat unidentified).
|
|
14100
|
+
function carriedVisitorAnswers(opts, {
|
|
14101
|
+
onboardingCompleted,
|
|
14102
|
+
questions,
|
|
14103
|
+
answers
|
|
14104
|
+
} = {}) {
|
|
14105
|
+
if (opts?.keepVisitor !== true || !onboardingCompleted) return null;
|
|
14106
|
+
const payload = onboardingPayload(questions, answers);
|
|
14107
|
+
return Object.keys(payload).length > 0 ? payload : null;
|
|
14108
|
+
}
|
|
14109
|
+
|
|
13772
14110
|
const SESSION_KEY$1 = 'eshal_chat_session';
|
|
13773
14111
|
const SESSION_MSG_KEY = 'eshal_chat_session_messages';
|
|
13774
14112
|
// EV-4956: the ids of the messages a hand-off to the team came after (below).
|
|
@@ -14419,6 +14757,10 @@
|
|
|
14419
14757
|
const [pendingUserIntent, setPendingUserIntent] = reactExports.useState(null);
|
|
14420
14758
|
const [onboardingAnswers, setOnboardingAnswers] = reactExports.useState({});
|
|
14421
14759
|
const pendingIntentProcessedRef = reactExports.useRef(false);
|
|
14760
|
+
// EV-5040: a visitor kept across the reset after a survey:
|
|
14761
|
+
// { conversationId, answers, name }. Their onboarding answers go to the new
|
|
14762
|
+
// conversation with its first message (memory only, never storage).
|
|
14763
|
+
const carriedVisitorRef = reactExports.useRef(null);
|
|
14422
14764
|
|
|
14423
14765
|
// UX-M09: ref-based concurrency guard for sendMessage. The isLoading
|
|
14424
14766
|
// state alone is not sufficient - setState is batched async, so two
|
|
@@ -14795,6 +15137,14 @@
|
|
|
14795
15137
|
}
|
|
14796
15138
|
};
|
|
14797
15139
|
}, []);
|
|
15140
|
+
|
|
15141
|
+
// A reply's payment link is open: the conversation's stream is read for the
|
|
15142
|
+
// payment's outcome, so it shows the moment it lands (lib/paymentLink.js;
|
|
15143
|
+
// backend services/paymentEvents.ts). Dev, 13 Nov 2026, Aurelia: the customer
|
|
15144
|
+
// paid and was told only once they asked.
|
|
15145
|
+
reactExports.useEffect(() => {
|
|
15146
|
+
if (awaitsPayment(messages)) void startHandoffEventSource();
|
|
15147
|
+
}, [messages, startHandoffEventSource]);
|
|
14798
15148
|
const websocketUrl = reactExports.useMemo(() => {
|
|
14799
15149
|
if (!organizationId) return null;
|
|
14800
15150
|
const resolvedWsBaseUrl = getWebSocketUrl(apiBaseUrl, wsBaseUrl);
|
|
@@ -15378,6 +15728,24 @@
|
|
|
15378
15728
|
setInputValue("");
|
|
15379
15729
|
}
|
|
15380
15730
|
try {
|
|
15731
|
+
// EV-5040: the visitor kept across a post-survey reset. Their
|
|
15732
|
+
// onboarding answers reach the new conversation before its first
|
|
15733
|
+
// message does, so the Inbox still knows who it is; and only now,
|
|
15734
|
+
// so a visitor who rates and leaves opens no empty conversation.
|
|
15735
|
+
const carried = carriedVisitorRef.current;
|
|
15736
|
+
if (carried && carried.conversationId === bidiSessionId) {
|
|
15737
|
+
carriedVisitorRef.current = null;
|
|
15738
|
+
markOnboardingCompleted(organizationId, carried.name);
|
|
15739
|
+
try {
|
|
15740
|
+
await sendOnboardingAnswers(carried.answers, {
|
|
15741
|
+
conversationId: bidiSessionId,
|
|
15742
|
+
organizationId
|
|
15743
|
+
}, apiBaseUrl, getAuthToken);
|
|
15744
|
+
} catch (err) {
|
|
15745
|
+
console.error("[onboarding] failed to save onboarding answers", err);
|
|
15746
|
+
}
|
|
15747
|
+
}
|
|
15748
|
+
|
|
15381
15749
|
// Prepare chat request
|
|
15382
15750
|
const chatRequest = {
|
|
15383
15751
|
message: trimmed,
|
|
@@ -15740,13 +16108,7 @@
|
|
|
15740
16108
|
// /api/v1/support/onboarding writes directly - and the generated
|
|
15741
16109
|
// "answer" was thrown away either way (see sendMessage's userName/
|
|
15742
16110
|
// email/phone branch). A single fast upsert replaces all of that.
|
|
15743
|
-
const
|
|
15744
|
-
const payloadAnswers = {};
|
|
15745
|
-
for (const q of sorted) {
|
|
15746
|
-
const key = q.fieldType || "question";
|
|
15747
|
-
const value = (answers[key] ?? "").trim();
|
|
15748
|
-
if (value) payloadAnswers[key] = value;
|
|
15749
|
-
}
|
|
16111
|
+
const payloadAnswers = onboardingPayload(questions, answers);
|
|
15750
16112
|
if (Object.keys(payloadAnswers).length > 0 && apiBaseUrl && bidiSessionId) {
|
|
15751
16113
|
try {
|
|
15752
16114
|
await sendOnboardingAnswers(payloadAnswers, {
|
|
@@ -17103,7 +17465,16 @@
|
|
|
17103
17465
|
}, []);
|
|
17104
17466
|
|
|
17105
17467
|
// Reset entire conversation state after CSAT / closing - mirrors preview behaviour
|
|
17106
|
-
const resetConversation = reactExports.useCallback(
|
|
17468
|
+
const resetConversation = reactExports.useCallback(opts => {
|
|
17469
|
+
// EV-5040: after a survey ({ keepVisitor: true }) the same visitor goes
|
|
17470
|
+
// on: their answers are carried, not asked again. Null otherwise.
|
|
17471
|
+
const carriedAnswers = carriedVisitorAnswers(opts, {
|
|
17472
|
+
onboardingCompleted,
|
|
17473
|
+
questions: getOnboardingQuestions(onboardingQuestions),
|
|
17474
|
+
answers: onboardingAnswers
|
|
17475
|
+
});
|
|
17476
|
+
carriedVisitorRef.current = null;
|
|
17477
|
+
|
|
17107
17478
|
// Clear persisted session and prompt suggestions so the next mount starts fresh
|
|
17108
17479
|
clearSession$2(organizationId);
|
|
17109
17480
|
savePromptSuggestions(organizationId, []);
|
|
@@ -17140,10 +17511,13 @@
|
|
|
17140
17511
|
// Reset onboarding. Clear the name too - the new session (saveSession
|
|
17141
17512
|
// below writes a fresh record without it) will re-collect it, so the
|
|
17142
17513
|
// re-shown welcome stays generic until the user re-onboards.
|
|
17514
|
+
// EV-5040: a carried visitor keeps their answers, name and completed form.
|
|
17143
17515
|
setOnboardingActive(false);
|
|
17144
|
-
|
|
17145
|
-
|
|
17146
|
-
|
|
17516
|
+
if (!carriedAnswers) {
|
|
17517
|
+
setOnboardingCompleted(false);
|
|
17518
|
+
setOnboardingAnswers({});
|
|
17519
|
+
setOnboardingName("");
|
|
17520
|
+
}
|
|
17147
17521
|
setPendingUserIntent(null);
|
|
17148
17522
|
pendingIntentProcessedRef.current = false;
|
|
17149
17523
|
userHasSpokenRef.current = false;
|
|
@@ -17172,27 +17546,36 @@
|
|
|
17172
17546
|
})
|
|
17173
17547
|
});
|
|
17174
17548
|
setBidiSessionId(newSessionId);
|
|
17549
|
+
// EV-5040: the new session record does not say onboarding is done until
|
|
17550
|
+
// the first message sends the answers, so a reload before then asks again.
|
|
17551
|
+
if (carriedAnswers) {
|
|
17552
|
+
carriedVisitorRef.current = {
|
|
17553
|
+
conversationId: newSessionId,
|
|
17554
|
+
answers: carriedAnswers,
|
|
17555
|
+
name: onboardingName
|
|
17556
|
+
};
|
|
17557
|
+
}
|
|
17175
17558
|
|
|
17176
|
-
// Re-show the welcome message
|
|
17559
|
+
// Re-show the welcome message (EV-5040: still by name for a carried visitor)
|
|
17177
17560
|
if (welcomeMessage && welcomeMessage.trim() !== "") {
|
|
17178
17561
|
setMessages([{
|
|
17179
17562
|
...createMessage({
|
|
17180
17563
|
id: Date.now().toString(),
|
|
17181
17564
|
role: "assistant",
|
|
17182
|
-
content: welcomeMessage
|
|
17565
|
+
content: carriedAnswers ? personalizedWelcome : welcomeMessage
|
|
17183
17566
|
}),
|
|
17184
17567
|
isWelcome: true
|
|
17185
17568
|
}]);
|
|
17186
17569
|
}
|
|
17187
17570
|
|
|
17188
17571
|
// Re-trigger onboarding if enabled
|
|
17189
|
-
if (onboardingEnabled) {
|
|
17572
|
+
if (onboardingEnabled && !carriedAnswers) {
|
|
17190
17573
|
const questions = getOnboardingQuestions(onboardingQuestions);
|
|
17191
17574
|
if (questions.length > 0) {
|
|
17192
17575
|
setOnboardingActive(true);
|
|
17193
17576
|
}
|
|
17194
17577
|
}
|
|
17195
|
-
}, [organizationId, bidiSessionId, welcomeMessage, onboardingEnabled, onboardingQuestions, inactivityTimeoutValue, inactivityTimeoutUnit]);
|
|
17578
|
+
}, [organizationId, bidiSessionId, welcomeMessage, onboardingEnabled, onboardingQuestions, inactivityTimeoutValue, inactivityTimeoutUnit, onboardingCompleted, onboardingAnswers, onboardingName, personalizedWelcome]);
|
|
17196
17579
|
|
|
17197
17580
|
// Keep a stable ref to resetConversation so the timer effect does not need to
|
|
17198
17581
|
// list it as a dependency (avoids spurious re-runs - and spurious updateActivity
|
|
@@ -17539,7 +17922,7 @@
|
|
|
17539
17922
|
* See the LICENSE file in the root directory of this source tree.
|
|
17540
17923
|
*/
|
|
17541
17924
|
|
|
17542
|
-
const __iconNode$
|
|
17925
|
+
const __iconNode$o = [["path", {
|
|
17543
17926
|
d: "M2 10v3",
|
|
17544
17927
|
key: "1fnikh"
|
|
17545
17928
|
}], ["path", {
|
|
@@ -17558,7 +17941,7 @@
|
|
|
17558
17941
|
d: "M22 10v3",
|
|
17559
17942
|
key: "154ddg"
|
|
17560
17943
|
}]];
|
|
17561
|
-
const AudioLines = createLucideIcon("audio-lines", __iconNode$
|
|
17944
|
+
const AudioLines = createLucideIcon("audio-lines", __iconNode$o);
|
|
17562
17945
|
|
|
17563
17946
|
/**
|
|
17564
17947
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17567,11 +17950,11 @@
|
|
|
17567
17950
|
* See the LICENSE file in the root directory of this source tree.
|
|
17568
17951
|
*/
|
|
17569
17952
|
|
|
17570
|
-
const __iconNode$
|
|
17953
|
+
const __iconNode$n = [["path", {
|
|
17571
17954
|
d: "M20 6 9 17l-5-5",
|
|
17572
17955
|
key: "1gmf2c"
|
|
17573
17956
|
}]];
|
|
17574
|
-
const Check = createLucideIcon("check", __iconNode$
|
|
17957
|
+
const Check = createLucideIcon("check", __iconNode$n);
|
|
17575
17958
|
|
|
17576
17959
|
/**
|
|
17577
17960
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17580,11 +17963,11 @@
|
|
|
17580
17963
|
* See the LICENSE file in the root directory of this source tree.
|
|
17581
17964
|
*/
|
|
17582
17965
|
|
|
17583
|
-
const __iconNode$
|
|
17966
|
+
const __iconNode$m = [["path", {
|
|
17584
17967
|
d: "m15 18-6-6 6-6",
|
|
17585
17968
|
key: "1wnfg3"
|
|
17586
17969
|
}]];
|
|
17587
|
-
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$
|
|
17970
|
+
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$m);
|
|
17588
17971
|
|
|
17589
17972
|
/**
|
|
17590
17973
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17593,11 +17976,11 @@
|
|
|
17593
17976
|
* See the LICENSE file in the root directory of this source tree.
|
|
17594
17977
|
*/
|
|
17595
17978
|
|
|
17596
|
-
const __iconNode$
|
|
17979
|
+
const __iconNode$l = [["path", {
|
|
17597
17980
|
d: "m9 18 6-6-6-6",
|
|
17598
17981
|
key: "mthhwq"
|
|
17599
17982
|
}]];
|
|
17600
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
17983
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$l);
|
|
17601
17984
|
|
|
17602
17985
|
/**
|
|
17603
17986
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17606,7 +17989,7 @@
|
|
|
17606
17989
|
* See the LICENSE file in the root directory of this source tree.
|
|
17607
17990
|
*/
|
|
17608
17991
|
|
|
17609
|
-
const __iconNode$
|
|
17992
|
+
const __iconNode$k = [["circle", {
|
|
17610
17993
|
cx: "12",
|
|
17611
17994
|
cy: "12",
|
|
17612
17995
|
r: "10",
|
|
@@ -17624,7 +18007,7 @@
|
|
|
17624
18007
|
y2: "16",
|
|
17625
18008
|
key: "4dfq90"
|
|
17626
18009
|
}]];
|
|
17627
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
18010
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$k);
|
|
17628
18011
|
|
|
17629
18012
|
/**
|
|
17630
18013
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17633,7 +18016,25 @@
|
|
|
17633
18016
|
* See the LICENSE file in the root directory of this source tree.
|
|
17634
18017
|
*/
|
|
17635
18018
|
|
|
17636
|
-
const __iconNode$
|
|
18019
|
+
const __iconNode$j = [["circle", {
|
|
18020
|
+
cx: "12",
|
|
18021
|
+
cy: "12",
|
|
18022
|
+
r: "10",
|
|
18023
|
+
key: "1mglay"
|
|
18024
|
+
}], ["path", {
|
|
18025
|
+
d: "m9 12 2 2 4-4",
|
|
18026
|
+
key: "dzmm74"
|
|
18027
|
+
}]];
|
|
18028
|
+
const CircleCheck = createLucideIcon("circle-check", __iconNode$j);
|
|
18029
|
+
|
|
18030
|
+
/**
|
|
18031
|
+
* @license lucide-react v0.575.0 - ISC
|
|
18032
|
+
*
|
|
18033
|
+
* This source code is licensed under the ISC license.
|
|
18034
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
18035
|
+
*/
|
|
18036
|
+
|
|
18037
|
+
const __iconNode$i = [["rect", {
|
|
17637
18038
|
width: "14",
|
|
17638
18039
|
height: "14",
|
|
17639
18040
|
x: "8",
|
|
@@ -17645,7 +18046,7 @@
|
|
|
17645
18046
|
d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",
|
|
17646
18047
|
key: "zix9uf"
|
|
17647
18048
|
}]];
|
|
17648
|
-
const Copy = createLucideIcon("copy", __iconNode$
|
|
18049
|
+
const Copy = createLucideIcon("copy", __iconNode$i);
|
|
17649
18050
|
|
|
17650
18051
|
/**
|
|
17651
18052
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17654,7 +18055,7 @@
|
|
|
17654
18055
|
* See the LICENSE file in the root directory of this source tree.
|
|
17655
18056
|
*/
|
|
17656
18057
|
|
|
17657
|
-
const __iconNode$
|
|
18058
|
+
const __iconNode$h = [["circle", {
|
|
17658
18059
|
cx: "12",
|
|
17659
18060
|
cy: "12",
|
|
17660
18061
|
r: "1",
|
|
@@ -17670,7 +18071,7 @@
|
|
|
17670
18071
|
r: "1",
|
|
17671
18072
|
key: "1pcz8c"
|
|
17672
18073
|
}]];
|
|
17673
|
-
const Ellipsis = createLucideIcon("ellipsis", __iconNode$
|
|
18074
|
+
const Ellipsis = createLucideIcon("ellipsis", __iconNode$h);
|
|
17674
18075
|
|
|
17675
18076
|
/**
|
|
17676
18077
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17679,7 +18080,7 @@
|
|
|
17679
18080
|
* See the LICENSE file in the root directory of this source tree.
|
|
17680
18081
|
*/
|
|
17681
18082
|
|
|
17682
|
-
const __iconNode$
|
|
18083
|
+
const __iconNode$g = [["path", {
|
|
17683
18084
|
d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
|
|
17684
18085
|
key: "1oefj6"
|
|
17685
18086
|
}], ["path", {
|
|
@@ -17695,7 +18096,7 @@
|
|
|
17695
18096
|
d: "M16 17H8",
|
|
17696
18097
|
key: "z1uh3a"
|
|
17697
18098
|
}]];
|
|
17698
|
-
const FileText = createLucideIcon("file-text", __iconNode$
|
|
18099
|
+
const FileText = createLucideIcon("file-text", __iconNode$g);
|
|
17699
18100
|
|
|
17700
18101
|
/**
|
|
17701
18102
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17704,11 +18105,11 @@
|
|
|
17704
18105
|
* See the LICENSE file in the root directory of this source tree.
|
|
17705
18106
|
*/
|
|
17706
18107
|
|
|
17707
|
-
const __iconNode$
|
|
18108
|
+
const __iconNode$f = [["path", {
|
|
17708
18109
|
d: "M21 12a9 9 0 1 1-6.219-8.56",
|
|
17709
18110
|
key: "13zald"
|
|
17710
18111
|
}]];
|
|
17711
|
-
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$
|
|
18112
|
+
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$f);
|
|
17712
18113
|
|
|
17713
18114
|
/**
|
|
17714
18115
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17717,11 +18118,30 @@
|
|
|
17717
18118
|
* See the LICENSE file in the root directory of this source tree.
|
|
17718
18119
|
*/
|
|
17719
18120
|
|
|
17720
|
-
const __iconNode$
|
|
18121
|
+
const __iconNode$e = [["path", {
|
|
17721
18122
|
d: "M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",
|
|
17722
18123
|
key: "1sd12s"
|
|
17723
18124
|
}]];
|
|
17724
|
-
const MessageCircle = createLucideIcon("message-circle", __iconNode$
|
|
18125
|
+
const MessageCircle = createLucideIcon("message-circle", __iconNode$e);
|
|
18126
|
+
|
|
18127
|
+
/**
|
|
18128
|
+
* @license lucide-react v0.575.0 - ISC
|
|
18129
|
+
*
|
|
18130
|
+
* This source code is licensed under the ISC license.
|
|
18131
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
18132
|
+
*/
|
|
18133
|
+
|
|
18134
|
+
const __iconNode$d = [["path", {
|
|
18135
|
+
d: "M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",
|
|
18136
|
+
key: "18887p"
|
|
18137
|
+
}], ["path", {
|
|
18138
|
+
d: "m14.5 8.5-5 5",
|
|
18139
|
+
key: "19tnj2"
|
|
18140
|
+
}], ["path", {
|
|
18141
|
+
d: "m9.5 8.5 5 5",
|
|
18142
|
+
key: "1oa8ql"
|
|
18143
|
+
}]];
|
|
18144
|
+
const MessageSquareX = createLucideIcon("message-square-x", __iconNode$d);
|
|
17725
18145
|
|
|
17726
18146
|
/**
|
|
17727
18147
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -22514,6 +22934,9 @@
|
|
|
22514
22934
|
officeHours = null,
|
|
22515
22935
|
onRefreshChat,
|
|
22516
22936
|
onCopyChat,
|
|
22937
|
+
// EV-5040: End chat opens the end-of-chat survey without closing the
|
|
22938
|
+
// widget. Shown only when given (the survey is on and there is a chat).
|
|
22939
|
+
onEndChat,
|
|
22517
22940
|
defaultLanguage = "en",
|
|
22518
22941
|
// EV-4956: the team owns the conversation. The subtitle then says so, so
|
|
22519
22942
|
// the header no longer looks exactly as it did while the AI was answering.
|
|
@@ -22771,7 +23194,26 @@
|
|
|
22771
23194
|
}) : /*#__PURE__*/jsxRuntimeExports.jsx(Moon, {
|
|
22772
23195
|
className: "w-3.5 h-3.5 flex-shrink-0"
|
|
22773
23196
|
}), isDark ? t("lightMode") : t("nightMode")]
|
|
22774
|
-
})
|
|
23197
|
+
}), onEndChat ? /*#__PURE__*/jsxRuntimeExports.jsxs("button", {
|
|
23198
|
+
role: "menuitem",
|
|
23199
|
+
onClick: () => {
|
|
23200
|
+
setShowMenu(false);
|
|
23201
|
+
onEndChat();
|
|
23202
|
+
},
|
|
23203
|
+
className: `flex items-center gap-2.5 w-full px-3 py-2 text-sm leading-5 transition-colors cursor-pointer ${isDark ? "text-gray-200 hover:bg-gray-700" : "text-gray-700 hover:bg-gray-50"}`,
|
|
23204
|
+
style: {
|
|
23205
|
+
fontFamily: resolvedHeaderFontFamily,
|
|
23206
|
+
fontSize: "14px",
|
|
23207
|
+
border: "none",
|
|
23208
|
+
background: "transparent",
|
|
23209
|
+
appearance: "none",
|
|
23210
|
+
WebkitAppearance: "none",
|
|
23211
|
+
textAlign: isRtl ? "right" : "left"
|
|
23212
|
+
},
|
|
23213
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx(MessageSquareX, {
|
|
23214
|
+
className: "w-3.5 h-3.5 flex-shrink-0"
|
|
23215
|
+
}), t("endChat")]
|
|
23216
|
+
}) : null]
|
|
22775
23217
|
})]
|
|
22776
23218
|
}), /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
22777
23219
|
type: "button",
|
|
@@ -23641,191 +24083,192 @@
|
|
|
23641
24083
|
}, [containerRef, enabled, threshold, behavior, delay, ...dependencies]);
|
|
23642
24084
|
}
|
|
23643
24085
|
|
|
23644
|
-
const
|
|
23645
|
-
|
|
23646
|
-
|
|
23647
|
-
|
|
23648
|
-
|
|
23649
|
-
|
|
23650
|
-
|
|
23651
|
-
|
|
23652
|
-
|
|
23653
|
-
|
|
23654
|
-
|
|
23655
|
-
bg: "bg-yellow-200"
|
|
23656
|
-
}, {
|
|
23657
|
-
value: "😊",
|
|
23658
|
-
label: "😊",
|
|
23659
|
-
bg: "bg-green-200"
|
|
23660
|
-
}, {
|
|
23661
|
-
value: "😍",
|
|
23662
|
-
label: "😍",
|
|
23663
|
-
bg: "bg-pink-200"
|
|
23664
|
-
}];
|
|
23665
|
-
const THUMBS_RATINGS = [{
|
|
24086
|
+
const normalizeCsatFormat = format => {
|
|
24087
|
+
const raw = (format || "EMOJI").toString().trim().toUpperCase();
|
|
24088
|
+
if (raw === "THUMBS" || raw === "THUMB") return "THUMBS";
|
|
24089
|
+
if (raw === "STARS" || raw === "STAR") return "STARS";
|
|
24090
|
+
if (raw === "NUMERIC" || raw === "NUMBER") return "NUMERIC";
|
|
24091
|
+
return "EMOJI";
|
|
24092
|
+
};
|
|
24093
|
+
const SCALE = ["1", "2", "3", "4", "5"];
|
|
24094
|
+
// Same faces in the same order as EV-3616 settled on.
|
|
24095
|
+
const EMOJI_FACES = ["😡", "😕", "😐", "😊", "😍"];
|
|
24096
|
+
const THUMBS = [{
|
|
23666
24097
|
value: "positive",
|
|
23667
|
-
|
|
24098
|
+
glyph: "👍",
|
|
24099
|
+
labelKey: "thumbsUp"
|
|
23668
24100
|
}, {
|
|
23669
24101
|
value: "negative",
|
|
23670
|
-
|
|
23671
|
-
|
|
23672
|
-
const NUMERIC_RATINGS = [{
|
|
23673
|
-
value: "1",
|
|
23674
|
-
label: "1"
|
|
23675
|
-
}, {
|
|
23676
|
-
value: "2",
|
|
23677
|
-
label: "2"
|
|
23678
|
-
}, {
|
|
23679
|
-
value: "3",
|
|
23680
|
-
label: "3"
|
|
23681
|
-
}, {
|
|
23682
|
-
value: "4",
|
|
23683
|
-
label: "4"
|
|
23684
|
-
}, {
|
|
23685
|
-
value: "5",
|
|
23686
|
-
label: "5"
|
|
23687
|
-
}];
|
|
23688
|
-
const STARS_RATINGS = [{
|
|
23689
|
-
value: "1",
|
|
23690
|
-
label: "⭐"
|
|
23691
|
-
}, {
|
|
23692
|
-
value: "2",
|
|
23693
|
-
label: "⭐"
|
|
23694
|
-
}, {
|
|
23695
|
-
value: "3",
|
|
23696
|
-
label: "⭐"
|
|
23697
|
-
}, {
|
|
23698
|
-
value: "4",
|
|
23699
|
-
label: "⭐"
|
|
23700
|
-
}, {
|
|
23701
|
-
value: "5",
|
|
23702
|
-
label: "⭐"
|
|
24102
|
+
glyph: "👎",
|
|
24103
|
+
labelKey: "thumbsDown"
|
|
23703
24104
|
}];
|
|
24105
|
+
const FOCUS_RING = "focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-700";
|
|
24106
|
+
const DISABLED = "disabled:opacity-50 disabled:cursor-not-allowed";
|
|
23704
24107
|
const CSATWidget = ({
|
|
23705
24108
|
format = "EMOJI",
|
|
23706
|
-
prompt
|
|
23707
|
-
|
|
23708
|
-
|
|
24109
|
+
prompt,
|
|
24110
|
+
// EV-4968: a short line above the question (why it appeared).
|
|
24111
|
+
note,
|
|
24112
|
+
// (rating, format, feedback) => Promise<boolean>: true once stored.
|
|
24113
|
+
onSubmit,
|
|
24114
|
+
// EV-4968 / EV-5040: show the thank-you instead of the form.
|
|
24115
|
+
submitted = false,
|
|
24116
|
+
// Renders "Back to chat" when given (the end-of-chat survey).
|
|
24117
|
+
onBack,
|
|
23709
24118
|
isDark = false,
|
|
23710
24119
|
primaryColor = "#2563eb",
|
|
23711
|
-
defaultLanguage = "en"
|
|
24120
|
+
defaultLanguage = "en",
|
|
24121
|
+
id = "csat"
|
|
23712
24122
|
}) => {
|
|
23713
24123
|
const t = reactExports.useMemo(() => createTranslator(defaultLanguage), [defaultLanguage]);
|
|
23714
|
-
const
|
|
23715
|
-
const [
|
|
23716
|
-
const [
|
|
23717
|
-
const
|
|
23718
|
-
|
|
23719
|
-
|
|
23720
|
-
|
|
23721
|
-
|
|
23722
|
-
|
|
23723
|
-
|
|
23724
|
-
|
|
23725
|
-
|
|
23726
|
-
|
|
23727
|
-
|
|
24124
|
+
const kind = normalizeCsatFormat(format);
|
|
24125
|
+
const [rating, setRating] = reactExports.useState(null);
|
|
24126
|
+
const [hovered, setHovered] = reactExports.useState(null);
|
|
24127
|
+
const [feedback, setFeedback] = reactExports.useState("");
|
|
24128
|
+
const [status, setStatus] = reactExports.useState("idle");
|
|
24129
|
+
const submitting = status === "submitting";
|
|
24130
|
+
const hintId = `${id}-rating-hint`;
|
|
24131
|
+
const cardClass = cn("w-full rounded-3xl p-6 shadow-lg [font-family:inherit]", isDark ? "bg-gray-800 shadow-black/20" : "bg-white shadow-gray-200/80");
|
|
24132
|
+
if (submitted) {
|
|
24133
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24134
|
+
className: cardClass,
|
|
24135
|
+
role: "status",
|
|
24136
|
+
"data-testid": "csat-thanks",
|
|
24137
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
24138
|
+
className: "flex flex-col items-center gap-2 text-center",
|
|
24139
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx(CircleCheck, {
|
|
24140
|
+
className: "w-8 h-8",
|
|
24141
|
+
style: {
|
|
24142
|
+
color: primaryColor
|
|
24143
|
+
},
|
|
24144
|
+
"aria-hidden": "true"
|
|
24145
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
24146
|
+
className: cn("text-sm font-medium", isDark ? "text-gray-200" : "text-gray-700"),
|
|
24147
|
+
children: t("surveyThanks")
|
|
24148
|
+
})]
|
|
24149
|
+
})
|
|
24150
|
+
});
|
|
24151
|
+
}
|
|
24152
|
+
const handleSubmit = async () => {
|
|
24153
|
+
if (!rating || submitting) return;
|
|
24154
|
+
setStatus("submitting");
|
|
24155
|
+
let ok = false;
|
|
24156
|
+
try {
|
|
24157
|
+
ok = Boolean(await onSubmit?.(rating, kind, feedback.trim()));
|
|
24158
|
+
} catch {
|
|
24159
|
+
ok = false;
|
|
23728
24160
|
}
|
|
24161
|
+
setStatus(ok ? "idle" : "failed");
|
|
23729
24162
|
};
|
|
23730
|
-
const
|
|
23731
|
-
|
|
23732
|
-
|
|
23733
|
-
|
|
23734
|
-
|
|
23735
|
-
|
|
23736
|
-
|
|
23737
|
-
|
|
23738
|
-
|
|
23739
|
-
|
|
24163
|
+
const optionProps = (value, label) => ({
|
|
24164
|
+
type: "button",
|
|
24165
|
+
"aria-label": label,
|
|
24166
|
+
"aria-pressed": rating === value,
|
|
24167
|
+
onClick: () => setRating(value),
|
|
24168
|
+
disabled: submitting
|
|
24169
|
+
});
|
|
24170
|
+
const renderScale = () => {
|
|
24171
|
+
if (kind === "THUMBS") {
|
|
24172
|
+
return THUMBS.map(item => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24173
|
+
...optionProps(item.value, t(item.labelKey)),
|
|
24174
|
+
className: cn("w-12 h-12 rounded-xl border flex items-center justify-center text-2xl transition-all hover:scale-105 active:scale-95", FOCUS_RING, DISABLED, rating === item.value ? "ring-2 ring-blue-300 scale-110 shadow-lg" : "", isDark ? "bg-gray-700 border-gray-600 hover:bg-gray-600" : "bg-white border-gray-200 hover:bg-gray-50"),
|
|
24175
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
24176
|
+
className: "drop-shadow-md",
|
|
24177
|
+
"aria-hidden": "true",
|
|
24178
|
+
children: item.glyph
|
|
24179
|
+
})
|
|
24180
|
+
}, item.value));
|
|
24181
|
+
}
|
|
24182
|
+
if (kind === "NUMERIC") {
|
|
24183
|
+
return SCALE.map(value => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24184
|
+
...optionProps(value, `${t("rate")} ${value}`),
|
|
24185
|
+
className: cn("w-10 h-10 rounded-lg flex items-center justify-center text-sm font-semibold transition-all hover:scale-105 active:scale-95", FOCUS_RING, DISABLED, rating === value ? "ring-2 ring-primary/40 scale-110 shadow-md text-white" : isDark ? "bg-gray-700 border border-gray-600 text-gray-300 hover:bg-gray-600" : "bg-white border border-gray-200 text-gray-700 hover:bg-gray-50"),
|
|
24186
|
+
style: rating === value ? {
|
|
24187
|
+
backgroundColor: primaryColor,
|
|
24188
|
+
borderColor: primaryColor
|
|
24189
|
+
} : undefined,
|
|
24190
|
+
children: value
|
|
24191
|
+
}, value));
|
|
24192
|
+
}
|
|
24193
|
+
if (kind === "STARS") {
|
|
24194
|
+
const lit = Number(hovered || rating || 0);
|
|
24195
|
+
return SCALE.map(value => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24196
|
+
...optionProps(value, `${t("rate")} ${value}`),
|
|
24197
|
+
onMouseEnter: () => setHovered(value),
|
|
24198
|
+
className: cn("rounded-md transition-all duration-150 hover:scale-110 active:scale-95 bg-transparent border-0 p-0 cursor-pointer", FOCUS_RING, DISABLED),
|
|
24199
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(Star, {
|
|
24200
|
+
"aria-hidden": "true",
|
|
24201
|
+
className: cn("w-8 h-8 transition-colors", Number(value) <= lit ? "text-yellow-400 drop-shadow-sm" : isDark ? "text-gray-600" : "text-gray-300"),
|
|
24202
|
+
fill: Number(value) <= lit ? "#FBBF24" : "none"
|
|
24203
|
+
})
|
|
24204
|
+
}, value));
|
|
23740
24205
|
}
|
|
24206
|
+
return SCALE.map((value, index) => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24207
|
+
...optionProps(value, `${t("rate")} ${value}`),
|
|
24208
|
+
className: cn("rounded-full w-10 h-10 flex items-center justify-center text-xl transition-all hover:scale-110 active:scale-95 bg-transparent border-0 p-0 cursor-pointer", FOCUS_RING, DISABLED, rating === value ? "ring-2 ring-blue-100 scale-125 bg-gradient-to-b from-yellow-200 to-yellow-400 shadow-md" : "grayscale-[0.3] opacity-80 hover:grayscale-0"),
|
|
24209
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
24210
|
+
"aria-hidden": "true",
|
|
24211
|
+
className: "drop-shadow-sm",
|
|
24212
|
+
children: EMOJI_FACES[index]
|
|
24213
|
+
})
|
|
24214
|
+
}, value));
|
|
23741
24215
|
};
|
|
23742
|
-
const ratings = getRatings();
|
|
23743
24216
|
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23744
|
-
className:
|
|
23745
|
-
|
|
23746
|
-
|
|
23747
|
-
|
|
24217
|
+
className: cardClass,
|
|
24218
|
+
"data-testid": "csat-survey",
|
|
24219
|
+
children: [note ? /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
24220
|
+
"data-testid": "csat-note",
|
|
24221
|
+
className: cn("text-xs text-center mb-2", isDark ? "text-gray-400" : "text-gray-500"),
|
|
24222
|
+
children: note
|
|
24223
|
+
}) : null, /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
24224
|
+
className: cn("text-sm font-medium text-center mb-5", isDark ? "text-gray-300" : "text-gray-500"),
|
|
24225
|
+
children: prompt || t("howWasYourExperience")
|
|
24226
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24227
|
+
className: "flex gap-2 justify-center items-center mb-5",
|
|
24228
|
+
role: "group",
|
|
24229
|
+
"aria-label": t("rateExperience"),
|
|
24230
|
+
onMouseLeave: kind === "STARS" ? () => setHovered(null) : undefined,
|
|
24231
|
+
children: renderScale()
|
|
24232
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("textarea", {
|
|
24233
|
+
"aria-label": t("feedbackPlaceholder"),
|
|
24234
|
+
value: feedback,
|
|
24235
|
+
onChange: e => setFeedback(e.target.value.slice(0, 1000)),
|
|
24236
|
+
maxLength: 1000,
|
|
24237
|
+
placeholder: t("feedbackPlaceholder"),
|
|
24238
|
+
rows: 4,
|
|
24239
|
+
disabled: submitting,
|
|
24240
|
+
className: cn("w-full rounded-xl border px-4 py-3 text-sm [font-family:inherit] resize-none outline-none transition-colors mb-5", isDark ? "bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400" : "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400")
|
|
23748
24241
|
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23749
|
-
className: "
|
|
23750
|
-
children: [
|
|
23751
|
-
|
|
23752
|
-
|
|
23753
|
-
|
|
23754
|
-
|
|
23755
|
-
|
|
23756
|
-
|
|
23757
|
-
|
|
23758
|
-
|
|
23759
|
-
|
|
23760
|
-
|
|
23761
|
-
|
|
23762
|
-
|
|
23763
|
-
|
|
23764
|
-
}, rating.value))
|
|
23765
|
-
}), format === "THUMBS" && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
23766
|
-
className: "flex gap-6 justify-center items-center",
|
|
23767
|
-
role: "group",
|
|
23768
|
-
"aria-label": t("rateExperience"),
|
|
23769
|
-
children: ratings.map(rating => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
23770
|
-
"aria-label": rating.value === 1 ? t("thumbsUp") : t("thumbsDown"),
|
|
23771
|
-
onClick: () => handleRating(rating.value),
|
|
23772
|
-
disabled: disabled || isSubmitting,
|
|
23773
|
-
className: cn("w-10 h-10 rounded-xl border flex items-center justify-center shadow-md text-2xl transition-all", "hover:scale-105 active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed", "drop-shadow-md", isDark ? "bg-gray-700 border-gray-600 hover:bg-gray-600" : "bg-white border-gray-100 hover:bg-gray-50", selectedRating === rating.value && "ring-2 ring-primary/40 scale-110"),
|
|
23774
|
-
style: {
|
|
23775
|
-
borderColor: selectedRating === rating.value ? primaryColor : undefined
|
|
23776
|
-
},
|
|
23777
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23778
|
-
className: "drop-shadow-md",
|
|
23779
|
-
"aria-hidden": "true",
|
|
23780
|
-
children: rating.label
|
|
23781
|
-
})
|
|
23782
|
-
}, rating.value))
|
|
23783
|
-
}), format === "NUMERIC" && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
23784
|
-
className: "flex gap-2 justify-center items-center",
|
|
23785
|
-
role: "group",
|
|
23786
|
-
"aria-label": t("rateExperience"),
|
|
23787
|
-
children: ratings.map(rating => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
23788
|
-
"aria-label": `${t("rate")} ${rating.value}`,
|
|
23789
|
-
onClick: () => handleRating(rating.value),
|
|
23790
|
-
disabled: disabled || isSubmitting,
|
|
23791
|
-
className: cn("w-10 h-10 rounded-lg flex items-center justify-center text-sm font-semibold transition-all", "hover:scale-105 active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed", selectedRating === rating.value ? "ring-2 ring-primary/40 scale-110 shadow-md text-white" : isDark ? "bg-gray-700 border border-gray-600 text-gray-300 hover:bg-gray-600" : "bg-white border border-gray-200 text-gray-700 hover:bg-gray-50"),
|
|
23792
|
-
style: {
|
|
23793
|
-
backgroundColor: selectedRating === rating.value ? primaryColor : undefined,
|
|
23794
|
-
borderColor: selectedRating === rating.value ? primaryColor : undefined
|
|
23795
|
-
},
|
|
23796
|
-
children: rating.label
|
|
23797
|
-
}, rating.value))
|
|
23798
|
-
}), format === "STARS" && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
23799
|
-
className: "flex gap-2 justify-center items-center",
|
|
23800
|
-
onMouseLeave: () => setHoveredStar(null),
|
|
23801
|
-
children: ratings.map(rating => {
|
|
23802
|
-
const isHovered = hoveredStar === rating.value;
|
|
23803
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
23804
|
-
onClick: () => handleRating(rating.value),
|
|
23805
|
-
onMouseEnter: () => setHoveredStar(rating.value),
|
|
23806
|
-
disabled: disabled || isSubmitting,
|
|
23807
|
-
className: cn("flex items-center justify-center text-2xl", "bg-transparent border-0 p-0 cursor-pointer focus:outline-none",
|
|
23808
|
-
// EV-4798 (MERN-21): visible keyboard focus.
|
|
23809
|
-
"rounded-md focus-visible:ring-2 focus-visible:ring-blue-700", "disabled:opacity-50 disabled:cursor-not-allowed"),
|
|
23810
|
-
style: {
|
|
23811
|
-
transform: isHovered ? "scale(1.25)" : "scale(1)",
|
|
23812
|
-
filter: isHovered ? "brightness(1.1) drop-shadow(0 2px 4px rgba(0,0,0,0.15))" : "none",
|
|
23813
|
-
opacity: isHovered ? 1 : 0.6,
|
|
23814
|
-
transition: "all 0.2s ease"
|
|
23815
|
-
},
|
|
23816
|
-
"aria-label": `${t("rate")} ${rating.value}`,
|
|
23817
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23818
|
-
"aria-hidden": "true",
|
|
23819
|
-
children: rating.label
|
|
23820
|
-
})
|
|
23821
|
-
}, rating.value);
|
|
23822
|
-
})
|
|
24242
|
+
className: "relative group",
|
|
24243
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24244
|
+
type: "button",
|
|
24245
|
+
onClick: handleSubmit,
|
|
24246
|
+
disabled: !rating || submitting,
|
|
24247
|
+
"aria-describedby": !rating ? hintId : undefined,
|
|
24248
|
+
className: cn("w-full py-3.5 rounded-xl text-sm font-semibold [font-family:inherit] transition-all duration-200 border-none outline-none focus:outline-none active:outline-none focus:ring-0 active:ring-0", DISABLED,
|
|
24249
|
+
// EV-4798 (MERN-21): keyboard focus stays visible.
|
|
24250
|
+
"focus-visible:ring-2 focus-visible:ring-blue-700", isDark ? "bg-gray-700 text-gray-100 hover:bg-gray-600" : "bg-gray-100 text-gray-700 hover:bg-gray-200"),
|
|
24251
|
+
children: submitting ? t("submitting") : t("submitFeedback")
|
|
24252
|
+
}), !rating && !submitting && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24253
|
+
id: hintId,
|
|
24254
|
+
role: "tooltip",
|
|
24255
|
+
className: "absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap px-2 py-1 rounded-md text-xs bg-gray-800 text-white opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none",
|
|
24256
|
+
children: t("selectRatingFirst")
|
|
23823
24257
|
})]
|
|
23824
|
-
}),
|
|
23825
|
-
|
|
23826
|
-
className: cn("
|
|
23827
|
-
children: t("
|
|
23828
|
-
})
|
|
24258
|
+
}), status === "failed" && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
24259
|
+
role: "alert",
|
|
24260
|
+
className: cn("mt-3 text-center text-sm", isDark ? "text-red-300" : "text-red-700"),
|
|
24261
|
+
children: t("feedbackSendFailed")
|
|
24262
|
+
}), onBack ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24263
|
+
className: "mt-3 text-center",
|
|
24264
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24265
|
+
type: "button",
|
|
24266
|
+
onClick: onBack,
|
|
24267
|
+
disabled: submitting,
|
|
24268
|
+
className: cn("text-sm underline bg-transparent border-none [font-family:inherit] rounded-md", FOCUS_RING, DISABLED, isDark ? "text-gray-200" : "text-gray-700"),
|
|
24269
|
+
children: t("backToChat")
|
|
24270
|
+
})
|
|
24271
|
+
}) : null]
|
|
23829
24272
|
});
|
|
23830
24273
|
};
|
|
23831
24274
|
|
|
@@ -24009,13 +24452,10 @@
|
|
|
24009
24452
|
hour12: true
|
|
24010
24453
|
}).replace(/am|pm/i, match => match.toUpperCase());
|
|
24011
24454
|
};
|
|
24012
|
-
|
|
24013
|
-
|
|
24014
|
-
|
|
24015
|
-
|
|
24016
|
-
if (raw === "NUMERIC" || raw === "NUMBER") return "NUMERIC";
|
|
24017
|
-
return "EMOJI";
|
|
24018
|
-
};
|
|
24455
|
+
|
|
24456
|
+
// EV-4968 / EV-5040: how long the end-of-chat survey's thank-you shows before
|
|
24457
|
+
// the next chat starts (and, when it opened from X, the widget closes).
|
|
24458
|
+
const SURVEY_THANKS_MS = 2000;
|
|
24019
24459
|
const ChatWindow = ({
|
|
24020
24460
|
isOpen,
|
|
24021
24461
|
isMinimized,
|
|
@@ -24098,7 +24538,8 @@
|
|
|
24098
24538
|
// CSAT configuration
|
|
24099
24539
|
csatEnabled = false,
|
|
24100
24540
|
csatFormat = "EMOJI",
|
|
24101
|
-
|
|
24541
|
+
// EV-4968: blank means the translated default question.
|
|
24542
|
+
csatPrompt = "",
|
|
24102
24543
|
// A rating an agent asked for from the Inbox: { format, prompt } or null.
|
|
24103
24544
|
// Shown whether or not the automatic survey (csatEnabled) is on.
|
|
24104
24545
|
csatRequest = null,
|
|
@@ -24327,13 +24768,16 @@
|
|
|
24327
24768
|
}
|
|
24328
24769
|
});
|
|
24329
24770
|
|
|
24330
|
-
// Resolve / Feedback state
|
|
24771
|
+
// Resolve / Feedback state. The rating and comment live in CSATWidget.
|
|
24331
24772
|
const [showResolveForm, setShowResolveForm] = reactExports.useState(false);
|
|
24332
24773
|
const [isConversationResolved, setIsConversationResolved] = reactExports.useState(false);
|
|
24333
|
-
|
|
24334
|
-
|
|
24335
|
-
|
|
24336
|
-
|
|
24774
|
+
// EV-4968 / EV-5040: which survey shows its thank-you ("inline": a rating
|
|
24775
|
+
// an agent asked for; "takeover": the end-of-chat survey), the timer that
|
|
24776
|
+
// then starts the next chat, and whether that also closes the widget
|
|
24777
|
+
// (opened from X) or not (opened from End chat).
|
|
24778
|
+
const [surveyThanks, setSurveyThanks] = reactExports.useState(null);
|
|
24779
|
+
const surveyDoneTimerRef = reactExports.useRef(null);
|
|
24780
|
+
const surveyClosesWidgetRef = reactExports.useRef(true);
|
|
24337
24781
|
|
|
24338
24782
|
// EV-4826: this component stays mounted while the widget is closed
|
|
24339
24783
|
// (it renders null), so the feedback form used to survive a close and
|
|
@@ -24342,16 +24786,15 @@
|
|
|
24342
24786
|
reactExports.useEffect(() => {
|
|
24343
24787
|
if (isOpen) return;
|
|
24344
24788
|
setShowResolveForm(false);
|
|
24345
|
-
setResolveRating(0);
|
|
24346
|
-
setResolveFeedbackText("");
|
|
24347
|
-
setResolveSubmitFailed(false);
|
|
24348
24789
|
}, [isOpen]);
|
|
24349
24790
|
reactExports.useEffect(() => {
|
|
24350
24791
|
setShowResolveForm(false);
|
|
24351
|
-
|
|
24352
|
-
|
|
24353
|
-
|
|
24792
|
+
// EV-5040: a new conversation drops any thank-you and its pending timer.
|
|
24793
|
+
clearTimeout(surveyDoneTimerRef.current);
|
|
24794
|
+
surveyDoneTimerRef.current = null;
|
|
24795
|
+
setSurveyThanks(null);
|
|
24354
24796
|
}, [conversationId]);
|
|
24797
|
+
reactExports.useEffect(() => () => clearTimeout(surveyDoneTimerRef.current), []);
|
|
24355
24798
|
|
|
24356
24799
|
// Sync csatSubmitted from session whenever the conversation changes
|
|
24357
24800
|
reactExports.useEffect(() => {
|
|
@@ -24503,18 +24946,21 @@
|
|
|
24503
24946
|
const hasOnboardingQuestions = onboardingQuestions && onboardingQuestions.length > 0;
|
|
24504
24947
|
const isCsatEnabled = Boolean(csatEnabled);
|
|
24505
24948
|
const shouldHideResolveForOnboarding = onboardingEnabled && hasOnboardingQuestions && !onboardingCompleted;
|
|
24506
|
-
const handleCsatRating = async (rating, format) => {
|
|
24507
|
-
setCsatSubmitted(true); // optimistic UI
|
|
24508
|
-
setShowCsat(false);
|
|
24509
|
-
markCsatSubmitted(organizationId); // persist so page refresh doesn't re-show CSAT
|
|
24510
24949
|
|
|
24950
|
+
// EV-4968: one question and one fallback for every survey trigger. A blank
|
|
24951
|
+
// configured question reads the translated default on both paths.
|
|
24952
|
+
const endSurveyPrompt = (csatPrompt || "").trim() || t("howWasYourExperience");
|
|
24953
|
+
const requestedSurveyPrompt = (csatRequest?.prompt || "").trim() || endSurveyPrompt;
|
|
24954
|
+
|
|
24955
|
+
// EV-4968: the one POST every survey sends. Resolves true once stored.
|
|
24956
|
+
const postSurvey = reactExports.useCallback(async (rating, format, feedback) => {
|
|
24511
24957
|
try {
|
|
24512
24958
|
const headers = {
|
|
24513
24959
|
"Content-Type": "application/json"
|
|
24514
24960
|
};
|
|
24515
|
-
if (typeof getAuthToken ===
|
|
24961
|
+
if (typeof getAuthToken === "function") {
|
|
24516
24962
|
const token = await getAuthToken();
|
|
24517
|
-
if (token) headers[
|
|
24963
|
+
if (token) headers["Authorization"] = `Bearer ${token}`;
|
|
24518
24964
|
}
|
|
24519
24965
|
const response = await fetch(`${apiBaseUrl.replace(/\/$/, "")}/api/v1/support/csat`, {
|
|
24520
24966
|
method: "POST",
|
|
@@ -24522,84 +24968,98 @@
|
|
|
24522
24968
|
credentials: "include",
|
|
24523
24969
|
body: JSON.stringify({
|
|
24524
24970
|
conversationId,
|
|
24525
|
-
rating,
|
|
24971
|
+
rating: String(rating),
|
|
24526
24972
|
ratingFormat: format,
|
|
24527
|
-
conciergeId
|
|
24973
|
+
conciergeId,
|
|
24974
|
+
feedback: feedback || undefined
|
|
24528
24975
|
})
|
|
24529
24976
|
});
|
|
24530
24977
|
if (!response.ok) {
|
|
24531
24978
|
console.error("CSAT submission failed:", await response.text());
|
|
24979
|
+
return false;
|
|
24532
24980
|
}
|
|
24533
|
-
|
|
24534
|
-
// Session continues after CSAT submission - no reset
|
|
24981
|
+
return true;
|
|
24535
24982
|
} catch (error) {
|
|
24536
24983
|
console.error("CSAT submission error:", error);
|
|
24984
|
+
return false;
|
|
24537
24985
|
}
|
|
24538
|
-
};
|
|
24539
|
-
|
|
24540
|
-
//
|
|
24541
|
-
const
|
|
24542
|
-
|
|
24543
|
-
if (
|
|
24544
|
-
|
|
24545
|
-
|
|
24546
|
-
|
|
24547
|
-
|
|
24548
|
-
|
|
24549
|
-
|
|
24550
|
-
|
|
24551
|
-
|
|
24552
|
-
|
|
24553
|
-
|
|
24554
|
-
|
|
24555
|
-
|
|
24556
|
-
|
|
24557
|
-
|
|
24558
|
-
|
|
24559
|
-
|
|
24560
|
-
|
|
24561
|
-
|
|
24562
|
-
|
|
24563
|
-
|
|
24564
|
-
|
|
24565
|
-
|
|
24566
|
-
|
|
24986
|
+
}, [apiBaseUrl, getAuthToken, conversationId, conciergeId]);
|
|
24987
|
+
|
|
24988
|
+
// A rating an agent asked for: stored, thanked, and the chat goes on.
|
|
24989
|
+
const handleRequestedSurveySubmit = reactExports.useCallback(async (rating, format, feedback) => {
|
|
24990
|
+
const ok = await postSurvey(rating, format, feedback);
|
|
24991
|
+
if (ok) {
|
|
24992
|
+
setCsatSubmitted(true);
|
|
24993
|
+
setShowCsat(false);
|
|
24994
|
+
markCsatSubmitted(organizationId); // persist so page refresh doesn't re-show CSAT
|
|
24995
|
+
setSurveyThanks("inline");
|
|
24996
|
+
}
|
|
24997
|
+
return ok;
|
|
24998
|
+
}, [postSurvey, organizationId]);
|
|
24999
|
+
|
|
25000
|
+
// EV-901: after the end-of-chat survey, start over exactly as the kebab
|
|
25001
|
+
// "Refresh Chat" does (same entry point, widgetFilter cleared explicitly),
|
|
25002
|
+
// but keep the visitor (EV-5040) so onboarding is not asked again.
|
|
25003
|
+
const finishEndSurvey = reactExports.useCallback(({
|
|
25004
|
+
close
|
|
25005
|
+
} = {}) => {
|
|
25006
|
+
clearTimeout(surveyDoneTimerRef.current);
|
|
25007
|
+
surveyDoneTimerRef.current = null;
|
|
25008
|
+
setSurveyThanks(null);
|
|
25009
|
+
setShowResolveForm(false);
|
|
25010
|
+
if (onWidgetFilterChange) {
|
|
25011
|
+
onWidgetFilterChange(null);
|
|
25012
|
+
}
|
|
25013
|
+
if (onRefreshChat) {
|
|
25014
|
+
onRefreshChat({
|
|
25015
|
+
keepVisitor: true
|
|
25016
|
+
});
|
|
25017
|
+
} else if (onResetConversation) {
|
|
25018
|
+
onResetConversation({
|
|
25019
|
+
keepVisitor: true
|
|
24567
25020
|
});
|
|
24568
|
-
if (response.ok) {
|
|
24569
|
-
// EV-901: do exactly what the kebab-menu "Refresh Chat" does.
|
|
24570
|
-
// We route through onRefreshChat (same entry point the kebab
|
|
24571
|
-
// menu uses) instead of onResetConversation so any change to
|
|
24572
|
-
// the Refresh path automatically applies here too. We ALSO
|
|
24573
|
-
// explicitly clear widgetFilter via onWidgetFilterChange(null):
|
|
24574
|
-
// resetConversation calls setWidgetFilter(null) internally, but
|
|
24575
|
-
// doing it here too pins down a reported bug where the post-
|
|
24576
|
-
// resolve render kept the previous category set (showing the
|
|
24577
|
-
// top CategoryTabsBar instead of the inline topic chips).
|
|
24578
|
-
setShowResolveForm(false);
|
|
24579
|
-
setResolveRating(0);
|
|
24580
|
-
setResolveFeedbackText("");
|
|
24581
|
-
if (onWidgetFilterChange) {
|
|
24582
|
-
onWidgetFilterChange(null);
|
|
24583
|
-
}
|
|
24584
|
-
if (onRefreshChat) {
|
|
24585
|
-
onRefreshChat();
|
|
24586
|
-
} else if (onResetConversation) {
|
|
24587
|
-
onResetConversation();
|
|
24588
|
-
}
|
|
24589
|
-
} else {
|
|
24590
|
-
console.error("Failed to submit resolve feedback:", await response.text());
|
|
24591
|
-
setResolveSubmitFailed(true);
|
|
24592
|
-
}
|
|
24593
|
-
} catch (error) {
|
|
24594
|
-
console.error("Error submitting resolve feedback:", error);
|
|
24595
|
-
setResolveSubmitFailed(true);
|
|
24596
|
-
} finally {
|
|
24597
|
-
setIsSubmittingResolve(false);
|
|
24598
25021
|
}
|
|
24599
|
-
|
|
25022
|
+
if (close ?? surveyClosesWidgetRef.current) onClose?.();
|
|
25023
|
+
}, [onWidgetFilterChange, onRefreshChat, onResetConversation, onClose]);
|
|
25024
|
+
|
|
25025
|
+
// EV-5040: the timer and the close effect call the latest finisher.
|
|
25026
|
+
const finishEndSurveyRef = reactExports.useRef(finishEndSurvey);
|
|
25027
|
+
finishEndSurveyRef.current = finishEndSurvey;
|
|
25028
|
+
// Closing the widget during the thank-you starts the next chat now.
|
|
25029
|
+
reactExports.useEffect(() => {
|
|
25030
|
+
if (!isOpen && surveyDoneTimerRef.current) finishEndSurveyRef.current?.({
|
|
25031
|
+
close: false
|
|
25032
|
+
});
|
|
25033
|
+
}, [isOpen]);
|
|
25034
|
+
|
|
25035
|
+
// EV-4968 / EV-5040: the end-of-chat survey thanks the visitor first, then
|
|
25036
|
+
// starts the next chat after SURVEY_THANKS_MS.
|
|
25037
|
+
const handleEndSurveySubmit = reactExports.useCallback(async (rating, format, feedback) => {
|
|
25038
|
+
if (!isCsatEnabled || isConversationResolved) return false;
|
|
25039
|
+
const ok = await postSurvey(rating, format, feedback);
|
|
25040
|
+
if (ok) {
|
|
25041
|
+
setSurveyThanks("takeover");
|
|
25042
|
+
clearTimeout(surveyDoneTimerRef.current);
|
|
25043
|
+
surveyDoneTimerRef.current = setTimeout(() => finishEndSurveyRef.current?.(), SURVEY_THANKS_MS);
|
|
25044
|
+
}
|
|
25045
|
+
return ok;
|
|
25046
|
+
}, [isCsatEnabled, isConversationResolved, postSurvey]);
|
|
25047
|
+
|
|
25048
|
+
// EV-5040: End chat in the header menu opens the same survey without closing.
|
|
25049
|
+
const handleEndChat = reactExports.useCallback(() => {
|
|
25050
|
+
surveyClosesWidgetRef.current = false;
|
|
25051
|
+
setShowResolveForm(true);
|
|
25052
|
+
}, []);
|
|
24600
25053
|
|
|
24601
25054
|
// Handle X button: first click shows form, second click closes
|
|
24602
25055
|
const handleCloseClick = reactExports.useCallback(() => {
|
|
25056
|
+
// EV-5040: X on the thank-you finishes now instead of waiting.
|
|
25057
|
+
if (surveyThanks === "takeover") {
|
|
25058
|
+
finishEndSurvey({
|
|
25059
|
+
close: true
|
|
25060
|
+
});
|
|
25061
|
+
return;
|
|
25062
|
+
}
|
|
24603
25063
|
// No conversation yet (no conversationId or no user messages) → skip the
|
|
24604
25064
|
// CSAT/resolve form entirely. Rating a never-used widget is nonsensical
|
|
24605
25065
|
// and the underlying POST /api/v1/support/csat would fail with no
|
|
@@ -24607,7 +25067,7 @@
|
|
|
24607
25067
|
if (!isCsatEnabled || !conversationId || !hasUserMessages) {
|
|
24608
25068
|
// CSAT disabled (or no conversation to rate): closing the chat should
|
|
24609
25069
|
// also clear out the conversation, mirroring the post-CSAT clear in
|
|
24610
|
-
//
|
|
25070
|
+
// finishEndSurvey. Without this the X button only hides
|
|
24611
25071
|
// the window while the old transcript persists in the session and
|
|
24612
25072
|
// re-appears on reopen / reload. Route through onRefreshChat (same
|
|
24613
25073
|
// entry point the kebab "Refresh Chat" uses) so any change to the
|
|
@@ -24627,18 +25087,20 @@
|
|
|
24627
25087
|
setShowResolveForm(false);
|
|
24628
25088
|
onClose?.();
|
|
24629
25089
|
} else if (!isConversationResolved) {
|
|
25090
|
+
surveyClosesWidgetRef.current = true;
|
|
24630
25091
|
setShowResolveForm(true);
|
|
24631
25092
|
} else {
|
|
24632
25093
|
onClose?.();
|
|
24633
25094
|
}
|
|
24634
|
-
}, [isCsatEnabled, conversationId, hasUserMessages, showResolveForm, isConversationResolved, onClose, onWidgetFilterChange, onRefreshChat, onResetConversation]);
|
|
25095
|
+
}, [surveyThanks, finishEndSurvey, isCsatEnabled, conversationId, hasUserMessages, showResolveForm, isConversationResolved, onClose, onWidgetFilterChange, onRefreshChat, onResetConversation]);
|
|
25096
|
+
|
|
25097
|
+
// EV-5040: End chat shows only when there is a chat for the survey to rate.
|
|
25098
|
+
const canEndChat = isCsatEnabled && Boolean(conversationId) && hasUserMessages && !showResolveForm && !isConversationResolved && !isVoiceSessionActive && !shouldHideResolveForOnboarding;
|
|
24635
25099
|
reactExports.useEffect(() => {
|
|
24636
25100
|
if (isCsatEnabled) return;
|
|
24637
25101
|
if (showResolveForm) setShowResolveForm(false);
|
|
24638
25102
|
if (isConversationResolved) setIsConversationResolved(false);
|
|
24639
|
-
|
|
24640
|
-
if (resolveFeedbackText) setResolveFeedbackText("");
|
|
24641
|
-
}, [isCsatEnabled, showResolveForm, isConversationResolved, resolveRating, resolveFeedbackText]);
|
|
25103
|
+
}, [isCsatEnabled, showResolveForm, isConversationResolved]);
|
|
24642
25104
|
const latestPromptSuggestions = reactExports.useMemo(() => {
|
|
24643
25105
|
if (!messages || !Array.isArray(messages)) return [];
|
|
24644
25106
|
// Reflect the LATEST assistant message's prompts ONLY - do NOT walk back
|
|
@@ -24698,148 +25160,20 @@
|
|
|
24698
25160
|
};
|
|
24699
25161
|
}, [showCsat, csatEnabled, csatSubmitted]);
|
|
24700
25162
|
|
|
24701
|
-
//
|
|
24702
|
-
|
|
24703
|
-
const format = normalizeCsatFormat(csatFormat);
|
|
24704
|
-
if (format === "STARS") {
|
|
24705
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24706
|
-
className: "flex justify-center gap-2 mb-5",
|
|
24707
|
-
role: "group",
|
|
24708
|
-
"aria-label": t("rateExperience"),
|
|
24709
|
-
children: [1, 2, 3, 4, 5].map(star => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24710
|
-
"aria-label": `${t("rate")} ${star}`,
|
|
24711
|
-
onClick: () => setResolveRating(star),
|
|
24712
|
-
className: "transition-all duration-150 hover:scale-110 active:scale-95 bg-transparent border-0 p-0 cursor-pointer",
|
|
24713
|
-
disabled: isSubmittingResolve,
|
|
24714
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx(Star, {
|
|
24715
|
-
className: cn("w-8 h-8 transition-colors", star <= resolveRating ? "text-yellow-400 drop-shadow-sm" : isDark ? "text-gray-600" : "text-gray-300"),
|
|
24716
|
-
fill: star <= resolveRating ? "#FBBF24" : "none"
|
|
24717
|
-
})
|
|
24718
|
-
}, star))
|
|
24719
|
-
});
|
|
24720
|
-
}
|
|
24721
|
-
if (format === "THUMBS") {
|
|
24722
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24723
|
-
className: "flex gap-4 justify-center mb-5",
|
|
24724
|
-
role: "group",
|
|
24725
|
-
"aria-label": t("rateExperience"),
|
|
24726
|
-
children: [{
|
|
24727
|
-
value: "positive",
|
|
24728
|
-
emoji: "👍"
|
|
24729
|
-
}, {
|
|
24730
|
-
value: "negative",
|
|
24731
|
-
emoji: "👎"
|
|
24732
|
-
}].map(item => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24733
|
-
"aria-label": item.value === "positive" ? t("thumbsUp") : t("thumbsDown"),
|
|
24734
|
-
onClick: () => setResolveRating(item.value),
|
|
24735
|
-
disabled: isSubmittingResolve,
|
|
24736
|
-
className: cn("w-12 h-12 rounded-xl border flex items-center justify-center text-2xl transition-all hover:scale-105 active:scale-95", resolveRating === item.value ? "ring-2 ring-blue-300 scale-110 shadow-lg" : "", isDark ? "bg-gray-700 border-gray-600 hover:bg-gray-600" : "bg-white border-gray-200 hover:bg-gray-50"),
|
|
24737
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
24738
|
-
className: "drop-shadow-md",
|
|
24739
|
-
children: item.emoji
|
|
24740
|
-
})
|
|
24741
|
-
}, item.value))
|
|
24742
|
-
});
|
|
24743
|
-
}
|
|
24744
|
-
|
|
24745
|
-
// Default: Emoji format. Same faces as CSATWidget's EMOJI_RATINGS.
|
|
24746
|
-
// The two ladders had drifted (this one showed 😐 at position 2 and 🙂/😀
|
|
24747
|
-
// at 3/4), so the same face meant a different value depending on which
|
|
24748
|
-
// surface asked (EV-3616). This form posts the NUMBER, so the glyphs are
|
|
24749
|
-
// presentation only; keep them identical to CSATWidget's.
|
|
24750
|
-
const emojis = [{
|
|
24751
|
-
value: 1,
|
|
24752
|
-
emoji: "😡"
|
|
24753
|
-
}, {
|
|
24754
|
-
value: 2,
|
|
24755
|
-
emoji: "😕"
|
|
24756
|
-
}, {
|
|
24757
|
-
value: 3,
|
|
24758
|
-
emoji: "😐"
|
|
24759
|
-
}, {
|
|
24760
|
-
value: 4,
|
|
24761
|
-
emoji: "😊"
|
|
24762
|
-
}, {
|
|
24763
|
-
value: 5,
|
|
24764
|
-
emoji: "😍"
|
|
24765
|
-
}];
|
|
24766
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24767
|
-
className: "flex gap-2 justify-center items-center mb-5",
|
|
24768
|
-
role: "group",
|
|
24769
|
-
"aria-label": t("rateExperience"),
|
|
24770
|
-
children: emojis.map(item => /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24771
|
-
"aria-label": `${t("rate")} ${item.value}`,
|
|
24772
|
-
onClick: () => setResolveRating(item.value),
|
|
24773
|
-
disabled: isSubmittingResolve,
|
|
24774
|
-
className: cn("rounded-full w-10 h-10 flex items-center justify-center text-xl transition-all hover:scale-110 active:scale-95 bg-transparent border-0 p-0 cursor-pointer", resolveRating === item.value ? "ring-2 ring-blue-100 scale-125 bg-gradient-to-b from-yellow-200 to-yellow-400 shadow-md" : "grayscale-[0.3] opacity-80 hover:grayscale-0"),
|
|
24775
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
24776
|
-
role: "img",
|
|
24777
|
-
"aria-label": `${t("rate")} ${item.value}`,
|
|
24778
|
-
className: "drop-shadow-sm filter",
|
|
24779
|
-
children: item.emoji
|
|
24780
|
-
})
|
|
24781
|
-
}, item.value))
|
|
24782
|
-
});
|
|
24783
|
-
};
|
|
24784
|
-
|
|
24785
|
-
// Render the feedback form. All three text surfaces (title, textarea,
|
|
24786
|
-
// submit button) share the same font-family + font-size, sourced from the
|
|
24787
|
-
// user message bubble tokens. Tailwind's text-sm utility is dropped so the
|
|
24788
|
-
// inline fontSize is the only size driver - otherwise browsers were
|
|
24789
|
-
// rendering form elements (button, textarea) with their own defaults
|
|
24790
|
-
// (e.g. serif on some platforms when Inter wasn't loaded yet).
|
|
25163
|
+
// EV-4968: the end-of-chat survey (X or End chat) is the same card as a
|
|
25164
|
+
// rating an agent asked for; it takes over the content area.
|
|
24791
25165
|
const renderFeedbackForm = () => /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24792
25166
|
className: "animate-in slide-in-from-top-4 fade-in duration-300 mt-4 mx-2",
|
|
24793
|
-
children: /*#__PURE__*/jsxRuntimeExports.
|
|
24794
|
-
|
|
24795
|
-
|
|
24796
|
-
|
|
24797
|
-
|
|
24798
|
-
|
|
24799
|
-
|
|
24800
|
-
|
|
24801
|
-
|
|
24802
|
-
|
|
24803
|
-
setResolveFeedbackText(e.target.value);
|
|
24804
|
-
}
|
|
24805
|
-
},
|
|
24806
|
-
maxLength: 1000,
|
|
24807
|
-
placeholder: t("feedbackPlaceholder"),
|
|
24808
|
-
rows: 4,
|
|
24809
|
-
disabled: isSubmittingResolve,
|
|
24810
|
-
className: cn("w-full rounded-xl border px-4 py-3 text-sm [font-family:inherit] resize-none outline-none transition-colors mb-5", isDark ? "bg-gray-700 border-gray-600 text-gray-100 placeholder-gray-400" : "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400")
|
|
24811
|
-
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
24812
|
-
className: "relative group",
|
|
24813
|
-
children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24814
|
-
onClick: handleResolveSubmission,
|
|
24815
|
-
disabled: resolveRating === 0 || isSubmittingResolve,
|
|
24816
|
-
"aria-describedby": resolveRating === 0 ? "resolve-rating-hint" : undefined,
|
|
24817
|
-
className: cn("w-full py-3.5 rounded-xl text-sm font-semibold [font-family:inherit] transition-all duration-200 border-none outline-none focus:outline-none active:outline-none focus:ring-0 active:ring-0", "disabled:opacity-50 disabled:cursor-not-allowed",
|
|
24818
|
-
// EV-4798 (MERN-21): keyboard focus stays visible.
|
|
24819
|
-
"focus-visible:ring-2 focus-visible:ring-blue-700", isDark ? "bg-gray-700 text-gray-100 hover:bg-gray-600" : "bg-gray-100 text-gray-700 hover:bg-gray-200"),
|
|
24820
|
-
children: isSubmittingResolve ? t("submitting") : t("submitFeedback")
|
|
24821
|
-
}), resolveRating === 0 && !isSubmittingResolve && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24822
|
-
id: "resolve-rating-hint",
|
|
24823
|
-
role: "tooltip",
|
|
24824
|
-
className: "absolute -top-8 left-1/2 -translate-x-1/2 whitespace-nowrap px-2 py-1 rounded-md text-xs bg-gray-800 text-white opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none",
|
|
24825
|
-
children: t("selectRatingFirst")
|
|
24826
|
-
})]
|
|
24827
|
-
}), resolveSubmitFailed && !isSubmittingResolve && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
24828
|
-
role: "alert",
|
|
24829
|
-
className: "mt-3 text-center text-sm",
|
|
24830
|
-
children: [/*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
24831
|
-
className: isDark ? "text-red-300" : "text-red-700",
|
|
24832
|
-
children: t("feedbackSendFailed")
|
|
24833
|
-
}), /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
24834
|
-
type: "button",
|
|
24835
|
-
onClick: () => {
|
|
24836
|
-
setShowResolveForm(false);
|
|
24837
|
-
setResolveSubmitFailed(false);
|
|
24838
|
-
},
|
|
24839
|
-
className: cn("mt-1 underline bg-transparent border-none [font-family:inherit] focus-visible:ring-2 focus-visible:ring-blue-700", isDark ? "text-gray-200" : "text-gray-700"),
|
|
24840
|
-
children: t("backToChat")
|
|
24841
|
-
})]
|
|
24842
|
-
})]
|
|
25167
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(CSATWidget, {
|
|
25168
|
+
id: "csat-end",
|
|
25169
|
+
format: normalizeCsatFormat(csatFormat),
|
|
25170
|
+
prompt: endSurveyPrompt,
|
|
25171
|
+
onSubmit: handleEndSurveySubmit,
|
|
25172
|
+
submitted: surveyThanks === "takeover",
|
|
25173
|
+
onBack: () => setShowResolveForm(false),
|
|
25174
|
+
isDark: isDark,
|
|
25175
|
+
primaryColor: primaryColor,
|
|
25176
|
+
defaultLanguage: defaultLanguage
|
|
24843
25177
|
})
|
|
24844
25178
|
});
|
|
24845
25179
|
if (!isOpen) {
|
|
@@ -24915,6 +25249,7 @@
|
|
|
24915
25249
|
officeHours: officeHours,
|
|
24916
25250
|
onRefreshChat: onRefreshChat,
|
|
24917
25251
|
onCopyChat: onCopyChat,
|
|
25252
|
+
onEndChat: canEndChat ? handleEndChat : undefined,
|
|
24918
25253
|
defaultLanguage: defaultLanguage,
|
|
24919
25254
|
isHandedOff: isHandedOff
|
|
24920
25255
|
}), !isMinimized && filterEnabled && !showInlineFilter && !(showResolveForm && !isConversationResolved) && !(onboardingActive && !onboardingCompleted) && /*#__PURE__*/jsxRuntimeExports.jsx(CategoryTabsBar, {
|
|
@@ -25026,14 +25361,16 @@
|
|
|
25026
25361
|
regionLabel: t("categoryFilter")
|
|
25027
25362
|
}) : null,
|
|
25028
25363
|
quickQuestionsHeadingLabel: filterEnabled ? t("quickQuestionsHeadingLabel") : undefined
|
|
25029
|
-
}), (showCsat && csatEnabled || csatRequest) && !csatSubmitted && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
25030
|
-
className: "",
|
|
25364
|
+
}), ((showCsat && csatEnabled || csatRequest) && !csatSubmitted || surveyThanks === "inline") && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
25365
|
+
className: "mx-2",
|
|
25031
25366
|
"data-testid": "widget-csat-card",
|
|
25032
25367
|
children: /*#__PURE__*/jsxRuntimeExports.jsx(CSATWidget, {
|
|
25368
|
+
id: "csat-requested",
|
|
25033
25369
|
format: normalizeCsatFormat(csatRequest?.format || csatFormat),
|
|
25034
|
-
prompt:
|
|
25035
|
-
|
|
25036
|
-
|
|
25370
|
+
prompt: requestedSurveyPrompt,
|
|
25371
|
+
note: csatRequest ? t("surveyRequestedNote") : undefined,
|
|
25372
|
+
onSubmit: handleRequestedSurveySubmit,
|
|
25373
|
+
submitted: surveyThanks === "inline",
|
|
25037
25374
|
isDark: isDark,
|
|
25038
25375
|
primaryColor: primaryColor,
|
|
25039
25376
|
defaultLanguage: defaultLanguage
|
|
@@ -25424,7 +25761,7 @@
|
|
|
25424
25761
|
* value by its own test (that constant sat at 0.1.113 while this package was
|
|
25425
25762
|
* at 0.2.2 precisely because nothing enforced it - EV-2431).
|
|
25426
25763
|
*/
|
|
25427
|
-
const WIDGET_VERSION = '0.2.
|
|
25764
|
+
const WIDGET_VERSION = '0.2.55';
|
|
25428
25765
|
|
|
25429
25766
|
/**
|
|
25430
25767
|
* API utility functions
|
|
@@ -25745,7 +26082,9 @@
|
|
|
25745
26082
|
userMessageBubbleFontSize: userMessageBubbleFontSize ?? typography.userMessageBubbleFontSize ?? fontSize ?? "14px",
|
|
25746
26083
|
csatEnabled: csat.enabled ?? false,
|
|
25747
26084
|
csatFormat: csat.format ?? "EMOJI",
|
|
25748
|
-
|
|
26085
|
+
// EV-4968: no English literal here; ChatWindow falls back to the
|
|
26086
|
+
// translated default question on every survey path.
|
|
26087
|
+
csatPrompt: csat.prompt ?? "",
|
|
25749
26088
|
// EV-3229: csat triggerType/idleTimeoutMins/followUpEnabled/
|
|
25750
26089
|
// followUpPrompt removed - they were plumbed to the prop boundary and
|
|
25751
26090
|
// never consulted; every deployment behaved as ON_END with no
|
|
@@ -25952,10 +26291,14 @@
|
|
|
25952
26291
|
})();
|
|
25953
26292
|
}, [conversationId, apiBaseUrl, getAuthToken, updateMessageFeedback]);
|
|
25954
26293
|
|
|
25955
|
-
// Refresh chat handler - reset conversation
|
|
25956
|
-
|
|
26294
|
+
// Refresh chat handler - reset conversation. EV-5040: the reset after a
|
|
26295
|
+
// survey passes { keepVisitor: true }; the header's Refresh Chat passes
|
|
26296
|
+
// nothing and starts fully over.
|
|
26297
|
+
const handleRefreshChat = reactExports.useCallback(opts => {
|
|
25957
26298
|
if (resetConversation) {
|
|
25958
|
-
resetConversation(
|
|
26299
|
+
resetConversation(opts?.keepVisitor === true ? {
|
|
26300
|
+
keepVisitor: true
|
|
26301
|
+
} : undefined);
|
|
25959
26302
|
}
|
|
25960
26303
|
}, [resetConversation]);
|
|
25961
26304
|
|