codicent-app-sdk 0.5.1 → 0.5.3

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.
Files changed (76) hide show
  1. package/dist/cjs/components/AiInput.js +1 -1
  2. package/dist/cjs/components/AudioIcon.js +1 -1
  3. package/dist/cjs/components/ChatInput.js +1 -1
  4. package/dist/cjs/components/ChatMessage.js +1 -1
  5. package/dist/cjs/components/CombinedPlaceholderDialog.js +1 -1
  6. package/dist/cjs/components/HtmlView.d.ts.map +1 -1
  7. package/dist/cjs/components/HtmlView.js +1 -1
  8. package/dist/cjs/components/MessageInput.js +1 -1
  9. package/dist/cjs/components/Profile.js +1 -1
  10. package/dist/cjs/components/Prompt.js +1 -1
  11. package/dist/cjs/components/RecordModal.d.ts.map +1 -1
  12. package/dist/cjs/components/RecordModal.js +1 -1
  13. package/dist/cjs/components/SearchBox.d.ts +6 -2
  14. package/dist/cjs/components/SearchBox.d.ts.map +1 -1
  15. package/dist/cjs/components/SearchBox.js +1 -1
  16. package/dist/cjs/components/SnapFooter.js +1 -1
  17. package/dist/cjs/components/TextHeader.js +1 -1
  18. package/dist/cjs/components/TypingIndicator.js +1 -1
  19. package/dist/cjs/components/UploadFile.js +1 -1
  20. package/dist/cjs/components/UrlProcessor.js +1 -1
  21. package/dist/cjs/components/VoiceIcon.js +1 -1
  22. package/dist/cjs/hooks/useAuthState.js +1 -1
  23. package/dist/cjs/hooks/useCodicentState.js +1 -1
  24. package/dist/cjs/pages/AppFrame.js +1 -1
  25. package/dist/cjs/pages/Chat.d.ts.map +1 -1
  26. package/dist/cjs/pages/Chat.js +1 -1
  27. package/dist/cjs/pages/CrmPage.js +1 -1
  28. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  29. package/dist/cjs/pages/FormAccept.js +1 -1
  30. package/dist/cjs/pages/FormInvite.js +1 -1
  31. package/dist/cjs/pages/HtmlViewer.d.ts.map +1 -1
  32. package/dist/cjs/pages/HtmlViewer.js +1 -1
  33. package/dist/cjs/pages/Login.js +1 -1
  34. package/dist/cjs/pages/Search.js +1 -1
  35. package/dist/cjs/services/codicent.d.ts +1 -1
  36. package/dist/cjs/services/codicent.d.ts.map +1 -1
  37. package/dist/cjs/services/codicent.js +1 -1
  38. package/dist/esm/components/AiInput.js +1 -1
  39. package/dist/esm/components/AudioIcon.js +1 -1
  40. package/dist/esm/components/ChatInput.js +1 -1
  41. package/dist/esm/components/ChatMessage.js +1 -1
  42. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  43. package/dist/esm/components/HtmlView.d.ts.map +1 -1
  44. package/dist/esm/components/HtmlView.js +1 -1
  45. package/dist/esm/components/MessageInput.js +1 -1
  46. package/dist/esm/components/Profile.js +1 -1
  47. package/dist/esm/components/Prompt.js +1 -1
  48. package/dist/esm/components/RecordModal.d.ts.map +1 -1
  49. package/dist/esm/components/RecordModal.js +1 -1
  50. package/dist/esm/components/SearchBox.d.ts +6 -2
  51. package/dist/esm/components/SearchBox.d.ts.map +1 -1
  52. package/dist/esm/components/SearchBox.js +1 -1
  53. package/dist/esm/components/SnapFooter.js +1 -1
  54. package/dist/esm/components/TextHeader.js +1 -1
  55. package/dist/esm/components/TypingIndicator.js +1 -1
  56. package/dist/esm/components/UploadFile.js +1 -1
  57. package/dist/esm/components/UrlProcessor.js +1 -1
  58. package/dist/esm/components/VoiceIcon.js +1 -1
  59. package/dist/esm/hooks/useAuthState.js +1 -1
  60. package/dist/esm/hooks/useCodicentState.js +1 -1
  61. package/dist/esm/pages/AppFrame.js +1 -1
  62. package/dist/esm/pages/Chat.d.ts.map +1 -1
  63. package/dist/esm/pages/Chat.js +1 -1
  64. package/dist/esm/pages/CrmPage.js +1 -1
  65. package/dist/esm/pages/CrmPagePersistent.js +1 -1
  66. package/dist/esm/pages/FormAccept.js +1 -1
  67. package/dist/esm/pages/FormInvite.js +1 -1
  68. package/dist/esm/pages/HtmlViewer.d.ts.map +1 -1
  69. package/dist/esm/pages/HtmlViewer.js +1 -1
  70. package/dist/esm/pages/Login.js +1 -1
  71. package/dist/esm/pages/Search.js +1 -1
  72. package/dist/esm/services/codicent.d.ts +1 -1
  73. package/dist/esm/services/codicent.d.ts.map +1 -1
  74. package/dist/esm/services/codicent.js +1 -1
  75. package/dist/index.d.ts +7 -3
  76. package/package.json +1 -1
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Button as c,MessageBar as l,MessageBarBody as d}from"@fluentui/react-components";import{ArrowLeft24Regular as u}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import g from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import h from"../components/VoiceIcon.js";import f from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as v}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import S from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import b from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import{useNavigate as w,useSearchParams as C}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import I from"../hooks/useToaster.js";import{l as y}from"../node_modules/lodash/lodash.js";const U=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",position:"relative"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:p.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},backButton:{marginBottom:"10px"}}),_=({state:s,voice:m})=>{const p=U(),{t:_}=b(),M=w(),[A,B]=t(!1),P=n(null),T=n(null),F=n(null),[N]=t(null),[E,L]=t([]),{service:O}=s,[R,$]=C(),[V,D]=t(""),[H,z]=t(void 0),G=I(),[W,Q]=t(void 0),[J,K]=t("info"),X=r((e=>{for(const o of e)O.getFileInfo(o).then((e=>{L((o=>[...o,e]))}))}),[O,L]),Y=r((e=>{const o=new FormData;o.append("file",e),O.uploadFile(e.name,o).then((e=>{X([e])})).catch((()=>{G.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[O,X,G,_]),q=e=>{B(e)};i((()=>{const e=R.get("text"),o=R.get("url");e&&(D(e),R.delete("text")),o&&(R.delete("url"),D(((e||"")+" "+o).trim())),$(R,{replace:!0})}),[R,$,D,O,X]);const Z=r((async e=>{if(!e||e.length<10)return;Q(_("Analyserar...")),K("info");const o=await O.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new f(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;Q(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{Q("Error: "+e.content),K("error")}}}),[O]),ee=a((()=>y.debounce(Z,2e3)),[Z]);return i((()=>()=>{ee.cancel()}),[ee]),e(x,{hideHeader:!0,children:o("div",{className:p.container,style:{backgroundImage:`url(${v("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&v("SHOW_VOICE_BUTTON")&&e("div",{className:p.voiceIcon,children:e(h,{voice:m})}),e("div",{className:p.backButton,children:e(c,{appearance:"subtle",icon:e(u,{}),onClick:()=>M(-1),children:_("Tillbaka")})}),e(g,{title:v("APP_SAVE_TITLE")?_(v("APP_SAVE_TITLE")):_("Spara")}),e(k,{defaultText:V,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${N?" "+N:""}${E.length>0?"\n":""}${E.map((e=>`#file:${e.id}`)).join(" ")}`,O.sendMessage(e).then((()=>{G.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:E,onFilesChange:L,isUploading:A,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{F.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(z(e),e&&e.trim().length>0?ee(e):(Q(void 0),ee.cancel()))},onImagePasted:Y}),W&&o("div",{className:p.review,children:[e("h3",{children:_("Analys")}),e(l,{intent:J,layout:"multiline",children:e(d,{children:_(W)})})]}),e(S,{ref:P,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:O}),e(S,{codicentService:O,ref:T,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(S,{codicentService:O,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{_ as CrmPage,_ as default};
1
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Button as c,MessageBar as l,MessageBarBody as d}from"@fluentui/react-components";import{ArrowLeft24Regular as u}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import g from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import h from"../components/VoiceIcon.js";import f from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as v}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import S from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import b from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as w,useSearchParams as C}from"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import I from"../hooks/useToaster.js";import{l as y}from"../node_modules/lodash/lodash.js";const U=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",position:"relative"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:p.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},backButton:{marginBottom:"10px"}}),_=({state:s,voice:m})=>{const p=U(),{t:_}=b(),M=w(),[A,B]=t(!1),P=n(null),T=n(null),F=n(null),[N]=t(null),[E,L]=t([]),{service:O}=s,[R,$]=C(),[V,D]=t(""),[H,z]=t(void 0),G=I(),[W,Q]=t(void 0),[J,K]=t("info"),X=r((e=>{for(const o of e)O.getFileInfo(o).then((e=>{L((o=>[...o,e]))}))}),[O,L]),Y=r((e=>{const o=new FormData;o.append("file",e),O.uploadFile(e.name,o).then((e=>{X([e])})).catch((()=>{G.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[O,X,G,_]),q=e=>{B(e)};i((()=>{const e=R.get("text"),o=R.get("url");e&&(D(e),R.delete("text")),o&&(R.delete("url"),D(((e||"")+" "+o).trim())),$(R,{replace:!0})}),[R,$,D,O,X]);const Z=r((async e=>{if(!e||e.length<10)return;Q(_("Analyserar...")),K("info");const o=await O.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new f(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;Q(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{Q("Error: "+e.content),K("error")}}}),[O]),ee=a((()=>y.debounce(Z,2e3)),[Z]);return i((()=>()=>{ee.cancel()}),[ee]),e(x,{hideHeader:!0,children:o("div",{className:p.container,style:{backgroundImage:`url(${v("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&v("SHOW_VOICE_BUTTON")&&e("div",{className:p.voiceIcon,children:e(h,{voice:m})}),e("div",{className:p.backButton,children:e(c,{appearance:"subtle",icon:e(u,{}),onClick:()=>M(-1),children:_("Tillbaka")})}),e(g,{title:v("APP_SAVE_TITLE")?_(v("APP_SAVE_TITLE")):_("Spara")}),e(k,{defaultText:V,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${N?" "+N:""}${E.length>0?"\n":""}${E.map((e=>`#file:${e.id}`)).join(" ")}`,O.sendMessage(e).then((()=>{G.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:E,onFilesChange:L,isUploading:A,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{F.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(z(e),e&&e.trim().length>0?ee(e):(Q(void 0),ee.cancel()))},onImagePasted:Y}),W&&o("div",{className:p.review,children:[e("h3",{children:_("Analys")}),e(l,{intent:J,layout:"multiline",children:e(d,{children:_(W)})})]}),e(S,{ref:P,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:O}),e(S,{codicentService:O,ref:T,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(S,{codicentService:O,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{_ as CrmPage,_ as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as l,tokens as m,Text as c,Spinner as p,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as f}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import x from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import S from"../components/VoiceIcon.js";import v from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as y}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{isMobileDevice as k}from"../utils/device.js";import"../components/FileThumbnail.js";import w from"../components/MessageInput.js";import b from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as C}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import M from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import{useNavigate as N,useSearchParams as I}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import T from"../hooks/useToaster.js";import{l as B}from"../node_modules/lodash/lodash.js";const D=s({main:{flexGrow:1,...l.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...l.gap("16px"),...l.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...l.gap("16px"),...l.padding("10px")},inputSection:{display:"flex",flexDirection:"column",flexGrow:1,maxWidth:"640px",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",position:"relative"},inputSectionMobile:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},historySection:{flexBasis:"300px",flexShrink:0,display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px"),maxHeight:"300px"},historyCard:{...l.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:m.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...l.gap("4px")},historyDate:{fontSize:m.fontSizeBase200,color:m.colorNeutralForeground3},historyText:{fontSize:m.fontSizeBase300,wordBreak:"break-word",whiteSpace:"pre-wrap",maxHeight:"100px",overflow:"hidden",textOverflow:"ellipsis"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},historyTitle:{fontSize:m.fontSizeBase400,fontWeight:m.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:m.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),U=({state:s,voice:l})=>{const m=D(),{t:U}=M(),_=N(),[A,E]=t(!1),F=n(null),P=n(null),$=n(null),[O]=t(null),[L,z]=t([]),{service:R}=s,[H,V]=I(),[W,G]=t(""),[J,Q]=t(void 0),Y=T(),[K,X]=t(void 0),[q,Z]=t("info"),[ee,oe]=t([]),[te,ne]=t(!1),re=k(),ie=r((e=>{for(const o of e)R.getFileInfo(o).then((e=>{z((o=>[...o,e]))}))}),[R,z]),ae=r((e=>{const o=new FormData;o.append("file",e),R.uploadFile(e.name,o).then((e=>{ie([e])})).catch((()=>{Y.notify(U("Error"),U("Error uploading pasted image"),"")}))}),[R,ie,Y,U]),se=e=>{E(e)},le=r((async()=>{ne(!0);try{const e=await R.getMessages(["crm"]);oe(e)}catch(e){console.error("Error loading CRM messages:",e),Y.notify(U("Error"),U("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,Y,U]);i((()=>{le()}),[le]),i((()=>{const e=H.get("text"),o=H.get("url");e&&(G(e),H.delete("text")),o&&(H.delete("url"),G(((e||"")+" "+o).trim())),V(H,{replace:!0})}),[H,V,G,R,ie]);const me=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${O?" "+O:""}${L.length>0?"\n":""}${L.map((e=>`#file:${e.id}`)).join(" ")}`,R.sendMessage(e).then((()=>{Y.notify(U("Meddelande"),U("Meddelandet är sparat."),""),le(),Q(""),X(void 0)}))},ce=r((async e=>{if(!e||e.length<10)return;X(U("Analyserar...")),Z("info");const o=await R.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new v(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;X(U(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,U]),pe=a((()=>B.debounce(ce,2e3)),[ce]);i((()=>()=>{pe.cancel()}),[pe]);const de=e=>{const o=new Date,t=new Date(e),n=o.getTime()-t.getTime(),r=Math.floor(n/6e4),i=Math.floor(n/36e5),a=Math.floor(n/864e5);return r<1?U("Just now"):r<60?`${r} ${U("minutes ago")}`:i<24?`${i} ${U("hours ago")}`:a<7?`${a} ${U("days ago")}`:t.toLocaleDateString()},ue=e=>{const o=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return o.substring(0,150)+(o.length>150?"...":"")},ge=()=>o("div",{className:re?m.historySectionMobile:m.historySection,children:[e(c,{className:m.historyTitle,children:U("Tidigare sparade")}),te?e("div",{className:m.emptyState,children:e(p,{size:"small"})}):0===ee.length?e("div",{className:m.emptyState,children:e(c,{children:U("Inga sparade meddelanden än")})}):ee.map((t=>e(d,{className:m.historyCard,onClick:()=>(e=>{const o=ue(e.content);Q(o)})(t),children:o("div",{className:m.historyCardContent,children:[e(c,{className:m.historyDate,children:de(t.createdAt)}),e(c,{className:m.historyText,children:ue(t.content)})]})},t.id)))]});return e(C,{hideHeader:!0,children:o("div",{className:re?m.containerMobile:m.container,children:[!re&&ge(),o("div",{className:re?m.inputSectionMobile:m.inputSection,style:re?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[l&&y("SHOW_VOICE_BUTTON")&&e("div",{className:m.voiceIcon,children:e(S,{voice:l})}),e("div",{className:m.backButton,children:e(u,{appearance:"subtle",icon:e(f,{}),onClick:()=>_(-1),children:U("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?U(y("APP_SAVE_TITLE")):U("Spara")}),e(w,{defaultText:W,onSend:me,files:L,onFilesChange:z,isUploading:A,onUploadImage:()=>{P.current?.triggerUpload()},onUploadCamera:()=>{$.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!O,disableSend:!0,rows:9,placeholder:U("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==J&&(Q(e),e&&e.trim().length>0?pe(e):(X(void 0),pe.cancel()))},onImagePasted:ae}),K&&o("div",{className:m.review,children:[e("h3",{children:U("Analys")}),e(g,{intent:q,layout:"multiline",children:e(h,{children:U(K)})})]}),e(b,{ref:F,onFileUploaded:ie,onUploading:se,multiple:!0,codicentService:R}),e(b,{codicentService:R,ref:P,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*"}),e(b,{codicentService:R,ref:$,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*",capture:"environment"})]}),re&&ge()]})})};export{U as CrmPagePersistent,U as default};
1
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as l,tokens as m,Text as c,Spinner as p,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as f}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import x from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import S from"../components/VoiceIcon.js";import v from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as y}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{isMobileDevice as k}from"../utils/device.js";import"../components/FileThumbnail.js";import w from"../components/MessageInput.js";import b from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as C}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import M from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as N,useSearchParams as I}from"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import T from"../hooks/useToaster.js";import{l as B}from"../node_modules/lodash/lodash.js";const D=s({main:{flexGrow:1,...l.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...l.gap("16px"),...l.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...l.gap("16px"),...l.padding("10px")},inputSection:{display:"flex",flexDirection:"column",flexGrow:1,maxWidth:"640px",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",position:"relative"},inputSectionMobile:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},historySection:{flexBasis:"300px",flexShrink:0,display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px"),maxHeight:"300px"},historyCard:{...l.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:m.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...l.gap("4px")},historyDate:{fontSize:m.fontSizeBase200,color:m.colorNeutralForeground3},historyText:{fontSize:m.fontSizeBase300,wordBreak:"break-word",whiteSpace:"pre-wrap",maxHeight:"100px",overflow:"hidden",textOverflow:"ellipsis"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},historyTitle:{fontSize:m.fontSizeBase400,fontWeight:m.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:m.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),U=({state:s,voice:l})=>{const m=D(),{t:U}=M(),_=N(),[A,E]=t(!1),F=n(null),P=n(null),$=n(null),[O]=t(null),[L,z]=t([]),{service:R}=s,[H,V]=I(),[W,G]=t(""),[J,Q]=t(void 0),Y=T(),[K,X]=t(void 0),[q,Z]=t("info"),[ee,oe]=t([]),[te,ne]=t(!1),re=k(),ie=r((e=>{for(const o of e)R.getFileInfo(o).then((e=>{z((o=>[...o,e]))}))}),[R,z]),ae=r((e=>{const o=new FormData;o.append("file",e),R.uploadFile(e.name,o).then((e=>{ie([e])})).catch((()=>{Y.notify(U("Error"),U("Error uploading pasted image"),"")}))}),[R,ie,Y,U]),se=e=>{E(e)},le=r((async()=>{ne(!0);try{const e=await R.getMessages(["crm"]);oe(e)}catch(e){console.error("Error loading CRM messages:",e),Y.notify(U("Error"),U("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,Y,U]);i((()=>{le()}),[le]),i((()=>{const e=H.get("text"),o=H.get("url");e&&(G(e),H.delete("text")),o&&(H.delete("url"),G(((e||"")+" "+o).trim())),V(H,{replace:!0})}),[H,V,G,R,ie]);const me=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${O?" "+O:""}${L.length>0?"\n":""}${L.map((e=>`#file:${e.id}`)).join(" ")}`,R.sendMessage(e).then((()=>{Y.notify(U("Meddelande"),U("Meddelandet är sparat."),""),le(),Q(""),X(void 0)}))},ce=r((async e=>{if(!e||e.length<10)return;X(U("Analyserar...")),Z("info");const o=await R.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new v(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;X(U(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,U]),pe=a((()=>B.debounce(ce,2e3)),[ce]);i((()=>()=>{pe.cancel()}),[pe]);const de=e=>{const o=new Date,t=new Date(e),n=o.getTime()-t.getTime(),r=Math.floor(n/6e4),i=Math.floor(n/36e5),a=Math.floor(n/864e5);return r<1?U("Just now"):r<60?`${r} ${U("minutes ago")}`:i<24?`${i} ${U("hours ago")}`:a<7?`${a} ${U("days ago")}`:t.toLocaleDateString()},ue=e=>{const o=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return o.substring(0,150)+(o.length>150?"...":"")},ge=()=>o("div",{className:re?m.historySectionMobile:m.historySection,children:[e(c,{className:m.historyTitle,children:U("Tidigare sparade")}),te?e("div",{className:m.emptyState,children:e(p,{size:"small"})}):0===ee.length?e("div",{className:m.emptyState,children:e(c,{children:U("Inga sparade meddelanden än")})}):ee.map((t=>e(d,{className:m.historyCard,onClick:()=>(e=>{const o=ue(e.content);Q(o)})(t),children:o("div",{className:m.historyCardContent,children:[e(c,{className:m.historyDate,children:de(t.createdAt)}),e(c,{className:m.historyText,children:ue(t.content)})]})},t.id)))]});return e(C,{hideHeader:!0,children:o("div",{className:re?m.containerMobile:m.container,children:[!re&&ge(),o("div",{className:re?m.inputSectionMobile:m.inputSection,style:re?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[l&&y("SHOW_VOICE_BUTTON")&&e("div",{className:m.voiceIcon,children:e(S,{voice:l})}),e("div",{className:m.backButton,children:e(u,{appearance:"subtle",icon:e(f,{}),onClick:()=>_(-1),children:U("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?U(y("APP_SAVE_TITLE")):U("Spara")}),e(w,{defaultText:W,onSend:me,files:L,onFilesChange:z,isUploading:A,onUploadImage:()=>{P.current?.triggerUpload()},onUploadCamera:()=>{$.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!O,disableSend:!0,rows:9,placeholder:U("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==J&&(Q(e),e&&e.trim().length>0?pe(e):(X(void 0),pe.cancel()))},onImagePasted:ae}),K&&o("div",{className:m.review,children:[e("h3",{children:U("Analys")}),e(g,{intent:q,layout:"multiline",children:e(h,{children:U(K)})})]}),e(b,{ref:F,onFileUploaded:ie,onUploading:se,multiple:!0,codicentService:R}),e(b,{codicentService:R,ref:P,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*"}),e(b,{codicentService:R,ref:$,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*",capture:"environment"})]}),re&&ge()]})})};export{U as CrmPagePersistent,U as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import r from"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Title as i}from"../components/Title.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import{makeStyles as s,Button as m}from"@fluentui/react-components";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{useState as p,useEffect as a}from"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as l}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./Sales.js";import"./Purchase.js";import d from"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import u from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import{useSearchParams as h,useNavigate as g}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const f=s({container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},instructionParagraph:{fontWeight:"bold",marginBottom:"1em"},orderedList:{marginLeft:"20px",marginBottom:"1em",fontSize:"1.3em"}}),k=()=>{const{t:s,tAsync:k}=u(),[C]=h(),M=g(),_=C.get("id"),b=f(),[v,S]=p(""),[P,w]=p(!1);return a((()=>{(async()=>{const o=c("FORM_ACCEPT_MARKDOWN");if(o){w(!0);const t=await k(o);w(!1),S(t.replace("{{code}}",l(_||"")))}})()}),[k,_]),o(j,{hideFooter:!0,hideHeader:!0,children:o("div",{className:b.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(d,{children:[P&&o(n,{children:s("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&v&&!P&&o(r,{content:v}),!c("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:s("Din kod för formuläret")}),o("p",{className:b.instructionParagraph,children:s("Instruktioner:")}),t("ol",{className:b.orderedList,children:[o("li",{children:s("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:s("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(n,{size:500,children:s("Din kod är (skriv ner den):")}),o(n,{size:600,style:{userSelect:"all"},children:l(_||"")})]}),_&&o(m,{appearance:"primary",onClick:()=>M(`/chat?fid=${_}`),children:s("Starta")})]})})})};export{k as default};
1
+ import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import r from"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Title as i}from"../components/Title.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import{makeStyles as s,Button as m}from"@fluentui/react-components";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{useState as p,useEffect as a}from"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as l}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./Sales.js";import{useSearchParams as d,useNavigate as j}from"react-router-dom";import"./Purchase.js";import u from"../components/Content.js";import{Page as h}from"../components/Page.js";import"./QrScan.js";import g from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const f=s({container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},instructionParagraph:{fontWeight:"bold",marginBottom:"1em"},orderedList:{marginLeft:"20px",marginBottom:"1em",fontSize:"1.3em"}}),k=()=>{const{t:s,tAsync:k}=g(),[C]=d(),M=j(),_=C.get("id"),b=f(),[v,S]=p(""),[P,w]=p(!1);return a((()=>{(async()=>{const o=c("FORM_ACCEPT_MARKDOWN");if(o){w(!0);const t=await k(o);w(!1),S(t.replace("{{code}}",l(_||"")))}})()}),[k,_]),o(h,{hideFooter:!0,hideHeader:!0,children:o("div",{className:b.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(u,{children:[P&&o(n,{children:s("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&v&&!P&&o(r,{content:v}),!c("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:s("Din kod för formuläret")}),o("p",{className:b.instructionParagraph,children:s("Instruktioner:")}),t("ol",{className:b.orderedList,children:[o("li",{children:s("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:s("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(n,{size:500,children:s("Din kod är (skriv ner den):")}),o(n,{size:600,style:{userSelect:"all"},children:l(_||"")})]}),_&&o(m,{appearance:"primary",onClick:()=>M(`/chat?fid=${_}`),children:s("Starta")})]})})})};export{k as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useEffect as r}from"react";import{makeStyles as i,useId as a,Dropdown as s,Option as m}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as l}from"../components/Title.js";import"../components/Spinner.js";import{Label as c}from"../components/Label.js";import{Input as d}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import u from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as h}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import k from"../components/Content.js";import{Page as g}from"../components/Page.js";import"./QrScan.js";import f from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const v=i({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}}),w=({state:i})=>{const w=v(),{service:b}=i,{t:C}=f(),[S,x]=u(i.context.selectedApp+"_forms",[]),[y,$]=n(),[L,M]=n(),[P,B]=n(!1),[_,A]=n(),D=a("form-dropdown");r((()=>{b.getForms().then((o=>{o.sort(((o,e)=>o.name.localeCompare(e.name))),x(o)}))}),[b,C,x]);const T=void 0!==navigator.share;return o(g,{children:o("div",{className:w.container,style:{backgroundImage:`url(${j("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e(k,{children:[o(l,{children:C("Skapa länk till formulär")}),o("p",{className:w.instructionParagraph,children:C("Instruktioner")}),e("ol",{className:w.orderedList,children:[o("li",{children:C("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),o("li",{children:C("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),o("li",{children:C("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),o("li",{children:C("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),o("li",{children:C("Kom ihåg att spara (skriva ner) koden")})]}),o("label",{id:D,className:w.instructionParagraph,children:C("Välj formulär")}),o(s,{"aria-labelledby":D,placeholder:"-",onOptionSelect:(o,e)=>A(e.optionValue),children:S.map((o=>e(m,{value:o.name,text:`${o.title} (${o.name})`,children:[`${o.title} (${o.name})`," "]},o.name)))}),o(p,{appearance:"primary",disabled:!_,onClick:()=>{const o=S.find((o=>o.name===_));o?.url?b.sendMessage(`#ss-link #${_}`).then((e=>{const t=new Date(Date.now()+2592e5);b.generateApiToken(t).then((t=>{const n=o.url.includes("?")?"&":"?",r=`${o.url}${n}token=${t}`;$(r);const i=h(e);M(i)}))})):b.sendMessage(`#ss-link #${_}`).then((o=>{const e=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;$(`${e}#/formaccept?id=${o}`);const t=h(o);M(t)}))},children:C("Skapa länk")}),y&&e(t,{children:[o("p",{className:w.generatedLinkTitle,children:C("Här är din genererade länk (du kan kopiera eller dela den):")}),o("div",{className:w.inputAndButton,children:o(d,{className:w.input,value:y,readOnly:!0,onFocus:o=>o.target.select()})}),o("br",{}),e("div",{className:w.inputAndButton,children:[o(p,{appearance:"primary",title:C("Kopiera länk"),icon:"CopyRegular",onClick:()=>{y&&(navigator.clipboard.writeText(y),B(!0),setTimeout((()=>{B(!1),$(void 0)}),2e3))},children:C("Kopiera")}),T&&o(p,{appearance:"primary",title:C("Dela länk"),icon:"ShareRegular",onClick:()=>{y&&(navigator.share({url:y}),setTimeout((()=>{$(void 0)}),2e3))},children:C("Dela")})]}),P&&o(c,{children:C("Länk kopierad!")})]})]})})})};export{w as default};
1
+ import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useEffect as r}from"react";import{makeStyles as i,useId as a,Dropdown as s,Option as m}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as l}from"../components/Title.js";import"../components/Spinner.js";import{Label as c}from"../components/Label.js";import{Input as d}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import u from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as h}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import k from"../components/Content.js";import{Page as g}from"../components/Page.js";import"./QrScan.js";import f from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const v=i({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}}),w=({state:i})=>{const w=v(),{service:b}=i,{t:C}=f(),[S,x]=u(i.context.selectedApp+"_forms",[]),[y,$]=n(),[L,M]=n(),[P,B]=n(!1),[_,A]=n(),D=a("form-dropdown");r((()=>{b.getForms().then((o=>{o.sort(((o,e)=>o.name.localeCompare(e.name))),x(o)}))}),[b,C,x]);const T=void 0!==navigator.share;return o(g,{children:o("div",{className:w.container,style:{backgroundImage:`url(${j("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e(k,{children:[o(l,{children:C("Skapa länk till formulär")}),o("p",{className:w.instructionParagraph,children:C("Instruktioner")}),e("ol",{className:w.orderedList,children:[o("li",{children:C("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),o("li",{children:C("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),o("li",{children:C("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),o("li",{children:C("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),o("li",{children:C("Kom ihåg att spara (skriva ner) koden")})]}),o("label",{id:D,className:w.instructionParagraph,children:C("Välj formulär")}),o(s,{"aria-labelledby":D,placeholder:"-",onOptionSelect:(o,e)=>A(e.optionValue),children:S.map((o=>e(m,{value:o.name,text:`${o.title} (${o.name})`,children:[`${o.title} (${o.name})`," "]},o.name)))}),o(p,{appearance:"primary",disabled:!_,onClick:()=>{const o=S.find((o=>o.name===_));o?.url?b.sendMessage(`#ss-link #${_}`).then((e=>{const t=new Date(Date.now()+2592e5);b.generateApiToken(t).then((t=>{const n=o.url.includes("?")?"&":"?",r=`${o.url}${n}token=${t}`;$(r);const i=h(e);M(i)}))})):b.sendMessage(`#ss-link #${_}`).then((o=>{const e=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;$(`${e}#/formaccept?id=${o}`);const t=h(o);M(t)}))},children:C("Skapa länk")}),y&&e(t,{children:[o("p",{className:w.generatedLinkTitle,children:C("Här är din genererade länk (du kan kopiera eller dela den):")}),o("div",{className:w.inputAndButton,children:o(d,{className:w.input,value:y,readOnly:!0,onFocus:o=>o.target.select()})}),o("br",{}),e("div",{className:w.inputAndButton,children:[o(p,{appearance:"primary",title:C("Kopiera länk"),icon:"CopyRegular",onClick:()=>{y&&(navigator.clipboard.writeText(y),B(!0),setTimeout((()=>{B(!1),$(void 0)}),2e3))},children:C("Kopiera")}),T&&o(p,{appearance:"primary",title:C("Dela länk"),icon:"ShareRegular",onClick:()=>{y&&(navigator.share({url:y}),setTimeout((()=>{$(void 0)}),2e3))},children:C("Dela")})]}),P&&o(c,{children:C("Länk kopierad!")})]})]})})})};export{w as default};
@@ -1 +1 @@
1
- {"version":3,"file":"HtmlViewer.d.ts","sourceRoot":"","sources":["../../../src/pages/HtmlViewer.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,UAAU,eAAe;IACvB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAyED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAoGzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"HtmlViewer.d.ts","sourceRoot":"","sources":["../../../src/pages/HtmlViewer.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,UAAU,eAAe;IACvB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAyED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyGzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t}from"react/jsx-runtime";import{Spinner as e}from"@fluentui/react-components";import{useState as s,useEffect as i}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as r}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import m from"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const p=({state:p})=>{const c=window.location.hash.match(/^#\/html\/(.+)$/),a=c?decodeURIComponent(c[1]):"",[l,d]=s(),[j,h]=s(!1),[u,g]=s(),{service:f}=p;return i((()=>{a&&f?(h(!0),g(void 0),f.getMessagesFast([a],void 0,1).then((o=>{if(0===o.length)return void g(`No messages found with tag: ${a}`);const t=o[0].content;d((o=>{const t=o.indexOf("```html");if(-1!==t){const e=o.indexOf("```",t+7);return-1===e?o.substring(t+7):o.substring(t+7,e)}const e=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const t of e){const e=o.match(t);if(e)return e[0]}if(o.includes("<html")||o.includes("<!DOCTYPE")||o.includes("<div")||o.includes("<p>")||o.includes("<span")){const t=["<!DOCTYPE","<html","<div","<body","<article","<section"];let e=-1;for(const s of t){const t=o.indexOf(s);-1!==t&&(-1===e||t<e)&&(e=t)}if(-1!==e){let t=o.substring(e);const s=["</html>","</body>","</div>"];for(const o of s){const e=t.lastIndexOf(o);if(-1!==e){t=t.substring(0,e+o.length);break}}return t}return o}return o})(t))})).catch((o=>{console.error("Error fetching message:",o),g(`Error fetching message: ${o.message||"Unknown error"}`)})).finally((()=>{h(!1)}))):g("No tag provided or service unavailable")}),[a,f]),j?o(r,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(e,{})})}):u?o(r,{hideHeader:!0,hideFooter:!0,children:t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[o(n,{children:u}),t(n,{children:["Tag: ",a]})]})}):l?o(m,{html:l,onDismiss:()=>window.history.back()}):o(r,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(n,{children:"No HTML content available"})})})};export{p as default};
1
+ import{jsx as o,jsxs as t}from"react/jsx-runtime";import{Spinner as e}from"@fluentui/react-components";import{useState as s,useEffect as i}from"react";import{useNavigate as n}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as r}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as m}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import p from"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const c=({state:c})=>{const a=window.location.hash.match(/^#\/html\/(.+)$/),l=a?decodeURIComponent(a[1]):"",d=n(),[j,h]=s(),[u,g]=s(!1),[f,v]=s(),{service:y}=c;return i((()=>{l&&y?(g(!0),v(void 0),y.getMessagesFast([l],void 0,1).then((o=>{if(0===o.length)return void v(`No messages found with tag: ${l}`);const t=o[0].content;h((o=>{const t=o.indexOf("```html");if(-1!==t){const e=o.indexOf("```",t+7);return-1===e?o.substring(t+7):o.substring(t+7,e)}const e=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const t of e){const e=o.match(t);if(e)return e[0]}if(o.includes("<html")||o.includes("<!DOCTYPE")||o.includes("<div")||o.includes("<p>")||o.includes("<span")){const t=["<!DOCTYPE","<html","<div","<body","<article","<section"];let e=-1;for(const s of t){const t=o.indexOf(s);-1!==t&&(-1===e||t<e)&&(e=t)}if(-1!==e){let t=o.substring(e);const s=["</html>","</body>","</div>"];for(const o of s){const e=t.lastIndexOf(o);if(-1!==e){t=t.substring(0,e+o.length);break}}return t}return o}return o})(t))})).catch((o=>{console.error("Error fetching message:",o),v(`Error fetching message: ${o.message||"Unknown error"}`)})).finally((()=>{g(!1)}))):v("No tag provided or service unavailable")}),[l,y]),u?o(m,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(e,{})})}):f?o(m,{hideHeader:!0,hideFooter:!0,children:t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[o(r,{children:f}),t(r,{children:["Tag: ",l]})]})}):j?o("div",{style:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:o(p,{html:j,onDismiss:()=>d(-1)})}):o(m,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(r,{children:"No HTML content available"})})})};export{c as default};
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t,Fragment as e}from"react/jsx-runtime";import i,{useState as n}from"react";import{makeStyles as r,Image as s,Input as m,mergeClasses as a}from"@fluentui/react-components";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as c}from"../components/Title.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import d from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import g from"../hooks/useAppStyles.js";const u=r({container:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",backgroundPosition:"calc(50% - 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",gap:"20px",padding:"0 20px"},button:{minWidth:"15rem"},input:{minWidth:"15rem",marginBottom:"10px"},image:{maxHeight:"200px"}}),h=({state:r})=>{const{loginWithRedirect:h,loginPasswordless:_}=r.auth,I=u(),f=g(),{t:E}=d(),[b,k]=n(""),[L,C]=n(!1),N=j("LOGIN_REDIRECT"),O=j("AUTH0_PASSWORDLESS_ENABLED");i.useEffect((()=>{N&&h()}),[N]);return o("div",N?{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E("Omdirigerar till inloggning...")})]}:{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[j("LOGIN_LOGO_URL")&&t(s,{src:j("LOGIN_LOGO_URL"),alt:j("INDEX_TITLE"),className:I.image}),!j("LOGIN_HIDE_WELCOME")&&t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E(j("LOGIN_WELCOME_TEXT")||"Logga in, eller registrera ett konto, för att komma igång.")}),o(e,O?{children:[t(m,{className:I.input,type:"email",placeholder:E("Ange din e-postadress"),value:b,onChange:o=>k(o.target.value),disabled:L}),t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:async()=>{if(b.trim()){C(!0);try{await _(b)}catch(o){console.error("Passwordless login failed:",o)}finally{C(!1)}}},disabled:!b.trim()||L,children:E(L?"Skickar...":"Skicka inloggningslänk")})]}:{children:[t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h(),children:E("Logga in")}),!j("HIDE_REGISTER_BUTTON")&&t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h({authorizationParams:{screen_hint:"signup"}}),children:E("Registrera")})]})]})};export{h as default};
1
+ import{jsxs as o,jsx as t,Fragment as e}from"react/jsx-runtime";import i,{useState as n}from"react";import{makeStyles as r,Image as s,Input as m,mergeClasses as a}from"@fluentui/react-components";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as c}from"../components/Title.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import d from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import g from"../hooks/useAppStyles.js";const u=r({container:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",backgroundPosition:"calc(50% - 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",gap:"20px",padding:"0 20px"},button:{minWidth:"15rem"},input:{minWidth:"15rem",marginBottom:"10px"},image:{maxHeight:"200px"}}),h=({state:r})=>{const{loginWithRedirect:h,loginPasswordless:_}=r.auth,I=u(),f=g(),{t:E}=d(),[b,k]=n(""),[L,C]=n(!1),N=j("LOGIN_REDIRECT"),O=j("AUTH0_PASSWORDLESS_ENABLED");i.useEffect((()=>{N&&h()}),[N]);return o("div",N?{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E("Omdirigerar till inloggning...")})]}:{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[j("LOGIN_LOGO_URL")&&t(s,{src:j("LOGIN_LOGO_URL"),alt:j("INDEX_TITLE"),className:I.image}),!j("LOGIN_HIDE_WELCOME")&&t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E(j("LOGIN_WELCOME_TEXT")||"Logga in, eller registrera ett konto, för att komma igång.")}),o(e,O?{children:[t(m,{className:I.input,type:"email",placeholder:E("Ange din e-postadress"),value:b,onChange:o=>k(o.target.value),disabled:L}),t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:async()=>{if(b.trim()){C(!0);try{await _(b)}catch(o){console.error("Passwordless login failed:",o)}finally{C(!1)}}},disabled:!b.trim()||L,children:E(L?"Skickar...":"Skicka inloggningslänk")})]}:{children:[t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h(),children:E("Logga in")}),!j("HIDE_REGISTER_BUTTON")&&t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h({authorizationParams:{screen_hint:"signup"}}),children:E("Registrera")})]})]})};export{h as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t}from"react/jsx-runtime";import{useRef as e,useState as n,useEffect as r}from"react";import{makeStyles as i,tokens as s}from"@fluentui/react-components";import a from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as m}from"../components/Title.js";import"../components/Spinner.js";import"../components/TextHeader.js";import c from"../components/TypingIndicator.js";import"../components/Dialog.js";import l from"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import d from"../hooks/useStateWithLocalStorage.js";import{CodicentService as u}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as g}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useChat as f}from"../hooks/useChat.js";import{useTemplateVariables as x}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const C=i({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",overflowY:"auto",marginBottom:"16px"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"},inputArea:{display:"flex",flexDirection:"column",justifyContent:"start",alignItems:"center",height:"100%",padding:"0 16px"},promptButtons:{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"start",alignItems:"center",gap:"8px",marginTop:"8px",marginLeft:"6px",marginRight:"2px",marginBottom:"12px"},answerArea:{width:"100%",marginLeft:"12px",marginRight:"12px",padding:"12px",borderRadius:"16px",marginBottom:"24px"},title:{marginLeft:"12px",padding:"16px"}}),A=({state:i})=>{const A=C(),{t:w}=h(),{messages:T,isBotTyping:_,handleSend:v,newChat:S}=f(i.stateMachine),N=e(null),{service:b}=i;g("CHAT_BOT_BACKGROUND_COLOR")||s.colorBrandBackground2;const[k,O]=d(i.context.selectedApp+"_searchprompts",["Leta information","Vad kan jag göra?","Sök supportställe"]),[y,I]=n(),[B,M]=n(null),[P,D]=n(!1);x(b.uploadFile);r((()=>{_&&D(!0)}),[_]),r((()=>{S();const o=g("APP_CONFIG"),t=g("APP_BUTTONS");t?o.apps[t].questions&&O(o.apps[t].questions.map((o=>w(o)))):console.error("APP_BUTTONS is not defined in the configuration."),void 0!==g("ANONYMOUS_CODICENT")&&void 0!==g("ANONYMOUS_TOKEN")?(b.codicent=g("ANONYMOUS_CODICENT"),b.setToken(g("ANONYMOUS_TOKEN"))):console.error("Anonymous Codicent or Token is not defined in the configuration.")}),[S,b,O,w]),r((()=>{setTimeout((()=>{N.current?.scrollIntoView({behavior:"smooth"})}),10)}),[T]);const F=o=>{I(o),v(o)};return r((()=>{const o=T.filter((o=>"bot"===o.sender));let t=o.length>0?o[o.length-1]:null;M({...t,createdAt:new Date}),t&&D(!1)}),[T]),o(j,{hideHeader:!0,hideFooter:!0,children:t("div",{id:"search-container",className:A.chatContainer,style:{backgroundImage:`url(${g("CHAT_BACKGROUND_IMAGE_URL")})`},children:[o("div",{className:A.title,children:o(m,{children:w(g("APP_SEARCH_TITLE")||"Frågor")})}),t("div",{className:A.inputArea,children:[o(l,{noMemory:!0,defaultText:y,codicent:i.context.selectedApp,disableSend:_,onSend:F,rows:3,getImageUrl:u.getImageUrl,getFileInfo:o=>b.getFileInfo(o),selectAll:!0}),o("div",{className:A.promptButtons,children:k.length>0&&k.map(((t,e)=>o(p,{onClick:()=>F(t),size:"large",appearance:"primary",shape:"circular",children:t},`search-prompt-${e}`)))}),P&&o(c,{}),B&&!_&&t("div",{className:A.answerArea,children:[o("div",{ref:N}),o(a,{content:B.content})]})]})]})})};export{A as default};
1
+ import{jsx as o,jsxs as t}from"react/jsx-runtime";import{useRef as e,useState as n,useEffect as r}from"react";import{makeStyles as i,tokens as s}from"@fluentui/react-components";import a from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as m}from"../components/Title.js";import"../components/Spinner.js";import"../components/TextHeader.js";import c from"../components/TypingIndicator.js";import"../components/Dialog.js";import l from"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import d from"../hooks/useStateWithLocalStorage.js";import{CodicentService as u}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as g}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useChat as f}from"../hooks/useChat.js";import{useTemplateVariables as x}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const C=i({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",overflowY:"auto",marginBottom:"16px"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"},inputArea:{display:"flex",flexDirection:"column",justifyContent:"start",alignItems:"center",height:"100%",padding:"0 16px"},promptButtons:{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"start",alignItems:"center",gap:"8px",marginTop:"8px",marginLeft:"6px",marginRight:"2px",marginBottom:"12px"},answerArea:{width:"100%",marginLeft:"12px",marginRight:"12px",padding:"12px",borderRadius:"16px",marginBottom:"24px"},title:{marginLeft:"12px",padding:"16px"}}),A=({state:i})=>{const A=C(),{t:w}=h(),{messages:T,isBotTyping:_,handleSend:v,newChat:S}=f(i.stateMachine),N=e(null),{service:b}=i;g("CHAT_BOT_BACKGROUND_COLOR")||s.colorBrandBackground2;const[k,O]=d(i.context.selectedApp+"_searchprompts",["Leta information","Vad kan jag göra?","Sök supportställe"]),[y,I]=n(),[B,M]=n(null),[P,D]=n(!1);x(b.uploadFile);r((()=>{_&&D(!0)}),[_]),r((()=>{S();const o=g("APP_CONFIG"),t=g("APP_BUTTONS");t?o.apps[t].questions&&O(o.apps[t].questions.map((o=>w(o)))):console.error("APP_BUTTONS is not defined in the configuration."),void 0!==g("ANONYMOUS_CODICENT")&&void 0!==g("ANONYMOUS_TOKEN")?(b.codicent=g("ANONYMOUS_CODICENT"),b.setToken(g("ANONYMOUS_TOKEN"))):console.error("Anonymous Codicent or Token is not defined in the configuration.")}),[S,b,O,w]),r((()=>{setTimeout((()=>{N.current?.scrollIntoView({behavior:"smooth"})}),10)}),[T]);const F=o=>{I(o),v(o)};return r((()=>{const o=T.filter((o=>"bot"===o.sender));let t=o.length>0?o[o.length-1]:null;M({...t,createdAt:new Date}),t&&D(!1)}),[T]),o(j,{hideHeader:!0,hideFooter:!0,children:t("div",{id:"search-container",className:A.chatContainer,style:{backgroundImage:`url(${g("CHAT_BACKGROUND_IMAGE_URL")})`},children:[o("div",{className:A.title,children:o(m,{children:w(g("APP_SEARCH_TITLE")||"Frågor")})}),t("div",{className:A.inputArea,children:[o(l,{noMemory:!0,defaultText:y,codicent:i.context.selectedApp,disableSend:_,onSend:F,rows:3,getImageUrl:u.getImageUrl,getFileInfo:o=>b.getFileInfo(o),selectAll:!0}),o("div",{className:A.promptButtons,children:k.length>0&&k.map(((t,e)=>o(p,{onClick:()=>F(t),size:"large",appearance:"primary",shape:"circular",children:t},`search-prompt-${e}`)))}),P&&o(c,{}),B&&!_&&t("div",{className:A.answerArea,children:[o("div",{ref:N}),o(a,{content:B.content})]})]})]})})};export{A as default};
@@ -84,7 +84,7 @@ export declare class CodicentService {
84
84
  title: string;
85
85
  content: string;
86
86
  }[]>;
