@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.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
|
-
|
|
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(
|
|
937
|
+
function stylesToCSSVariables(styles) {
|
|
851
938
|
return {
|
|
852
939
|
// Colors
|
|
853
|
-
"--crow-color-primary":
|
|
854
|
-
"--crow-color-background":
|
|
855
|
-
"--crow-color-text":
|
|
856
|
-
"--crow-color-border":
|
|
857
|
-
"--crow-color-bot-bubble":
|
|
858
|
-
"--crow-color-bot-text":
|
|
859
|
-
"--crow-color-user-bubble":
|
|
860
|
-
"--crow-color-user-text":
|
|
861
|
-
"--crow-color-user-border":
|
|
862
|
-
"--crow-color-messages-bg":
|
|
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":
|
|
865
|
-
"--crow-font-size": `${
|
|
866
|
-
"--crow-header-font-size": `${
|
|
867
|
-
"--crow-font-weight": `${
|
|
868
|
-
"--crow-line-height": `${
|
|
869
|
-
"--crow-letter-spacing": `${
|
|
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": `${
|
|
872
|
-
"--crow-animation-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
|
|
1019
|
+
const styles = mergeWidgetStyles(dbStyles, propStyles);
|
|
933
1020
|
return {
|
|
934
|
-
styles
|
|
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
|
|
1073
|
+
const styles = mergeCopilotStyles(dbStyles, propStyles);
|
|
987
1074
|
return {
|
|
988
|
-
styles
|
|
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
|
|
1102
|
+
styles,
|
|
1016
1103
|
agentName = "Assistant",
|
|
1017
1104
|
isLoading = false,
|
|
1018
1105
|
variant = "floating"
|
|
1019
1106
|
}) {
|
|
1020
1107
|
const value = useMemo(
|
|
1021
|
-
() => ({ styles
|
|
1022
|
-
[
|
|
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
|
|
1129
|
+
styles,
|
|
1043
1130
|
agentName = "Assistant",
|
|
1044
1131
|
isLoading = false
|
|
1045
1132
|
}) {
|
|
1046
1133
|
const value = useMemo(
|
|
1047
|
-
() => ({ styles
|
|
1048
|
-
[
|
|
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
|
|
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:
|
|
1074
|
-
height:
|
|
1075
|
-
right:
|
|
1076
|
-
bottom:
|
|
1077
|
-
background:
|
|
1078
|
-
borderColor:
|
|
1079
|
-
boxShadow:
|
|
1080
|
-
color:
|
|
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:
|
|
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
|
|
1206
|
+
const { styles, variant } = useWidgetStyleContext();
|
|
1115
1207
|
useEffect(() => {
|
|
1116
|
-
const fontParam = GOOGLE_FONTS_MAP[
|
|
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
|
-
}, [
|
|
1217
|
+
}, [styles.typography.fontFamily]);
|
|
1126
1218
|
const baseStyle = {
|
|
1127
|
-
borderRadius:
|
|
1128
|
-
padding:
|
|
1129
|
-
background:
|
|
1130
|
-
borderColor:
|
|
1131
|
-
color:
|
|
1132
|
-
boxShadow:
|
|
1133
|
-
fontFamily:
|
|
1134
|
-
fontSize:
|
|
1135
|
-
fontWeight:
|
|
1136
|
-
lineHeight:
|
|
1137
|
-
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
|
-
|
|
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(${
|
|
1148
|
-
height: `min(${
|
|
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
|
-
|
|
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(${
|
|
1162
|
-
height: `min(${
|
|
1163
|
-
right:
|
|
1164
|
-
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
|
|
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:
|
|
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:
|
|
1194
|
-
fontSize:
|
|
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
|
|
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:
|
|
1524
|
-
color:
|
|
1615
|
+
background: styles.colors.botBubble,
|
|
1616
|
+
color: styles.colors.botText
|
|
1525
1617
|
} : {
|
|
1526
|
-
background:
|
|
1527
|
-
color:
|
|
1528
|
-
border: `1px solid ${
|
|
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
|
|
1593
|
-
const
|
|
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:
|
|
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
|
|
1712
|
-
const 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"
|
|
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
|
|
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
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
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
|
-
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
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:
|
|
2451
|
-
fontSize:
|
|
2452
|
-
fontWeight:
|
|
2453
|
-
lineHeight:
|
|
2454
|
-
letterSpacing:
|
|
2455
|
-
background:
|
|
2456
|
-
borderColor:
|
|
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:
|
|
2465
|
-
borderColor:
|
|
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:
|
|
2474
|
-
fontSize:
|
|
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:
|
|
2532
|
-
|
|
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,
|
|
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
|