@eshal-bot/chat-widget 0.2.48 → 0.2.49
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-DIcPzPvl.esm.js → chat-widget-MarkdownRenderer-BqA5K4xf.esm.js} +1 -1
- package/dist/chat-widget-index-BngT4tmp.esm.js +20 -0
- package/dist/chat-widget.esm.js +1 -1
- package/dist/chat-widget.js +1411 -116
- 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-DhXcfBZg.esm.js +0 -20
package/dist/chat-widget.js
CHANGED
|
@@ -7803,7 +7803,7 @@
|
|
|
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 .-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 .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 .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-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 .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-\\[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-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 .-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 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 .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-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-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-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-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-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-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 .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-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-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 .drop-shadow{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{--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-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-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 :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 .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-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-white\\/40:focus-visible{--tw-ring-color:hsla(0,0%,100%,.4)}#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 .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}";
|
|
7807
7807
|
|
|
7808
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}}";
|
|
7809
7809
|
|
|
@@ -12258,6 +12258,599 @@
|
|
|
12258
12258
|
moreSources: "+{count} nữa"
|
|
12259
12259
|
}
|
|
12260
12260
|
};
|
|
12261
|
+
|
|
12262
|
+
// The voice call screen (components/VoiceCallView.jsx): the status pill, the
|
|
12263
|
+
// transcript region and the Pause and End controls. Kept as its own table,
|
|
12264
|
+
// like A11Y_LABELS above, so every supported locale carries the full set in
|
|
12265
|
+
// one place. The ar, de, es, fr, ja, nl, sr and zh lines match the Testing
|
|
12266
|
+
// lab's call screen (packages/frontend/src/locales/*/common.json).
|
|
12267
|
+
const VOICE_CALL_TEXTS = {
|
|
12268
|
+
en: {
|
|
12269
|
+
callConnecting: "Connecting...",
|
|
12270
|
+
callLive: "Live",
|
|
12271
|
+
callPaused: "Paused",
|
|
12272
|
+
callReconnecting: "Reconnecting",
|
|
12273
|
+
callTranscript: "Call transcript",
|
|
12274
|
+
callPause: "Pause microphone",
|
|
12275
|
+
callResume: "Resume microphone",
|
|
12276
|
+
callPauseLabel: "Pause",
|
|
12277
|
+
callResumeLabel: "Resume",
|
|
12278
|
+
callEnd: "End call",
|
|
12279
|
+
callEndLabel: "End"
|
|
12280
|
+
},
|
|
12281
|
+
ar: {
|
|
12282
|
+
callConnecting: "جارٍ الاتصال...",
|
|
12283
|
+
callLive: "مباشر",
|
|
12284
|
+
callPaused: "متوقف مؤقتًا",
|
|
12285
|
+
callReconnecting: "جارٍ إعادة الاتصال",
|
|
12286
|
+
callTranscript: "نص المكالمة",
|
|
12287
|
+
callPause: "إيقاف الميكروفون مؤقتًا",
|
|
12288
|
+
callResume: "استئناف الميكروفون",
|
|
12289
|
+
callPauseLabel: "إيقاف مؤقت",
|
|
12290
|
+
callResumeLabel: "استئناف",
|
|
12291
|
+
callEnd: "إنهاء المكالمة",
|
|
12292
|
+
callEndLabel: "إنهاء"
|
|
12293
|
+
},
|
|
12294
|
+
es: {
|
|
12295
|
+
callConnecting: "Conectando...",
|
|
12296
|
+
callLive: "En directo",
|
|
12297
|
+
callPaused: "En pausa",
|
|
12298
|
+
callReconnecting: "Reconectando",
|
|
12299
|
+
callTranscript: "Transcripción de la llamada",
|
|
12300
|
+
callPause: "Pausar micrófono",
|
|
12301
|
+
callResume: "Reanudar micrófono",
|
|
12302
|
+
callPauseLabel: "Pausa",
|
|
12303
|
+
callResumeLabel: "Reanudar",
|
|
12304
|
+
callEnd: "Finalizar llamada",
|
|
12305
|
+
callEndLabel: "Finalizar"
|
|
12306
|
+
},
|
|
12307
|
+
be: {
|
|
12308
|
+
callConnecting: "Злучэнне...",
|
|
12309
|
+
callLive: "У эфіры",
|
|
12310
|
+
callPaused: "Прыпынена",
|
|
12311
|
+
callReconnecting: "Паўторнае злучэнне",
|
|
12312
|
+
callTranscript: "Расшыфроўка званка",
|
|
12313
|
+
callPause: "Прыпыніць мікрафон",
|
|
12314
|
+
callResume: "Узнавіць мікрафон",
|
|
12315
|
+
callPauseLabel: "Паўза",
|
|
12316
|
+
callResumeLabel: "Узнавіць",
|
|
12317
|
+
callEnd: "Завяршыць званок",
|
|
12318
|
+
callEndLabel: "Завяршыць"
|
|
12319
|
+
},
|
|
12320
|
+
bs: {
|
|
12321
|
+
callConnecting: "Povezivanje...",
|
|
12322
|
+
callLive: "Uživo",
|
|
12323
|
+
callPaused: "Pauzirano",
|
|
12324
|
+
callReconnecting: "Ponovno povezivanje",
|
|
12325
|
+
callTranscript: "Transkript poziva",
|
|
12326
|
+
callPause: "Pauziraj mikrofon",
|
|
12327
|
+
callResume: "Nastavi mikrofon",
|
|
12328
|
+
callPauseLabel: "Pauza",
|
|
12329
|
+
callResumeLabel: "Nastavi",
|
|
12330
|
+
callEnd: "Završi poziv",
|
|
12331
|
+
callEndLabel: "Završi"
|
|
12332
|
+
},
|
|
12333
|
+
bg: {
|
|
12334
|
+
callConnecting: "Свързване...",
|
|
12335
|
+
callLive: "На живо",
|
|
12336
|
+
callPaused: "На пауза",
|
|
12337
|
+
callReconnecting: "Повторно свързване",
|
|
12338
|
+
callTranscript: "Препис на разговора",
|
|
12339
|
+
callPause: "Пауза на микрофона",
|
|
12340
|
+
callResume: "Възобнови микрофона",
|
|
12341
|
+
callPauseLabel: "Пауза",
|
|
12342
|
+
callResumeLabel: "Продължи",
|
|
12343
|
+
callEnd: "Прекрати разговора",
|
|
12344
|
+
callEndLabel: "Прекрати"
|
|
12345
|
+
},
|
|
12346
|
+
my: {
|
|
12347
|
+
callConnecting: "ချိတ်ဆက်နေသည်...",
|
|
12348
|
+
callLive: "တိုက်ရိုက်",
|
|
12349
|
+
callPaused: "ခေတ္တရပ်ထားသည်",
|
|
12350
|
+
callReconnecting: "ပြန်လည်ချိတ်ဆက်နေသည်",
|
|
12351
|
+
callTranscript: "ဖုန်းခေါ်ဆိုမှု စာသားမှတ်တမ်း",
|
|
12352
|
+
callPause: "မိုက်ခရိုဖုန်းကို ခေတ္တရပ်ရန်",
|
|
12353
|
+
callResume: "မိုက်ခရိုဖုန်းကို ပြန်ဖွင့်ရန်",
|
|
12354
|
+
callPauseLabel: "ခေတ္တရပ်ရန်",
|
|
12355
|
+
callResumeLabel: "ဆက်လုပ်ရန်",
|
|
12356
|
+
callEnd: "ဖုန်းချရန်",
|
|
12357
|
+
callEndLabel: "ပြီးဆုံးရန်"
|
|
12358
|
+
},
|
|
12359
|
+
ca: {
|
|
12360
|
+
callConnecting: "Connectant...",
|
|
12361
|
+
callLive: "En directe",
|
|
12362
|
+
callPaused: "En pausa",
|
|
12363
|
+
callReconnecting: "Reconnectant",
|
|
12364
|
+
callTranscript: "Transcripció de la trucada",
|
|
12365
|
+
callPause: "Posa en pausa el micròfon",
|
|
12366
|
+
callResume: "Reprèn el micròfon",
|
|
12367
|
+
callPauseLabel: "Pausa",
|
|
12368
|
+
callResumeLabel: "Reprèn",
|
|
12369
|
+
callEnd: "Finalitza la trucada",
|
|
12370
|
+
callEndLabel: "Finalitza"
|
|
12371
|
+
},
|
|
12372
|
+
zh: {
|
|
12373
|
+
callConnecting: "正在连接...",
|
|
12374
|
+
callLive: "通话中",
|
|
12375
|
+
callPaused: "已暂停",
|
|
12376
|
+
callReconnecting: "正在重新连接",
|
|
12377
|
+
callTranscript: "通话记录",
|
|
12378
|
+
callPause: "暂停麦克风",
|
|
12379
|
+
callResume: "恢复麦克风",
|
|
12380
|
+
callPauseLabel: "暂停",
|
|
12381
|
+
callResumeLabel: "恢复",
|
|
12382
|
+
callEnd: "结束通话",
|
|
12383
|
+
callEndLabel: "结束"
|
|
12384
|
+
},
|
|
12385
|
+
hr: {
|
|
12386
|
+
callConnecting: "Povezivanje...",
|
|
12387
|
+
callLive: "Uživo",
|
|
12388
|
+
callPaused: "Pauzirano",
|
|
12389
|
+
callReconnecting: "Ponovno povezivanje",
|
|
12390
|
+
callTranscript: "Prijepis poziva",
|
|
12391
|
+
callPause: "Pauziraj mikrofon",
|
|
12392
|
+
callResume: "Nastavi mikrofon",
|
|
12393
|
+
callPauseLabel: "Pauza",
|
|
12394
|
+
callResumeLabel: "Nastavi",
|
|
12395
|
+
callEnd: "Završi poziv",
|
|
12396
|
+
callEndLabel: "Završi"
|
|
12397
|
+
},
|
|
12398
|
+
cs: {
|
|
12399
|
+
callConnecting: "Připojování...",
|
|
12400
|
+
callLive: "Živě",
|
|
12401
|
+
callPaused: "Pozastaveno",
|
|
12402
|
+
callReconnecting: "Opětovné připojování",
|
|
12403
|
+
callTranscript: "Přepis hovoru",
|
|
12404
|
+
callPause: "Pozastavit mikrofon",
|
|
12405
|
+
callResume: "Obnovit mikrofon",
|
|
12406
|
+
callPauseLabel: "Pozastavit",
|
|
12407
|
+
callResumeLabel: "Pokračovat",
|
|
12408
|
+
callEnd: "Ukončit hovor",
|
|
12409
|
+
callEndLabel: "Ukončit"
|
|
12410
|
+
},
|
|
12411
|
+
da: {
|
|
12412
|
+
callConnecting: "Forbinder...",
|
|
12413
|
+
callLive: "Live",
|
|
12414
|
+
callPaused: "Sat på pause",
|
|
12415
|
+
callReconnecting: "Genopretter forbindelse",
|
|
12416
|
+
callTranscript: "Udskrift af opkaldet",
|
|
12417
|
+
callPause: "Sæt mikrofonen på pause",
|
|
12418
|
+
callResume: "Genoptag mikrofonen",
|
|
12419
|
+
callPauseLabel: "Pause",
|
|
12420
|
+
callResumeLabel: "Genoptag",
|
|
12421
|
+
callEnd: "Afslut opkald",
|
|
12422
|
+
callEndLabel: "Afslut"
|
|
12423
|
+
},
|
|
12424
|
+
nl: {
|
|
12425
|
+
callConnecting: "Verbinden...",
|
|
12426
|
+
callLive: "Live",
|
|
12427
|
+
callPaused: "Gepauzeerd",
|
|
12428
|
+
callReconnecting: "Opnieuw verbinden",
|
|
12429
|
+
callTranscript: "Gesprekstranscript",
|
|
12430
|
+
callPause: "Microfoon pauzeren",
|
|
12431
|
+
callResume: "Microfoon hervatten",
|
|
12432
|
+
callPauseLabel: "Pauzeren",
|
|
12433
|
+
callResumeLabel: "Hervatten",
|
|
12434
|
+
callEnd: "Gesprek beëindigen",
|
|
12435
|
+
callEndLabel: "Beëindigen"
|
|
12436
|
+
},
|
|
12437
|
+
et: {
|
|
12438
|
+
callConnecting: "Ühendamine...",
|
|
12439
|
+
callLive: "Otse",
|
|
12440
|
+
callPaused: "Peatatud",
|
|
12441
|
+
callReconnecting: "Ühenduse taastamine",
|
|
12442
|
+
callTranscript: "Kõne ärakiri",
|
|
12443
|
+
callPause: "Peata mikrofon",
|
|
12444
|
+
callResume: "Jätka mikrofoniga",
|
|
12445
|
+
callPauseLabel: "Peata",
|
|
12446
|
+
callResumeLabel: "Jätka",
|
|
12447
|
+
callEnd: "Lõpeta kõne",
|
|
12448
|
+
callEndLabel: "Lõpeta"
|
|
12449
|
+
},
|
|
12450
|
+
fi: {
|
|
12451
|
+
callConnecting: "Yhdistetään...",
|
|
12452
|
+
callLive: "Käynnissä",
|
|
12453
|
+
callPaused: "Tauolla",
|
|
12454
|
+
callReconnecting: "Yhdistetään uudelleen",
|
|
12455
|
+
callTranscript: "Puhelun litterointi",
|
|
12456
|
+
callPause: "Keskeytä mikrofoni",
|
|
12457
|
+
callResume: "Jatka mikrofonia",
|
|
12458
|
+
callPauseLabel: "Tauko",
|
|
12459
|
+
callResumeLabel: "Jatka",
|
|
12460
|
+
callEnd: "Lopeta puhelu",
|
|
12461
|
+
callEndLabel: "Lopeta"
|
|
12462
|
+
},
|
|
12463
|
+
fr: {
|
|
12464
|
+
callConnecting: "Connexion...",
|
|
12465
|
+
callLive: "En direct",
|
|
12466
|
+
callPaused: "En pause",
|
|
12467
|
+
callReconnecting: "Reconnexion",
|
|
12468
|
+
callTranscript: "Transcription de l'appel",
|
|
12469
|
+
callPause: "Mettre le micro en pause",
|
|
12470
|
+
callResume: "Reprendre le micro",
|
|
12471
|
+
callPauseLabel: "Pause",
|
|
12472
|
+
callResumeLabel: "Reprendre",
|
|
12473
|
+
callEnd: "Terminer l'appel",
|
|
12474
|
+
callEndLabel: "Terminer"
|
|
12475
|
+
},
|
|
12476
|
+
de: {
|
|
12477
|
+
callConnecting: "Verbindung wird hergestellt...",
|
|
12478
|
+
callLive: "Live",
|
|
12479
|
+
callPaused: "Pausiert",
|
|
12480
|
+
callReconnecting: "Verbindung wird wiederhergestellt",
|
|
12481
|
+
callTranscript: "Gesprächstranskript",
|
|
12482
|
+
callPause: "Mikrofon pausieren",
|
|
12483
|
+
callResume: "Mikrofon fortsetzen",
|
|
12484
|
+
callPauseLabel: "Pause",
|
|
12485
|
+
callResumeLabel: "Fortsetzen",
|
|
12486
|
+
callEnd: "Anruf beenden",
|
|
12487
|
+
callEndLabel: "Beenden"
|
|
12488
|
+
},
|
|
12489
|
+
el: {
|
|
12490
|
+
callConnecting: "Σύνδεση...",
|
|
12491
|
+
callLive: "Ζωντανά",
|
|
12492
|
+
callPaused: "Σε παύση",
|
|
12493
|
+
callReconnecting: "Επανασύνδεση",
|
|
12494
|
+
callTranscript: "Απομαγνητοφώνηση κλήσης",
|
|
12495
|
+
callPause: "Παύση μικροφώνου",
|
|
12496
|
+
callResume: "Συνέχιση μικροφώνου",
|
|
12497
|
+
callPauseLabel: "Παύση",
|
|
12498
|
+
callResumeLabel: "Συνέχεια",
|
|
12499
|
+
callEnd: "Τερματισμός κλήσης",
|
|
12500
|
+
callEndLabel: "Τέλος"
|
|
12501
|
+
},
|
|
12502
|
+
hi: {
|
|
12503
|
+
callConnecting: "कनेक्ट हो रहा है...",
|
|
12504
|
+
callLive: "लाइव",
|
|
12505
|
+
callPaused: "रुका हुआ",
|
|
12506
|
+
callReconnecting: "फिर से कनेक्ट हो रहा है",
|
|
12507
|
+
callTranscript: "कॉल ट्रांसक्रिप्ट",
|
|
12508
|
+
callPause: "माइक्रोफ़ोन रोकें",
|
|
12509
|
+
callResume: "माइक्रोफ़ोन फिर से शुरू करें",
|
|
12510
|
+
callPauseLabel: "रोकें",
|
|
12511
|
+
callResumeLabel: "फिर शुरू करें",
|
|
12512
|
+
callEnd: "कॉल समाप्त करें",
|
|
12513
|
+
callEndLabel: "समाप्त करें"
|
|
12514
|
+
},
|
|
12515
|
+
mr: {
|
|
12516
|
+
callConnecting: "कनेक्ट होत आहे...",
|
|
12517
|
+
callLive: "लाइव्ह",
|
|
12518
|
+
callPaused: "थांबवले",
|
|
12519
|
+
callReconnecting: "पुन्हा कनेक्ट होत आहे",
|
|
12520
|
+
callTranscript: "कॉलचा उतारा",
|
|
12521
|
+
callPause: "मायक्रोफोन थांबवा",
|
|
12522
|
+
callResume: "मायक्रोफोन पुन्हा सुरू करा",
|
|
12523
|
+
callPauseLabel: "थांबवा",
|
|
12524
|
+
callResumeLabel: "पुन्हा सुरू करा",
|
|
12525
|
+
callEnd: "कॉल संपवा",
|
|
12526
|
+
callEndLabel: "संपवा"
|
|
12527
|
+
},
|
|
12528
|
+
hu: {
|
|
12529
|
+
callConnecting: "Kapcsolódás...",
|
|
12530
|
+
callLive: "Élő",
|
|
12531
|
+
callPaused: "Szüneteltetve",
|
|
12532
|
+
callReconnecting: "Újrakapcsolódás",
|
|
12533
|
+
callTranscript: "A hívás átirata",
|
|
12534
|
+
callPause: "Mikrofon szüneteltetése",
|
|
12535
|
+
callResume: "Mikrofon folytatása",
|
|
12536
|
+
callPauseLabel: "Szünet",
|
|
12537
|
+
callResumeLabel: "Folytatás",
|
|
12538
|
+
callEnd: "Hívás befejezése",
|
|
12539
|
+
callEndLabel: "Befejezés"
|
|
12540
|
+
},
|
|
12541
|
+
is: {
|
|
12542
|
+
callConnecting: "Tengist...",
|
|
12543
|
+
callLive: "Í beinni",
|
|
12544
|
+
callPaused: "Í hléi",
|
|
12545
|
+
callReconnecting: "Tengist aftur",
|
|
12546
|
+
callTranscript: "Afrit af símtali",
|
|
12547
|
+
callPause: "Gera hlé á hljóðnema",
|
|
12548
|
+
callResume: "Halda áfram með hljóðnema",
|
|
12549
|
+
callPauseLabel: "Hlé",
|
|
12550
|
+
callResumeLabel: "Halda áfram",
|
|
12551
|
+
callEnd: "Ljúka símtali",
|
|
12552
|
+
callEndLabel: "Ljúka"
|
|
12553
|
+
},
|
|
12554
|
+
id: {
|
|
12555
|
+
callConnecting: "Menghubungkan...",
|
|
12556
|
+
callLive: "Langsung",
|
|
12557
|
+
callPaused: "Dijeda",
|
|
12558
|
+
callReconnecting: "Menghubungkan ulang",
|
|
12559
|
+
callTranscript: "Transkrip panggilan",
|
|
12560
|
+
callPause: "Jeda mikrofon",
|
|
12561
|
+
callResume: "Lanjutkan mikrofon",
|
|
12562
|
+
callPauseLabel: "Jeda",
|
|
12563
|
+
callResumeLabel: "Lanjutkan",
|
|
12564
|
+
callEnd: "Akhiri panggilan",
|
|
12565
|
+
callEndLabel: "Akhiri"
|
|
12566
|
+
},
|
|
12567
|
+
it: {
|
|
12568
|
+
callConnecting: "Connessione...",
|
|
12569
|
+
callLive: "In diretta",
|
|
12570
|
+
callPaused: "In pausa",
|
|
12571
|
+
callReconnecting: "Riconnessione",
|
|
12572
|
+
callTranscript: "Trascrizione della chiamata",
|
|
12573
|
+
callPause: "Metti in pausa il microfono",
|
|
12574
|
+
callResume: "Riattiva il microfono",
|
|
12575
|
+
callPauseLabel: "Pausa",
|
|
12576
|
+
callResumeLabel: "Riprendi",
|
|
12577
|
+
callEnd: "Termina chiamata",
|
|
12578
|
+
callEndLabel: "Termina"
|
|
12579
|
+
},
|
|
12580
|
+
ja: {
|
|
12581
|
+
callConnecting: "接続中...",
|
|
12582
|
+
callLive: "ライブ",
|
|
12583
|
+
callPaused: "一時停止中",
|
|
12584
|
+
callReconnecting: "再接続中",
|
|
12585
|
+
callTranscript: "通話の文字起こし",
|
|
12586
|
+
callPause: "マイクを一時停止",
|
|
12587
|
+
callResume: "マイクを再開",
|
|
12588
|
+
callPauseLabel: "一時停止",
|
|
12589
|
+
callResumeLabel: "再開",
|
|
12590
|
+
callEnd: "通話を終了",
|
|
12591
|
+
callEndLabel: "終了"
|
|
12592
|
+
},
|
|
12593
|
+
ko: {
|
|
12594
|
+
callConnecting: "연결 중...",
|
|
12595
|
+
callLive: "통화 중",
|
|
12596
|
+
callPaused: "일시 중지됨",
|
|
12597
|
+
callReconnecting: "다시 연결 중",
|
|
12598
|
+
callTranscript: "통화 기록",
|
|
12599
|
+
callPause: "마이크 일시 중지",
|
|
12600
|
+
callResume: "마이크 다시 켜기",
|
|
12601
|
+
callPauseLabel: "일시 중지",
|
|
12602
|
+
callResumeLabel: "재개",
|
|
12603
|
+
callEnd: "통화 종료",
|
|
12604
|
+
callEndLabel: "종료"
|
|
12605
|
+
},
|
|
12606
|
+
lv: {
|
|
12607
|
+
callConnecting: "Savienojas...",
|
|
12608
|
+
callLive: "Tiešraidē",
|
|
12609
|
+
callPaused: "Pauzēts",
|
|
12610
|
+
callReconnecting: "Atjauno savienojumu",
|
|
12611
|
+
callTranscript: "Zvana atšifrējums",
|
|
12612
|
+
callPause: "Pauzēt mikrofonu",
|
|
12613
|
+
callResume: "Atsākt mikrofonu",
|
|
12614
|
+
callPauseLabel: "Pauze",
|
|
12615
|
+
callResumeLabel: "Atsākt",
|
|
12616
|
+
callEnd: "Beigt zvanu",
|
|
12617
|
+
callEndLabel: "Beigt"
|
|
12618
|
+
},
|
|
12619
|
+
lt: {
|
|
12620
|
+
callConnecting: "Jungiamasi...",
|
|
12621
|
+
callLive: "Tiesiogiai",
|
|
12622
|
+
callPaused: "Pristabdyta",
|
|
12623
|
+
callReconnecting: "Jungiamasi iš naujo",
|
|
12624
|
+
callTranscript: "Skambučio nuorašas",
|
|
12625
|
+
callPause: "Pristabdyti mikrofoną",
|
|
12626
|
+
callResume: "Tęsti mikrofoną",
|
|
12627
|
+
callPauseLabel: "Pristabdyti",
|
|
12628
|
+
callResumeLabel: "Tęsti",
|
|
12629
|
+
callEnd: "Baigti skambutį",
|
|
12630
|
+
callEndLabel: "Baigti"
|
|
12631
|
+
},
|
|
12632
|
+
mk: {
|
|
12633
|
+
callConnecting: "Се поврзува...",
|
|
12634
|
+
callLive: "Во живо",
|
|
12635
|
+
callPaused: "Паузирано",
|
|
12636
|
+
callReconnecting: "Повторно поврзување",
|
|
12637
|
+
callTranscript: "Транскрипт од повикот",
|
|
12638
|
+
callPause: "Паузирај го микрофонот",
|
|
12639
|
+
callResume: "Продолжи го микрофонот",
|
|
12640
|
+
callPauseLabel: "Пауза",
|
|
12641
|
+
callResumeLabel: "Продолжи",
|
|
12642
|
+
callEnd: "Заврши го повикот",
|
|
12643
|
+
callEndLabel: "Заврши"
|
|
12644
|
+
},
|
|
12645
|
+
ms: {
|
|
12646
|
+
callConnecting: "Menyambung...",
|
|
12647
|
+
callLive: "Langsung",
|
|
12648
|
+
callPaused: "Dijeda",
|
|
12649
|
+
callReconnecting: "Menyambung semula",
|
|
12650
|
+
callTranscript: "Transkrip panggilan",
|
|
12651
|
+
callPause: "Jeda mikrofon",
|
|
12652
|
+
callResume: "Sambung semula mikrofon",
|
|
12653
|
+
callPauseLabel: "Jeda",
|
|
12654
|
+
callResumeLabel: "Sambung semula",
|
|
12655
|
+
callEnd: "Tamatkan panggilan",
|
|
12656
|
+
callEndLabel: "Tamatkan"
|
|
12657
|
+
},
|
|
12658
|
+
no: {
|
|
12659
|
+
callConnecting: "Kobler til...",
|
|
12660
|
+
callLive: "Direkte",
|
|
12661
|
+
callPaused: "Satt på pause",
|
|
12662
|
+
callReconnecting: "Kobler til på nytt",
|
|
12663
|
+
callTranscript: "Transkripsjon av samtalen",
|
|
12664
|
+
callPause: "Sett mikrofonen på pause",
|
|
12665
|
+
callResume: "Gjenoppta mikrofonen",
|
|
12666
|
+
callPauseLabel: "Pause",
|
|
12667
|
+
callResumeLabel: "Gjenoppta",
|
|
12668
|
+
callEnd: "Avslutt samtalen",
|
|
12669
|
+
callEndLabel: "Avslutt"
|
|
12670
|
+
},
|
|
12671
|
+
fa: {
|
|
12672
|
+
callConnecting: "در حال اتصال...",
|
|
12673
|
+
callLive: "زنده",
|
|
12674
|
+
callPaused: "متوقف شده",
|
|
12675
|
+
callReconnecting: "در حال اتصال دوباره",
|
|
12676
|
+
callTranscript: "متن تماس",
|
|
12677
|
+
callPause: "توقف موقت میکروفون",
|
|
12678
|
+
callResume: "ادامه میکروفون",
|
|
12679
|
+
callPauseLabel: "توقف موقت",
|
|
12680
|
+
callResumeLabel: "ادامه",
|
|
12681
|
+
callEnd: "پایان تماس",
|
|
12682
|
+
callEndLabel: "پایان"
|
|
12683
|
+
},
|
|
12684
|
+
pl: {
|
|
12685
|
+
callConnecting: "Łączenie...",
|
|
12686
|
+
callLive: "Na żywo",
|
|
12687
|
+
callPaused: "Wstrzymano",
|
|
12688
|
+
callReconnecting: "Ponowne łączenie",
|
|
12689
|
+
callTranscript: "Transkrypcja rozmowy",
|
|
12690
|
+
callPause: "Wstrzymaj mikrofon",
|
|
12691
|
+
callResume: "Wznów mikrofon",
|
|
12692
|
+
callPauseLabel: "Wstrzymaj",
|
|
12693
|
+
callResumeLabel: "Wznów",
|
|
12694
|
+
callEnd: "Zakończ rozmowę",
|
|
12695
|
+
callEndLabel: "Zakończ"
|
|
12696
|
+
},
|
|
12697
|
+
pt: {
|
|
12698
|
+
callConnecting: "Conectando...",
|
|
12699
|
+
callLive: "Ao vivo",
|
|
12700
|
+
callPaused: "Pausado",
|
|
12701
|
+
callReconnecting: "Reconectando",
|
|
12702
|
+
callTranscript: "Transcrição da chamada",
|
|
12703
|
+
callPause: "Pausar microfone",
|
|
12704
|
+
callResume: "Retomar microfone",
|
|
12705
|
+
callPauseLabel: "Pausar",
|
|
12706
|
+
callResumeLabel: "Retomar",
|
|
12707
|
+
callEnd: "Encerrar chamada",
|
|
12708
|
+
callEndLabel: "Encerrar"
|
|
12709
|
+
},
|
|
12710
|
+
ro: {
|
|
12711
|
+
callConnecting: "Se conectează...",
|
|
12712
|
+
callLive: "În direct",
|
|
12713
|
+
callPaused: "În pauză",
|
|
12714
|
+
callReconnecting: "Se reconectează",
|
|
12715
|
+
callTranscript: "Transcrierea apelului",
|
|
12716
|
+
callPause: "Întrerupe microfonul",
|
|
12717
|
+
callResume: "Reia microfonul",
|
|
12718
|
+
callPauseLabel: "Pauză",
|
|
12719
|
+
callResumeLabel: "Reia",
|
|
12720
|
+
callEnd: "Încheie apelul",
|
|
12721
|
+
callEndLabel: "Încheie"
|
|
12722
|
+
},
|
|
12723
|
+
ru: {
|
|
12724
|
+
callConnecting: "Подключение...",
|
|
12725
|
+
callLive: "В эфире",
|
|
12726
|
+
callPaused: "Приостановлено",
|
|
12727
|
+
callReconnecting: "Переподключение",
|
|
12728
|
+
callTranscript: "Расшифровка звонка",
|
|
12729
|
+
callPause: "Приостановить микрофон",
|
|
12730
|
+
callResume: "Возобновить микрофон",
|
|
12731
|
+
callPauseLabel: "Пауза",
|
|
12732
|
+
callResumeLabel: "Продолжить",
|
|
12733
|
+
callEnd: "Завершить звонок",
|
|
12734
|
+
callEndLabel: "Завершить"
|
|
12735
|
+
},
|
|
12736
|
+
sr: {
|
|
12737
|
+
callConnecting: "Povezivanje...",
|
|
12738
|
+
callLive: "Uživo",
|
|
12739
|
+
callPaused: "Pauzirano",
|
|
12740
|
+
callReconnecting: "Ponovno povezivanje",
|
|
12741
|
+
callTranscript: "Transkript poziva",
|
|
12742
|
+
callPause: "Pauziraj mikrofon",
|
|
12743
|
+
callResume: "Nastavi mikrofon",
|
|
12744
|
+
callPauseLabel: "Pauza",
|
|
12745
|
+
callResumeLabel: "Nastavi",
|
|
12746
|
+
callEnd: "Završi poziv",
|
|
12747
|
+
callEndLabel: "Završi"
|
|
12748
|
+
},
|
|
12749
|
+
sk: {
|
|
12750
|
+
callConnecting: "Pripája sa...",
|
|
12751
|
+
callLive: "Naživo",
|
|
12752
|
+
callPaused: "Pozastavené",
|
|
12753
|
+
callReconnecting: "Opätovné pripájanie",
|
|
12754
|
+
callTranscript: "Prepis hovoru",
|
|
12755
|
+
callPause: "Pozastaviť mikrofón",
|
|
12756
|
+
callResume: "Obnoviť mikrofón",
|
|
12757
|
+
callPauseLabel: "Pozastaviť",
|
|
12758
|
+
callResumeLabel: "Pokračovať",
|
|
12759
|
+
callEnd: "Ukončiť hovor",
|
|
12760
|
+
callEndLabel: "Ukončiť"
|
|
12761
|
+
},
|
|
12762
|
+
sl: {
|
|
12763
|
+
callConnecting: "Povezovanje...",
|
|
12764
|
+
callLive: "V živo",
|
|
12765
|
+
callPaused: "Začasno ustavljeno",
|
|
12766
|
+
callReconnecting: "Ponovno povezovanje",
|
|
12767
|
+
callTranscript: "Prepis klica",
|
|
12768
|
+
callPause: "Začasno ustavi mikrofon",
|
|
12769
|
+
callResume: "Nadaljuj z mikrofonom",
|
|
12770
|
+
callPauseLabel: "Premor",
|
|
12771
|
+
callResumeLabel: "Nadaljuj",
|
|
12772
|
+
callEnd: "Končaj klic",
|
|
12773
|
+
callEndLabel: "Končaj"
|
|
12774
|
+
},
|
|
12775
|
+
sv: {
|
|
12776
|
+
callConnecting: "Ansluter...",
|
|
12777
|
+
callLive: "Live",
|
|
12778
|
+
callPaused: "Pausad",
|
|
12779
|
+
callReconnecting: "Återansluter",
|
|
12780
|
+
callTranscript: "Samtalsutskrift",
|
|
12781
|
+
callPause: "Pausa mikrofonen",
|
|
12782
|
+
callResume: "Återuppta mikrofonen",
|
|
12783
|
+
callPauseLabel: "Pausa",
|
|
12784
|
+
callResumeLabel: "Återuppta",
|
|
12785
|
+
callEnd: "Avsluta samtal",
|
|
12786
|
+
callEndLabel: "Avsluta"
|
|
12787
|
+
},
|
|
12788
|
+
th: {
|
|
12789
|
+
callConnecting: "กำลังเชื่อมต่อ...",
|
|
12790
|
+
callLive: "กำลังสนทนา",
|
|
12791
|
+
callPaused: "หยุดชั่วคราว",
|
|
12792
|
+
callReconnecting: "กำลังเชื่อมต่อใหม่",
|
|
12793
|
+
callTranscript: "บันทึกการสนทนา",
|
|
12794
|
+
callPause: "หยุดไมโครโฟนชั่วคราว",
|
|
12795
|
+
callResume: "เปิดไมโครโฟนต่อ",
|
|
12796
|
+
callPauseLabel: "หยุดชั่วคราว",
|
|
12797
|
+
callResumeLabel: "ทำต่อ",
|
|
12798
|
+
callEnd: "วางสาย",
|
|
12799
|
+
callEndLabel: "วางสาย"
|
|
12800
|
+
},
|
|
12801
|
+
tr: {
|
|
12802
|
+
callConnecting: "Bağlanıyor...",
|
|
12803
|
+
callLive: "Canlı",
|
|
12804
|
+
callPaused: "Duraklatıldı",
|
|
12805
|
+
callReconnecting: "Yeniden bağlanıyor",
|
|
12806
|
+
callTranscript: "Arama dökümü",
|
|
12807
|
+
callPause: "Mikrofonu duraklat",
|
|
12808
|
+
callResume: "Mikrofonu sürdür",
|
|
12809
|
+
callPauseLabel: "Duraklat",
|
|
12810
|
+
callResumeLabel: "Sürdür",
|
|
12811
|
+
callEnd: "Aramayı bitir",
|
|
12812
|
+
callEndLabel: "Bitir"
|
|
12813
|
+
},
|
|
12814
|
+
uk: {
|
|
12815
|
+
callConnecting: "Підключення...",
|
|
12816
|
+
callLive: "Наживо",
|
|
12817
|
+
callPaused: "Призупинено",
|
|
12818
|
+
callReconnecting: "Повторне підключення",
|
|
12819
|
+
callTranscript: "Розшифровка дзвінка",
|
|
12820
|
+
callPause: "Призупинити мікрофон",
|
|
12821
|
+
callResume: "Відновити мікрофон",
|
|
12822
|
+
callPauseLabel: "Пауза",
|
|
12823
|
+
callResumeLabel: "Продовжити",
|
|
12824
|
+
callEnd: "Завершити дзвінок",
|
|
12825
|
+
callEndLabel: "Завершити"
|
|
12826
|
+
},
|
|
12827
|
+
ur: {
|
|
12828
|
+
callConnecting: "رابطہ ہو رہا ہے...",
|
|
12829
|
+
callLive: "براہ راست",
|
|
12830
|
+
callPaused: "موقوف",
|
|
12831
|
+
callReconnecting: "دوبارہ رابطہ ہو رہا ہے",
|
|
12832
|
+
callTranscript: "کال کی تحریر",
|
|
12833
|
+
callPause: "مائیکروفون موقوف کریں",
|
|
12834
|
+
callResume: "مائیکروفون دوبارہ شروع کریں",
|
|
12835
|
+
callPauseLabel: "موقوف کریں",
|
|
12836
|
+
callResumeLabel: "دوبارہ شروع کریں",
|
|
12837
|
+
callEnd: "کال ختم کریں",
|
|
12838
|
+
callEndLabel: "ختم کریں"
|
|
12839
|
+
},
|
|
12840
|
+
vi: {
|
|
12841
|
+
callConnecting: "Đang kết nối...",
|
|
12842
|
+
callLive: "Trực tiếp",
|
|
12843
|
+
callPaused: "Đã tạm dừng",
|
|
12844
|
+
callReconnecting: "Đang kết nối lại",
|
|
12845
|
+
callTranscript: "Bản ghi cuộc gọi",
|
|
12846
|
+
callPause: "Tạm dừng micrô",
|
|
12847
|
+
callResume: "Tiếp tục micrô",
|
|
12848
|
+
callPauseLabel: "Tạm dừng",
|
|
12849
|
+
callResumeLabel: "Tiếp tục",
|
|
12850
|
+
callEnd: "Kết thúc cuộc gọi",
|
|
12851
|
+
callEndLabel: "Kết thúc"
|
|
12852
|
+
}
|
|
12853
|
+
};
|
|
12261
12854
|
const ONBOARDING_PLACEHOLDERS = {
|
|
12262
12855
|
en: {
|
|
12263
12856
|
onboardingNamePlaceholder: "Please enter your name",
|
|
@@ -12586,7 +13179,7 @@
|
|
|
12586
13179
|
const normalized = normalizeLocale(locale);
|
|
12587
13180
|
const dict = DICTIONARIES[normalized] || EN;
|
|
12588
13181
|
const onboarding = ONBOARDING_PLACEHOLDERS[normalized];
|
|
12589
|
-
return onboarding?.[key] ?? dict[key] ?? A11Y_LABELS[normalized]?.[key] ?? ATTACHMENT_REJECTION_TEXTS[normalized]?.[key] ?? ONBOARDING_PLACEHOLDERS.en[key] ?? A11Y_LABELS.en[key] ?? ATTACHMENT_REJECTION_TEXTS.en[key] ?? EN[key] ?? key;
|
|
13182
|
+
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;
|
|
12590
13183
|
}
|
|
12591
13184
|
function createTranslator(locale) {
|
|
12592
13185
|
const normalized = normalizeLocale(locale);
|
|
@@ -12711,6 +13304,99 @@
|
|
|
12711
13304
|
return [...prev, makeBubble(text)];
|
|
12712
13305
|
}
|
|
12713
13306
|
|
|
13307
|
+
/**
|
|
13308
|
+
* The card a voice answer puts on the call screen.
|
|
13309
|
+
*
|
|
13310
|
+
* voice-runtime sends `{"a2ui": {"blocks": ["```eshal-ui ...```", ...]}}`
|
|
13311
|
+
* while the agent is still speaking. The blocks are already fenced, so the
|
|
13312
|
+
* chat's markdown renderer shows them unchanged. The card belongs to the last
|
|
13313
|
+
* assistant message and stays on screen until a newer answer has words of
|
|
13314
|
+
* its own.
|
|
13315
|
+
* Mirrors packages/frontend/src/components/chatbot-preview/voiceCard.ts.
|
|
13316
|
+
*/
|
|
13317
|
+
|
|
13318
|
+
/** The joined card blocks if the event carries a card, else null. */
|
|
13319
|
+
function voiceCardText(event) {
|
|
13320
|
+
const blocks = event?.a2ui?.blocks;
|
|
13321
|
+
if (!Array.isArray(blocks)) return null;
|
|
13322
|
+
const parts = blocks.filter(b => typeof b === "string" && b.trim() !== "");
|
|
13323
|
+
return parts.length ? parts.join("\n\n") : null;
|
|
13324
|
+
}
|
|
13325
|
+
|
|
13326
|
+
/** The messages with the event's card attached to the last assistant message. */
|
|
13327
|
+
function applyVoiceCard(messages, event) {
|
|
13328
|
+
const card = voiceCardText(event);
|
|
13329
|
+
if (!card) return messages;
|
|
13330
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
13331
|
+
if (messages[i].role === "assistant") {
|
|
13332
|
+
const next = [...messages];
|
|
13333
|
+
next[i] = {
|
|
13334
|
+
...next[i],
|
|
13335
|
+
a2ui: card
|
|
13336
|
+
};
|
|
13337
|
+
return next;
|
|
13338
|
+
}
|
|
13339
|
+
}
|
|
13340
|
+
return messages;
|
|
13341
|
+
}
|
|
13342
|
+
|
|
13343
|
+
/**
|
|
13344
|
+
* The card on screen: the last card an answer carried. It stays while the
|
|
13345
|
+
* caller speaks and while the next answer is still on its way (dev, 5 Nov
|
|
13346
|
+
* 2026: a payment link vanished the moment the caller asked about it), and
|
|
13347
|
+
* goes once a newer answer has words of its own.
|
|
13348
|
+
*/
|
|
13349
|
+
function latestVoiceCard(lines) {
|
|
13350
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
13351
|
+
const line = lines[i];
|
|
13352
|
+
if (line.role !== "assistant") continue;
|
|
13353
|
+
if (line.a2ui) return line.a2ui;
|
|
13354
|
+
if (!line.isProcessing && (line.content || "").trim()) return "";
|
|
13355
|
+
}
|
|
13356
|
+
return "";
|
|
13357
|
+
}
|
|
13358
|
+
const CARD_FENCE = /```[ \t]*(?:eshal-ui|eshal-chart|chart)\b[^\n]*\n[\s\S]*?(?:```|$)/g;
|
|
13359
|
+
|
|
13360
|
+
/**
|
|
13361
|
+
* An answer's words without its cards. On the call screen the card is drawn
|
|
13362
|
+
* below the answer, so its title and body would otherwise show twice.
|
|
13363
|
+
*/
|
|
13364
|
+
function withoutCards(text) {
|
|
13365
|
+
return (text || "").replace(CARD_FENCE, "").replace(/\n{3,}/g, "\n\n").trim();
|
|
13366
|
+
}
|
|
13367
|
+
|
|
13368
|
+
// `[7]`, `[7][8]`, `[7, 8]`, `[7-9]`: the same shapes the frontend's
|
|
13369
|
+
// stripCitationMarkers drops (U+2013 written as an escape).
|
|
13370
|
+
const CITATION_MARKERS = /\s*\[\d+(?:\s*[,\-–]\s*\d+)*\](?:\s*\[\d+(?:\s*[,\-–]\s*\d+)*\])*/g;
|
|
13371
|
+
|
|
13372
|
+
/**
|
|
13373
|
+
* The words a call line shows: no cards and no citation markers. The call
|
|
13374
|
+
* screen has no source pills; the chat shows them once the call ends.
|
|
13375
|
+
*/
|
|
13376
|
+
function callLineText(text) {
|
|
13377
|
+
return withoutCards(text).replace(CITATION_MARKERS, "").replace(/\s+([.,;:!?])/g, "$1").replace(/[ \t]{2,}/g, " ").trim();
|
|
13378
|
+
}
|
|
13379
|
+
|
|
13380
|
+
/**
|
|
13381
|
+
* A card button whose value is a web address (a payment or check-in link)
|
|
13382
|
+
* opens in a new tab rather than being sent as the caller's next turn.
|
|
13383
|
+
* Returns true when it was a link and was opened.
|
|
13384
|
+
*/
|
|
13385
|
+
function openCardLink(value, open = url => {
|
|
13386
|
+
window.open(url, "_blank", "noopener,noreferrer");
|
|
13387
|
+
}) {
|
|
13388
|
+
const text = String(value ?? "").trim();
|
|
13389
|
+
let url;
|
|
13390
|
+
try {
|
|
13391
|
+
url = new URL(text);
|
|
13392
|
+
} catch {
|
|
13393
|
+
return false; // not an address: a choice the agent should hear
|
|
13394
|
+
}
|
|
13395
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") return false;
|
|
13396
|
+
open(url.href);
|
|
13397
|
+
return true;
|
|
13398
|
+
}
|
|
13399
|
+
|
|
12714
13400
|
/**
|
|
12715
13401
|
* Replies the widget never streamed itself.
|
|
12716
13402
|
*
|
|
@@ -13626,6 +14312,9 @@
|
|
|
13626
14312
|
// Bidi/Voice state
|
|
13627
14313
|
const [isConversationLoading, setIsConversationLoading] = reactExports.useState(false);
|
|
13628
14314
|
const [isVoiceSessionActive, setIsVoiceSessionActive] = reactExports.useState(false);
|
|
14315
|
+
// The call screen's Pause (toggleVoicePause): mic frames are dropped before
|
|
14316
|
+
// the speech gate while true. The socket stays open.
|
|
14317
|
+
const [isVoicePaused, setIsVoicePaused] = reactExports.useState(false);
|
|
13629
14318
|
const [bidiMessages, setBidiMessages] = reactExports.useState([]);
|
|
13630
14319
|
const [voiceStatus, setVoiceStatus] = reactExports.useState("idle"); // 'idle' | 'connecting' | 'connected' | 'error'
|
|
13631
14320
|
const [voiceError, setVoiceError] = reactExports.useState(null);
|
|
@@ -13758,9 +14447,14 @@
|
|
|
13758
14447
|
});
|
|
13759
14448
|
};
|
|
13760
14449
|
const currentInputMessageIdRef = reactExports.useRef(null);
|
|
14450
|
+
// voice-runtime's live turn bubble (inputTranscription.replace). Only its
|
|
14451
|
+
// finished question clears it, never an interruption or a word of the bot's
|
|
14452
|
+
// reply, so a question spoken over the agent shows once.
|
|
14453
|
+
const liveInputMessageIdRef = reactExports.useRef(null);
|
|
13761
14454
|
const currentAssistantMessageIdRef = reactExports.useRef(null);
|
|
13762
14455
|
const isAudioReadyRef = reactExports.useRef(false);
|
|
13763
14456
|
const isVoiceSessionActiveRef = reactExports.useRef(false);
|
|
14457
|
+
const isVoicePausedRef = reactExports.useRef(false);
|
|
13764
14458
|
reactExports.useRef(null);
|
|
13765
14459
|
const pendingAssistantUpdateRef = reactExports.useRef(null); // Track pending assistant updates to prevent duplicates
|
|
13766
14460
|
reactExports.useRef(null); // Track when user started speaking for proper timestamp ordering
|
|
@@ -15104,25 +15798,39 @@
|
|
|
15104
15798
|
});
|
|
15105
15799
|
currentInputMessageIdRef.current = null;
|
|
15106
15800
|
}, []);
|
|
15107
|
-
const appendUserTranscription = reactExports.useCallback((text, finished = false) => {
|
|
15801
|
+
const appendUserTranscription = reactExports.useCallback((text, finished = false, replace = false) => {
|
|
15108
15802
|
// Mark that user has spoken - now we can process assistant responses
|
|
15109
15803
|
userHasSpokenRef.current = true;
|
|
15804
|
+
|
|
15805
|
+
// voice-runtime sends the whole turn so far each time (replace) and the
|
|
15806
|
+
// turn keeps its own marker; knowledge-api sends chunks to append to the
|
|
15807
|
+
// shared one. On the qa calls of 5 Nov 2026 the caller spoke over the
|
|
15808
|
+
// bot and the interruption cleared the shared marker between the live
|
|
15809
|
+
// words and the finished question, so the question showed twice.
|
|
15810
|
+
const inputIdRef = replace ? liveInputMessageIdRef : currentInputMessageIdRef;
|
|
15110
15811
|
if (!text || typeof text === 'string' && !text.trim()) {
|
|
15111
|
-
if (finished
|
|
15112
|
-
|
|
15113
|
-
|
|
15114
|
-
|
|
15115
|
-
|
|
15116
|
-
|
|
15812
|
+
if (finished) {
|
|
15813
|
+
// The marker is read and cleared inside the update, like every
|
|
15814
|
+
// other use of it here (see the end of the update below).
|
|
15815
|
+
setBidiMessages(prev => {
|
|
15816
|
+
const doneId = inputIdRef.current;
|
|
15817
|
+
inputIdRef.current = null;
|
|
15818
|
+
if (!doneId) return prev;
|
|
15819
|
+
return prev.map(message => message.id === doneId ? {
|
|
15820
|
+
...message,
|
|
15821
|
+
isProcessing: false
|
|
15822
|
+
} : message);
|
|
15823
|
+
});
|
|
15117
15824
|
}
|
|
15118
15825
|
return;
|
|
15119
15826
|
}
|
|
15120
15827
|
const chunk = cleanCJKSpaces(text);
|
|
15828
|
+
const join = previous => replace ? chunk : cleanCJKSpaces(`${previous || ""}${chunk}`);
|
|
15121
15829
|
setBidiMessages(prev => {
|
|
15122
15830
|
const prevLength = prev.length;
|
|
15123
15831
|
let result = [...prev]; // Create new array to avoid mutations
|
|
15124
15832
|
|
|
15125
|
-
if (!
|
|
15833
|
+
if (!inputIdRef.current) {
|
|
15126
15834
|
const newId = `bidi-input-${Date.now()}`;
|
|
15127
15835
|
const latestAssistantMessage = prev.filter(m => m.role === "assistant" && m.metadata?.source === "bidi").sort((a, b) => {
|
|
15128
15836
|
const timeA = a.timestamp instanceof Date ? a.timestamp.getTime() : new Date(a.timestamp).getTime();
|
|
@@ -15149,27 +15857,27 @@
|
|
|
15149
15857
|
if (!messageExists) {
|
|
15150
15858
|
result = [...result, userMessage];
|
|
15151
15859
|
// Set ref AFTER adding message to result array
|
|
15152
|
-
|
|
15860
|
+
inputIdRef.current = newId;
|
|
15153
15861
|
} else {
|
|
15154
15862
|
console.warn("[BIDI] appendUserTranscription: message already exists, updating instead", {
|
|
15155
15863
|
messageId: newId
|
|
15156
15864
|
});
|
|
15157
|
-
|
|
15865
|
+
inputIdRef.current = newId;
|
|
15158
15866
|
result = result.map(msg => msg.id === newId ? {
|
|
15159
15867
|
...msg,
|
|
15160
|
-
content: `${msg.content || ""}${chunk}`,
|
|
15868
|
+
content: replace ? chunk : `${msg.content || ""}${chunk}`,
|
|
15161
15869
|
isProcessing: !finished
|
|
15162
15870
|
} : msg);
|
|
15163
15871
|
}
|
|
15164
15872
|
} else {
|
|
15165
15873
|
// Update existing user message
|
|
15166
|
-
const userMessageExists = result.some(m => m.id ===
|
|
15874
|
+
const userMessageExists = result.some(m => m.id === inputIdRef.current);
|
|
15167
15875
|
if (userMessageExists) {
|
|
15168
15876
|
result = result.map(message => {
|
|
15169
|
-
if (message.id !==
|
|
15877
|
+
if (message.id !== inputIdRef.current) {
|
|
15170
15878
|
return message;
|
|
15171
15879
|
}
|
|
15172
|
-
const combined =
|
|
15880
|
+
const combined = join(message.content);
|
|
15173
15881
|
return {
|
|
15174
15882
|
...message,
|
|
15175
15883
|
content: combined,
|
|
@@ -15184,12 +15892,12 @@
|
|
|
15184
15892
|
});
|
|
15185
15893
|
} else {
|
|
15186
15894
|
console.error("[BIDI] appendUserTranscription: ERROR - user message not found!", {
|
|
15187
|
-
expectedId:
|
|
15895
|
+
expectedId: inputIdRef.current,
|
|
15188
15896
|
existingIds: result.map(m => m.id)
|
|
15189
15897
|
});
|
|
15190
15898
|
// Message was lost - create a new one
|
|
15191
15899
|
const newId = `bidi-input-${Date.now()}`;
|
|
15192
|
-
|
|
15900
|
+
inputIdRef.current = newId;
|
|
15193
15901
|
const userMessage = createMessage({
|
|
15194
15902
|
id: newId,
|
|
15195
15903
|
role: "user",
|
|
@@ -15207,6 +15915,14 @@
|
|
|
15207
15915
|
}
|
|
15208
15916
|
}
|
|
15209
15917
|
|
|
15918
|
+
// A finished turn clears its marker here, inside the update that read
|
|
15919
|
+
// it. React can run this update after the call returns; clearing the
|
|
15920
|
+
// marker outside it then let the update see no marker and add the
|
|
15921
|
+
// finished question as a second bubble.
|
|
15922
|
+
if (finished) {
|
|
15923
|
+
inputIdRef.current = null;
|
|
15924
|
+
}
|
|
15925
|
+
|
|
15210
15926
|
// CRITICAL: Safety check - never return fewer messages than we started with
|
|
15211
15927
|
if (result.length < prevLength) {
|
|
15212
15928
|
console.error("[BIDI] appendUserTranscription: CRITICAL ERROR - losing messages!", {
|
|
@@ -15228,7 +15944,6 @@
|
|
|
15228
15944
|
return result;
|
|
15229
15945
|
});
|
|
15230
15946
|
if (finished) {
|
|
15231
|
-
currentInputMessageIdRef.current = null;
|
|
15232
15947
|
setIsLoading(true);
|
|
15233
15948
|
}
|
|
15234
15949
|
}, []);
|
|
@@ -15450,16 +16165,12 @@
|
|
|
15450
16165
|
});
|
|
15451
16166
|
currentAssistantMessageIdRef.current = null;
|
|
15452
16167
|
pendingAssistantUpdateRef.current = null;
|
|
15453
|
-
} else {
|
|
15454
|
-
// Clear pending update ref after state update completes to allow new updates
|
|
15455
|
-
// Use a microtask to clear after React has processed the update
|
|
15456
|
-
const keyToClear = updateKey;
|
|
15457
|
-
Promise.resolve().then(() => {
|
|
15458
|
-
if (pendingAssistantUpdateRef.current === keyToClear) {
|
|
15459
|
-
pendingAssistantUpdateRef.current = null;
|
|
15460
|
-
}
|
|
15461
|
-
});
|
|
15462
16168
|
}
|
|
16169
|
+
// A partial transcript used to clear pendingAssistantUpdateRef in a
|
|
16170
|
+
// microtask keyed on `updateKey`, a name never defined here. It threw on
|
|
16171
|
+
// every partial, and the socket handler dropped the rest of that message
|
|
16172
|
+
// (its audio, its prompts). Nothing sets the ref to a key, so there is
|
|
16173
|
+
// nothing to clear.
|
|
15463
16174
|
}, []);
|
|
15464
16175
|
const handleContentParts = reactExports.useCallback((parts, finished = false, audioOnly = false) => {
|
|
15465
16176
|
console.log("[BIDI] handleContentParts called", {
|
|
@@ -15547,11 +16258,14 @@
|
|
|
15547
16258
|
setIsVoiceSessionActive(false);
|
|
15548
16259
|
setIsLoading(false);
|
|
15549
16260
|
isVoiceSessionActiveRef.current = false;
|
|
16261
|
+
isVoicePausedRef.current = false;
|
|
16262
|
+
setIsVoicePaused(false);
|
|
15550
16263
|
setVoiceStatus("idle");
|
|
15551
16264
|
setVoiceError(null);
|
|
15552
16265
|
|
|
15553
16266
|
// Reset userHasSpoken flag when stopping session
|
|
15554
16267
|
userHasSpokenRef.current = false;
|
|
16268
|
+
liveInputMessageIdRef.current = null;
|
|
15555
16269
|
pendingVoiceSourcesRef.current = null;
|
|
15556
16270
|
if (bargeInTimerRef.current) clearTimeout(bargeInTimerRef.current);
|
|
15557
16271
|
bargeInTimerRef.current = null;
|
|
@@ -15646,6 +16360,13 @@
|
|
|
15646
16360
|
});
|
|
15647
16361
|
return;
|
|
15648
16362
|
}
|
|
16363
|
+
|
|
16364
|
+
// Paused: the agent is not heard and its words are not shown. Audio
|
|
16365
|
+
// that arrives now is dropped, not queued for after the pause.
|
|
16366
|
+
if (isVoicePausedRef.current && (event.content?.parts || event.outputTranscription || event.greeting)) {
|
|
16367
|
+
if (event.turnComplete) handleTurnComplete();
|
|
16368
|
+
return;
|
|
16369
|
+
}
|
|
15649
16370
|
if (event.interrupted) {
|
|
15650
16371
|
console.log("[BIDI] handleBidiEvent: processing interrupted");
|
|
15651
16372
|
handleInterrupted();
|
|
@@ -15665,7 +16386,7 @@
|
|
|
15665
16386
|
// Only call appendUserTranscription if there's actual text or if it's finished
|
|
15666
16387
|
if (transcriptionText || transcriptionFinished) {
|
|
15667
16388
|
updateActivity(organizationId);
|
|
15668
|
-
appendUserTranscription(transcriptionText, transcriptionFinished);
|
|
16389
|
+
appendUserTranscription(transcriptionText, transcriptionFinished, Boolean(event.inputTranscription.replace));
|
|
15669
16390
|
} else {
|
|
15670
16391
|
console.warn("[BIDI] handleBidiEvent: inputTranscription event has no text and not finished", event.inputTranscription);
|
|
15671
16392
|
}
|
|
@@ -15719,6 +16440,14 @@
|
|
|
15719
16440
|
});
|
|
15720
16441
|
}
|
|
15721
16442
|
|
|
16443
|
+
// The card a voice answer puts on the call screen (lib/voiceCard.js).
|
|
16444
|
+
// It is silent, so it is kept even while paused; finalTranscript only
|
|
16445
|
+
// replaces content, so the card survives it.
|
|
16446
|
+
if (voiceCardText(event)) {
|
|
16447
|
+
setBidiMessages(prev => applyVoiceCard(prev, event));
|
|
16448
|
+
return;
|
|
16449
|
+
}
|
|
16450
|
+
|
|
15722
16451
|
// Voice citations (round 3): the streaming voice path fans out ADK
|
|
15723
16452
|
// *partial* deltas as the live transcript, but only the FINAL answer
|
|
15724
16453
|
// carries the trailing `[N]` markers, so the accumulated transcript had no
|
|
@@ -15842,7 +16571,9 @@
|
|
|
15842
16571
|
}
|
|
15843
16572
|
}, [appendAssistantContent, appendUserTranscription, handleContentParts, handleInterrupted, handleTurnComplete, stopVoiceSession, settleBargeIn]);
|
|
15844
16573
|
const handleRecorderAudio = reactExports.useCallback(pcmData => {
|
|
15845
|
-
|
|
16574
|
+
// Frames after the session stopped, or while the call is paused, are
|
|
16575
|
+
// dropped before the gate sees them.
|
|
16576
|
+
if (!isVoiceSessionActiveRef.current || isVoicePausedRef.current) {
|
|
15846
16577
|
return;
|
|
15847
16578
|
}
|
|
15848
16579
|
// Route mic frames through the VAD gate: it forwards only voiced frames
|
|
@@ -16080,8 +16811,11 @@
|
|
|
16080
16811
|
|
|
16081
16812
|
// Reset userHasSpoken flag when starting new session
|
|
16082
16813
|
userHasSpokenRef.current = false;
|
|
16814
|
+
liveInputMessageIdRef.current = null;
|
|
16083
16815
|
greetingActiveRef.current = false;
|
|
16084
16816
|
voiceWelcomeIdRef.current = null;
|
|
16817
|
+
isVoicePausedRef.current = false;
|
|
16818
|
+
setIsVoicePaused(false);
|
|
16085
16819
|
setBidiMessages(prev => {
|
|
16086
16820
|
// Don't add welcome message if there are already any messages (either bidi or text)
|
|
16087
16821
|
// This prevents showing welcome message when turning voice on again after a conversation
|
|
@@ -16125,6 +16859,33 @@
|
|
|
16125
16859
|
}
|
|
16126
16860
|
void startVoiceSession();
|
|
16127
16861
|
}, [isVoiceSessionActive, startVoiceSession, stopVoiceSession, voiceStatus]);
|
|
16862
|
+
|
|
16863
|
+
// The call screen's Pause stops sending mic audio without closing the
|
|
16864
|
+
// socket, and silences the agent: what it was saying stops now. A turn the
|
|
16865
|
+
// caller was in the middle of is closed with audio_end, so the server does
|
|
16866
|
+
// not wait on audio that will not come.
|
|
16867
|
+
const toggleVoicePause = reactExports.useCallback(() => {
|
|
16868
|
+
const next = !isVoicePausedRef.current;
|
|
16869
|
+
isVoicePausedRef.current = next;
|
|
16870
|
+
setIsVoicePaused(next);
|
|
16871
|
+
if (!next) return;
|
|
16872
|
+
audioPlayerNodeRef.current?.port.postMessage({
|
|
16873
|
+
command: "endOfAudio"
|
|
16874
|
+
});
|
|
16875
|
+
if (bargeInTimerRef.current) clearTimeout(bargeInTimerRef.current);
|
|
16876
|
+
bargeInTimerRef.current = null;
|
|
16877
|
+
bargeInPendingRef.current = false;
|
|
16878
|
+
const gate = speechGateRef.current;
|
|
16879
|
+
if (gate?.isSpeaking()) {
|
|
16880
|
+
const ws = websocketRef.current;
|
|
16881
|
+
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
16882
|
+
ws.send(JSON.stringify({
|
|
16883
|
+
type: "audio_end"
|
|
16884
|
+
}));
|
|
16885
|
+
}
|
|
16886
|
+
}
|
|
16887
|
+
gate?.reset();
|
|
16888
|
+
}, []);
|
|
16128
16889
|
const sendBidiTextMessage = reactExports.useCallback(text => {
|
|
16129
16890
|
const trimmed = text.trim();
|
|
16130
16891
|
if (!trimmed) {
|
|
@@ -16396,6 +17157,14 @@
|
|
|
16396
17157
|
}, [organizationId, inactivityTimeoutValue, inactivityTimeoutUnit, bidiSessionId]);
|
|
16397
17158
|
const memoizedQuickQuestions = reactExports.useMemo(() => quickQuestions, [quickQuestions]);
|
|
16398
17159
|
|
|
17160
|
+
// What the call screen's glow reads (hooks/useVoiceCallLevel.js): the
|
|
17161
|
+
// player it taps and the speech gate. Refs only, so the object is stable.
|
|
17162
|
+
const voiceLevelSource = reactExports.useMemo(() => ({
|
|
17163
|
+
playerNodeRef: audioPlayerNodeRef,
|
|
17164
|
+
playerContextRef: audioPlayerContextRef,
|
|
17165
|
+
speechGateRef
|
|
17166
|
+
}), []);
|
|
17167
|
+
|
|
16399
17168
|
// Merge and sort messages from both sources (text and voice) by timestamp
|
|
16400
17169
|
// This ensures all messages persist regardless of voice session state
|
|
16401
17170
|
const activeMessages = reactExports.useMemo(() => mergeTranscript(messages, bidiMessages), [bidiMessages, messages]);
|
|
@@ -16439,6 +17208,10 @@
|
|
|
16439
17208
|
voiceStatus,
|
|
16440
17209
|
voiceError,
|
|
16441
17210
|
voiceConclusionForCsat,
|
|
17211
|
+
// The voice call screen: the call's own lines, Pause, and the glow's source.
|
|
17212
|
+
bidiMessages,
|
|
17213
|
+
isVoicePaused,
|
|
17214
|
+
voiceLevelSource,
|
|
16442
17215
|
// Onboarding state
|
|
16443
17216
|
onboardingQuestions,
|
|
16444
17217
|
onboardingActive,
|
|
@@ -16466,6 +17239,7 @@
|
|
|
16466
17239
|
handleDecision,
|
|
16467
17240
|
// Bidi/Voice actions
|
|
16468
17241
|
handleVoiceToggle,
|
|
17242
|
+
toggleVoicePause,
|
|
16469
17243
|
sendBidiTextMessage,
|
|
16470
17244
|
// Session lifecycle
|
|
16471
17245
|
sessionExpiringSoon,
|
|
@@ -16616,7 +17390,7 @@
|
|
|
16616
17390
|
* See the LICENSE file in the root directory of this source tree.
|
|
16617
17391
|
*/
|
|
16618
17392
|
|
|
16619
|
-
const __iconNode$
|
|
17393
|
+
const __iconNode$m = [["path", {
|
|
16620
17394
|
d: "M2 10v3",
|
|
16621
17395
|
key: "1fnikh"
|
|
16622
17396
|
}], ["path", {
|
|
@@ -16635,7 +17409,7 @@
|
|
|
16635
17409
|
d: "M22 10v3",
|
|
16636
17410
|
key: "154ddg"
|
|
16637
17411
|
}]];
|
|
16638
|
-
const AudioLines = createLucideIcon("audio-lines", __iconNode$
|
|
17412
|
+
const AudioLines = createLucideIcon("audio-lines", __iconNode$m);
|
|
16639
17413
|
|
|
16640
17414
|
/**
|
|
16641
17415
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16644,11 +17418,11 @@
|
|
|
16644
17418
|
* See the LICENSE file in the root directory of this source tree.
|
|
16645
17419
|
*/
|
|
16646
17420
|
|
|
16647
|
-
const __iconNode$
|
|
17421
|
+
const __iconNode$l = [["path", {
|
|
16648
17422
|
d: "M20 6 9 17l-5-5",
|
|
16649
17423
|
key: "1gmf2c"
|
|
16650
17424
|
}]];
|
|
16651
|
-
const Check = createLucideIcon("check", __iconNode$
|
|
17425
|
+
const Check = createLucideIcon("check", __iconNode$l);
|
|
16652
17426
|
|
|
16653
17427
|
/**
|
|
16654
17428
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16657,11 +17431,11 @@
|
|
|
16657
17431
|
* See the LICENSE file in the root directory of this source tree.
|
|
16658
17432
|
*/
|
|
16659
17433
|
|
|
16660
|
-
const __iconNode$
|
|
17434
|
+
const __iconNode$k = [["path", {
|
|
16661
17435
|
d: "m15 18-6-6 6-6",
|
|
16662
17436
|
key: "1wnfg3"
|
|
16663
17437
|
}]];
|
|
16664
|
-
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$
|
|
17438
|
+
const ChevronLeft = createLucideIcon("chevron-left", __iconNode$k);
|
|
16665
17439
|
|
|
16666
17440
|
/**
|
|
16667
17441
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16670,11 +17444,11 @@
|
|
|
16670
17444
|
* See the LICENSE file in the root directory of this source tree.
|
|
16671
17445
|
*/
|
|
16672
17446
|
|
|
16673
|
-
const __iconNode$
|
|
17447
|
+
const __iconNode$j = [["path", {
|
|
16674
17448
|
d: "m9 18 6-6-6-6",
|
|
16675
17449
|
key: "mthhwq"
|
|
16676
17450
|
}]];
|
|
16677
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
17451
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$j);
|
|
16678
17452
|
|
|
16679
17453
|
/**
|
|
16680
17454
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16683,7 +17457,7 @@
|
|
|
16683
17457
|
* See the LICENSE file in the root directory of this source tree.
|
|
16684
17458
|
*/
|
|
16685
17459
|
|
|
16686
|
-
const __iconNode$
|
|
17460
|
+
const __iconNode$i = [["circle", {
|
|
16687
17461
|
cx: "12",
|
|
16688
17462
|
cy: "12",
|
|
16689
17463
|
r: "10",
|
|
@@ -16701,7 +17475,7 @@
|
|
|
16701
17475
|
y2: "16",
|
|
16702
17476
|
key: "4dfq90"
|
|
16703
17477
|
}]];
|
|
16704
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
17478
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$i);
|
|
16705
17479
|
|
|
16706
17480
|
/**
|
|
16707
17481
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16710,7 +17484,7 @@
|
|
|
16710
17484
|
* See the LICENSE file in the root directory of this source tree.
|
|
16711
17485
|
*/
|
|
16712
17486
|
|
|
16713
|
-
const __iconNode$
|
|
17487
|
+
const __iconNode$h = [["rect", {
|
|
16714
17488
|
width: "14",
|
|
16715
17489
|
height: "14",
|
|
16716
17490
|
x: "8",
|
|
@@ -16722,7 +17496,7 @@
|
|
|
16722
17496
|
d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",
|
|
16723
17497
|
key: "zix9uf"
|
|
16724
17498
|
}]];
|
|
16725
|
-
const Copy = createLucideIcon("copy", __iconNode$
|
|
17499
|
+
const Copy = createLucideIcon("copy", __iconNode$h);
|
|
16726
17500
|
|
|
16727
17501
|
/**
|
|
16728
17502
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16731,7 +17505,7 @@
|
|
|
16731
17505
|
* See the LICENSE file in the root directory of this source tree.
|
|
16732
17506
|
*/
|
|
16733
17507
|
|
|
16734
|
-
const __iconNode$
|
|
17508
|
+
const __iconNode$g = [["circle", {
|
|
16735
17509
|
cx: "12",
|
|
16736
17510
|
cy: "12",
|
|
16737
17511
|
r: "1",
|
|
@@ -16747,7 +17521,7 @@
|
|
|
16747
17521
|
r: "1",
|
|
16748
17522
|
key: "1pcz8c"
|
|
16749
17523
|
}]];
|
|
16750
|
-
const Ellipsis = createLucideIcon("ellipsis", __iconNode$
|
|
17524
|
+
const Ellipsis = createLucideIcon("ellipsis", __iconNode$g);
|
|
16751
17525
|
|
|
16752
17526
|
/**
|
|
16753
17527
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16756,7 +17530,7 @@
|
|
|
16756
17530
|
* See the LICENSE file in the root directory of this source tree.
|
|
16757
17531
|
*/
|
|
16758
17532
|
|
|
16759
|
-
const __iconNode$
|
|
17533
|
+
const __iconNode$f = [["path", {
|
|
16760
17534
|
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",
|
|
16761
17535
|
key: "1oefj6"
|
|
16762
17536
|
}], ["path", {
|
|
@@ -16772,7 +17546,7 @@
|
|
|
16772
17546
|
d: "M16 17H8",
|
|
16773
17547
|
key: "z1uh3a"
|
|
16774
17548
|
}]];
|
|
16775
|
-
const FileText = createLucideIcon("file-text", __iconNode$
|
|
17549
|
+
const FileText = createLucideIcon("file-text", __iconNode$f);
|
|
16776
17550
|
|
|
16777
17551
|
/**
|
|
16778
17552
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16781,11 +17555,11 @@
|
|
|
16781
17555
|
* See the LICENSE file in the root directory of this source tree.
|
|
16782
17556
|
*/
|
|
16783
17557
|
|
|
16784
|
-
const __iconNode$
|
|
17558
|
+
const __iconNode$e = [["path", {
|
|
16785
17559
|
d: "M21 12a9 9 0 1 1-6.219-8.56",
|
|
16786
17560
|
key: "13zald"
|
|
16787
17561
|
}]];
|
|
16788
|
-
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$
|
|
17562
|
+
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$e);
|
|
16789
17563
|
|
|
16790
17564
|
/**
|
|
16791
17565
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16794,11 +17568,11 @@
|
|
|
16794
17568
|
* See the LICENSE file in the root directory of this source tree.
|
|
16795
17569
|
*/
|
|
16796
17570
|
|
|
16797
|
-
const __iconNode$
|
|
17571
|
+
const __iconNode$d = [["path", {
|
|
16798
17572
|
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",
|
|
16799
17573
|
key: "1sd12s"
|
|
16800
17574
|
}]];
|
|
16801
|
-
const MessageCircle = createLucideIcon("message-circle", __iconNode$
|
|
17575
|
+
const MessageCircle = createLucideIcon("message-circle", __iconNode$d);
|
|
16802
17576
|
|
|
16803
17577
|
/**
|
|
16804
17578
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16807,11 +17581,11 @@
|
|
|
16807
17581
|
* See the LICENSE file in the root directory of this source tree.
|
|
16808
17582
|
*/
|
|
16809
17583
|
|
|
16810
|
-
const __iconNode$
|
|
17584
|
+
const __iconNode$c = [["path", {
|
|
16811
17585
|
d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",
|
|
16812
17586
|
key: "kfwtm"
|
|
16813
17587
|
}]];
|
|
16814
|
-
const Moon = createLucideIcon("moon", __iconNode$
|
|
17588
|
+
const Moon = createLucideIcon("moon", __iconNode$c);
|
|
16815
17589
|
|
|
16816
17590
|
/**
|
|
16817
17591
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -16820,11 +17594,67 @@
|
|
|
16820
17594
|
* See the LICENSE file in the root directory of this source tree.
|
|
16821
17595
|
*/
|
|
16822
17596
|
|
|
16823
|
-
const __iconNode$
|
|
17597
|
+
const __iconNode$b = [["path", {
|
|
16824
17598
|
d: "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",
|
|
16825
17599
|
key: "1miecu"
|
|
16826
17600
|
}]];
|
|
16827
|
-
const Paperclip = createLucideIcon("paperclip", __iconNode$
|
|
17601
|
+
const Paperclip = createLucideIcon("paperclip", __iconNode$b);
|
|
17602
|
+
|
|
17603
|
+
/**
|
|
17604
|
+
* @license lucide-react v0.575.0 - ISC
|
|
17605
|
+
*
|
|
17606
|
+
* This source code is licensed under the ISC license.
|
|
17607
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17608
|
+
*/
|
|
17609
|
+
|
|
17610
|
+
const __iconNode$a = [["rect", {
|
|
17611
|
+
x: "14",
|
|
17612
|
+
y: "3",
|
|
17613
|
+
width: "5",
|
|
17614
|
+
height: "18",
|
|
17615
|
+
rx: "1",
|
|
17616
|
+
key: "kaeet6"
|
|
17617
|
+
}], ["rect", {
|
|
17618
|
+
x: "5",
|
|
17619
|
+
y: "3",
|
|
17620
|
+
width: "5",
|
|
17621
|
+
height: "18",
|
|
17622
|
+
rx: "1",
|
|
17623
|
+
key: "1wsw3u"
|
|
17624
|
+
}]];
|
|
17625
|
+
const Pause = createLucideIcon("pause", __iconNode$a);
|
|
17626
|
+
|
|
17627
|
+
/**
|
|
17628
|
+
* @license lucide-react v0.575.0 - ISC
|
|
17629
|
+
*
|
|
17630
|
+
* This source code is licensed under the ISC license.
|
|
17631
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17632
|
+
*/
|
|
17633
|
+
|
|
17634
|
+
const __iconNode$9 = [["path", {
|
|
17635
|
+
d: "M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272",
|
|
17636
|
+
key: "1wngk7"
|
|
17637
|
+
}], ["path", {
|
|
17638
|
+
d: "M22 2 2 22",
|
|
17639
|
+
key: "y4kqgn"
|
|
17640
|
+
}], ["path", {
|
|
17641
|
+
d: "M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473",
|
|
17642
|
+
key: "10hv5p"
|
|
17643
|
+
}]];
|
|
17644
|
+
const PhoneOff = createLucideIcon("phone-off", __iconNode$9);
|
|
17645
|
+
|
|
17646
|
+
/**
|
|
17647
|
+
* @license lucide-react v0.575.0 - ISC
|
|
17648
|
+
*
|
|
17649
|
+
* This source code is licensed under the ISC license.
|
|
17650
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17651
|
+
*/
|
|
17652
|
+
|
|
17653
|
+
const __iconNode$8 = [["path", {
|
|
17654
|
+
d: "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",
|
|
17655
|
+
key: "10ikf1"
|
|
17656
|
+
}]];
|
|
17657
|
+
const Play = createLucideIcon("play", __iconNode$8);
|
|
16828
17658
|
|
|
16829
17659
|
/**
|
|
16830
17660
|
* @license lucide-react v0.575.0 - ISC
|
|
@@ -17425,7 +18255,7 @@
|
|
|
17425
18255
|
}
|
|
17426
18256
|
var jsxRuntimeExports = jsxRuntime.exports;
|
|
17427
18257
|
|
|
17428
|
-
const MarkdownRenderer = /*#__PURE__*/reactExports.lazy(loadMarkdownRenderer);
|
|
18258
|
+
const MarkdownRenderer$1 = /*#__PURE__*/reactExports.lazy(loadMarkdownRenderer);
|
|
17429
18259
|
|
|
17430
18260
|
// The IIFE build's chunk loader does a real network fetch for a sibling
|
|
17431
18261
|
// script file (unlike the previous inlined-everything build, where the
|
|
@@ -17610,7 +18440,7 @@
|
|
|
17610
18440
|
fontFamily: fontFamily,
|
|
17611
18441
|
fontSize: fontSize
|
|
17612
18442
|
}),
|
|
17613
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx(MarkdownRenderer, {
|
|
18443
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(MarkdownRenderer$1, {
|
|
17614
18444
|
content: displayedContent,
|
|
17615
18445
|
isStreaming: isStreaming,
|
|
17616
18446
|
isDark: isDark,
|
|
@@ -22183,6 +23013,423 @@
|
|
|
22183
23013
|
});
|
|
22184
23014
|
};
|
|
22185
23015
|
|
|
23016
|
+
/** The caller's level while the speech gate holds a voiced turn. */
|
|
23017
|
+
const CALLER_SPEAKING_LEVEL = 0.6;
|
|
23018
|
+
/** Below this the agent's output counts as silence. */
|
|
23019
|
+
const AGENT_SILENCE = 0.02;
|
|
23020
|
+
const FRAME_MS = 66;
|
|
23021
|
+
const QUIET = {
|
|
23022
|
+
level: 0,
|
|
23023
|
+
speaker: "none"
|
|
23024
|
+
};
|
|
23025
|
+
|
|
23026
|
+
/** Root mean square of an analyser's time-domain bytes, scaled to 0..1. */
|
|
23027
|
+
function levelFromTimeDomain(bytes) {
|
|
23028
|
+
if (!bytes || bytes.length === 0) return 0;
|
|
23029
|
+
let sum = 0;
|
|
23030
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
23031
|
+
const v = (bytes[i] - 128) / 128;
|
|
23032
|
+
sum += v * v;
|
|
23033
|
+
}
|
|
23034
|
+
// Speech RMS sits well under 0.5; scale so normal speech fills the band.
|
|
23035
|
+
return Math.min(1, Math.sqrt(sum / bytes.length) * 3);
|
|
23036
|
+
}
|
|
23037
|
+
|
|
23038
|
+
/**
|
|
23039
|
+
* The glow band's level for the call screen: `{ level: 0..1, speaker }` with
|
|
23040
|
+
* speaker "agent", "caller" or "none". The agent's level is read from an
|
|
23041
|
+
* AnalyserNode tapped off the existing player worklet (a read-only branch,
|
|
23042
|
+
* the playback path is unchanged). The caller's level comes from the existing
|
|
23043
|
+
* speech gate's isSpeaking(), so no new mic processing is added.
|
|
23044
|
+
* Mirrors packages/frontend/src/components/chatbot-preview/useVoiceCallLevel.ts.
|
|
23045
|
+
*
|
|
23046
|
+
* `source` holds useChatState's refs: playerNodeRef, playerContextRef and
|
|
23047
|
+
* speechGateRef.
|
|
23048
|
+
*/
|
|
23049
|
+
function useVoiceCallLevel(active, source) {
|
|
23050
|
+
const [state, setState] = reactExports.useState(QUIET);
|
|
23051
|
+
reactExports.useEffect(() => {
|
|
23052
|
+
if (!active || !source || typeof window === "undefined") return undefined;
|
|
23053
|
+
const {
|
|
23054
|
+
playerNodeRef,
|
|
23055
|
+
playerContextRef,
|
|
23056
|
+
speechGateRef
|
|
23057
|
+
} = source;
|
|
23058
|
+
let analyser = null;
|
|
23059
|
+
let tappedNode = null;
|
|
23060
|
+
let buffer = null;
|
|
23061
|
+
const ensureAnalyser = () => {
|
|
23062
|
+
const node = playerNodeRef?.current;
|
|
23063
|
+
const ctx = playerContextRef?.current;
|
|
23064
|
+
if (!node || !ctx || node === tappedNode) return;
|
|
23065
|
+
try {
|
|
23066
|
+
analyser = ctx.createAnalyser();
|
|
23067
|
+
analyser.fftSize = 512;
|
|
23068
|
+
node.connect(analyser);
|
|
23069
|
+
tappedNode = node;
|
|
23070
|
+
buffer = new Uint8Array(analyser.fftSize);
|
|
23071
|
+
} catch {
|
|
23072
|
+
analyser = null;
|
|
23073
|
+
}
|
|
23074
|
+
};
|
|
23075
|
+
const tick = () => {
|
|
23076
|
+
ensureAnalyser();
|
|
23077
|
+
let agent = 0;
|
|
23078
|
+
if (analyser && buffer) {
|
|
23079
|
+
try {
|
|
23080
|
+
analyser.getByteTimeDomainData(buffer);
|
|
23081
|
+
agent = levelFromTimeDomain(buffer);
|
|
23082
|
+
} catch {
|
|
23083
|
+
agent = 0; // the player's context was closed under us
|
|
23084
|
+
}
|
|
23085
|
+
}
|
|
23086
|
+
const callerSpeaking = Boolean(speechGateRef?.current?.isSpeaking?.());
|
|
23087
|
+
let next;
|
|
23088
|
+
if (agent > AGENT_SILENCE) next = {
|
|
23089
|
+
level: agent,
|
|
23090
|
+
speaker: "agent"
|
|
23091
|
+
};else if (callerSpeaking) next = {
|
|
23092
|
+
level: CALLER_SPEAKING_LEVEL,
|
|
23093
|
+
speaker: "caller"
|
|
23094
|
+
};else next = QUIET;
|
|
23095
|
+
setState(prev => prev.speaker === next.speaker && Math.abs(prev.level - next.level) < 0.03 ? prev : next);
|
|
23096
|
+
};
|
|
23097
|
+
const id = window.setInterval(tick, FRAME_MS);
|
|
23098
|
+
return () => {
|
|
23099
|
+
window.clearInterval(id);
|
|
23100
|
+
if (tappedNode && analyser) {
|
|
23101
|
+
try {
|
|
23102
|
+
tappedNode.disconnect(analyser);
|
|
23103
|
+
} catch {
|
|
23104
|
+
/* the player was already torn down */
|
|
23105
|
+
}
|
|
23106
|
+
}
|
|
23107
|
+
setState(QUIET);
|
|
23108
|
+
};
|
|
23109
|
+
}, [active, source]);
|
|
23110
|
+
return state;
|
|
23111
|
+
}
|
|
23112
|
+
|
|
23113
|
+
const MarkdownRenderer = /*#__PURE__*/reactExports.lazy(loadMarkdownRenderer);
|
|
23114
|
+
|
|
23115
|
+
/**
|
|
23116
|
+
* The voice call screen: while a voice session is active it takes the place of
|
|
23117
|
+
* the message list and the input. A status pill with the call time, the
|
|
23118
|
+
* agent's latest answer large (with the card it put on screen), the caller's
|
|
23119
|
+
* latest words above the controls, and a glow at the bottom that follows who
|
|
23120
|
+
* is speaking. When the call ends the chat returns with the call's lines.
|
|
23121
|
+
* Mirrors packages/frontend/src/components/chatbot-preview/VoiceCallView.tsx.
|
|
23122
|
+
*/
|
|
23123
|
+
|
|
23124
|
+
/** The call status for the hook's voiceStatus while a session is active. */
|
|
23125
|
+
function voiceCallStatus(voiceStatus, isPaused) {
|
|
23126
|
+
if (voiceStatus === "connecting") return "connecting";
|
|
23127
|
+
if (voiceStatus === "connected") return isPaused ? "paused" : "live";
|
|
23128
|
+
// Active but the socket closed: the hook is waiting to reconnect.
|
|
23129
|
+
return "reconnecting";
|
|
23130
|
+
}
|
|
23131
|
+
function formatCallTime(totalSeconds) {
|
|
23132
|
+
const s = Math.max(0, Math.floor(totalSeconds));
|
|
23133
|
+
const mm = Math.floor(s / 60);
|
|
23134
|
+
const ss = s % 60;
|
|
23135
|
+
return `${String(mm).padStart(2, "0")}:${String(ss).padStart(2, "0")}`;
|
|
23136
|
+
}
|
|
23137
|
+
const DEFAULT_PRIMARY = "#1d4ed8";
|
|
23138
|
+
|
|
23139
|
+
/**
|
|
23140
|
+
* The agent's brand colour at an alpha, for the glow. Hex colours become
|
|
23141
|
+
* rgba(); any other CSS colour is mixed with transparent.
|
|
23142
|
+
*/
|
|
23143
|
+
function withAlpha(color, alpha) {
|
|
23144
|
+
const value = String(color || DEFAULT_PRIMARY).trim();
|
|
23145
|
+
const hex = value.replace(/^#/, "");
|
|
23146
|
+
if (/^([0-9a-f]{3}|[0-9a-f]{6})$/i.test(hex)) {
|
|
23147
|
+
const full = hex.length === 3 ? hex.split("").map(c => c + c).join("") : hex;
|
|
23148
|
+
const n = parseInt(full, 16);
|
|
23149
|
+
return `rgba(${n >> 16 & 255}, ${n >> 8 & 255}, ${n & 255}, ${alpha})`;
|
|
23150
|
+
}
|
|
23151
|
+
return `color-mix(in srgb, ${value} ${Math.round(alpha * 100)}%, transparent)`;
|
|
23152
|
+
}
|
|
23153
|
+
function usePrefersReducedMotion() {
|
|
23154
|
+
const [reduced, setReduced] = reactExports.useState(false);
|
|
23155
|
+
reactExports.useEffect(() => {
|
|
23156
|
+
if (typeof window === "undefined" || !window.matchMedia) return undefined;
|
|
23157
|
+
const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
23158
|
+
setReduced(Boolean(mq.matches));
|
|
23159
|
+
const onChange = e => setReduced(e.matches);
|
|
23160
|
+
mq.addEventListener?.("change", onChange);
|
|
23161
|
+
return () => mq.removeEventListener?.("change", onChange);
|
|
23162
|
+
}, []);
|
|
23163
|
+
return reduced;
|
|
23164
|
+
}
|
|
23165
|
+
|
|
23166
|
+
/**
|
|
23167
|
+
* Seconds the call has been running: holds at 0 while connecting and stands
|
|
23168
|
+
* still while paused, so a paused call does not run up its time.
|
|
23169
|
+
*/
|
|
23170
|
+
function useCallTimer(running) {
|
|
23171
|
+
const totalRef = reactExports.useRef(0); // ms counted before the current running stretch
|
|
23172
|
+
const [seconds, setSeconds] = reactExports.useState(0);
|
|
23173
|
+
reactExports.useEffect(() => {
|
|
23174
|
+
if (!running) return undefined;
|
|
23175
|
+
const since = Date.now();
|
|
23176
|
+
const update = () => setSeconds(Math.floor((totalRef.current + Date.now() - since) / 1000));
|
|
23177
|
+
update();
|
|
23178
|
+
const id = window.setInterval(update, 1000);
|
|
23179
|
+
return () => {
|
|
23180
|
+
window.clearInterval(id);
|
|
23181
|
+
totalRef.current += Date.now() - since;
|
|
23182
|
+
};
|
|
23183
|
+
}, [running]);
|
|
23184
|
+
return seconds;
|
|
23185
|
+
}
|
|
23186
|
+
|
|
23187
|
+
// The card falls back to nothing if the markdown chunk fails to load; the
|
|
23188
|
+
// call itself carries on. Keyed by the card, so a new card gets a new try.
|
|
23189
|
+
class CardBoundary extends reactExports.Component {
|
|
23190
|
+
state = {
|
|
23191
|
+
failed: false
|
|
23192
|
+
};
|
|
23193
|
+
static getDerivedStateFromError() {
|
|
23194
|
+
return {
|
|
23195
|
+
failed: true
|
|
23196
|
+
};
|
|
23197
|
+
}
|
|
23198
|
+
componentDidCatch(error) {
|
|
23199
|
+
// eslint-disable-next-line no-console
|
|
23200
|
+
console.error("[widget] call card failed to render:", error);
|
|
23201
|
+
}
|
|
23202
|
+
render() {
|
|
23203
|
+
return this.state.failed ? null : this.props.children;
|
|
23204
|
+
}
|
|
23205
|
+
}
|
|
23206
|
+
|
|
23207
|
+
// Three soft lights in the agent's brand colour, offset so their drift
|
|
23208
|
+
// overlaps.
|
|
23209
|
+
const GLOW_BLOBS = [{
|
|
23210
|
+
className: "-bottom-1/3 -left-[15%] h-[120%] w-[70%]",
|
|
23211
|
+
alpha: 0.7,
|
|
23212
|
+
animation: "animate-voice-glow"
|
|
23213
|
+
}, {
|
|
23214
|
+
className: "-bottom-1/3 left-[20%] h-[130%] w-[60%]",
|
|
23215
|
+
alpha: 0.45,
|
|
23216
|
+
animation: "animate-voice-glow-slow"
|
|
23217
|
+
}, {
|
|
23218
|
+
className: "-bottom-1/3 -right-[15%] h-[120%] w-[70%]",
|
|
23219
|
+
alpha: 0.2,
|
|
23220
|
+
animation: "animate-voice-glow"
|
|
23221
|
+
}];
|
|
23222
|
+
const STATUS_KEY = {
|
|
23223
|
+
connecting: "callConnecting",
|
|
23224
|
+
live: "callLive",
|
|
23225
|
+
paused: "callPaused",
|
|
23226
|
+
reconnecting: "callReconnecting"
|
|
23227
|
+
};
|
|
23228
|
+
function latestLine(lines, role) {
|
|
23229
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
23230
|
+
if (lines[i].role === "user" !== (role === "user")) continue;
|
|
23231
|
+
const text = callLineText(lines[i].content || "");
|
|
23232
|
+
if (text) return text;
|
|
23233
|
+
}
|
|
23234
|
+
return "";
|
|
23235
|
+
}
|
|
23236
|
+
function VoiceCallView({
|
|
23237
|
+
status,
|
|
23238
|
+
agentName,
|
|
23239
|
+
primaryColor,
|
|
23240
|
+
lines = [],
|
|
23241
|
+
level = 0,
|
|
23242
|
+
speaker = "none",
|
|
23243
|
+
isPaused = false,
|
|
23244
|
+
onTogglePause,
|
|
23245
|
+
onEnd,
|
|
23246
|
+
isDark = false,
|
|
23247
|
+
isRtl = false,
|
|
23248
|
+
errorText,
|
|
23249
|
+
onCardAction,
|
|
23250
|
+
defaultLanguage = "en",
|
|
23251
|
+
fontFamily
|
|
23252
|
+
}) {
|
|
23253
|
+
const t = reactExports.useMemo(() => createTranslator(defaultLanguage), [defaultLanguage]);
|
|
23254
|
+
const reducedMotion = usePrefersReducedMotion();
|
|
23255
|
+
const seconds = useCallTimer(status !== "connecting" && !isPaused);
|
|
23256
|
+
const scrollRef = reactExports.useRef(null);
|
|
23257
|
+
const lastContent = lines.length ? lines[lines.length - 1].content : "";
|
|
23258
|
+
const lastAgent = latestLine(lines, "agent");
|
|
23259
|
+
const lastCaller = latestLine(lines, "user");
|
|
23260
|
+
const card = latestVoiceCard(lines);
|
|
23261
|
+
reactExports.useEffect(() => {
|
|
23262
|
+
const el = scrollRef.current;
|
|
23263
|
+
if (el) el.scrollTop = el.scrollHeight;
|
|
23264
|
+
}, [lines.length, lastContent]);
|
|
23265
|
+
|
|
23266
|
+
// With reduced motion the band holds one gentle level instead of following
|
|
23267
|
+
// the audio.
|
|
23268
|
+
const shown = isPaused ? 0 : reducedMotion ? speaker === "none" ? 0.15 : 0.4 : level;
|
|
23269
|
+
// Silence is a low, faint glow; speech lifts and brightens it.
|
|
23270
|
+
const glowOpacity = isPaused ? 0.25 : 0.45 + shown * 0.55;
|
|
23271
|
+
const glowScale = 0.7 + shown * 0.3;
|
|
23272
|
+
const pulsing = status === "live" && !reducedMotion;
|
|
23273
|
+
const dotColor = status === "live" ? "bg-status-success" : status === "paused" ? "bg-gray-400" : "bg-status-warning";
|
|
23274
|
+
const labelClass = cn("text-xs font-medium", isDark ? "text-gray-200" : "text-slate-700");
|
|
23275
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23276
|
+
"data-testid": "voice-call-view",
|
|
23277
|
+
"data-reduced-motion": reducedMotion ? "true" : "false",
|
|
23278
|
+
dir: isRtl ? "rtl" : "ltr",
|
|
23279
|
+
className: cn("flex-1 min-h-0 flex flex-col", isDark ? "bg-gray-900 text-gray-100" : "bg-white text-gray-900"),
|
|
23280
|
+
style: fontFamily ? {
|
|
23281
|
+
fontFamily
|
|
23282
|
+
} : undefined,
|
|
23283
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23284
|
+
className: "flex items-center justify-center gap-2 pt-3 pb-2 px-4 flex-shrink-0",
|
|
23285
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23286
|
+
className: "sr-only",
|
|
23287
|
+
children: agentName
|
|
23288
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23289
|
+
role: "status",
|
|
23290
|
+
"data-testid": "voice-call-status",
|
|
23291
|
+
className: cn(
|
|
23292
|
+
// border-solid: the widget runs without Tailwind's preflight, so
|
|
23293
|
+
// `border` alone sets only the width.
|
|
23294
|
+
"inline-flex items-center gap-1.5 rounded-full border border-solid px-2.5 py-0.5 text-xs font-medium", isDark ? "border-gray-700 bg-gray-800" : "border-slate-200 bg-slate-50"),
|
|
23295
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
23296
|
+
className: "relative flex h-2 w-2",
|
|
23297
|
+
children: [pulsing && /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23298
|
+
"data-testid": "voice-call-pulse",
|
|
23299
|
+
className: cn("absolute inline-flex h-full w-full rounded-full opacity-60 animate-ping", dotColor)
|
|
23300
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23301
|
+
className: cn("relative inline-flex h-2 w-2 rounded-full", dotColor)
|
|
23302
|
+
})]
|
|
23303
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23304
|
+
children: t(STATUS_KEY[status] || STATUS_KEY.reconnecting)
|
|
23305
|
+
}), status !== "connecting" && /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23306
|
+
"data-testid": "voice-call-timer",
|
|
23307
|
+
dir: "ltr",
|
|
23308
|
+
className: "tabular-nums text-gray-500",
|
|
23309
|
+
children: formatCallTime(seconds)
|
|
23310
|
+
})]
|
|
23311
|
+
})]
|
|
23312
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23313
|
+
ref: scrollRef,
|
|
23314
|
+
"aria-live": "polite",
|
|
23315
|
+
"aria-label": t("callTranscript"),
|
|
23316
|
+
className: "flex-1 min-h-0 overflow-y-auto px-5 pt-3 pb-2 flex flex-col",
|
|
23317
|
+
children: [lastAgent && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
23318
|
+
"data-testid": "voice-call-line-agent",
|
|
23319
|
+
dir: "auto",
|
|
23320
|
+
className: cn("m-0 text-lg leading-snug font-medium whitespace-pre-wrap break-words", isDark ? "text-gray-100" : "text-gray-900"),
|
|
23321
|
+
children: lastAgent
|
|
23322
|
+
}), card ?
|
|
23323
|
+
/*#__PURE__*/
|
|
23324
|
+
// Full height: the call's middle area scrolls as one, so a card
|
|
23325
|
+
// never gets squeezed into a small box of its own.
|
|
23326
|
+
jsxRuntimeExports.jsx("div", {
|
|
23327
|
+
"data-testid": "voice-call-card",
|
|
23328
|
+
className: "flex-shrink-0 my-3",
|
|
23329
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(CardBoundary, {
|
|
23330
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(reactExports.Suspense, {
|
|
23331
|
+
fallback: null,
|
|
23332
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(MarkdownRenderer, {
|
|
23333
|
+
content: card,
|
|
23334
|
+
isDark: isDark,
|
|
23335
|
+
isRtl: isRtl,
|
|
23336
|
+
fontFamily: fontFamily,
|
|
23337
|
+
provideCitations: false,
|
|
23338
|
+
onButtonClick: value => onCardAction?.(String(value ?? ""))
|
|
23339
|
+
})
|
|
23340
|
+
})
|
|
23341
|
+
}, card)
|
|
23342
|
+
}) : null]
|
|
23343
|
+
}), lastCaller && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
23344
|
+
"data-testid": "voice-call-line-caller",
|
|
23345
|
+
dir: "auto",
|
|
23346
|
+
className: cn("mx-5 mt-2 mb-0 flex-shrink-0 rounded-lg border border-solid px-3.5 py-2.5 text-sm italic break-words [overflow-wrap:anywhere]", isDark ? "border-gray-700 bg-gray-800 text-gray-300" : "border-slate-200 bg-slate-50 text-slate-600"),
|
|
23347
|
+
children: lastCaller
|
|
23348
|
+
}), errorText && /*#__PURE__*/jsxRuntimeExports.jsx("p", {
|
|
23349
|
+
role: "alert",
|
|
23350
|
+
className: "m-0 px-4 pt-1 text-xs text-status-error",
|
|
23351
|
+
children: errorText
|
|
23352
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23353
|
+
className: "relative flex-shrink-0 overflow-hidden pt-10 pb-6",
|
|
23354
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
23355
|
+
"aria-hidden": "true",
|
|
23356
|
+
"data-testid": "voice-call-glow",
|
|
23357
|
+
className: cn("pointer-events-none absolute inset-0 origin-bottom", !reducedMotion && "transition-[opacity,transform] duration-300 ease-out"),
|
|
23358
|
+
style: {
|
|
23359
|
+
opacity: glowOpacity,
|
|
23360
|
+
transform: `scaleY(${glowScale})`,
|
|
23361
|
+
WebkitMaskImage: "linear-gradient(to top, black 35%, transparent 100%)",
|
|
23362
|
+
maskImage: "linear-gradient(to top, black 35%, transparent 100%)"
|
|
23363
|
+
},
|
|
23364
|
+
children: GLOW_BLOBS.map(blob => /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23365
|
+
className: cn("absolute rounded-full blur-2xl", blob.className, !reducedMotion && !isPaused && blob.animation),
|
|
23366
|
+
style: {
|
|
23367
|
+
background: withAlpha(primaryColor, blob.alpha)
|
|
23368
|
+
}
|
|
23369
|
+
}, blob.className))
|
|
23370
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23371
|
+
className: "relative z-10 flex items-start justify-center gap-10",
|
|
23372
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23373
|
+
className: "flex flex-col items-center gap-1.5",
|
|
23374
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
23375
|
+
type: "button",
|
|
23376
|
+
onClick: onTogglePause,
|
|
23377
|
+
"aria-label": isPaused ? t("callResume") : t("callPause"),
|
|
23378
|
+
"aria-pressed": isPaused,
|
|
23379
|
+
className: cn("h-12 w-12 p-0 rounded-full flex items-center justify-center border border-solid shadow-sm cursor-pointer transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2", isDark ? "bg-gray-800 border-gray-700 text-gray-100 hover:bg-gray-700 focus-visible:ring-offset-gray-900" : "bg-white border-slate-200 text-gray-900 hover:bg-slate-50"),
|
|
23380
|
+
children: isPaused ? /*#__PURE__*/jsxRuntimeExports.jsx(Play, {
|
|
23381
|
+
className: "h-5 w-5",
|
|
23382
|
+
"aria-hidden": "true"
|
|
23383
|
+
}) : /*#__PURE__*/jsxRuntimeExports.jsx(Pause, {
|
|
23384
|
+
className: "h-5 w-5",
|
|
23385
|
+
"aria-hidden": "true"
|
|
23386
|
+
})
|
|
23387
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23388
|
+
className: labelClass,
|
|
23389
|
+
children: isPaused ? t("callResumeLabel") : t("callPauseLabel")
|
|
23390
|
+
})]
|
|
23391
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
23392
|
+
className: "flex flex-col items-center gap-1.5",
|
|
23393
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
23394
|
+
type: "button",
|
|
23395
|
+
onClick: onEnd,
|
|
23396
|
+
"aria-label": t("callEnd"),
|
|
23397
|
+
className: "h-12 w-12 p-0 rounded-full flex items-center justify-center border-0 bg-red-600 text-white shadow-sm cursor-pointer transition-colors duration-200 hover:bg-red-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-600 focus-visible:ring-offset-2",
|
|
23398
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(PhoneOff, {
|
|
23399
|
+
className: "h-5 w-5",
|
|
23400
|
+
"aria-hidden": "true"
|
|
23401
|
+
})
|
|
23402
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
23403
|
+
className: labelClass,
|
|
23404
|
+
children: t("callEndLabel")
|
|
23405
|
+
})]
|
|
23406
|
+
})]
|
|
23407
|
+
})]
|
|
23408
|
+
})]
|
|
23409
|
+
});
|
|
23410
|
+
}
|
|
23411
|
+
|
|
23412
|
+
/**
|
|
23413
|
+
* The call screen fed by the live audio level. Kept apart from the view so
|
|
23414
|
+
* only this small tree re-renders as the level changes (about 15 times a
|
|
23415
|
+
* second), not the chat window. `levelSource` holds useChatState's player and
|
|
23416
|
+
* speech gate refs.
|
|
23417
|
+
*/
|
|
23418
|
+
function LiveVoiceCallView({
|
|
23419
|
+
levelSource,
|
|
23420
|
+
...props
|
|
23421
|
+
}) {
|
|
23422
|
+
const {
|
|
23423
|
+
level,
|
|
23424
|
+
speaker
|
|
23425
|
+
} = useVoiceCallLevel(!props.isPaused, levelSource);
|
|
23426
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(VoiceCallView, {
|
|
23427
|
+
...props,
|
|
23428
|
+
level: level,
|
|
23429
|
+
speaker: speaker
|
|
23430
|
+
});
|
|
23431
|
+
}
|
|
23432
|
+
|
|
22186
23433
|
/**
|
|
22187
23434
|
* Auto-scroll hook that scrolls to bottom when dependencies change
|
|
22188
23435
|
*/
|
|
@@ -22656,6 +23903,14 @@
|
|
|
22656
23903
|
voiceConclusionForCsat = false,
|
|
22657
23904
|
onVoiceToggle,
|
|
22658
23905
|
onBidiSubmit,
|
|
23906
|
+
// The voice call screen: the call's own lines (useChatState's
|
|
23907
|
+
// bidiMessages), Pause, the glow's level source, and the text send a card
|
|
23908
|
+
// click goes through.
|
|
23909
|
+
bidiMessages = [],
|
|
23910
|
+
isVoicePaused = false,
|
|
23911
|
+
onToggleVoicePause,
|
|
23912
|
+
voiceLevelSource,
|
|
23913
|
+
onBidiTextMessage,
|
|
22659
23914
|
disclaimerEnabled = false,
|
|
22660
23915
|
disclaimerText,
|
|
22661
23916
|
disclaimerPosition = "top",
|
|
@@ -22947,6 +24202,18 @@
|
|
|
22947
24202
|
delay: 0
|
|
22948
24203
|
});
|
|
22949
24204
|
const isRtlLanguage = isRtlLocale(defaultLanguage);
|
|
24205
|
+
|
|
24206
|
+
// While a voice call is live the body becomes the call screen; when it
|
|
24207
|
+
// ends the chat returns with the call's lines kept as messages.
|
|
24208
|
+
const showCallView = isVoiceSessionActive;
|
|
24209
|
+
// A card button on the call screen: a web address (a payment or check-in
|
|
24210
|
+
// link) opens in a new tab, anything else is the caller's next turn.
|
|
24211
|
+
const handleVoiceCardAction = reactExports.useCallback(value => {
|
|
24212
|
+
if (!openCardLink(value)) onBidiTextMessage?.(value);
|
|
24213
|
+
}, [onBidiTextMessage]);
|
|
24214
|
+
// EV-3813: voiceError is an i18n code (lib/voiceErrors.js), resolved the
|
|
24215
|
+
// way ChatInput resolves it.
|
|
24216
|
+
const voiceErrorText = voiceError ? t(voiceError) === voiceError ? t("voiceUnavailable") : t(voiceError) : null;
|
|
22950
24217
|
const resolvedAgentBubbleColor = reactExports.useMemo(() => {
|
|
22951
24218
|
if (isDark) {
|
|
22952
24219
|
if (isDefaultColor(agentMessageBubbleColor, DEFAULT_AGENT_BUBBLE_COLOR)) {
|
|
@@ -23490,7 +24757,22 @@
|
|
|
23490
24757
|
isRtl: isRtlLanguage,
|
|
23491
24758
|
defaultLanguage: defaultLanguage
|
|
23492
24759
|
}), !isMinimized && /*#__PURE__*/jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, {
|
|
23493
|
-
children: [/*#__PURE__*/jsxRuntimeExports.jsx(
|
|
24760
|
+
children: [showCallView ? /*#__PURE__*/jsxRuntimeExports.jsx(LiveVoiceCallView, {
|
|
24761
|
+
levelSource: voiceLevelSource,
|
|
24762
|
+
status: voiceCallStatus(voiceStatus, isVoicePaused),
|
|
24763
|
+
agentName: conciergeName || companyName,
|
|
24764
|
+
primaryColor: primaryColor,
|
|
24765
|
+
lines: bidiMessages,
|
|
24766
|
+
isPaused: isVoicePaused,
|
|
24767
|
+
onTogglePause: onToggleVoicePause,
|
|
24768
|
+
onEnd: onVoiceToggle,
|
|
24769
|
+
isDark: isDark,
|
|
24770
|
+
isRtl: isRtlLanguage,
|
|
24771
|
+
errorText: voiceErrorText,
|
|
24772
|
+
onCardAction: handleVoiceCardAction,
|
|
24773
|
+
defaultLanguage: defaultLanguage,
|
|
24774
|
+
fontFamily: fontFamily
|
|
24775
|
+
}) : /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
23494
24776
|
ref: messagesContainerRef,
|
|
23495
24777
|
role: "log",
|
|
23496
24778
|
"aria-live": "polite",
|
|
@@ -23588,64 +24870,68 @@
|
|
|
23588
24870
|
})
|
|
23589
24871
|
})]
|
|
23590
24872
|
})
|
|
23591
|
-
}), !(onboardingActive && !onboardingCompleted) && /*#__PURE__*/jsxRuntimeExports.jsx(
|
|
23592
|
-
|
|
23593
|
-
|
|
23594
|
-
|
|
23595
|
-
|
|
23596
|
-
|
|
23597
|
-
|
|
23598
|
-
|
|
23599
|
-
|
|
23600
|
-
|
|
23601
|
-
|
|
23602
|
-
|
|
23603
|
-
|
|
23604
|
-
|
|
23605
|
-
|
|
23606
|
-
|
|
23607
|
-
|
|
23608
|
-
|
|
23609
|
-
|
|
23610
|
-
|
|
23611
|
-
|
|
23612
|
-
|
|
23613
|
-
|
|
23614
|
-
|
|
23615
|
-
|
|
23616
|
-
|
|
23617
|
-
|
|
23618
|
-
|
|
23619
|
-
|
|
23620
|
-
|
|
23621
|
-
|
|
23622
|
-
|
|
23623
|
-
|
|
23624
|
-
|
|
23625
|
-
|
|
23626
|
-
|
|
23627
|
-
|
|
23628
|
-
|
|
23629
|
-
|
|
23630
|
-
|
|
23631
|
-
|
|
23632
|
-
|
|
23633
|
-
|
|
23634
|
-
|
|
23635
|
-
|
|
23636
|
-
|
|
23637
|
-
|
|
23638
|
-
|
|
23639
|
-
|
|
23640
|
-
|
|
23641
|
-
|
|
23642
|
-
|
|
23643
|
-
|
|
23644
|
-
|
|
23645
|
-
|
|
23646
|
-
|
|
23647
|
-
|
|
23648
|
-
|
|
24873
|
+
}), !(onboardingActive && !onboardingCompleted) && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
24874
|
+
className: showCallView ? "hidden" : "contents",
|
|
24875
|
+
"data-testid": "chat-input-slot",
|
|
24876
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx(ChatInput, {
|
|
24877
|
+
onSynthesizeAssistantMessage: onSynthesizeAssistantMessage,
|
|
24878
|
+
onStopGeneration: onStopGeneration,
|
|
24879
|
+
inputValue: inputValue,
|
|
24880
|
+
setInputValue: setInputValue,
|
|
24881
|
+
onSend: onSend,
|
|
24882
|
+
isDark: isDark,
|
|
24883
|
+
primaryColor: primaryColor,
|
|
24884
|
+
isOpen: isOpen,
|
|
24885
|
+
isMinimized: isMinimized,
|
|
24886
|
+
isLoading: isLoading,
|
|
24887
|
+
isConversationLoading: isConversationLoading,
|
|
24888
|
+
verificationPending: verificationPendingKeys.size > 0,
|
|
24889
|
+
placeholder: placeholder,
|
|
24890
|
+
textColor: resolvedTextColor,
|
|
24891
|
+
fontFamily: fontFamily,
|
|
24892
|
+
userMessageBubbleFontFamily: userMessageBubbleFontFamily,
|
|
24893
|
+
userMessageBubbleFontSize: userMessageBubbleFontSize,
|
|
24894
|
+
fontSize: fontSize,
|
|
24895
|
+
isRtl: isRtlLanguage,
|
|
24896
|
+
csatVisible: showCsat && csatEnabled && !csatSubmitted || isCsatEnabled && (showResolveForm || isConversationResolved),
|
|
24897
|
+
enableVoiceInteraction: enableVoiceInteraction,
|
|
24898
|
+
isVoiceSessionActive: isVoiceSessionActive,
|
|
24899
|
+
voiceStatus: voiceStatus,
|
|
24900
|
+
voiceError: voiceError,
|
|
24901
|
+
onVoiceToggle: onVoiceToggle,
|
|
24902
|
+
onBidiSubmit: onBidiSubmit,
|
|
24903
|
+
disclaimerEnabled: disclaimerEnabled,
|
|
24904
|
+
disclaimerText: disclaimerText,
|
|
24905
|
+
disclaimerPosition: disclaimerPosition,
|
|
24906
|
+
disclaimerLinkUrl: disclaimerLinkUrl,
|
|
24907
|
+
disclaimerLinkLabel: disclaimerLinkLabel,
|
|
24908
|
+
showPoweredBy: showPoweredBy,
|
|
24909
|
+
defaultLanguage: defaultLanguage,
|
|
24910
|
+
onboardingQuestions: onboardingQuestions,
|
|
24911
|
+
onboardingActive: onboardingActive,
|
|
24912
|
+
onboardingCompleted: onboardingCompleted,
|
|
24913
|
+
onboardingEnabled: onboardingEnabled,
|
|
24914
|
+
userMessageBoxColor: userMessageBoxColor,
|
|
24915
|
+
resolvedUserMessageColor: resolvedUserMessageColor,
|
|
24916
|
+
userTextColor: userTextColor,
|
|
24917
|
+
promptSuggestions: showResolveForm || isConversationResolved || autoPromptEnabled === false || isLoading ? [] : stablePromptSuggestions,
|
|
24918
|
+
onPromptSuggestionClick: stableOnPromptSuggestionClick,
|
|
24919
|
+
autoPromptQuestionDisplay: autoPromptQuestionDisplay,
|
|
24920
|
+
tagSelectorNode: null,
|
|
24921
|
+
showResolveButton: isCsatEnabled && hasUserMessages && !isConversationResolved && !showResolveForm && !showCsat && !shouldHideResolveForOnboarding,
|
|
24922
|
+
onResolve: () => {
|
|
24923
|
+
if (!isCsatEnabled) return;
|
|
24924
|
+
setShowResolveForm(true);
|
|
24925
|
+
}
|
|
24926
|
+
// Attachments (RAG-attach-1) - paperclip stays hidden
|
|
24927
|
+
// unless the operator explicitly opted in via
|
|
24928
|
+
// MasterAgent.config.chatFeatures.
|
|
24929
|
+
,
|
|
24930
|
+
chatFeatures: chatFeatures,
|
|
24931
|
+
apiEndpoint: apiBaseUrl,
|
|
24932
|
+
organizationId: organizationId,
|
|
24933
|
+
conversationId: conversationId
|
|
24934
|
+
})
|
|
23649
24935
|
})]
|
|
23650
24936
|
})]
|
|
23651
24937
|
})]
|
|
@@ -23968,7 +25254,7 @@
|
|
|
23968
25254
|
* value by its own test (that constant sat at 0.1.113 while this package was
|
|
23969
25255
|
* at 0.2.2 precisely because nothing enforced it - EV-2431).
|
|
23970
25256
|
*/
|
|
23971
|
-
const WIDGET_VERSION = '0.2.
|
|
25257
|
+
const WIDGET_VERSION = '0.2.49';
|
|
23972
25258
|
|
|
23973
25259
|
/**
|
|
23974
25260
|
* API utility functions
|
|
@@ -24377,6 +25663,10 @@
|
|
|
24377
25663
|
voiceConclusionForCsat,
|
|
24378
25664
|
handleVoiceToggle,
|
|
24379
25665
|
sendBidiTextMessage,
|
|
25666
|
+
bidiMessages,
|
|
25667
|
+
isVoicePaused,
|
|
25668
|
+
toggleVoicePause,
|
|
25669
|
+
voiceLevelSource,
|
|
24380
25670
|
onboardingActive,
|
|
24381
25671
|
onboardingCompleted,
|
|
24382
25672
|
handleOnboardingFormSubmit,
|
|
@@ -24594,6 +25884,11 @@
|
|
|
24594
25884
|
voiceConclusionForCsat: voiceConclusionForCsat,
|
|
24595
25885
|
onVoiceToggle: handleVoiceToggle,
|
|
24596
25886
|
onBidiSubmit: () => sendBidiTextMessage(inputValue),
|
|
25887
|
+
bidiMessages: bidiMessages,
|
|
25888
|
+
isVoicePaused: isVoicePaused,
|
|
25889
|
+
onToggleVoicePause: toggleVoicePause,
|
|
25890
|
+
voiceLevelSource: voiceLevelSource,
|
|
25891
|
+
onBidiTextMessage: sendBidiTextMessage,
|
|
24597
25892
|
disclaimerEnabled: widgetConfig.disclaimerEnabled,
|
|
24598
25893
|
disclaimerText: widgetConfig.disclaimerText,
|
|
24599
25894
|
disclaimerPosition: widgetConfig.disclaimerPosition,
|