@pickaxeproject/react 0.0.28 → 0.0.29

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_tslib.js"),s=require("react/jsx-runtime"),t=require("react"),o=require("../../../hooks/core/useMediaQuery.js"),r=require("../../../hooks/pickaxe/usePickaxeContext.js"),i=require("../../../hooks/pickaxe/useResponseContext.js"),n=require("../../../hooks/studio/useStyleInput.js"),a=require("../../../hooks/studio/useStyleFontSize.js"),l=require("../../../hooks/pickaxe/useConversation.js"),d=require("../../../hooks/pickaxe/useSubmit.js"),u=require("../../../hooks/pickaxe/useSubmitResult.js"),c=require("../Addons/Document/hooks/useDocument.js"),m=require("../Addons/Scroll/hooks/useScroll.js"),p=require("../../../common/documents.js"),h=require("../../../common/api/streamer.js"),x=require("../../../node_modules/.pnpm/react-textarea-autosize@8.5.7_@types_react@18.3.18_react@18.3.1/node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.js"),f=require("../../Icons/attach.svg.js"),g=require("../../Icons/send.svg.js"),b=require("../Addons/IceBreaker/index.js"),j=require("../../../common/error.js"),v=require("../../../common/cn.js");exports.default=()=>{var y;const{formId:k,chatId:I,userId:w,studioUserId:q,pickaxe:S,colors:D,responsiveBy:O,isNewChat:A,isForceMobile:C,setIsNewChat:_,setIsShowIceBreaker:N}=r.usePickaxeContext(),{messages:M,status:E,limits:R,setMessages:U,setStatus:z,setLimitData:F,setError:B}=i.useResponseContext(),{documents:T,isUploading:P,isImageUploadAllowed:L,upsertDocuments:K,onFileUpload:Q,onEditDocumentByDocId:W}=c.useDocument(),{isScrollIncreasing:G,scrollToBottom:H,scrollStart:J,scrollEnd:V}=m.useScroll(),X=l.useConversation(),Y=d.useSubmit(),Z=u.useSubmitResult(),[$,ee]=t.useState(""),se=t.useRef(null),[te]=o.useMediaQuery("(max-width: 767px)"),oe=n.useStyleInput(),re=a.useStyleFontSize({type:"body"}),ie=t.useMemo((()=>{var e,s,t;return!!A&&(!!S&&(!X.isLoading&&(!((null!==(s=null===(e=X.data)||void 0===e?void 0:e.messages.length)&&void 0!==s?s:0)>1)&&!!(null===(t=S.icebreakers)||void 0===t?void 0:t.length))))}),[S,A,X.data,X.isLoading]);t.useEffect((()=>{N(ie)}),[ie]);const ne=s=>e.__awaiter(void 0,void 0,void 0,(function*(){try{if(P)return;F(null),B(""),_(!1);const e=null!=s?s:$;if(!e||"fetching"===E||"streaming"===E)return;const t=new Date;ee("");const o="enduserupload"===(null==S?void 0:S.documentuploadtype),r=T.filter((e=>"finished"===e.status&&!e.isInsertedAsRaw)),i=r.length?r[r.length-1].documentId:"";z("fetching");const n=[...M,{id:M.length+1,role:"user",content:e}];U(n);const{success:a,data:l,usedDocumentIds:d,newDocumentId:u,newDocumentName:c,isInsertedFile:m,error:p}=yield Y.mutateAsync(Object.assign(Object.assign({formId:k,responseId:I,value:e},o&&i&&{documentId:i}),q&&{studioUserId:q}));if(!a)throw new Error(null!=p?p:"An error occurred, please try again.");m&&i&&W({documentId:i,isInsertedAsRaw:!0}),u&&c&&K([{type:"website",id:c,name:c,status:"finished",documentId:u}]),J(),H();const x=(yield h.streamer({formId:k,responseId:I,data:l})).body;if(!x)throw new Error("Streaming error");const f=x.getReader(),g=new TextDecoder,b=n.length;let j="",v=!0;for(z("streaming");v;){const{value:e,done:s}=yield f.read();v=!s;if(j+=g.decode(e),j)U([...n.slice(0,b),{id:M.length+1,role:"assistant",content:j}]),G&&H();else if(!v&&!j)throw new Error("Server error")}const y=new Date;j&&(H(),z("idle"),yield Z.mutateAsync(Object.assign(Object.assign(Object.assign(Object.assign({formId:k,responseId:I,documentIds:d},w&&{userId:w}),q&&{studioUserId:q}),q&&(null==S?void 0:S.studioid)&&{studioId:S.studioid}),{messages:[{role:"user",message:e,sentAt:t},{role:"assistant",message:j,sentAt:y}]})))}catch(e){let s=j.default(e);s.includes("Unexpected token 'A',")&&(s="Oops! We're experiencing high traffic at the moment. Please try again later.");const t=Object.entries(R).find((([e])=>s.includes(e)));t?F(t[1]):B(s),H()}finally{z("idle"),V()}}));return s.jsxs("div",Object.assign({className:v.default("fixed flex w-full flex-col bottom-0 left-0","viewport"===O?"min-[767px]:relative min-[767px]:bottom-auto min-[767px]:left-auto":"absolute @[767px]/pickaxe-root:relative @[767px]/pickaxe-root:bottom-auto @[767px]/pickaxe-root:left-auto")},{children:[ie&&s.jsx(b.default,{data:(null==S?void 0:S.icebreakers)||[],style:{backgroundColor:D.secondary,color:D.secondaryText},isMobile:C||te,onSend:ne}),s.jsxs("div",Object.assign({style:oe,className:"flex min-h-[56px] items-end gap-x-2 px-4 py-3 pb-[15px] shadow"},{children:["enduserupload"===(null==S?void 0:S.documentuploadtype)&&s.jsxs("div",Object.assign({className:"tooltip"},{children:[s.jsx("input",{id:"file-upload",ref:se,type:"file",accept:[...p.allowedFileMimeTypes,...L?p.allowedImageMimeTypes:[]].join(", "),multiple:!0,hidden:!0,className:"hidden",onChange:s=>e.__awaiter(void 0,void 0,void 0,(function*(){yield Q(Array.from(s.target.files||[])),s.target.value=""}))}),s.jsx("button",Object.assign({className:"flex items-center disabled:cursor-wait disabled:opacity-50",disabled:P,onClick:()=>{var e;return null===(e=se.current)||void 0===e?void 0:e.click()}},{children:s.jsx(f.default,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:D.accent}})}))]})),s.jsx(x.default,{className:v.default(re("max-h-60 w-full resize-none border-transparent bg-transparent outline-none ring-0 scrollbar scrollbar-thin placeholder:font-semilight"),!$.length&&"max-h-6 overflow-hidden text-ellipsis whitespace-nowrap"),value:$,placeholder:null!==(y=null==S?void 0:S.placeholdertext)&&void 0!==y?y:"What do you want to talk about?",onChange:e=>ee(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),ne())}}),s.jsx("button",Object.assign({className:"outline-none disabled:cursor-default disabled:opacity-50",disabled:"idle"!==E||P,onClick:()=>ne()},{children:s.jsx(g.default,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:D.accent}})}))]}))]}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_tslib.js"),s=require("react/jsx-runtime"),t=require("react"),o=require("../../../hooks/core/useMediaQuery.js"),r=require("../../../hooks/pickaxe/usePickaxeContext.js"),i=require("../../../hooks/pickaxe/useResponseContext.js"),n=require("../../../hooks/studio/useStyleInput.js"),a=require("../../../hooks/studio/useStyleFontSize.js"),l=require("../../../hooks/pickaxe/useConversation.js"),d=require("../../../hooks/pickaxe/useSubmit.js"),u=require("../../../hooks/pickaxe/useSubmitResult.js"),c=require("../Addons/Document/hooks/useDocument.js"),m=require("../Addons/Scroll/hooks/useScroll.js"),p=require("../../../common/documents.js"),h=require("../../../common/api/streamer.js"),x=require("../../../node_modules/.pnpm/react-textarea-autosize@8.5.7_@types_react@18.3.18_react@18.3.1/node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.js"),f=require("../../Icons/attach.svg.js"),g=require("../../Icons/send.svg.js"),b=require("../Addons/IceBreaker/index.js"),j=require("../../../common/error.js"),v=require("../../../common/cn.js");exports.default=()=>{var y;const{formId:k,chatId:I,userId:w,studioUserId:q,pickaxe:S,colors:D,responsiveBy:O,isNewChat:A,isForceMobile:C,setIsNewChat:_,setIsShowIceBreaker:N}=r.usePickaxeContext(),{messages:M,status:E,limits:R,setMessages:U,setStatus:z,setLimitData:F,setError:B}=i.useResponseContext(),{documents:T,isUploading:P,isImageUploadAllowed:L,upsertDocuments:K,onFileUpload:Q,onEditDocumentByDocId:W}=c.useDocument(),{isScrollIncreasing:G,scrollToBottom:H,scrollStart:J,scrollEnd:V}=m.useScroll(),X=l.useConversation(),Y=d.useSubmit(),Z=u.useSubmitResult(),[$,ee]=t.useState(""),se=t.useRef(null),[te]=o.useMediaQuery("(max-width: 767px)"),oe=n.useStyleInput(),re=a.useStyleFontSize({type:"body"}),ie=t.useMemo((()=>{var e,s,t;return!!A&&(!!S&&(!X.isLoading&&(!((null!==(s=null===(e=X.data)||void 0===e?void 0:e.messages.length)&&void 0!==s?s:0)>1)&&!!(null===(t=S.icebreakers)||void 0===t?void 0:t.length))))}),[S,A,X.data,X.isLoading]);t.useEffect((()=>{N(ie)}),[ie]);const ne=s=>e.__awaiter(void 0,void 0,void 0,(function*(){try{if(P)return;F(null),B(""),_(!1);const e=null!=s?s:$;if(!e||"fetching"===E||"streaming"===E)return;const t=new Date;ee("");const o="enduserupload"===(null==S?void 0:S.documentuploadtype),r=T.filter((e=>"finished"===e.status&&!e.isInsertedAsRaw)),i=r.length?r[r.length-1].documentId:"";z("fetching");const n=[...M,{id:M.length+1,role:"user",content:e}];U(n),J(),H();const{success:a,data:l,usedDocumentIds:d,newDocumentId:u,newDocumentName:c,isInsertedFile:m,error:p}=yield Y.mutateAsync(Object.assign(Object.assign({formId:k,responseId:I,value:e},o&&i&&{documentId:i}),q&&{studioUserId:q}));if(!a)throw new Error(null!=p?p:"An error occurred, please try again.");m&&i&&W({documentId:i,isInsertedAsRaw:!0}),u&&c&&K([{type:"website",id:c,name:c,status:"finished",documentId:u}]),H();const x=(yield h.streamer({formId:k,responseId:I,data:l})).body;if(!x)throw new Error("Streaming error");const f=x.getReader(),g=new TextDecoder,b=n.length;let j="",v=!0;for(z("streaming");v;){const{value:e,done:s}=yield f.read();v=!s;if(j+=g.decode(e),j)U([...n.slice(0,b),{id:M.length+1,role:"assistant",content:j}]),G&&H();else if(!v&&!j)throw new Error("Server error")}const y=new Date;j&&(H(),z("idle"),yield Z.mutateAsync(Object.assign(Object.assign(Object.assign(Object.assign({formId:k,responseId:I,documentIds:d},w&&{userId:w}),q&&{studioUserId:q}),q&&(null==S?void 0:S.studioid)&&{studioId:S.studioid}),{messages:[{role:"user",message:e,sentAt:t},{role:"assistant",message:j,sentAt:y}]})))}catch(e){let s=j.default(e);s.includes("Unexpected token 'A',")&&(s="Oops! We're experiencing high traffic at the moment. Please try again later.");const t=Object.entries(R).find((([e])=>s.includes(e)));t?F(t[1]):B(s),H()}finally{z("idle"),V()}}));return s.jsxs("div",Object.assign({className:v.default("fixed flex w-full flex-col bottom-0 left-0","viewport"===O?"min-[767px]:relative min-[767px]:bottom-auto min-[767px]:left-auto":"absolute @[767px]/pickaxe-root:relative @[767px]/pickaxe-root:bottom-auto @[767px]/pickaxe-root:left-auto")},{children:[ie&&s.jsx(b.default,{data:(null==S?void 0:S.icebreakers)||[],style:{backgroundColor:D.secondary,color:D.secondaryText},isMobile:C||te,onSend:ne}),s.jsxs("div",Object.assign({style:oe,className:"flex min-h-[56px] items-end gap-x-2 px-4 py-3 pb-[15px] shadow"},{children:["enduserupload"===(null==S?void 0:S.documentuploadtype)&&s.jsxs("div",Object.assign({className:"tooltip"},{children:[s.jsx("input",{id:"file-upload",ref:se,type:"file",accept:[...p.allowedFileMimeTypes,...L?p.allowedImageMimeTypes:[]].join(", "),multiple:!0,hidden:!0,className:"hidden",onChange:s=>e.__awaiter(void 0,void 0,void 0,(function*(){yield Q(Array.from(s.target.files||[])),s.target.value=""}))}),s.jsx("button",Object.assign({className:"flex items-center disabled:cursor-wait disabled:opacity-50",disabled:P,onClick:()=>{var e;return null===(e=se.current)||void 0===e?void 0:e.click()}},{children:s.jsx(f.default,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:D.accent}})}))]})),s.jsx(x.default,{className:v.default(re("max-h-60 w-full resize-none border-transparent bg-transparent outline-none ring-0 scrollbar scrollbar-thin placeholder:font-semilight"),!$.length&&"max-h-6 overflow-hidden text-ellipsis whitespace-nowrap"),value:$,placeholder:null!==(y=null==S?void 0:S.placeholdertext)&&void 0!==y?y:"What do you want to talk about?",onChange:e=>ee(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),ne())}}),s.jsx("button",Object.assign({className:"outline-none disabled:cursor-default disabled:opacity-50",disabled:"idle"!==E||P,onClick:()=>ne()},{children:s.jsx(g.default,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:D.accent}})}))]}))]}))};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("../../hooks/pickaxe/usePickaxe.js"),a=require("react"),t=require("../../hooks/pickaxe/usePickaxeContext.js"),s=require("../../common/utils.js"),o=require("./Addons/Scroll/Provider.js"),c=require("./Chat/index.js"),i=require("./Form/index.js"),l=require("../../common/cn.js");exports.Pickaxe=({formId:u,className:d})=>{const{chatId:x,styles:n,colors:f,setFormId:j,setChatId:k,setPickaxe:m}=t.usePickaxeContext(),h=r.usePickaxe();return a.useEffect((()=>{j(u)}),[u]),a.useEffect((()=>{h.data&&(k(h.data.chatflag?s.generateId(15):""),m(h.data))}),[h.data]),h.data?e.jsx(o.default,{children:e.jsx("div",Object.assign({className:l.default("relative @container/pickaxe-root flex flex-col flex-grow w-full h-full",d,"dark"===n.theme&&"dark"),style:{backgroundColor:f.primary,color:f.text}},{children:x?e.jsx(c.default,{}):e.jsx(i.default,{})}))}):null};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("../../hooks/pickaxe/usePickaxe.js"),a=require("react"),t=require("../../hooks/pickaxe/usePickaxeContext.js"),s=require("../../common/utils.js"),c=require("./Addons/Scroll/Provider.js"),i=require("./Chat/index.js"),o=require("./Form/index.js"),l=require("../../common/cn.js");exports.Pickaxe=({formId:u,className:d})=>{const{chatId:x,styles:n,colors:f,setFormId:j,setChatId:k,setPickaxe:m}=t.usePickaxeContext(),h=r.usePickaxe();return a.useEffect((()=>{j(u)}),[u]),a.useEffect((()=>{h.data&&(k(h.data.chatflag?s.generateId(15):""),m(h.data))}),[h.data]),h.data?e.jsx("div",Object.assign({className:l.default("relative @container/pickaxe-root flex flex-col flex-grow w-full h-full",d,"dark"===n.theme&&"dark"),style:{backgroundColor:f.primary,color:f.text}},{children:x?e.jsx(c.default,{children:e.jsx(i.default,{})}):e.jsx(c.default,{children:e.jsx(o.default,{})})})):null};
@@ -1 +1 @@
1
- import{__awaiter as e}from"../../../_virtual/_tslib.js";import{jsxs as o,jsx as t}from"react/jsx-runtime";import{useState as s,useRef as r,useMemo as i,useEffect as n}from"react";import{useMediaQuery as a}from"../../../hooks/core/useMediaQuery.js";import{usePickaxeContext as l}from"../../../hooks/pickaxe/usePickaxeContext.js";import{useResponseContext as d}from"../../../hooks/pickaxe/useResponseContext.js";import{useStyleInput as c}from"../../../hooks/studio/useStyleInput.js";import{useStyleFontSize as m}from"../../../hooks/studio/useStyleFontSize.js";import{useConversation as u}from"../../../hooks/pickaxe/useConversation.js";import{useSubmit as p}from"../../../hooks/pickaxe/useSubmit.js";import{useSubmitResult as f}from"../../../hooks/pickaxe/useSubmitResult.js";import{useDocument as h}from"../Addons/Document/hooks/useDocument.js";import{useScroll as g}from"../Addons/Scroll/hooks/useScroll.js";import{allowedFileMimeTypes as x,allowedImageMimeTypes as b}from"../../../common/documents.js";import{streamer as v}from"../../../common/api/streamer.js";import y from"../../../node_modules/.pnpm/react-textarea-autosize@8.5.7_@types_react@18.3.18_react@18.3.1/node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.js";import k from"../../Icons/attach.svg.js";import I from"../../Icons/send.svg.js";import j from"../Addons/IceBreaker/index.js";import w from"../../../common/error.js";import D from"../../../common/cn.js";const S=()=>{var S;const{formId:A,chatId:O,userId:N,studioUserId:C,pickaxe:E,colors:U,responsiveBy:_,isNewChat:z,isForceMobile:B,setIsNewChat:R,setIsShowIceBreaker:F}=l(),{messages:M,status:L,limits:T,setMessages:K,setStatus:P,setLimitData:W,setError:Q}=d(),{documents:q,isUploading:G,isImageUploadAllowed:H,upsertDocuments:J,onFileUpload:V,onEditDocumentByDocId:X}=h(),{isScrollIncreasing:Y,scrollToBottom:Z,scrollStart:$,scrollEnd:ee}=g(),oe=u(),te=p(),se=f(),[re,ie]=s(""),ne=r(null),[ae]=a("(max-width: 767px)"),le=c(),de=m({type:"body"}),ce=i((()=>{var e,o,t;return!!z&&(!!E&&(!oe.isLoading&&(!((null!==(o=null===(e=oe.data)||void 0===e?void 0:e.messages.length)&&void 0!==o?o:0)>1)&&!!(null===(t=E.icebreakers)||void 0===t?void 0:t.length))))}),[E,z,oe.data,oe.isLoading]);n((()=>{F(ce)}),[ce]);const me=o=>e(void 0,void 0,void 0,(function*(){try{if(G)return;W(null),Q(""),R(!1);const e=null!=o?o:re;if(!e||"fetching"===L||"streaming"===L)return;const t=new Date;ie("");const s="enduserupload"===(null==E?void 0:E.documentuploadtype),r=q.filter((e=>"finished"===e.status&&!e.isInsertedAsRaw)),i=r.length?r[r.length-1].documentId:"";P("fetching");const n=[...M,{id:M.length+1,role:"user",content:e}];K(n);const{success:a,data:l,usedDocumentIds:d,newDocumentId:c,newDocumentName:m,isInsertedFile:u,error:p}=yield te.mutateAsync(Object.assign(Object.assign({formId:A,responseId:O,value:e},s&&i&&{documentId:i}),C&&{studioUserId:C}));if(!a)throw new Error(null!=p?p:"An error occurred, please try again.");u&&i&&X({documentId:i,isInsertedAsRaw:!0}),c&&m&&J([{type:"website",id:m,name:m,status:"finished",documentId:c}]),$(),Z();const f=(yield v({formId:A,responseId:O,data:l})).body;if(!f)throw new Error("Streaming error");const h=f.getReader(),g=new TextDecoder,x=n.length;let b="",y=!0;for(P("streaming");y;){const{value:e,done:o}=yield h.read();y=!o;if(b+=g.decode(e),b)K([...n.slice(0,x),{id:M.length+1,role:"assistant",content:b}]),Y&&Z();else if(!y&&!b)throw new Error("Server error")}const k=new Date;b&&(Z(),P("idle"),yield se.mutateAsync(Object.assign(Object.assign(Object.assign(Object.assign({formId:A,responseId:O,documentIds:d},N&&{userId:N}),C&&{studioUserId:C}),C&&(null==E?void 0:E.studioid)&&{studioId:E.studioid}),{messages:[{role:"user",message:e,sentAt:t},{role:"assistant",message:b,sentAt:k}]})))}catch(e){let o=w(e);o.includes("Unexpected token 'A',")&&(o="Oops! We're experiencing high traffic at the moment. Please try again later.");const t=Object.entries(T).find((([e])=>o.includes(e)));t?W(t[1]):Q(o),Z()}finally{P("idle"),ee()}}));return o("div",Object.assign({className:D("fixed flex w-full flex-col bottom-0 left-0","viewport"===_?"min-[767px]:relative min-[767px]:bottom-auto min-[767px]:left-auto":"absolute @[767px]/pickaxe-root:relative @[767px]/pickaxe-root:bottom-auto @[767px]/pickaxe-root:left-auto")},{children:[ce&&t(j,{data:(null==E?void 0:E.icebreakers)||[],style:{backgroundColor:U.secondary,color:U.secondaryText},isMobile:B||ae,onSend:me}),o("div",Object.assign({style:le,className:"flex min-h-[56px] items-end gap-x-2 px-4 py-3 pb-[15px] shadow"},{children:["enduserupload"===(null==E?void 0:E.documentuploadtype)&&o("div",Object.assign({className:"tooltip"},{children:[t("input",{id:"file-upload",ref:ne,type:"file",accept:[...x,...H?b:[]].join(", "),multiple:!0,hidden:!0,className:"hidden",onChange:o=>e(void 0,void 0,void 0,(function*(){yield V(Array.from(o.target.files||[])),o.target.value=""}))}),t("button",Object.assign({className:"flex items-center disabled:cursor-wait disabled:opacity-50",disabled:G,onClick:()=>{var e;return null===(e=ne.current)||void 0===e?void 0:e.click()}},{children:t(k,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:U.accent}})}))]})),t(y,{className:D(de("max-h-60 w-full resize-none border-transparent bg-transparent outline-none ring-0 scrollbar scrollbar-thin placeholder:font-semilight"),!re.length&&"max-h-6 overflow-hidden text-ellipsis whitespace-nowrap"),value:re,placeholder:null!==(S=null==E?void 0:E.placeholdertext)&&void 0!==S?S:"What do you want to talk about?",onChange:e=>ie(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),me())}}),t("button",Object.assign({className:"outline-none disabled:cursor-default disabled:opacity-50",disabled:"idle"!==L||G,onClick:()=>me()},{children:t(I,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:U.accent}})}))]}))]}))};export{S as default};
1
+ import{__awaiter as e}from"../../../_virtual/_tslib.js";import{jsxs as o,jsx as t}from"react/jsx-runtime";import{useState as s,useRef as r,useMemo as i,useEffect as n}from"react";import{useMediaQuery as a}from"../../../hooks/core/useMediaQuery.js";import{usePickaxeContext as l}from"../../../hooks/pickaxe/usePickaxeContext.js";import{useResponseContext as d}from"../../../hooks/pickaxe/useResponseContext.js";import{useStyleInput as c}from"../../../hooks/studio/useStyleInput.js";import{useStyleFontSize as m}from"../../../hooks/studio/useStyleFontSize.js";import{useConversation as u}from"../../../hooks/pickaxe/useConversation.js";import{useSubmit as p}from"../../../hooks/pickaxe/useSubmit.js";import{useSubmitResult as f}from"../../../hooks/pickaxe/useSubmitResult.js";import{useDocument as h}from"../Addons/Document/hooks/useDocument.js";import{useScroll as g}from"../Addons/Scroll/hooks/useScroll.js";import{allowedFileMimeTypes as x,allowedImageMimeTypes as b}from"../../../common/documents.js";import{streamer as v}from"../../../common/api/streamer.js";import y from"../../../node_modules/.pnpm/react-textarea-autosize@8.5.7_@types_react@18.3.18_react@18.3.1/node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.js";import k from"../../Icons/attach.svg.js";import I from"../../Icons/send.svg.js";import j from"../Addons/IceBreaker/index.js";import w from"../../../common/error.js";import D from"../../../common/cn.js";const S=()=>{var S;const{formId:A,chatId:O,userId:N,studioUserId:C,pickaxe:E,colors:U,responsiveBy:_,isNewChat:z,isForceMobile:B,setIsNewChat:R,setIsShowIceBreaker:F}=l(),{messages:M,status:L,limits:T,setMessages:K,setStatus:P,setLimitData:W,setError:Q}=d(),{documents:q,isUploading:G,isImageUploadAllowed:H,upsertDocuments:J,onFileUpload:V,onEditDocumentByDocId:X}=h(),{isScrollIncreasing:Y,scrollToBottom:Z,scrollStart:$,scrollEnd:ee}=g(),oe=u(),te=p(),se=f(),[re,ie]=s(""),ne=r(null),[ae]=a("(max-width: 767px)"),le=c(),de=m({type:"body"}),ce=i((()=>{var e,o,t;return!!z&&(!!E&&(!oe.isLoading&&(!((null!==(o=null===(e=oe.data)||void 0===e?void 0:e.messages.length)&&void 0!==o?o:0)>1)&&!!(null===(t=E.icebreakers)||void 0===t?void 0:t.length))))}),[E,z,oe.data,oe.isLoading]);n((()=>{F(ce)}),[ce]);const me=o=>e(void 0,void 0,void 0,(function*(){try{if(G)return;W(null),Q(""),R(!1);const e=null!=o?o:re;if(!e||"fetching"===L||"streaming"===L)return;const t=new Date;ie("");const s="enduserupload"===(null==E?void 0:E.documentuploadtype),r=q.filter((e=>"finished"===e.status&&!e.isInsertedAsRaw)),i=r.length?r[r.length-1].documentId:"";P("fetching");const n=[...M,{id:M.length+1,role:"user",content:e}];K(n),$(),Z();const{success:a,data:l,usedDocumentIds:d,newDocumentId:c,newDocumentName:m,isInsertedFile:u,error:p}=yield te.mutateAsync(Object.assign(Object.assign({formId:A,responseId:O,value:e},s&&i&&{documentId:i}),C&&{studioUserId:C}));if(!a)throw new Error(null!=p?p:"An error occurred, please try again.");u&&i&&X({documentId:i,isInsertedAsRaw:!0}),c&&m&&J([{type:"website",id:m,name:m,status:"finished",documentId:c}]),Z();const f=(yield v({formId:A,responseId:O,data:l})).body;if(!f)throw new Error("Streaming error");const h=f.getReader(),g=new TextDecoder,x=n.length;let b="",y=!0;for(P("streaming");y;){const{value:e,done:o}=yield h.read();y=!o;if(b+=g.decode(e),b)K([...n.slice(0,x),{id:M.length+1,role:"assistant",content:b}]),Y&&Z();else if(!y&&!b)throw new Error("Server error")}const k=new Date;b&&(Z(),P("idle"),yield se.mutateAsync(Object.assign(Object.assign(Object.assign(Object.assign({formId:A,responseId:O,documentIds:d},N&&{userId:N}),C&&{studioUserId:C}),C&&(null==E?void 0:E.studioid)&&{studioId:E.studioid}),{messages:[{role:"user",message:e,sentAt:t},{role:"assistant",message:b,sentAt:k}]})))}catch(e){let o=w(e);o.includes("Unexpected token 'A',")&&(o="Oops! We're experiencing high traffic at the moment. Please try again later.");const t=Object.entries(T).find((([e])=>o.includes(e)));t?W(t[1]):Q(o),Z()}finally{P("idle"),ee()}}));return o("div",Object.assign({className:D("fixed flex w-full flex-col bottom-0 left-0","viewport"===_?"min-[767px]:relative min-[767px]:bottom-auto min-[767px]:left-auto":"absolute @[767px]/pickaxe-root:relative @[767px]/pickaxe-root:bottom-auto @[767px]/pickaxe-root:left-auto")},{children:[ce&&t(j,{data:(null==E?void 0:E.icebreakers)||[],style:{backgroundColor:U.secondary,color:U.secondaryText},isMobile:B||ae,onSend:me}),o("div",Object.assign({style:le,className:"flex min-h-[56px] items-end gap-x-2 px-4 py-3 pb-[15px] shadow"},{children:["enduserupload"===(null==E?void 0:E.documentuploadtype)&&o("div",Object.assign({className:"tooltip"},{children:[t("input",{id:"file-upload",ref:ne,type:"file",accept:[...x,...H?b:[]].join(", "),multiple:!0,hidden:!0,className:"hidden",onChange:o=>e(void 0,void 0,void 0,(function*(){yield V(Array.from(o.target.files||[])),o.target.value=""}))}),t("button",Object.assign({className:"flex items-center disabled:cursor-wait disabled:opacity-50",disabled:G,onClick:()=>{var e;return null===(e=ne.current)||void 0===e?void 0:e.click()}},{children:t(k,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:U.accent}})}))]})),t(y,{className:D(de("max-h-60 w-full resize-none border-transparent bg-transparent outline-none ring-0 scrollbar scrollbar-thin placeholder:font-semilight"),!re.length&&"max-h-6 overflow-hidden text-ellipsis whitespace-nowrap"),value:re,placeholder:null!==(S=null==E?void 0:E.placeholdertext)&&void 0!==S?S:"What do you want to talk about?",onChange:e=>ie(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),me())}}),t("button",Object.assign({className:"outline-none disabled:cursor-default disabled:opacity-50",disabled:"idle"!==L||G,onClick:()=>me()},{children:t(I,{className:"h-6 w-6 shrink-0 stroke-2",style:{color:U.accent}})}))]}))]}))};export{S as default};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{usePickaxe as r}from"../../hooks/pickaxe/usePickaxe.js";import{useEffect as t}from"react";import{usePickaxeContext as e}from"../../hooks/pickaxe/usePickaxeContext.js";import{generateId as a}from"../../common/utils.js";import m from"./Addons/Scroll/Provider.js";import s from"./Chat/index.js";import i from"./Form/index.js";import c from"../../common/cn.js";const l=({formId:l,className:d})=>{const{chatId:n,styles:f,colors:x,setFormId:p,setChatId:k,setPickaxe:h}=e(),j=r();return t((()=>{p(l)}),[l]),t((()=>{j.data&&(k(j.data.chatflag?a(15):""),h(j.data))}),[j.data]),j.data?o(m,{children:o("div",Object.assign({className:c("relative @container/pickaxe-root flex flex-col flex-grow w-full h-full",d,"dark"===f.theme&&"dark"),style:{backgroundColor:x.primary,color:x.text}},{children:o(n?s:i,{})}))}):null};export{l as Pickaxe};
1
+ import{jsx as o}from"react/jsx-runtime";import{usePickaxe as r}from"../../hooks/pickaxe/usePickaxe.js";import{useEffect as t}from"react";import{usePickaxeContext as e}from"../../hooks/pickaxe/usePickaxeContext.js";import{generateId as a}from"../../common/utils.js";import m from"./Addons/Scroll/Provider.js";import s from"./Chat/index.js";import i from"./Form/index.js";import c from"../../common/cn.js";const l=({formId:l,className:d})=>{const{chatId:n,styles:f,colors:x,setFormId:p,setChatId:h,setPickaxe:k}=e(),j=r();return t((()=>{p(l)}),[l]),t((()=>{j.data&&(h(j.data.chatflag?a(15):""),k(j.data))}),[j.data]),j.data?o("div",Object.assign({className:c("relative @container/pickaxe-root flex flex-col flex-grow w-full h-full",d,"dark"===f.theme&&"dark"),style:{backgroundColor:x.primary,color:x.text}},{children:o(m,n?{children:o(s,{})}:{children:o(i,{})})})):null};export{l as Pickaxe};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pickaxeproject/react",
3
- "version": "0.0.28",
3
+ "version": "0.0.29",
4
4
  "description": "Client utility library for Pickaxe",
5
5
  "repository": {
6
6
  "type": "git",