@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 +448 -280
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +124 -10
- package/dist/index.d.ts +124 -10
- package/dist/index.js +443 -280
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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
|
-
|
|
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(
|
|
963
|
+
function stylesToCSSVariables(styles) {
|
|
877
964
|
return {
|
|
878
965
|
// Colors
|
|
879
|
-
"--crow-color-primary":
|
|
880
|
-
"--crow-color-background":
|
|
881
|
-
"--crow-color-text":
|
|
882
|
-
"--crow-color-border":
|
|
883
|
-
"--crow-color-bot-bubble":
|
|
884
|
-
"--crow-color-bot-text":
|
|
885
|
-
"--crow-color-user-bubble":
|
|
886
|
-
"--crow-color-user-text":
|
|
887
|
-
"--crow-color-user-border":
|
|
888
|
-
"--crow-color-messages-bg":
|
|
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":
|
|
891
|
-
"--crow-font-size": `${
|
|
892
|
-
"--crow-header-font-size": `${
|
|
893
|
-
"--crow-font-weight": `${
|
|
894
|
-
"--crow-line-height": `${
|
|
895
|
-
"--crow-letter-spacing": `${
|
|
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": `${
|
|
898
|
-
"--crow-animation-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
|
|
1045
|
+
const styles = mergeWidgetStyles(dbStyles, propStyles);
|
|
959
1046
|
return {
|
|
960
|
-
styles
|
|
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
|
|
1099
|
+
const styles = mergeCopilotStyles(dbStyles, propStyles);
|
|
1013
1100
|
return {
|
|
1014
|
-
styles
|
|
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
|
|
1128
|
+
styles,
|
|
1042
1129
|
agentName = "Assistant",
|
|
1043
1130
|
isLoading = false,
|
|
1044
1131
|
variant = "floating"
|
|
1045
1132
|
}) {
|
|
1046
1133
|
const value = React3.useMemo(
|
|
1047
|
-
() => ({ styles
|
|
1048
|
-
[
|
|
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
|
|
1155
|
+
styles,
|
|
1069
1156
|
agentName = "Assistant",
|
|
1070
1157
|
isLoading = false
|
|
1071
1158
|
}) {
|
|
1072
1159
|
const value = React3.useMemo(
|
|
1073
|
-
() => ({ styles
|
|
1074
|
-
[
|
|
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
|
|
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:
|
|
1100
|
-
height:
|
|
1101
|
-
right:
|
|
1102
|
-
bottom:
|
|
1103
|
-
background:
|
|
1104
|
-
borderColor:
|
|
1105
|
-
boxShadow:
|
|
1106
|
-
color:
|
|
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:
|
|
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
|
|
1232
|
+
const { styles, variant } = useWidgetStyleContext();
|
|
1141
1233
|
React3.useEffect(() => {
|
|
1142
|
-
const fontParam = GOOGLE_FONTS_MAP[
|
|
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
|
-
}, [
|
|
1243
|
+
}, [styles.typography.fontFamily]);
|
|
1152
1244
|
const baseStyle = {
|
|
1153
|
-
borderRadius:
|
|
1154
|
-
padding:
|
|
1155
|
-
background:
|
|
1156
|
-
borderColor:
|
|
1157
|
-
color:
|
|
1158
|
-
boxShadow:
|
|
1159
|
-
fontFamily:
|
|
1160
|
-
fontSize:
|
|
1161
|
-
fontWeight:
|
|
1162
|
-
lineHeight:
|
|
1163
|
-
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
|
-
|
|
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(${
|
|
1174
|
-
height: `min(${
|
|
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
|
-
|
|
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(${
|
|
1188
|
-
height: `min(${
|
|
1189
|
-
right:
|
|
1190
|
-
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
|
|
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:
|
|
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:
|
|
1220
|
-
fontSize:
|
|
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
|
|
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:
|
|
1550
|
-
color:
|
|
1641
|
+
background: styles.colors.botBubble,
|
|
1642
|
+
color: styles.colors.botText
|
|
1551
1643
|
} : {
|
|
1552
|
-
background:
|
|
1553
|
-
color:
|
|
1554
|
-
border: `1px solid ${
|
|
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
|
|
1619
|
-
const
|
|
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:
|
|
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
|
|
1738
|
-
const 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"
|
|
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
|
|
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
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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:
|
|
2477
|
-
fontSize:
|
|
2478
|
-
fontWeight:
|
|
2479
|
-
lineHeight:
|
|
2480
|
-
letterSpacing:
|
|
2481
|
-
background:
|
|
2482
|
-
borderColor:
|
|
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:
|
|
2491
|
-
borderColor:
|
|
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:
|
|
2500
|
-
fontSize:
|
|
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:
|
|
2558
|
-
|
|
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;
|