@usecrow/ui 0.1.6 → 0.1.8

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/index.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  var React3 = require('react');
4
4
  var framerMotion = require('framer-motion');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
+ var reactDom = require('react-dom');
6
7
  var lucideReact = require('lucide-react');
7
8
  var ReactMarkdown = require('react-markdown');
8
9
  var TooltipPrimitive = require('@radix-ui/react-tooltip');
@@ -32,26 +33,6 @@ var React3__default = /*#__PURE__*/_interopDefault(React3);
32
33
  var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
33
34
  var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
34
35
 
35
- // src/styles/inject.ts
36
- var STYLE_ID = "crow-ui-styles";
37
- var CSS_CONTENT = `*,: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: }
38
-
39
- /*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.crow-pointer-events-none{pointer-events:none}.crow-pointer-events-auto{pointer-events:auto}.crow-fixed{position:fixed}.crow-absolute{position:absolute}.crow-relative{position:relative}.crow-sticky{position:sticky}.crow-bottom-0{bottom:0}.crow-bottom-full{bottom:100%}.crow-left-0{left:0}.crow-right-0{right:0}.crow-top-0{top:0}.crow-z-50{z-index:50}.crow-z-\\[999999\\]{z-index:999999}.crow-m-0{margin:0}.crow-my-1{margin-top:.25rem}.crow-mb-1,.crow-my-1{margin-bottom:.25rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-ml-0{margin-left:0}.crow-ml-0\\.5{margin-left:.125rem}.crow-ml-2{margin-left:.5rem}.crow-ml-4{margin-left:1rem}.crow-mt-0{margin-top:0}.crow-mt-0\\.5{margin-top:.125rem}.crow-mt-1{margin-top:.25rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-inline-block{display:inline-block}.crow-flex{display:flex}.crow-inline-flex{display:inline-flex}.crow-h-10{height:2.5rem}.crow-h-12{height:3rem}.crow-h-2{height:.5rem}.crow-h-3{height:.75rem}.crow-h-3\\.5{height:.875rem}.crow-h-4{height:1rem}.crow-h-7{height:1.75rem}.crow-h-8{height:2rem}.crow-h-full{height:100%}.crow-max-h-32{max-height:8rem}.crow-max-h-\\[200px\\]{max-height:200px}.crow-min-h-0{min-height:0}.crow-min-h-\\[32px\\]{min-height:32px}.crow-w-0{width:0}.crow-w-0\\.5{width:.125rem}.crow-w-2{width:.5rem}.crow-w-3{width:.75rem}.crow-w-3\\.5{width:.875rem}.crow-w-4{width:1rem}.crow-w-7{width:1.75rem}.crow-w-8{width:2rem}.crow-w-full{width:100%}.crow-min-w-0{min-width:0}.crow-min-w-\\[180px\\]{min-width:180px}.crow-max-w-\\[80\\%\\]{max-width:80%}.crow-max-w-\\[90\\%\\]{max-width:90%}.crow-max-w-full{max-width:100%}.crow-flex-1{flex:1 1 0%}.crow-flex-shrink-0{flex-shrink:0}.crow-rotate-180{--tw-rotate:180deg}.crow-rotate-180,.crow-scale-100{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))}.crow-scale-100{--tw-scale-x:1;--tw-scale-y:1}.crow-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.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))}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-pulse{animation:crow-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}@keyframes crow-spin{to{transform:rotate(1turn)}}.crow-animate-spin{animation:crow-spin 1s linear infinite}.crow-cursor-default{cursor:default}.crow-cursor-not-allowed{cursor:not-allowed}.crow-cursor-pointer{cursor:pointer}.crow-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.crow-resize-none{resize:none}.crow-list-decimal{list-style-type:decimal}.crow-list-disc{list-style-type:disc}.crow-flex-row{flex-direction:row}.crow-flex-col{flex-direction:column}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-justify-start{justify-content:flex-start}.crow-justify-end{justify-content:flex-end}.crow-justify-center{justify-content:center}.crow-justify-between{justify-content:space-between}.crow-gap-1{gap:.25rem}.crow-gap-1\\.5{gap:.375rem}.crow-gap-2{gap:.5rem}.crow-gap-3{gap:.75rem}.crow-gap-4{gap:1rem}.crow-gap-6{gap:1.5rem}.crow-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.crow-space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.crow-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.crow-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.crow-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.crow-overflow-hidden{overflow:hidden}.crow-overflow-visible{overflow:visible}.crow-overflow-x-auto{overflow-x:auto}.crow-overflow-y-auto{overflow-y:auto}.crow-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crow-whitespace-pre-wrap{white-space:pre-wrap}.crow-break-words{overflow-wrap:break-word}.crow-rounded{border-radius:.25rem}.crow-rounded-2xl{border-radius:1rem}.crow-rounded-3xl{border-radius:1.5rem}.crow-rounded-full{border-radius:9999px}.crow-rounded-lg{border-radius:.5rem}.crow-rounded-md{border-radius:.375rem}.crow-rounded-xl{border-radius:.75rem}.crow-border{border-width:1px}.crow-border-b{border-bottom-width:1px}.crow-border-l{border-left-width:1px}.crow-border-l-2{border-left-width:2px}.crow-border-r{border-right-width:1px}.crow-border-t{border-top-width:1px}.crow-border-none{border-style:none}.crow-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.crow-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.crow-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.crow-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.crow-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.crow-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.crow-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.crow-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.crow-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.crow-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.crow-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.crow-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.crow-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.crow-bg-transparent{background-color:transparent}.crow-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.crow-p-0{padding:0}.crow-p-1{padding:.25rem}.crow-p-1\\.5{padding:.375rem}.crow-p-2{padding:.5rem}.crow-p-3{padding:.75rem}.crow-p-4{padding:1rem}.crow-p-6{padding:1.5rem}.crow-px-1{padding-left:.25rem;padding-right:.25rem}.crow-px-2{padding-left:.5rem;padding-right:.5rem}.crow-px-3{padding-left:.75rem;padding-right:.75rem}.crow-px-4{padding-left:1rem;padding-right:1rem}.crow-px-6{padding-left:1.5rem;padding-right:1.5rem}.crow-py-0{padding-top:0;padding-bottom:0}.crow-py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.crow-py-1{padding-top:.25rem;padding-bottom:.25rem}.crow-py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.crow-py-2{padding-top:.5rem;padding-bottom:.5rem}.crow-py-3{padding-top:.75rem;padding-bottom:.75rem}.crow-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.crow-py-8{padding-top:2rem;padding-bottom:2rem}.crow-pb-2{padding-bottom:.5rem}.crow-pl-3{padding-left:.75rem}.crow-pl-4{padding-left:1rem}.crow-pl-5{padding-left:1.25rem}.crow-pr-4{padding-right:1rem}.crow-pt-1{padding-top:.25rem}.crow-text-left{text-align:left}.crow-text-center{text-align:center}.crow-text-right{text-align:right}.crow-align-text-bottom{vertical-align:text-bottom}.crow-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.crow-text-base{font-size:1rem;line-height:1.5rem}.crow-text-lg{font-size:1.125rem;line-height:1.75rem}.crow-text-sm{font-size:.875rem;line-height:1.25rem}.crow-text-xs{font-size:.75rem;line-height:1rem}.crow-font-bold{font-weight:700}.crow-font-medium{font-weight:500}.crow-font-semibold{font-weight:600}.crow-uppercase{text-transform:uppercase}.crow-leading-relaxed{line-height:1.625}.crow-tracking-wide{letter-spacing:.025em}.crow-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.crow-text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.crow-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.crow-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.crow-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.crow-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.crow-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.crow-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.crow-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.crow-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.crow-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.crow-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.crow-underline{text-decoration-line:underline}.crow-opacity-0{opacity:0}.crow-opacity-100{opacity:1}.crow-opacity-50{opacity:.5}.crow-opacity-60{opacity:.6}.crow-shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.crow-shadow-2xl,.crow-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-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)}.crow-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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.crow-backdrop-blur-md,.crow-backdrop-blur-sm{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)}.crow-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.crow-transition{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);transition-duration:.15s}.crow-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-duration-150{transition-duration:.15s}.crow-duration-200{transition-duration:.2s}.crow-duration-300{transition-duration:.3s}.crow-duration-500{transition-duration:.5s}.crow-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}.crow-animate-pulse{animation:crow-pulse 1.5s ease-in-out infinite}.crow-animation-delay-100{animation-delay:.1s}.crow-animation-delay-200{animation-delay:.2s}@keyframes crow-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes crow-slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes crow-pulse{0%,to{opacity:1}50%{opacity:.4}}.crow-overflow-y-auto::-webkit-scrollbar{width:6px}.crow-overflow-y-auto::-webkit-scrollbar-track{background:transparent}.crow-overflow-y-auto::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:3px}.crow-overflow-y-auto::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.crow-focus-visible\\:crow-outline-none:focus-visible{outline:none}.crow-focus-visible\\:crow-ring-2:focus-visible{box-shadow:0 0 0 2px var(--crow-primary,#6366f1)}:root{--crow-primary:#6366f1;--crow-primary-dark:#4f46e5;--crow-secondary:#f1f5f9;--crow-accent:#10b981}@media (prefers-color-scheme:dark){:root{--crow-primary:#818cf8;--crow-primary-dark:#6366f1}}.placeholder\\:crow-text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\\:crow-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.last\\:crow-mb-0:last-child{margin-bottom:0}.last\\:crow-border-0:last-child{border-width:0}.hover\\:crow-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.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))}.hover\\:crow-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\\:crow-text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\\:crow-opacity-100:hover{opacity:1}.focus\\:crow-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:crow-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)}.focus\\:crow-ring-0:focus,.focus\\:crow-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:crow-ring-2: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(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\:crow-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:crow-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:crow-ring-0: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(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)}.disabled\\:crow-pointer-events-none:disabled{pointer-events:none}.disabled\\:crow-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:crow-opacity-50:disabled{opacity:.5}`;
40
- var injected = false;
41
- function injectStyles() {
42
- if (injected || typeof document === "undefined") return;
43
- if (document.getElementById(STYLE_ID)) {
44
- injected = true;
45
- return;
46
- }
47
- const style = document.createElement("style");
48
- style.id = STYLE_ID;
49
- style.textContent = CSS_CONTENT;
50
- document.head.appendChild(style);
51
- injected = true;
52
- }
53
- injectStyles();
54
-
55
36
  // src/utils.ts
