@holaboss/client 0.2.0-beta.2 → 0.2.0-beta.20
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 +5 -5
- package/dist/index.d.cts +525 -20
- package/dist/index.d.ts +525 -20
- package/dist/index.js +5 -5
- package/package.json +6 -4
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
var
|
|
3
|
-
`))o.startsWith(":")||(o.startsWith("event:")?t=o.slice(6).trim():o.startsWith("data:")&&
|
|
4
|
-
`)}:null},
|
|
2
|
+
var Q=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var je=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var Be=(e,t)=>{for(var r in t)Q(e,r,{get:t[r],enumerable:!0})},ze=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of je(t))!Ge.call(e,i)&&i!==r&&Q(e,i,{get:()=>t[i],enumerable:!(o=Ve(t,i))||o.enumerable});return e};var Je=e=>ze(Q({},"__esModule",{value:!0}),e);var wt={};Be(wt,{Chat:()=>He,GRID_COLS:()=>te,GRID_MAX_COLS:()=>ne,GRID_MAX_ROWS:()=>re,HolaProvider:()=>Ce,PortalConflict:()=>A,bandOfKind:()=>M,bandOfType:()=>oe,cellValue:()=>he,createApiTransport:()=>Pe,createHolaClient:()=>Ae,createPortalData:()=>Oe,createPortalShop:()=>Ue,createWidgetTransport:()=>B,deliverableCellText:()=>fe,deliverableStatus:()=>ce,deriveFields:()=>Z,emptyTableResponses:()=>$,footprintOf:()=>se,footprintWith:()=>z,formatDeliverableDate:()=>ve,groupDeliverableVersions:()=>X,inferSpec:()=>ee,isDeliverableChecked:()=>ye,mergeMessage:()=>Se,normalizeDeliverableColType:()=>q,normalizeDeliverableItem:()=>K,parseDashboardSpec:()=>de,parseDeliverableItems:()=>pe,parseDeliverableTable:()=>me,parseTableResponses:()=>be,placeWidgets:()=>J,publishedVersionOf:()=>ge,renderModel:()=>ue,setResponse:()=>we,setTableReview:()=>xe,splitLayout:()=>ie,textDeltaOf:()=>_,thinkingDeltaOf:()=>O,toolEventOf:()=>U,useArtifactUrl:()=>F,useChat:()=>j,useHolaClient:()=>V,useShop:()=>Le,useThread:()=>Ne});module.exports=Je(wt);var Re=e=>{if(!e||typeof e!="object")return null;let t=e;return t.type==="message_update"?t.assistantMessageEvent??null:null},_=e=>{let t=Re(e);return t?.type==="text_delta"&&typeof t.delta=="string"?t.delta:null},O=e=>{let t=Re(e);return t?.type==="thinking_delta"&&typeof t.delta=="string"?t.delta:null},U=e=>{if(!e||typeof e!="object")return null;let t=e;return t.type==="tool_execution_start"&&t.toolCallId?{phase:"start",id:t.toolCallId,name:t.toolName}:t.type==="tool_execution_end"&&t.toolCallId?{phase:"end",id:t.toolCallId,isError:t.isError}:null};var Ke=/^ /,w=e=>{if(e&&typeof e=="object"){let t=e,r=typeof t.error=="string"?t.error:"request_failed";return typeof t.retryable=="boolean"?{error:r,retryable:t.retryable}:{error:r}}return{error:"request_failed"}},Xe=e=>{let t="message",r=[];for(let o of e.split(`
|
|
3
|
+
`))o.startsWith(":")||(o.startsWith("event:")?t=o.slice(6).trim():o.startsWith("data:")&&r.push(o.slice(5).replace(Ke,"")));return r.length>0?{event:t,data:r.join(`
|
|
4
|
+
`)}:null},qe=(e,t,r)=>{let o;try{o=JSON.parse(e.data)}catch{return}if(e.event==="session"){let i=o.sessionId;i&&(r(i),t.onSession?.(i));return}if(e.event==="turn_event"){t.onEvent?.(o);let i=_(o);i&&t.onText?.(i);let a=O(o);a&&t.onThinking?.(a);let n=U(o);n&&t.onTool?.(n);return}if(e.event==="chat_completed"){let i=o;r(i.sessionId),t.onComplete?.(i);return}e.event==="chat_error"&&t.onError?.(w(o))},R=async(e,t)=>{let r=await fetch(e,{headers:t});if(!r.ok)throw new Error(`hola: request failed (${r.status})`);return await r.json()},Te=async e=>{let t=await fetch(e.url,{method:"POST",headers:e.headers,body:e.body});if(!t.ok)throw new Error(`hola: message failed (${t.status})`);return await t.json()},ke=async(e,t,r,o)=>{let i=await fetch(e.url,{method:"POST",headers:e.headers,body:e.body,signal:o});if(!(i.ok&&i.body)){t.onError?.({error:`stream_failed_${i.status}`});return}let a=i.body.getReader(),n=new TextDecoder,s="",l=()=>{let d=s.indexOf(`
|
|
5
5
|
|
|
6
|
-
`);for(;
|
|
6
|
+
`);for(;d!==-1;){let c=s.slice(0,d);s=s.slice(d+2);let g=Xe(c);g&&qe(g,t,r),d=s.indexOf(`
|
|
7
7
|
|
|
8
|
-
`)}},i=async()=>{let c=await d.read();if(!c.done)return s+=r.decode(c.value,{stream:!0}),l(),i()};await i()};var ae=/\/+$/,S="/api/v1/end-user",z=e=>{let t=e.baseUrl.replace(ae,""),n=()=>typeof e.token=="function"?e.token():e.token,o=async()=>({"content-type":"application/json",authorization:`Bearer ${await n()}`}),a=async d=>{let r=await fetch(`${t}${S}/chat`,{method:"POST",headers:await o(),body:JSON.stringify({message:d})});if(!r.ok)throw new Error(`hola: message failed (${r.status})`);return{reply:(await r.json()).reply??"",sessionId:"",artifacts:[]}};return{sessionId:()=>"",getInfo:async()=>h(`${t}${S}/chat/info`,await o()),sendMessage:a,streamMessage:async(d,r)=>{try{let s=await a(d);r.onText?.(s.reply),r.onComplete?.(s)}catch(s){r.onError?.(C(s))}},subscribe:(d,r)=>{let s=r?.since??"0",l=!1,i,c=r?.intervalMs??3e3,f=async()=>{try{let p=await h(`${t}${S}/chat/thread?since=${encodeURIComponent(s)}`,await o());for(let y of p.messages)d.onMessage(y);s=p.cursor}catch(p){d.onError?.(C(p))}l||(i=setTimeout(f,c))},u=()=>{l=!0,i&&clearTimeout(i)};return r?.signal?.addEventListener("abort",u),i=setTimeout(f,0),u},requestHuman:async()=>{await fetch(`${t}${S}/chat/request-human`,{method:"POST",headers:await o(),body:"{}"})}}};var $=require("react"),k=(e,t)=>{let[n,o]=(0,$.useState)("");return(0,$.useEffect)(()=>{if(!e){o("");return}let a=Uint8Array.from(atob(e),r=>r.charCodeAt(0)),d=URL.createObjectURL(new Blob([a],{type:t}));return o(d),()=>URL.revokeObjectURL(d)},[e,t]),n};var D=require("react");var M=require("react"),B=require("react/jsx-runtime"),J=(0,M.createContext)(null),q=({client:e,children:t})=>(0,B.jsx)(J.Provider,{value:e,children:t}),A=()=>{let e=(0,M.useContext)(J);if(!e)throw new Error("useHolaClient must be used within <HolaProvider>");return e};var w=require("react"),U=e=>{let[t,n]=(0,w.useState)([]),[o,a]=(0,w.useState)(""),[d,r]=(0,w.useState)(!1),[s,l]=(0,w.useState)(null),i=(0,w.useRef)(0),c=(0,w.useCallback)(()=>{let u=i.current;return i.current+=1,u},[]);(0,w.useEffect)(()=>{let u=!0;return e.getInfo().then(p=>{u&&p.greeting&&n([{id:c(),role:"assistant",text:p.greeting}])}).catch(()=>{}),()=>{u=!1}},[e,c]);let f=(0,w.useCallback)(()=>{let u=o.trim();if(!u||d)return;a(""),l(null),r(!0);let p=c(),y=c();n(g=>[...g,{id:p,role:"user",text:u},{id:y,role:"assistant",text:"",streaming:!0}]);let m=g=>{n(H=>H.map(_=>_.id===y?g(_):_))};e.streamMessage(u,{onText:g=>m(H=>({...H,text:H.text+g})),onComplete:g=>{m(H=>({...H,text:g.reply||H.text,artifacts:g.artifacts,streaming:!1})),r(!1)},onError:g=>{m(H=>({...H,streaming:!1})),l(g.error),r(!1)}}).catch(g=>{m(H=>({...H,streaming:!1})),l(g instanceof Error?g.message:"stream_failed"),r(!1)})},[o,d,e,c]);return{messages:t,input:o,setInput:a,send:f,sending:d,error:s}};var b=require("react/jsx-runtime"),T={root:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif",fontSize:14,color:"#111827"},log:{flex:1,overflowY:"auto",padding:12,display:"flex",flexDirection:"column",gap:8},user:{alignSelf:"flex-end",background:"#111827",color:"#ffffff",borderRadius:12,padding:"8px 12px",maxWidth:"80%",whiteSpace:"pre-wrap"},assistant:{alignSelf:"flex-start",background:"#f1f1f4",color:"#111827",borderRadius:12,padding:"8px 12px",maxWidth:"80%",whiteSpace:"pre-wrap"},artifacts:{display:"flex",flexDirection:"column",gap:6,marginTop:6},image:{maxHeight:220,borderRadius:8,border:"1px solid #e5e7eb"},link:{color:"#2563eb",textDecoration:"underline",wordBreak:"break-all"},error:{color:"#b91c1c",padding:"4px 12px",fontSize:13},form:{display:"flex",gap:8,borderTop:"1px solid #e5e7eb",padding:8},input:{flex:1,border:"1px solid #d1d5db",borderRadius:8,padding:"8px 10px",fontSize:14,outline:"none"},button:{border:"none",background:"#111827",color:"#ffffff",borderRadius:8,padding:"8px 14px",fontSize:14,cursor:"pointer"}},ie=({artifact:e})=>{let t=k(e.dataBase64??"",e.mimeType),n=e.url??t;return n?e.mimeType.startsWith("image/")?(0,b.jsx)("a",{href:n,rel:"noopener noreferrer",target:"_blank",children:(0,b.jsx)("img",{alt:e.filename,src:n,style:T.image})}):(0,b.jsx)("a",{download:e.filename,href:n,style:T.link,children:e.filename}):null},G=()=>{let e=A(),{messages:t,input:n,setInput:o,send:a,sending:d,error:r}=U(e),s=(0,D.useRef)(null);(0,D.useEffect)(()=>{let i=s.current;i&&(i.scrollTop=i.scrollHeight)},[t]);let l=i=>{i.preventDefault(),a()};return(0,b.jsxs)("div",{style:T.root,children:[(0,b.jsx)("div",{ref:s,style:T.log,children:t.map(i=>(0,b.jsxs)("div",{style:i.role==="user"?T.user:T.assistant,children:[i.text||(i.streaming?"\u2026":""),i.artifacts&&i.artifacts.length>0?(0,b.jsx)("div",{style:T.artifacts,children:i.artifacts.map(c=>(0,b.jsx)(ie,{artifact:c},c.filename))}):null]},i.id))}),r?(0,b.jsx)("div",{style:T.error,children:r}):null,(0,b.jsxs)("form",{onSubmit:l,style:T.form,children:[(0,b.jsx)("input",{"aria-label":"Message",onChange:i=>o(i.target.value),placeholder:"Type a message\u2026",style:T.input,value:n}),(0,b.jsx)("button",{disabled:d||n.trim().length===0,style:T.button,type:"submit",children:"Send"})]})]})};var le=/\/+$/,O=e=>{let t=e.sessionId,n=e.baseUrl.replace(le,""),o=r=>`${n}/endpoint/${encodeURIComponent(e.token)}${r}`,a={"content-type":"application/json"},d=(r,s)=>({url:o(r),headers:a,body:JSON.stringify({message:s,...t?{sessionId:t}:{},...e.identity?{externalUserId:e.identity.externalUserId,userHmac:e.identity.userHmac}:{}})});return{sessionId:()=>t,getInfo:()=>h(o("/config"),{}),sendMessage:async r=>{let s=await N(d("/message",r));return t=s.sessionId,s},streamMessage:(r,s,l)=>j(d("/message/stream",r),s,i=>{t=i},l),subscribe:(r,s)=>{let l=s?.since??"0",i=!1,c,f=s?.intervalMs??3e3,u=async()=>{let y=t;if(y)try{let m=await h(o(`/messages?session=${encodeURIComponent(y)}&since=${encodeURIComponent(l)}`),{});for(let g of m.messages)r.onMessage(g);l=m.cursor}catch(m){r.onError?.(C(m))}i||(c=setTimeout(u,f))},p=()=>{i=!0,c&&clearTimeout(c)};return s?.signal?.addEventListener("abort",p),c=setTimeout(u,0),p},requestHuman:async()=>{t&&await fetch(o("/request-human"),{method:"POST",headers:a,body:JSON.stringify({sessionId:t})})}}};var K=e=>"transport"in e?e.transport:O(e);var ce=/\/+$/,P="/api/v1/end-user",v=class extends Error{constructor(t){super(t),this.name="PortalConflict"}};function de(e){let t="";for(let o=0;o<e.length;o+=32768)t+=String.fromCharCode(...e.subarray(o,o+32768));return btoa(t)}var V=e=>{let t=e.baseUrl.replace(ce,""),n=()=>typeof e.token=="function"?e.token():e.token,o=async()=>({"content-type":"application/json",authorization:`Bearer ${await n()}`}),a=async(r,s)=>{try{let l=await fetch(`${t}${P}${r}`,{method:s.method,headers:await o(),...s.body===void 0?{}:{body:JSON.stringify(s.body)}});if(l.status===409){let i=await l.json().catch(()=>({}));throw new v(i.message??"Someone else saved this first.")}if(!l.ok){let i=await l.text().catch(()=>""),c=`${s.method} ${r} \u2192 ${String(l.status)}`;try{let f=JSON.parse(i);f.message&&(c=f.message)}catch{c=i?`${c}: ${i}`:c}throw C(new Error(c))}return await l.json()}catch(l){throw C(l)}},d=r=>`/tables/${encodeURIComponent(r)}`;return{listTables:async()=>(await h(`${t}${P}/tables`,await o())).tables,listRows:async(r,s)=>await h(`${t}${P}${d(r)}/rows?limit=${String(s??100)}`,await o()),insertRow:async(r,s)=>{let{rowIds:l}=await a(`${d(r)}/rows`,{method:"POST",body:{rows:[s]}}),i=l[0];if(!i)throw C(new Error("The row was not created."));return i},patchRow:async(r,s,l)=>(await a(`${d(r)}/rows/${encodeURIComponent(s)}`,{method:"PATCH",body:l})).updated,deleteRow:async(r,s)=>(await a(`/${encodeURIComponent(r)}/${encodeURIComponent(s)}`,{method:"DELETE"})).deleted,listFiles:async()=>(await h(`${t}${P}/tables/files/rows?limit=200`,await o())).rows.map(s=>({id:s.rowId,filename:String(s.data.filename??""),source:String(s.data.source??"client"),campaign:String(s.data.campaign??""),size:typeof s.data.size=="number"?s.data.size:0,createdAt:s.createdAt})),uploadFile:async(r,s)=>{let l=new Uint8Array(await r.arrayBuffer());return await a("/files",{method:"POST",body:{filename:r.name,mime:r.type||"application/octet-stream",data:de(l),...s===void 0?{}:{message:s}}})},fileLink:async r=>await h(`${t}${P}/files/${encodeURIComponent(r)}/url`,await o()),deleteFile:async r=>(await a(`/files/${encodeURIComponent(r)}`,{method:"DELETE"})).deleted,listDocuments:async()=>(await h(`${t}${P}/documents`,await o())).documents,readDocument:async r=>(await h(`${t}${P}/documents/${encodeURIComponent(r)}`,await o())).document,saveDocument:async(r,s)=>await a(`/documents/${encodeURIComponent(r)}`,{method:"PATCH",body:s})}};var x=require("react");function L(e,t){return e.some(o=>o.id===t.id)?e:[...t.author==="client"?e.filter(o=>!(o.pending&&o.author==="client"&&o.text===t.text)):e,t]}var Y=(e,t)=>{let[n,o]=(0,x.useState)([]),[a,d]=(0,x.useState)(""),[r,s]=(0,x.useState)(!1),[l,i]=(0,x.useState)(null),c=(0,x.useRef)(0),f=t?.pollMs??2e3;(0,x.useEffect)(()=>{let p=!0;return e.getInfo().then(y=>{p&&y.greeting&&o(m=>m.length===0?[{id:"greeting",cursor:"",author:"agent",text:y.greeting}]:m)}).catch(()=>{}),()=>{p=!1}},[e]),(0,x.useEffect)(()=>e.subscribe?.({onMessage:p=>o(y=>L(y,p)),onError:p=>i(p.error)},{intervalMs:f}),[e,f]);let u=(0,x.useCallback)(()=>{let p=a.trim();if(!p||r)return;d(""),i(null),s(!0),c.current+=1;let y={id:`pending-${c.current}`,cursor:"",author:"client",text:p,pending:!0};o(m=>[...m,y]),e.sendMessage(p).then(()=>s(!1)).catch(m=>{i(m instanceof Error?m.message:"send_failed"),s(!1)})},[a,r,e]);return{messages:n,input:a,setInput:d,send:u,sending:r,error:l}};0&&(module.exports={Chat,HolaProvider,PortalConflict,createApiTransport,createHolaClient,createPortalData,createWidgetTransport,mergeMessage,textDeltaOf,thinkingDeltaOf,toolEventOf,useArtifactUrl,useChat,useHolaClient,useThread});
|
|
8
|
+
`)}},u=async()=>{let d=await a.read();if(!d.done)return s+=n.decode(d.value,{stream:!0}),l(),u()};await u()};var Qe=/\/+$/,Y="/api/v1/end-user",Pe=e=>{let t=e.baseUrl.replace(Qe,""),r=()=>typeof e.token=="function"?e.token():e.token,o=n=>e.project?`${n}project=${encodeURIComponent(e.project)}`:"",i=async()=>({"content-type":"application/json",authorization:`Bearer ${await r()}`}),a=async n=>{let s=await fetch(`${t}${Y}/chat${o("?")}`,{method:"POST",headers:await i(),body:JSON.stringify({message:n})});if(!s.ok)throw new Error(`hola: message failed (${s.status})`);return{reply:(await s.json()).reply??"",sessionId:"",artifacts:[]}};return{sessionId:()=>"",getInfo:async()=>R(`${t}${Y}/chat/info${o("?")}`,await i()),sendMessage:a,streamMessage:async(n,s)=>{try{let l=await a(n);s.onText?.(l.reply),s.onComplete?.(l)}catch(l){s.onError?.(w(l))}},subscribe:(n,s)=>{let l=s?.since??"0",u=!1,d,c=s?.intervalMs??3e3,g=typeof document<"u",p=()=>g&&document.visibilityState==="hidden",y=!1,x=()=>{if(!u){if(p()){y=!0;return}d=setTimeout(f,c)}},f=async()=>{try{let h=await R(`${t}${Y}/chat/thread?since=${encodeURIComponent(l)}${o("&")}`,await i());for(let I of h.messages)n.onMessage(I);l=h.cursor,n.onHealthy?.()}catch(h){n.onError?.(w(h))}x()},P=()=>{u||!y||p()||(y=!1,d&&clearTimeout(d),d=setTimeout(f,0))};g&&document.addEventListener("visibilitychange",P);let m=()=>{u=!0,d&&clearTimeout(d),g&&document.removeEventListener("visibilitychange",P)};return s?.signal?.addEventListener("abort",m),d=setTimeout(f,0),m}}};var L=require("react"),F=(e,t)=>{let[r,o]=(0,L.useState)("");return(0,L.useEffect)(()=>{if(!e){o("");return}let i=Uint8Array.from(atob(e),n=>n.charCodeAt(0)),a=URL.createObjectURL(new Blob([i],{type:t}));return o(a),()=>URL.revokeObjectURL(a)},[e,t]),r};var G=require("react");var N=require("react"),Ie=require("react/jsx-runtime"),De=(0,N.createContext)(null),Ce=({client:e,children:t})=>(0,Ie.jsx)(De.Provider,{value:e,children:t}),V=()=>{let e=(0,N.useContext)(De);if(!e)throw new Error("useHolaClient must be used within <HolaProvider>");return e};var v=require("react"),j=e=>{let[t,r]=(0,v.useState)([]),[o,i]=(0,v.useState)(""),[a,n]=(0,v.useState)(!1),[s,l]=(0,v.useState)(null),u=(0,v.useRef)(0),d=(0,v.useRef)(null);(0,v.useEffect)(()=>()=>d.current?.abort(),[]);let c=(0,v.useCallback)(()=>{let p=u.current;return u.current+=1,p},[]);(0,v.useEffect)(()=>{let p=!0;return e.getInfo().then(y=>{p&&y.greeting&&r([{id:c(),role:"assistant",text:y.greeting}])}).catch(()=>{}),()=>{p=!1}},[e,c]);let g=(0,v.useCallback)(()=>{let p=o.trim();if(!p||a)return;i(""),l(null),n(!0);let y=c(),x=c();r(m=>[...m,{id:y,role:"user",text:p},{id:x,role:"assistant",text:"",streaming:!0}]);let f=m=>{r(h=>h.map(I=>I.id===x?m(I):I))},P=new AbortController;d.current=P,e.streamMessage(p,{onText:m=>f(h=>({...h,text:h.text+m})),onComplete:m=>{f(h=>({...h,text:m.reply||h.text,artifacts:m.artifacts,streaming:!1})),n(!1)},onError:m=>{f(h=>({...h,streaming:!1})),l(m.error),n(!1)}},P.signal).catch(m=>{f(h=>({...h,streaming:!1})),l(m instanceof Error?m.message:"stream_failed"),n(!1)}).finally(()=>{n(!1),f(m=>m.streaming?{...m,streaming:!1}:m)})},[o,a,e,c]);return{messages:t,input:o,setInput:i,send:g,sending:a,error:s}};var S=require("react/jsx-runtime"),k={root:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif",fontSize:14,color:"#111827"},log:{flex:1,overflowY:"auto",padding:12,display:"flex",flexDirection:"column",gap:8},user:{alignSelf:"flex-end",background:"#111827",color:"#ffffff",borderRadius:12,padding:"8px 12px",maxWidth:"80%",whiteSpace:"pre-wrap"},assistant:{alignSelf:"flex-start",background:"#f1f1f4",color:"#111827",borderRadius:12,padding:"8px 12px",maxWidth:"80%",whiteSpace:"pre-wrap"},artifacts:{display:"flex",flexDirection:"column",gap:6,marginTop:6},image:{maxHeight:220,borderRadius:8,border:"1px solid #e5e7eb"},link:{color:"#2563eb",textDecoration:"underline",wordBreak:"break-all"},error:{color:"#b91c1c",padding:"4px 12px",fontSize:13},form:{display:"flex",gap:8,borderTop:"1px solid #e5e7eb",padding:8},input:{flex:1,border:"1px solid #d1d5db",borderRadius:8,padding:"8px 10px",fontSize:14,outline:"none"},button:{border:"none",background:"#111827",color:"#ffffff",borderRadius:8,padding:"8px 14px",fontSize:14,cursor:"pointer"}},Ye=({artifact:e})=>{let t=F(e.dataBase64??"",e.mimeType),r=e.url??t;return r?e.mimeType.startsWith("image/")?(0,S.jsx)("a",{href:r,rel:"noopener noreferrer",target:"_blank",children:(0,S.jsx)("img",{alt:e.filename,src:r,style:k.image})}):(0,S.jsx)("a",{download:e.filename,href:r,style:k.link,children:e.filename}):null},He=()=>{let e=V(),{messages:t,input:r,setInput:o,send:i,sending:a,error:n}=j(e),s=(0,G.useRef)(null);(0,G.useEffect)(()=>{let u=s.current;u&&(u.scrollTop=u.scrollHeight)},[t]);let l=u=>{u.preventDefault(),i()};return(0,S.jsxs)("div",{style:k.root,children:[(0,S.jsx)("div",{ref:s,style:k.log,children:t.map(u=>(0,S.jsxs)("div",{style:u.role==="user"?k.user:k.assistant,children:[u.text||(u.streaming?"\u2026":""),u.artifacts&&u.artifacts.length>0?(0,S.jsx)("div",{style:k.artifacts,children:u.artifacts.map(d=>(0,S.jsx)(Ye,{artifact:d},d.filename))}):null]},u.id))}),n?(0,S.jsx)("div",{style:k.error,children:n}):null,(0,S.jsxs)("form",{onSubmit:l,style:k.form,children:[(0,S.jsx)("input",{"aria-label":"Message",onChange:u=>o(u.target.value),placeholder:"Type a message\u2026",style:k.input,value:r}),(0,S.jsx)("button",{disabled:a||r.trim().length===0,style:k.button,type:"submit",children:"Send"})]})]})};var Ze=/\/+$/,B=e=>{let t=e.sessionId,r=e.baseUrl.replace(Ze,""),o=n=>`${r}/endpoint/${encodeURIComponent(e.token)}${n}`,i={"content-type":"application/json"},a=(n,s)=>({url:o(n),headers:i,body:JSON.stringify({message:s,...t?{sessionId:t}:{},...e.identity?{externalUserId:e.identity.externalUserId,userHmac:e.identity.userHmac}:{}})});return{sessionId:()=>t,getInfo:()=>R(o("/config"),{}),sendMessage:async n=>{let s=await Te(a("/message",n));return t=s.sessionId,s},streamMessage:(n,s,l)=>ke(a("/message/stream",n),s,u=>{t=u},l),subscribe:(n,s)=>{let l=s?.since??"0",u=!1,d,c=s?.intervalMs??3e3,g=async()=>{let y=t;if(y)try{let x=await R(o(`/messages?session=${encodeURIComponent(y)}&since=${encodeURIComponent(l)}`),{});for(let f of x.messages)n.onMessage(f);l=x.cursor,n.onHealthy?.()}catch(x){n.onError?.(w(x))}u||(d=setTimeout(g,c))},p=()=>{u=!0,d&&clearTimeout(d)};return s?.signal?.addEventListener("abort",p),d=setTimeout(g,0),p}}};var Ae=e=>"transport"in e?e.transport:B(e);var et=/^https?:\/\//i,tt=/^\d{4}-\d{2}-\d{2}(?:[T ]|$)/,nt=e=>e.replace(/_/g," ").replace(/\b\w/g,t=>t.toUpperCase());function rt(e){if(typeof e=="number")return"number";if(typeof e=="boolean")return"boolean";if(typeof e=="string"){if(et.test(e))return"url";if(tt.test(e))return"date"}return"text"}function Z(e){let t=[],r=new Map;for(let o of e)for(let[i,a]of Object.entries(o.data??{})){if(a==null)continue;let n=r.get(i);n||(n=new Map,r.set(i,n),t.push(i));let s=rt(a);n.set(s,(n.get(s)??0)+1)}return t.map(o=>{let i=r.get(o)??new Map,a="text",n=-1;for(let[s,l]of i)l>n&&(n=l,a=s);return{key:o,label:nt(o),type:a}})}var ot=e=>typeof e=="number"?e:Number(e)||0,Me=e=>/rate|position|rank|score|percent|avg/i.test(e),st=/posted|published|sent|completed|shipped|launched|_at/i,it=new Set(["service","order","end_user_id"]);function ee(e,t){let r=e.filter(l=>!it.has(l.key)),o=r.filter(l=>l.type==="number").slice(0,3),i=r.find(l=>l.key==="status")??r.find(l=>l.type==="select"),a=r.find(l=>l.type==="date"&&st.test(l.key))??r.find(l=>l.type==="date"),n=r.filter(l=>l.type==="number"&&!Me(l.key)).map(l=>({field:l,total:t.reduce((u,d)=>u+ot(d.data[l.key]),0)})).sort((l,u)=>u.total-l.total).find(l=>l.total>0)?.field??null,s=[{type:"stat",label:"Items",agg:"count"}];for(let l of o){let u=Me(l.key);s.push({type:"stat",metric:l.key,agg:u?"avg":"sum",label:u?`Avg ${l.label.toLowerCase()}`:l.label})}return a&&s.push({type:"line",x:a.key,y:n?.key,agg:"sum",title:n?`${n.label} by day`:"Items by day"}),i&&s.push({type:"donut",groupBy:i.key,title:i.label}),s.push({type:"table",columns:r.map(l=>l.key)}),{version:1,widgets:s}}var te=6,ne=6,re=4,We={stat:{w:1,h:1},chart:{w:2,h:2},block:{w:6,h:2}},at=e=>Math.max(1,Math.min(6,Math.round(e))),lt=e=>Math.max(1,Math.min(4,Math.round(e)));function M(e){return e==="stat"?"stat":e==="series"||e==="donut"?"chart":"block"}function oe(e){return e==="stat"?"stat":e==="line"||e==="bar"||e==="donut"?"chart":"block"}function se(e){return We[e]}function z(e,t,r){let o=We[e];return{w:t===void 0?o.w:at(t),h:r===void 0?o.h:lt(r)}}function J(e){let t=[],r=[],o=(n,s,l,u)=>{if(n<0||n+l>6)return!1;for(let d=0;d<u;d+=1){let c=r[s+d];if(c){for(let g=0;g<l;g+=1)if(c[n+g])return!1}}return!0},i=(n,s,l,u)=>{for(let d=0;d<u;d+=1){let c=r[s+d]??[];for(let g=0;g<l;g+=1)c[n+g]=!0;r[s+d]=c}},a=(n,s)=>{for(let l=0;;l+=1)for(let u=0;u+n<=6;u+=1)if(o(u,l,n,s))return{gx:u,gy:l}};for(let n of e){let s=z(M(n.kind),n.w,n.h),u=n.gx!==void 0&&n.gy!==void 0&&o(n.gx,n.gy,s.w,s.h)&&n.gx!==void 0&&n.gy!==void 0?{gx:n.gx,gy:n.gy}:a(s.w,s.h);i(u.gx,u.gy,s.w,s.h),t.push({widget:n,gx:u.gx,gy:u.gy,w:s.w,h:s.h})}return t}function ie(e){let t=[],r=[];for(let o of e)M(o.kind)==="block"?r.push(o):t.push(o);return{tiles:J(t),blocks:r}}var Ee=new Set(["service","order","end_user_id"]),ae=e=>typeof e=="number"?e:Number(e)||0,$e=e=>e==null?"":String(e);function le(e,t){if(e==="count")return t.length;if(t.length===0)return 0;if(e==="last")return t[t.length-1]??0;if(e==="min")return Math.min(...t);if(e==="max")return Math.max(...t);let r=t.reduce((o,i)=>o+i,0);return e==="avg"?Math.round(r/t.length*100)/100:r}function ut(e,t,r,o){let i=new Map;for(let a of e){let n=new Date($e(a.data[t]));if(Number.isNaN(n.getTime()))continue;let s=n.toISOString().slice(0,10),l=i.get(s)??[];l.push(r?ae(a.data[r]):1),i.set(s,l)}return[...i.entries()].sort((a,n)=>a[0]<n[0]?-1:1).map(([a,n])=>({label:new Date(`${a}T00:00:00`).toLocaleDateString(void 0,{month:"short",day:"numeric"}),value:r?le(o,n):n.length}))}function dt(e,t,r,o="sum"){let i=new Map;for(let a of e){let n=$e(a.data[t]).trim();if(!n)continue;let s=i.get(n)??[];s.push(r?ae(a.data[r]):1),i.set(n,s)}return[...i.entries()].map(([a,n])=>({label:a,value:r?le(o,n):n.length})).sort((a,n)=>n.value-a.value)}function pt(e,t,r,o){switch(e.type){case"stat":{let i=e.metric?t.get(e.metric):void 0;if(e.metric&&!i)return null;if(!i)return{kind:"stat",label:e.label??"Items",value:o.length};let a=o.map(n=>ae(n.data[i.key]));return{kind:"stat",label:e.label??i.label,value:le(e.agg??"sum",a)}}case"line":case"bar":{if(!t.has(e.x)||e.y&&!t.has(e.y))return null;let i=ut(o,e.x,e.y,e.agg??"sum");return i.length<2?null:{kind:"series",draw:e.type,title:e.title??"By day",points:i}}case"donut":{if(!t.has(e.groupBy))return null;let i=dt(o,e.groupBy,e.metric,e.agg??"sum");return i.length===0?null:{kind:"donut",title:e.title??t.get(e.groupBy)?.label??"Breakdown",points:i}}case"table":{let i=e.columns?e.columns.map(a=>t.get(a)).filter(a=>a!==void 0&&!Ee.has(a.key)):r;return i.length===0?null:{kind:"table",title:e.title,columns:i,rows:o}}case"text":return{kind:"text",title:e.title,body:e.body};default:return null}}function ue(e,t,r,o={}){let i=new Map,a=l=>({byKey:new Map(l.fields.map(u=>[u.key,u])),cols:l.fields.filter(u=>!Ee.has(u.key)),rows:l.rows}),n=a({fields:t,rows:r});for(let[l,u]of Object.entries(o))i.set(l,a(u));let s=[];for(let l of e.widgets){let u=l.type==="text"?void 0:l.source,d=u?i.get(u):n;if(!d)continue;let c=pt(l,d.byKey,d.cols,d.rows);c&&s.push({...c,w:l.w,h:l.h,gx:l.gx,gy:l.gy})}return s}var ct=new Set(["sum","avg","count","min","max","last"]),_e=e=>typeof e=="string"&&ct.has(e)?e:void 0,b=e=>typeof e=="string"&&e!==""?e:void 0,W=e=>typeof e=="number"&&e>=1?Math.min(6,Math.round(e)):void 0,E=e=>typeof e=="number"&&e>=1?Math.min(4,Math.round(e)):void 0,D=e=>typeof e=="number"&&e>=0?Math.round(e):void 0;function gt(e){if(typeof e!="object"||e===null)return null;let t=e;switch(t.type){case"stat":return{type:"stat",source:b(t.source),label:b(t.label),metric:b(t.metric)??b(t.column),agg:_e(t.agg),w:W(t.w),h:E(t.h),gx:D(t.gx),gy:D(t.gy)};case"line":case"bar":{let r=b(t.x);return r?{type:t.type,source:b(t.source),title:b(t.title),x:r,y:b(t.y)??b(t.column),agg:_e(t.agg),w:W(t.w),h:E(t.h),gx:D(t.gx),gy:D(t.gy)}:null}case"donut":{let r=b(t.groupBy)??b(t.column);return r?{type:"donut",source:b(t.source),title:b(t.title),groupBy:r,w:W(t.w),h:E(t.h),gx:D(t.gx),gy:D(t.gy)}:null}case"table":{let r=Array.isArray(t.columns)?t.columns.filter(o=>typeof o=="string"):void 0;return{type:"table",source:b(t.source),title:b(t.title),columns:r,w:W(t.w),h:E(t.h),gx:D(t.gx),gy:D(t.gy)}}case"text":{let r=b(t.body);return r?{type:"text",title:b(t.title),body:r,w:W(t.w),h:E(t.h),gx:D(t.gx),gy:D(t.gy)}:null}default:return null}}function de(e){let t=e;if(typeof e=="string"){if(e.trim()==="")return null;try{t=JSON.parse(e)}catch{return null}}if(typeof t!="object"||t===null)return null;let r=t.widgets;if(!Array.isArray(r))return null;let o=r.map(gt).filter(a=>a!==null);if(o.length===0)return null;let i=t.version;return{version:typeof i=="number"?i:1,title:b(t.title),widgets:o}}function K(e){if(typeof e=="string")return e?{kind:"file",value:e}:null;if(e&&typeof e=="object"){let t=e,r=typeof t.value=="string"?t.value:"",o=t.kind==="link"||t.kind==="text"||t.kind==="table"?t.kind:"file",i=typeof t.v=="number"&&t.v>=1?Math.floor(t.v):void 0;return r?{kind:o,value:r,...i?{v:i}:{}}:null}return null}function X(e){let t=new Map;for(let r of e){let o=r.v??1,i=t.get(o)??[];i.push(r),t.set(o,i)}return[...t.entries()].sort(([r],[o])=>r-o).map(([r,o])=>({v:r,items:o}))}function pe(e){let t=e.files;if(typeof t=="string"&&t.trim()!=="")try{let o=JSON.parse(t);if(Array.isArray(o))return o.map(K).filter(i=>i!==null)}catch{}let r=String(e.file??"");return r?[{kind:"file",value:r}]:[]}function ce(e,t,r,o=""){let a=X(e).find(s=>s.v===t)?.items??[],n=a.filter(s=>s.kind==="file").map(s=>r.get(s.value)??"");return a.some(s=>s.kind==="table")&&n.push(o),n.length===0||n.some(s=>s==="")?"awaiting":n.some(s=>s==="revise")?"revise":"accepted"}function ge(e){return Number(e.published_version)||0}function q(e){return e==="number"||e==="date"||e==="boolean"||e==="select"||e==="url"?e:e==="link"?"url":e==="checkbox"?"boolean":"text"}function me(e){try{let t=JSON.parse(e);if(Array.isArray(t.columns)&&Array.isArray(t.rows)&&t.columns.length){let r=t.columns.map((a,n)=>({key:typeof a.key=="string"&&a.key?a.key:typeof a.id=="string"&&a.id?a.id:`column_${n+1}`,label:typeof a.label=="string"?a.label:"",type:q(a.type),...a.clientEditable===!0?{clientEditable:!0}:{}})),o=t.rows.map((a,n)=>({id:typeof a.id=="string"&&a.id?a.id:`row_${n}`,cells:a.cells&&typeof a.cells=="object"?a.cells:{}})),i=typeof t.name=="string"?t.name:void 0;return{columns:r,rows:o,...i?{name:i}:{}}}}catch{}return null}function fe(e){return e==null?"":String(e)}function ye(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="\u2713"}function $(){return{cells:{},verdict:"",comment:""}}function be(e){if(typeof e!="string"||e.trim()==="")return $();try{let t=JSON.parse(e);if(t&&typeof t=="object"&&!Array.isArray(t)){let r=t;return{cells:r.cells&&typeof r.cells=="object"?r.cells:r,verdict:r.verdict==="accepted"||r.verdict==="revise"?r.verdict:"",comment:typeof r.comment=="string"?r.comment:""}}}catch{}return $()}function he(e,t,r){if(e.clientEditable){let o=r.cells[t.id];if(o&&e.key in o)return o[e.key]}return t.cells[e.key]}function we(e,t,r,o){return{...e,cells:{...e.cells,[t]:{...e.cells[t]??{},[r]:o}}}}function xe(e,t,r){return{...e,verdict:t,comment:r}}function ve(e){let t=new Date(`${e}T00:00:00`);return Number.isNaN(t.getTime())?e:t.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}var mt=/\/+$/,H="/api/v1/end-user",A=class extends Error{constructor(t){super(t),this.name="PortalConflict"}};function ft(e){let t="";for(let o=0;o<e.length;o+=32768)t+=String.fromCharCode(...e.subarray(o,o+32768));return btoa(t)}var Oe=e=>{let t=e.baseUrl.replace(mt,""),r=()=>typeof e.token=="function"?e.token():e.token,o=async()=>({"content-type":"application/json",authorization:`Bearer ${await r()}`}),i=async(n,s)=>{try{let l=await fetch(`${t}${H}${n}`,{method:s.method,headers:await o(),...s.body===void 0?{}:{body:JSON.stringify(s.body)}});if(l.status===409){let u=await l.json().catch(()=>({}));throw new A(u.message??"Someone else saved this first.")}if(!l.ok){let u=await l.text().catch(()=>""),d=`${s.method} ${n} \u2192 ${String(l.status)}`;try{let c=JSON.parse(u);c.message&&(d=c.message)}catch{d=u?`${d}: ${u}`:d}throw w({error:d})}return await l.json()}catch(l){throw l instanceof A?l:w(l)}},a=n=>`/tables/${encodeURIComponent(n)}`;return{listTables:async()=>(await R(`${t}${H}/tables`,await o())).tables,listRows:async(n,s)=>await R(`${t}${H}${a(n)}/rows?limit=${String(s??100)}`,await o()),insertRow:async(n,s)=>{let{rowIds:l}=await i(`${a(n)}/rows`,{method:"POST",body:{rows:[s]}}),u=l[0];if(!u)throw w(new Error("The row was not created."));return u},patchRow:async(n,s,l)=>(await i(`${a(n)}/rows/${encodeURIComponent(s)}`,{method:"PATCH",body:l})).updated,deleteRow:async(n,s)=>(await i(`/${encodeURIComponent(n)}/${encodeURIComponent(s)}`,{method:"DELETE"})).deleted,listFiles:async()=>(await R(`${t}${H}/tables/files/rows?limit=200`,await o())).rows.map(s=>({id:s.rowId,filename:String(s.data.filename??""),source:String(s.data.source??"client"),campaign:String(s.data.campaign??""),size:typeof s.data.size=="number"?s.data.size:0,createdAt:s.createdAt})),uploadFile:async(n,s)=>{let l=new Uint8Array(await n.arrayBuffer());return await i("/files",{method:"POST",body:{filename:n.name,mime:n.type||"application/octet-stream",data:ft(l),...s===void 0?{}:{message:s}}})},fileLink:async n=>await R(`${t}${H}/files/${encodeURIComponent(n)}/url`,await o()),deleteFile:async n=>(await i(`/files/${encodeURIComponent(n)}`,{method:"DELETE"})).deleted,listDocuments:async()=>(await R(`${t}${H}/documents`,await o())).documents,readDocument:async n=>(await R(`${t}${H}/documents/${encodeURIComponent(n)}`,await o())).document,saveDocument:async(n,s)=>await i(`/documents/${encodeURIComponent(n)}`,{method:"PATCH",body:s})}};var yt=/\/+$/,bt="/api/v1/end-user",Ue=e=>{let t=e.baseUrl.replace(yt,""),r=async(o,i)=>{let a;try{a=await fetch(`${t}${bt}${o}`,i===void 0?{}:{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i)})}catch(n){throw w(n)}if(a.status===429)throw w({error:"rate_limited",retryable:!0});if(!a.ok)throw w({error:`shop_request_failed_${String(a.status)}`});try{return await a.json()}catch(n){throw w(n)}};return{listProducts:async()=>{let o=await r(`/shop/products?publishable_key=${encodeURIComponent(e.publishableKey)}`);return{products:o.products.map(i=>({...i,currency:typeof i.currency=="string"?i.currency:""})),truncated:o.truncated===!0}},apply:async o=>await r("/shop/apply",{publishable_key:e.publishableKey,name:o.name,email:o.email,...o.phone?{phone:o.phone}:{},...o.message?{message:o.message}:{},...o.productId?{productId:o.productId}:{}})}};var C=require("react"),ht=e=>e&&typeof e=="object"&&typeof e.error=="string"?e.error:e instanceof Error?e.message:"shop_unavailable",Le=e=>{let[t,r]=(0,C.useState)([]),[o,i]=(0,C.useState)(!1),[a,n]=(0,C.useState)(!0),[s,l]=(0,C.useState)(null),[u,d]=(0,C.useState)(0);(0,C.useEffect)(()=>{let g=!0;return n(!0),e.listProducts().then(p=>{g&&(r(p.products),i(p.truncated),l(null))}).catch(p=>{g&&l(ht(p))}).finally(()=>{g&&n(!1)}),()=>{g=!1}},[e,u]);let c=(0,C.useCallback)(()=>d(g=>g+1),[]);return{products:t,truncated:o,loading:a,error:s,reload:c}};var T=require("react"),Fe="greeting";function Se(e,t){if(e.some(a=>a.id===t.id))return e;let r=e.filter(a=>a.id!==Fe),o=a=>a.author==="client"==(t.author==="client");return[...r.filter(a=>!(a.pending&&o(a)&&a.text===t.text)),t]}var Ne=(e,t)=>{let[r,o]=(0,T.useState)([]),[i,a]=(0,T.useState)(""),[n,s]=(0,T.useState)(!1),[l,u]=(0,T.useState)(null),d=(0,T.useRef)(0),c=t?.pollMs??2e3;(0,T.useEffect)(()=>{let p=!0;return e.getInfo().then(y=>{p&&y.greeting&&o(x=>x.length===0?[{id:Fe,cursor:"",author:"agent",text:y.greeting}]:x)}).catch(()=>{}),()=>{p=!1}},[e]),(0,T.useEffect)(()=>e.subscribe?.({onMessage:p=>o(y=>Se(y,p)),onError:p=>u(p.error),onHealthy:()=>u(null)},{intervalMs:c}),[e,c]);let g=(0,T.useCallback)(()=>{let p=i.trim();if(!p||n)return;a(""),u(null),s(!0),d.current+=1;let y=`pending-${d.current}`,x={id:y,cursor:"",author:"client",text:p,pending:!0};o(f=>[...f,x]),e.sendMessage(p).then(f=>{s(!1),f.reply.trim()&&o(m=>m.some(I=>!I.pending&&I.author!=="client"&&I.text===f.reply)?m:(d.current+=1,[...m,{id:`pending-agent-${d.current}`,cursor:"",author:"agent",text:f.reply,pending:!0}]))}).catch(f=>{u(f instanceof Error?f.message:"send_failed"),s(!1),o(P=>P.filter(m=>m.id!==y)),a(P=>P||p)})},[i,n,e]);return{messages:r,input:i,setInput:a,send:g,sending:n,error:l}};0&&(module.exports={Chat,GRID_COLS,GRID_MAX_COLS,GRID_MAX_ROWS,HolaProvider,PortalConflict,bandOfKind,bandOfType,cellValue,createApiTransport,createHolaClient,createPortalData,createPortalShop,createWidgetTransport,deliverableCellText,deliverableStatus,deriveFields,emptyTableResponses,footprintOf,footprintWith,formatDeliverableDate,groupDeliverableVersions,inferSpec,isDeliverableChecked,mergeMessage,normalizeDeliverableColType,normalizeDeliverableItem,parseDashboardSpec,parseDeliverableItems,parseDeliverableTable,parseTableResponses,placeWidgets,publishedVersionOf,renderModel,setResponse,setTableReview,splitLayout,textDeltaOf,thinkingDeltaOf,toolEventOf,useArtifactUrl,useChat,useHolaClient,useShop,useThread});
|