@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.js CHANGED
@@ -1,31 +1,12 @@
1
1
  import React3, { createContext, forwardRef, useEffect, useRef, useCallback, useContext, useState, useMemo, useLayoutEffect } from 'react';
2
2
  import { motion, AnimatePresence } from 'framer-motion';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+ import { createPortal } from 'react-dom';
4
5
  import { Square, ArrowUp, ChevronDown, Check, MessageCircle, Plus, History, ChevronUp, Brain, ChevronRight, Loader2, X } from 'lucide-react';
5
6
  import ReactMarkdown from 'react-markdown';
6
7
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
7
8
  import { CrowClient } from '@usecrow/client';
8
9
 
9
- // src/styles/inject.ts
10
- var STYLE_ID = "crow-ui-styles";
11
- 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: }
12
-
13
- /*! 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}`;
14
- var injected = false;
15
- function injectStyles() {
16
- if (injected || typeof document === "undefined") return;
17
- if (document.getElementById(STYLE_ID)) {
18
- injected = true;
19
- return;
20
- }
21
- const style = document.createElement("style");
22
- style.id = STYLE_ID;
23
- style.textContent = CSS_CONTENT;
24
- document.head.appendChild(style);
25
- injected = true;
26
- }
27
- injectStyles();
28
-
29
10
  // src/utils.ts
30
11
  var cn = (...classes) => classes.filter(Boolean).join(" ");
31
12
  var formatTime = (date) => date.toLocaleTimeString("en-US", {
@@ -100,6 +81,7 @@ function useChat({
100
81
  async (message, botMsgId) => {
101
82
  let accumulatedText = "";
102
83
  let firstChunk = true;
84
+ const pendingClientTools = [];
103
85
  abortControllerRef.current = new AbortController();
104
86
  try {
105
87
  const identityToken = window.__crow_identity_token;
@@ -131,6 +113,14 @@ function useChat({
131
113
  const data = line.slice(6).trim();
132
114
  if (data === "[DONE]") {
133
115
  setIsLoading(false);
116
+ for (const tool of pendingClientTools) {
117
+ onToolCall?.({
118
+ type: "client_call",
119
+ toolName: tool.toolName,
120
+ toolCallId: tool.toolCallId,
121
+ arguments: tool.arguments
122
+ });
123
+ }
134
124
  return;
135
125
  }
136
126
  try {
@@ -227,9 +217,9 @@ function useChat({
227
217
  );
228
218
  break;
229
219
  case "client_tool_call":
230
- onToolCall?.({
231
- type: "client_call",
220
+ pendingClientTools.push({
232
221
  toolName: parsed.tool_name,
222
+ toolCallId: parsed.tool_call_id,
233
223
  arguments: parsed.arguments
234
224
  });
235
225
  break;
@@ -343,6 +333,102 @@ function useChat({
343
333
  const loadMessages = useCallback((historyMessages) => {
344
334
  setMessages(historyMessages);
345
335
  }, []);
336
+ const submitToolResult = useCallback(
337
+ async (toolCallId, toolName, result) => {
338
+ if (!conversationId) {
339
+ console.error("[Crow] Cannot submit tool result: no conversation ID");
340
+ return;
341
+ }
342
+ const botMsgId = generateMessageId("bot");
343
+ const pendingClientTools = [];
344
+ setMessages((prev) => [
345
+ ...prev,
346
+ {
347
+ id: botMsgId,
348
+ content: "",
349
+ isBot: true,
350
+ timestamp: /* @__PURE__ */ new Date()
351
+ }
352
+ ]);
353
+ setIsLoading(true);
354
+ try {
355
+ const identityToken = window.__crow_identity_token;
356
+ const response = await fetch(`${apiUrl}/api/chat/tool-result`, {
357
+ method: "POST",
358
+ headers: { "Content-Type": "application/json" },
359
+ body: JSON.stringify({
360
+ product_id: productId,
361
+ conversation_id: conversationId,
362
+ tool_call_id: toolCallId,
363
+ tool_name: toolName,
364
+ result,
365
+ identity_token: identityToken,
366
+ model: selectedModel
367
+ })
368
+ });
369
+ if (!response.ok) {
370
+ throw new Error(`HTTP error! status: ${response.status}`);
371
+ }
372
+ const reader = response.body?.getReader();
373
+ const decoder = new TextDecoder();
374
+ let accumulatedText = "";
375
+ if (reader) {
376
+ while (true) {
377
+ const { done, value } = await reader.read();
378
+ if (done) break;
379
+ const chunk = decoder.decode(value);
380
+ const lines = chunk.split("\n");
381
+ for (const line of lines) {
382
+ if (line.startsWith("data: ")) {
383
+ const data = line.slice(6).trim();
384
+ if (data === "[DONE]") {
385
+ setIsLoading(false);
386
+ for (const tool of pendingClientTools) {
387
+ onToolCall?.({
388
+ type: "client_call",
389
+ toolName: tool.toolName,
390
+ toolCallId: tool.toolCallId,
391
+ arguments: tool.arguments
392
+ });
393
+ }
394
+ return;
395
+ }
396
+ try {
397
+ const parsed = JSON.parse(data);
398
+ if (parsed.type === "content") {
399
+ accumulatedText += parsed.content;
400
+ setMessages(
401
+ (prev) => prev.map(
402
+ (msg) => msg.id === botMsgId ? { ...msg, content: accumulatedText } : msg
403
+ )
404
+ );
405
+ } else if (parsed.type === "client_tool_call") {
406
+ pendingClientTools.push({
407
+ toolName: parsed.tool_name,
408
+ toolCallId: parsed.tool_call_id,
409
+ arguments: parsed.arguments
410
+ });
411
+ }
412
+ } catch (e) {
413
+ console.error("[Crow] Parse error in tool result response:", e);
414
+ }
415
+ }
416
+ }
417
+ }
418
+ }
419
+ } catch (error) {
420
+ console.error("[Crow] Error submitting tool result:", error);
421
+ setMessages(
422
+ (prev) => prev.map(
423
+ (msg) => msg.id === botMsgId ? { ...msg, content: "Sorry, I encountered an error processing the tool result." } : msg
424
+ )
425
+ );
426
+ } finally {
427
+ setIsLoading(false);
428
+ }
429
+ },
430
+ [apiUrl, productId, conversationId, selectedModel]
431
+ );
346
432
  return {
347
433
  messages,
348
434
  isLoading,
@@ -354,7 +440,8 @@ function useChat({
354
440
  sendMessage,
355
441
  stopGeneration,
356
442
  resetMessages,
357
- loadMessages
443
+ loadMessages,
444
+ submitToolResult
358
445
  };
359
446
  }
360
447
  function useConversations({ productId, apiUrl = "" }) {
@@ -847,29 +934,29 @@ function mergeCopilotStyles(dbStyles, propStyles) {
847
934
  }
848
935
  return result;
849
936
  }
850
- function stylesToCSSVariables(styles2) {
937
+ function stylesToCSSVariables(styles) {
851
938
  return {
852
939
  // Colors
853
- "--crow-color-primary": styles2.colors.primary,
854
- "--crow-color-background": styles2.colors.background,
855
- "--crow-color-text": styles2.colors.text,
856
- "--crow-color-border": styles2.colors.border,
857
- "--crow-color-bot-bubble": styles2.colors.botBubble,
858
- "--crow-color-bot-text": styles2.colors.botText,
859
- "--crow-color-user-bubble": styles2.colors.userBubble,
860
- "--crow-color-user-text": styles2.colors.userText,
861
- "--crow-color-user-border": styles2.colors.userBorder,
862
- "--crow-color-messages-bg": styles2.colors.messagesBackground,
940
+ "--crow-color-primary": styles.colors.primary,
941
+ "--crow-color-background": styles.colors.background,
942
+ "--crow-color-text": styles.colors.text,
943
+ "--crow-color-border": styles.colors.border,
944
+ "--crow-color-bot-bubble": styles.colors.botBubble,
945
+ "--crow-color-bot-text": styles.colors.botText,
946
+ "--crow-color-user-bubble": styles.colors.userBubble,
947
+ "--crow-color-user-text": styles.colors.userText,
948
+ "--crow-color-user-border": styles.colors.userBorder,
949
+ "--crow-color-messages-bg": styles.colors.messagesBackground,
863
950
  // Typography
864
- "--crow-font-family": styles2.typography.fontFamily,
865
- "--crow-font-size": `${styles2.typography.fontSize}px`,
866
- "--crow-header-font-size": `${styles2.typography.headerFontSize}px`,
867
- "--crow-font-weight": `${styles2.typography.fontWeight}`,
868
- "--crow-line-height": `${styles2.typography.lineHeight}`,
869
- "--crow-letter-spacing": `${styles2.typography.letterSpacing}px`,
951
+ "--crow-font-family": styles.typography.fontFamily,
952
+ "--crow-font-size": `${styles.typography.fontSize}px`,
953
+ "--crow-header-font-size": `${styles.typography.headerFontSize}px`,
954
+ "--crow-font-weight": `${styles.typography.fontWeight}`,
955
+ "--crow-line-height": `${styles.typography.lineHeight}`,
956
+ "--crow-letter-spacing": `${styles.typography.letterSpacing}px`,
870
957
  // Animations
871
- "--crow-animation-duration": `${styles2.animations.duration}s`,
872
- "--crow-animation-easing": styles2.animations.easing
958
+ "--crow-animation-duration": `${styles.animations.duration}s`,
959
+ "--crow-animation-easing": styles.animations.easing
873
960
  };
874
961
  }
875
962
 
@@ -929,9 +1016,9 @@ function useWidgetStyles({
929
1016
  hasFetchedRef.current = true;
930
1017
  fetchStyles();
931
1018
  }, [productId, apiUrl, skip, key]);
932
- const styles2 = mergeWidgetStyles(dbStyles, propStyles);
1019
+ const styles = mergeWidgetStyles(dbStyles, propStyles);
933
1020
  return {
934
- styles: styles2,
1021
+ styles,
935
1022
  isLoading,
936
1023
  error,
937
1024
  agentName,
@@ -983,9 +1070,9 @@ function useCopilotStyles({
983
1070
  hasFetchedRef.current = true;
984
1071
  fetchStyles();
985
1072
  }, [productId, apiUrl, skip, key]);
986
- const styles2 = mergeCopilotStyles(dbStyles, propStyles);
1073
+ const styles = mergeCopilotStyles(dbStyles, propStyles);
987
1074
  return {
988
- styles: styles2,
1075
+ styles,
989
1076
  isLoading,
990
1077
  error,
991
1078
  agentName,
@@ -1012,14 +1099,14 @@ function usePreviewCopilotStyles(previewStyles) {
1012
1099
  var WidgetStyleContext = createContext(null);
1013
1100
  function WidgetStyleProvider({
1014
1101
  children,
1015
- styles: styles2,
1102
+ styles,
1016
1103
  agentName = "Assistant",
1017
1104
  isLoading = false,
1018
1105
  variant = "floating"
1019
1106
  }) {
1020
1107
  const value = useMemo(
1021
- () => ({ styles: styles2, agentName, isLoading, variant }),
1022
- [styles2, agentName, isLoading, variant]
1108
+ () => ({ styles, agentName, isLoading, variant }),
1109
+ [styles, agentName, isLoading, variant]
1023
1110
  );
1024
1111
  return /* @__PURE__ */ jsx(WidgetStyleContext.Provider, { value, children });
1025
1112
  }
@@ -1039,13 +1126,13 @@ function useWidgetStyles2() {
1039
1126
  var CopilotStyleContext = createContext(null);
1040
1127
  function CopilotStyleProvider({
1041
1128
  children,
1042
- styles: styles2,
1129
+ styles,
1043
1130
  agentName = "Assistant",
1044
1131
  isLoading = false
1045
1132
  }) {
1046
1133
  const value = useMemo(
1047
- () => ({ styles: styles2, agentName, isLoading }),
1048
- [styles2, agentName, isLoading]
1134
+ () => ({ styles, agentName, isLoading }),
1135
+ [styles, agentName, isLoading]
1049
1136
  );
1050
1137
  return /* @__PURE__ */ jsx(CopilotStyleContext.Provider, { value, children });
1051
1138
  }
@@ -1062,46 +1149,51 @@ function useCopilotStyles2() {
1062
1149
  const context = useContext(CopilotStyleContext);
1063
1150
  return context?.styles ?? DEFAULT_COPILOT_STYLES;
1064
1151
  }
1152
+ function ShadowContainer({
1153
+ children,
1154
+ styles,
1155
+ hostId = "crow-widget-host",
1156
+ hostClassName
1157
+ }) {
1158
+ const hostRef = useRef(null);
1159
+ const [shadowRoot, setShadowRoot] = useState(null);
1160
+ useEffect(() => {
1161
+ if (hostRef.current && !hostRef.current.shadowRoot) {
1162
+ const shadow = hostRef.current.attachShadow({ mode: "open" });
1163
+ setShadowRoot(shadow);
1164
+ }
1165
+ }, []);
1166
+ return /* @__PURE__ */ jsx("div", { ref: hostRef, id: hostId, className: hostClassName, children: shadowRoot && createPortal(
1167
+ /* @__PURE__ */ jsxs(Fragment, { children: [
1168
+ /* @__PURE__ */ jsx("style", { children: styles }),
1169
+ children
1170
+ ] }),
1171
+ shadowRoot
1172
+ ) });
1173
+ }
1174
+ ShadowContainer.displayName = "ShadowContainer";
1065
1175
  function ChatBubble({ isExpanded, onClick }) {
1066
- const { styles: styles2 } = useWidgetStyleContext();
1176
+ const { styles } = useWidgetStyleContext();
1067
1177
  return /* @__PURE__ */ jsx(
1068
1178
  "button",
1069
1179
  {
1070
1180
  onClick,
1071
1181
  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",
1072
1182
  style: {
1073
- width: styles2.bubble.size,
1074
- height: styles2.bubble.size,
1075
- right: styles2.position.bubbleRight,
1076
- bottom: styles2.position.bubbleBottom,
1077
- background: styles2.colors.bubbleBackground,
1078
- borderColor: styles2.colors.bubbleBorder,
1079
- boxShadow: styles2.shadows.bubble,
1080
- color: styles2.colors.bubbleIcon
1183
+ width: styles.bubble.size,
1184
+ height: styles.bubble.size,
1185
+ right: styles.position.bubbleRight,
1186
+ bottom: styles.position.bubbleBottom,
1187
+ background: styles.colors.bubbleBackground,
1188
+ borderColor: styles.colors.bubbleBorder,
1189
+ boxShadow: styles.shadows.bubble,
1190
+ color: styles.colors.bubbleIcon
1081
1191
  },
1082
1192
  "aria-label": isExpanded ? "Close Chat" : "Open Chat",
1083
- children: isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { size: styles2.bubble.iconSize, strokeWidth: 2 }) : /* @__PURE__ */ jsx(MessageCircle, { size: styles2.bubble.iconSize, strokeWidth: 2 })
1193
+ children: isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { size: styles.bubble.iconSize, strokeWidth: 2 }) : /* @__PURE__ */ jsx(MessageCircle, { size: styles.bubble.iconSize, strokeWidth: 2 })
1084
1194
  }
1085
1195
  );
1086
1196
  }
1087
- var GlassCard = forwardRef(
1088
- ({ className, children, ...props }, ref) => {
1089
- return /* @__PURE__ */ jsx(
1090
- "div",
1091
- {
1092
- ref,
1093
- className: cn(
1094
- "crow-border crow-flex crow-flex-col crow-gap-6 crow-rounded-2xl crow-py-6 crow-backdrop-blur-md",
1095
- className
1096
- ),
1097
- style: { background: "rgba(255, 255, 255, 0.3)", borderColor: "rgba(229, 231, 235, 0.3)", ...props.style },
1098
- ...props,
1099
- children
1100
- }
1101
- );
1102
- }
1103
- );
1104
- GlassCard.displayName = "GlassCard";
1105
1197
  var GOOGLE_FONTS_MAP = {
1106
1198
  '"Inter", sans-serif': "Inter:wght@300;400;500;600;700",
1107
1199
  '"Roboto", sans-serif': "Roboto:wght@300;400;500;700",
@@ -1111,9 +1203,9 @@ var GOOGLE_FONTS_MAP = {
1111
1203
  };
1112
1204
  var WidgetShell = forwardRef(
1113
1205
  ({ children, className }, ref) => {
1114
- const { styles: styles2, variant } = useWidgetStyleContext();
1206
+ const { styles, variant } = useWidgetStyleContext();
1115
1207
  useEffect(() => {
1116
- const fontParam = GOOGLE_FONTS_MAP[styles2.typography.fontFamily];
1208
+ const fontParam = GOOGLE_FONTS_MAP[styles.typography.fontFamily];
1117
1209
  if (!fontParam) return;
1118
1210
  const linkId = `crow-google-font-${fontParam.split(":")[0]}`;
1119
1211
  if (document.getElementById(linkId)) return;
@@ -1122,46 +1214,46 @@ var WidgetShell = forwardRef(
1122
1214
  link.rel = "stylesheet";
1123
1215
  link.href = `https://fonts.googleapis.com/css2?family=${fontParam}&display=swap`;
1124
1216
  document.head.appendChild(link);
1125
- }, [styles2.typography.fontFamily]);
1217
+ }, [styles.typography.fontFamily]);
1126
1218
  const baseStyle = {
1127
- borderRadius: styles2.dimensions.borderRadius,
1128
- padding: styles2.dimensions.padding,
1129
- background: styles2.colors.background,
1130
- borderColor: styles2.colors.border,
1131
- color: styles2.colors.text,
1132
- boxShadow: styles2.shadows.widget,
1133
- fontFamily: styles2.typography.fontFamily,
1134
- fontSize: styles2.typography.fontSize,
1135
- fontWeight: styles2.typography.fontWeight,
1136
- lineHeight: styles2.typography.lineHeight,
1137
- letterSpacing: styles2.typography.letterSpacing
1219
+ borderRadius: styles.dimensions.borderRadius,
1220
+ padding: styles.dimensions.padding,
1221
+ background: styles.colors.background,
1222
+ borderColor: styles.colors.border,
1223
+ color: styles.colors.text,
1224
+ boxShadow: styles.shadows.widget,
1225
+ fontFamily: styles.typography.fontFamily,
1226
+ fontSize: styles.typography.fontSize,
1227
+ fontWeight: styles.typography.fontWeight,
1228
+ lineHeight: styles.typography.lineHeight,
1229
+ letterSpacing: styles.typography.letterSpacing
1138
1230
  };
1139
1231
  if (variant === "embedded") {
1140
1232
  return /* @__PURE__ */ jsx(
1141
- GlassCard,
1233
+ "div",
1142
1234
  {
1143
1235
  ref,
1144
- className: `crow-flex crow-flex-col crow-shadow-2xl crow-gap-3 ${className ?? ""}`,
1236
+ className: `crow-flex crow-flex-col crow-shadow-2xl crow-gap-3 crow-border crow-backdrop-blur-md crow-overflow-hidden ${className ?? ""}`,
1145
1237
  style: {
1146
1238
  ...baseStyle,
1147
- width: `min(${styles2.dimensions.width}px, calc(100vw - 32px))`,
1148
- height: `min(${styles2.dimensions.maxHeight}px, calc(100vh - 120px))`
1239
+ width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,
1240
+ height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`
1149
1241
  },
1150
1242
  children
1151
1243
  }
1152
1244
  );
1153
1245
  }
1154
1246
  return /* @__PURE__ */ jsx(
1155
- GlassCard,
1247
+ "div",
1156
1248
  {
1157
1249
  ref,
1158
- className: `crow-fixed crow-z-[999999] crow-shadow-2xl crow-gap-3 crow-transition-all crow-duration-500 crow-flex crow-flex-col ${className ?? ""}`,
1250
+ 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 ?? ""}`,
1159
1251
  style: {
1160
1252
  ...baseStyle,
1161
- width: `min(${styles2.dimensions.width}px, calc(100vw - 32px))`,
1162
- height: `min(${styles2.dimensions.maxHeight}px, calc(100vh - 120px))`,
1163
- right: styles2.position.right,
1164
- bottom: styles2.position.bottom
1253
+ width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,
1254
+ height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`,
1255
+ right: styles.position.right,
1256
+ bottom: styles.position.bottom
1165
1257
  },
1166
1258
  children
1167
1259
  }
@@ -1178,20 +1270,20 @@ function WidgetHeader({
1178
1270
  isMinimized = false,
1179
1271
  onToggleMinimize
1180
1272
  }) {
1181
- const { agentName, styles: styles2 } = useWidgetStyleContext();
1273
+ const { agentName, styles } = useWidgetStyleContext();
1182
1274
  return /* @__PURE__ */ jsxs(
1183
1275
  "div",
1184
1276
  {
1185
1277
  className: "crow-flex crow-items-center crow-justify-between crow-mb-3 crow-pb-2 crow-border-b",
1186
- style: { borderColor: styles2.colors.border },
1278
+ style: { borderColor: styles.colors.border },
1187
1279
  children: [
1188
1280
  /* @__PURE__ */ jsx("div", { className: "crow-flex crow-items-center crow-gap-2", children: /* @__PURE__ */ jsx(
1189
1281
  "span",
1190
1282
  {
1191
1283
  className: "crow-text-sm crow-font-semibold",
1192
1284
  style: {
1193
- color: styles2.colors.text,
1194
- fontSize: styles2.typography.headerFontSize
1285
+ color: styles.colors.text,
1286
+ fontSize: styles.typography.headerFontSize
1195
1287
  },
1196
1288
  children: agentName
1197
1289
  }
@@ -1493,7 +1585,7 @@ function MessageBubble({
1493
1585
  toolCalls = [],
1494
1586
  isLoading = false
1495
1587
  }) {
1496
- const styles2 = useWidgetStyles2();
1588
+ const styles = useWidgetStyles2();
1497
1589
  const isWaiting = message.content === "Thinking..." || message.isBot && isLoading && !message.content;
1498
1590
  const hasThinking = message.isBot && message.thinking;
1499
1591
  const hasContent = message.content && message.content !== "Thinking...";
@@ -1520,12 +1612,12 @@ function MessageBubble({
1520
1612
  {
1521
1613
  className: "crow-max-w-[80%] crow-rounded-2xl crow-px-4 crow-py-2 crow-transition-all crow-duration-150",
1522
1614
  style: message.isBot ? {
1523
- background: styles2.colors.botBubble,
1524
- color: styles2.colors.botText
1615
+ background: styles.colors.botBubble,
1616
+ color: styles.colors.botText
1525
1617
  } : {
1526
- background: styles2.colors.userBubble,
1527
- color: styles2.colors.userText,
1528
- border: `1px solid ${styles2.colors.userBorder}`
1618
+ background: styles.colors.userBubble,
1619
+ color: styles.colors.userText,
1620
+ border: `1px solid ${styles.colors.userBorder}`
1529
1621
  },
1530
1622
  children: [
1531
1623
  /* @__PURE__ */ jsx("div", { className: "crow-whitespace-pre-wrap", children: message.isBot ? /* @__PURE__ */ jsx(
@@ -1589,8 +1681,8 @@ function MessageList({
1589
1681
  )) });
1590
1682
  }
1591
1683
  var MessagesContainer = forwardRef(
1592
- ({ children, maxHeight }, ref) => {
1593
- const styles2 = useWidgetStyles2();
1684
+ ({ children }, ref) => {
1685
+ const styles = useWidgetStyles2();
1594
1686
  const internalRef = useRef(null);
1595
1687
  const lastScrollHeightRef = useRef(0);
1596
1688
  const isUserScrollingRef = useRef(false);
@@ -1638,12 +1730,9 @@ var MessagesContainer = forwardRef(
1638
1730
  initial: { opacity: 0 },
1639
1731
  animate: { opacity: 1 },
1640
1732
  exit: { opacity: 0 },
1641
- transition: { duration: styles2.animations.duration },
1733
+ transition: { duration: styles.animations.duration },
1642
1734
  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",
1643
- style: {
1644
- background: styles2.colors.messagesBackground,
1645
- ...maxHeight && { maxHeight }
1646
- },
1735
+ style: { background: styles.colors.messagesBackground },
1647
1736
  children
1648
1737
  }
1649
1738
  );
@@ -1708,8 +1797,8 @@ function WorkflowPanel({ workflow, onExit }) {
1708
1797
  );
1709
1798
  }
1710
1799
  function PoweredByBadge({ apiUrl = "" }) {
1711
- const styles2 = useWidgetStyles2();
1712
- const branding = styles2.branding;
1800
+ const styles = useWidgetStyles2();
1801
+ const branding = styles.branding;
1713
1802
  if (!branding.showPoweredBy) return null;
1714
1803
  const logoUrl = branding.logoUrl?.startsWith("http") ? branding.logoUrl : `${apiUrl}${branding.logoUrl}`;
1715
1804
  return /* @__PURE__ */ 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: [
@@ -1800,30 +1889,6 @@ var ModelSelector = ({
1800
1889
  ] }, provider)) })
1801
1890
  ] });
1802
1891
  };
1803
- var styles = `
1804
- *:focus-visible {
1805
- outline-offset: 0 !important;
1806
- --ring-offset: 0 !important;
1807
- }
1808
- textarea::-webkit-scrollbar {
1809
- width: 6px;
1810
- }
1811
- textarea::-webkit-scrollbar-track {
1812
- background: transparent;
1813
- }
1814
- textarea::-webkit-scrollbar-thumb {
1815
- background-color: #d1d5db;
1816
- border-radius: 3px;
1817
- }
1818
- textarea::-webkit-scrollbar-thumb:hover {
1819
- background-color: #9ca3af;
1820
- }
1821
- `;
1822
- if (typeof document !== "undefined") {
1823
- const styleSheet = document.createElement("style");
1824
- styleSheet.innerText = styles;
1825
- document.head.appendChild(styleSheet);
1826
- }
1827
1892
  var Textarea = React3.forwardRef(
1828
1893
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1829
1894
  "textarea",
@@ -1848,10 +1913,9 @@ var TooltipContent = React3.forwardRef(({ className, sideOffset = 4, ...props },
1848
1913
  ref,
1849
1914
  sideOffset,
1850
1915
  className: cn(
1851
- "crow-z-50 crow-overflow-hidden crow-rounded-md crow-border crow-px-3 crow-py-1.5 crow-text-sm crow-shadow-md",
1916
+ "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",
1852
1917
  className
1853
1918
  ),
1854
- style: { borderColor: "#d1d5db", background: "#ffffff", color: "#111827" },
1855
1919
  ...props
1856
1920
  }
1857
1921
  ));
@@ -1933,11 +1997,10 @@ var PromptInput = React3.forwardRef(
1933
1997
  {
1934
1998
  ref,
1935
1999
  className: cn(
1936
- "crow-rounded-3xl crow-border crow-p-1.5 crow-shadow-lg crow-transition-all crow-duration-300",
2000
+ "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",
1937
2001
  isLoading && "crow-border-red-500",
1938
2002
  className
1939
2003
  ),
1940
- style: { borderColor: isLoading ? void 0 : "#d1d5db", background: "#ffffff" },
1941
2004
  children
1942
2005
  }
1943
2006
  )
@@ -2047,12 +2110,11 @@ var PromptInputBox = React3.forwardRef(
2047
2110
  variant: "default",
2048
2111
  size: "icon",
2049
2112
  className: cn(
2050
- "crow-h-7 crow-w-7 crow-rounded-full crow-transition-all crow-duration-200"
2113
+ "crow-h-7 crow-w-7 crow-rounded-full crow-transition-all crow-duration-200",
2114
+ isLoading && "crow-bg-red-500 hover:crow-bg-red-500",
2115
+ hasContent && !isLoading && "crow-bg-black hover:crow-bg-gray-800",
2116
+ !hasContent && !isLoading && "crow-bg-transparent"
2051
2117
  ),
2052
- style: {
2053
- background: isLoading ? "#ef4444" : hasContent ? "#000000" : "transparent",
2054
- color: isLoading ? "#ffffff" : "#ffffff"
2055
- },
2056
2118
  onClick: () => {
2057
2119
  if (isLoading && onStop) {
2058
2120
  onStop();
@@ -2060,7 +2122,10 @@ var PromptInputBox = React3.forwardRef(
2060
2122
  handleSubmit();
2061
2123
  }
2062
2124
  },
2063
- children: isLoading ? /* @__PURE__ */ jsx(Square, { className: "crow-h-3.5 crow-w-3.5", style: { fill: "white", color: "white" } }) : /* @__PURE__ */ jsx(ArrowUp, { className: "crow-h-3.5 crow-w-3.5", style: { color: hasContent ? "#ffffff" : "#9ca3af" } })
2125
+ children: isLoading ? /* @__PURE__ */ jsx(Square, { className: "crow-h-3.5 crow-w-3.5 crow-text-white", style: { fill: "white" } }) : /* @__PURE__ */ jsx(ArrowUp, { className: cn(
2126
+ "crow-h-3.5 crow-w-3.5",
2127
+ hasContent ? "crow-text-white" : "crow-text-gray-400"
2128
+ ) })
2064
2129
  }
2065
2130
  )
2066
2131
  }
@@ -2072,6 +2137,129 @@ var PromptInputBox = React3.forwardRef(
2072
2137
  }
2073
2138
  );
2074
2139
  PromptInputBox.displayName = "PromptInputBox";
2140
+
2141
+ // src/styles/cssVars.ts
2142
+ var CSS_VAR_NAMES = {
2143
+ // Colors
2144
+ colors: {
2145
+ primary: "--crow-colors-primary",
2146
+ background: "--crow-colors-background",
2147
+ border: "--crow-colors-border",
2148
+ text: "--crow-colors-text",
2149
+ botBubble: "--crow-colors-bot-bubble",
2150
+ botText: "--crow-colors-bot-text",
2151
+ userBubble: "--crow-colors-user-bubble",
2152
+ userText: "--crow-colors-user-text",
2153
+ userBorder: "--crow-colors-user-border",
2154
+ messagesBackground: "--crow-colors-messages-background",
2155
+ bubbleBackground: "--crow-colors-bubble-background",
2156
+ bubbleBorder: "--crow-colors-bubble-border",
2157
+ bubbleIcon: "--crow-colors-bubble-icon"
2158
+ },
2159
+ // Dimensions
2160
+ dimensions: {
2161
+ width: "--crow-dimensions-width",
2162
+ maxHeight: "--crow-dimensions-max-height",
2163
+ messagesMaxHeight: "--crow-dimensions-messages-max-height",
2164
+ borderRadius: "--crow-dimensions-border-radius",
2165
+ padding: "--crow-dimensions-padding"
2166
+ },
2167
+ // Typography
2168
+ typography: {
2169
+ fontFamily: "--crow-typography-font-family",
2170
+ fontSize: "--crow-typography-font-size",
2171
+ headerFontSize: "--crow-typography-header-font-size",
2172
+ fontWeight: "--crow-typography-font-weight",
2173
+ lineHeight: "--crow-typography-line-height",
2174
+ letterSpacing: "--crow-typography-letter-spacing"
2175
+ },
2176
+ // Position
2177
+ position: {
2178
+ right: "--crow-position-right",
2179
+ bottom: "--crow-position-bottom",
2180
+ bubbleRight: "--crow-position-bubble-right",
2181
+ bubbleBottom: "--crow-position-bubble-bottom"
2182
+ },
2183
+ // Bubble
2184
+ bubble: {
2185
+ size: "--crow-bubble-size",
2186
+ iconSize: "--crow-bubble-icon-size"
2187
+ },
2188
+ // Shadows
2189
+ shadows: {
2190
+ widget: "--crow-shadows-widget",
2191
+ bubble: "--crow-shadows-bubble"
2192
+ },
2193
+ // Animations
2194
+ animations: {
2195
+ duration: "--crow-animations-duration"
2196
+ }
2197
+ };
2198
+ function stylesToCssVars(styles) {
2199
+ const vars = {};
2200
+ vars[CSS_VAR_NAMES.colors.primary] = styles.colors.primary;
2201
+ vars[CSS_VAR_NAMES.colors.background] = styles.colors.background;
2202
+ vars[CSS_VAR_NAMES.colors.border] = styles.colors.border;
2203
+ vars[CSS_VAR_NAMES.colors.text] = styles.colors.text;
2204
+ vars[CSS_VAR_NAMES.colors.botBubble] = styles.colors.botBubble;
2205
+ vars[CSS_VAR_NAMES.colors.botText] = styles.colors.botText;
2206
+ vars[CSS_VAR_NAMES.colors.userBubble] = styles.colors.userBubble;
2207
+ vars[CSS_VAR_NAMES.colors.userText] = styles.colors.userText;
2208
+ vars[CSS_VAR_NAMES.colors.userBorder] = styles.colors.userBorder;
2209
+ vars[CSS_VAR_NAMES.colors.messagesBackground] = styles.colors.messagesBackground;
2210
+ vars[CSS_VAR_NAMES.colors.bubbleBackground] = styles.colors.bubbleBackground;
2211
+ vars[CSS_VAR_NAMES.colors.bubbleBorder] = styles.colors.bubbleBorder;
2212
+ vars[CSS_VAR_NAMES.colors.bubbleIcon] = styles.colors.bubbleIcon;
2213
+ vars[CSS_VAR_NAMES.dimensions.width] = `${styles.dimensions.width}px`;
2214
+ vars[CSS_VAR_NAMES.dimensions.maxHeight] = `${styles.dimensions.maxHeight}px`;
2215
+ vars[CSS_VAR_NAMES.dimensions.messagesMaxHeight] = `${styles.dimensions.messagesMaxHeight}px`;
2216
+ vars[CSS_VAR_NAMES.dimensions.borderRadius] = `${styles.dimensions.borderRadius}px`;
2217
+ vars[CSS_VAR_NAMES.dimensions.padding] = `${styles.dimensions.padding}px`;
2218
+ vars[CSS_VAR_NAMES.typography.fontFamily] = styles.typography.fontFamily;
2219
+ vars[CSS_VAR_NAMES.typography.fontSize] = `${styles.typography.fontSize}px`;
2220
+ vars[CSS_VAR_NAMES.typography.headerFontSize] = `${styles.typography.headerFontSize}px`;
2221
+ vars[CSS_VAR_NAMES.typography.fontWeight] = String(styles.typography.fontWeight);
2222
+ vars[CSS_VAR_NAMES.typography.lineHeight] = String(styles.typography.lineHeight);
2223
+ vars[CSS_VAR_NAMES.typography.letterSpacing] = `${styles.typography.letterSpacing}px`;
2224
+ vars[CSS_VAR_NAMES.position.right] = `${styles.position.right}px`;
2225
+ vars[CSS_VAR_NAMES.position.bottom] = `${styles.position.bottom}px`;
2226
+ vars[CSS_VAR_NAMES.position.bubbleRight] = `${styles.position.bubbleRight}px`;
2227
+ vars[CSS_VAR_NAMES.position.bubbleBottom] = `${styles.position.bubbleBottom}px`;
2228
+ vars[CSS_VAR_NAMES.bubble.size] = `${styles.bubble.size}px`;
2229
+ vars[CSS_VAR_NAMES.bubble.iconSize] = `${styles.bubble.iconSize}px`;
2230
+ vars[CSS_VAR_NAMES.shadows.widget] = styles.shadows.widget;
2231
+ vars[CSS_VAR_NAMES.shadows.bubble] = styles.shadows.bubble;
2232
+ vars[CSS_VAR_NAMES.animations.duration] = `${styles.animations.duration}s`;
2233
+ return vars;
2234
+ }
2235
+ function getCssVar(varName, element = document.documentElement) {
2236
+ return getComputedStyle(element).getPropertyValue(varName).trim();
2237
+ }
2238
+
2239
+ // src/styles/inject.ts
2240
+ var STYLE_ID = "crow-ui-styles";
2241
+ 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: }
2242
+
2243
+ /*! 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}`;
2244
+ var injected = false;
2245
+ function injectStyles(target = document) {
2246
+ if (target === document && injected) return;
2247
+ if (typeof document === "undefined") return;
2248
+ const existingStyle = target === document ? document.getElementById(STYLE_ID) : target.querySelector(`#${STYLE_ID}`);
2249
+ if (existingStyle) {
2250
+ if (target === document) injected = true;
2251
+ return;
2252
+ }
2253
+ const style = document.createElement("style");
2254
+ style.id = STYLE_ID;
2255
+ style.textContent = WIDGET_CSS;
2256
+ if (target === document) {
2257
+ document.head.appendChild(style);
2258
+ injected = true;
2259
+ } else {
2260
+ target.prepend(style);
2261
+ }
2262
+ }
2075
2263
  function CrowWidget({
2076
2264
  productId,
2077
2265
  apiUrl = "",
@@ -2080,14 +2268,16 @@ function CrowWidget({
2080
2268
  previewMode = false,
2081
2269
  onReady
2082
2270
  }) {
2083
- const { styles: styles2, isLoading: isLoadingStyles, agentName } = useWidgetStyles({
2271
+ const { styles, isLoading: isLoadingStyles, agentName } = useWidgetStyles({
2084
2272
  productId,
2085
2273
  apiUrl,
2086
2274
  propStyles,
2087
2275
  skip: previewMode
2088
2276
  });
2277
+ const cssVars = stylesToCssVars(styles);
2089
2278
  const messagesContainerRef = useRef(null);
2090
2279
  const executeClientToolRef = useRef(null);
2280
+ const submitToolResultRef = useRef(null);
2091
2281
  const [isCollapsed, setIsCollapsed] = useState(variant === "floating");
2092
2282
  const [showConversationList, setShowConversationList] = useState(false);
2093
2283
  const [isVerifiedUser, setIsVerifiedUser] = useState(false);
@@ -2134,11 +2324,30 @@ function CrowWidget({
2134
2324
  break;
2135
2325
  }
2136
2326
  },
2137
- onToolCall: (event) => {
2138
- if (event.type === "client_call" && event.toolName) {
2139
- console.log("[Crow Widget] Executing client tool:", event.toolName, event.arguments);
2140
- const result = executeClientToolRef.current?.(event.toolName, event.arguments || {});
2141
- result?.then((r) => console.log("[Crow Widget] Tool result:", r)).catch((e) => console.error("[Crow Widget] Tool error:", e));
2327
+ onToolCall: async (event) => {
2328
+ if (event.type === "client_call" && event.toolName && event.toolCallId) {
2329
+ try {
2330
+ const result = await executeClientToolRef.current?.(
2331
+ event.toolName,
2332
+ event.arguments || {}
2333
+ );
2334
+ if (result && submitToolResultRef.current) {
2335
+ await submitToolResultRef.current(
2336
+ event.toolCallId,
2337
+ event.toolName,
2338
+ result
2339
+ );
2340
+ }
2341
+ } catch (e) {
2342
+ console.error("[Crow Widget] Tool error:", e);
2343
+ if (submitToolResultRef.current) {
2344
+ await submitToolResultRef.current(
2345
+ event.toolCallId,
2346
+ event.toolName,
2347
+ { success: false, error: String(e) }
2348
+ );
2349
+ }
2350
+ }
2142
2351
  }
2143
2352
  },
2144
2353
  onRestoredConversation: () => {
@@ -2184,6 +2393,7 @@ function CrowWidget({
2184
2393
  }
2185
2394
  });
2186
2395
  executeClientToolRef.current = executeClientTool;
2396
+ submitToolResultRef.current = chat.submitToolResult;
2187
2397
  useEffect(() => {
2188
2398
  if (!isLoadingStyles) {
2189
2399
  onReady?.();
@@ -2223,118 +2433,71 @@ function CrowWidget({
2223
2433
  const handleBubbleClick = () => {
2224
2434
  setIsCollapsed(!isCollapsed);
2225
2435
  };
2226
- return /* @__PURE__ */ jsxs(
2436
+ const renderWidgetContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
2437
+ /* @__PURE__ */ jsx(
2438
+ WidgetHeader,
2439
+ {
2440
+ isVerifiedUser,
2441
+ showConversationList,
2442
+ onNewChat: handleNewChat,
2443
+ onToggleHistory: handleToggleHistory
2444
+ }
2445
+ ),
2446
+ /* @__PURE__ */ jsx(AnimatePresence, { children: showConversationList && isVerifiedUser && /* @__PURE__ */ jsx(
2447
+ ConversationList,
2448
+ {
2449
+ conversations: conversations.conversations,
2450
+ currentConversationId: chat.conversationId,
2451
+ onSelect: handleSelectConversation,
2452
+ onClose: handleCloseConversationList
2453
+ }
2454
+ ) }),
2455
+ /* @__PURE__ */ jsx(AnimatePresence, { children: activeWorkflow && /* @__PURE__ */ jsx(
2456
+ WorkflowPanel,
2457
+ {
2458
+ workflow: activeWorkflow,
2459
+ onExit: handleExitWorkflow
2460
+ }
2461
+ ) }),
2462
+ /* @__PURE__ */ jsx(AnimatePresence, { children: (chat.messages.length > 0 || conversations.isLoadingHistory) && /* @__PURE__ */ jsx(MessagesContainer, { ref: messagesContainerRef, children: /* @__PURE__ */ jsx(
2463
+ MessageList,
2464
+ {
2465
+ messages: chat.messages,
2466
+ activeToolCalls: chat.activeToolCalls,
2467
+ isLoadingHistory: conversations.isLoadingHistory,
2468
+ isGenerating: chat.isLoading
2469
+ }
2470
+ ) }) }),
2471
+ /* @__PURE__ */ jsxs("div", { className: "crow-mt-auto crow-w-full", children: [
2472
+ /* @__PURE__ */ jsx(PoweredByBadge, { apiUrl }),
2473
+ /* @__PURE__ */ jsx(
2474
+ PromptInputBox,
2475
+ {
2476
+ onSend: handleSend,
2477
+ onStop: chat.stopGeneration,
2478
+ placeholder: "Type your message...",
2479
+ isLoading: chat.isLoading,
2480
+ className: "crow-backdrop-blur-md"
2481
+ }
2482
+ )
2483
+ ] })
2484
+ ] });
2485
+ return /* @__PURE__ */ jsx(ShadowContainer, { styles: WIDGET_CSS, children: /* @__PURE__ */ jsx("div", { className: "crow-widget-root", style: cssVars, children: /* @__PURE__ */ jsxs(
2227
2486
  WidgetStyleProvider,
2228
2487
  {
2229
- styles: styles2,
2488
+ styles,
2230
2489
  agentName,
2231
2490
  isLoading: isLoadingStyles,
2232
2491
  variant,
2233
2492
  children: [
2234
2493
  variant === "floating" && /* @__PURE__ */ jsxs(Fragment, { children: [
2235
2494
  /* @__PURE__ */ jsx(ChatBubble, { isExpanded: !isCollapsed, onClick: handleBubbleClick }),
2236
- !isCollapsed && /* @__PURE__ */ jsxs(WidgetShell, { children: [
2237
- /* @__PURE__ */ jsx(
2238
- WidgetHeader,
2239
- {
2240
- isVerifiedUser,
2241
- showConversationList,
2242
- onNewChat: handleNewChat,
2243
- onToggleHistory: handleToggleHistory
2244
- }
2245
- ),
2246
- /* @__PURE__ */ jsx(AnimatePresence, { children: showConversationList && isVerifiedUser && /* @__PURE__ */ jsx(
2247
- ConversationList,
2248
- {
2249
- conversations: conversations.conversations,
2250
- currentConversationId: chat.conversationId,
2251
- onSelect: handleSelectConversation,
2252
- onClose: handleCloseConversationList
2253
- }
2254
- ) }),
2255
- /* @__PURE__ */ jsx(AnimatePresence, { children: activeWorkflow && /* @__PURE__ */ jsx(
2256
- WorkflowPanel,
2257
- {
2258
- workflow: activeWorkflow,
2259
- onExit: handleExitWorkflow
2260
- }
2261
- ) }),
2262
- /* @__PURE__ */ jsx(AnimatePresence, { children: (chat.messages.length > 0 || conversations.isLoadingHistory) && /* @__PURE__ */ jsx(MessagesContainer, { ref: messagesContainerRef, maxHeight: styles2.dimensions.messagesMaxHeight, children: /* @__PURE__ */ jsx(
2263
- MessageList,
2264
- {
2265
- messages: chat.messages,
2266
- activeToolCalls: chat.activeToolCalls,
2267
- isLoadingHistory: conversations.isLoadingHistory,
2268
- isGenerating: chat.isLoading
2269
- }
2270
- ) }) }),
2271
- /* @__PURE__ */ jsxs("div", { className: "crow-mt-auto", children: [
2272
- /* @__PURE__ */ jsx(PoweredByBadge, { apiUrl }),
2273
- /* @__PURE__ */ jsx(
2274
- PromptInputBox,
2275
- {
2276
- onSend: handleSend,
2277
- onStop: chat.stopGeneration,
2278
- placeholder: "Type your message...",
2279
- isLoading: chat.isLoading,
2280
- className: "crow-backdrop-blur-md"
2281
- }
2282
- )
2283
- ] })
2284
- ] })
2495
+ !isCollapsed && /* @__PURE__ */ jsx(WidgetShell, { children: renderWidgetContent() })
2285
2496
  ] }),
2286
- variant === "embedded" && /* @__PURE__ */ jsxs(WidgetShell, { children: [
2287
- /* @__PURE__ */ jsx(
2288
- WidgetHeader,
2289
- {
2290
- isVerifiedUser,
2291
- showConversationList,
2292
- onNewChat: handleNewChat,
2293
- onToggleHistory: handleToggleHistory
2294
- }
2295
- ),
2296
- /* @__PURE__ */ jsx(AnimatePresence, { children: showConversationList && isVerifiedUser && /* @__PURE__ */ jsx(
2297
- ConversationList,
2298
- {
2299
- conversations: conversations.conversations,
2300
- currentConversationId: chat.conversationId,
2301
- onSelect: handleSelectConversation,
2302
- onClose: handleCloseConversationList
2303
- }
2304
- ) }),
2305
- /* @__PURE__ */ jsx(AnimatePresence, { children: activeWorkflow && /* @__PURE__ */ jsx(
2306
- WorkflowPanel,
2307
- {
2308
- workflow: activeWorkflow,
2309
- onExit: handleExitWorkflow
2310
- }
2311
- ) }),
2312
- /* @__PURE__ */ jsx(AnimatePresence, { children: (chat.messages.length > 0 || conversations.isLoadingHistory) && /* @__PURE__ */ jsx(MessagesContainer, { ref: messagesContainerRef, maxHeight: styles2.dimensions.messagesMaxHeight, children: /* @__PURE__ */ jsx(
2313
- MessageList,
2314
- {
2315
- messages: chat.messages,
2316
- activeToolCalls: chat.activeToolCalls,
2317
- isLoadingHistory: conversations.isLoadingHistory,
2318
- isGenerating: chat.isLoading
2319
- }
2320
- ) }) }),
2321
- /* @__PURE__ */ jsxs("div", { className: "crow-mt-auto", children: [
2322
- /* @__PURE__ */ jsx(PoweredByBadge, { apiUrl }),
2323
- /* @__PURE__ */ jsx(
2324
- PromptInputBox,
2325
- {
2326
- onSend: handleSend,
2327
- onStop: chat.stopGeneration,
2328
- placeholder: "Type your message...",
2329
- isLoading: chat.isLoading,
2330
- className: "crow-backdrop-blur-md"
2331
- }
2332
- )
2333
- ] })
2334
- ] })
2497
+ variant === "embedded" && /* @__PURE__ */ jsx(WidgetShell, { children: renderWidgetContent() })
2335
2498
  ]
2336
2499
  }
2337
- );
2500
+ ) }) });
2338
2501
  }
2339
2502
  function CrowCopilot({
2340
2503
  productId,
@@ -2349,7 +2512,7 @@ function CrowCopilot({
2349
2512
  className,
2350
2513
  onReady
2351
2514
  }) {
2352
- const { styles: styles2, isLoading: isLoadingStyles, agentName } = useCopilotStyles({
2515
+ const { styles, isLoading: isLoadingStyles, agentName } = useCopilotStyles({
2353
2516
  productId,
2354
2517
  apiUrl,
2355
2518
  propStyles,
@@ -2438,7 +2601,7 @@ function CrowCopilot({
2438
2601
  return /* @__PURE__ */ jsx(
2439
2602
  CopilotStyleProvider,
2440
2603
  {
2441
- styles: styles2,
2604
+ styles,
2442
2605
  agentName: agentName || title,
2443
2606
  isLoading: isLoadingStyles,
2444
2607
  children: /* @__PURE__ */ jsxs(
@@ -2447,13 +2610,13 @@ function CrowCopilot({
2447
2610
  className: `crow-flex crow-flex-col crow-h-full ${position === "left" ? "crow-border-r" : "crow-border-l"} ${className || ""}`,
2448
2611
  style: {
2449
2612
  width: widthStyle,
2450
- fontFamily: styles2.typography.fontFamily,
2451
- fontSize: styles2.typography.fontSize,
2452
- fontWeight: styles2.typography.fontWeight,
2453
- lineHeight: styles2.typography.lineHeight,
2454
- letterSpacing: styles2.typography.letterSpacing,
2455
- background: styles2.colors.background,
2456
- borderColor: styles2.colors.border
2613
+ fontFamily: styles.typography.fontFamily,
2614
+ fontSize: styles.typography.fontSize,
2615
+ fontWeight: styles.typography.fontWeight,
2616
+ lineHeight: styles.typography.lineHeight,
2617
+ letterSpacing: styles.typography.letterSpacing,
2618
+ background: styles.colors.background,
2619
+ borderColor: styles.colors.border
2457
2620
  },
2458
2621
  children: [
2459
2622
  /* @__PURE__ */ jsxs(
@@ -2461,8 +2624,8 @@ function CrowCopilot({
2461
2624
  {
2462
2625
  className: "crow-flex crow-items-center crow-justify-between crow-px-4 crow-py-3 crow-border-b",
2463
2626
  style: {
2464
- height: styles2.dimensions.headerHeight,
2465
- borderColor: styles2.colors.border
2627
+ height: styles.dimensions.headerHeight,
2628
+ borderColor: styles.colors.border
2466
2629
  },
2467
2630
  children: [
2468
2631
  /* @__PURE__ */ jsx(
@@ -2470,8 +2633,8 @@ function CrowCopilot({
2470
2633
  {
2471
2634
  className: "crow-font-semibold",
2472
2635
  style: {
2473
- color: styles2.colors.text,
2474
- fontSize: styles2.typography.headerFontSize
2636
+ color: styles.colors.text,
2637
+ fontSize: styles.typography.headerFontSize
2475
2638
  },
2476
2639
  children: agentName || title
2477
2640
  }
@@ -2528,8 +2691,8 @@ function CrowCopilot({
2528
2691
  isGenerating: chat.isLoading
2529
2692
  }
2530
2693
  ) }),
2531
- /* @__PURE__ */ jsxs("div", { className: "crow-p-3 crow-border-t", style: { borderColor: styles2.colors.border }, children: [
2532
- styles2.branding.showPoweredBy && /* @__PURE__ */ jsx(PoweredByBadge, { apiUrl }),
2694
+ /* @__PURE__ */ jsxs("div", { className: "crow-p-3 crow-border-t", style: { borderColor: styles.colors.border }, children: [
2695
+ styles.branding.showPoweredBy && /* @__PURE__ */ jsx(PoweredByBadge, { apiUrl }),
2533
2696
  /* @__PURE__ */ jsx(
2534
2697
  PromptInputBox,
2535
2698
  {
@@ -2631,6 +2794,6 @@ function CrowProvider({
2631
2794
  return /* @__PURE__ */ jsx(CrowContext.Provider, { value, children });
2632
2795
  }
2633
2796
 
2634
- export { AVAILABLE_MODELS, ChatBubble, ConversationList, CopilotStyleProvider, CrowCopilot, CrowProvider, CrowWidget, DEFAULT_COPILOT_STYLES, DEFAULT_MODEL, DEFAULT_WELCOME_MESSAGE, DEFAULT_WIDGET_STYLES, GlassCard, LoadingHistory, MESSAGES_CONTAINER_ID, MessageBubble, MessageList, MessagesContainer, ModelSelector, PoweredByBadge, PromptInputBox, ReasoningTrace, StreamingText, ThinkingIndicator, WidgetHeader, WidgetShell, WidgetStyleProvider, WorkflowPanel, clearStyleCache, mergeCopilotStyles, mergeWidgetStyles, stylesToCSSVariables, useChat, useConversations, useCopilotStyleContext, useCopilotStyles, useCopilotStyles2 as useCopilotStylesContext, useCrowAPI, usePreviewCopilotStyles, usePreviewWidgetStyles, useWidgetStyleContext, useWidgetStyles, useWidgetStyles2 as useWidgetStylesContext, useWorkflow };
2797
+ export { AVAILABLE_MODELS, CSS_VAR_NAMES, ChatBubble, ConversationList, CopilotStyleProvider, CrowCopilot, CrowProvider, CrowWidget, DEFAULT_COPILOT_STYLES, DEFAULT_MODEL, DEFAULT_WELCOME_MESSAGE, DEFAULT_WIDGET_STYLES, LoadingHistory, MESSAGES_CONTAINER_ID, MessageBubble, MessageList, MessagesContainer, ModelSelector, PoweredByBadge, PromptInputBox, ReasoningTrace, ShadowContainer, StreamingText, ThinkingIndicator, WIDGET_CSS, WidgetHeader, WidgetShell, WidgetStyleProvider, WorkflowPanel, clearStyleCache, getCssVar, injectStyles, mergeCopilotStyles, mergeWidgetStyles, stylesToCSSVariables, stylesToCssVars, useChat, useConversations, useCopilotStyleContext, useCopilotStyles, useCopilotStyles2 as useCopilotStylesContext, useCrowAPI, usePreviewCopilotStyles, usePreviewWidgetStyles, useWidgetStyleContext, useWidgetStyles, useWidgetStyles2 as useWidgetStylesContext, useWorkflow };
2635
2798
  //# sourceMappingURL=index.js.map
2636
2799
  //# sourceMappingURL=index.js.map