56
37
  var cn = (...classes) => classes.filter(Boolean).join(" ");
57
38
  var formatTime = (date) => date.toLocaleTimeString("en-US", {
@@ -126,6 +107,7 @@ function useChat({
126
107
  async (message, botMsgId) => {
127
108
  let accumulatedText = "";
128
109
  let firstChunk = true;
110
+ const pendingClientTools = [];
129
111
  abortControllerRef.current = new AbortController();
130
112
  try {
131
113
  const identityToken = window.__crow_identity_token;
@@ -157,6 +139,14 @@ function useChat({
157
139
  const data = line.slice(6).trim();
158
140
  if (data === "[DONE]") {
159
141
  setIsLoading(false);
142
+ for (const tool of pendingClientTools) {
143
+ onToolCall?.({
144
+ type: "client_call",
145
+ toolName: tool.toolName,
146
+ toolCallId: tool.toolCallId,
147
+ arguments: tool.arguments
148
+ });
149
+ }
160
150
  return;
161
151
  }
162
152
  try {
@@ -253,9 +243,9 @@ function useChat({
253
243
  );
254
244
  break;
255
245
  case "client_tool_call":
256
- onToolCall?.({
257
- type: "client_call",
246
+ pendingClientTools.push({
258
247
  toolName: parsed.tool_name,
248
+ toolCallId: parsed.tool_call_id,
259
249
  arguments: parsed.arguments
260
250
  });
261
251
  break;
@@ -369,6 +359,102 @@ function useChat({
369
359
  const loadMessages = React3.useCallback((historyMessages) => {
370
360
  setMessages(historyMessages);
371
361
  }, []);
362
+ const submitToolResult = React3.useCallback(
363
+ async (toolCallId, toolName, result) => {
364
+ if (!conversationId) {
365
+ console.error("[Crow] Cannot submit tool result: no conversation ID");
366
+ return;
367
+ }
368
+ const botMsgId = generateMessageId("bot");
369
+ const pendingClientTools = [];
370
+ setMessages((prev) => [
371
+ ...prev,
372
+ {
373
+ id: botMsgId,
374
+ content: "",
375
+ isBot: true,
376
+ timestamp: /* @__PURE__ */ new Date()
377
+ }
378
+ ]);
379
+ setIsLoading(true);
380
+ try {
381
+ const identityToken = window.__crow_identity_token;
382
+ const response = await fetch(`${apiUrl}/api/chat/tool-result`, {
383
+ method: "POST",
384
+ headers: { "Content-Type": "application/json" },
385
+ body: JSON.stringify({
386
+ product_id: productId,
387
+ conversation_id: conversationId,
388
+ tool_call_id: toolCallId,
389
+ tool_name: toolName,
390
+ result,
391
+ identity_token: identityToken,
392
+ model: selectedModel
393
+ })
394
+ });
395
+ if (!response.ok) {
396
+ throw new Error(`HTTP error! status: ${response.status}`);
397
+ }
398
+ const reader = response.body?.getReader();
399
+ const decoder = new TextDecoder();
400
+ let accumulatedText = "";
401
+ if (reader) {
402
+ while (true) {
403
+ const { done, value } = await reader.read();
404
+ if (done) break;
405
+ const chunk = decoder.decode(value);
406
+ const lines = chunk.split("\n");
407
+ for (const line of lines) {
408
+ if (line.startsWith("data: ")) {
409
+ const data = line.slice(6).trim();
410
+ if (data === "[DONE]") {
411
+ setIsLoading(false);
412
+ for (const tool of pendingClientTools) {
413
+ onToolCall?.({
414
+ type: "client_call",
415
+ toolName: tool.toolName,
416
+ toolCallId: tool.toolCallId,
417
+ arguments: tool.arguments
418
+ });
419
+ }
420
+ return;
421
+ }
422
+ try {
423
+ const parsed = JSON.parse(data);
424
+ if (parsed.type === "content") {
425
+ accumulatedText += parsed.content;
426
+ setMessages(
427
+ (prev) => prev.map(
428
+ (msg) => msg.id === botMsgId ? { ...msg, content: accumulatedText } : msg
429
+ )
430
+ );
431
+ } else if (parsed.type === "client_tool_call") {
432
+ pendingClientTools.push({
433
+ toolName: parsed.tool_name,
434
+ toolCallId: parsed.tool_call_id,
435
+ arguments: parsed.arguments
436
+ });
437
+ }
438
+ } catch (e) {
439
+ console.error("[Crow] Parse error in tool result response:", e);
440
+ }
441
+ }
442
+ }
443
+ }
444
+ }
445
+ } catch (error) {
446
+ console.error("[Crow] Error submitting tool result:", error);
447
+ setMessages(
448
+ (prev) => prev.map(
449
+ (msg) => msg.id === botMsgId ? { ...msg, content: "Sorry, I encountered an error processing the tool result." } : msg
450
+ )
451
+ );
452
+ } finally {
453
+ setIsLoading(false);
454
+ }
455
+ },
456
+ [apiUrl, productId, conversationId, selectedModel]
457
+ );
372
458
  return {
373
459
  messages,
374
460
  isLoading,
@@ -380,7 +466,8 @@ function useChat({
380
466
  sendMessage,
381
467
  stopGeneration,
382
468
  resetMessages,
383
- loadMessages
469
+ loadMessages,
470
+ submitToolResult
384
471
  };
385
472
  }
386
473
  function useConversations({ productId, apiUrl = "" }) {
@@ -873,29 +960,29 @@ function mergeCopilotStyles(dbStyles, propStyles) {
873
960
  }
874
961
  return result;
875
962
  }
876
- function stylesToCSSVariables(styles2) {
963
+ function stylesToCSSVariables(styles) {
877
964
  return {
878
965
  // Colors
879
- "--crow-color-primary": styles2.colors.primary,
880
- "--crow-color-background": styles2.colors.background,
881
- "--crow-color-text": styles2.colors.text,
882
- "--crow-color-border": styles2.colors.border,
883
- "--crow-color-bot-bubble": styles2.colors.botBubble,
884
- "--crow-color-bot-text": styles2.colors.botText,
885
- "--crow-color-user-bubble": styles2.colors.userBubble,
886
- "--crow-color-user-text": styles2.colors.userText,
887
- "--crow-color-user-border": styles2.colors.userBorder,
888
- "--crow-color-messages-bg": styles2.colors.messagesBackground,
966
+ "--crow-color-primary": styles.colors.primary,
967
+ "--crow-color-background": styles.colors.background,
968
+ "--crow-color-text": styles.colors.text,
969
+ "--crow-color-border": styles.colors.border,
970
+ "--crow-color-bot-bubble": styles.colors.botBubble,
971
+ "--crow-color-bot-text": styles.colors.botText,
972
+ "--crow-color-user-bubble": styles.colors.userBubble,
973
+ "--crow-color-user-text": styles.colors.userText,
974
+ "--crow-color-user-border": styles.colors.userBorder,
975
+ "--crow-color-messages-bg": styles.colors.messagesBackground,
889
976
  // Typography
890
- "--crow-font-family": styles2.typography.fontFamily,
891
- "--crow-font-size": `${styles2.typography.fontSize}px`,
892
- "--crow-header-font-size": `${styles2.typography.headerFontSize}px`,
893
- "--crow-font-weight": `${styles2.typography.fontWeight}`,
894
- "--crow-line-height": `${styles2.typography.lineHeight}`,
895
- "--crow-letter-spacing": `${styles2.typography.letterSpacing}px`,
977
+ "--crow-font-family": styles.typography.fontFamily,
978
+ "--crow-font-size": `${styles.typography.fontSize}px`,
979
+ "--crow-header-font-size": `${styles.typography.headerFontSize}px`,
980
+ "--crow-font-weight": `${styles.typography.fontWeight}`,
981
+ "--crow-line-height": `${styles.typography.lineHeight}`,
982
+ "--crow-letter-spacing": `${styles.typography.letterSpacing}px`,
896
983
  // Animations
897
- "--crow-animation-duration": `${styles2.animations.duration}s`,
898
- "--crow-animation-easing": styles2.animations.easing
984
+ "--crow-animation-duration": `${styles.animations.duration}s`,
985
+ "--crow-animation-easing": styles.animations.easing
899
986
  };
900
987
  }
901
988
 
@@ -955,9 +1042,9 @@ function useWidgetStyles({
955
1042
  hasFetchedRef.current = true;
956
1043
  fetchStyles();
957
1044
  }, [productId, apiUrl, skip, key]);
958
- const styles2 = mergeWidgetStyles(dbStyles, propStyles);
1045
+ const styles = mergeWidgetStyles(dbStyles, propStyles);
959
1046
  return {
960
- styles: styles2,
1047
+ styles,
961
1048
  isLoading,
962
1049
  error,
963
1050
  agentName,
@@ -1009,9 +1096,9 @@ function useCopilotStyles({
1009
1096
  hasFetchedRef.current = true;
1010
1097
  fetchStyles();
1011
1098
  }, [productId, apiUrl, skip, key]);
1012
- const styles2 = mergeCopilotStyles(dbStyles, propStyles);
1099
+ const styles = mergeCopilotStyles(dbStyles, propStyles);
1013
1100
  return {
1014
- styles: styles2,
1101
+ styles,
1015
1102
  isLoading,
1016
1103
  error,
1017
1104
  agentName,
@@ -1038,14 +1125,14 @@ function usePreviewCopilotStyles(previewStyles) {
1038
1125
  var WidgetStyleContext = React3.createContext(null);
1039
1126
  function WidgetStyleProvider({
1040
1127
  children,
1041
- styles: styles2,
1128
+ styles,
1042
1129
  agentName = "Assistant",
1043
1130
  isLoading = false,
1044
1131
  variant = "floating"
1045
1132
  }) {
1046
1133
  const value = React3.useMemo(
1047
- () => ({ styles: styles2, agentName, isLoading, variant }),
1048
- [styles2, agentName, isLoading, variant]
1134
+ () => ({ styles, agentName, isLoading, variant }),
1135
+ [styles, agentName, isLoading, variant]
1049
1136
  );
1050
1137
  return /* @__PURE__ */ jsxRuntime.jsx(WidgetStyleContext.Provider, { value, children });
1051
1138
  }
@@ -1065,13 +1152,13 @@ function useWidgetStyles2() {
1065
1152
  var CopilotStyleContext = React3.createContext(null);
1066
1153
  function CopilotStyleProvider({
1067
1154
  children,
1068
- styles: styles2,
1155
+ styles,
1069
1156
  agentName = "Assistant",
1070
1157
  isLoading = false
1071
1158
  }) {
1072
1159
  const value = React3.useMemo(
1073
- () => ({ styles: styles2, agentName, isLoading }),
1074
- [styles2, agentName, isLoading]
1160
+ () => ({ styles, agentName, isLoading }),
1161
+ [styles, agentName, isLoading]
1075
1162
  );
1076
1163
  return /* @__PURE__ */ jsxRuntime.jsx(CopilotStyleContext.Provider, { value, children });
1077
1164
  }
@@ -1088,46 +1175,51 @@ function useCopilotStyles2() {
1088
1175
  const context = React3.useContext(CopilotStyleContext);
1089
1176
  return context?.styles ?? DEFAULT_COPILOT_STYLES;
1090
1177
  }
1178
+ function ShadowContainer({
1179
+ children,
1180
+ styles,
1181
+ hostId = "crow-widget-host",
1182
+ hostClassName
1183
+ }) {
1184
+ const hostRef = React3.useRef(null);
1185
+ const [shadowRoot, setShadowRoot] = React3.useState(null);
1186
+ React3.useEffect(() => {
1187
+ if (hostRef.current && !hostRef.current.shadowRoot) {
1188
+ const shadow = hostRef.current.attachShadow({ mode: "open" });
1189
+ setShadowRoot(shadow);
1190
+ }
1191
+ }, []);
1192
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: hostRef, id: hostId, className: hostClassName, children: shadowRoot && reactDom.createPortal(
1193
+ /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1194
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: styles }),
1195
+ children
1196
+ ] }),
1197
+ shadowRoot
1198
+ ) });
1199
+ }
1200
+ ShadowContainer.displayName = "ShadowContainer";
1091
1201
  function ChatBubble({ isExpanded, onClick }) {
1092
- const { styles: styles2 } = useWidgetStyleContext();
1202
+ const { styles } = useWidgetStyleContext();
1093
1203
  return /* @__PURE__ */ jsxRuntime.jsx(
1094
1204
  "button",
1095
1205
  {
1096
1206
  onClick,
1097
1207
  className: "crow-fixed crow-z-[999999] crow-rounded-full crow-flex crow-items-center crow-justify-center crow-shadow-2xl hover:crow-scale-110 crow-transition-all crow-duration-500 crow-border crow-backdrop-blur-md",
1098
1208
  style: {
1099
- width: styles2.bubble.size,
1100
- height: styles2.bubble.size,
1101
- right: styles2.position.bubbleRight,
1102
- bottom: styles2.position.bubbleBottom,
1103
- background: styles2.colors.bubbleBackground,
1104
- borderColor: styles2.colors.bubbleBorder,
1105
- boxShadow: styles2.shadows.bubble,
1106
- color: styles2.colors.bubbleIcon
1209
+ width: styles.bubble.size,
1210
+ height: styles.bubble.size,
1211
+ right: styles.position.bubbleRight,
1212
+ bottom: styles.position.bubbleBottom,
1213
+ background: styles.colors.bubbleBackground,
1214
+ borderColor: styles.colors.bubbleBorder,
1215
+ boxShadow: styles.shadows.bubble,
1216
+ color: styles.colors.bubbleIcon
1107
1217
  },
1108
1218
  "aria-label": isExpanded ? "Close Chat" : "Open Chat",
1109
- children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { size: styles2.bubble.iconSize, strokeWidth: 2 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircle, { size: styles2.bubble.iconSize, strokeWidth: 2 })
1219
+ children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { size: styles.bubble.iconSize, strokeWidth: 2 }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircle, { size: styles.bubble.iconSize, strokeWidth: 2 })
1110
1220
  }
1111
1221
  );
1112
1222
  }
1113
- var GlassCard = React3.forwardRef(
1114
- ({ className, children, ...props }, ref) => {
1115
- return /* @__PURE__ */ jsxRuntime.jsx(
1116
- "div",
1117
- {
1118
- ref,
1119
- className: cn(
1120
- "crow-border crow-flex crow-flex-col crow-gap-6 crow-rounded-2xl crow-py-6 crow-backdrop-blur-md",
1121
- className
1122
- ),
1123
- style: { background: "rgba(255, 255, 255, 0.3)", borderColor: "rgba(229, 231, 235, 0.3)", ...props.style },
1124
- ...props,
1125
- children
1126
- }
1127
- );
1128
- }
1129
- );
1130
- GlassCard.displayName = "GlassCard";
1131
1223
  var GOOGLE_FONTS_MAP = {
1132
1224
  '"Inter", sans-serif': "Inter:wght@300;400;500;600;700",
1133
1225
  '"Roboto", sans-serif': "Roboto:wght@300;400;500;700",
@@ -1137,9 +1229,9 @@ var GOOGLE_FONTS_MAP = {
1137
1229
  };
1138
1230
  var WidgetShell = React3.forwardRef(
1139
1231
  ({ children, className }, ref) => {
1140
- const { styles: styles2, variant } = useWidgetStyleContext();
1232
+ const { styles, variant } = useWidgetStyleContext();
1141
1233
  React3.useEffect(() => {
1142
- const fontParam = GOOGLE_FONTS_MAP[styles2.typography.fontFamily];
1234
+ const fontParam = GOOGLE_FONTS_MAP[styles.typography.fontFamily];
1143
1235
  if (!fontParam) return;
1144
1236
  const linkId = `crow-google-font-${fontParam.split(":")[0]}`;
1145
1237
  if (document.getElementById(linkId)) return;
@@ -1148,46 +1240,46 @@ var WidgetShell = React3.forwardRef(
1148
1240
  link.rel = "stylesheet";
1149
1241
  link.href = `https://fonts.googleapis.com/css2?family=${fontParam}&display=swap`;
1150
1242
  document.head.appendChild(link);
1151
- }, [styles2.typography.fontFamily]);
1243
+ }, [styles.typography.fontFamily]);
1152
1244
  const baseStyle = {
1153
- borderRadius: styles2.dimensions.borderRadius,
1154
- padding: styles2.dimensions.padding,
1155
- background: styles2.colors.background,
1156
- borderColor: styles2.colors.border,
1157
- color: styles2.colors.text,
1158
- boxShadow: styles2.shadows.widget,
1159
- fontFamily: styles2.typography.fontFamily,
1160
- fontSize: styles2.typography.fontSize,
1161
- fontWeight: styles2.typography.fontWeight,
1162
- lineHeight: styles2.typography.lineHeight,
1163
- letterSpacing: styles2.typography.letterSpacing
1245
+ borderRadius: styles.dimensions.borderRadius,
1246
+ padding: styles.dimensions.padding,
1247
+ background: styles.colors.background,
1248
+ borderColor: styles.colors.border,
1249
+ color: styles.colors.text,
1250
+ boxShadow: styles.shadows.widget,
1251
+ fontFamily: styles.typography.fontFamily,
1252
+ fontSize: styles.typography.fontSize,
1253
+ fontWeight: styles.typography.fontWeight,
1254
+ lineHeight: styles.typography.lineHeight,
1255
+ letterSpacing: styles.typography.letterSpacing
1164
1256
  };
1165
1257
  if (variant === "embedded") {
1166
1258
  return /* @__PURE__ */ jsxRuntime.jsx(
1167
- GlassCard,
1259
+ "div",
1168
1260
  {
1169
1261
  ref,
1170
- className: `crow-flex crow-flex-col crow-shadow-2xl crow-gap-3 ${className ?? ""}`,
1262
+ className: `crow-flex crow-flex-col crow-shadow-2xl crow-gap-3 crow-border crow-backdrop-blur-md crow-overflow-hidden ${className ?? ""}`,
1171
1263
  style: {
1172
1264
  ...baseStyle,
1173
- width: `min(${styles2.dimensions.width}px, calc(100vw - 32px))`,
1174
- height: `min(${styles2.dimensions.maxHeight}px, calc(100vh - 120px))`
1265
+ width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,
1266
+ height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`
1175
1267
  },
1176
1268
  children
1177
1269
  }
1178
1270
  );
1179
1271
  }
1180
1272
  return /* @__PURE__ */ jsxRuntime.jsx(
1181
- GlassCard,
1273
+ "div",
1182
1274
  {
1183
1275
  ref,
1184
- className: `crow-fixed crow-z-[999999] crow-shadow-2xl crow-gap-3 crow-transition-all crow-duration-500 crow-flex crow-flex-col ${className ?? ""}`,
1276
+ className: `crow-fixed crow-z-[999999] crow-shadow-2xl crow-gap-3 crow-transition-all crow-duration-500 crow-flex crow-flex-col crow-border crow-backdrop-blur-md crow-overflow-hidden ${className ?? ""}`,
1185
1277
  style: {
1186
1278
  ...baseStyle,
1187
- width: `min(${styles2.dimensions.width}px, calc(100vw - 32px))`,
1188
- height: `min(${styles2.dimensions.maxHeight}px, calc(100vh - 120px))`,
1189
- right: styles2.position.right,
1190
- bottom: styles2.position.bottom
1279
+ width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,
1280
+ height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`,
1281
+ right: styles.position.right,
1282
+ bottom: styles.position.bottom
1191
1283
  },
1192
1284
  children
1193
1285
  }
@@ -1204,20 +1296,20 @@ function WidgetHeader({
1204
1296
  isMinimized = false,
1205
1297
  onToggleMinimize
1206
1298
  }) {
1207
- const { agentName, styles: styles2 } = useWidgetStyleContext();
1299
+ const { agentName, styles } = useWidgetStyleContext();
1208
1300
  return /* @__PURE__ */ jsxRuntime.jsxs(
1209
1301
  "div",
1210
1302
  {
1211
1303
  className: "crow-flex crow-items-center crow-justify-between crow-mb-3 crow-pb-2 crow-border-b",
1212
- style: { borderColor: styles2.colors.border },
1304
+ style: { borderColor: styles.colors.border },
1213
1305
  children: [
1214
1306
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-items-center crow-gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
1215
1307
  "span",
1216
1308
  {
1217
1309
  className: "crow-text-sm crow-font-semibold",
1218
1310
  style: {
1219
- color: styles2.colors.text,
1220
- fontSize: styles2.typography.headerFontSize
1311
+ color: styles.colors.text,
1312
+ fontSize: styles.typography.headerFontSize
1221
1313
  },
1222
1314
  children: agentName
1223
1315
  }
@@ -1519,7 +1611,7 @@ function MessageBubble({
1519
1611
  toolCalls = [],
1520
1612
  isLoading = false
1521
1613
  }) {
1522
- const styles2 = useWidgetStyles2();
1614
+ const styles = useWidgetStyles2();
1523
1615
  const isWaiting = message.content === "Thinking..." || message.isBot && isLoading && !message.content;
1524
1616
  const hasThinking = message.isBot && message.thinking;
1525
1617
  const hasContent = message.content && message.content !== "Thinking...";
@@ -1546,12 +1638,12 @@ function MessageBubble({
1546
1638
  {
1547
1639
  className: "crow-max-w-[80%] crow-rounded-2xl crow-px-4 crow-py-2 crow-transition-all crow-duration-150",
1548
1640
  style: message.isBot ? {
1549
- background: styles2.colors.botBubble,
1550
- color: styles2.colors.botText
1641
+ background: styles.colors.botBubble,
1642
+ color: styles.colors.botText
1551
1643
  } : {
1552
- background: styles2.colors.userBubble,
1553
- color: styles2.colors.userText,
1554
- border: `1px solid ${styles2.colors.userBorder}`
1644
+ background: styles.colors.userBubble,
1645
+ color: styles.colors.userText,
1646
+ border: `1px solid ${styles.colors.userBorder}`
1555
1647
  },
1556
1648
  children: [
1557
1649
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-whitespace-pre-wrap", children: message.isBot ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -1615,8 +1707,8 @@ function MessageList({
1615
1707
  )) });
1616
1708
  }
1617
1709
  var MessagesContainer = React3.forwardRef(
1618
- ({ children, maxHeight }, ref) => {
1619
- const styles2 = useWidgetStyles2();
1710
+ ({ children }, ref) => {
1711
+ const styles = useWidgetStyles2();
1620
1712
  const internalRef = React3.useRef(null);
1621
1713
  const lastScrollHeightRef = React3.useRef(0);
1622
1714
  const isUserScrollingRef = React3.useRef(false);
@@ -1664,12 +1756,9 @@ var MessagesContainer = React3.forwardRef(
1664
1756
  initial: { opacity: 0 },
1665
1757
  animate: { opacity: 1 },
1666
1758
  exit: { opacity: 0 },
1667
- transition: { duration: styles2.animations.duration },
1759
+ transition: { duration: styles.animations.duration },
1668
1760
  className: "crow-relative crow-flex-1 crow-min-h-0 crow-rounded-2xl crow-mb-3 crow-overflow-y-auto crow-p-4 crow-space-y-3 crow-pointer-events-auto",
1669
- style: {
1670
- background: styles2.colors.messagesBackground,
1671
- ...maxHeight && { maxHeight }
1672
- },
1761
+ style: { background: styles.colors.messagesBackground },
1673
1762
  children
1674
1763
  }
1675
1764
  );
@@ -1734,8 +1823,8 @@ function WorkflowPanel({ workflow, onExit }) {
1734
1823
  );
1735
1824
  }
1736
1825
  function PoweredByBadge({ apiUrl = "" }) {
1737
- const styles2 = useWidgetStyles2();
1738
- const branding = styles2.branding;
1826
+ const styles = useWidgetStyles2();
1827
+ const branding = styles.branding;
1739
1828
  if (!branding.showPoweredBy) return null;
1740
1829
  const logoUrl = branding.logoUrl?.startsWith("http") ? branding.logoUrl : `${apiUrl}${branding.logoUrl}`;
1741
1830
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-flex crow-items-center crow-justify-center crow-gap-1.5 crow-mb-3 crow-text-xs crow-text-gray-400", children: [
@@ -1826,30 +1915,6 @@ var ModelSelector = ({
1826
1915
  ] }, provider)) })
1827
1916
  ] });
1828
1917
  };
1829
- var styles = `
1830
- *:focus-visible {
1831
- outline-offset: 0 !important;
1832
- --ring-offset: 0 !important;
1833
- }
1834
- textarea::-webkit-scrollbar {
1835
- width: 6px;
1836
- }
1837
- textarea::-webkit-scrollbar-track {
1838
- background: transparent;
1839
- }
1840
- textarea::-webkit-scrollbar-thumb {
1841
- background-color: #d1d5db;
1842
- border-radius: 3px;
1843
- }
1844
- textarea::-webkit-scrollbar-thumb:hover {
1845
- background-color: #9ca3af;
1846
- }
1847
- `;
1848
- if (typeof document !== "undefined") {
1849
- const styleSheet = document.createElement("style");
1850
- styleSheet.innerText = styles;
1851
- document.head.appendChild(styleSheet);
1852
- }
1853
1918
  var Textarea = React3__default.default.forwardRef(
1854
1919
  ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1855
1920
  "textarea",
@@ -1874,10 +1939,9 @@ var TooltipContent = React3__default.default.forwardRef(({ className, sideOffset
1874
1939
  ref,
1875
1940
  sideOffset,
1876
1941
  className: cn(
1877
- "crow-z-50 crow-overflow-hidden crow-rounded-md crow-border crow-px-3 crow-py-1.5 crow-text-sm crow-shadow-md",
1942
+ "crow-z-50 crow-overflow-hidden crow-rounded-md crow-border crow-border-gray-300 crow-bg-white crow-text-gray-900 crow-px-3 crow-py-1.5 crow-text-sm crow-shadow-md",
1878
1943
  className
1879
1944
  ),
1880
- style: { borderColor: "#d1d5db", background: "#ffffff", color: "#111827" },
1881
1945
  ...props
1882
1946
  }
1883
1947
  ));
@@ -1959,11 +2023,10 @@ var PromptInput = React3__default.default.forwardRef(
1959
2023
  {
1960
2024
  ref,
1961
2025
  className: cn(
1962
- "crow-rounded-3xl crow-border crow-p-1.5 crow-shadow-lg crow-transition-all crow-duration-300",
2026
+ "crow-rounded-3xl crow-border crow-border-gray-300 crow-bg-white crow-p-1.5 crow-shadow-lg crow-transition-all crow-duration-300",
1963
2027
  isLoading && "crow-border-red-500",
1964
2028
  className
1965
2029
  ),
1966
- style: { borderColor: isLoading ? void 0 : "#d1d5db", background: "#ffffff" },
1967
2030
  children
1968
2031
  }
1969
2032
  )
@@ -2073,12 +2136,11 @@ var PromptInputBox = React3__default.default.forwardRef(
2073
2136
  variant: "default",
2074
2137
  size: "icon",
2075
2138
  className: cn(
2076
- "crow-h-7 crow-w-7 crow-rounded-full crow-transition-all crow-duration-200"
2139
+ "crow-h-7 crow-w-7 crow-rounded-full crow-transition-all crow-duration-200",
2140
+ isLoading && "crow-bg-red-500 hover:crow-bg-red-500",
2141
+ hasContent && !isLoading && "crow-bg-black hover:crow-bg-gray-800",
2142
+ !hasContent && !isLoading && "crow-bg-transparent"
2077
2143
  ),
2078
- style: {
2079
- background: isLoading ? "#ef4444" : hasContent ? "#000000" : "transparent",
2080
- color: isLoading ? "#ffffff" : "#ffffff"
2081
- },
2082
2144
  onClick: () => {
2083
2145
  if (isLoading && onStop) {
2084
2146
  onStop();
@@ -2086,7 +2148,10 @@ var PromptInputBox = React3__default.default.forwardRef(
2086
2148
  handleSubmit();
2087
2149
  }
2088
2150
  },
2089
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "crow-h-3.5 crow-w-3.5", style: { fill: "white", color: "white" } }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: "crow-h-3.5 crow-w-3.5", style: { color: hasContent ? "#ffffff" : "#9ca3af" } })
2151
+ children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "crow-h-3.5 crow-w-3.5 crow-text-white", style: { fill: "white" } }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: cn(
2152
+ "crow-h-3.5 crow-w-3.5",
2153
+ hasContent ? "crow-text-white" : "crow-text-gray-400"
2154
+ ) })
2090
2155
  }
2091
2156
  )
2092
2157
  }
@@ -2098,6 +2163,129 @@ var PromptInputBox = React3__default.default.forwardRef(
2098
2163
  }
2099
2164
  );
2100
2165
  PromptInputBox.displayName = "PromptInputBox";
2166
+
2167
+ // src/styles/cssVars.ts
2168
+ var CSS_VAR_NAMES = {
2169
+ // Colors
2170
+ colors: {
2171
+ primary: "--crow-colors-primary",
2172
+ background: "--crow-colors-background",
2173
+ border: "--crow-colors-border",
2174
+ text: "--crow-colors-text",
2175
+ botBubble: "--crow-colors-bot-bubble",
2176
+ botText: "--crow-colors-bot-text",
2177
+ userBubble: "--crow-colors-user-bubble",
2178
+ userText: "--crow-colors-user-text",
2179
+ userBorder: "--crow-colors-user-border",
2180
+ messagesBackground: "--crow-colors-messages-background",
2181
+ bubbleBackground: "--crow-colors-bubble-background",
2182
+ bubbleBorder: "--crow-colors-bubble-border",
2183
+ bubbleIcon: "--crow-colors-bubble-icon"
2184
+ },
2185
+ // Dimensions
2186
+ dimensions: {
2187
+ width: "--crow-dimensions-width",
2188
+ maxHeight: "--crow-dimensions-max-height",
2189
+ messagesMaxHeight: "--crow-dimensions-messages-max-height",
2190
+ borderRadius: "--crow-dimensions-border-radius",
2191
+ padding: "--crow-dimensions-padding"
2192
+ },
2193
+ // Typography
2194
+ typography: {
2195
+ fontFamily: "--crow-typography-font-family",
2196
+ fontSize: "--crow-typography-font-size",
2197
+ headerFontSize: "--crow-typography-header-font-size",
2198
+ fontWeight: "--crow-typography-font-weight",
2199
+ lineHeight: "--crow-typography-line-height",
2200
+ letterSpacing: "--crow-typography-letter-spacing"
2201
+ },
2202
+ // Position
2203
+ position: {
2204
+ right: "--crow-position-right",
2205
+ bottom: "--crow-position-bottom",
2206
+ bubbleRight: "--crow-position-bubble-right",
2207
+ bubbleBottom: "--crow-position-bubble-bottom"
2208
+ },
2209
+ // Bubble
2210
+ bubble: {
2211
+ size: "--crow-bubble-size",
2212
+ iconSize: "--crow-bubble-icon-size"
2213
+ },
2214
+ // Shadows
2215
+ shadows: {
2216
+ widget: "--crow-shadows-widget",
2217
+ bubble: "--crow-shadows-bubble"
2218
+ },
2219
+ // Animations
2220
+ animations: {
2221
+ duration: "--crow-animations-duration"
2222
+ }
2223
+ };
2224
+ function stylesToCssVars(styles) {
2225
+ const vars = {};
2226
+ vars[CSS_VAR_NAMES.colors.primary] = styles.colors.primary;
2227
+ vars[CSS_VAR_NAMES.colors.background] = styles.colors.background;
2228
+ vars[CSS_VAR_NAMES.colors.border] = styles.colors.border;
2229
+ vars[CSS_VAR_NAMES.colors.text] = styles.colors.text;
2230
+ vars[CSS_VAR_NAMES.colors.botBubble] = styles.colors.botBubble;
2231
+ vars[CSS_VAR_NAMES.colors.botText] = styles.colors.botText;
2232
+ vars[CSS_VAR_NAMES.colors.userBubble] = styles.colors.userBubble;
2233
+ vars[CSS_VAR_NAMES.colors.userText] = styles.colors.userText;
2234
+ vars[CSS_VAR_NAMES.colors.userBorder] = styles.colors.userBorder;
2235
+ vars[CSS_VAR_NAMES.colors.messagesBackground] = styles.colors.messagesBackground;
2236
+ vars[CSS_VAR_NAMES.colors.bubbleBackground] = styles.colors.bubbleBackground;
2237
+ vars[CSS_VAR_NAMES.colors.bubbleBorder] = styles.colors.bubbleBorder;
2238
+ vars[CSS_VAR_NAMES.colors.bubbleIcon] = styles.colors.bubbleIcon;
2239
+ vars[CSS_VAR_NAMES.dimensions.width] = `${styles.dimensions.width}px`;
2240
+ vars[CSS_VAR_NAMES.dimensions.maxHeight] = `${styles.dimensions.maxHeight}px`;
2241
+ vars[CSS_VAR_NAMES.dimensions.messagesMaxHeight] = `${styles.dimensions.messagesMaxHeight}px`;
2242
+ vars[CSS_VAR_NAMES.dimensions.borderRadius] = `${styles.dimensions.borderRadius}px`;
2243
+ vars[CSS_VAR_NAMES.dimensions.padding] = `${styles.dimensions.padding}px`;
2244
+ vars[CSS_VAR_NAMES.typography.fontFamily] = styles.typography.fontFamily;
2245
+ vars[CSS_VAR_NAMES.typography.fontSize] = `${styles.typography.fontSize}px`;
2246
+ vars[CSS_VAR_NAMES.typography.headerFontSize] = `${styles.typography.headerFontSize}px`;
2247
+ vars[CSS_VAR_NAMES.typography.fontWeight] = String(styles.typography.fontWeight);
2248
+ vars[CSS_VAR_NAMES.typography.lineHeight] = String(styles.typography.lineHeight);
2249
+ vars[CSS_VAR_NAMES.typography.letterSpacing] = `${styles.typography.letterSpacing}px`;
2250
+ vars[CSS_VAR_NAMES.position.right] = `${styles.position.right}px`;
2251
+ vars[CSS_VAR_NAMES.position.bottom] = `${styles.position.bottom}px`;
2252
+ vars[CSS_VAR_NAMES.position.bubbleRight] = `${styles.position.bubbleRight}px`;
2253
+ vars[CSS_VAR_NAMES.position.bubbleBottom] = `${styles.position.bubbleBottom}px`;
2254
+ vars[CSS_VAR_NAMES.bubble.size] = `${styles.bubble.size}px`;
2255
+ vars[CSS_VAR_NAMES.bubble.iconSize] = `${styles.bubble.iconSize}px`;
2256
+ vars[CSS_VAR_NAMES.shadows.widget] = styles.shadows.widget;
2257
+ vars[CSS_VAR_NAMES.shadows.bubble] = styles.shadows.bubble;
2258
+ vars[CSS_VAR_NAMES.animations.duration] = `${styles.animations.duration}s`;
2259
+ return vars;
2260
+ }
2261
+ function getCssVar(varName, element = document.documentElement) {
2262
+ return getComputedStyle(element).getPropertyValue(varName).trim();
2263
+ }
2264
+
2265
+ // src/styles/inject.ts
2266
+ var STYLE_ID = "crow-ui-styles";
2267
+ var WIDGET_CSS = `*,: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: }
2268
+
2269
+ /*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.crow-pointer-events-none{pointer-events:none}.crow-pointer-events-auto{pointer-events:auto}.crow-fixed{position:fixed}.crow-absolute{position:absolute}.crow-relative{position:relative}.crow-sticky{position:sticky}.crow-bottom-0{bottom:0}.crow-bottom-full{bottom:100%}.crow-left-0{left:0}.crow-right-0{right:0}.crow-top-0{top:0}.crow-z-50{z-index:50}.crow-z-\\[999999\\]{z-index:999999}.crow-m-0{margin:0}.crow-my-1{margin-top:.25rem}.crow-mb-1,.crow-my-1{margin-bottom:.25rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-ml-0{margin-left:0}.crow-ml-0\\.5{margin-left:.125rem}.crow-ml-2{margin-left:.5rem}.crow-ml-4{margin-left:1rem}.crow-mt-0{margin-top:0}.crow-mt-0\\.5{margin-top:.125rem}.crow-mt-1{margin-top:.25rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-inline-block{display:inline-block}.crow-flex{display:flex}.crow-inline-flex{display:inline-flex}.crow-h-10{height:2.5rem}.crow-h-12{height:3rem}.crow-h-2{height:.5rem}.crow-h-3{height:.75rem}.crow-h-3\\.5{height:.875rem}.crow-h-4{height:1rem}.crow-h-7{height:1.75rem}.crow-h-8{height:2rem}.crow-h-full{height:100%}.crow-max-h-32{max-height:8rem}.crow-max-h-\\[200px\\]{max-height:200px}.crow-min-h-0{min-height:0}.crow-min-h-\\[32px\\]{min-height:32px}.crow-w-0{width:0}.crow-w-0\\.5{width:.125rem}.crow-w-2{width:.5rem}.crow-w-3{width:.75rem}.crow-w-3\\.5{width:.875rem}.crow-w-4{width:1rem}.crow-w-7{width:1.75rem}.crow-w-8{width:2rem}.crow-w-full{width:100%}.crow-min-w-0{min-width:0}.crow-min-w-\\[180px\\]{min-width:180px}.crow-max-w-\\[80\\%\\]{max-width:80%}.crow-max-w-\\[90\\%\\]{max-width:90%}.crow-max-w-full{max-width:100%}.crow-flex-1{flex:1 1 0%}.crow-flex-shrink-0{flex-shrink:0}.crow-rotate-180{--tw-rotate:180deg}.crow-rotate-180,.crow-scale-100{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))}.crow-scale-100{--tw-scale-x:1;--tw-scale-y:1}.crow-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.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))}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-pulse{animation:crow-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}@keyframes crow-spin{to{transform:rotate(1turn)}}.crow-animate-spin{animation:crow-spin 1s linear infinite}.crow-cursor-default{cursor:default}.crow-cursor-not-allowed{cursor:not-allowed}.crow-cursor-pointer{cursor:pointer}.crow-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.crow-resize-none{resize:none}.crow-list-decimal{list-style-type:decimal}.crow-list-disc{list-style-type:disc}.crow-flex-row{flex-direction:row}.crow-flex-col{flex-direction:column}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-justify-start{justify-content:flex-start}.crow-justify-end{justify-content:flex-end}.crow-justify-center{justify-content:center}.crow-justify-between{justify-content:space-between}.crow-gap-1{gap:.25rem}.crow-gap-1\\.5{gap:.375rem}.crow-gap-2{gap:.5rem}.crow-gap-3{gap:.75rem}.crow-gap-4{gap:1rem}.crow-gap-6{gap:1.5rem}.crow-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.crow-space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.crow-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.crow-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.crow-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.crow-overflow-hidden{overflow:hidden}.crow-overflow-visible{overflow:visible}.crow-overflow-x-auto{overflow-x:auto}.crow-overflow-y-auto{overflow-y:auto}.crow-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crow-whitespace-pre-wrap{white-space:pre-wrap}.crow-break-words{overflow-wrap:break-word}.crow-rounded{border-radius:.25rem}.crow-rounded-2xl{border-radius:1rem}.crow-rounded-3xl{border-radius:1.5rem}.crow-rounded-full{border-radius:9999px}.crow-rounded-lg{border-radius:.5rem}.crow-rounded-md{border-radius:.375rem}.crow-rounded-xl{border-radius:.75rem}.crow-border{border-width:1px}.crow-border-b{border-bottom-width:1px}.crow-border-l{border-left-width:1px}.crow-border-l-2{border-left-width:2px}.crow-border-r{border-right-width:1px}.crow-border-t{border-top-width:1px}.crow-border-none{border-style:none}.crow-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.crow-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.crow-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.crow-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.crow-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.crow-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.crow-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.crow-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.crow-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.crow-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.crow-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.crow-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.crow-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.crow-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.crow-bg-transparent{background-color:transparent}.crow-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.crow-p-0{padding:0}.crow-p-1{padding:.25rem}.crow-p-1\\.5{padding:.375rem}.crow-p-2{padding:.5rem}.crow-p-3{padding:.75rem}.crow-p-4{padding:1rem}.crow-p-6{padding:1.5rem}.crow-px-1{padding-left:.25rem;padding-right:.25rem}.crow-px-2{padding-left:.5rem;padding-right:.5rem}.crow-px-3{padding-left:.75rem;padding-right:.75rem}.crow-px-4{padding-left:1rem;padding-right:1rem}.crow-px-6{padding-left:1.5rem;padding-right:1.5rem}.crow-py-0{padding-top:0;padding-bottom:0}.crow-py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.crow-py-1{padding-top:.25rem;padding-bottom:.25rem}.crow-py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.crow-py-2{padding-top:.5rem;padding-bottom:.5rem}.crow-py-3{padding-top:.75rem;padding-bottom:.75rem}.crow-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.crow-py-8{padding-top:2rem;padding-bottom:2rem}.crow-pb-2{padding-bottom:.5rem}.crow-pl-3{padding-left:.75rem}.crow-pl-4{padding-left:1rem}.crow-pl-5{padding-left:1.25rem}.crow-pr-4{padding-right:1rem}.crow-pt-1{padding-top:.25rem}.crow-text-left{text-align:left}.crow-text-center{text-align:center}.crow-text-right{text-align:right}.crow-align-text-bottom{vertical-align:text-bottom}.crow-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.crow-text-base{font-size:1rem;line-height:1.5rem}.crow-text-lg{font-size:1.125rem;line-height:1.75rem}.crow-text-sm{font-size:.875rem;line-height:1.25rem}.crow-text-xs{font-size:.75rem;line-height:1rem}.crow-font-bold{font-weight:700}.crow-font-medium{font-weight:500}.crow-font-semibold{font-weight:600}.crow-uppercase{text-transform:uppercase}.crow-leading-relaxed{line-height:1.625}.crow-tracking-wide{letter-spacing:.025em}.crow-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.crow-text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.crow-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.crow-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.crow-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.crow-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.crow-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.crow-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.crow-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.crow-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.crow-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.crow-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.crow-underline{text-decoration-line:underline}.crow-opacity-0{opacity:0}.crow-opacity-100{opacity:1}.crow-opacity-50{opacity:.5}.crow-opacity-60{opacity:.6}.crow-shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.crow-shadow-2xl,.crow-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-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)}.crow-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);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.crow-backdrop-blur-md,.crow-backdrop-blur-sm{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)}.crow-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.crow-transition{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);transition-duration:.15s}.crow-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-duration-150{transition-duration:.15s}.crow-duration-200{transition-duration:.2s}.crow-duration-300{transition-duration:.3s}.crow-duration-500{transition-duration:.5s}.crow-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}.crow-animate-pulse{animation:crow-pulse 1.5s ease-in-out infinite}.crow-animation-delay-100{animation-delay:.1s}.crow-animation-delay-200{animation-delay:.2s}@keyframes crow-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes crow-slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes crow-pulse{0%,to{opacity:1}50%{opacity:.4}}.crow-overflow-y-auto::-webkit-scrollbar{width:6px}.crow-overflow-y-auto::-webkit-scrollbar-track{background:transparent}.crow-overflow-y-auto::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:3px}.crow-overflow-y-auto::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.crow-focus-visible\\:crow-outline-none:focus-visible{outline:none}.crow-focus-visible\\:crow-ring-2:focus-visible{box-shadow:0 0 0 2px var(--crow-primary,#6366f1)}:host{--crow-primary:#6366f1;--crow-primary-dark:#4f46e5;--crow-secondary:#f1f5f9;--crow-accent:#10b981}@media (prefers-color-scheme:dark){:host{--crow-primary:#818cf8;--crow-primary-dark:#6366f1}}.placeholder\\:crow-text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\\:crow-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.last\\:crow-mb-0:last-child{margin-bottom:0}.last\\:crow-border-0:last-child{border-width:0}.hover\\:crow-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.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))}.hover\\:crow-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\\:crow-bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\\:crow-text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\\:crow-opacity-100:hover{opacity:1}.focus\\:crow-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:crow-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)}.focus\\:crow-ring-0:focus,.focus\\:crow-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:crow-ring-2: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(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\:crow-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:crow-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:crow-ring-0: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(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)}.disabled\\:crow-pointer-events-none:disabled{pointer-events:none}.disabled\\:crow-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:crow-opacity-50:disabled{opacity:.5}`;
2270
+ var injected = false;
2271
+ function injectStyles(target = document) {
2272
+ if (target === document && injected) return;
2273
+ if (typeof document === "undefined") return;
2274
+ const existingStyle = target === document ? document.getElementById(STYLE_ID) : target.querySelector(`#${STYLE_ID}`);
2275
+ if (existingStyle) {
2276
+ if (target === document) injected = true;
2277
+ return;
2278
+ }
2279
+ const style = document.createElement("style");
2280
+ style.id = STYLE_ID;
2281
+ style.textContent = WIDGET_CSS;
2282
+ if (target === document) {
2283
+ document.head.appendChild(style);
2284
+ injected = true;
2285
+ } else {
2286
+ target.prepend(style);
2287
+ }
2288
+ }
2101
2289
  function CrowWidget({
2102
2290
  productId,
2103
2291
  apiUrl = "",
@@ -2106,14 +2294,16 @@ function CrowWidget({
2106
2294
  previewMode = false,
2107
2295
  onReady
2108
2296
  }) {
2109
- const { styles: styles2, isLoading: isLoadingStyles, agentName } = useWidgetStyles({
2297
+ const { styles, isLoading: isLoadingStyles, agentName } = useWidgetStyles({
2110
2298
  productId,
2111
2299
  apiUrl,
2112
2300
  propStyles,
2113
2301
  skip: previewMode
2114
2302
  });
2303
+ const cssVars = stylesToCssVars(styles);
2115
2304
  const messagesContainerRef = React3.useRef(null);
2116
2305
  const executeClientToolRef = React3.useRef(null);
2306
+ const submitToolResultRef = React3.useRef(null);
2117
2307
  const [isCollapsed, setIsCollapsed] = React3.useState(variant === "floating");
2118
2308
  const [showConversationList, setShowConversationList] = React3.useState(false);
2119
2309
  const [isVerifiedUser, setIsVerifiedUser] = React3.useState(false);
@@ -2160,11 +2350,30 @@ function CrowWidget({
2160
2350
  break;
2161
2351
  }
2162
2352
  },
2163
- onToolCall: (event) => {
2164
- if (event.type === "client_call" && event.toolName) {
2165
- console.log("[Crow Widget] Executing client tool:", event.toolName, event.arguments);
2166
- const result = executeClientToolRef.current?.(event.toolName, event.arguments || {});
2167
- result?.then((r) => console.log("[Crow Widget] Tool result:", r)).catch((e) => console.error("[Crow Widget] Tool error:", e));
2353
+ onToolCall: async (event) => {
2354
+ if (event.type === "client_call" && event.toolName && event.toolCallId) {
2355
+ try {
2356
+ const result = await executeClientToolRef.current?.(
2357
+ event.toolName,
2358
+ event.arguments || {}
2359
+ );
2360
+ if (result && submitToolResultRef.current) {
2361
+ await submitToolResultRef.current(
2362
+ event.toolCallId,
2363
+ event.toolName,
2364
+ result
2365
+ );
2366
+ }
2367
+ } catch (e) {
2368
+ console.error("[Crow Widget] Tool error:", e);
2369
+ if (submitToolResultRef.current) {
2370
+ await submitToolResultRef.current(
2371
+ event.toolCallId,
2372
+ event.toolName,
2373
+ { success: false, error: String(e) }
2374
+ );
2375
+ }
2376
+ }
2168
2377
  }
2169
2378
  },
2170
2379
  onRestoredConversation: () => {
@@ -2210,6 +2419,7 @@ function CrowWidget({
2210
2419
  }
2211
2420
  });
2212
2421
  executeClientToolRef.current = executeClientTool;
2422
+ submitToolResultRef.current = chat.submitToolResult;
2213
2423
  React3.useEffect(() => {
2214
2424
  if (!isLoadingStyles) {
2215
2425
  onReady?.();
@@ -2249,118 +2459,71 @@ function CrowWidget({
2249
2459
  const handleBubbleClick = () => {
2250
2460
  setIsCollapsed(!isCollapsed);
2251
2461
  };
2252
- return /* @__PURE__ */ jsxRuntime.jsxs(
2462
+ const renderWidgetContent = () => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2463
+ /* @__PURE__ */ jsxRuntime.jsx(
2464
+ WidgetHeader,
2465
+ {
2466
+ isVerifiedUser,
2467
+ showConversationList,
2468
+ onNewChat: handleNewChat,
2469
+ onToggleHistory: handleToggleHistory
2470
+ }
2471
+ ),
2472
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showConversationList && isVerifiedUser && /* @__PURE__ */ jsxRuntime.jsx(
2473
+ ConversationList,
2474
+ {
2475
+ conversations: conversations.conversations,
2476
+ currentConversationId: chat.conversationId,
2477
+ onSelect: handleSelectConversation,
2478
+ onClose: handleCloseConversationList
2479
+ }
2480
+ ) }),
2481
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: activeWorkflow && /* @__PURE__ */ jsxRuntime.jsx(
2482
+ WorkflowPanel,
2483
+ {
2484
+ workflow: activeWorkflow,
2485
+ onExit: handleExitWorkflow
2486
+ }
2487
+ ) }),
2488
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: (chat.messages.length > 0 || conversations.isLoadingHistory) && /* @__PURE__ */ jsxRuntime.jsx(MessagesContainer, { ref: messagesContainerRef, children: /* @__PURE__ */ jsxRuntime.jsx(
2489
+ MessageList,
2490
+ {
2491
+ messages: chat.messages,
2492
+ activeToolCalls: chat.activeToolCalls,
2493
+ isLoadingHistory: conversations.isLoadingHistory,
2494
+ isGenerating: chat.isLoading
2495
+ }
2496
+ ) }) }),
2497
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-mt-auto crow-w-full", children: [
2498
+ /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
2499
+ /* @__PURE__ */ jsxRuntime.jsx(
2500
+ PromptInputBox,
2501
+ {
2502
+ onSend: handleSend,
2503
+ onStop: chat.stopGeneration,
2504
+ placeholder: "Type your message...",
2505
+ isLoading: chat.isLoading,
2506
+ className: "crow-backdrop-blur-md"
2507
+ }
2508
+ )
2509
+ ] })
2510
+ ] });
2511
+ return /* @__PURE__ */ jsxRuntime.jsx(ShadowContainer, { styles: WIDGET_CSS, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-widget-root", style: cssVars, children: /* @__PURE__ */ jsxRuntime.jsxs(
2253
2512
  WidgetStyleProvider,
2254
2513
  {
2255
- styles: styles2,
2514
+ styles,
2256
2515
  agentName,
2257
2516
  isLoading: isLoadingStyles,
2258
2517
  variant,
2259
2518
  children: [
2260
2519
  variant === "floating" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2261
2520
  /* @__PURE__ */ jsxRuntime.jsx(ChatBubble, { isExpanded: !isCollapsed, onClick: handleBubbleClick }),
2262
- !isCollapsed && /* @__PURE__ */ jsxRuntime.jsxs(WidgetShell, { children: [
2263
- /* @__PURE__ */ jsxRuntime.jsx(
2264
- WidgetHeader,
2265
- {
2266
- isVerifiedUser,
2267
- showConversationList,
2268
- onNewChat: handleNewChat,
2269
- onToggleHistory: handleToggleHistory
2270
- }
2271
- ),
2272
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showConversationList && isVerifiedUser && /* @__PURE__ */ jsxRuntime.jsx(
2273
- ConversationList,
2274
- {
2275
- conversations: conversations.conversations,
2276
- currentConversationId: chat.conversationId,
2277
- onSelect: handleSelectConversation,
2278
- onClose: handleCloseConversationList
2279
- }
2280
- ) }),
2281
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: activeWorkflow && /* @__PURE__ */ jsxRuntime.jsx(
2282
- WorkflowPanel,
2283
- {
2284
- workflow: activeWorkflow,
2285
- onExit: handleExitWorkflow
2286
- }
2287
- ) }),
2288
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: (chat.messages.length > 0 || conversations.isLoadingHistory) && /* @__PURE__ */ jsxRuntime.jsx(MessagesContainer, { ref: messagesContainerRef, maxHeight: styles2.dimensions.messagesMaxHeight, children: /* @__PURE__ */ jsxRuntime.jsx(
2289
- MessageList,
2290
- {
2291
- messages: chat.messages,
2292
- activeToolCalls: chat.activeToolCalls,
2293
- isLoadingHistory: conversations.isLoadingHistory,
2294
- isGenerating: chat.isLoading
2295
- }
2296
- ) }) }),
2297
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-mt-auto", children: [
2298
- /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
2299
- /* @__PURE__ */ jsxRuntime.jsx(
2300
- PromptInputBox,
2301
- {
2302
- onSend: handleSend,
2303
- onStop: chat.stopGeneration,
2304
- placeholder: "Type your message...",
2305
- isLoading: chat.isLoading,
2306
- className: "crow-backdrop-blur-md"
2307
- }
2308
- )
2309
- ] })
2310
- ] })
2521
+ !isCollapsed && /* @__PURE__ */ jsxRuntime.jsx(WidgetShell, { children: renderWidgetContent() })
2311
2522
  ] }),
