@eshal-bot/chat-widget 0.1.51 → 0.1.53
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.esm.js +4 -4
- package/dist/chat-widget.js +2166 -29
- package/dist/chat-widget.min.js +5 -5
- package/dist/chat-widget.umd.js +4 -4
- package/package.json +2 -2
package/dist/chat-widget.js
CHANGED
|
@@ -7869,7 +7869,7 @@
|
|
|
7869
7869
|
m$1.hydrateRoot;
|
|
7870
7870
|
}
|
|
7871
7871
|
|
|
7872
|
-
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:#2563eb;--cw-primary-hover:#1d4ed8;-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}.\\!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 .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#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-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-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-\\[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 .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-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-0\\.5{margin-left:.125rem}#chat-widget-root .ml-1{margin-left:.25rem}#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 .hidden{display:none}#chat-widget-root .h-1\\.5{height:.375rem}#chat-widget-root .h-10{height:2.5rem}#chat-widget-root .h-12{height:3rem}#chat-widget-root .h-14{height:3.5rem}#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-\\[48px\\]{height:48px}#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-12{width:3rem}#chat-widget-root .w-14{width:3.5rem}#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-\\[48px\\]{width:48px}#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-\\[85\\%\\]{max-width:85%}#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{flex-shrink:0}#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-0{--tw-rotate:0deg}#chat-widget-root .rotate-0,#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-not-allowed{cursor:not-allowed}#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-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-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}#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-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(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 .whitespace-normal{white-space:normal}#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 .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-red-500{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!important}#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 .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-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-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-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}#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-cover{-o-object-fit:cover;object-fit:cover}#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-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-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-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pt-1{padding-top:.25rem}#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 .align-middle{vertical-align:middle}#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-\\[11px\\]{font-size:11px}#chat-widget-root .text-\\[15px\\]{font-size:15px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#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 .leading-tight{line-height:1.25}#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-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-500{--tw-text-opacity:1;color:rgb(239 68 68/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-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 .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 .opacity-0{opacity:0}#chat-widget-root .opacity-50{opacity:.5}#chat-widget-root .opacity-60{opacity:.6}#chat-widget-root .opacity-80{opacity:.8}#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-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}#chat-widget-root .shadow-none,#chat-widget-root .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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-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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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 .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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#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 .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-\\[\\#8C8C8C\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#8C8C8C\\]::placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#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 .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-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#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-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\\: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-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!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\\: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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#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-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\\.98\\]: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\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#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))}#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}";
|
|
7872
|
+
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:#2563eb;--cw-primary-hover:#1d4ed8;-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}.\\!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 .pointer-events-none{pointer-events:none}#chat-widget-root .visible{visibility:visible}#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-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-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-\\[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 .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-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-0\\.5{margin-left:.125rem}#chat-widget-root .ml-1{margin-left:.25rem}#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-12{height:3rem}#chat-widget-root .h-14{height:3.5rem}#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-\\[48px\\]{height:48px}#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-12{width:3rem}#chat-widget-root .w-14{width:3.5rem}#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-\\[48px\\]{width:48px}#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-\\[85\\%\\]{max-width:85%}#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{flex-shrink:0}#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-0{--tw-rotate:0deg}#chat-widget-root .rotate-0,#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-not-allowed{cursor:not-allowed}#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-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-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}#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-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(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-normal{white-space:normal}#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 .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-red-500{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!important}#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 .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-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-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-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}#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-cover{-o-object-fit:cover;object-fit:cover}#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-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-4{padding-left:1rem}#chat-widget-root .pl-\\[50px\\]{padding-left:50px}#chat-widget-root .pt-1{padding-top:.25rem}#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 .align-middle{vertical-align:middle}#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-\\[11px\\]{font-size:11px}#chat-widget-root .text-\\[15px\\]{font-size:15px}#chat-widget-root .text-base{font-size:1rem;line-height:1.5rem}#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 .leading-tight{line-height:1.25}#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-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-500{--tw-text-opacity:1;color:rgb(239 68 68/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-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 .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-80{opacity:.8}#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-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}#chat-widget-root .shadow-none,#chat-widget-root .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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-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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}#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 .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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}#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 .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-\\[\\#8C8C8C\\]::-moz-placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#chat-widget-root .placeholder\\:text-\\[\\#8C8C8C\\]::placeholder{--tw-text-opacity:1;color:rgb(140 140 140/var(--tw-text-opacity,1))}#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 .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-900\\/50:hover{background-color:rgba(30,58,138,.5)}#chat-widget-root .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}#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-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-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(239 68 68/var(--tw-border-opacity,1))!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\\: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-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\\.98\\]: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\\.98\\]:active{--tw-scale-x:0.98;--tw-scale-y:0.98}#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))}#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}";
|
|
7873
7873
|
|
|
7874
7874
|
var css_248z = ".chat-widget-root{position:fixed;z-index:999999}.chat-widget-container{color:var(--cw-text-color,inherit);font-family:var(\r\n --cw-font-family,-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",sans-serif\r\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}@media print{.chat-widget-root{display:none!important}}";
|
|
7875
7875
|
|
|
@@ -54177,6 +54177,1773 @@
|
|
|
54177
54177
|
}, [fontFamily]);
|
|
54178
54178
|
}
|
|
54179
54179
|
|
|
54180
|
+
function A2uiBlock(_ref) {
|
|
54181
|
+
let {
|
|
54182
|
+
spec,
|
|
54183
|
+
isDark = false,
|
|
54184
|
+
onButtonClick
|
|
54185
|
+
} = _ref;
|
|
54186
|
+
if (!spec || typeof spec !== 'object') return null;
|
|
54187
|
+
// Normalize underscore_case → kebab-case so the agent can emit either
|
|
54188
|
+
// form. Both `key_observations` and `key-observations` route here.
|
|
54189
|
+
const t = String(spec.type || '').trim().toLowerCase().replace(/_/g, '-');
|
|
54190
|
+
|
|
54191
|
+
// Charts (incl. graceful fallback for chart-shaped data with unknown type)
|
|
54192
|
+
const CHART_TYPES = new Set(['bar', 'line', 'area', 'pie', 'donut', 'scatter', 'bubble', 'radar', 'radial-bar', 'radial', 'radialbar', 'treemap', 'funnel', 'sankey', 'composed', 'waterfall', 'gauge', 'histogram', 'kpi']);
|
|
54193
|
+
|
|
54194
|
+
// ── On-demand analytical insight cards (12-06-2026) ──
|
|
54195
|
+
// Six types the database_query agent emits when the user explicitly
|
|
54196
|
+
// asks for analysis. Stack vertically as separate cards in the chat
|
|
54197
|
+
// bubble. See sub_agents/database_query/prompt.py for the schema spec.
|
|
54198
|
+
if (t === 'revenue-insights') return /*#__PURE__*/jsxRuntimeExports.jsx(RevenueInsightsCard, {
|
|
54199
|
+
spec: spec,
|
|
54200
|
+
isDark: isDark
|
|
54201
|
+
});
|
|
54202
|
+
if (t === 'impact-analysis') return /*#__PURE__*/jsxRuntimeExports.jsx(ImpactAnalysisCard, {
|
|
54203
|
+
spec: spec,
|
|
54204
|
+
isDark: isDark
|
|
54205
|
+
});
|
|
54206
|
+
if (t === 'deviation-analysis') return /*#__PURE__*/jsxRuntimeExports.jsx(DeviationAnalysisCard, {
|
|
54207
|
+
spec: spec,
|
|
54208
|
+
isDark: isDark
|
|
54209
|
+
});
|
|
54210
|
+
if (t === 'main-drivers') return /*#__PURE__*/jsxRuntimeExports.jsx(MainDriversCard, {
|
|
54211
|
+
spec: spec,
|
|
54212
|
+
isDark: isDark
|
|
54213
|
+
});
|
|
54214
|
+
if (t === 'key-observations') return /*#__PURE__*/jsxRuntimeExports.jsx(KeyObservationsCard, {
|
|
54215
|
+
spec: spec,
|
|
54216
|
+
isDark: isDark
|
|
54217
|
+
});
|
|
54218
|
+
if (t === 'recommendations') return /*#__PURE__*/jsxRuntimeExports.jsx(RecommendationsCard, {
|
|
54219
|
+
spec: spec,
|
|
54220
|
+
isDark: isDark
|
|
54221
|
+
});
|
|
54222
|
+
if (t === 'kpi') return /*#__PURE__*/jsxRuntimeExports.jsx(Kpi, {
|
|
54223
|
+
spec: spec,
|
|
54224
|
+
isDark: isDark
|
|
54225
|
+
});
|
|
54226
|
+
if (CHART_TYPES.has(t) || Array.isArray(spec.data) && spec.data.length > 0) {
|
|
54227
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(Chart, {
|
|
54228
|
+
spec: spec,
|
|
54229
|
+
type: t,
|
|
54230
|
+
isDark: isDark
|
|
54231
|
+
});
|
|
54232
|
+
}
|
|
54233
|
+
if (t === 'table') return /*#__PURE__*/jsxRuntimeExports.jsx(Table, {
|
|
54234
|
+
spec: spec,
|
|
54235
|
+
isDark: isDark
|
|
54236
|
+
});
|
|
54237
|
+
if (t === 'alert') return /*#__PURE__*/jsxRuntimeExports.jsx(Alert, {
|
|
54238
|
+
spec: spec,
|
|
54239
|
+
isDark: isDark
|
|
54240
|
+
});
|
|
54241
|
+
if (t === 'card') return /*#__PURE__*/jsxRuntimeExports.jsx(Card, {
|
|
54242
|
+
spec: spec,
|
|
54243
|
+
isDark: isDark
|
|
54244
|
+
});
|
|
54245
|
+
if (t === 'button-group') return /*#__PURE__*/jsxRuntimeExports.jsx(ButtonGroup, {
|
|
54246
|
+
spec: spec,
|
|
54247
|
+
isDark: isDark,
|
|
54248
|
+
onButtonClick: onButtonClick
|
|
54249
|
+
});
|
|
54250
|
+
if (t === 'form') return /*#__PURE__*/jsxRuntimeExports.jsx(FormDisplay, {
|
|
54251
|
+
spec: spec,
|
|
54252
|
+
isDark: isDark
|
|
54253
|
+
});
|
|
54254
|
+
if (t === 'confirmation') return /*#__PURE__*/jsxRuntimeExports.jsx(Confirmation, {
|
|
54255
|
+
spec: spec,
|
|
54256
|
+
isDark: isDark,
|
|
54257
|
+
onButtonClick: onButtonClick
|
|
54258
|
+
});
|
|
54259
|
+
|
|
54260
|
+
// Unrecognised type — render the data (if any) as a labeled list. Never
|
|
54261
|
+
// fall through to raw JSON; that's the bug we're fixing.
|
|
54262
|
+
if (Array.isArray(spec.data) && spec.data.length > 0) {
|
|
54263
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(Chart, {
|
|
54264
|
+
spec: spec,
|
|
54265
|
+
type: "bar",
|
|
54266
|
+
isDark: isDark
|
|
54267
|
+
});
|
|
54268
|
+
}
|
|
54269
|
+
return null;
|
|
54270
|
+
}
|
|
54271
|
+
|
|
54272
|
+
// ── Shared helpers ────────────────────────────────────────────────────────
|
|
54273
|
+
|
|
54274
|
+
const PALETTE = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#ec4899', '#14b8a6', '#f97316', '#6366f1', '#84cc16'];
|
|
54275
|
+
const card = isDark => ({
|
|
54276
|
+
border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',
|
|
54277
|
+
background: isDark ? '#1f2937' : '#ffffff',
|
|
54278
|
+
borderRadius: 8,
|
|
54279
|
+
padding: 12,
|
|
54280
|
+
margin: '8px 0',
|
|
54281
|
+
fontSize: 13,
|
|
54282
|
+
color: isDark ? '#f3f4f6' : '#111827'
|
|
54283
|
+
});
|
|
54284
|
+
function inferKeys(data, xKey, yKey) {
|
|
54285
|
+
// Resolve x/y keys defensively — the agent sometimes emits them, sometimes
|
|
54286
|
+
// we have to guess. Picks the first string-valued field for x and the
|
|
54287
|
+
// first numeric-valued field for y.
|
|
54288
|
+
if (!Array.isArray(data) || data.length === 0) return {
|
|
54289
|
+
x: 'name',
|
|
54290
|
+
y: 'value'
|
|
54291
|
+
};
|
|
54292
|
+
const sample = data[0] || {};
|
|
54293
|
+
if (xKey && Object.prototype.hasOwnProperty.call(sample, xKey)) {
|
|
54294
|
+
if (yKey && Object.prototype.hasOwnProperty.call(sample, yKey)) {
|
|
54295
|
+
return {
|
|
54296
|
+
x: xKey,
|
|
54297
|
+
y: yKey
|
|
54298
|
+
};
|
|
54299
|
+
}
|
|
54300
|
+
}
|
|
54301
|
+
let x = xKey || null;
|
|
54302
|
+
let y = yKey || null;
|
|
54303
|
+
for (const k of Object.keys(sample)) {
|
|
54304
|
+
const v = sample[k];
|
|
54305
|
+
if (x == null && (typeof v === 'string' || v == null)) x = k;
|
|
54306
|
+
if (y == null && typeof v === 'number' && Number.isFinite(v)) y = k;
|
|
54307
|
+
}
|
|
54308
|
+
return {
|
|
54309
|
+
x: x || 'name',
|
|
54310
|
+
y: y || 'value'
|
|
54311
|
+
};
|
|
54312
|
+
}
|
|
54313
|
+
function numericData(data, xKey, yKey) {
|
|
54314
|
+
return (data || []).map(row => {
|
|
54315
|
+
var _row$xKey;
|
|
54316
|
+
return {
|
|
54317
|
+
label: String((_row$xKey = row === null || row === void 0 ? void 0 : row[xKey]) !== null && _row$xKey !== void 0 ? _row$xKey : ''),
|
|
54318
|
+
value: Number(row === null || row === void 0 ? void 0 : row[yKey])
|
|
54319
|
+
};
|
|
54320
|
+
}).filter(d => Number.isFinite(d.value));
|
|
54321
|
+
}
|
|
54322
|
+
|
|
54323
|
+
// ── Chart (SVG: line / bar / pie / donut + everything-else fallback) ─────
|
|
54324
|
+
|
|
54325
|
+
function Chart(_ref2) {
|
|
54326
|
+
let {
|
|
54327
|
+
spec,
|
|
54328
|
+
type,
|
|
54329
|
+
isDark
|
|
54330
|
+
} = _ref2;
|
|
54331
|
+
const {
|
|
54332
|
+
x,
|
|
54333
|
+
y
|
|
54334
|
+
} = inferKeys(spec.data, spec.x, spec.y);
|
|
54335
|
+
const rows = numericData(spec.data, x, y);
|
|
54336
|
+
if (rows.length === 0) {
|
|
54337
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54338
|
+
style: card(isDark),
|
|
54339
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54340
|
+
style: {
|
|
54341
|
+
fontWeight: 600,
|
|
54342
|
+
marginBottom: 8
|
|
54343
|
+
},
|
|
54344
|
+
children: spec.title
|
|
54345
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54346
|
+
style: {
|
|
54347
|
+
color: isDark ? '#9ca3af' : '#6b7280',
|
|
54348
|
+
fontSize: 12
|
|
54349
|
+
},
|
|
54350
|
+
children: "No chartable data"
|
|
54351
|
+
})]
|
|
54352
|
+
});
|
|
54353
|
+
}
|
|
54354
|
+
const t = String(type || '').trim().toLowerCase();
|
|
54355
|
+
let body;
|
|
54356
|
+
if (t === 'pie' || t === 'donut') body = /*#__PURE__*/jsxRuntimeExports.jsx(PieSvg, {
|
|
54357
|
+
rows: rows,
|
|
54358
|
+
donut: t === 'donut',
|
|
54359
|
+
isDark: isDark
|
|
54360
|
+
});else if (t === 'line' || t === 'area') body = /*#__PURE__*/jsxRuntimeExports.jsx(LineSvg, {
|
|
54361
|
+
rows: rows,
|
|
54362
|
+
area: t === 'area',
|
|
54363
|
+
isDark: isDark
|
|
54364
|
+
});else body = /*#__PURE__*/jsxRuntimeExports.jsx(BarSvg, {
|
|
54365
|
+
rows: rows,
|
|
54366
|
+
isDark: isDark
|
|
54367
|
+
}); // bar + every fallback
|
|
54368
|
+
|
|
54369
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54370
|
+
style: card(isDark),
|
|
54371
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54372
|
+
style: {
|
|
54373
|
+
fontWeight: 600,
|
|
54374
|
+
marginBottom: 8
|
|
54375
|
+
},
|
|
54376
|
+
children: spec.title
|
|
54377
|
+
}), body]
|
|
54378
|
+
});
|
|
54379
|
+
}
|
|
54380
|
+
function BarSvg(_ref3) {
|
|
54381
|
+
let {
|
|
54382
|
+
rows,
|
|
54383
|
+
isDark
|
|
54384
|
+
} = _ref3;
|
|
54385
|
+
const w = 320;
|
|
54386
|
+
const h = 180;
|
|
54387
|
+
const padLeft = 8;
|
|
54388
|
+
const padRight = 8;
|
|
54389
|
+
const padTop = 8;
|
|
54390
|
+
const padBottom = 28;
|
|
54391
|
+
const innerW = w - padLeft - padRight;
|
|
54392
|
+
const innerH = h - padTop - padBottom;
|
|
54393
|
+
const maxV = Math.max(...rows.map(r => r.value), 0.0001);
|
|
54394
|
+
const bw = innerW / rows.length;
|
|
54395
|
+
const labelStroke = isDark ? '#9ca3af' : '#4b5563';
|
|
54396
|
+
const gridStroke = isDark ? '#374151' : '#e5e7eb';
|
|
54397
|
+
const fontColor = isDark ? '#d1d5db' : '#374151';
|
|
54398
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
54399
|
+
viewBox: "0 0 ".concat(w, " ").concat(h),
|
|
54400
|
+
width: "100%",
|
|
54401
|
+
style: {
|
|
54402
|
+
display: 'block'
|
|
54403
|
+
},
|
|
54404
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("line", {
|
|
54405
|
+
x1: padLeft,
|
|
54406
|
+
y1: padTop + innerH,
|
|
54407
|
+
x2: padLeft + innerW,
|
|
54408
|
+
y2: padTop + innerH,
|
|
54409
|
+
stroke: gridStroke,
|
|
54410
|
+
strokeWidth: "1"
|
|
54411
|
+
}), rows.map((r, i) => {
|
|
54412
|
+
const barH = r.value / maxV * innerH;
|
|
54413
|
+
const x = padLeft + i * bw + bw * 0.15;
|
|
54414
|
+
const yPos = padTop + (innerH - barH);
|
|
54415
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("g", {
|
|
54416
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("rect", {
|
|
54417
|
+
x: x,
|
|
54418
|
+
y: yPos,
|
|
54419
|
+
width: bw * 0.7,
|
|
54420
|
+
height: barH,
|
|
54421
|
+
fill: PALETTE[i % PALETTE.length],
|
|
54422
|
+
rx: "2"
|
|
54423
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
|
|
54424
|
+
x: x + bw * 0.7 / 2,
|
|
54425
|
+
y: padTop + innerH + 14,
|
|
54426
|
+
fontSize: "9",
|
|
54427
|
+
fill: fontColor,
|
|
54428
|
+
textAnchor: "middle",
|
|
54429
|
+
children: truncate(r.label, 10)
|
|
54430
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
|
|
54431
|
+
x: x + bw * 0.7 / 2,
|
|
54432
|
+
y: yPos - 3,
|
|
54433
|
+
fontSize: "9",
|
|
54434
|
+
fill: labelStroke,
|
|
54435
|
+
textAnchor: "middle",
|
|
54436
|
+
children: formatNum(r.value)
|
|
54437
|
+
})]
|
|
54438
|
+
}, i);
|
|
54439
|
+
})]
|
|
54440
|
+
});
|
|
54441
|
+
}
|
|
54442
|
+
function LineSvg(_ref4) {
|
|
54443
|
+
let {
|
|
54444
|
+
rows,
|
|
54445
|
+
area,
|
|
54446
|
+
isDark
|
|
54447
|
+
} = _ref4;
|
|
54448
|
+
const w = 320;
|
|
54449
|
+
const h = 180;
|
|
54450
|
+
const padLeft = 28;
|
|
54451
|
+
const padRight = 12;
|
|
54452
|
+
const padTop = 12;
|
|
54453
|
+
const padBottom = 28;
|
|
54454
|
+
const innerW = w - padLeft - padRight;
|
|
54455
|
+
const innerH = h - padTop - padBottom;
|
|
54456
|
+
const vals = rows.map(r => r.value);
|
|
54457
|
+
const maxV = Math.max(...vals);
|
|
54458
|
+
const minV = Math.min(...vals, 0);
|
|
54459
|
+
const range = maxV - minV || 1;
|
|
54460
|
+
const gridStroke = isDark ? '#374151' : '#e5e7eb';
|
|
54461
|
+
const labelStroke = isDark ? '#9ca3af' : '#4b5563';
|
|
54462
|
+
const fontColor = isDark ? '#d1d5db' : '#374151';
|
|
54463
|
+
const lineColor = PALETTE[0];
|
|
54464
|
+
const xAt = i => padLeft + (rows.length > 1 ? i / (rows.length - 1) * innerW : innerW / 2);
|
|
54465
|
+
const yAt = v => padTop + innerH - (v - minV) / range * innerH;
|
|
54466
|
+
const points = rows.map((r, i) => "".concat(xAt(i), ",").concat(yAt(r.value))).join(' ');
|
|
54467
|
+
const areaPath = rows.length > 0 ? "M ".concat(xAt(0), ",").concat(padTop + innerH, " L ").concat(rows.map((r, i) => "".concat(xAt(i), ",").concat(yAt(r.value))).join(' L '), " L ").concat(xAt(rows.length - 1), ",").concat(padTop + innerH, " Z") : '';
|
|
54468
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
54469
|
+
viewBox: "0 0 ".concat(w, " ").concat(h),
|
|
54470
|
+
width: "100%",
|
|
54471
|
+
style: {
|
|
54472
|
+
display: 'block'
|
|
54473
|
+
},
|
|
54474
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("line", {
|
|
54475
|
+
x1: padLeft,
|
|
54476
|
+
y1: padTop,
|
|
54477
|
+
x2: padLeft,
|
|
54478
|
+
y2: padTop + innerH,
|
|
54479
|
+
stroke: gridStroke,
|
|
54480
|
+
strokeWidth: "1"
|
|
54481
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("line", {
|
|
54482
|
+
x1: padLeft,
|
|
54483
|
+
y1: padTop + innerH,
|
|
54484
|
+
x2: padLeft + innerW,
|
|
54485
|
+
y2: padTop + innerH,
|
|
54486
|
+
stroke: gridStroke,
|
|
54487
|
+
strokeWidth: "1"
|
|
54488
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
|
|
54489
|
+
x: padLeft - 4,
|
|
54490
|
+
y: padTop + 4,
|
|
54491
|
+
fontSize: "9",
|
|
54492
|
+
fill: labelStroke,
|
|
54493
|
+
textAnchor: "end",
|
|
54494
|
+
children: formatNum(maxV)
|
|
54495
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
|
|
54496
|
+
x: padLeft - 4,
|
|
54497
|
+
y: padTop + innerH,
|
|
54498
|
+
fontSize: "9",
|
|
54499
|
+
fill: labelStroke,
|
|
54500
|
+
textAnchor: "end",
|
|
54501
|
+
children: formatNum(minV)
|
|
54502
|
+
}), area && /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
54503
|
+
d: areaPath,
|
|
54504
|
+
fill: lineColor,
|
|
54505
|
+
fillOpacity: "0.15"
|
|
54506
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("polyline", {
|
|
54507
|
+
points: points,
|
|
54508
|
+
fill: "none",
|
|
54509
|
+
stroke: lineColor,
|
|
54510
|
+
strokeWidth: "2",
|
|
54511
|
+
strokeLinejoin: "round",
|
|
54512
|
+
strokeLinecap: "round"
|
|
54513
|
+
}), rows.map((r, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("g", {
|
|
54514
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("circle", {
|
|
54515
|
+
cx: xAt(i),
|
|
54516
|
+
cy: yAt(r.value),
|
|
54517
|
+
r: "3",
|
|
54518
|
+
fill: lineColor
|
|
54519
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("text", {
|
|
54520
|
+
x: xAt(i),
|
|
54521
|
+
y: padTop + innerH + 14,
|
|
54522
|
+
fontSize: "9",
|
|
54523
|
+
fill: fontColor,
|
|
54524
|
+
textAnchor: "middle",
|
|
54525
|
+
children: truncate(r.label, 10)
|
|
54526
|
+
})]
|
|
54527
|
+
}, i))]
|
|
54528
|
+
});
|
|
54529
|
+
}
|
|
54530
|
+
function PieSvg(_ref5) {
|
|
54531
|
+
let {
|
|
54532
|
+
rows,
|
|
54533
|
+
donut,
|
|
54534
|
+
isDark
|
|
54535
|
+
} = _ref5;
|
|
54536
|
+
const size = 200;
|
|
54537
|
+
const cx = size / 2;
|
|
54538
|
+
const cy = size / 2;
|
|
54539
|
+
const rOuter = size / 2 - 4;
|
|
54540
|
+
const rInner = donut ? rOuter * 0.55 : 0;
|
|
54541
|
+
const total = rows.reduce((s, r) => s + Math.max(0, r.value), 0);
|
|
54542
|
+
if (total <= 0) {
|
|
54543
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54544
|
+
style: {
|
|
54545
|
+
color: isDark ? '#9ca3af' : '#6b7280',
|
|
54546
|
+
fontSize: 12
|
|
54547
|
+
},
|
|
54548
|
+
children: "Empty pie chart"
|
|
54549
|
+
});
|
|
54550
|
+
}
|
|
54551
|
+
let acc = 0;
|
|
54552
|
+
const slices = rows.map((r, i) => {
|
|
54553
|
+
const startA = acc / total * Math.PI * 2 - Math.PI / 2;
|
|
54554
|
+
acc += Math.max(0, r.value);
|
|
54555
|
+
const endA = acc / total * Math.PI * 2 - Math.PI / 2;
|
|
54556
|
+
const large = endA - startA > Math.PI ? 1 : 0;
|
|
54557
|
+
const x1 = cx + rOuter * Math.cos(startA);
|
|
54558
|
+
const y1 = cy + rOuter * Math.sin(startA);
|
|
54559
|
+
const x2 = cx + rOuter * Math.cos(endA);
|
|
54560
|
+
const y2 = cy + rOuter * Math.sin(endA);
|
|
54561
|
+
if (donut) {
|
|
54562
|
+
const ix1 = cx + rInner * Math.cos(endA);
|
|
54563
|
+
const iy1 = cy + rInner * Math.sin(endA);
|
|
54564
|
+
const ix2 = cx + rInner * Math.cos(startA);
|
|
54565
|
+
const iy2 = cy + rInner * Math.sin(startA);
|
|
54566
|
+
return {
|
|
54567
|
+
d: "M ".concat(x1, ",").concat(y1, " A ").concat(rOuter, ",").concat(rOuter, " 0 ").concat(large, " 1 ").concat(x2, ",").concat(y2, " L ").concat(ix1, ",").concat(iy1, " A ").concat(rInner, ",").concat(rInner, " 0 ").concat(large, " 0 ").concat(ix2, ",").concat(iy2, " Z"),
|
|
54568
|
+
color: PALETTE[i % PALETTE.length],
|
|
54569
|
+
label: r.label,
|
|
54570
|
+
value: r.value
|
|
54571
|
+
};
|
|
54572
|
+
}
|
|
54573
|
+
return {
|
|
54574
|
+
d: "M ".concat(cx, ",").concat(cy, " L ").concat(x1, ",").concat(y1, " A ").concat(rOuter, ",").concat(rOuter, " 0 ").concat(large, " 1 ").concat(x2, ",").concat(y2, " Z"),
|
|
54575
|
+
color: PALETTE[i % PALETTE.length],
|
|
54576
|
+
label: r.label,
|
|
54577
|
+
value: r.value
|
|
54578
|
+
};
|
|
54579
|
+
});
|
|
54580
|
+
const labelColor = isDark ? '#d1d5db' : '#374151';
|
|
54581
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54582
|
+
style: {
|
|
54583
|
+
display: 'flex',
|
|
54584
|
+
flexWrap: 'wrap',
|
|
54585
|
+
gap: 12,
|
|
54586
|
+
alignItems: 'center'
|
|
54587
|
+
},
|
|
54588
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("svg", {
|
|
54589
|
+
viewBox: "0 0 ".concat(size, " ").concat(size),
|
|
54590
|
+
width: "160",
|
|
54591
|
+
style: {
|
|
54592
|
+
flexShrink: 0
|
|
54593
|
+
},
|
|
54594
|
+
children: slices.map((s, i) => /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
54595
|
+
d: s.d,
|
|
54596
|
+
fill: s.color,
|
|
54597
|
+
stroke: isDark ? '#1f2937' : '#fff',
|
|
54598
|
+
strokeWidth: "1"
|
|
54599
|
+
}, i))
|
|
54600
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54601
|
+
style: {
|
|
54602
|
+
minWidth: 100,
|
|
54603
|
+
flex: '1 1 auto'
|
|
54604
|
+
},
|
|
54605
|
+
children: slices.map((s, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54606
|
+
style: {
|
|
54607
|
+
display: 'flex',
|
|
54608
|
+
alignItems: 'center',
|
|
54609
|
+
gap: 6,
|
|
54610
|
+
marginBottom: 4,
|
|
54611
|
+
fontSize: 11
|
|
54612
|
+
},
|
|
54613
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
54614
|
+
style: {
|
|
54615
|
+
display: 'inline-block',
|
|
54616
|
+
width: 10,
|
|
54617
|
+
height: 10,
|
|
54618
|
+
background: s.color,
|
|
54619
|
+
borderRadius: 2
|
|
54620
|
+
}
|
|
54621
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
54622
|
+
style: {
|
|
54623
|
+
color: labelColor
|
|
54624
|
+
},
|
|
54625
|
+
children: [truncate(s.label, 18), " ", /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
54626
|
+
style: {
|
|
54627
|
+
opacity: 0.7
|
|
54628
|
+
},
|
|
54629
|
+
children: formatNum(s.value)
|
|
54630
|
+
})]
|
|
54631
|
+
})]
|
|
54632
|
+
}, i))
|
|
54633
|
+
})]
|
|
54634
|
+
});
|
|
54635
|
+
}
|
|
54636
|
+
|
|
54637
|
+
// ── KPI / Table / Alert / Card / Buttons / Form / Confirmation ───────────
|
|
54638
|
+
|
|
54639
|
+
function Kpi(_ref6) {
|
|
54640
|
+
var _ref7, _ref8, _spec$value;
|
|
54641
|
+
let {
|
|
54642
|
+
spec,
|
|
54643
|
+
isDark
|
|
54644
|
+
} = _ref6;
|
|
54645
|
+
const value = (_ref7 = (_ref8 = (_spec$value = spec.value) !== null && _spec$value !== void 0 ? _spec$value : spec.amount) !== null && _ref8 !== void 0 ? _ref8 : spec.metric) !== null && _ref7 !== void 0 ? _ref7 : spec.kpi;
|
|
54646
|
+
const label = spec.label || spec.title || '';
|
|
54647
|
+
const delta = spec.delta != null ? Number(spec.delta) : null;
|
|
54648
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54649
|
+
style: card(isDark),
|
|
54650
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54651
|
+
style: {
|
|
54652
|
+
fontSize: 11,
|
|
54653
|
+
color: isDark ? '#9ca3af' : '#6b7280',
|
|
54654
|
+
textTransform: 'uppercase',
|
|
54655
|
+
letterSpacing: '0.05em'
|
|
54656
|
+
},
|
|
54657
|
+
children: label
|
|
54658
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54659
|
+
style: {
|
|
54660
|
+
fontSize: 24,
|
|
54661
|
+
fontWeight: 700,
|
|
54662
|
+
marginTop: 2
|
|
54663
|
+
},
|
|
54664
|
+
children: value != null ? String(value) : '—'
|
|
54665
|
+
}), delta != null && Number.isFinite(delta) && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54666
|
+
style: {
|
|
54667
|
+
fontSize: 12,
|
|
54668
|
+
color: delta >= 0 ? '#10b981' : '#ef4444',
|
|
54669
|
+
marginTop: 2
|
|
54670
|
+
},
|
|
54671
|
+
children: [delta >= 0 ? '▲ ' : '▼ ', formatNum(Math.abs(delta))]
|
|
54672
|
+
})]
|
|
54673
|
+
});
|
|
54674
|
+
}
|
|
54675
|
+
function Table(_ref9) {
|
|
54676
|
+
let {
|
|
54677
|
+
spec,
|
|
54678
|
+
isDark
|
|
54679
|
+
} = _ref9;
|
|
54680
|
+
const cols = Array.isArray(spec.columns) && spec.columns.length > 0 ? spec.columns : Array.isArray(spec.data) && spec.data[0] ? Object.keys(spec.data[0]) : [];
|
|
54681
|
+
const rows = Array.isArray(spec.data) ? spec.data : Array.isArray(spec.rows) ? spec.rows : [];
|
|
54682
|
+
if (cols.length === 0 || rows.length === 0) {
|
|
54683
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54684
|
+
style: card(isDark),
|
|
54685
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54686
|
+
style: {
|
|
54687
|
+
color: isDark ? '#9ca3af' : '#6b7280',
|
|
54688
|
+
fontSize: 12
|
|
54689
|
+
},
|
|
54690
|
+
children: "Empty table"
|
|
54691
|
+
})
|
|
54692
|
+
});
|
|
54693
|
+
}
|
|
54694
|
+
const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
|
|
54695
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54696
|
+
style: card(isDark),
|
|
54697
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54698
|
+
style: {
|
|
54699
|
+
fontWeight: 600,
|
|
54700
|
+
marginBottom: 8
|
|
54701
|
+
},
|
|
54702
|
+
children: spec.title
|
|
54703
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54704
|
+
style: {
|
|
54705
|
+
overflowX: 'auto'
|
|
54706
|
+
},
|
|
54707
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsxs("table", {
|
|
54708
|
+
style: {
|
|
54709
|
+
borderCollapse: 'collapse',
|
|
54710
|
+
width: '100%',
|
|
54711
|
+
fontSize: 12
|
|
54712
|
+
},
|
|
54713
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("thead", {
|
|
54714
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("tr", {
|
|
54715
|
+
children: cols.map(c => /*#__PURE__*/jsxRuntimeExports.jsx("th", {
|
|
54716
|
+
style: {
|
|
54717
|
+
border,
|
|
54718
|
+
padding: '6px 8px',
|
|
54719
|
+
background: isDark ? '#111827' : '#f9fafb',
|
|
54720
|
+
textAlign: 'left',
|
|
54721
|
+
fontWeight: 600
|
|
54722
|
+
},
|
|
54723
|
+
children: c
|
|
54724
|
+
}, c))
|
|
54725
|
+
})
|
|
54726
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("tbody", {
|
|
54727
|
+
children: rows.map((row, i) => /*#__PURE__*/jsxRuntimeExports.jsx("tr", {
|
|
54728
|
+
children: cols.map(c => /*#__PURE__*/jsxRuntimeExports.jsx("td", {
|
|
54729
|
+
style: {
|
|
54730
|
+
border,
|
|
54731
|
+
padding: '6px 8px'
|
|
54732
|
+
},
|
|
54733
|
+
children: row && typeof row === 'object' ? formatCell(row[c]) : ''
|
|
54734
|
+
}, c))
|
|
54735
|
+
}, i))
|
|
54736
|
+
})]
|
|
54737
|
+
})
|
|
54738
|
+
})]
|
|
54739
|
+
});
|
|
54740
|
+
}
|
|
54741
|
+
function Alert(_ref0) {
|
|
54742
|
+
let {
|
|
54743
|
+
spec,
|
|
54744
|
+
isDark
|
|
54745
|
+
} = _ref0;
|
|
54746
|
+
const lvl = String(spec.level || 'info').toLowerCase();
|
|
54747
|
+
const palette = {
|
|
54748
|
+
info: {
|
|
54749
|
+
bg: isDark ? '#1e3a5f' : '#eff6ff',
|
|
54750
|
+
border: '#3b82f6',
|
|
54751
|
+
text: isDark ? '#dbeafe' : '#1e40af'
|
|
54752
|
+
},
|
|
54753
|
+
warn: {
|
|
54754
|
+
bg: isDark ? '#3d2e0a' : '#fef3c7',
|
|
54755
|
+
border: '#f59e0b',
|
|
54756
|
+
text: isDark ? '#fde68a' : '#92400e'
|
|
54757
|
+
},
|
|
54758
|
+
warning: {
|
|
54759
|
+
bg: isDark ? '#3d2e0a' : '#fef3c7',
|
|
54760
|
+
border: '#f59e0b',
|
|
54761
|
+
text: isDark ? '#fde68a' : '#92400e'
|
|
54762
|
+
},
|
|
54763
|
+
error: {
|
|
54764
|
+
bg: isDark ? '#3a1216' : '#fee2e2',
|
|
54765
|
+
border: '#ef4444',
|
|
54766
|
+
text: isDark ? '#fecaca' : '#991b1b'
|
|
54767
|
+
},
|
|
54768
|
+
success: {
|
|
54769
|
+
bg: isDark ? '#0e2e1d' : '#d1fae5',
|
|
54770
|
+
border: '#10b981',
|
|
54771
|
+
text: isDark ? '#a7f3d0' : '#065f46'
|
|
54772
|
+
}
|
|
54773
|
+
};
|
|
54774
|
+
const p = palette[lvl] || palette.info;
|
|
54775
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54776
|
+
style: _objectSpread2(_objectSpread2({}, card(isDark)), {}, {
|
|
54777
|
+
background: p.bg,
|
|
54778
|
+
borderLeft: "4px solid ".concat(p.border),
|
|
54779
|
+
color: p.text
|
|
54780
|
+
}),
|
|
54781
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54782
|
+
style: {
|
|
54783
|
+
fontWeight: 600,
|
|
54784
|
+
marginBottom: 4
|
|
54785
|
+
},
|
|
54786
|
+
children: spec.title
|
|
54787
|
+
}), spec.body && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54788
|
+
style: {
|
|
54789
|
+
fontSize: 12
|
|
54790
|
+
},
|
|
54791
|
+
children: String(spec.body)
|
|
54792
|
+
})]
|
|
54793
|
+
});
|
|
54794
|
+
}
|
|
54795
|
+
function Card(_ref1) {
|
|
54796
|
+
let {
|
|
54797
|
+
spec,
|
|
54798
|
+
isDark
|
|
54799
|
+
} = _ref1;
|
|
54800
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54801
|
+
style: card(isDark),
|
|
54802
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54803
|
+
style: {
|
|
54804
|
+
fontWeight: 600,
|
|
54805
|
+
marginBottom: 6
|
|
54806
|
+
},
|
|
54807
|
+
children: spec.title
|
|
54808
|
+
}), spec.body && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54809
|
+
style: {
|
|
54810
|
+
fontSize: 12
|
|
54811
|
+
},
|
|
54812
|
+
children: String(spec.body)
|
|
54813
|
+
})]
|
|
54814
|
+
});
|
|
54815
|
+
}
|
|
54816
|
+
function ButtonGroup(_ref10) {
|
|
54817
|
+
let {
|
|
54818
|
+
spec,
|
|
54819
|
+
isDark,
|
|
54820
|
+
onButtonClick
|
|
54821
|
+
} = _ref10;
|
|
54822
|
+
const buttons = Array.isArray(spec.buttons) ? spec.buttons : [];
|
|
54823
|
+
if (buttons.length === 0) return null;
|
|
54824
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54825
|
+
style: {
|
|
54826
|
+
margin: '8px 0'
|
|
54827
|
+
},
|
|
54828
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54829
|
+
style: {
|
|
54830
|
+
fontSize: 11,
|
|
54831
|
+
color: isDark ? '#9ca3af' : '#6b7280',
|
|
54832
|
+
textTransform: 'uppercase',
|
|
54833
|
+
letterSpacing: '0.05em',
|
|
54834
|
+
marginBottom: 6
|
|
54835
|
+
},
|
|
54836
|
+
children: spec.title
|
|
54837
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54838
|
+
style: {
|
|
54839
|
+
display: 'flex',
|
|
54840
|
+
flexWrap: 'wrap',
|
|
54841
|
+
gap: 6
|
|
54842
|
+
},
|
|
54843
|
+
children: buttons.map((b, i) => {
|
|
54844
|
+
var _ref13, _b$label2;
|
|
54845
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
54846
|
+
type: "button",
|
|
54847
|
+
onClick: onButtonClick ? () => {
|
|
54848
|
+
var _ref11, _b$value, _ref12, _b$label;
|
|
54849
|
+
return onButtonClick(String((_ref11 = (_b$value = b.value) !== null && _b$value !== void 0 ? _b$value : b.label) !== null && _ref11 !== void 0 ? _ref11 : ''), String((_ref12 = (_b$label = b.label) !== null && _b$label !== void 0 ? _b$label : b.value) !== null && _ref12 !== void 0 ? _ref12 : ''));
|
|
54850
|
+
} : undefined,
|
|
54851
|
+
disabled: !onButtonClick,
|
|
54852
|
+
style: {
|
|
54853
|
+
border: '1px solid ' + (isDark ? '#374151' : '#d1d5db'),
|
|
54854
|
+
background: isDark ? '#1f2937' : '#ffffff',
|
|
54855
|
+
color: isDark ? '#f3f4f6' : '#111827',
|
|
54856
|
+
padding: '6px 12px',
|
|
54857
|
+
borderRadius: 6,
|
|
54858
|
+
fontSize: 12,
|
|
54859
|
+
cursor: onButtonClick ? 'pointer' : 'default',
|
|
54860
|
+
opacity: onButtonClick ? 1 : 0.6
|
|
54861
|
+
},
|
|
54862
|
+
children: String((_ref13 = (_b$label2 = b.label) !== null && _b$label2 !== void 0 ? _b$label2 : b.value) !== null && _ref13 !== void 0 ? _ref13 : '')
|
|
54863
|
+
}, i);
|
|
54864
|
+
})
|
|
54865
|
+
})]
|
|
54866
|
+
});
|
|
54867
|
+
}
|
|
54868
|
+
function FormDisplay(_ref14) {
|
|
54869
|
+
let {
|
|
54870
|
+
spec,
|
|
54871
|
+
isDark
|
|
54872
|
+
} = _ref14;
|
|
54873
|
+
// Forms are read-only in the widget — the chat surface doesn't have a
|
|
54874
|
+
// form-submit channel, so we just render the fields for the user to read.
|
|
54875
|
+
const fields = Array.isArray(spec.fields) ? spec.fields : [];
|
|
54876
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54877
|
+
style: card(isDark),
|
|
54878
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54879
|
+
style: {
|
|
54880
|
+
fontWeight: 600,
|
|
54881
|
+
marginBottom: 8
|
|
54882
|
+
},
|
|
54883
|
+
children: spec.title
|
|
54884
|
+
}), fields.map((f, i) => {
|
|
54885
|
+
var _ref15, _f$value;
|
|
54886
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54887
|
+
style: {
|
|
54888
|
+
marginBottom: 4,
|
|
54889
|
+
fontSize: 12
|
|
54890
|
+
},
|
|
54891
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
54892
|
+
style: {
|
|
54893
|
+
color: isDark ? '#9ca3af' : '#6b7280'
|
|
54894
|
+
},
|
|
54895
|
+
children: [f.label || f.name, ": "]
|
|
54896
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
54897
|
+
children: String((_ref15 = (_f$value = f.value) !== null && _f$value !== void 0 ? _f$value : f.placeholder) !== null && _ref15 !== void 0 ? _ref15 : '')
|
|
54898
|
+
})]
|
|
54899
|
+
}, i);
|
|
54900
|
+
})]
|
|
54901
|
+
});
|
|
54902
|
+
}
|
|
54903
|
+
function Confirmation(_ref16) {
|
|
54904
|
+
let {
|
|
54905
|
+
spec,
|
|
54906
|
+
isDark,
|
|
54907
|
+
onButtonClick
|
|
54908
|
+
} = _ref16;
|
|
54909
|
+
const yes = spec.yes || {
|
|
54910
|
+
label: 'Yes',
|
|
54911
|
+
value: 'yes'
|
|
54912
|
+
};
|
|
54913
|
+
const no = spec.no || {
|
|
54914
|
+
label: 'No',
|
|
54915
|
+
value: 'no'
|
|
54916
|
+
};
|
|
54917
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
54918
|
+
style: card(isDark),
|
|
54919
|
+
children: [spec.title && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54920
|
+
style: {
|
|
54921
|
+
fontWeight: 600,
|
|
54922
|
+
marginBottom: 6
|
|
54923
|
+
},
|
|
54924
|
+
children: spec.title
|
|
54925
|
+
}), spec.body && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
54926
|
+
style: {
|
|
54927
|
+
fontSize: 12,
|
|
54928
|
+
marginBottom: 8
|
|
54929
|
+
},
|
|
54930
|
+
children: String(spec.body)
|
|
54931
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx(ButtonGroup, {
|
|
54932
|
+
spec: {
|
|
54933
|
+
buttons: [yes, no]
|
|
54934
|
+
},
|
|
54935
|
+
isDark: isDark,
|
|
54936
|
+
onButtonClick: onButtonClick
|
|
54937
|
+
})]
|
|
54938
|
+
});
|
|
54939
|
+
}
|
|
54940
|
+
|
|
54941
|
+
// ── Formatting helpers ────────────────────────────────────────────────────
|
|
54942
|
+
|
|
54943
|
+
function truncate(s, max) {
|
|
54944
|
+
if (typeof s !== 'string') return String(s !== null && s !== void 0 ? s : '');
|
|
54945
|
+
return s.length > max ? s.slice(0, max - 1) + '…' : s;
|
|
54946
|
+
}
|
|
54947
|
+
function formatNum(n) {
|
|
54948
|
+
if (!Number.isFinite(n)) return '';
|
|
54949
|
+
const abs = Math.abs(n);
|
|
54950
|
+
if (abs >= 1000000000) return (n / 1000000000).toFixed(1) + 'B';
|
|
54951
|
+
if (abs >= 1000000) return (n / 1000000).toFixed(1) + 'M';
|
|
54952
|
+
if (abs >= 1000) return (n / 1000).toFixed(1) + 'k';
|
|
54953
|
+
if (Number.isInteger(n)) return String(n);
|
|
54954
|
+
return n.toFixed(2);
|
|
54955
|
+
}
|
|
54956
|
+
function formatCell(v) {
|
|
54957
|
+
if (v == null) return '';
|
|
54958
|
+
if (typeof v === 'number') return Number.isInteger(v) ? String(v) : v.toFixed(2);
|
|
54959
|
+
if (typeof v === 'object') return JSON.stringify(v);
|
|
54960
|
+
return String(v);
|
|
54961
|
+
}
|
|
54962
|
+
|
|
54963
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
54964
|
+
// ── ON-DEMAND ANALYTICAL INSIGHT CARDS (12-06-2026) ──
|
|
54965
|
+
// Six types the database_query agent emits AFTER a SQL answer when the
|
|
54966
|
+
// user EXPLICITLY asks for analysis (revenue insights / impact / deviation /
|
|
54967
|
+
// drivers / observations / recommendations). Each card has the same shell
|
|
54968
|
+
// (4px colored top-accent + icon + title + body) but a type-specific body.
|
|
54969
|
+
// Schemas: see services/knowledge-api/sub_agents/database_query/prompt.py.
|
|
54970
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
54971
|
+
|
|
54972
|
+
// ── Lucide-style SVG icons (sharp, monoline, inherit color via currentColor)
|
|
54973
|
+
|
|
54974
|
+
function IconTrendingUp(_ref17) {
|
|
54975
|
+
let {
|
|
54976
|
+
size = 14
|
|
54977
|
+
} = _ref17;
|
|
54978
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
54979
|
+
width: size,
|
|
54980
|
+
height: size,
|
|
54981
|
+
viewBox: "0 0 24 24",
|
|
54982
|
+
fill: "none",
|
|
54983
|
+
stroke: "currentColor",
|
|
54984
|
+
strokeWidth: "2",
|
|
54985
|
+
strokeLinecap: "round",
|
|
54986
|
+
strokeLinejoin: "round",
|
|
54987
|
+
"aria-hidden": "true",
|
|
54988
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("polyline", {
|
|
54989
|
+
points: "22 7 13.5 15.5 8.5 10.5 2 17"
|
|
54990
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("polyline", {
|
|
54991
|
+
points: "16 7 22 7 22 13"
|
|
54992
|
+
})]
|
|
54993
|
+
});
|
|
54994
|
+
}
|
|
54995
|
+
function IconScale(_ref18) {
|
|
54996
|
+
let {
|
|
54997
|
+
size = 14
|
|
54998
|
+
} = _ref18;
|
|
54999
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
55000
|
+
width: size,
|
|
55001
|
+
height: size,
|
|
55002
|
+
viewBox: "0 0 24 24",
|
|
55003
|
+
fill: "none",
|
|
55004
|
+
stroke: "currentColor",
|
|
55005
|
+
strokeWidth: "2",
|
|
55006
|
+
strokeLinecap: "round",
|
|
55007
|
+
strokeLinejoin: "round",
|
|
55008
|
+
"aria-hidden": "true",
|
|
55009
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55010
|
+
d: "M16 16c0-1.7-2-3-2-3"
|
|
55011
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55012
|
+
d: "M8 16c0-1.7 2-3 2-3"
|
|
55013
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55014
|
+
d: "M7 21h10"
|
|
55015
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55016
|
+
d: "M12 3v18"
|
|
55017
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55018
|
+
d: "m17 7 5 9h-10z"
|
|
55019
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55020
|
+
d: "m7 7-5 9h10z"
|
|
55021
|
+
})]
|
|
55022
|
+
});
|
|
55023
|
+
}
|
|
55024
|
+
function IconGitCompare(_ref19) {
|
|
55025
|
+
let {
|
|
55026
|
+
size = 14
|
|
55027
|
+
} = _ref19;
|
|
55028
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
55029
|
+
width: size,
|
|
55030
|
+
height: size,
|
|
55031
|
+
viewBox: "0 0 24 24",
|
|
55032
|
+
fill: "none",
|
|
55033
|
+
stroke: "currentColor",
|
|
55034
|
+
strokeWidth: "2",
|
|
55035
|
+
strokeLinecap: "round",
|
|
55036
|
+
strokeLinejoin: "round",
|
|
55037
|
+
"aria-hidden": "true",
|
|
55038
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("circle", {
|
|
55039
|
+
cx: "5",
|
|
55040
|
+
cy: "6",
|
|
55041
|
+
r: "3"
|
|
55042
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("circle", {
|
|
55043
|
+
cx: "19",
|
|
55044
|
+
cy: "18",
|
|
55045
|
+
r: "3"
|
|
55046
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55047
|
+
d: "M12 6h5a2 2 0 0 1 2 2v7"
|
|
55048
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55049
|
+
d: "M12 18H7a2 2 0 0 1-2-2V9"
|
|
55050
|
+
})]
|
|
55051
|
+
});
|
|
55052
|
+
}
|
|
55053
|
+
function IconZap(_ref20) {
|
|
55054
|
+
let {
|
|
55055
|
+
size = 14
|
|
55056
|
+
} = _ref20;
|
|
55057
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("svg", {
|
|
55058
|
+
width: size,
|
|
55059
|
+
height: size,
|
|
55060
|
+
viewBox: "0 0 24 24",
|
|
55061
|
+
fill: "none",
|
|
55062
|
+
stroke: "currentColor",
|
|
55063
|
+
strokeWidth: "2",
|
|
55064
|
+
strokeLinecap: "round",
|
|
55065
|
+
strokeLinejoin: "round",
|
|
55066
|
+
"aria-hidden": "true",
|
|
55067
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("polygon", {
|
|
55068
|
+
points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2"
|
|
55069
|
+
})
|
|
55070
|
+
});
|
|
55071
|
+
}
|
|
55072
|
+
function IconLightbulb(_ref21) {
|
|
55073
|
+
let {
|
|
55074
|
+
size = 14
|
|
55075
|
+
} = _ref21;
|
|
55076
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
55077
|
+
width: size,
|
|
55078
|
+
height: size,
|
|
55079
|
+
viewBox: "0 0 24 24",
|
|
55080
|
+
fill: "none",
|
|
55081
|
+
stroke: "currentColor",
|
|
55082
|
+
strokeWidth: "2",
|
|
55083
|
+
strokeLinecap: "round",
|
|
55084
|
+
strokeLinejoin: "round",
|
|
55085
|
+
"aria-hidden": "true",
|
|
55086
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55087
|
+
d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"
|
|
55088
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55089
|
+
d: "M9 18h6"
|
|
55090
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("path", {
|
|
55091
|
+
d: "M10 22h4"
|
|
55092
|
+
})]
|
|
55093
|
+
});
|
|
55094
|
+
}
|
|
55095
|
+
function IconTarget(_ref22) {
|
|
55096
|
+
let {
|
|
55097
|
+
size = 14
|
|
55098
|
+
} = _ref22;
|
|
55099
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("svg", {
|
|
55100
|
+
width: size,
|
|
55101
|
+
height: size,
|
|
55102
|
+
viewBox: "0 0 24 24",
|
|
55103
|
+
fill: "none",
|
|
55104
|
+
stroke: "currentColor",
|
|
55105
|
+
strokeWidth: "2",
|
|
55106
|
+
strokeLinecap: "round",
|
|
55107
|
+
strokeLinejoin: "round",
|
|
55108
|
+
"aria-hidden": "true",
|
|
55109
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("circle", {
|
|
55110
|
+
cx: "12",
|
|
55111
|
+
cy: "12",
|
|
55112
|
+
r: "10"
|
|
55113
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("circle", {
|
|
55114
|
+
cx: "12",
|
|
55115
|
+
cy: "12",
|
|
55116
|
+
r: "6"
|
|
55117
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("circle", {
|
|
55118
|
+
cx: "12",
|
|
55119
|
+
cy: "12",
|
|
55120
|
+
r: "2"
|
|
55121
|
+
})]
|
|
55122
|
+
});
|
|
55123
|
+
}
|
|
55124
|
+
|
|
55125
|
+
// ── Theme per insight type (accent + icon container colors) ──
|
|
55126
|
+
|
|
55127
|
+
function insTheme(type, isDark) {
|
|
55128
|
+
// Light/dark pairs: [accent, iconBg, iconFg]
|
|
55129
|
+
const map = {
|
|
55130
|
+
'revenue-insights': isDark ? ['#10b981', '#064e3b', '#a7f3d0'] : ['#10b981', '#ecfdf5', '#065f46'],
|
|
55131
|
+
'impact-analysis': isDark ? ['#f59e0b', '#78350f', '#fde68a'] : ['#f59e0b', '#fef3c7', '#92400e'],
|
|
55132
|
+
'deviation-analysis': isDark ? ['#3b82f6', '#1e3a8a', '#bfdbfe'] : ['#3b82f6', '#dbeafe', '#1e40af'],
|
|
55133
|
+
'main-drivers': isDark ? ['#8b5cf6', '#4c1d95', '#ddd6fe'] : ['#8b5cf6', '#ede9fe', '#5b21b6'],
|
|
55134
|
+
'key-observations': isDark ? ['#059669', '#064e3b', '#a7f3d0'] : ['#059669', '#f0fdf4', '#14532d'],
|
|
55135
|
+
'recommendations': isDark ? ['#818cf8', '#312e81', '#c7d2fe'] : ['#4f46e5', '#eef2ff', '#4f46e5']
|
|
55136
|
+
};
|
|
55137
|
+
const [accent, iconBg, iconFg] = map[type] || ['#64748b', '#f1f5f9', '#475569'];
|
|
55138
|
+
return {
|
|
55139
|
+
accent,
|
|
55140
|
+
iconBg,
|
|
55141
|
+
iconFg
|
|
55142
|
+
};
|
|
55143
|
+
}
|
|
55144
|
+
|
|
55145
|
+
// ── Shared shell for all six insight cards ──
|
|
55146
|
+
|
|
55147
|
+
function InsightShell(_ref23) {
|
|
55148
|
+
let {
|
|
55149
|
+
type,
|
|
55150
|
+
icon,
|
|
55151
|
+
title,
|
|
55152
|
+
count,
|
|
55153
|
+
isDark,
|
|
55154
|
+
children
|
|
55155
|
+
} = _ref23;
|
|
55156
|
+
const {
|
|
55157
|
+
accent,
|
|
55158
|
+
iconBg,
|
|
55159
|
+
iconFg
|
|
55160
|
+
} = insTheme(type, isDark);
|
|
55161
|
+
const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
|
|
55162
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55163
|
+
style: {
|
|
55164
|
+
background: isDark ? '#1f2937' : '#ffffff',
|
|
55165
|
+
border,
|
|
55166
|
+
borderRadius: 12,
|
|
55167
|
+
overflow: 'hidden',
|
|
55168
|
+
margin: '8px 0',
|
|
55169
|
+
color: isDark ? '#f3f4f6' : '#0f172a'
|
|
55170
|
+
},
|
|
55171
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55172
|
+
style: {
|
|
55173
|
+
height: 4,
|
|
55174
|
+
background: accent
|
|
55175
|
+
}
|
|
55176
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55177
|
+
style: {
|
|
55178
|
+
display: 'flex',
|
|
55179
|
+
alignItems: 'center',
|
|
55180
|
+
justifyContent: 'space-between',
|
|
55181
|
+
gap: 8,
|
|
55182
|
+
padding: '12px 14px 10px',
|
|
55183
|
+
borderBottom: border
|
|
55184
|
+
},
|
|
55185
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55186
|
+
style: {
|
|
55187
|
+
display: 'flex',
|
|
55188
|
+
alignItems: 'center',
|
|
55189
|
+
gap: 8,
|
|
55190
|
+
fontSize: 13,
|
|
55191
|
+
fontWeight: 700
|
|
55192
|
+
},
|
|
55193
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55194
|
+
style: {
|
|
55195
|
+
display: 'inline-flex',
|
|
55196
|
+
alignItems: 'center',
|
|
55197
|
+
justifyContent: 'center',
|
|
55198
|
+
width: 22,
|
|
55199
|
+
height: 22,
|
|
55200
|
+
borderRadius: 6,
|
|
55201
|
+
background: iconBg,
|
|
55202
|
+
color: iconFg
|
|
55203
|
+
},
|
|
55204
|
+
children: icon
|
|
55205
|
+
}), title]
|
|
55206
|
+
}), count != null && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55207
|
+
style: {
|
|
55208
|
+
fontSize: 11,
|
|
55209
|
+
color: isDark ? '#9ca3af' : '#64748b',
|
|
55210
|
+
fontVariantNumeric: 'tabular-nums'
|
|
55211
|
+
},
|
|
55212
|
+
children: count
|
|
55213
|
+
})]
|
|
55214
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55215
|
+
style: {
|
|
55216
|
+
padding: '12px 14px 14px',
|
|
55217
|
+
fontSize: 13,
|
|
55218
|
+
lineHeight: 1.55
|
|
55219
|
+
},
|
|
55220
|
+
children: children
|
|
55221
|
+
})]
|
|
55222
|
+
});
|
|
55223
|
+
}
|
|
55224
|
+
|
|
55225
|
+
// ── Shared mini-pieces (delta tag, metric chips) ──
|
|
55226
|
+
|
|
55227
|
+
function deltaToneInsights(delta) {
|
|
55228
|
+
const s = String(delta || '').trim();
|
|
55229
|
+
if (!s) return 'flat';
|
|
55230
|
+
if (s.startsWith('+')) return 'up';
|
|
55231
|
+
if (s.startsWith('-') || s.startsWith('−')) return 'dn';
|
|
55232
|
+
return 'flat';
|
|
55233
|
+
}
|
|
55234
|
+
function DeltaTag(_ref24) {
|
|
55235
|
+
let {
|
|
55236
|
+
delta,
|
|
55237
|
+
isDark
|
|
55238
|
+
} = _ref24;
|
|
55239
|
+
if (!delta) return null;
|
|
55240
|
+
const tone = deltaToneInsights(delta);
|
|
55241
|
+
const map = isDark ? {
|
|
55242
|
+
up: {
|
|
55243
|
+
bg: '#064e3b',
|
|
55244
|
+
fg: '#a7f3d0'
|
|
55245
|
+
},
|
|
55246
|
+
dn: {
|
|
55247
|
+
bg: '#7f1d1d',
|
|
55248
|
+
fg: '#fecaca'
|
|
55249
|
+
},
|
|
55250
|
+
flat: {
|
|
55251
|
+
bg: '#1f2937',
|
|
55252
|
+
fg: '#9ca3af'
|
|
55253
|
+
}
|
|
55254
|
+
} : {
|
|
55255
|
+
up: {
|
|
55256
|
+
bg: '#dcfce7',
|
|
55257
|
+
fg: '#166534'
|
|
55258
|
+
},
|
|
55259
|
+
dn: {
|
|
55260
|
+
bg: '#fee2e2',
|
|
55261
|
+
fg: '#991b1b'
|
|
55262
|
+
},
|
|
55263
|
+
flat: {
|
|
55264
|
+
bg: '#f1f5f9',
|
|
55265
|
+
fg: '#64748b'
|
|
55266
|
+
}
|
|
55267
|
+
};
|
|
55268
|
+
const t = map[tone];
|
|
55269
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55270
|
+
style: {
|
|
55271
|
+
fontSize: 9,
|
|
55272
|
+
fontWeight: 600,
|
|
55273
|
+
padding: '1px 5px',
|
|
55274
|
+
borderRadius: 3,
|
|
55275
|
+
marginLeft: 4,
|
|
55276
|
+
background: t.bg,
|
|
55277
|
+
color: t.fg
|
|
55278
|
+
},
|
|
55279
|
+
children: delta
|
|
55280
|
+
});
|
|
55281
|
+
}
|
|
55282
|
+
function MetricChipsInsights(_ref25) {
|
|
55283
|
+
let {
|
|
55284
|
+
items,
|
|
55285
|
+
isDark
|
|
55286
|
+
} = _ref25;
|
|
55287
|
+
if (!items || !items.length) return null;
|
|
55288
|
+
const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
|
|
55289
|
+
const labelCol = isDark ? '#9ca3af' : '#64748b';
|
|
55290
|
+
const valCol = isDark ? '#f3f4f6' : '#0f172a';
|
|
55291
|
+
const chipBg = isDark ? '#111827' : '#f8fafc';
|
|
55292
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55293
|
+
style: {
|
|
55294
|
+
display: 'flex',
|
|
55295
|
+
flexWrap: 'wrap',
|
|
55296
|
+
gap: 6,
|
|
55297
|
+
marginTop: 4
|
|
55298
|
+
},
|
|
55299
|
+
children: items.map((m, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
55300
|
+
style: {
|
|
55301
|
+
display: 'inline-flex',
|
|
55302
|
+
alignItems: 'baseline',
|
|
55303
|
+
gap: 4,
|
|
55304
|
+
fontSize: 11,
|
|
55305
|
+
lineHeight: 1,
|
|
55306
|
+
padding: '5px 8px',
|
|
55307
|
+
borderRadius: 6,
|
|
55308
|
+
background: chipBg,
|
|
55309
|
+
border
|
|
55310
|
+
},
|
|
55311
|
+
children: [m.label && /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
55312
|
+
style: {
|
|
55313
|
+
color: labelCol
|
|
55314
|
+
},
|
|
55315
|
+
children: [m.label, ":"]
|
|
55316
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55317
|
+
style: {
|
|
55318
|
+
fontWeight: 700,
|
|
55319
|
+
color: valCol,
|
|
55320
|
+
fontVariantNumeric: 'tabular-nums'
|
|
55321
|
+
},
|
|
55322
|
+
children: m.value
|
|
55323
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx(DeltaTag, {
|
|
55324
|
+
delta: m.delta,
|
|
55325
|
+
isDark: isDark
|
|
55326
|
+
})]
|
|
55327
|
+
}, i))
|
|
55328
|
+
});
|
|
55329
|
+
}
|
|
55330
|
+
|
|
55331
|
+
// ── 1. Revenue Insights ──
|
|
55332
|
+
|
|
55333
|
+
function RevenueInsightsCard(_ref26) {
|
|
55334
|
+
let {
|
|
55335
|
+
spec,
|
|
55336
|
+
isDark
|
|
55337
|
+
} = _ref26;
|
|
55338
|
+
const totals = Array.isArray(spec.totals) ? spec.totals : [];
|
|
55339
|
+
const narrCol = isDark ? '#9ca3af' : '#64748b';
|
|
55340
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
|
|
55341
|
+
type: "revenue-insights",
|
|
55342
|
+
icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconTrendingUp, {}),
|
|
55343
|
+
title: spec.title || 'Revenue insights',
|
|
55344
|
+
count: null,
|
|
55345
|
+
isDark: isDark,
|
|
55346
|
+
children: [spec.headline && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55347
|
+
style: {
|
|
55348
|
+
fontSize: 18,
|
|
55349
|
+
fontWeight: 700,
|
|
55350
|
+
marginBottom: 4
|
|
55351
|
+
},
|
|
55352
|
+
children: spec.headline
|
|
55353
|
+
}), spec.narrative && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55354
|
+
style: {
|
|
55355
|
+
color: narrCol,
|
|
55356
|
+
marginBottom: totals.length ? 8 : 0
|
|
55357
|
+
},
|
|
55358
|
+
children: spec.narrative
|
|
55359
|
+
}), totals.length > 0 && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55360
|
+
style: {
|
|
55361
|
+
display: 'grid',
|
|
55362
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(140px, 1fr))',
|
|
55363
|
+
gap: 8,
|
|
55364
|
+
marginTop: 8
|
|
55365
|
+
},
|
|
55366
|
+
children: totals.map((t, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55367
|
+
style: {
|
|
55368
|
+
background: isDark ? '#111827' : '#f8fafc',
|
|
55369
|
+
border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',
|
|
55370
|
+
borderRadius: 8,
|
|
55371
|
+
padding: '8px 10px'
|
|
55372
|
+
},
|
|
55373
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55374
|
+
style: {
|
|
55375
|
+
fontSize: 11,
|
|
55376
|
+
color: narrCol
|
|
55377
|
+
},
|
|
55378
|
+
children: t.label
|
|
55379
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55380
|
+
style: {
|
|
55381
|
+
fontSize: 16,
|
|
55382
|
+
fontWeight: 700,
|
|
55383
|
+
fontVariantNumeric: 'tabular-nums'
|
|
55384
|
+
},
|
|
55385
|
+
children: [t.value, /*#__PURE__*/jsxRuntimeExports.jsx(DeltaTag, {
|
|
55386
|
+
delta: t.delta,
|
|
55387
|
+
isDark: isDark
|
|
55388
|
+
})]
|
|
55389
|
+
})]
|
|
55390
|
+
}, i))
|
|
55391
|
+
})]
|
|
55392
|
+
});
|
|
55393
|
+
}
|
|
55394
|
+
|
|
55395
|
+
// ── 2. Impact Analysis ──
|
|
55396
|
+
|
|
55397
|
+
function ImpactGroupBlock(_ref27) {
|
|
55398
|
+
let {
|
|
55399
|
+
items,
|
|
55400
|
+
sentiment,
|
|
55401
|
+
isDark
|
|
55402
|
+
} = _ref27;
|
|
55403
|
+
if (!items || items.length === 0) return null;
|
|
55404
|
+
const label = sentiment === 'positive' ? 'Positive impact' : sentiment === 'negative' ? 'Negative impact' : 'Neutral';
|
|
55405
|
+
const subColor = isDark ? '#9ca3af' : '#64748b';
|
|
55406
|
+
const blockStyle = sentiment === 'positive' ? {
|
|
55407
|
+
bg: isDark ? 'rgba(16,185,129,0.10)' : '#f0fdf4',
|
|
55408
|
+
bd: isDark ? 'rgba(52,211,153,0.30)' : '#bbf7d0',
|
|
55409
|
+
tx: isDark ? '#a7f3d0' : '#14532d',
|
|
55410
|
+
dot: isDark ? '#34d399' : '#10b981'
|
|
55411
|
+
} : sentiment === 'negative' ? {
|
|
55412
|
+
bg: isDark ? 'rgba(239,68,68,0.10)' : '#fef2f2',
|
|
55413
|
+
bd: isDark ? 'rgba(248,113,113,0.30)' : '#fecaca',
|
|
55414
|
+
tx: isDark ? '#fecaca' : '#7f1d1d',
|
|
55415
|
+
dot: isDark ? '#f87171' : '#ef4444'
|
|
55416
|
+
} : {
|
|
55417
|
+
bg: isDark ? '#111827' : '#f8fafc',
|
|
55418
|
+
bd: isDark ? '#374151' : '#e2e8f0',
|
|
55419
|
+
tx: isDark ? '#f3f4f6' : '#0f172a',
|
|
55420
|
+
dot: isDark ? '#9ca3af' : '#94a3b8'
|
|
55421
|
+
};
|
|
55422
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55423
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55424
|
+
style: {
|
|
55425
|
+
fontSize: 11,
|
|
55426
|
+
fontWeight: 700,
|
|
55427
|
+
textTransform: 'uppercase',
|
|
55428
|
+
letterSpacing: '0.4px',
|
|
55429
|
+
color: subColor,
|
|
55430
|
+
margin: '10px 0 6px'
|
|
55431
|
+
},
|
|
55432
|
+
children: label
|
|
55433
|
+
}), items.map((it, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55434
|
+
style: {
|
|
55435
|
+
background: blockStyle.bg,
|
|
55436
|
+
border: "1px solid ".concat(blockStyle.bd),
|
|
55437
|
+
borderRadius: 8,
|
|
55438
|
+
padding: '8px 10px',
|
|
55439
|
+
margin: '4px 0',
|
|
55440
|
+
color: blockStyle.tx
|
|
55441
|
+
},
|
|
55442
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55443
|
+
style: {
|
|
55444
|
+
fontWeight: 700,
|
|
55445
|
+
display: 'block',
|
|
55446
|
+
marginBottom: 2
|
|
55447
|
+
},
|
|
55448
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55449
|
+
style: {
|
|
55450
|
+
display: 'inline-block',
|
|
55451
|
+
width: 7,
|
|
55452
|
+
height: 7,
|
|
55453
|
+
borderRadius: '50%',
|
|
55454
|
+
background: blockStyle.dot,
|
|
55455
|
+
marginRight: 6,
|
|
55456
|
+
verticalAlign: 'middle'
|
|
55457
|
+
}
|
|
55458
|
+
}), it.title]
|
|
55459
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55460
|
+
children: it.description
|
|
55461
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx(MetricChipsInsights, {
|
|
55462
|
+
items: it.metrics,
|
|
55463
|
+
isDark: isDark
|
|
55464
|
+
})]
|
|
55465
|
+
}, i))]
|
|
55466
|
+
});
|
|
55467
|
+
}
|
|
55468
|
+
function ImpactAnalysisCard(_ref28) {
|
|
55469
|
+
let {
|
|
55470
|
+
spec,
|
|
55471
|
+
isDark
|
|
55472
|
+
} = _ref28;
|
|
55473
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
|
|
55474
|
+
type: "impact-analysis",
|
|
55475
|
+
icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconScale, {}),
|
|
55476
|
+
title: spec.title || 'Impact analysis',
|
|
55477
|
+
count: null,
|
|
55478
|
+
isDark: isDark,
|
|
55479
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx(ImpactGroupBlock, {
|
|
55480
|
+
items: spec.positive,
|
|
55481
|
+
sentiment: "positive",
|
|
55482
|
+
isDark: isDark
|
|
55483
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx(ImpactGroupBlock, {
|
|
55484
|
+
items: spec.negative,
|
|
55485
|
+
sentiment: "negative",
|
|
55486
|
+
isDark: isDark
|
|
55487
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx(ImpactGroupBlock, {
|
|
55488
|
+
items: spec.neutral,
|
|
55489
|
+
sentiment: "neutral",
|
|
55490
|
+
isDark: isDark
|
|
55491
|
+
})]
|
|
55492
|
+
});
|
|
55493
|
+
}
|
|
55494
|
+
|
|
55495
|
+
// ── 3. Deviation Analysis ──
|
|
55496
|
+
|
|
55497
|
+
function DeviationAnalysisCard(_ref29) {
|
|
55498
|
+
let {
|
|
55499
|
+
spec,
|
|
55500
|
+
isDark
|
|
55501
|
+
} = _ref29;
|
|
55502
|
+
const rows = Array.isArray(spec.deviations) ? spec.deviations : [];
|
|
55503
|
+
const border = isDark ? '1px solid #374151' : '1px solid #e5e7eb';
|
|
55504
|
+
const headColor = isDark ? '#9ca3af' : '#64748b';
|
|
55505
|
+
const cellColor = isDark ? '#f3f4f6' : '#0f172a';
|
|
55506
|
+
const deltaColor = tone => {
|
|
55507
|
+
if (tone === 'up') return isDark ? '#34d399' : '#15803d';
|
|
55508
|
+
if (tone === 'dn') return isDark ? '#f87171' : '#b91c1c';
|
|
55509
|
+
return isDark ? '#9ca3af' : '#64748b';
|
|
55510
|
+
};
|
|
55511
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
|
|
55512
|
+
type: "deviation-analysis",
|
|
55513
|
+
icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconGitCompare, {}),
|
|
55514
|
+
title: spec.title || 'Deviation analysis',
|
|
55515
|
+
count: null,
|
|
55516
|
+
isDark: isDark,
|
|
55517
|
+
children: [rows.length === 0 ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55518
|
+
style: {
|
|
55519
|
+
color: headColor,
|
|
55520
|
+
fontSize: 12,
|
|
55521
|
+
padding: '14px 0',
|
|
55522
|
+
textAlign: 'center'
|
|
55523
|
+
},
|
|
55524
|
+
children: "No deviations"
|
|
55525
|
+
}) : /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55526
|
+
style: {
|
|
55527
|
+
overflowX: 'auto'
|
|
55528
|
+
},
|
|
55529
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsxs("table", {
|
|
55530
|
+
style: {
|
|
55531
|
+
width: '100%',
|
|
55532
|
+
borderCollapse: 'collapse',
|
|
55533
|
+
fontSize: 12
|
|
55534
|
+
},
|
|
55535
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("thead", {
|
|
55536
|
+
children: /*#__PURE__*/jsxRuntimeExports.jsx("tr", {
|
|
55537
|
+
children: ['Segment', 'Metric', 'Expected', 'Actual', 'Delta'].map(h => /*#__PURE__*/jsxRuntimeExports.jsx("th", {
|
|
55538
|
+
style: {
|
|
55539
|
+
padding: '7px 10px',
|
|
55540
|
+
borderBottom: border,
|
|
55541
|
+
textAlign: 'left',
|
|
55542
|
+
fontSize: 11,
|
|
55543
|
+
color: headColor,
|
|
55544
|
+
fontWeight: 600,
|
|
55545
|
+
textTransform: 'uppercase',
|
|
55546
|
+
letterSpacing: '0.3px'
|
|
55547
|
+
},
|
|
55548
|
+
children: h
|
|
55549
|
+
}, h))
|
|
55550
|
+
})
|
|
55551
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("tbody", {
|
|
55552
|
+
children: rows.map((r, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("tr", {
|
|
55553
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("td", {
|
|
55554
|
+
style: {
|
|
55555
|
+
padding: '7px 10px',
|
|
55556
|
+
borderBottom: border,
|
|
55557
|
+
color: cellColor
|
|
55558
|
+
},
|
|
55559
|
+
children: r.segment
|
|
55560
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
|
|
55561
|
+
style: {
|
|
55562
|
+
padding: '7px 10px',
|
|
55563
|
+
borderBottom: border,
|
|
55564
|
+
color: cellColor
|
|
55565
|
+
},
|
|
55566
|
+
children: r.metric
|
|
55567
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
|
|
55568
|
+
style: {
|
|
55569
|
+
padding: '7px 10px',
|
|
55570
|
+
borderBottom: border,
|
|
55571
|
+
color: cellColor,
|
|
55572
|
+
fontVariantNumeric: 'tabular-nums'
|
|
55573
|
+
},
|
|
55574
|
+
children: r.expected
|
|
55575
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
|
|
55576
|
+
style: {
|
|
55577
|
+
padding: '7px 10px',
|
|
55578
|
+
borderBottom: border,
|
|
55579
|
+
color: cellColor,
|
|
55580
|
+
fontVariantNumeric: 'tabular-nums'
|
|
55581
|
+
},
|
|
55582
|
+
children: r.actual
|
|
55583
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("td", {
|
|
55584
|
+
style: {
|
|
55585
|
+
padding: '7px 10px',
|
|
55586
|
+
borderBottom: border,
|
|
55587
|
+
color: deltaColor(r.tone),
|
|
55588
|
+
fontWeight: 700,
|
|
55589
|
+
fontVariantNumeric: 'tabular-nums'
|
|
55590
|
+
},
|
|
55591
|
+
children: r.delta
|
|
55592
|
+
})]
|
|
55593
|
+
}, i))
|
|
55594
|
+
})]
|
|
55595
|
+
})
|
|
55596
|
+
}), spec.summary && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55597
|
+
style: {
|
|
55598
|
+
background: isDark ? '#111827' : '#f8fafc',
|
|
55599
|
+
border,
|
|
55600
|
+
borderRadius: 6,
|
|
55601
|
+
padding: '8px 10px',
|
|
55602
|
+
marginTop: 10,
|
|
55603
|
+
fontSize: 12,
|
|
55604
|
+
color: cellColor
|
|
55605
|
+
},
|
|
55606
|
+
children: spec.summary
|
|
55607
|
+
})]
|
|
55608
|
+
});
|
|
55609
|
+
}
|
|
55610
|
+
|
|
55611
|
+
// ── 4. Main Drivers ──
|
|
55612
|
+
|
|
55613
|
+
function MainDriversCard(_ref30) {
|
|
55614
|
+
let {
|
|
55615
|
+
spec,
|
|
55616
|
+
isDark
|
|
55617
|
+
} = _ref30;
|
|
55618
|
+
const sec = Array.isArray(spec.secondary) ? spec.secondary : [];
|
|
55619
|
+
const evidenceColor = isDark ? '#9ca3af' : '#64748b';
|
|
55620
|
+
const subColor = isDark ? '#9ca3af' : '#64748b';
|
|
55621
|
+
const primary = spec.primary;
|
|
55622
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs(InsightShell, {
|
|
55623
|
+
type: "main-drivers",
|
|
55624
|
+
icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconZap, {}),
|
|
55625
|
+
title: spec.title || 'Main drivers',
|
|
55626
|
+
count: null,
|
|
55627
|
+
isDark: isDark,
|
|
55628
|
+
children: [primary && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55629
|
+
style: {
|
|
55630
|
+
background: isDark ? 'rgba(139,92,246,0.10)' : '#faf5ff',
|
|
55631
|
+
border: isDark ? '1px solid rgba(167,139,250,0.30)' : '1px solid #d8b4fe',
|
|
55632
|
+
borderRadius: 8,
|
|
55633
|
+
padding: '10px 12px',
|
|
55634
|
+
marginBottom: sec.length ? 10 : 0
|
|
55635
|
+
},
|
|
55636
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55637
|
+
style: {
|
|
55638
|
+
fontSize: 10,
|
|
55639
|
+
fontWeight: 700,
|
|
55640
|
+
textTransform: 'uppercase',
|
|
55641
|
+
letterSpacing: '0.4px',
|
|
55642
|
+
color: isDark ? '#c4b5fd' : '#7c3aed',
|
|
55643
|
+
marginBottom: 4
|
|
55644
|
+
},
|
|
55645
|
+
children: "Primary driver"
|
|
55646
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55647
|
+
style: {
|
|
55648
|
+
fontWeight: 600
|
|
55649
|
+
},
|
|
55650
|
+
children: primary.factor
|
|
55651
|
+
}), primary.evidence && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55652
|
+
style: {
|
|
55653
|
+
color: evidenceColor,
|
|
55654
|
+
fontSize: 12,
|
|
55655
|
+
marginTop: 4
|
|
55656
|
+
},
|
|
55657
|
+
children: primary.evidence
|
|
55658
|
+
}), primary.metric && /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
55659
|
+
style: {
|
|
55660
|
+
display: 'inline-block',
|
|
55661
|
+
marginTop: 6,
|
|
55662
|
+
background: isDark ? 'rgba(139,92,246,0.20)' : '#ede9fe',
|
|
55663
|
+
color: isDark ? '#ddd6fe' : '#5b21b6',
|
|
55664
|
+
fontSize: 11,
|
|
55665
|
+
fontWeight: 600,
|
|
55666
|
+
padding: '2px 7px',
|
|
55667
|
+
borderRadius: 6
|
|
55668
|
+
},
|
|
55669
|
+
children: [primary.metric.label, ": ", primary.metric.value]
|
|
55670
|
+
})]
|
|
55671
|
+
}), sec.length > 0 && /*#__PURE__*/jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, {
|
|
55672
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55673
|
+
style: {
|
|
55674
|
+
fontSize: 11,
|
|
55675
|
+
fontWeight: 700,
|
|
55676
|
+
textTransform: 'uppercase',
|
|
55677
|
+
letterSpacing: '0.4px',
|
|
55678
|
+
color: subColor,
|
|
55679
|
+
margin: '10px 0 6px'
|
|
55680
|
+
},
|
|
55681
|
+
children: "Secondary drivers"
|
|
55682
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("ul", {
|
|
55683
|
+
style: {
|
|
55684
|
+
paddingLeft: 20,
|
|
55685
|
+
margin: 0
|
|
55686
|
+
},
|
|
55687
|
+
children: sec.map((s, i) => /*#__PURE__*/jsxRuntimeExports.jsxs("li", {
|
|
55688
|
+
style: {
|
|
55689
|
+
marginBottom: 6
|
|
55690
|
+
},
|
|
55691
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55692
|
+
style: {
|
|
55693
|
+
fontWeight: 600
|
|
55694
|
+
},
|
|
55695
|
+
children: s.factor
|
|
55696
|
+
}), s.evidence && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55697
|
+
style: {
|
|
55698
|
+
color: evidenceColor,
|
|
55699
|
+
fontSize: 12,
|
|
55700
|
+
marginTop: 2
|
|
55701
|
+
},
|
|
55702
|
+
children: s.evidence
|
|
55703
|
+
})]
|
|
55704
|
+
}, i))
|
|
55705
|
+
})]
|
|
55706
|
+
})]
|
|
55707
|
+
});
|
|
55708
|
+
}
|
|
55709
|
+
|
|
55710
|
+
// ── Shared item-row for Observations & Recommendations ──
|
|
55711
|
+
|
|
55712
|
+
function InsightItem(_ref31) {
|
|
55713
|
+
let {
|
|
55714
|
+
rankBgFg,
|
|
55715
|
+
rank,
|
|
55716
|
+
chips,
|
|
55717
|
+
text,
|
|
55718
|
+
narrative,
|
|
55719
|
+
metrics,
|
|
55720
|
+
impactPill,
|
|
55721
|
+
isDark
|
|
55722
|
+
} = _ref31;
|
|
55723
|
+
const narrCol = isDark ? '#9ca3af' : '#64748b';
|
|
55724
|
+
const dashedBorder = isDark ? '1px dashed #374151' : '1px dashed #e5e7eb';
|
|
55725
|
+
return /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55726
|
+
style: {
|
|
55727
|
+
display: 'flex',
|
|
55728
|
+
gap: 10,
|
|
55729
|
+
alignItems: 'flex-start',
|
|
55730
|
+
padding: '10px 0',
|
|
55731
|
+
borderBottom: dashedBorder
|
|
55732
|
+
},
|
|
55733
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55734
|
+
style: {
|
|
55735
|
+
flex: '0 0 22px',
|
|
55736
|
+
height: 22,
|
|
55737
|
+
width: 22,
|
|
55738
|
+
borderRadius: '50%',
|
|
55739
|
+
fontSize: 11,
|
|
55740
|
+
fontWeight: 700,
|
|
55741
|
+
display: 'flex',
|
|
55742
|
+
alignItems: 'center',
|
|
55743
|
+
justifyContent: 'center',
|
|
55744
|
+
fontVariantNumeric: 'tabular-nums',
|
|
55745
|
+
background: rankBgFg.bg,
|
|
55746
|
+
color: rankBgFg.fg
|
|
55747
|
+
},
|
|
55748
|
+
children: rank
|
|
55749
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
55750
|
+
style: {
|
|
55751
|
+
flex: '1 1 auto',
|
|
55752
|
+
minWidth: 0,
|
|
55753
|
+
display: 'flex',
|
|
55754
|
+
flexDirection: 'column',
|
|
55755
|
+
gap: 5
|
|
55756
|
+
},
|
|
55757
|
+
children: [chips, text && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55758
|
+
style: {
|
|
55759
|
+
fontSize: 13,
|
|
55760
|
+
fontWeight: 600
|
|
55761
|
+
},
|
|
55762
|
+
children: text
|
|
55763
|
+
}), narrative && /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55764
|
+
style: {
|
|
55765
|
+
fontSize: 12,
|
|
55766
|
+
color: narrCol
|
|
55767
|
+
},
|
|
55768
|
+
children: narrative
|
|
55769
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx(MetricChipsInsights, {
|
|
55770
|
+
items: metrics,
|
|
55771
|
+
isDark: isDark
|
|
55772
|
+
}), impactPill]
|
|
55773
|
+
})]
|
|
55774
|
+
});
|
|
55775
|
+
}
|
|
55776
|
+
|
|
55777
|
+
// ── 5. Key Observations ──
|
|
55778
|
+
|
|
55779
|
+
function KeyObservationsCard(_ref32) {
|
|
55780
|
+
let {
|
|
55781
|
+
spec,
|
|
55782
|
+
isDark
|
|
55783
|
+
} = _ref32;
|
|
55784
|
+
const items = Array.isArray(spec.items) ? [...spec.items].sort((a, b) => (a.rank || 0) - (b.rank || 0)) : [];
|
|
55785
|
+
const rankBgFg = isDark ? {
|
|
55786
|
+
bg: '#064e3b',
|
|
55787
|
+
fg: '#a7f3d0'
|
|
55788
|
+
} : {
|
|
55789
|
+
bg: '#f0fdf4',
|
|
55790
|
+
fg: '#14532d'
|
|
55791
|
+
};
|
|
55792
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(InsightShell, {
|
|
55793
|
+
type: "key-observations",
|
|
55794
|
+
icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconLightbulb, {}),
|
|
55795
|
+
title: spec.title || 'Key observations',
|
|
55796
|
+
count: items.length ? "".concat(items.length, " item").concat(items.length === 1 ? '' : 's') : null,
|
|
55797
|
+
isDark: isDark,
|
|
55798
|
+
children: items.length === 0 ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55799
|
+
style: {
|
|
55800
|
+
color: isDark ? '#9ca3af' : '#64748b',
|
|
55801
|
+
fontSize: 12,
|
|
55802
|
+
padding: '14px 0',
|
|
55803
|
+
textAlign: 'center'
|
|
55804
|
+
},
|
|
55805
|
+
children: "No observations available."
|
|
55806
|
+
}) : items.map((k, i) => {
|
|
55807
|
+
const chips = [];
|
|
55808
|
+
if (k.category) chips.push(/*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55809
|
+
style: chipStyle('cat', isDark),
|
|
55810
|
+
children: k.category
|
|
55811
|
+
}, "cat"));
|
|
55812
|
+
if (k.priority) chips.push(/*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55813
|
+
style: chipStyle('prio-' + k.priority, isDark),
|
|
55814
|
+
children: k.priority
|
|
55815
|
+
}, "prio"));
|
|
55816
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(InsightItem, {
|
|
55817
|
+
rankBgFg: rankBgFg,
|
|
55818
|
+
rank: k.rank || i + 1,
|
|
55819
|
+
chips: chips.length ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55820
|
+
style: {
|
|
55821
|
+
display: 'flex',
|
|
55822
|
+
flexWrap: 'wrap',
|
|
55823
|
+
gap: 5
|
|
55824
|
+
},
|
|
55825
|
+
children: chips
|
|
55826
|
+
}) : null,
|
|
55827
|
+
text: k.text,
|
|
55828
|
+
narrative: k.narrative,
|
|
55829
|
+
metrics: k.metrics,
|
|
55830
|
+
impactPill: null,
|
|
55831
|
+
isDark: isDark
|
|
55832
|
+
}, i);
|
|
55833
|
+
})
|
|
55834
|
+
});
|
|
55835
|
+
}
|
|
55836
|
+
|
|
55837
|
+
// ── 6. Recommendations ──
|
|
55838
|
+
|
|
55839
|
+
function RecommendationsCard(_ref33) {
|
|
55840
|
+
let {
|
|
55841
|
+
spec,
|
|
55842
|
+
isDark
|
|
55843
|
+
} = _ref33;
|
|
55844
|
+
const items = Array.isArray(spec.items) ? [...spec.items].sort((a, b) => (a.rank || 0) - (b.rank || 0)) : [];
|
|
55845
|
+
const rankBgFg = isDark ? {
|
|
55846
|
+
bg: '#312e81',
|
|
55847
|
+
fg: '#c7d2fe'
|
|
55848
|
+
} : {
|
|
55849
|
+
bg: '#4f46e5',
|
|
55850
|
+
fg: '#ffffff'
|
|
55851
|
+
};
|
|
55852
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(InsightShell, {
|
|
55853
|
+
type: "recommendations",
|
|
55854
|
+
icon: /*#__PURE__*/jsxRuntimeExports.jsx(IconTarget, {}),
|
|
55855
|
+
title: spec.title || 'Recommendations',
|
|
55856
|
+
count: items.length ? "".concat(items.length, " item").concat(items.length === 1 ? '' : 's') : null,
|
|
55857
|
+
isDark: isDark,
|
|
55858
|
+
children: items.length === 0 ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55859
|
+
style: {
|
|
55860
|
+
color: isDark ? '#9ca3af' : '#64748b',
|
|
55861
|
+
fontSize: 12,
|
|
55862
|
+
padding: '14px 0',
|
|
55863
|
+
textAlign: 'center'
|
|
55864
|
+
},
|
|
55865
|
+
children: "No recommendations available."
|
|
55866
|
+
}) : items.map((r, i) => {
|
|
55867
|
+
const segChips = (r.affected_segments || []).map((s, j) => /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
55868
|
+
style: chipStyle('seg', isDark),
|
|
55869
|
+
children: s
|
|
55870
|
+
}, j));
|
|
55871
|
+
const impactPill = r.expected_impact ? /*#__PURE__*/jsxRuntimeExports.jsxs("span", {
|
|
55872
|
+
style: {
|
|
55873
|
+
alignSelf: 'flex-start',
|
|
55874
|
+
display: 'inline-flex',
|
|
55875
|
+
alignItems: 'center',
|
|
55876
|
+
gap: 4,
|
|
55877
|
+
marginTop: 2,
|
|
55878
|
+
background: isDark ? 'rgba(16,185,129,0.18)' : '#dcfce7',
|
|
55879
|
+
color: isDark ? '#a7f3d0' : '#166534',
|
|
55880
|
+
fontSize: 10,
|
|
55881
|
+
fontWeight: 700,
|
|
55882
|
+
padding: '4px 9px',
|
|
55883
|
+
borderRadius: 999,
|
|
55884
|
+
border: isDark ? '1px solid rgba(52,211,153,0.30)' : '1px solid #bbf7d0'
|
|
55885
|
+
},
|
|
55886
|
+
children: ["\u2191 ", r.expected_impact]
|
|
55887
|
+
}) : null;
|
|
55888
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(InsightItem, {
|
|
55889
|
+
rankBgFg: rankBgFg,
|
|
55890
|
+
rank: r.rank || i + 1,
|
|
55891
|
+
chips: segChips.length ? /*#__PURE__*/jsxRuntimeExports.jsx("div", {
|
|
55892
|
+
style: {
|
|
55893
|
+
display: 'flex',
|
|
55894
|
+
flexWrap: 'wrap',
|
|
55895
|
+
gap: 5
|
|
55896
|
+
},
|
|
55897
|
+
children: segChips
|
|
55898
|
+
}) : null,
|
|
55899
|
+
text: r.action,
|
|
55900
|
+
narrative: r.rationale,
|
|
55901
|
+
metrics: r.metrics,
|
|
55902
|
+
impactPill: impactPill,
|
|
55903
|
+
isDark: isDark
|
|
55904
|
+
}, i);
|
|
55905
|
+
})
|
|
55906
|
+
});
|
|
55907
|
+
}
|
|
55908
|
+
|
|
55909
|
+
// ── Chip styling shared between observations + recommendations ──
|
|
55910
|
+
|
|
55911
|
+
function chipStyle(kind, isDark) {
|
|
55912
|
+
const base = {
|
|
55913
|
+
display: 'inline-flex',
|
|
55914
|
+
alignItems: 'center',
|
|
55915
|
+
fontSize: 10,
|
|
55916
|
+
fontWeight: 600,
|
|
55917
|
+
lineHeight: 1,
|
|
55918
|
+
padding: '3px 7px',
|
|
55919
|
+
borderRadius: 999,
|
|
55920
|
+
border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',
|
|
55921
|
+
background: isDark ? '#111827' : '#f8fafc',
|
|
55922
|
+
color: isDark ? '#9ca3af' : '#64748b'
|
|
55923
|
+
};
|
|
55924
|
+
if (kind === 'cat') return _objectSpread2(_objectSpread2({}, base), {}, {
|
|
55925
|
+
background: isDark ? 'rgba(99,102,241,0.20)' : '#eef2ff',
|
|
55926
|
+
color: isDark ? '#c7d2fe' : '#4f46e5',
|
|
55927
|
+
border: '1px solid transparent'
|
|
55928
|
+
});
|
|
55929
|
+
if (kind === 'seg') return _objectSpread2(_objectSpread2({}, base), {}, {
|
|
55930
|
+
background: isDark ? '#1f2937' : '#f1f5f9',
|
|
55931
|
+
color: isDark ? '#f3f4f6' : '#0f172a'
|
|
55932
|
+
});
|
|
55933
|
+
if (kind === 'prio-high') return _objectSpread2(_objectSpread2({}, base), {}, {
|
|
55934
|
+
background: isDark ? 'rgba(239,68,68,0.18)' : '#fef2f2',
|
|
55935
|
+
color: isDark ? '#fecaca' : '#7f1d1d',
|
|
55936
|
+
border: isDark ? '1px solid rgba(248,113,113,0.30)' : '1px solid #fecaca'
|
|
55937
|
+
});
|
|
55938
|
+
if (kind === 'prio-medium') return _objectSpread2(_objectSpread2({}, base), {}, {
|
|
55939
|
+
background: isDark ? 'rgba(99,102,241,0.20)' : '#eef2ff',
|
|
55940
|
+
color: isDark ? '#c7d2fe' : '#4f46e5',
|
|
55941
|
+
border: '1px solid transparent'
|
|
55942
|
+
});
|
|
55943
|
+
if (kind === 'prio-low') return base;
|
|
55944
|
+
return base;
|
|
55945
|
+
}
|
|
55946
|
+
|
|
54180
55947
|
const _excluded$1 = ["node", "children"],
|
|
54181
55948
|
_excluded2 = ["node", "children"],
|
|
54182
55949
|
_excluded3 = ["node", "children"],
|
|
@@ -54190,6 +55957,19 @@
|
|
|
54190
55957
|
_excluded1 = ["node", "children"],
|
|
54191
55958
|
_excluded10 = ["node", "children"],
|
|
54192
55959
|
_excluded11 = ["className", "children"];
|
|
55960
|
+
const A2UI_FENCE_LANGS = new Set(["eshal-ui", "eshal-chart", "chart"]);
|
|
55961
|
+
|
|
55962
|
+
// Pull a clean text payload out of ReactMarkdown's `children` prop — it's
|
|
55963
|
+
// usually a string for fenced code blocks but can be an array of nodes when
|
|
55964
|
+
// remark plugins pre-tokenise. Defensive coercion: anything non-string is
|
|
55965
|
+
// dropped so JSON.parse never sees React elements.
|
|
55966
|
+
function extractFenceText(children) {
|
|
55967
|
+
if (typeof children === "string") return children;
|
|
55968
|
+
if (Array.isArray(children)) {
|
|
55969
|
+
return children.map(c => typeof c === "string" ? c : "").join("");
|
|
55970
|
+
}
|
|
55971
|
+
return "";
|
|
55972
|
+
}
|
|
54193
55973
|
const StreamingMarkdown = _ref => {
|
|
54194
55974
|
let {
|
|
54195
55975
|
content,
|
|
@@ -54557,11 +56337,34 @@
|
|
|
54557
56337
|
children
|
|
54558
56338
|
} = _ref12,
|
|
54559
56339
|
props = _objectWithoutProperties$1(_ref12, _excluded11);
|
|
54560
|
-
const match = /language-(\w+)/.exec(className || "");
|
|
56340
|
+
const match = /language-([\w-]+)/.exec(className || "");
|
|
56341
|
+
const lang = match ? match[1] : null;
|
|
56342
|
+
|
|
56343
|
+
// A2UI fence — render the JSON payload as a real visual block
|
|
56344
|
+
// (bar / line / pie chart / table / alert / KPI / card / button-
|
|
56345
|
+
// group). Falls through to the normal code-block rendering if
|
|
56346
|
+
// the JSON doesn't parse or the type is unrecognised — never
|
|
56347
|
+
// crashes the chat surface on a malformed fence. This is the
|
|
56348
|
+
// 12-06-2026 fix for the "graph responses show as raw JSON in
|
|
56349
|
+
// the embedded widget" bug.
|
|
56350
|
+
if (lang && A2UI_FENCE_LANGS.has(lang)) {
|
|
56351
|
+
const raw = extractFenceText(children).trim();
|
|
56352
|
+
try {
|
|
56353
|
+
const parsed = JSON.parse(raw);
|
|
56354
|
+
if (parsed && typeof parsed === "object") {
|
|
56355
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(A2uiBlock, {
|
|
56356
|
+
spec: parsed,
|
|
56357
|
+
isDark: isDark
|
|
56358
|
+
});
|
|
56359
|
+
}
|
|
56360
|
+
} catch (e) {
|
|
56361
|
+
// fall through to default code-block rendering
|
|
56362
|
+
}
|
|
56363
|
+
}
|
|
54561
56364
|
if (match) {
|
|
54562
56365
|
return /*#__PURE__*/jsxRuntimeExports.jsx(SyntaxHighlighter, _objectSpread2(_objectSpread2({
|
|
54563
56366
|
style: oneDark,
|
|
54564
|
-
language:
|
|
56367
|
+
language: lang,
|
|
54565
56368
|
PreTag: "div",
|
|
54566
56369
|
wrapLines: true
|
|
54567
56370
|
}, props), {}, {
|
|
@@ -54902,13 +56705,62 @@
|
|
|
54902
56705
|
return (_message$feedback = message === null || message === void 0 ? void 0 : message.feedback) !== null && _message$feedback !== void 0 ? _message$feedback : null;
|
|
54903
56706
|
}); // 'like' | 'dislike' | null
|
|
54904
56707
|
|
|
56708
|
+
// Thumbs-down opens an optional free-text "what went wrong?" form before
|
|
56709
|
+
// the feedback is submitted — mirroring the in-app preview widget
|
|
56710
|
+
// (packages/frontend/.../preview-section/AssistantMessage.tsx). Previously
|
|
56711
|
+
// the installed widget POSTed the dislike immediately with no comment box,
|
|
56712
|
+
// so users got no chance to explain and no visible confirmation.
|
|
56713
|
+
const [showFeedbackForm, setShowFeedbackForm] = reactExports.useState(false);
|
|
56714
|
+
const [pendingFeedback, setPendingFeedback] = reactExports.useState(null); // 'dislike' | null
|
|
56715
|
+
const [feedbackText, setFeedbackText] = reactExports.useState("");
|
|
56716
|
+
const feedbackInputRef = reactExports.useRef(null);
|
|
54905
56717
|
const handleFeedbackClick = reactExports.useCallback(type => {
|
|
54906
|
-
|
|
54907
|
-
|
|
54908
|
-
|
|
54909
|
-
|
|
56718
|
+
if (!onFeedback || !displayContent) return;
|
|
56719
|
+
|
|
56720
|
+
// Clicking the active rating again toggles it off.
|
|
56721
|
+
if (activeFeedback === type) {
|
|
56722
|
+
setActiveFeedback(null);
|
|
56723
|
+
setShowFeedbackForm(false);
|
|
56724
|
+
setPendingFeedback(null);
|
|
56725
|
+
setFeedbackText("");
|
|
56726
|
+
onFeedback(displayContent, null);
|
|
56727
|
+
return;
|
|
56728
|
+
}
|
|
56729
|
+
|
|
56730
|
+
// Thumbs UP submits immediately — a one-click positive signal shouldn't
|
|
56731
|
+
// be gated behind a form.
|
|
56732
|
+
if (type === "like") {
|
|
56733
|
+
setActiveFeedback("like");
|
|
56734
|
+
setShowFeedbackForm(false);
|
|
56735
|
+
setPendingFeedback(null);
|
|
56736
|
+
setFeedbackText("");
|
|
56737
|
+
onFeedback(displayContent, "like");
|
|
56738
|
+
return;
|
|
54910
56739
|
}
|
|
56740
|
+
|
|
56741
|
+
// Thumbs DOWN opens the optional-reason form; submit posts the feedback
|
|
56742
|
+
// (with or without text), cancel discards it.
|
|
56743
|
+
setPendingFeedback("dislike");
|
|
56744
|
+
setShowFeedbackForm(true);
|
|
56745
|
+
setFeedbackText("");
|
|
56746
|
+
setTimeout(() => {
|
|
56747
|
+
var _feedbackInputRef$cur;
|
|
56748
|
+
return (_feedbackInputRef$cur = feedbackInputRef.current) === null || _feedbackInputRef$cur === void 0 ? void 0 : _feedbackInputRef$cur.focus();
|
|
56749
|
+
}, 100);
|
|
54911
56750
|
}, [activeFeedback, onFeedback, displayContent]);
|
|
56751
|
+
const handleFeedbackSubmit = reactExports.useCallback(() => {
|
|
56752
|
+
if (!onFeedback || !displayContent || !pendingFeedback) return;
|
|
56753
|
+
setActiveFeedback(pendingFeedback);
|
|
56754
|
+
onFeedback(displayContent, pendingFeedback, feedbackText.trim() || undefined);
|
|
56755
|
+
setShowFeedbackForm(false);
|
|
56756
|
+
setFeedbackText("");
|
|
56757
|
+
setPendingFeedback(null);
|
|
56758
|
+
}, [onFeedback, displayContent, pendingFeedback, feedbackText]);
|
|
56759
|
+
const handleFeedbackCancel = reactExports.useCallback(() => {
|
|
56760
|
+
setShowFeedbackForm(false);
|
|
56761
|
+
setFeedbackText("");
|
|
56762
|
+
setPendingFeedback(null);
|
|
56763
|
+
}, []);
|
|
54912
56764
|
const bubbleColor = agentMessageBubbleColor !== undefined && agentMessageBubbleColor !== null ? agentMessageBubbleColor : isDark ? "#1f2937" : "#FFFFFF";
|
|
54913
56765
|
const messageTextColor = assistantTextColor !== undefined && assistantTextColor !== null ? assistantTextColor : textColor !== undefined && textColor !== null ? textColor : isDark ? "#f3f4f6" : "#1A1A1A";
|
|
54914
56766
|
const messageFontFamily = agentMessageBubbleFontFamily !== undefined && agentMessageBubbleFontFamily !== null ? agentMessageBubbleFontFamily : fontFamily !== undefined && fontFamily !== null ? fontFamily : "Inter";
|
|
@@ -55039,7 +56891,7 @@
|
|
|
55039
56891
|
children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
55040
56892
|
type: "button",
|
|
55041
56893
|
onClick: () => handleFeedbackClick('like'),
|
|
55042
|
-
className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'like' ? 'text-green-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
|
|
56894
|
+
className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'like' || pendingFeedback === 'like' ? 'text-green-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
|
|
55043
56895
|
style: {
|
|
55044
56896
|
border: "none",
|
|
55045
56897
|
background: "transparent",
|
|
@@ -55054,7 +56906,7 @@
|
|
|
55054
56906
|
}), /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
55055
56907
|
type: "button",
|
|
55056
56908
|
onClick: () => handleFeedbackClick('dislike'),
|
|
55057
|
-
className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'dislike' ? 'text-red-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
|
|
56909
|
+
className: "p-0.5 rounded transition-colors ".concat(activeFeedback === 'dislike' || pendingFeedback === 'dislike' ? 'text-red-500' : isDark ? 'text-gray-500 hover:text-gray-300' : 'text-gray-400 hover:text-gray-600'),
|
|
55058
56910
|
style: {
|
|
55059
56911
|
border: "none",
|
|
55060
56912
|
background: "transparent",
|
|
@@ -55068,6 +56920,55 @@
|
|
|
55068
56920
|
})
|
|
55069
56921
|
})]
|
|
55070
56922
|
})]
|
|
56923
|
+
}), showFeedbackForm && pendingFeedback === 'dislike' && /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
56924
|
+
className: "mt-2 w-full rounded-xl border p-3 shadow ".concat(isDark ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
|
|
56925
|
+
style: {
|
|
56926
|
+
direction: isRtl ? "rtl" : "ltr"
|
|
56927
|
+
},
|
|
56928
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("textarea", {
|
|
56929
|
+
ref: feedbackInputRef,
|
|
56930
|
+
value: feedbackText,
|
|
56931
|
+
onChange: e => setFeedbackText(e.target.value),
|
|
56932
|
+
onKeyDown: e => {
|
|
56933
|
+
if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
|
|
56934
|
+
e.preventDefault();
|
|
56935
|
+
handleFeedbackSubmit();
|
|
56936
|
+
} else if (e.key === "Escape") {
|
|
56937
|
+
e.preventDefault();
|
|
56938
|
+
handleFeedbackCancel();
|
|
56939
|
+
}
|
|
56940
|
+
},
|
|
56941
|
+
placeholder: "What went wrong? (optional)",
|
|
56942
|
+
rows: 2,
|
|
56943
|
+
className: "w-full resize-none rounded-lg border px-2 py-1.5 text-xs focus:outline-none focus:ring-1 ".concat(isDark ? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500 focus:ring-gray-600" : "bg-white border-gray-200 text-gray-900 placeholder-gray-400 focus:ring-gray-300"),
|
|
56944
|
+
style: {
|
|
56945
|
+
fontFamily: messageFontFamily,
|
|
56946
|
+
textAlign: isRtl ? "right" : "left"
|
|
56947
|
+
}
|
|
56948
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsxs("div", {
|
|
56949
|
+
className: "flex items-center justify-end gap-1.5 mt-1.5",
|
|
56950
|
+
children: [/*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
56951
|
+
type: "button",
|
|
56952
|
+
onClick: handleFeedbackCancel,
|
|
56953
|
+
className: "text-xs px-2 py-1 rounded transition-colors ".concat(isDark ? "text-gray-400 hover:text-gray-200" : "text-gray-500 hover:text-gray-700"),
|
|
56954
|
+
style: {
|
|
56955
|
+
border: "none",
|
|
56956
|
+
background: "transparent",
|
|
56957
|
+
cursor: "pointer"
|
|
56958
|
+
},
|
|
56959
|
+
children: "Cancel"
|
|
56960
|
+
}), /*#__PURE__*/jsxRuntimeExports.jsx("button", {
|
|
56961
|
+
type: "button",
|
|
56962
|
+
onClick: handleFeedbackSubmit,
|
|
56963
|
+
className: "text-xs px-2.5 py-1 rounded text-white transition-opacity hover:opacity-90",
|
|
56964
|
+
style: {
|
|
56965
|
+
backgroundColor: primaryColor || "#2563eb",
|
|
56966
|
+
border: "none",
|
|
56967
|
+
cursor: "pointer"
|
|
56968
|
+
},
|
|
56969
|
+
children: "Submit"
|
|
56970
|
+
})]
|
|
56971
|
+
})]
|
|
55071
56972
|
})]
|
|
55072
56973
|
})]
|
|
55073
56974
|
})
|
|
@@ -60071,10 +61972,14 @@
|
|
|
60071
61972
|
}, [isCsatEnabled, showResolveForm, isConversationResolved, resolveRating, resolveFeedbackText]);
|
|
60072
61973
|
const latestPromptSuggestions = reactExports.useMemo(() => {
|
|
60073
61974
|
if (!messages || !Array.isArray(messages)) return [];
|
|
61975
|
+
// Reflect the LATEST assistant message's prompts ONLY — do NOT walk back
|
|
61976
|
+
// to an earlier turn. Walking back showed the PREVIOUS turn's chips
|
|
61977
|
+
// whenever the current answer's prompts were empty/late (the one-turn lag).
|
|
60074
61978
|
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
60075
|
-
|
|
60076
|
-
if ((
|
|
60077
|
-
|
|
61979
|
+
var _messages$i;
|
|
61980
|
+
if (((_messages$i = messages[i]) === null || _messages$i === void 0 ? void 0 : _messages$i.role) === "assistant") {
|
|
61981
|
+
const p = messages[i].prompts;
|
|
61982
|
+
return Array.isArray(p) ? p : [];
|
|
60078
61983
|
}
|
|
60079
61984
|
}
|
|
60080
61985
|
return [];
|
|
@@ -60090,6 +61995,18 @@
|
|
|
60090
61995
|
stablePromptSuggestionsRef.current = [];
|
|
60091
61996
|
}
|
|
60092
61997
|
}, [latestPromptSuggestions, messages]);
|
|
61998
|
+
|
|
61999
|
+
// The moment a NEW user turn starts, drop the carried-over suggestions so a
|
|
62000
|
+
// late/empty current turn never leaves the PREVIOUS turn's chips showing
|
|
62001
|
+
// (the reported one-turn lag). They reappear when this turn yields prompts.
|
|
62002
|
+
// (`userMessageCount` is declared above.)
|
|
62003
|
+
const prevUserMessageCountRef = reactExports.useRef(userMessageCount);
|
|
62004
|
+
reactExports.useEffect(() => {
|
|
62005
|
+
if (userMessageCount !== prevUserMessageCountRef.current) {
|
|
62006
|
+
prevUserMessageCountRef.current = userMessageCount;
|
|
62007
|
+
stablePromptSuggestionsRef.current = [];
|
|
62008
|
+
}
|
|
62009
|
+
}, [userMessageCount]);
|
|
60093
62010
|
const stablePromptSuggestions = latestPromptSuggestions.length > 0 ? latestPromptSuggestions : stablePromptSuggestionsRef.current;
|
|
60094
62011
|
reactExports.useEffect(() => {
|
|
60095
62012
|
if (!csatEnabled) return;
|
|
@@ -61898,6 +63815,16 @@
|
|
|
61898
63815
|
})
|
|
61899
63816
|
}];
|
|
61900
63817
|
|
|
63818
|
+
// Reorder the keyless cascade: freeipapi.com is currently the only one
|
|
63819
|
+
// reliably reachable from a browser — ip-api.com's free tier is HTTP-only
|
|
63820
|
+
// (→ HTTP 403 over HTTPS), ipwho.is → 403, ipapi.co → 429. Trying freeipapi
|
|
63821
|
+
// first avoids three doomed round-trips on every lookup. The rest stay as
|
|
63822
|
+
// fallback in case they recover or behave differently from another network.
|
|
63823
|
+
// NOTE: all IP providers locate the ISP gateway, not the device — for an
|
|
63824
|
+
// accurate end-user position use getBrowserLocation() (GPS + reverseGeocode).
|
|
63825
|
+
const FREE_ORDER = ["freeipapi.com", "ipwho.is", "ipapi.co", "ip-api.com"];
|
|
63826
|
+
freeProviders.sort((a, b) => FREE_ORDER.indexOf(a.name) - FREE_ORDER.indexOf(b.name));
|
|
63827
|
+
|
|
61901
63828
|
// Key-based providers go first (more reliable, higher limits)
|
|
61902
63829
|
return [...keyedProviders, ...freeProviders];
|
|
61903
63830
|
}
|
|
@@ -61995,22 +63922,130 @@
|
|
|
61995
63922
|
}));
|
|
61996
63923
|
}
|
|
61997
63924
|
|
|
63925
|
+
// Default options for navigator.geolocation.getCurrentPosition.
|
|
63926
|
+
// enableHighAccuracy → prefer real GPS over coarse network positioning;
|
|
63927
|
+
// timeout 8s → don't hang forever waiting for a fix;
|
|
63928
|
+
// maximumAge 5 min → accept a recently-cached fix so a silent refresh
|
|
63929
|
+
// (permission already granted) resolves instantly.
|
|
63930
|
+
const DEFAULT_GEO_OPTIONS = {
|
|
63931
|
+
enableHighAccuracy: true,
|
|
63932
|
+
timeout: 8000,
|
|
63933
|
+
maximumAge: 5 * 60 * 1000
|
|
63934
|
+
};
|
|
63935
|
+
|
|
61998
63936
|
/**
|
|
61999
|
-
* Get browser-native geolocation (GPS / network-based
|
|
63937
|
+
* Get browser-native geolocation (GPS / network-based).
|
|
63938
|
+
* Triggers the native permission prompt on first use for an origin (unless the
|
|
63939
|
+
* user already granted/denied). Resolves null — never rejects — on error,
|
|
63940
|
+
* denial, unsupported, or insecure (plain-HTTP) context, so callers can simply
|
|
63941
|
+
* fall back to IP geo.
|
|
63942
|
+
*
|
|
63943
|
+
* @param {PositionOptions} [options] - merged over DEFAULT_GEO_OPTIONS
|
|
63944
|
+
* @returns {Promise<{latitude:number, longitude:number, accuracy:number}|null>}
|
|
62000
63945
|
*/
|
|
62001
|
-
function getBrowserGeolocation$1(options = {
|
|
62002
|
-
timeout: 8000
|
|
62003
|
-
}) {
|
|
63946
|
+
function getBrowserGeolocation$1(options = {}) {
|
|
62004
63947
|
return new Promise(resolve => {
|
|
62005
|
-
if (!navigator
|
|
63948
|
+
if (typeof navigator === "undefined" || !navigator.geolocation) return resolve(null);
|
|
63949
|
+
// getCurrentPosition only resolves in a secure context (HTTPS or
|
|
63950
|
+
// localhost). Bail early on plain HTTP rather than attempt a doomed prompt.
|
|
63951
|
+
if (typeof window !== "undefined" && window.isSecureContext === false) return resolve(null);
|
|
62006
63952
|
navigator.geolocation.getCurrentPosition(pos => resolve({
|
|
62007
63953
|
latitude: pos.coords.latitude,
|
|
62008
63954
|
longitude: pos.coords.longitude,
|
|
62009
63955
|
accuracy: pos.coords.accuracy
|
|
62010
|
-
}), () => resolve(null),
|
|
63956
|
+
}), () => resolve(null), {
|
|
63957
|
+
...DEFAULT_GEO_OPTIONS,
|
|
63958
|
+
...options
|
|
63959
|
+
});
|
|
62011
63960
|
});
|
|
62012
63961
|
}
|
|
62013
63962
|
|
|
63963
|
+
/**
|
|
63964
|
+
* Query the current geolocation permission WITHOUT triggering a prompt.
|
|
63965
|
+
* Lets the host decide whether to ask: "granted" → fetch silently, "denied" →
|
|
63966
|
+
* skip (IP fallback), "prompt" → show your own pre-ask before getCurrentPosition.
|
|
63967
|
+
* Returns "unsupported" where the Permissions API is unavailable (e.g. older
|
|
63968
|
+
* Safari) so callers can treat it as "not known to be granted".
|
|
63969
|
+
* @returns {Promise<"granted"|"denied"|"prompt"|"unsupported">}
|
|
63970
|
+
*/
|
|
63971
|
+
async function getGeolocationPermission$1() {
|
|
63972
|
+
try {
|
|
63973
|
+
if (typeof navigator === "undefined" || !navigator.permissions || !navigator.permissions.query) {
|
|
63974
|
+
return "unsupported";
|
|
63975
|
+
}
|
|
63976
|
+
const status = await navigator.permissions.query({
|
|
63977
|
+
name: "geolocation"
|
|
63978
|
+
});
|
|
63979
|
+
return status.state; // "granted" | "denied" | "prompt"
|
|
63980
|
+
} catch {
|
|
63981
|
+
return "unsupported";
|
|
63982
|
+
}
|
|
63983
|
+
}
|
|
63984
|
+
|
|
63985
|
+
/**
|
|
63986
|
+
* Reverse-geocode latitude/longitude → city / region / country.
|
|
63987
|
+
* Uses BigDataCloud's keyless, CORS-enabled *client* endpoint (no API key,
|
|
63988
|
+
* accurate to the city/state level). Resolves null on network failure or an
|
|
63989
|
+
* unusable response so the caller can keep any prior (IP-based) values.
|
|
63990
|
+
*
|
|
63991
|
+
* @param {number} latitude
|
|
63992
|
+
* @param {number} longitude
|
|
63993
|
+
* @param {Object} [options]
|
|
63994
|
+
* @param {number} [options.timeoutMs]
|
|
63995
|
+
* @param {string} [options.localityLanguage="en"]
|
|
63996
|
+
* @returns {Promise<{city,region,regionCode,country,countryCode,latitude,longitude}|null>}
|
|
63997
|
+
*/
|
|
63998
|
+
async function reverseGeocode$1(latitude, longitude, options = {}) {
|
|
63999
|
+
if (typeof latitude !== "number" || typeof longitude !== "number") return null;
|
|
64000
|
+
const timeoutMs = options.timeoutMs || _globalConfig.timeoutMs || 5000;
|
|
64001
|
+
const lang = options.localityLanguage || "en";
|
|
64002
|
+
const url = "https://api.bigdatacloud.net/data/reverse-geocode-client" + `?latitude=${latitude}&longitude=${longitude}&localityLanguage=${lang}`;
|
|
64003
|
+
try {
|
|
64004
|
+
const d = await fetchWithTimeout(url, timeoutMs);
|
|
64005
|
+
const city = d.city || d.locality || "";
|
|
64006
|
+
// Treat an empty body (e.g. mid-ocean coords) as a miss, not a result.
|
|
64007
|
+
if (!city && !d.countryName) return null;
|
|
64008
|
+
return {
|
|
64009
|
+
city,
|
|
64010
|
+
region: d.principalSubdivision || "",
|
|
64011
|
+
regionCode: (d.principalSubdivisionCode || "").split("-").pop() || "",
|
|
64012
|
+
country: d.countryName || "",
|
|
64013
|
+
countryCode: d.countryCode || "",
|
|
64014
|
+
latitude,
|
|
64015
|
+
longitude
|
|
64016
|
+
};
|
|
64017
|
+
} catch {
|
|
64018
|
+
return null;
|
|
64019
|
+
}
|
|
64020
|
+
}
|
|
64021
|
+
|
|
64022
|
+
/**
|
|
64023
|
+
* High-level "exact location" helper. Gets the device GPS fix (prompting if
|
|
64024
|
+
* needed) and reverse-geocodes it. Returns a geo-shaped object tagged
|
|
64025
|
+
* source:"gps" when the place resolved; the bare coords (no source tag) when
|
|
64026
|
+
* only the fix succeeded but reverse-geocoding failed; or null when there is no
|
|
64027
|
+
* fix at all (denied / unsupported / insecure). This is the accurate-location
|
|
64028
|
+
* primitive — prefer it over IP geo for the real end-user position.
|
|
64029
|
+
*
|
|
64030
|
+
* @param {PositionOptions} [options]
|
|
64031
|
+
* @returns {Promise<Object|null>}
|
|
64032
|
+
*/
|
|
64033
|
+
async function getBrowserLocation$1(options = {}) {
|
|
64034
|
+
const coords = await getBrowserGeolocation$1(options);
|
|
64035
|
+
if (!coords) return null;
|
|
64036
|
+
const place = await reverseGeocode$1(coords.latitude, coords.longitude, options);
|
|
64037
|
+
const hasPlace = !!(place && (place.city || place.country));
|
|
64038
|
+
return {
|
|
64039
|
+
...(hasPlace ? place : {}),
|
|
64040
|
+
latitude: coords.latitude,
|
|
64041
|
+
longitude: coords.longitude,
|
|
64042
|
+
accuracy: coords.accuracy,
|
|
64043
|
+
...(hasPlace ? {
|
|
64044
|
+
source: "gps"
|
|
64045
|
+
} : {})
|
|
64046
|
+
};
|
|
64047
|
+
}
|
|
64048
|
+
|
|
62014
64049
|
/** Build a Google Maps URL from coordinates */
|
|
62015
64050
|
function toMapsUrl$1(lat, lon) {
|
|
62016
64051
|
return `https://www.google.com/maps?q=${lat},${lon}`;
|
|
@@ -62020,6 +64055,9 @@
|
|
|
62020
64055
|
resolveLocation: resolveLocation$1,
|
|
62021
64056
|
listProviders: listProviders$1,
|
|
62022
64057
|
getBrowserGeolocation: getBrowserGeolocation$1,
|
|
64058
|
+
getGeolocationPermission: getGeolocationPermission$1,
|
|
64059
|
+
reverseGeocode: reverseGeocode$1,
|
|
64060
|
+
getBrowserLocation: getBrowserLocation$1,
|
|
62023
64061
|
toMapsUrl: toMapsUrl$1
|
|
62024
64062
|
};
|
|
62025
64063
|
|
|
@@ -62203,6 +64241,9 @@
|
|
|
62203
64241
|
resolveLocation,
|
|
62204
64242
|
listProviders,
|
|
62205
64243
|
getBrowserGeolocation,
|
|
64244
|
+
getGeolocationPermission,
|
|
64245
|
+
reverseGeocode,
|
|
64246
|
+
getBrowserLocation,
|
|
62206
64247
|
toMapsUrl
|
|
62207
64248
|
} = location;
|
|
62208
64249
|
const {
|
|
@@ -62235,7 +64276,13 @@
|
|
|
62235
64276
|
* @param {Object} [options]
|
|
62236
64277
|
* @param {Function} [options.onReady] - Callback when profile is ready
|
|
62237
64278
|
* @param {Function} [options.onError] - Callback on error
|
|
62238
|
-
* @param {boolean}
|
|
64279
|
+
* @param {boolean|"auto"} [options.geoFromBrowser=true] - Capture precise GPS
|
|
64280
|
+
* and reverse-geocode it into `geo`. DEFAULT true = request on init()
|
|
64281
|
+
* (shows the native permission prompt unless already granted/denied);
|
|
64282
|
+
* false = never (IP only); "auto" = use GPS only when permission was
|
|
64283
|
+
* ALREADY granted (silent, never prompts).
|
|
64284
|
+
* @param {Object} [options.geoApiKeys] - API keys for keyed geo providers
|
|
64285
|
+
* @param {PositionOptions} [options.geoOptions] - Override getCurrentPosition opts
|
|
62239
64286
|
* @param {boolean} [options.cache=true] - Use cached profile if < maxAgeMs old
|
|
62240
64287
|
* @param {number} [options.maxAgeMs=300000] - Max cache age (default 5 min)
|
|
62241
64288
|
* @param {boolean} [options.autoInit=false] - Auto-init on construction
|
|
@@ -62245,7 +64292,13 @@
|
|
|
62245
64292
|
this._options = {
|
|
62246
64293
|
onReady: options.onReady || null,
|
|
62247
64294
|
onError: options.onError || null,
|
|
62248
|
-
|
|
64295
|
+
// Default ON: capture precise GPS on init() behind the browser's native
|
|
64296
|
+
// permission prompt. Use `=== undefined` (not `|| `) so an explicit
|
|
64297
|
+
// `false` opt-out is honored; pass "auto" to use an already-granted
|
|
64298
|
+
// permission silently without ever prompting.
|
|
64299
|
+
geoFromBrowser: options.geoFromBrowser === undefined ? true : options.geoFromBrowser,
|
|
64300
|
+
geoApiKeys: options.geoApiKeys || null,
|
|
64301
|
+
geoOptions: options.geoOptions || null,
|
|
62249
64302
|
cache: options.cache !== false,
|
|
62250
64303
|
maxAgeMs: options.maxAgeMs || 5 * 60 * 1000,
|
|
62251
64304
|
autoInit: options.autoInit || false,
|
|
@@ -62295,15 +64348,46 @@
|
|
|
62295
64348
|
confidence
|
|
62296
64349
|
} = generateFingerprint();
|
|
62297
64350
|
|
|
62298
|
-
// 3. IP
|
|
62299
|
-
|
|
62300
|
-
|
|
62301
|
-
const
|
|
62302
|
-
|
|
62303
|
-
|
|
62304
|
-
|
|
62305
|
-
|
|
62306
|
-
|
|
64351
|
+
// 3. IP→geo chain and (optional) precise browser GPS run concurrently.
|
|
64352
|
+
// GPS is the slow path (permission prompt + satellite fix) so we never
|
|
64353
|
+
// block the IP lookup on it.
|
|
64354
|
+
const ipApiKeys = this._options.geoApiKeys ? {
|
|
64355
|
+
apiKeys: this._options.geoApiKeys
|
|
64356
|
+
} : {};
|
|
64357
|
+
const [ipBundle, gpsLoc] = await Promise.all([(async () => {
|
|
64358
|
+
const ipResult = await detectIP();
|
|
64359
|
+
const ipAddr = ipResult?.ip || "unknown";
|
|
64360
|
+
const ipGeo = ipAddr !== "unknown" ? await resolveLocation(ipAddr, ipApiKeys) : null;
|
|
64361
|
+
return {
|
|
64362
|
+
ip: ipAddr,
|
|
64363
|
+
ipVersion: ipResult ? getIPVersion(ipAddr) : "unknown",
|
|
64364
|
+
geo: ipGeo
|
|
64365
|
+
};
|
|
64366
|
+
})(), this._collectBrowserLocation()]);
|
|
64367
|
+
const {
|
|
64368
|
+
ip,
|
|
64369
|
+
ipVersion
|
|
64370
|
+
} = ipBundle;
|
|
64371
|
+
|
|
64372
|
+
// 4. Geo: start from the (coarse) IP location, then — when we have a
|
|
64373
|
+
// precise GPS fix — OVERRIDE city/region/country with the
|
|
64374
|
+
// reverse-geocoded values. IP geo only locates the ISP gateway, so a
|
|
64375
|
+
// real device fix always wins. Denied/unavailable → IP value stays.
|
|
64376
|
+
let geo = ipBundle.geo;
|
|
64377
|
+
let browserGeo = null;
|
|
64378
|
+
if (gpsLoc) {
|
|
64379
|
+
browserGeo = {
|
|
64380
|
+
latitude: gpsLoc.latitude,
|
|
64381
|
+
longitude: gpsLoc.longitude,
|
|
64382
|
+
accuracy: gpsLoc.accuracy
|
|
64383
|
+
};
|
|
64384
|
+
if (gpsLoc.source === "gps") {
|
|
64385
|
+
// gpsLoc carries city/region/regionCode/country/countryCode/lat/lng/source
|
|
64386
|
+
geo = {
|
|
64387
|
+
...(geo || {}),
|
|
64388
|
+
...gpsLoc
|
|
64389
|
+
};
|
|
64390
|
+
}
|
|
62307
64391
|
}
|
|
62308
64392
|
|
|
62309
64393
|
// 5. Browser context
|
|
@@ -62345,6 +64429,56 @@
|
|
|
62345
64429
|
}
|
|
62346
64430
|
}
|
|
62347
64431
|
|
|
64432
|
+
/**
|
|
64433
|
+
* Decide whether to capture browser GPS during init(), honoring geoFromBrowser:
|
|
64434
|
+
* false → null (skip)
|
|
64435
|
+
* "auto" → only when permission is ALREADY granted (silent, never prompts)
|
|
64436
|
+
* true → attempt (getCurrentPosition shows the prompt unless denied)
|
|
64437
|
+
* @private
|
|
64438
|
+
* @returns {Promise<Object|null>}
|
|
64439
|
+
*/
|
|
64440
|
+
async _collectBrowserLocation() {
|
|
64441
|
+
const mode = this._options.geoFromBrowser;
|
|
64442
|
+
if (!mode) return null;
|
|
64443
|
+
if (mode === "auto") {
|
|
64444
|
+
const perm = await getGeolocationPermission();
|
|
64445
|
+
if (perm !== "granted") return null; // never prompt during a silent init
|
|
64446
|
+
}
|
|
64447
|
+
return getBrowserLocation(this._options.geoOptions || {});
|
|
64448
|
+
}
|
|
64449
|
+
|
|
64450
|
+
/**
|
|
64451
|
+
* Capture precise browser location AFTER your UI has obtained user consent
|
|
64452
|
+
* (e.g. an in-widget "Share your location?" pre-ask). Triggers the native
|
|
64453
|
+
* permission prompt, reverse-geocodes the fix, merges it into the current
|
|
64454
|
+
* profile's `geo` (source:"gps"), re-persists, and fires onReady. No-ops
|
|
64455
|
+
* gracefully when denied/unavailable (keeps the IP fallback) or before init().
|
|
64456
|
+
* @param {PositionOptions} [options]
|
|
64457
|
+
* @returns {Promise<UserProfile|null>}
|
|
64458
|
+
*/
|
|
64459
|
+
async captureBrowserLocation(options = {}) {
|
|
64460
|
+
const loc = await getBrowserLocation({
|
|
64461
|
+
...(this._options.geoOptions || {}),
|
|
64462
|
+
...options
|
|
64463
|
+
});
|
|
64464
|
+
if (!loc || !this.profile) return this.profile; // denied/unavailable or not init'd yet
|
|
64465
|
+
this.profile.browserGeo = {
|
|
64466
|
+
latitude: loc.latitude,
|
|
64467
|
+
longitude: loc.longitude,
|
|
64468
|
+
accuracy: loc.accuracy
|
|
64469
|
+
};
|
|
64470
|
+
this.profile.mapsUrl = toMapsUrl(loc.latitude, loc.longitude);
|
|
64471
|
+
if (loc.source === "gps") {
|
|
64472
|
+
this.profile.geo = {
|
|
64473
|
+
...(this.profile.geo || {}),
|
|
64474
|
+
...loc
|
|
64475
|
+
};
|
|
64476
|
+
}
|
|
64477
|
+
saveSessionMeta(this.profile);
|
|
64478
|
+
if (this._options.onReady) this._options.onReady(this.profile);
|
|
64479
|
+
return this.profile;
|
|
64480
|
+
}
|
|
64481
|
+
|
|
62348
64482
|
/**
|
|
62349
64483
|
* Get the current profile (must call init() first)
|
|
62350
64484
|
* @returns {UserProfile|null}
|
|
@@ -62439,6 +64573,9 @@
|
|
|
62439
64573
|
src.exports.resolveLocation = resolveLocation;
|
|
62440
64574
|
src.exports.listProviders = listProviders;
|
|
62441
64575
|
src.exports.getBrowserGeolocation = getBrowserGeolocation;
|
|
64576
|
+
src.exports.getGeolocationPermission = getGeolocationPermission;
|
|
64577
|
+
src.exports.reverseGeocode = reverseGeocode;
|
|
64578
|
+
src.exports.getBrowserLocation = getBrowserLocation;
|
|
62442
64579
|
src.exports.getOrCreateUserID = getOrCreateUserID;
|
|
62443
64580
|
src.exports.getOrCreateSessionID = getOrCreateSessionID;
|
|
62444
64581
|
src.exports.clearSession = clearSession;
|