teodor-new-chat-ui 3.0.17 → 3.0.18

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.esm.js CHANGED
@@ -3085,7 +3085,7 @@ function Wp({
3085
3085
  case "system":
3086
3086
  return "text-muted-foreground";
3087
3087
  default:
3088
- return "text-foreground";
3088
+ return "text-[hsl(var(--chat-bubble-ai-text))]";
3089
3089
  }
3090
3090
  }, [$]), M = ft(() => jp(e.content), [e.content]), H = ft(() => Xp(e.content), [e.content]), O = ft(() => e.content.filter((W) => W.type === "image_url"), [e.content]), G = ft(() => e.content.filter((W) => W.type === "file"), [e.content]), D = Jp(M, n ? r : 0), T = async () => {
3091
3091
  try {
@@ -3147,7 +3147,12 @@ function Wp({
3147
3147
  case "system":
3148
3148
  return A(W, "w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");
3149
3149
  default:
3150
- return W;
3150
+ return A(
3151
+ W,
3152
+ "w-full md:max-w-[95%]",
3153
+ "bg-[hsl(var(--chat-bubble-ai))] text-[hsl(var(--chat-bubble-ai-text))]",
3154
+ "border border-border/60 dark:border-border/40"
3155
+ );
3151
3156
  }
3152
3157
  }, ie = (W) => {
3153
3158
  if (!W) return "";
package/dist/index.umd.js CHANGED
@@ -6,7 +6,7 @@
6
6
  `+s):n.stack=s}catch{}}throw n}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=dt(this.defaults,r);const{transitional:n,paramsSerializer:o,headers:s}=r;n!==void 0&&yr.assertOptions(n,{silentJSONParsing:We.transitional(We.boolean),forcedJSONParsing:We.transitional(We.boolean),clarifyTimeoutError:We.transitional(We.boolean)},!1),o!=null&&(S.isFunction(o)?r.paramsSerializer={serialize:o}:yr.assertOptions(o,{encode:We.function,serialize:We.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),yr.assertOptions(r,{baseUrl:We.spelling("baseURL"),withXsrfToken:We.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let a=s&&S.merge(s.common,s[r.method]);s&&S.forEach(["delete","get","head","post","put","patch","common"],m=>{delete s[m]}),r.headers=Ce.concat(a,s);const c=[];let l=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(r)===!1||(l=l&&h.synchronous,c.unshift(h.fulfilled,h.rejected))});const f=[];this.interceptors.response.forEach(function(h){f.push(h.fulfilled,h.rejected)});let u,p=0,g;if(!l){const m=[Ys.bind(this),void 0];for(m.unshift(...c),m.push(...f),g=m.length,u=Promise.resolve(r);p<g;)u=u.then(m[p++],m[p++]);return u}g=c.length;let v=r;for(;p<g;){const m=c[p++],h=c[p++];try{v=m(v)}catch(b){h.call(this,b);break}}try{u=Ys.call(this,v)}catch(m){return Promise.reject(m)}for(p=0,g=f.length;p<g;)u=u.then(f[p++],f[p++]);return u}getUri(t){t=dt(this.defaults,t);const r=Us(t.baseURL,t.url,t.allowAbsoluteUrls);return _s(r,t.params,t.paramsSerializer)}};S.forEach(["delete","get","head","options"],function(t){ut.prototype[t]=function(r,n){return this.request(dt(n||{},{method:t,url:r,data:(n||{}).data}))}}),S.forEach(["post","put","patch"],function(t){function r(n){return function(s,a,c){return this.request(dt(c||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:s,data:a}))}}ut.prototype[t]=r(),ut.prototype[t+"Form"]=r(!0)});let pf=class Wd{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(s){r=s});const n=this;this.promise.then(o=>{if(!n._listeners)return;let s=n._listeners.length;for(;s-- >0;)n._listeners[s](o);n._listeners=null}),this.promise.then=o=>{let s;const a=new Promise(c=>{n.subscribe(c),s=c}).then(o);return a.cancel=function(){n.unsubscribe(s)},a},t(function(s,a,c){n.reason||(n.reason=new xt(s,a,c),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){const t=new AbortController,r=n=>{t.abort(n)};return this.subscribe(r),t.signal.unsubscribe=()=>this.unsubscribe(r),t.signal}static source(){let t;return{token:new Wd(function(o){t=o}),cancel:t}}};function hf(e){return function(r){return e.apply(null,r)}}function gf(e){return S.isObject(e)&&e.isAxiosError===!0}const Un={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Un).forEach(([e,t])=>{Un[t]=e});function Qs(e){const t=new ut(e),r=gs(ut.prototype.request,t);return S.extend(r,ut.prototype,t,{allOwnKeys:!0}),S.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return Qs(dt(e,o))},r}const me=Qs(Wt);me.Axios=ut,me.CanceledError=xt,me.CancelToken=pf,me.isCancel=Ls,me.VERSION=Js,me.toFormData=gr,me.AxiosError=oe,me.Cancel=me.CanceledError,me.all=function(t){return Promise.all(t)},me.spread=hf,me.isAxiosError=gf,me.mergeConfig=dt,me.AxiosHeaders=Ce,me.formToJSON=e=>Ms(S.isHTMLForm(e)?new FormData(e):e),me.getAdapter=Xs.getAdapter,me.HttpStatusCode=Un,me.default=me;const{Axios:Bw,AxiosError:Uw,CanceledError:Hw,isCancel:zw,CancelToken:Ww,VERSION:jw,all:Vw,Cancel:Kw,isAxiosError:Rw,spread:Gw,toFormData:qw,AxiosHeaders:Xw,HttpStatusCode:Yw,formToJSON:Jw,getAdapter:Zw,mergeConfig:Qw}=me,Hn={};function xr(){var e;try{return typeof window<"u"&&((e=window.localStorage)==null?void 0:e.getItem("chat-debug"))==="1"}catch{return!1}}const ea=Hn==null?void 0:Hn.VITE_API_BASE_URL,ta=ea?ea.replace(/\/+$/,""):void 0;!ta&&typeof window<"u"&&console.warn("VITE_API_BASE_URL is not set. The API client will need to be configured via apiConfig prop.");let Sr=null;const zn=new Set;function ra(){return Sr}function Wn(e){Sr=e,zn.forEach(t=>t(e))}function na(e){return zn.add(e),()=>zn.delete(e)}const et=me.create({baseURL:ta||"http://localhost:8000",timeout:3e4,withCredentials:!0});et.interceptors.request.use(e=>(Sr&&(e.headers.Authorization=`Bearer ${Sr}`),e)),et.interceptors.response.use(e=>e,e=>Promise.reject(e));async function je(e,t){return(await et.get(e,t)).data}async function Cr(e,t,r){return(await et.post(e,t,r)).data}async function oa(e,t,r){return(await et.put(e,t,r)).data}async function sa(e,t){return(await et.delete(e,t)).data}function Ee(e){return e&&typeof e=="object"&&"data"in e?e.data:e}class Er{get baseUrl(){const t=et.defaults.baseURL||"";return String(t).replace(/\/+$|^\s+|\s+$/g,"")}updateConfig(t){t.baseUrl&&(et.defaults.baseURL=String(t.baseUrl).replace(/\/+$/g,"")),t.authToken!==void 0&&Wn(t.authToken)}getAuthToken(){return ra()}setAuthToken(t){Wn(t)}onTokenChange(t){return na(t)}async listThreads(){const t=await je("/chat/threads"),r=Ee(t);return(r==null?void 0:r.items)??(t==null?void 0:t.items)??[]}async createThread(t){const n=await Cr("/chat/threads",t?{title:t}:void 0);return Ee(n)}async updateThread(t,r){const n=await oa(`/chat/threads/${t}`,{title:r});return Ee(n)}async deleteThread(t){const r=await sa(`/chat/threads/${t}`);return Ee(r)}async threadInfo(t){const r=await je(`/chat/threads/${t}/info`);return Ee(r)}async listAgents(){const t=await je("/chat/agents"),r=Ee(t);return(r==null?void 0:r.items)??[]}async getAgent(t){const r=await je(`/chat/agents/${t}`);return Ee(r)}async getAgentSchema(t){const r=await je(`/chat/agents/${t}/schema`);return Ee(r)}async getMessages(t){const r=await je(`/chat/threads/${t.threadId}/messages`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs,limit:t.limit,before_id:t.beforeId??void 0}});return Ee(r)}async getState(t){const r=await je(`/chat/threads/${t.threadId}/state`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ee(r)}async getStateHistory(t){const r=await je(`/chat/threads/${t.threadId}/state/history`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ee(r)}async listCheckpoints(t){const r=await je(`/chat/threads/${t}/checkpoints`,{params:{thread_id:t}});return Ee(r)}async uploadExcel(t,r="/upload_excel",n={}){const o=new FormData,s=t.name.replace(/\.[^.]+$/,"").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||`excel_${Date.now()}`,a=(n.tableName??s).trim();o.append("file",t,t.name),o.append("table_name",a),n.sheetName&&o.append("sheet_name",n.sheetName),xr()&&console.debug("[api.uploadExcel] ->",r,{name:t.name,size:t.size,tableName:a,sheetName:n.sheetName});const c=await Cr(r,o,{headers:{Accept:"application/json"},maxBodyLength:1/0}),l=Ee(c);return xr()&&console.debug("[api.uploadExcel] <-",l),l}async uploadImage(t,r="/upload"){const n=new FormData;n.append("file",t,t.name),xr()&&console.debug("[api.uploadImage] ->",r,{name:t.name,type:t.type,size:t.size});const o=await Cr(r,n,{headers:{Accept:"application/json"},maxBodyLength:1/0}),s=Ee(o);if(xr()&&console.debug("[api.uploadImage] <-",s),!(s!=null&&s.url))throw new Error("Invalid upload response: missing url");return{url:s.url,mimeType:s.mimeType??t.type,name:s.name??t.name,size:s.size??t.size}}}const Ye=new Er;function aa(e={}){const t=e.baseUrl??"/api/chat",r=e.streamPath??"/runs/stream",[n,o]=T.useState(e.token??null),s=T.useRef(e.headers??{}),[a,c]=T.useState(!1),[l,f]=T.useState(null),[u,p]=T.useState(""),[g,v]=T.useState(null),m=T.useRef(null),h=T.useCallback(y=>{o(y)},[]),b=T.useCallback(()=>{var y;(y=m.current)==null||y.abort(),m.current=null,c(!1)},[]),w=T.useCallback(()=>{p(""),v(null),f(null)},[]),x=T.useCallback((y,C,N)=>{m.current&&(m.current.abort(),m.current=null),c(!0),f(null),e.autoAppendAssistant!==!1&&p("");const k=new AbortController;return m.current=k,(async()=>{var F,I,B,R,U;const E=(()=>{var D;try{return typeof window<"u"&&((D=window.localStorage)==null?void 0:D.getItem("chat-debug"))==="1"}catch{return!1}})(),M=D=>{var z;try{const O=JSON.parse(JSON.stringify(D));return(z=O==null?void 0:O.payload)!=null&&z.files_info&&Array.isArray(O.payload.files_info)&&(O.payload.files_info=O.payload.files_info.map(G=>({...G,data:G!=null&&G.data?`<base64 ${String(G.data).length} chars>`:G==null?void 0:G.data}))),O}catch{return D}};try{let D={};try{if(n)D={Authorization:`Bearer ${n}`};else if(typeof window<"u"){const ee=window.__AUTH_TOKEN__,q=((F=window.localStorage)==null?void 0:F.getItem("authToken"))||null;let ae=null;try{const V=(I=window.localStorage)==null?void 0:I.getItem("chat-settings");V&&(ae=((B=JSON.parse(V))==null?void 0:B.apiKey)||null)}catch{}const $=ee||q||ae||null;$&&(D={Authorization:`Bearer ${$}`})}}catch{}E&&console.debug("[use-chat] POST",t+r,M(y));const z=await fetch(t+r,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",...D,...s.current},body:JSON.stringify(y),signal:k.signal});if(!z.ok||!z.body){const A=await z.text().catch(()=>"");throw E&&console.debug("[use-chat] non-OK response",z.status,A==null?void 0:A.slice(0,500)),new Error(`stream ${z.status}${A?": "+A:""}`)}try{const A=z.headers.get("X-Thread-Id")||z.headers.get("x-thread-id"),ee=z.headers.get("X-Thread-Created")||z.headers.get("x-thread-created"),q=A??null,ae=String(ee??"").toLowerCase()==="true";try{(R=N==null?void 0:N.onOpen)==null||R.call(N,{threadId:q,created:ae})}catch($){E&&console.debug("[use-chat] onOpen handler threw:",$)}}catch(A){E&&console.debug("[use-chat] failed to read headers:",A)}const O=z.body.getReader(),G=new TextDecoder;let L="";for(;;){const{value:A,done:ee}=await O.read();if(ee)break;L+=G.decode(A,{stream:!0});let q;for(;(q=L.indexOf(`
7
7
 
8
8
  `))>=0;){const ae=L.slice(0,q);L=L.slice(q+2);const $=bf(ae);if(!$)continue;let V;try{V=JSON.parse($)}catch{E&&console.debug("[use-chat] skip malformed SSE data:",$==null?void 0:$.slice(0,200));continue}const ce=mf(V)?V.data:V;if(E&&console.debug("[use-chat] event:",ce==null?void 0:ce.type,ce),C==null||C(ce),ce.type==="token")e.autoAppendAssistant!==!1&&p(pe=>pe+ce.content);else if(ce.type==="message_delta"){const pe=ce.delta.filter(W=>W.type==="text").map(W=>W.text).join("");pe&&e.autoAppendAssistant!==!1&&p(W=>W+pe)}else ce.type==="checkpoint"?v(ce.checkpointId):ce.type==="error"&&f(ce.message)}}}catch(D){if((D==null?void 0:D.name)==="AbortError")return;const z=(D==null?void 0:D.message)||String(D);E&&console.debug("[use-chat] error:",z),f(z),(U=N==null?void 0:N.onError)==null||U.call(N,z)}finally{c(!1),m.current=null}})(),{close:()=>k.abort()}},[t,n,e.autoAppendAssistant]);return T.useEffect(()=>()=>{var y;return(y=m.current)==null?void 0:y.abort()},[]),{isStreaming:a,error:l,assistantText:u,lastCheckpointId:g,stream:x,stop:b,clear:w,setToken:h}}function mf(e){return!!e&&typeof e=="object"&&e.protocolVersion==="v1"&&"data"in e}function bf(e){const t=e.split(/\r?\n/),r=[];for(const n of t)if(n&&!n.startsWith(":")&&n.startsWith("data:")){const o=n.slice(5);r.push(o.startsWith(" ")?o.slice(1):o)}return r.length===0?null:r.join(`
9
- `)}const vf={messages:[],assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};function wf(e,t){var r,n;switch(t.type){case"reset":return{messages:jn(((r=t.payload)==null?void 0:r.messages)??[]),assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};case"seed":return{...e,messages:jn(t.payload.messages)};case"prepend":{const o=jn(t.payload.messages);if(!o.length)return e;const s=new Set(e.messages.map(c=>c.id)),a=o.filter(c=>!s.has(c.id));return a.length?{...e,messages:[...a,...e.messages]}:e}case"user_message":{const o=t.payload.message;if(e.assemblingId){const s=e.messages.findIndex(a=>a.id===e.assemblingId&&a.role==="assistant");if(s>=0){const a=e.messages.slice(0,s),c=e.messages.slice(s);return{...e,messages:[...a,o,...c]}}}return{...e,messages:[...e.messages,o]}}case"event":{const o=t.payload.ev;if(o.type==="message_start"&&o.role==="assistant"){const s=o.id,a=Cf(o.model),c={id:s,role:"assistant",name:a||void 0,model:o.model,createdAt:new Date().toISOString(),content:[]};return{...e,assemblingId:s,messages:[...e.messages,c]}}if(o.type==="token"){const s=e.assemblingId??Vn(e.messages);return s?{...e,messages:yf(e.messages,s,o.content)}:e}if(o.type==="message_delta"){const s=e.assemblingId??Vn(e.messages);return s?{...e,messages:ca(e.messages,s,o.delta)}:e}if(o.type==="message_end"){const s=e.assemblingId??Vn(e.messages);if(!s)return{...e,assemblingId:null};const a=e.messages,c=a.findIndex(l=>l.id===s&&l.role==="assistant");if(c>=0&&!((n=a[c].content)==null?void 0:n.some(u=>{var p;return(u==null?void 0:u.type)==="text"&&((p=u.text)==null?void 0:p.trim())}))){const u=[...a.slice(0,c),...a.slice(c+1)];return{...e,assemblingId:null,messages:u}}return{...e,assemblingId:null}}if(o.type==="tool_start"){const s=`tool-${o.id}`,a={type:"tool_call",id:o.id,name:o.name,args:o.args},c={id:s,role:"tool",name:o.name,createdAt:new Date().toISOString(),content:[a]};return{...e,messages:[...e.messages,c],toolIndex:{...e.toolIndex,[o.id]:s}}}if(o.type==="tool_result"){const s=e.toolIndex[o.id]??`tool-${o.id}`,a={type:"tool_result",toolCallId:o.id,output:o.output,error:o.error},c=e.messages.find(u=>u.id===s),l={id:s,role:"tool",content:[a],createdAt:new Date().toISOString()},f=c?ca(e.messages,s,[a]):[...e.messages,l];return{...e,messages:f}}if(o.type==="checkpoint"){const s=Sf(e.messages,o.checkpointId);return{...e,lastCheckpointId:o.checkpointId,messages:s}}if(o.type==="branch"){const s=o.checkpointId??e.lastCheckpointId;return{...e,lastBranch:o,lastCheckpointId:s??null}}if(o.type==="error"){const s={id:`err-${Date.now()}`,role:"system",content:[{type:"text",text:`Error: ${o.message}`}],createdAt:new Date().toISOString()};return{...e,messages:[...e.messages,s]}}return e}default:return e}}function ia(e=[]){const[t,r]=T.useReducer(wf,{...vf,messages:e}),n=T.useCallback(s=>{r({type:"event",payload:{ev:s}})},[]),o=T.useMemo(()=>({reset:s=>r({type:"reset",payload:{messages:s}}),seed:s=>r({type:"seed",payload:{messages:s}}),prepend:s=>r({type:"prepend",payload:{messages:s}}),pushUser:s=>r({type:"user_message",payload:{message:s}}),onEvent:n}),[n]);return{state:t,dispatch:r,...o}}function jn(e){return e.filter(t=>{if(t.role!=="assistant")return!0;const r=(t.content||[]).some(o=>{var s;return o&&o.type==="text"&&((s=o.text)==null?void 0:s.trim())}),n=(t.content||[]).some(o=>o&&o.type==="image_url");return!!(r||n)})}function Vn(e){for(let t=e.length-1;t>=0;t--)if(e[t].role==="assistant")return e[t].id;return null}function yf(e,t,r){return e.map(n=>{if(n.id!==t)return n;const o=n.content.slice(),s=o[o.length-1];return s&&s.type==="text"?s.text+=r:o.push({type:"text",text:r}),{...n,content:o}})}function ca(e,t,r){return e.map(n=>n.id===t?{...n,content:xf(n.content,r)}:n)}function xf(e,t){const r=e.slice();for(const n of t)if(n.type==="text"){const o=r[r.length-1];(o==null?void 0:o.type)==="text"?o.text+=n.text:r.push({type:"text",text:n.text})}else r.push(n);return r}function Sf(e,t){for(let r=e.length-1;r>=0;r--)if(e[r].role==="assistant"){const o={...e[r],checkpointId:t};return[...e.slice(0,r),o,...e.slice(r+1)]}return e}function Cf(e){if(!e)return null;const t=e.split("/");return t[t.length-1]||null}function Ef(e,t){const r=e==null?void 0:e.checkpoints,n=Array.isArray(r)?r.slice():r?Object.values(r):[],o=a=>a&&typeof a=="object"&&typeof a.checkpointId=="string"&&typeof a.createdAt=="string",s=n.filter(o).map(a=>({checkpointId:a.checkpointId,checkpointNs:a.checkpointNs??"",createdAt:a.createdAt,messagesLen:a.messagesLen??0,preview:a.preview??"",role:a.role??null,parentId:a.parentId??null,editedMessageId:a.editedMessageId??null,branchLabel:a.branchLabel??null}));return{threadId:(e==null?void 0:e.threadId)??t??null,checkpoints:s}}async function Kn(e){return await new Promise((t,r)=>{const n=new FileReader;n.onload=()=>t(String(n.result)),n.onerror=o=>r(o),n.readAsDataURL(e)})}async function la(e){return await new Promise((t,r)=>{const n=new FileReader;n.onload=()=>{try{const o=n.result,s=new Uint8Array(o);let a="";const c=s.byteLength;for(let l=0;l<c;l++)a+=String.fromCharCode(s[l]);t(btoa(a))}catch(o){r(o)}},n.onerror=o=>r(o),n.readAsArrayBuffer(e)})}async function Nf(e,t,r){if(!t.type||!t.type.startsWith("image/"))return null;try{const n=await e.uploadImage(t,r||"/upload").catch(()=>null);if(n&&n.url)return n.url}catch{}try{return await Kn(t)}catch{return null}}async function Tf(e,t=[],r,n,o){const s=[],a=[];for(const c of t)if(c.type&&c.type.startsWith("image/")){let l=null;try{l=await Nf(e,c,r)}catch{l=null}if(l){const f={type:"image_url",url:l,mimeType:c.type,alt:c.name};s.push(f)}else try{const f=await Kn(c),u={type:"file",url:String(f),mimeType:c.type||void 0,name:c.name,size:c.size};s.push(u)}catch{}try{const f=await la(c);a.push({filename:c.name,data:f,mime_type:c.type||"application/octet-stream"})}catch{}}else{try{const l=await Kn(c),f={type:"file",url:String(l),mimeType:c.type||void 0,name:c.name,size:c.size};s.push(f)}catch{}try{const l=await la(c);a.push({filename:c.name,data:l,mime_type:c.type||"application/octet-stream"})}catch{}}return{contentParts:s,filesInfo:a}}const da=T.createContext(null);function Vt({children:e,apiConfig:t,onError:r,onThreadChange:n,initialThreadId:o=null,historyPageSize:s,enableFileAgentRouting:a=!1,fileAgentId:c="invoice_reader"}){const l=Ye;T.useEffect(()=>{t&&l.updateConfig({baseUrl:t.baseUrl,authToken:t.apiKey})},[l,t]);const{isStreaming:f,error:u,stream:p,stop:g,setToken:v}=aa({baseUrl:l.baseUrl,token:null,headers:t==null?void 0:t.headers,streamPath:"/chat/runs/stream"}),[m,h]=T.useState(()=>typeof l.getAuthToken=="function"?l.getAuthToken():null);T.useEffect(()=>{v(typeof l.getAuthToken=="function"?l.getAuthToken():null);const J=l.onTokenChange(Q=>{h(Q),v(Q)});return()=>{J()}},[l,v]);const b=T.useCallback(J=>{l.setAuthToken(J)},[l]),{state:w,seed:x,prepend:y,pushUser:C,onEvent:N,reset:k}=ia(),E=s&&s>0?s:6,[M,F]=T.useState(!1),[I,B]=T.useState(!1),[R,U]=T.useState(null),[D,z]=T.useState(void 0),O=T.useCallback((J,Q)=>{const he=Array.isArray(J==null?void 0:J.messages)?J.messages:[];Q==="replace"?x(he):Q==="prepend"&&he.length&&y(he),U((J==null?void 0:J.nextCursor)??null),F(!!(J!=null&&J.hasMore)),z(Oe=>(J==null?void 0:J.checkpointId)??Oe??void 0)},[x,y]),[G,L]=T.useState([]),[A,ee]=T.useState(null),q=T.useCallback(async()=>{const J=await l.listThreads();L(J)},[l]);T.useEffect(()=>{q().catch(()=>{})},[q]),T.useEffect(()=>{n==null||n(A)},[A,n]);const ae=T.useRef(null);T.useEffect(()=>{o&&ae.current!==o&&(ae.current=o,V(o).catch(()=>{}))},[o]);const $=T.useRef(null),V=T.useCallback(async(J,Q,he)=>{if($.current!==J){$.current=J;try{F(!1),U(null),z(void 0);const Oe=await l.getMessages({threadId:J,checkpointId:Q,checkpointNs:he,limit:E});ee(J),O(Oe,"replace")}finally{$.current=null}}},[l,O]),ce=T.useCallback(async J=>{const Q=await l.listCheckpoints(J);return Ef(Q,J)},[l]),pe=T.useCallback(async J=>{if(!A)throw new Error("No active thread");F(!1),U(null),z(void 0);const Q=await l.getMessages({threadId:A,checkpointId:J,limit:E});O(Q,"replace")},[l,A,O,E]),W=T.useCallback(async()=>{if(!A)throw new Error("No active thread");await V(A)},[A,V]),j=T.useRef(!1);T.useEffect(()=>{const J=j.current;if(j.current=f,J&&!f&&A){const Q=w.lastCheckpointId??void 0;(async()=>{try{const he=await l.getMessages({threadId:A,checkpointId:Q,limit:E});O(he,"replace")}catch{}try{await q()}catch{}})()}},[f,A,w.lastCheckpointId,l,O,q]);const ie=T.useCallback(async J=>{const Q=await l.createThread(J);return await q(),await V(Q.threadId),Q.threadId},[l,q,V]),K=T.useCallback(async J=>{await l.deleteThread(J),await q(),A===J&&(ee(null),k([]),F(!1),U(null),z(void 0))},[l,q,A,k]),Y=T.useCallback(async(J,Q)=>{await l.updateThread(J,Q),await q()},[l,q]),ne=T.useCallback(async(J,Q)=>{var $t;const he=(Q==null?void 0:Q.attachments)||[],{contentParts:Oe,filesInfo:Me}=await Tf(l,he,t==null?void 0:t.uploadPath),Ft=[];J&&Ft.push({type:"text",text:J});for(const be of Oe)Ft.push(be);const Qe={id:(($t=crypto.randomUUID)==null?void 0:$t.call(crypto))||`user-${Date.now()}`,role:"user",content:Ft,createdAt:new Date().toISOString(),checkpointId:(Q==null?void 0:Q.checkpointId)??w.lastCheckpointId??void 0};C(Qe);const ls={...Qe,content:Qe.content.filter(be=>be.type==="text"||be.type==="image_url")},lr={...(Q==null?void 0:Q.payloadExtras)??{}},En=!!lr.edit,Nn=lr.originalMessageId,ds=typeof Nn=="string"?Nn:void 0,Tn=he&&he.length>0,us={...A?{threadId:A}:{},payload:{messages:[ls],attachments:Qe.content.filter(be=>be.type==="file").map(be=>({type:"file",url:be.url,mimeType:be.mimeType,name:be.name,size:be.size})),files_info:Me,...a&&Tn&&c?{agent_id:c}:{},...lr},checkpointId:(Q==null?void 0:Q.checkpointId)??w.lastCheckpointId??void 0,checkpointNs:Q==null?void 0:Q.checkpointNs,nodeFilter:Q==null?void 0:Q.nodeFilter,config:Q==null?void 0:Q.config,edit:En,originalMessageId:ds};p(us,be=>N(be),{onError:be=>console.warn("stream error",be),onOpen:({threadId:be,created:fs})=>{!A&&be&&(ee(be),fs&&q().catch(()=>{}))}})},[A,C,p,N,w.lastCheckpointId,l,t==null?void 0:t.uploadPath,q,ee,a,c]),ge=T.useCallback(async J=>{if(!A)throw new Error("No active thread");if(I||!M)return;const Q=R;if(Q){B(!0);try{const he=await l.getMessages({threadId:A,checkpointId:D,limit:(J==null?void 0:J.limit)??E,beforeId:Q});O(he,"prepend")}finally{B(!1)}}},[l,A,D,R,M,I,O]),fe={baseUrl:l.baseUrl,token:m,setToken:b,api:l,threads:G,currentThreadId:A,setCurrentThreadId:ee,messages:w.messages,isStreaming:f,error:u,lastCheckpointId:w.lastCheckpointId,streamingAssistantId:w.assemblingId,hasMoreHistory:M,isLoadingHistory:I,loadOlderMessages:ge,historyPageSize:E,listCheckpoints:ce,navigateToCheckpoint:pe,returnToLatest:W,refreshThreads:q,createThread:ie,deleteThread:K,renameThread:Y,loadThread:V,send:ne,stop:g};return i.jsx(da.Provider,{value:fe,children:e})}function Rn(){const e=T.useContext(da);if(!e)throw new Error("useChat must be used within ChatProvider");return e}function P(...e){return Vd.twMerge(jd.clsx(e))}const Af=Bt.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),ue=d.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const a=n?Te.Slot:"button";return i.jsx(a,{className:P(Af({variant:t,size:r,className:e})),ref:s,...o})});ue.displayName="Button";const ua=d.forwardRef(({className:e,...t},r)=>i.jsx("textarea",{className:P("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...t}));ua.displayName="Textarea";const Pf=Bt.cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function fa({className:e,variant:t,...r}){return i.jsx("div",{className:P(Pf({variant:t}),e),...r})}function H(e,t,{checkForDefaultPrevented:r=!0}={}){return function(o){if(e==null||e(o),r===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function If(e,t){const r=d.createContext(t),n=s=>{const{children:a,...c}=s,l=d.useMemo(()=>c,Object.values(c));return i.jsx(r.Provider,{value:l,children:a})};n.displayName=e+"Provider";function o(s){const a=d.useContext(r);if(a)return a;if(t!==void 0)return t;throw new Error(`\`${s}\` must be used within \`${e}\``)}return[n,o]}function Le(e,t=[]){let r=[];function n(s,a){const c=d.createContext(a),l=r.length;r=[...r,a];const f=p=>{var w;const{scope:g,children:v,...m}=p,h=((w=g==null?void 0:g[e])==null?void 0:w[l])||c,b=d.useMemo(()=>m,Object.values(m));return i.jsx(h.Provider,{value:b,children:v})};f.displayName=s+"Provider";function u(p,g){var h;const v=((h=g==null?void 0:g[e])==null?void 0:h[l])||c,m=d.useContext(v);if(m)return m;if(a!==void 0)return a;throw new Error(`\`${p}\` must be used within \`${s}\``)}return[f,u]}const o=()=>{const s=r.map(a=>d.createContext(a));return function(c){const l=(c==null?void 0:c[e])||s;return d.useMemo(()=>({[`__scope${e}`]:{...c,[e]:l}}),[c,l])}};return o.scopeName=e,[n,_f(o,...t)]}function _f(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const a=n.reduce((c,{useScope:l,scopeName:f})=>{const p=l(s)[`__scope${f}`];return{...c,...p}},{});return d.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}var ve=globalThis!=null&&globalThis.document?d.useLayoutEffect:()=>{},kf=d[" useInsertionEffect ".trim().toString()]||ve;function tt({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,a]=Of({defaultProp:t,onChange:r}),c=e!==void 0,l=c?e:o;{const u=d.useRef(e!==void 0);d.useEffect(()=>{const p=u.current;p!==c&&console.warn(`${n} is changing from ${p?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=c},[c,n])}const f=d.useCallback(u=>{var p;if(c){const g=Mf(u)?u(e):u;g!==e&&((p=a.current)==null||p.call(a,g))}else s(u)},[c,e,s,a]);return[l,f]}function Of({defaultProp:e,onChange:t}){const[r,n]=d.useState(e),o=d.useRef(r),s=d.useRef(t);return kf(()=>{s.current=t},[t]),d.useEffect(()=>{var a;o.current!==r&&((a=s.current)==null||a.call(s,r),o.current=r)},[r,o]),[r,n,s]}function Mf(e){return typeof e=="function"}function pa(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Gn(...e){return t=>{let r=!1;const n=e.map(o=>{const s=pa(o,t);return!r&&typeof s=="function"&&(r=!0),s});if(r)return()=>{for(let o=0;o<n.length;o++){const s=n[o];typeof s=="function"?s():pa(e[o],null)}}}}function se(...e){return d.useCallback(Gn(...e),e)}var Df=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],te=Df.reduce((e,t)=>{const r=Te.createSlot(`Primitive.${t}`),n=d.forwardRef((o,s)=>{const{asChild:a,...c}=o,l=a?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(l,{...c,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function ha(e,t){e&&dr.flushSync(()=>e.dispatchEvent(t))}function Lf(e,t){return d.useReducer((r,n)=>t[r][n]??r,e)}var Ne=e=>{const{present:t,children:r}=e,n=Ff(t),o=typeof r=="function"?r({present:n.isPresent}):d.Children.only(r),s=se(n.ref,$f(o));return typeof r=="function"||n.isPresent?d.cloneElement(o,{ref:s}):null};Ne.displayName="Presence";function Ff(e){const[t,r]=d.useState(),n=d.useRef(null),o=d.useRef(e),s=d.useRef("none"),a=e?"mounted":"unmounted",[c,l]=Lf(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return d.useEffect(()=>{const f=Nr(n.current);s.current=c==="mounted"?f:"none"},[c]),ve(()=>{const f=n.current,u=o.current;if(u!==e){const g=s.current,v=Nr(f);e?l("MOUNT"):v==="none"||(f==null?void 0:f.display)==="none"?l("UNMOUNT"):l(u&&g!==v?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,l]),ve(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,p=v=>{const h=Nr(n.current).includes(CSS.escape(v.animationName));if(v.target===t&&h&&(l("ANIMATION_END"),!o.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",f=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},g=v=>{v.target===t&&(s.current=Nr(n.current))};return t.addEventListener("animationstart",g),t.addEventListener("animationcancel",p),t.addEventListener("animationend",p),()=>{u.clearTimeout(f),t.removeEventListener("animationstart",g),t.removeEventListener("animationcancel",p),t.removeEventListener("animationend",p)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:d.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function Nr(e){return(e==null?void 0:e.animationName)||"none"}function $f(e){var n,o;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Bf=d[" useId ".trim().toString()]||(()=>{}),Uf=0;function Fe(e){const[t,r]=d.useState(Bf());return ve(()=>{r(n=>n??String(Uf++))},[e]),t?`radix-${t}`:""}var Tr="Collapsible",[Hf,ey]=Le(Tr),[zf,qn]=Hf(Tr),ga=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:a,...c}=e,[l,f]=tt({prop:n,defaultProp:o??!1,onChange:a,caller:Tr});return i.jsx(zf,{scope:r,disabled:s,contentId:Fe(),open:l,onOpenToggle:d.useCallback(()=>f(u=>!u),[f]),children:i.jsx(te.div,{"data-state":Yn(l),"data-disabled":s?"":void 0,...c,ref:t})})});ga.displayName=Tr;var ma="CollapsibleTrigger",ba=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=qn(ma,r);return i.jsx(te.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":Yn(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:H(e.onClick,o.onOpenToggle)})});ba.displayName=ma;var Xn="CollapsibleContent",Wf=d.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=qn(Xn,e.__scopeCollapsible);return i.jsx(Ne,{present:r||o.open,children:({present:s})=>i.jsx(jf,{...n,ref:t,present:s})})});Wf.displayName=Xn;var jf=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,a=qn(Xn,r),[c,l]=d.useState(n),f=d.useRef(null),u=se(t,f),p=d.useRef(0),g=p.current,v=d.useRef(0),m=v.current,h=a.open||c,b=d.useRef(h),w=d.useRef(void 0);return d.useEffect(()=>{const x=requestAnimationFrame(()=>b.current=!1);return()=>cancelAnimationFrame(x)},[]),ve(()=>{const x=f.current;if(x){w.current=w.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const y=x.getBoundingClientRect();p.current=y.height,v.current=y.width,b.current||(x.style.transitionDuration=w.current.transitionDuration,x.style.animationName=w.current.animationName),l(n)}},[a.open,n]),i.jsx(te.div,{"data-state":Yn(a.open),"data-disabled":a.disabled?"":void 0,id:a.contentId,hidden:!h,...s,ref:u,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:h&&o})});function Yn(e){return e?"open":"closed"}var Vf=ga;const va=Vf,wa=ba;function Kt({content:e,className:t=""}){const r=T.useMemo(()=>({table:({node:f,className:u,...p})=>i.jsx("div",{className:"max-w-full",children:i.jsx("table",{...p,className:P("w-full table-fixed border-collapse break-words",u)})}),th:({node:f,className:u,...p})=>i.jsx("th",{...p,className:P("break-words whitespace-normal border-b border-border/60 px-3 py-2 text-left align-top",u)}),td:({node:f,className:u,...p})=>i.jsx("td",{...p,className:P("break-words whitespace-normal border-b border-border/30 px-3 py-2 align-top",u)}),pre:({node:f,className:u,...p})=>i.jsx("pre",{...p,className:P("whitespace-pre-wrap break-words",u)}),code:({node:f,className:u,children:p,...g})=>{const{inline:v,...m}=g;return v?i.jsx("code",{...m,className:P("break-words whitespace-normal",u),children:p}):i.jsx("code",{...m,className:P("block break-words whitespace-pre-wrap",u),children:p})}}),[]),n=P("prose prose-sm max-w-none break-words dark:prose-invert leading-relaxed","prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words","prose-a:break-all prose-blockquote:break-words prose-strong:break-words prose-em:break-words","prose-code:break-words prose-pre:rounded prose-pre:border prose-pre:bg-background/50","prose-code:bg-background/50 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-table:my-4 prose-th:px-2 prose-td:px-2",t);return i.jsx("div",{className:n,style:{wordBreak:"break-word",overflowWrap:"anywhere"},children:i.jsx(Kd,{remarkPlugins:[Rd],components:r,children:e})})}const Ar="prose prose-sm max-w-none break-words dark:prose-invert prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words prose-a:break-all prose-code:break-words prose-blockquote:break-words";function Kf({className:e}){const[t,r]=T.useState(0);return T.useEffect(()=>{const n=setInterval(()=>r(o=>(o+1)%4),500);return()=>clearInterval(n)},[]),i.jsxs("span",{"aria-live":"polite",className:P("inline-block text-xs opacity-70 ml-1",e),children:["Is thinking",".".repeat(t)]})}function ya({message:e,messageIndex:t,isStreamingMessage:r=!1,streamingDebounceMs:n=40,isEditing:o=!1,showActions:s=!0,showTimestamp:a=!0,showAgentName:c=!0,layoutSize:l="desktop",truncateToolMessages:f=!0,toolMessagePreviewLength:u=200,truncateUserMessages:p=!0,userMessagePreviewLength:g=200,customStyles:v={},onEdit:m,onRegenerate:h,onCancelEdit:b,onCopy:w}){const[x,y]=T.useState(!1),[C,N]=T.useState(!1),[k,E]=T.useState(!1),[M,F]=T.useState(!1),I=l==="phone"||l==="half-screen",B=e.role,R=B==="tool",U=T.useMemo(()=>{switch(B){case"user":return"text-[hsl(var(--chat-bubble-user-text))]";case"assistant":return"text-[hsl(var(--chat-bubble-ai-text))]";case"tool":return"text-secondary-foreground";case"system":return"text-muted-foreground";default:return"text-foreground"}},[B]),D=T.useMemo(()=>Rf(e.content),[e.content]),z=T.useMemo(()=>Jf(e.content),[e.content]),O=T.useMemo(()=>e.content.filter(j=>j.type==="image_url"),[e.content]),G=T.useMemo(()=>e.content.filter(j=>j.type==="file"),[e.content]),L=Qf(D,r?n:0),A=async()=>{try{const j=R?St(e.content):D;await navigator.clipboard.writeText(j),y(!0),setTimeout(()=>y(!1),2e3),w==null||w(j)}catch(j){console.error("Failed to copy:",j)}},ee=()=>{if(!m)return;const j=R?St(e.content):D;m(e.id,j)},q=()=>h==null?void 0:h(t),ae=()=>{const ie=P(I?"h-3 w-3":"h-4 w-4","opacity-60 flex-shrink-0",U);switch(B){case"user":return i.jsx(X.User,{className:ie});case"assistant":return i.jsx(X.Bot,{className:ie});case"tool":return i.jsx(X.Wrench,{className:ie});default:return i.jsx(X.Bot,{className:ie})}},$=()=>{const j="group relative mb-4 flex w-full";switch(B){case"user":return P(j,"justify-end");case"assistant":case"tool":case"system":return P(j,"justify-start");default:return j}},V=()=>{const j=P("rounded-lg px-4 py-3 relative transition-all duration-200 min-w-0 max-w-full break-words",I&&"px-3 py-2 text-sm");switch(B){case"user":return P(j,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-user))] text-[hsl(var(--chat-bubble-user-text))]","border border-transparent");case"assistant":return P(j,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-ai))] text-[hsl(var(--chat-bubble-ai-text))]","border border-border/60 dark:border-border/40");case"tool":return P(j,"w-full md:max-w-[95%] bg-secondary/50 text-secondary-foreground border border-dashed");case"system":return P(j,"w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");default:return j}},ce=j=>{if(!j)return"";try{return new Date(j).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return""}},pe=()=>{if(e.model==="reflection"){const K=D.trim(),Y=Jn(K);if(Y&&typeof Y=="object")return i.jsx(ep,{data:Y})}if(R&&z.name==="get_issues"){const K=e.content.find(ge=>ge.type==="tool_result"),Y=(K==null?void 0:K.output)??St(e.content),ne=Ca(Y);if(ne)return i.jsx(tp,{issues:ne})}if(R&&!k){const K=St(e.content).slice(0,80).replace(/\s+/g," ");return i.jsx("div",{className:P("text-xs font-mono opacity-70 flex items-center justify-between gap-2 text-current",I&&"text-[10px]"),children:i.jsxs("span",{className:"truncate max-w-full text-current",children:[K,K.length>=80?"…":""]})})}if(R&&f){const K=St(e.content),Y=K.length>u;return i.jsx(va,{open:C,onOpenChange:N,children:i.jsxs("div",{className:"font-mono text-sm text-current",children:[i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y&&!C?K.substring(0,u)+"...":K}),Y&&i.jsx(wa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs text-current",children:C?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"}),"Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"}),"Show more (",K.length-u," chars)"]})})})]})})}if(R&&k&&!f){const K=rp(e.content);if(K&&Gf(K))return i.jsx(Kt,{content:K.trim()});const Y=St(e.content);return i.jsx("div",{className:"font-mono text-sm text-current",children:i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y})})}const j=O.length>0&&B!=="tool",ie=G.length>0&&B!=="tool";return i.jsxs("div",{children:[r?i.jsxs("div",{className:"relative",children:[(()=>{const K=Jn(L);return K!==null?i.jsx(xa,{data:K}):i.jsx(Kt,{content:Xf(qf(L))})})(),i.jsx(Kf,{className:P(U,I?"text-xs":"text-sm")})]}):(()=>{const K=Jn(D.trim());if(K!==null)return i.jsx(xa,{data:K});if(B==="user"&&p){const Y=D.trim();if(Y.length>g)return i.jsxs(va,{open:M,onOpenChange:F,children:[i.jsx("div",{className:P("text-sm text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:M?i.jsx(Kt,{content:Y}):i.jsxs("pre",{className:P("font-sans whitespace-pre-wrap break-words bg-transparent p-0 m-0 text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:[Y.substring(0,g),"..."]})}),i.jsx(wa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs !text-[hsl(var(--chat-bubble-user-text))]",children:M?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"})," Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"})," Show more (",Y.length-g," chars)"]})})})]})}return i.jsx(Kt,{content:D.trim()})})(),j&&i.jsx("div",{className:"mt-2 grid grid-cols-2 gap-2",children:O.map((K,Y)=>i.jsxs("div",{className:"relative border rounded overflow-hidden",children:[i.jsx("img",{src:K.url,alt:K.alt??"image",className:"w-full h-auto"}),i.jsxs("div",{className:"absolute top-1 right-1 bg-background/70 rounded px-1 py-0.5 text-[10px] flex items-center gap-1",children:[i.jsx(X.Image,{className:"h-3 w-3"}),i.jsx("span",{children:"image"})]})]},Y))}),ie&&i.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:G.map((K,Y)=>{const ne=K,ge=ne.name||"file";return i.jsxs("a",{href:ne.url,download:ge,target:"_blank",rel:"noreferrer",className:P("inline-flex items-center gap-2 rounded px-2 py-1 text-xs","bg-gray-100 border border-gray-200 hover:bg-gray-200","dark:bg-background/10 dark:border-border/30 dark:hover:bg-background/20","text-current"),title:ge,children:[i.jsx("span",{className:"inline-block w-1.5 h-1.5 rounded-full bg-gray-400 dark:bg-gray-500"}),i.jsx("span",{className:"truncate max-w-[180px]",children:ge})]},Y)})})]})},W=T.useMemo(()=>Zf(e),[e]);return i.jsx("div",{className:P($(),v.container),children:i.jsxs("div",{className:P(V(),v.content),children:[(a||c||R)&&i.jsxs("div",{className:P("flex items-center justify-between mb-2 pb-2 border-b border-current/10",I&&"mb-1 pb-1",U,v.header),children:[i.jsxs("div",{className:"flex items-center gap-2",children:[ae(),c&&W&&i.jsx("span",{className:P("font-medium",I?"text-xs":"text-sm"),children:W}),R&&z.name&&i.jsxs(fa,{variant:"outline",className:P("text-xs flex items-center gap-1 cursor-pointer",U,"border border-current/40",I&&"text-xs h-4"),onClick:()=>E(j=>!j),children:[i.jsx("span",{children:z.name}),i.jsx("span",{className:"inline-flex items-center",children:k?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})})]}),R&&!z.name&&i.jsx(ue,{variant:"ghost",size:"sm",className:P("h-6 px-1",U,"hover:bg-foreground/10"),onClick:()=>E(j=>!j),children:i.jsxs("span",{className:"text-xs flex items-center gap-1",children:["Tool Output ",k?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})]})})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[a&&i.jsx("span",{className:P("text-xs opacity-60",U,I&&"text-xs"),children:ce(e.createdAt)}),s&&!o&&i.jsxs("div",{className:P("opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":U,I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P(U,I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P(U,I?"h-3 w-3":"h-4 w-4")})})]})]})]}),i.jsx("div",{className:"relative",children:pe()}),R&&k&&(z.toolCallId||z.name)&&i.jsxs("div",{className:P("mt-2 pt-2 border-t border-current/10 text-xs opacity-60",I&&"text-xs"),children:[z.name&&i.jsxs("div",{children:["Function: ",z.name]}),z.toolCallId&&i.jsxs("div",{children:["Call ID: ",z.toolCallId]})]}),!(a||c||R)&&s&&!o&&i.jsxs("div",{className:P("absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":"text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})})]})]})})}function Rf(e){const t=e.filter(r=>r.type==="text").map(r=>r.text).join("");return t||JSON.stringify(e)}function Gf(e){return e.includes(`
9
+ `)}const vf={messages:[],assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};function wf(e,t){var r,n;switch(t.type){case"reset":return{messages:jn(((r=t.payload)==null?void 0:r.messages)??[]),assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};case"seed":return{...e,messages:jn(t.payload.messages)};case"prepend":{const o=jn(t.payload.messages);if(!o.length)return e;const s=new Set(e.messages.map(c=>c.id)),a=o.filter(c=>!s.has(c.id));return a.length?{...e,messages:[...a,...e.messages]}:e}case"user_message":{const o=t.payload.message;if(e.assemblingId){const s=e.messages.findIndex(a=>a.id===e.assemblingId&&a.role==="assistant");if(s>=0){const a=e.messages.slice(0,s),c=e.messages.slice(s);return{...e,messages:[...a,o,...c]}}}return{...e,messages:[...e.messages,o]}}case"event":{const o=t.payload.ev;if(o.type==="message_start"&&o.role==="assistant"){const s=o.id,a=Cf(o.model),c={id:s,role:"assistant",name:a||void 0,model:o.model,createdAt:new Date().toISOString(),content:[]};return{...e,assemblingId:s,messages:[...e.messages,c]}}if(o.type==="token"){const s=e.assemblingId??Vn(e.messages);return s?{...e,messages:yf(e.messages,s,o.content)}:e}if(o.type==="message_delta"){const s=e.assemblingId??Vn(e.messages);return s?{...e,messages:ca(e.messages,s,o.delta)}:e}if(o.type==="message_end"){const s=e.assemblingId??Vn(e.messages);if(!s)return{...e,assemblingId:null};const a=e.messages,c=a.findIndex(l=>l.id===s&&l.role==="assistant");if(c>=0&&!((n=a[c].content)==null?void 0:n.some(u=>{var p;return(u==null?void 0:u.type)==="text"&&((p=u.text)==null?void 0:p.trim())}))){const u=[...a.slice(0,c),...a.slice(c+1)];return{...e,assemblingId:null,messages:u}}return{...e,assemblingId:null}}if(o.type==="tool_start"){const s=`tool-${o.id}`,a={type:"tool_call",id:o.id,name:o.name,args:o.args},c={id:s,role:"tool",name:o.name,createdAt:new Date().toISOString(),content:[a]};return{...e,messages:[...e.messages,c],toolIndex:{...e.toolIndex,[o.id]:s}}}if(o.type==="tool_result"){const s=e.toolIndex[o.id]??`tool-${o.id}`,a={type:"tool_result",toolCallId:o.id,output:o.output,error:o.error},c=e.messages.find(u=>u.id===s),l={id:s,role:"tool",content:[a],createdAt:new Date().toISOString()},f=c?ca(e.messages,s,[a]):[...e.messages,l];return{...e,messages:f}}if(o.type==="checkpoint"){const s=Sf(e.messages,o.checkpointId);return{...e,lastCheckpointId:o.checkpointId,messages:s}}if(o.type==="branch"){const s=o.checkpointId??e.lastCheckpointId;return{...e,lastBranch:o,lastCheckpointId:s??null}}if(o.type==="error"){const s={id:`err-${Date.now()}`,role:"system",content:[{type:"text",text:`Error: ${o.message}`}],createdAt:new Date().toISOString()};return{...e,messages:[...e.messages,s]}}return e}default:return e}}function ia(e=[]){const[t,r]=T.useReducer(wf,{...vf,messages:e}),n=T.useCallback(s=>{r({type:"event",payload:{ev:s}})},[]),o=T.useMemo(()=>({reset:s=>r({type:"reset",payload:{messages:s}}),seed:s=>r({type:"seed",payload:{messages:s}}),prepend:s=>r({type:"prepend",payload:{messages:s}}),pushUser:s=>r({type:"user_message",payload:{message:s}}),onEvent:n}),[n]);return{state:t,dispatch:r,...o}}function jn(e){return e.filter(t=>{if(t.role!=="assistant")return!0;const r=(t.content||[]).some(o=>{var s;return o&&o.type==="text"&&((s=o.text)==null?void 0:s.trim())}),n=(t.content||[]).some(o=>o&&o.type==="image_url");return!!(r||n)})}function Vn(e){for(let t=e.length-1;t>=0;t--)if(e[t].role==="assistant")return e[t].id;return null}function yf(e,t,r){return e.map(n=>{if(n.id!==t)return n;const o=n.content.slice(),s=o[o.length-1];return s&&s.type==="text"?s.text+=r:o.push({type:"text",text:r}),{...n,content:o}})}function ca(e,t,r){return e.map(n=>n.id===t?{...n,content:xf(n.content,r)}:n)}function xf(e,t){const r=e.slice();for(const n of t)if(n.type==="text"){const o=r[r.length-1];(o==null?void 0:o.type)==="text"?o.text+=n.text:r.push({type:"text",text:n.text})}else r.push(n);return r}function Sf(e,t){for(let r=e.length-1;r>=0;r--)if(e[r].role==="assistant"){const o={...e[r],checkpointId:t};return[...e.slice(0,r),o,...e.slice(r+1)]}return e}function Cf(e){if(!e)return null;const t=e.split("/");return t[t.length-1]||null}function Ef(e,t){const r=e==null?void 0:e.checkpoints,n=Array.isArray(r)?r.slice():r?Object.values(r):[],o=a=>a&&typeof a=="object"&&typeof a.checkpointId=="string"&&typeof a.createdAt=="string",s=n.filter(o).map(a=>({checkpointId:a.checkpointId,checkpointNs:a.checkpointNs??"",createdAt:a.createdAt,messagesLen:a.messagesLen??0,preview:a.preview??"",role:a.role??null,parentId:a.parentId??null,editedMessageId:a.editedMessageId??null,branchLabel:a.branchLabel??null}));return{threadId:(e==null?void 0:e.threadId)??t??null,checkpoints:s}}async function Kn(e){return await new Promise((t,r)=>{const n=new FileReader;n.onload=()=>t(String(n.result)),n.onerror=o=>r(o),n.readAsDataURL(e)})}async function la(e){return await new Promise((t,r)=>{const n=new FileReader;n.onload=()=>{try{const o=n.result,s=new Uint8Array(o);let a="";const c=s.byteLength;for(let l=0;l<c;l++)a+=String.fromCharCode(s[l]);t(btoa(a))}catch(o){r(o)}},n.onerror=o=>r(o),n.readAsArrayBuffer(e)})}async function Nf(e,t,r){if(!t.type||!t.type.startsWith("image/"))return null;try{const n=await e.uploadImage(t,r||"/upload").catch(()=>null);if(n&&n.url)return n.url}catch{}try{return await Kn(t)}catch{return null}}async function Tf(e,t=[],r,n,o){const s=[],a=[];for(const c of t)if(c.type&&c.type.startsWith("image/")){let l=null;try{l=await Nf(e,c,r)}catch{l=null}if(l){const f={type:"image_url",url:l,mimeType:c.type,alt:c.name};s.push(f)}else try{const f=await Kn(c),u={type:"file",url:String(f),mimeType:c.type||void 0,name:c.name,size:c.size};s.push(u)}catch{}try{const f=await la(c);a.push({filename:c.name,data:f,mime_type:c.type||"application/octet-stream"})}catch{}}else{try{const l=await Kn(c),f={type:"file",url:String(l),mimeType:c.type||void 0,name:c.name,size:c.size};s.push(f)}catch{}try{const l=await la(c);a.push({filename:c.name,data:l,mime_type:c.type||"application/octet-stream"})}catch{}}return{contentParts:s,filesInfo:a}}const da=T.createContext(null);function Vt({children:e,apiConfig:t,onError:r,onThreadChange:n,initialThreadId:o=null,historyPageSize:s,enableFileAgentRouting:a=!1,fileAgentId:c="invoice_reader"}){const l=Ye;T.useEffect(()=>{t&&l.updateConfig({baseUrl:t.baseUrl,authToken:t.apiKey})},[l,t]);const{isStreaming:f,error:u,stream:p,stop:g,setToken:v}=aa({baseUrl:l.baseUrl,token:null,headers:t==null?void 0:t.headers,streamPath:"/chat/runs/stream"}),[m,h]=T.useState(()=>typeof l.getAuthToken=="function"?l.getAuthToken():null);T.useEffect(()=>{v(typeof l.getAuthToken=="function"?l.getAuthToken():null);const J=l.onTokenChange(Q=>{h(Q),v(Q)});return()=>{J()}},[l,v]);const b=T.useCallback(J=>{l.setAuthToken(J)},[l]),{state:w,seed:x,prepend:y,pushUser:C,onEvent:N,reset:k}=ia(),E=s&&s>0?s:6,[M,F]=T.useState(!1),[I,B]=T.useState(!1),[R,U]=T.useState(null),[D,z]=T.useState(void 0),O=T.useCallback((J,Q)=>{const he=Array.isArray(J==null?void 0:J.messages)?J.messages:[];Q==="replace"?x(he):Q==="prepend"&&he.length&&y(he),U((J==null?void 0:J.nextCursor)??null),F(!!(J!=null&&J.hasMore)),z(Oe=>(J==null?void 0:J.checkpointId)??Oe??void 0)},[x,y]),[G,L]=T.useState([]),[A,ee]=T.useState(null),q=T.useCallback(async()=>{const J=await l.listThreads();L(J)},[l]);T.useEffect(()=>{q().catch(()=>{})},[q]),T.useEffect(()=>{n==null||n(A)},[A,n]);const ae=T.useRef(null);T.useEffect(()=>{o&&ae.current!==o&&(ae.current=o,V(o).catch(()=>{}))},[o]);const $=T.useRef(null),V=T.useCallback(async(J,Q,he)=>{if($.current!==J){$.current=J;try{F(!1),U(null),z(void 0);const Oe=await l.getMessages({threadId:J,checkpointId:Q,checkpointNs:he,limit:E});ee(J),O(Oe,"replace")}finally{$.current=null}}},[l,O]),ce=T.useCallback(async J=>{const Q=await l.listCheckpoints(J);return Ef(Q,J)},[l]),pe=T.useCallback(async J=>{if(!A)throw new Error("No active thread");F(!1),U(null),z(void 0);const Q=await l.getMessages({threadId:A,checkpointId:J,limit:E});O(Q,"replace")},[l,A,O,E]),W=T.useCallback(async()=>{if(!A)throw new Error("No active thread");await V(A)},[A,V]),j=T.useRef(!1);T.useEffect(()=>{const J=j.current;if(j.current=f,J&&!f&&A){const Q=w.lastCheckpointId??void 0;(async()=>{try{const he=await l.getMessages({threadId:A,checkpointId:Q,limit:E});O(he,"replace")}catch{}try{await q()}catch{}})()}},[f,A,w.lastCheckpointId,l,O,q]);const ie=T.useCallback(async J=>{const Q=await l.createThread(J);return await q(),await V(Q.threadId),Q.threadId},[l,q,V]),K=T.useCallback(async J=>{await l.deleteThread(J),await q(),A===J&&(ee(null),k([]),F(!1),U(null),z(void 0))},[l,q,A,k]),Y=T.useCallback(async(J,Q)=>{await l.updateThread(J,Q),await q()},[l,q]),ne=T.useCallback(async(J,Q)=>{var $t;const he=(Q==null?void 0:Q.attachments)||[],{contentParts:Oe,filesInfo:Me}=await Tf(l,he,t==null?void 0:t.uploadPath),Ft=[];J&&Ft.push({type:"text",text:J});for(const be of Oe)Ft.push(be);const Qe={id:(($t=crypto.randomUUID)==null?void 0:$t.call(crypto))||`user-${Date.now()}`,role:"user",content:Ft,createdAt:new Date().toISOString(),checkpointId:(Q==null?void 0:Q.checkpointId)??w.lastCheckpointId??void 0};C(Qe);const ls={...Qe,content:Qe.content.filter(be=>be.type==="text"||be.type==="image_url")},lr={...(Q==null?void 0:Q.payloadExtras)??{}},En=!!lr.edit,Nn=lr.originalMessageId,ds=typeof Nn=="string"?Nn:void 0,Tn=he&&he.length>0,us={...A?{threadId:A}:{},payload:{messages:[ls],attachments:Qe.content.filter(be=>be.type==="file").map(be=>({type:"file",url:be.url,mimeType:be.mimeType,name:be.name,size:be.size})),files_info:Me,...a&&Tn&&c?{agent_id:c}:{},...lr},checkpointId:(Q==null?void 0:Q.checkpointId)??w.lastCheckpointId??void 0,checkpointNs:Q==null?void 0:Q.checkpointNs,nodeFilter:Q==null?void 0:Q.nodeFilter,config:Q==null?void 0:Q.config,edit:En,originalMessageId:ds};p(us,be=>N(be),{onError:be=>console.warn("stream error",be),onOpen:({threadId:be,created:fs})=>{!A&&be&&(ee(be),fs&&q().catch(()=>{}))}})},[A,C,p,N,w.lastCheckpointId,l,t==null?void 0:t.uploadPath,q,ee,a,c]),ge=T.useCallback(async J=>{if(!A)throw new Error("No active thread");if(I||!M)return;const Q=R;if(Q){B(!0);try{const he=await l.getMessages({threadId:A,checkpointId:D,limit:(J==null?void 0:J.limit)??E,beforeId:Q});O(he,"prepend")}finally{B(!1)}}},[l,A,D,R,M,I,O]),fe={baseUrl:l.baseUrl,token:m,setToken:b,api:l,threads:G,currentThreadId:A,setCurrentThreadId:ee,messages:w.messages,isStreaming:f,error:u,lastCheckpointId:w.lastCheckpointId,streamingAssistantId:w.assemblingId,hasMoreHistory:M,isLoadingHistory:I,loadOlderMessages:ge,historyPageSize:E,listCheckpoints:ce,navigateToCheckpoint:pe,returnToLatest:W,refreshThreads:q,createThread:ie,deleteThread:K,renameThread:Y,loadThread:V,send:ne,stop:g};return i.jsx(da.Provider,{value:fe,children:e})}function Rn(){const e=T.useContext(da);if(!e)throw new Error("useChat must be used within ChatProvider");return e}function P(...e){return Vd.twMerge(jd.clsx(e))}const Af=Bt.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),ue=d.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const a=n?Te.Slot:"button";return i.jsx(a,{className:P(Af({variant:t,size:r,className:e})),ref:s,...o})});ue.displayName="Button";const ua=d.forwardRef(({className:e,...t},r)=>i.jsx("textarea",{className:P("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...t}));ua.displayName="Textarea";const Pf=Bt.cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function fa({className:e,variant:t,...r}){return i.jsx("div",{className:P(Pf({variant:t}),e),...r})}function H(e,t,{checkForDefaultPrevented:r=!0}={}){return function(o){if(e==null||e(o),r===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function If(e,t){const r=d.createContext(t),n=s=>{const{children:a,...c}=s,l=d.useMemo(()=>c,Object.values(c));return i.jsx(r.Provider,{value:l,children:a})};n.displayName=e+"Provider";function o(s){const a=d.useContext(r);if(a)return a;if(t!==void 0)return t;throw new Error(`\`${s}\` must be used within \`${e}\``)}return[n,o]}function Le(e,t=[]){let r=[];function n(s,a){const c=d.createContext(a),l=r.length;r=[...r,a];const f=p=>{var w;const{scope:g,children:v,...m}=p,h=((w=g==null?void 0:g[e])==null?void 0:w[l])||c,b=d.useMemo(()=>m,Object.values(m));return i.jsx(h.Provider,{value:b,children:v})};f.displayName=s+"Provider";function u(p,g){var h;const v=((h=g==null?void 0:g[e])==null?void 0:h[l])||c,m=d.useContext(v);if(m)return m;if(a!==void 0)return a;throw new Error(`\`${p}\` must be used within \`${s}\``)}return[f,u]}const o=()=>{const s=r.map(a=>d.createContext(a));return function(c){const l=(c==null?void 0:c[e])||s;return d.useMemo(()=>({[`__scope${e}`]:{...c,[e]:l}}),[c,l])}};return o.scopeName=e,[n,_f(o,...t)]}function _f(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const a=n.reduce((c,{useScope:l,scopeName:f})=>{const p=l(s)[`__scope${f}`];return{...c,...p}},{});return d.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}var ve=globalThis!=null&&globalThis.document?d.useLayoutEffect:()=>{},kf=d[" useInsertionEffect ".trim().toString()]||ve;function tt({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,a]=Of({defaultProp:t,onChange:r}),c=e!==void 0,l=c?e:o;{const u=d.useRef(e!==void 0);d.useEffect(()=>{const p=u.current;p!==c&&console.warn(`${n} is changing from ${p?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=c},[c,n])}const f=d.useCallback(u=>{var p;if(c){const g=Mf(u)?u(e):u;g!==e&&((p=a.current)==null||p.call(a,g))}else s(u)},[c,e,s,a]);return[l,f]}function Of({defaultProp:e,onChange:t}){const[r,n]=d.useState(e),o=d.useRef(r),s=d.useRef(t);return kf(()=>{s.current=t},[t]),d.useEffect(()=>{var a;o.current!==r&&((a=s.current)==null||a.call(s,r),o.current=r)},[r,o]),[r,n,s]}function Mf(e){return typeof e=="function"}function pa(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Gn(...e){return t=>{let r=!1;const n=e.map(o=>{const s=pa(o,t);return!r&&typeof s=="function"&&(r=!0),s});if(r)return()=>{for(let o=0;o<n.length;o++){const s=n[o];typeof s=="function"?s():pa(e[o],null)}}}}function se(...e){return d.useCallback(Gn(...e),e)}var Df=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],te=Df.reduce((e,t)=>{const r=Te.createSlot(`Primitive.${t}`),n=d.forwardRef((o,s)=>{const{asChild:a,...c}=o,l=a?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(l,{...c,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function ha(e,t){e&&dr.flushSync(()=>e.dispatchEvent(t))}function Lf(e,t){return d.useReducer((r,n)=>t[r][n]??r,e)}var Ne=e=>{const{present:t,children:r}=e,n=Ff(t),o=typeof r=="function"?r({present:n.isPresent}):d.Children.only(r),s=se(n.ref,$f(o));return typeof r=="function"||n.isPresent?d.cloneElement(o,{ref:s}):null};Ne.displayName="Presence";function Ff(e){const[t,r]=d.useState(),n=d.useRef(null),o=d.useRef(e),s=d.useRef("none"),a=e?"mounted":"unmounted",[c,l]=Lf(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return d.useEffect(()=>{const f=Nr(n.current);s.current=c==="mounted"?f:"none"},[c]),ve(()=>{const f=n.current,u=o.current;if(u!==e){const g=s.current,v=Nr(f);e?l("MOUNT"):v==="none"||(f==null?void 0:f.display)==="none"?l("UNMOUNT"):l(u&&g!==v?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,l]),ve(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,p=v=>{const h=Nr(n.current).includes(CSS.escape(v.animationName));if(v.target===t&&h&&(l("ANIMATION_END"),!o.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",f=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},g=v=>{v.target===t&&(s.current=Nr(n.current))};return t.addEventListener("animationstart",g),t.addEventListener("animationcancel",p),t.addEventListener("animationend",p),()=>{u.clearTimeout(f),t.removeEventListener("animationstart",g),t.removeEventListener("animationcancel",p),t.removeEventListener("animationend",p)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:d.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function Nr(e){return(e==null?void 0:e.animationName)||"none"}function $f(e){var n,o;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Bf=d[" useId ".trim().toString()]||(()=>{}),Uf=0;function Fe(e){const[t,r]=d.useState(Bf());return ve(()=>{r(n=>n??String(Uf++))},[e]),t?`radix-${t}`:""}var Tr="Collapsible",[Hf,ey]=Le(Tr),[zf,qn]=Hf(Tr),ga=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:a,...c}=e,[l,f]=tt({prop:n,defaultProp:o??!1,onChange:a,caller:Tr});return i.jsx(zf,{scope:r,disabled:s,contentId:Fe(),open:l,onOpenToggle:d.useCallback(()=>f(u=>!u),[f]),children:i.jsx(te.div,{"data-state":Yn(l),"data-disabled":s?"":void 0,...c,ref:t})})});ga.displayName=Tr;var ma="CollapsibleTrigger",ba=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=qn(ma,r);return i.jsx(te.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":Yn(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:H(e.onClick,o.onOpenToggle)})});ba.displayName=ma;var Xn="CollapsibleContent",Wf=d.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=qn(Xn,e.__scopeCollapsible);return i.jsx(Ne,{present:r||o.open,children:({present:s})=>i.jsx(jf,{...n,ref:t,present:s})})});Wf.displayName=Xn;var jf=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,a=qn(Xn,r),[c,l]=d.useState(n),f=d.useRef(null),u=se(t,f),p=d.useRef(0),g=p.current,v=d.useRef(0),m=v.current,h=a.open||c,b=d.useRef(h),w=d.useRef(void 0);return d.useEffect(()=>{const x=requestAnimationFrame(()=>b.current=!1);return()=>cancelAnimationFrame(x)},[]),ve(()=>{const x=f.current;if(x){w.current=w.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const y=x.getBoundingClientRect();p.current=y.height,v.current=y.width,b.current||(x.style.transitionDuration=w.current.transitionDuration,x.style.animationName=w.current.animationName),l(n)}},[a.open,n]),i.jsx(te.div,{"data-state":Yn(a.open),"data-disabled":a.disabled?"":void 0,id:a.contentId,hidden:!h,...s,ref:u,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:h&&o})});function Yn(e){return e?"open":"closed"}var Vf=ga;const va=Vf,wa=ba;function Kt({content:e,className:t=""}){const r=T.useMemo(()=>({table:({node:f,className:u,...p})=>i.jsx("div",{className:"max-w-full",children:i.jsx("table",{...p,className:P("w-full table-fixed border-collapse break-words",u)})}),th:({node:f,className:u,...p})=>i.jsx("th",{...p,className:P("break-words whitespace-normal border-b border-border/60 px-3 py-2 text-left align-top",u)}),td:({node:f,className:u,...p})=>i.jsx("td",{...p,className:P("break-words whitespace-normal border-b border-border/30 px-3 py-2 align-top",u)}),pre:({node:f,className:u,...p})=>i.jsx("pre",{...p,className:P("whitespace-pre-wrap break-words",u)}),code:({node:f,className:u,children:p,...g})=>{const{inline:v,...m}=g;return v?i.jsx("code",{...m,className:P("break-words whitespace-normal",u),children:p}):i.jsx("code",{...m,className:P("block break-words whitespace-pre-wrap",u),children:p})}}),[]),n=P("prose prose-sm max-w-none break-words dark:prose-invert leading-relaxed","prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words","prose-a:break-all prose-blockquote:break-words prose-strong:break-words prose-em:break-words","prose-code:break-words prose-pre:rounded prose-pre:border prose-pre:bg-background/50","prose-code:bg-background/50 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-table:my-4 prose-th:px-2 prose-td:px-2",t);return i.jsx("div",{className:n,style:{wordBreak:"break-word",overflowWrap:"anywhere"},children:i.jsx(Kd,{remarkPlugins:[Rd],components:r,children:e})})}const Ar="prose prose-sm max-w-none break-words dark:prose-invert prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words prose-a:break-all prose-code:break-words prose-blockquote:break-words";function Kf({className:e}){const[t,r]=T.useState(0);return T.useEffect(()=>{const n=setInterval(()=>r(o=>(o+1)%4),500);return()=>clearInterval(n)},[]),i.jsxs("span",{"aria-live":"polite",className:P("inline-block text-xs opacity-70 ml-1",e),children:["Is thinking",".".repeat(t)]})}function ya({message:e,messageIndex:t,isStreamingMessage:r=!1,streamingDebounceMs:n=40,isEditing:o=!1,showActions:s=!0,showTimestamp:a=!0,showAgentName:c=!0,layoutSize:l="desktop",truncateToolMessages:f=!0,toolMessagePreviewLength:u=200,truncateUserMessages:p=!0,userMessagePreviewLength:g=200,customStyles:v={},onEdit:m,onRegenerate:h,onCancelEdit:b,onCopy:w}){const[x,y]=T.useState(!1),[C,N]=T.useState(!1),[k,E]=T.useState(!1),[M,F]=T.useState(!1),I=l==="phone"||l==="half-screen",B=e.role,R=B==="tool",U=T.useMemo(()=>{switch(B){case"user":return"text-[hsl(var(--chat-bubble-user-text))]";case"assistant":return"text-[hsl(var(--chat-bubble-ai-text))]";case"tool":return"text-secondary-foreground";case"system":return"text-muted-foreground";default:return"text-[hsl(var(--chat-bubble-ai-text))]"}},[B]),D=T.useMemo(()=>Rf(e.content),[e.content]),z=T.useMemo(()=>Jf(e.content),[e.content]),O=T.useMemo(()=>e.content.filter(j=>j.type==="image_url"),[e.content]),G=T.useMemo(()=>e.content.filter(j=>j.type==="file"),[e.content]),L=Qf(D,r?n:0),A=async()=>{try{const j=R?St(e.content):D;await navigator.clipboard.writeText(j),y(!0),setTimeout(()=>y(!1),2e3),w==null||w(j)}catch(j){console.error("Failed to copy:",j)}},ee=()=>{if(!m)return;const j=R?St(e.content):D;m(e.id,j)},q=()=>h==null?void 0:h(t),ae=()=>{const ie=P(I?"h-3 w-3":"h-4 w-4","opacity-60 flex-shrink-0",U);switch(B){case"user":return i.jsx(X.User,{className:ie});case"assistant":return i.jsx(X.Bot,{className:ie});case"tool":return i.jsx(X.Wrench,{className:ie});default:return i.jsx(X.Bot,{className:ie})}},$=()=>{const j="group relative mb-4 flex w-full";switch(B){case"user":return P(j,"justify-end");case"assistant":case"tool":case"system":return P(j,"justify-start");default:return j}},V=()=>{const j=P("rounded-lg px-4 py-3 relative transition-all duration-200 min-w-0 max-w-full break-words",I&&"px-3 py-2 text-sm");switch(B){case"user":return P(j,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-user))] text-[hsl(var(--chat-bubble-user-text))]","border border-transparent");case"assistant":return P(j,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-ai))] text-[hsl(var(--chat-bubble-ai-text))]","border border-border/60 dark:border-border/40");case"tool":return P(j,"w-full md:max-w-[95%] bg-secondary/50 text-secondary-foreground border border-dashed");case"system":return P(j,"w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");default:return P(j,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-ai))] text-[hsl(var(--chat-bubble-ai-text))]","border border-border/60 dark:border-border/40")}},ce=j=>{if(!j)return"";try{return new Date(j).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return""}},pe=()=>{if(e.model==="reflection"){const K=D.trim(),Y=Jn(K);if(Y&&typeof Y=="object")return i.jsx(ep,{data:Y})}if(R&&z.name==="get_issues"){const K=e.content.find(ge=>ge.type==="tool_result"),Y=(K==null?void 0:K.output)??St(e.content),ne=Ca(Y);if(ne)return i.jsx(tp,{issues:ne})}if(R&&!k){const K=St(e.content).slice(0,80).replace(/\s+/g," ");return i.jsx("div",{className:P("text-xs font-mono opacity-70 flex items-center justify-between gap-2 text-current",I&&"text-[10px]"),children:i.jsxs("span",{className:"truncate max-w-full text-current",children:[K,K.length>=80?"…":""]})})}if(R&&f){const K=St(e.content),Y=K.length>u;return i.jsx(va,{open:C,onOpenChange:N,children:i.jsxs("div",{className:"font-mono text-sm text-current",children:[i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y&&!C?K.substring(0,u)+"...":K}),Y&&i.jsx(wa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs text-current",children:C?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"}),"Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"}),"Show more (",K.length-u," chars)"]})})})]})})}if(R&&k&&!f){const K=rp(e.content);if(K&&Gf(K))return i.jsx(Kt,{content:K.trim()});const Y=St(e.content);return i.jsx("div",{className:"font-mono text-sm text-current",children:i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y})})}const j=O.length>0&&B!=="tool",ie=G.length>0&&B!=="tool";return i.jsxs("div",{children:[r?i.jsxs("div",{className:"relative",children:[(()=>{const K=Jn(L);return K!==null?i.jsx(xa,{data:K}):i.jsx(Kt,{content:Xf(qf(L))})})(),i.jsx(Kf,{className:P(U,I?"text-xs":"text-sm")})]}):(()=>{const K=Jn(D.trim());if(K!==null)return i.jsx(xa,{data:K});if(B==="user"&&p){const Y=D.trim();if(Y.length>g)return i.jsxs(va,{open:M,onOpenChange:F,children:[i.jsx("div",{className:P("text-sm text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:M?i.jsx(Kt,{content:Y}):i.jsxs("pre",{className:P("font-sans whitespace-pre-wrap break-words bg-transparent p-0 m-0 text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:[Y.substring(0,g),"..."]})}),i.jsx(wa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs !text-[hsl(var(--chat-bubble-user-text))]",children:M?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"})," Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"})," Show more (",Y.length-g," chars)"]})})})]})}return i.jsx(Kt,{content:D.trim()})})(),j&&i.jsx("div",{className:"mt-2 grid grid-cols-2 gap-2",children:O.map((K,Y)=>i.jsxs("div",{className:"relative border rounded overflow-hidden",children:[i.jsx("img",{src:K.url,alt:K.alt??"image",className:"w-full h-auto"}),i.jsxs("div",{className:"absolute top-1 right-1 bg-background/70 rounded px-1 py-0.5 text-[10px] flex items-center gap-1",children:[i.jsx(X.Image,{className:"h-3 w-3"}),i.jsx("span",{children:"image"})]})]},Y))}),ie&&i.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:G.map((K,Y)=>{const ne=K,ge=ne.name||"file";return i.jsxs("a",{href:ne.url,download:ge,target:"_blank",rel:"noreferrer",className:P("inline-flex items-center gap-2 rounded px-2 py-1 text-xs","bg-gray-100 border border-gray-200 hover:bg-gray-200","dark:bg-background/10 dark:border-border/30 dark:hover:bg-background/20","text-current"),title:ge,children:[i.jsx("span",{className:"inline-block w-1.5 h-1.5 rounded-full bg-gray-400 dark:bg-gray-500"}),i.jsx("span",{className:"truncate max-w-[180px]",children:ge})]},Y)})})]})},W=T.useMemo(()=>Zf(e),[e]);return i.jsx("div",{className:P($(),v.container),children:i.jsxs("div",{className:P(V(),v.content),children:[(a||c||R)&&i.jsxs("div",{className:P("flex items-center justify-between mb-2 pb-2 border-b border-current/10",I&&"mb-1 pb-1",U,v.header),children:[i.jsxs("div",{className:"flex items-center gap-2",children:[ae(),c&&W&&i.jsx("span",{className:P("font-medium",I?"text-xs":"text-sm"),children:W}),R&&z.name&&i.jsxs(fa,{variant:"outline",className:P("text-xs flex items-center gap-1 cursor-pointer",U,"border border-current/40",I&&"text-xs h-4"),onClick:()=>E(j=>!j),children:[i.jsx("span",{children:z.name}),i.jsx("span",{className:"inline-flex items-center",children:k?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})})]}),R&&!z.name&&i.jsx(ue,{variant:"ghost",size:"sm",className:P("h-6 px-1",U,"hover:bg-foreground/10"),onClick:()=>E(j=>!j),children:i.jsxs("span",{className:"text-xs flex items-center gap-1",children:["Tool Output ",k?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})]})})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[a&&i.jsx("span",{className:P("text-xs opacity-60",U,I&&"text-xs"),children:ce(e.createdAt)}),s&&!o&&i.jsxs("div",{className:P("opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":U,I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P(U,I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P(U,I?"h-3 w-3":"h-4 w-4")})})]})]})]}),i.jsx("div",{className:"relative",children:pe()}),R&&k&&(z.toolCallId||z.name)&&i.jsxs("div",{className:P("mt-2 pt-2 border-t border-current/10 text-xs opacity-60",I&&"text-xs"),children:[z.name&&i.jsxs("div",{children:["Function: ",z.name]}),z.toolCallId&&i.jsxs("div",{children:["Call ID: ",z.toolCallId]})]}),!(a||c||R)&&s&&!o&&i.jsxs("div",{className:P("absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":"text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})})]})]})})}function Rf(e){const t=e.filter(r=>r.type==="text").map(r=>r.text).join("");return t||JSON.stringify(e)}function Gf(e){return e.includes(`
10
10
  `)||e.includes("```")||/[-*] /.test(e)||/#+\s/.test(e)}function qf(e){let t=e;try{(t.match(/```/g)||[]).length%2===1&&(t+="\n```"),(t.replace(/```[\s\S]*?```/g,"").match(new RegExp("(?<!`)`(?!`)","g"))||[]).length%2===1&&(t+="`")}catch{}return t}function Xf(e){let t=e;try{const r=[],n=[],o="\0F",s="\0I";let a=t.replace(/```[\s\S]*?```/g,c=>(r.push(c),`${o}${r.length-1}\0`));a=a.replace(/`[^`]*`/g,c=>(n.push(c),`${s}${n.length-1}\0`)),a=a.replace(/\b([A-Za-z0-9_&\/-]+)\b(\s+\1\b)+/g,"$1").replace(/\b([A-Za-z0-9_&\/-]+\s+[A-Za-z0-9_&\/-]+)\b(\s+\1\b)+/g,"$1").replace(/([\.,;:!\?\-])\1+/g,"$1").replace(/([:;!\?\)])([A-Za-z])/g,"$1 $2").replace(/\s{3,}/g," "),a=a.replace(/\u0000F(\d+)\u0000/g,(c,l)=>r[Number(l)]??""),a=a.replace(/\u0000I(\d+)\u0000/g,(c,l)=>n[Number(l)]??""),t=a}catch{}return t}function Jn(e){const t=e==null?void 0:e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return null;try{return JSON.parse(t)}catch{return null}}function xa({data:e}){if(Array.isArray(e))return e.every(r=>r===null||["string","number","boolean"].includes(typeof r))?i.jsx("div",{className:Ar,children:i.jsx("ul",{className:"list-disc pl-5",children:e.map((r,n)=>i.jsx("li",{children:String(r)},n))})}):i.jsx("pre",{className:"font-mono text-xs bg-background/50 rounded border p-2 whitespace-pre-wrap break-words",children:Rt(e)});if(e&&typeof e=="object"){const t=Array.isArray(e.distilled_facts)?e.distilled_facts:null,r=Array.isArray(e.follow_up_queries)?e.follow_up_queries:null,n=typeof e.is_sufficient=="boolean"?e.is_sufficient:void 0;if(t||r||typeof n=="boolean")return i.jsxs("div",{className:Ar,children:[typeof n=="boolean"&&i.jsxs("p",{children:[i.jsx("strong",{children:"Is sufficient:"})," ",n?"Yes":"No"]}),r&&r.length>0&&i.jsxs("div",{children:[i.jsx("p",{children:i.jsx("strong",{children:"Follow-up queries:"})}),i.jsx("ul",{className:"list-disc pl-5",children:r.map((s,a)=>i.jsx("li",{children:String(s)},a))})]}),t&&t.length>0&&i.jsxs("div",{children:[i.jsx("p",{children:i.jsx("strong",{children:"Facts:"})}),i.jsx("ul",{className:"list-disc pl-5",children:t.map((s,a)=>i.jsx("li",{children:String(s)},a))})]})]});const o=Object.entries(e);return i.jsx("div",{className:Ar,children:i.jsx("dl",{className:"mt-0",children:o.map(([s,a])=>i.jsxs("div",{className:"mb-1",children:[i.jsxs("dt",{className:"inline font-medium mr-1",children:[s,":"]}),i.jsx("dd",{className:"inline",children:Yf(a)})]},s))})})}return i.jsx("pre",{className:"font-mono text-xs bg-background/50 rounded border p-2 whitespace-pre-wrap break-words",children:Rt(e)})}function Yf(e){if(e==null)return String(e);const t=typeof e;if(t==="string"||t==="number"||t==="boolean")return String(e);if(Array.isArray(e)&&e.every(n=>n===null||["string","number","boolean"].includes(typeof n)))return e.join(", ");try{return i.jsx("code",{className:"text-xs",children:JSON.stringify(Pr(e))})}catch{return String(e)}}function Sa(e){return!!(e&&typeof e=="object"&&(e.type==="file"||e.mimeType||e.filename||e.sourceType==="base64"))}function Pr(e){if(typeof e=="string")return e.length>2e3?e.slice(0,2e3)+"... [truncated]":e;if(e&&typeof e=="object"){if(Array.isArray(e)){const r=e.map(Pr).filter(n=>n!==void 0);return r.length?r:void 0}if(Sa(e))return;const t={};for(const r of Object.keys(e)){const n=e[r];if(r==="data"&&typeof n=="string"&&n.length>100)t[r]=`[base64 ${n.length} chars omitted]`;else{const o=Pr(n);o!==void 0&&(t[r]=o)}}return Object.keys(t).length?t:void 0}return e}function Rt(e){if(typeof e=="string")return e;if(Sa(e))return"";try{const t=Pr(e);return t===void 0?"":typeof t=="string"?t:JSON.stringify(t,null,2)}catch{return""}}function Jf(e){const t=e.find(n=>n.type==="tool_call"),r=e.find(n=>n.type==="tool_result");return{name:t==null?void 0:t.name,toolCallId:(r==null?void 0:r.toolCallId)??(t==null?void 0:t.id)}}function Zf(e){return e.name&&e.name.trim()?e.name:e.model&&e.model.includes("/")?e.model.split("/").pop()||null:e.model||null}function Qf(e,t){const[r,n]=T.useState(e);return T.useEffect(()=>{if(!t){n(e);return}const o=setTimeout(()=>n(e),t);return()=>clearTimeout(o)},[e,t]),r}function ep({data:e}){return i.jsx("dl",{className:"grid grid-cols-1 gap-y-2",children:Object.entries(e).map(([t,r])=>i.jsxs("div",{className:"flex",children:[i.jsxs("dt",{className:"font-semibold mr-2",children:[t,":"]}),i.jsx("dd",{className:"flex-1 break-words",children:Array.isArray(r)?r.map((n,o)=>i.jsxs("div",{className:"ml-4 break-words",children:["- ",String(n)]},o)):String(r)})]},t))})}function Ca(e){if(!e)return null;if(typeof e=="object"&&!Array.isArray(e)){if(e.desirability||e.feasibility||e.viability||e.other)return{desirability:Array.isArray(e.desirability)?e.desirability:[],feasibility:Array.isArray(e.feasibility)?e.feasibility:[],viability:Array.isArray(e.viability)?e.viability:[],other:Array.isArray(e.other)?e.other:[]};if(e.output&&typeof e.output!="object")e=e.output;else if(e.output&&typeof e.output=="object")return Ca(e.output)}const t=String(e),r={desirability:[],feasibility:[],viability:[],other:[]};let n=t;const o=Math.min(...["desirability=","feasibility=","viability=","other="].map(a=>{const c=n.toLowerCase().indexOf(a);return c===-1?Number.MAX_SAFE_INTEGER:c}));o!==Number.MAX_SAFE_INTEGER&&(n=n.slice(o));for(const a of Object.keys(r)){const l=new RegExp(a+"\\s*=\\s*\\[([\\s\\S]*?)\\]","i").exec(n);if(!l)continue;const f=l[1],u=/Issue\(([\s\S]*?)\)(?:,|$)/g;let p=null;for(;(p=u.exec(f))!==null;){const g=p[1],v=/title\s*=\s*(['"])([\s\S]*?)\1/.exec(g),m=/description\s*=\s*(['"])([\s\S]*?)\1/.exec(g),h=v?v[2].trim():"",b=m?m[2].trim():"";r[a].push({title:h,description:b})}}return Object.values(r).some(a=>a.length>0)?r:null}function tp({issues:e}){const t=[{key:"desirability",title:"Desirability"},{key:"feasibility",title:"Feasibility"},{key:"viability",title:"Viability"},{key:"other",title:"Other"}];return i.jsx("div",{className:Ar,children:t.map(r=>{const n=e[r.key];return!n||!n.length?null:i.jsxs("div",{className:"mb-4",children:[i.jsxs("h4",{className:"font-semibold mb-2",children:[r.title," (",n.length,")"]}),i.jsx("ol",{className:"list-decimal pl-5 space-y-2",children:n.map((o,s)=>i.jsxs("li",{children:[i.jsx("div",{className:"font-medium",children:o.title}),i.jsx("div",{className:"text-sm text-muted-foreground",children:o.description})]},s))})]},r.key)})})}function St(e){const t=e.filter(r=>r.type==="tool_result");if(t.length)try{return t.length===1?Rt(t[0].output):Rt(t.map(r=>({toolCallId:r.toolCallId,output:r.output})))}catch{}return Rt(e)}function rp(e){const t=e.find(n=>n.type==="tool_result");if(!t)return null;const r=t.output;return typeof r=="string"?r:null}const Ct=1e4;function np(e){if(typeof e!="string")return String(e);const t=[/<script[^>]*>.*?<\/script>/gi,/<iframe[^>]*>.*?<\/iframe>/gi,/javascript:/gi,/vbscript:/gi,/on\w+\s*=/gi,/<object[^>]*>.*?<\/object>/gi,/<embed[^>]*>.*?<\/embed>/gi,/<form[^>]*>.*?<\/form>/gi];let r=e;for(const o of t)r=r.replace(o,"");return/<[^>]+>/.test(r)&&!/<(?!\/?(?:code|strong|em|b|i|br|p|ul|ol|li|h[1-6])\b)[^>]+>/i.test(r)?r.replace(/<code>(.*?)<\/code>/gi,"`$1`").replace(/<strong>(.*?)<\/strong>/gi,"**$1**").replace(/<b>(.*?)<\/b>/gi,"**$1**").replace(/<em>(.*?)<\/em>/gi,"*$1*").replace(/<i>(.*?)<\/i>/gi,"*$1*").replace(/<br\s*\/?>/gi,`
11
11
  `).replace(/<p>(.*?)<\/p>/gi,`$1
12
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teodor-new-chat-ui",
3
- "version": "3.0.17",
3
+ "version": "3.0.18",
4
4
  "description": "React chat UI components with streaming support, tool calls, and modern design",
5
5
  "main": "dist/index.umd.js",
6
6
  "module": "dist/index.esm.js",