87
- getAppPrompts: () => Promise<{
87
+ getAppPrompts: (codicent?: string) => Promise<{
88
88
  title: string;
89
89
  prompt: string;
90
90
  }[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{loadStripe as t}from"../node_modules/@stripe/stripe-js/dist/index.js";import e from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"react/jsx-runtime";import"react";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";var o;let n="https://codicent.com/",a="https://pubsub.codicent.com/hub",s="-";const i=()=>"undefined"!=typeof window&&void 0!==window.Codicent&&"function"==typeof window.Codicent.init,r=t=>{t&&"string"==typeof t?(n=t.endsWith("/")?t:t+"/",i()&&window.Codicent.init({token:s,baseUrl:n,signalRHost:a})):console.warn("Invalid base URL provided, using default")},c=t=>{t&&"string"==typeof t&&(a=t,i()&&window.Codicent.init({token:s,baseUrl:n,signalRHost:a}))},h=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:s,baseUrl:n,signalRHost:a}),!0);let d=h();if(!d){const t=setInterval((()=>{d=h(),d&&clearInterval(t)}),100)}class l{constructor(o){this.createDataMessage=async(t,e,o)=>await window.Codicent.data.create({codicent:o||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,o,n,a,s,i,r)=>await window.Codicent.data.read({codicent:o||this.codicent,tag:t,search:e,start:n,length:a,afterTimestamp:s,beforeTimestamp:i,dataFilters:r}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.getLeafDataMessage=async(t,e)=>{const o=e||this.codicent;try{const e=await fetch(`${this.options.API_BASE_URL}app/GetLeafMessageByOriginalMessageId?project=${encodeURIComponent(o)}&originalMessageId=${encodeURIComponent(t)}`,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!e.ok)return null;const n=await e.json();if(!n||!n.content)return null;const a=n.content.indexOf("{");if(-1===a)return null;const s=JSON.parse(n.content.slice(a));return{id:n.id,fileId:n.fileId??null,fileIds:n.fileIds??[],data:s,createdAt:n.createdAt,tags:n.tags??[],mentions:n.mentions??[]}}catch{return null}},this.updateDataMessage=async(t,e,o)=>await window.Codicent.data.update({id:t,data:e,codicent:o||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getSchema=async(t,e)=>{try{const e=await fetch(`${this.options.API_BASE_URL}api/GetSchema/${t}`,{method:"GET",headers:{Authorization:`Bearer ${this.options.APP_LOG_TOKEN}`,"Content-Type":"application/json"}});if(!e.ok){if(404===e.status)return null;throw new Error(`Failed to fetch schema: ${e.statusText}`)}const o=await e.text();return JSON.parse(o)}catch(e){return console.error(`Error fetching schema for tag ${t}:`,e),null}},this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>[...(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const o=new e(t.content).content.split("\n"),n=o[0],a=o.slice(1).join("\n");return{id:t.id,title:n,content:a}})),...(await window.Codicent.getDataMessages({tags:["skill"],codicent:this.codicent})).map((t=>t.data)).filter((t=>t.name&&t.title)).map((t=>({id:t.name,title:t.title,content:t.content||t.description||""})))],this.getAppPrompts=async()=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const o=await fetch(`${n}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);return await o.text()},this.sendMessage=(t,e,o)=>window.Codicent.postMessage({message:`@${o||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,o)=>window.Codicent.getChatReply4({message:t,codicent:o||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,o=100,a=void 0,s,i=0)=>{const r=await this.request(`${n}app/AppGetMessages`,"POST",{headers:[["Authorization",`Bearer ${this.getToken()}`],["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:o})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),a){const t=await this.getPublicFlow(a);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,o=10)=>{let n=[];const a=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:o});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(a)).forEach((t=>{n=n.concat(t)})),e)try{const t=await this.getPublicFlow(e);n=n.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return n=n.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id)))),n.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),n},this.registerUser=async(t,e,o,s)=>{const i=await fetch(`${n}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!i.ok)return"";const r=await i.text();return window.Codicent.init({token:r,baseUrl:n,signalRHost:a}),r},this.loginUser=async(t,e)=>{try{const o=await fetch(`${n}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const a=await o.text();return this.setToken(a),a}catch(t){return console.warn("Error logging in user:",t),""}},this.loginMicrosoftUser=async(t,e)=>{try{const o=await fetch(`${n}app/LoginMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const a=await o.text();return this.setToken(a),a}catch(t){return console.warn("Error logging in Microsoft user:",t),""}},this.registerMicrosoftUser=async(t,e,o,a)=>{const s=await fetch(`${n}app/RegisterMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${a}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!s.ok)return"";return await s.text()},this.nicknameExists=async t=>{const e=await fetch(`${n}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await fetch(`${n}app/AppGetApps`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=await t.json();return e.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))))}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const o=await fetch(`${n}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText||"Failed to add follower!"}`);return await o.json()},this.cloneProject=async(t,e)=>{const o=await fetch(`${n}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);let a=await o.json();if(a){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(a=!1)}catch{a=!1}if(a){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(a=!1)}catch{a=!1}}}return a},this.getNickname=async()=>{try{const t=s.split(".")[1],e=atob(t),o=JSON.parse(e),a=o.sub||o.userId,i=await fetch(`${n}app/GetNickname?userId=${a}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),o=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==o&&(console.log("updating instructions",o),await window.Codicent.postMessage({message:o,type:"text",parentId:e[0].id})):(console.log("new instructions",o),await window.Codicent.postMessage({message:o,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const o=await fetch(`${n}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);const a=await o.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=a;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:o,picture:a})=>{const s=await fetch(`${n}app/AddOrUpdateUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({nickname:t,email:e,name:o,picture:a,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const o=await fetch(`${n}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`requestInvite() => ${o.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const o=await fetch(`${n}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`updateMembersAccess() => ${o.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const o=await fetch(`${n}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.json()},this.setToken=t=>{s=t,s&&window.Codicent.init({token:s,baseUrl:n,signalRHost:a})},this.getToken=()=>s,this.checkPurchaseStatus=async()=>{const t=await fetch(`${n}payments/GetPaymentStatus`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await fetch(`${n}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`],["Cache-Control","no-cache, no-store, must-revalidate"],["Pragma","no-cache"],["Expires","0"]]});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=this.options.STRIPE_SOURCE,o=this.options.STRIPE_TRIAL_PERIOD_DAYS,a={priceId:t,successUrl:window.location.href,cancelUrl:window.location.href};e&&(a.source=e),o&&o>0&&(a.trialPeriodDays=o);const s=await fetch(`${n}payments/CreateCheckoutSession`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify(a)});if(!s.ok)throw new Error("Failed to create checkout session");const{id:i}=await s.json();return i},this.redirectToCheckout=async e=>{const o=await t(this.options.STRIPE_PUBLIC_KEY);if(!o)throw new Error("Stripe failed to load");const n=await this.createCheckoutSession(e),{error:a}=await o.redirectToCheckout({sessionId:n});if(a)throw new Error(a.message)},this.getChatHistory=async t=>{const e=await fetch(`${n}api/GetMessageHistory?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get chat history");let o=await e.json();return o=o.filter((t=>!(t.content.includes("#function_result")||t.content.includes("#finish_reason_function_call")||t.content.includes("#function_results_batch")||t.content.includes("#finish_reason_tool_calls_batch")))),o},this.getPublicFlow=async t=>{const e=await fetch(`${n}app/GetPublicFlow?codicent=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get public flow");const o=await e.json();return o.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o},this.getMessageContent=async t=>{const e=await fetch(`${n}app/GetMessageContent?id=${t}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const o={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},a=await fetch(`${n}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(o)});if(!a.ok)throw new Error(`${a.statusText||"Failed to post log message!"}`);return(await a.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],o=atob(t),n=JSON.parse(o).nickname;if(!await this.addFollower(e,n))throw new Error("Failed to add follower: "+n)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.request(`${n}app/GetForms?codicent=${this.codicent}`,"GET",{headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await t.json()},this.getFormById=async t=>{const e=await fetch(`${n}app/GetFormById?id=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await e.json()},this.getTodoStatus=async t=>{const e=await fetch(`${n}app/GetTodoStatus?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const o=await fetch(`${n}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)return console.warn(`updateTodoStatus() => ${o.statusText}`),!1;return await o.json()},this.codicent="",this.options=o,r(o.API_BASE_URL),o.PUBSUB_URL&&c(o.PUBSUB_URL)}async request(t,e,o={}){const n={};o.headers&&o.headers.forEach((([t,e])=>{n[t]=e}));const a=await fetch(t,{...o,method:e,headers:n});if(!a.ok)throw 401===a.status&&this.handleUnauthorized(),new Error(`${a.statusText}`);return a}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const o=`${n}realtime/session?voice=${t}&provider=${e}`,a=await fetch(o,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!a.ok)throw new Error(`Failed to fetch session token: ${a.statusText}`);const s=await a.json(),i=s.client_secret?.value??s.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${n}realtime/config?provider=${t}`,o=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${this.getToken()}`}});return o.ok?await o.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}o=l,l.getImageUrl=(t,e)=>`${n}app/GetImage?fileId=${t}&width=${e}`,l.getFileUrl=(t,e)=>`${n}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,l.downloadFile=async t=>{fetch(o.getFileUrl(t.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((e=>{const o=window.URL.createObjectURL(e),n=document.createElement("a");n.style.display="none",n.href=o,n.download=t.filename,document.body.appendChild(n),n.click(),window.URL.revokeObjectURL(o)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},l.getMiniChatReplyOld=async(t,e="codicent-mini",o)=>{let a={project:e,message:t};o&&(a.messageId=o);const i=await fetch(`${n}app/GetAi2ChatReply`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify(a)});if(!i.ok)return void i.status;return(await i.json()).content.replace("@codicent-mini","").trim()},l.getMiniChatReply=async(t,e="codicent-mini",o,a=3e5,i=2e3,r)=>{const c={project:e,message:t};let h;o&&(c.messageId=o),r&&(c.previousResponseId=r);try{const t=await fetch(`${n}app/StartAi2ChatAsync`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify(c)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(h=(await t.json()).promptMessageId,!h)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const d=Date.now();for(;Date.now()-d<a;)try{const t=await fetch(`${n}app/GetAi2ChatReplyStatus?promptMessageId=${h}`,{method:"GET",headers:[["Authorization",`Bearer ${s}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,i)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const o=await t.json(),a=o.content??o.content??"";return{content:a.replace(`@${e}`,"").replace("@codicent-mini","").trim(),responseId:o.responseId??void 0}}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},l.getTranslations=async(t,e,o="codicent-mini")=>{if(!s||"-"===s)return{translation:t};const a=await fetch(`${n}app/GetTranslations`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${s}`},body:JSON.stringify({project:o,text:t,targetLanguage:e})});if(!a.ok)throw a.status,new Error(`Failed to get translations: ${a.statusText}`);return await a.json()};export{l as CodicentService,r as setBaseUrl,c as setSignalRHost};
1
+ import{loadStripe as t}from"../node_modules/@stripe/stripe-js/dist/index.js";import e from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"react/jsx-runtime";import"react";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";var o;let n="https://codicent.com/",a="https://pubsub.codicent.com/hub",s="-";const i=()=>"undefined"!=typeof window&&void 0!==window.Codicent&&"function"==typeof window.Codicent.init,r=t=>{t&&"string"==typeof t?(n=t.endsWith("/")?t:t+"/",i()&&window.Codicent.init({token:s,baseUrl:n,signalRHost:a})):console.warn("Invalid base URL provided, using default")},c=t=>{t&&"string"==typeof t&&(a=t,i()&&window.Codicent.init({token:s,baseUrl:n,signalRHost:a}))},h=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:s,baseUrl:n,signalRHost:a}),!0);let d=h();if(!d){const t=setInterval((()=>{d=h(),d&&clearInterval(t)}),100)}class l{constructor(o){this.createDataMessage=async(t,e,o)=>await window.Codicent.data.create({codicent:o||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,o,n,a,s,i,r)=>await window.Codicent.data.read({codicent:o||this.codicent,tag:t,search:e,start:n,length:a,afterTimestamp:s,beforeTimestamp:i,dataFilters:r}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.getLeafDataMessage=async(t,e)=>{const o=e||this.codicent;try{const e=await fetch(`${this.options.API_BASE_URL}app/GetLeafMessageByOriginalMessageId?project=${encodeURIComponent(o)}&originalMessageId=${encodeURIComponent(t)}`,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!e.ok)return null;const n=await e.json();if(!n||!n.content)return null;const a=n.content.indexOf("{");if(-1===a)return null;const s=JSON.parse(n.content.slice(a));return{id:n.id,fileId:n.fileId??null,fileIds:n.fileIds??[],data:s,createdAt:n.createdAt,tags:n.tags??[],mentions:n.mentions??[]}}catch{return null}},this.updateDataMessage=async(t,e,o)=>await window.Codicent.data.update({id:t,data:e,codicent:o||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getSchema=async(t,e)=>{try{const e=await fetch(`${this.options.API_BASE_URL}api/GetSchema/${t}`,{method:"GET",headers:{Authorization:`Bearer ${this.options.APP_LOG_TOKEN}`,"Content-Type":"application/json"}});if(!e.ok){if(404===e.status)return null;throw new Error(`Failed to fetch schema: ${e.statusText}`)}const o=await e.text();return JSON.parse(o)}catch(e){return console.error(`Error fetching schema for tag ${t}:`,e),null}},this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>[...(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const o=new e(t.content).content.split("\n"),n=o[0],a=o.slice(1).join("\n");return{id:t.id,title:n,content:a}})),...(await window.Codicent.getDataMessages({tags:["skill"],codicent:this.codicent})).map((t=>t.data)).filter((t=>t.name&&t.title)).map((t=>({id:t.name,title:t.title,content:t.content||t.description||""})))],this.getAppPrompts=async t=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:t||this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const o=await fetch(`${n}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);return await o.text()},this.sendMessage=(t,e,o)=>window.Codicent.postMessage({message:`@${o||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,o)=>window.Codicent.getChatReply4({message:t,codicent:o||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,o=100,a=void 0,s,i=0)=>{const r=await this.request(`${n}app/AppGetMessages`,"POST",{headers:[["Authorization",`Bearer ${this.getToken()}`],["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:o})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),a){const t=await this.getPublicFlow(a);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,o=10)=>{let n=[];const a=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:o});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(a)).forEach((t=>{n=n.concat(t)})),e)try{const t=await this.getPublicFlow(e);n=n.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return n=n.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id)))),n.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),n},this.registerUser=async(t,e,o,s)=>{const i=await fetch(`${n}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!i.ok)return"";const r=await i.text();return window.Codicent.init({token:r,baseUrl:n,signalRHost:a}),r},this.loginUser=async(t,e)=>{try{const o=await fetch(`${n}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const a=await o.text();return this.setToken(a),a}catch(t){return console.warn("Error logging in user:",t),""}},this.loginMicrosoftUser=async(t,e)=>{try{const o=await fetch(`${n}app/LoginMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const a=await o.text();return this.setToken(a),a}catch(t){return console.warn("Error logging in Microsoft user:",t),""}},this.registerMicrosoftUser=async(t,e,o,a)=>{const s=await fetch(`${n}app/RegisterMicrosoftUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${a}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!s.ok)return"";return await s.text()},this.nicknameExists=async t=>{const e=await fetch(`${n}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await fetch(`${n}app/AppGetApps`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=await t.json();return e.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))))}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const o=await fetch(`${n}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText||"Failed to add follower!"}`);return await o.json()},this.cloneProject=async(t,e)=>{const o=await fetch(`${n}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);let a=await o.json();if(a){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(a=!1)}catch{a=!1}if(a){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(a=!1)}catch{a=!1}}}return a},this.getNickname=async()=>{try{const t=s.split(".")[1],e=atob(t),o=JSON.parse(e),a=o.sub||o.userId,i=await fetch(`${n}app/GetNickname?userId=${a}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),o=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==o&&(console.log("updating instructions",o),await window.Codicent.postMessage({message:o,type:"text",parentId:e[0].id})):(console.log("new instructions",o),await window.Codicent.postMessage({message:o,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const o=await fetch(`${n}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);const a=await o.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=a;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:o,picture:a})=>{const s=await fetch(`${n}app/AddOrUpdateUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({nickname:t,email:e,name:o,picture:a,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const o=await fetch(`${n}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`requestInvite() => ${o.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const o=await fetch(`${n}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`updateMembersAccess() => ${o.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const o=await fetch(`${n}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.json()},this.setToken=t=>{s=t,s&&window.Codicent.init({token:s,baseUrl:n,signalRHost:a})},this.getToken=()=>s,this.checkPurchaseStatus=async()=>{const t=await fetch(`${n}payments/GetPaymentStatus`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await fetch(`${n}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`],["Cache-Control","no-cache, no-store, must-revalidate"],["Pragma","no-cache"],["Expires","0"]]});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=this.options.STRIPE_SOURCE,o=this.options.STRIPE_TRIAL_PERIOD_DAYS,a={priceId:t,successUrl:window.location.href,cancelUrl:window.location.href};e&&(a.source=e),o&&o>0&&(a.trialPeriodDays=o);const s=await fetch(`${n}payments/CreateCheckoutSession`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify(a)});if(!s.ok)throw new Error("Failed to create checkout session");const{id:i}=await s.json();return i},this.redirectToCheckout=async e=>{const o=await t(this.options.STRIPE_PUBLIC_KEY);if(!o)throw new Error("Stripe failed to load");const n=await this.createCheckoutSession(e),{error:a}=await o.redirectToCheckout({sessionId:n});if(a)throw new Error(a.message)},this.getChatHistory=async t=>{const e=await fetch(`${n}api/GetMessageHistory?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get chat history");let o=await e.json();return o=o.filter((t=>!(t.content.includes("#function_result")||t.content.includes("#finish_reason_function_call")||t.content.includes("#function_results_batch")||t.content.includes("#finish_reason_tool_calls_batch")))),o},this.getPublicFlow=async t=>{const e=await fetch(`${n}app/GetPublicFlow?codicent=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get public flow");const o=await e.json();return o.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o},this.getMessageContent=async t=>{const e=await fetch(`${n}app/GetMessageContent?id=${t}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const o={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},a=await fetch(`${n}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(o)});if(!a.ok)throw new Error(`${a.statusText||"Failed to post log message!"}`);return(await a.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],o=atob(t),n=JSON.parse(o).nickname;if(!await this.addFollower(e,n))throw new Error("Failed to add follower: "+n)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.request(`${n}app/GetForms?codicent=${this.codicent}`,"GET",{headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await t.json()},this.getFormById=async t=>{const e=await fetch(`${n}app/GetFormById?id=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await e.json()},this.getTodoStatus=async t=>{const e=await fetch(`${n}app/GetTodoStatus?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const o=await fetch(`${n}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)return console.warn(`updateTodoStatus() => ${o.statusText}`),!1;return await o.json()},this.codicent="",this.options=o,r(o.API_BASE_URL),o.PUBSUB_URL&&c(o.PUBSUB_URL)}async request(t,e,o={}){const n={};o.headers&&o.headers.forEach((([t,e])=>{n[t]=e}));const a=await fetch(t,{...o,method:e,headers:n});if(!a.ok)throw 401===a.status&&this.handleUnauthorized(),new Error(`${a.statusText}`);return a}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const o=`${n}realtime/session?voice=${t}&provider=${e}`,a=await fetch(o,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!a.ok)throw new Error(`Failed to fetch session token: ${a.statusText}`);const s=await a.json(),i=s.client_secret?.value??s.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${n}realtime/config?provider=${t}`,o=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${this.getToken()}`}});return o.ok?await o.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}o=l,l.getImageUrl=(t,e)=>`${n}app/GetImage?fileId=${t}&width=${e}`,l.getFileUrl=(t,e)=>`${n}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,l.downloadFile=async t=>{fetch(o.getFileUrl(t.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((e=>{const o=window.URL.createObjectURL(e),n=document.createElement("a");n.style.display="none",n.href=o,n.download=t.filename,document.body.appendChild(n),n.click(),window.URL.revokeObjectURL(o)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},l.getMiniChatReplyOld=async(t,e="codicent-mini",o)=>{let a={project:e,message:t};o&&(a.messageId=o);const i=await fetch(`${n}app/GetAi2ChatReply`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify(a)});if(!i.ok)return void i.status;return(await i.json()).content.replace("@codicent-mini","").trim()},l.getMiniChatReply=async(t,e="codicent-mini",o,a=3e5,i=2e3,r)=>{const c={project:e,message:t};let h;o&&(c.messageId=o),r&&(c.previousResponseId=r);try{const t=await fetch(`${n}app/StartAi2ChatAsync`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${s}`]],body:JSON.stringify(c)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(h=(await t.json()).promptMessageId,!h)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const d=Date.now();for(;Date.now()-d<a;)try{const t=await fetch(`${n}app/GetAi2ChatReplyStatus?promptMessageId=${h}`,{method:"GET",headers:[["Authorization",`Bearer ${s}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,i)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const o=await t.json(),a=o.content??o.content??"";return{content:a.replace(`@${e}`,"").replace("@codicent-mini","").trim(),responseId:o.responseId??void 0}}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},l.getTranslations=async(t,e,o="codicent-mini")=>{if(!s||"-"===s)return{translation:t};const a=await fetch(`${n}app/GetTranslations`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${s}`},body:JSON.stringify({project:o,text:t,targetLanguage:e})});if(!a.ok)throw a.status,new Error(`Failed to get translations: ${a.statusText}`);return await a.json()};export{l as CodicentService,r as setBaseUrl,c as setSignalRHost};
package/dist/index.d.ts CHANGED
@@ -97,7 +97,7 @@ declare class CodicentService {
97
97
  title: string;
98
98
  content: string;
99
99
  }[]>;
100
- getAppPrompts: () => Promise<{
100
+ getAppPrompts: (codicent?: string) => Promise<{
101
101
  title: string;
102
102
  prompt: string;
103
103
  }[]>;
@@ -978,11 +978,15 @@ interface AiInputProps {
978
978
  }
979
979
  declare const AiInput: (props: AiInputProps) => react_jsx_runtime.JSX.Element;
980
980
 
981
- declare const SearchBox: ({ value, onChange, placeholder, }: {
981
+ interface SearchBoxProps {
982
982
  value: string;
983
983
  onChange: (newValue: string) => void;
984
984
  placeholder: string;
985
- }) => react_jsx_runtime.JSX.Element;
985
+ recentSearches?: string[];
986
+ onCommitSearch?: (value: string) => void;
987
+ onRemoveRecentSearch?: (value: string) => void;
988
+ }
989
+ declare const SearchBox: ({ value, onChange, placeholder, recentSearches, onCommitSearch, onRemoveRecentSearch }: SearchBoxProps) => react_jsx_runtime.JSX.Element;
986
990
 
987
991
  /** Action configuration for a column, similar to app button actions */
988
992
  interface ColumnAction {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codicent-app-sdk",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "description": "SDK for building AI-powered applications with Codicent",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",