2312
- variant === "embedded" && /* @__PURE__ */ jsxRuntime.jsxs(WidgetShell, { children: [
2313
- /* @__PURE__ */ jsxRuntime.jsx(
2314
- WidgetHeader,
2315
- {
2316
- isVerifiedUser,
2317
- showConversationList,
2318
- onNewChat: handleNewChat,
2319
- onToggleHistory: handleToggleHistory
2320
- }
2321
- ),
2322
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showConversationList && isVerifiedUser && /* @__PURE__ */ jsxRuntime.jsx(
2323
- ConversationList,
2324
- {
2325
- conversations: conversations.conversations,
2326
- currentConversationId: chat.conversationId,
2327
- onSelect: handleSelectConversation,
2328
- onClose: handleCloseConversationList
2329
- }
2330
- ) }),
2331
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: activeWorkflow && /* @__PURE__ */ jsxRuntime.jsx(
2332
- WorkflowPanel,
2333
- {
2334
- workflow: activeWorkflow,
2335
- onExit: handleExitWorkflow
2336
- }
2337
- ) }),
2338
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: (chat.messages.length > 0 || conversations.isLoadingHistory) && /* @__PURE__ */ jsxRuntime.jsx(MessagesContainer, { ref: messagesContainerRef, maxHeight: styles2.dimensions.messagesMaxHeight, children: /* @__PURE__ */ jsxRuntime.jsx(
2339
- MessageList,
2340
- {
2341
- messages: chat.messages,
2342
- activeToolCalls: chat.activeToolCalls,
2343
- isLoadingHistory: conversations.isLoadingHistory,
2344
- isGenerating: chat.isLoading
2345
- }
2346
- ) }) }),
2347
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-mt-auto", children: [
2348
- /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
2349
- /* @__PURE__ */ jsxRuntime.jsx(
2350
- PromptInputBox,
2351
- {
2352
- onSend: handleSend,
2353
- onStop: chat.stopGeneration,
2354
- placeholder: "Type your message...",
2355
- isLoading: chat.isLoading,
2356
- className: "crow-backdrop-blur-md"
2357
- }
2358
- )
2359
- ] })
2360
- ] })
2523
+ variant === "embedded" && /* @__PURE__ */ jsxRuntime.jsx(WidgetShell, { children: renderWidgetContent() })
2361
2524
  ]
2362
2525
  }
2363
- );
2526
+ ) }) });
2364
2527
  }
2365
2528
  function CrowCopilot({
2366
2529
  productId,
@@ -2375,7 +2538,7 @@ function CrowCopilot({
2375
2538
  className,
2376
2539
  onReady
2377
2540
  }) {
2378
- const { styles: styles2, isLoading: isLoadingStyles, agentName } = useCopilotStyles({
2541
+ const { styles, isLoading: isLoadingStyles, agentName } = useCopilotStyles({
2379
2542
  productId,
2380
2543
  apiUrl,
2381
2544
  propStyles,
@@ -2464,7 +2627,7 @@ function CrowCopilot({
2464
2627
  return /* @__PURE__ */ jsxRuntime.jsx(
2465
2628
  CopilotStyleProvider,
2466
2629
  {
2467
- styles: styles2,
2630
+ styles,
2468
2631
  agentName: agentName || title,
2469
2632
  isLoading: isLoadingStyles,
2470
2633
  children: /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2473,13 +2636,13 @@ function CrowCopilot({
2473
2636
  className: `crow-flex crow-flex-col crow-h-full ${position === "left" ? "crow-border-r" : "crow-border-l"} ${className || ""}`,
2474
2637
  style: {
2475
2638
  width: widthStyle,
2476
- fontFamily: styles2.typography.fontFamily,
2477
- fontSize: styles2.typography.fontSize,
2478
- fontWeight: styles2.typography.fontWeight,
2479
- lineHeight: styles2.typography.lineHeight,
2480
- letterSpacing: styles2.typography.letterSpacing,
2481
- background: styles2.colors.background,
2482
- borderColor: styles2.colors.border
2639
+ fontFamily: styles.typography.fontFamily,
2640
+ fontSize: styles.typography.fontSize,
2641
+ fontWeight: styles.typography.fontWeight,
2642
+ lineHeight: styles.typography.lineHeight,
2643
+ letterSpacing: styles.typography.letterSpacing,
2644
+ background: styles.colors.background,
2645
+ borderColor: styles.colors.border
2483
2646
  },
2484
2647
  children: [
2485
2648
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2487,8 +2650,8 @@ function CrowCopilot({
2487
2650
  {
2488
2651
  className: "crow-flex crow-items-center crow-justify-between crow-px-4 crow-py-3 crow-border-b",
2489
2652
  style: {
2490
- height: styles2.dimensions.headerHeight,
2491
- borderColor: styles2.colors.border
2653
+ height: styles.dimensions.headerHeight,
2654
+ borderColor: styles.colors.border
2492
2655
  },
2493
2656
  children: [
2494
2657
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -2496,8 +2659,8 @@ function CrowCopilot({
2496
2659
  {
2497
2660
  className: "crow-font-semibold",
2498
2661
  style: {
2499
- color: styles2.colors.text,
2500
- fontSize: styles2.typography.headerFontSize
2662
+ color: styles.colors.text,
2663
+ fontSize: styles.typography.headerFontSize
2501
2664
  },
2502
2665
  children: agentName || title
2503
2666
  }
@@ -2554,8 +2717,8 @@ function CrowCopilot({
2554
2717
  isGenerating: chat.isLoading
2555
2718
  }
2556
2719
  ) }),
2557
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-p-3 crow-border-t", style: { borderColor: styles2.colors.border }, children: [
2558
- styles2.branding.showPoweredBy && /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
2720
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-p-3 crow-border-t", style: { borderColor: styles.colors.border }, children: [
2721
+ styles.branding.showPoweredBy && /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
2559
2722
  /* @__PURE__ */ jsxRuntime.jsx(
2560
2723
  PromptInputBox,
2561
2724
  {
@@ -2658,6 +2821,7 @@ function CrowProvider({
2658
2821
  }
2659
2822
 
2660
2823
  exports.AVAILABLE_MODELS = AVAILABLE_MODELS;
2824
+ exports.CSS_VAR_NAMES = CSS_VAR_NAMES;
2661
2825
  exports.ChatBubble = ChatBubble;
2662
2826
  exports.ConversationList = ConversationList;
2663
2827
  exports.CopilotStyleProvider = CopilotStyleProvider;
@@ -2668,7 +2832,6 @@ exports.DEFAULT_COPILOT_STYLES = DEFAULT_COPILOT_STYLES;
2668
2832
  exports.DEFAULT_MODEL = DEFAULT_MODEL;
2669
2833
  exports.DEFAULT_WELCOME_MESSAGE = DEFAULT_WELCOME_MESSAGE;
2670
2834
  exports.DEFAULT_WIDGET_STYLES = DEFAULT_WIDGET_STYLES;
2671
- exports.GlassCard = GlassCard;
2672
2835
  exports.LoadingHistory = LoadingHistory;
2673
2836
  exports.MESSAGES_CONTAINER_ID = MESSAGES_CONTAINER_ID;
2674
2837
  exports.MessageBubble = MessageBubble;
@@ -2678,16 +2841,21 @@ exports.ModelSelector = ModelSelector;
2678
2841
  exports.PoweredByBadge = PoweredByBadge;
2679
2842
  exports.PromptInputBox = PromptInputBox;
2680
2843
  exports.ReasoningTrace = ReasoningTrace;
2844
+ exports.ShadowContainer = ShadowContainer;
2681
2845
  exports.StreamingText = StreamingText;
2682
2846
  exports.ThinkingIndicator = ThinkingIndicator;
2847
+ exports.WIDGET_CSS = WIDGET_CSS;
2683
2848
  exports.WidgetHeader = WidgetHeader;
2684
2849
  exports.WidgetShell = WidgetShell;
2685
2850
  exports.WidgetStyleProvider = WidgetStyleProvider;
2686
2851
  exports.WorkflowPanel = WorkflowPanel;
2687
2852
  exports.clearStyleCache = clearStyleCache;
2853
+ exports.getCssVar = getCssVar;
2854
+ exports.injectStyles = injectStyles;
2688
2855
  exports.mergeCopilotStyles = mergeCopilotStyles;
2689
2856
  exports.mergeWidgetStyles = mergeWidgetStyles;
2690
2857
  exports.stylesToCSSVariables = stylesToCSSVariables;
2858
+ exports.stylesToCssVars = stylesToCssVars;
2691
2859
  exports.useChat = useChat;
2692
2860
  exports.useConversations = useConversations;
2693
2861
  exports.useCopilotStyleContext = useCopilotStyleContext;