codicent-app-sdk 0.7.2 → 0.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +556 -556
- package/dist/cjs/hooks/useRealtimeVoiceAI.d.ts +10 -0
- package/dist/cjs/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
- package/dist/cjs/hooks/useRealtimeVoiceAI.js +1 -1
- package/dist/cjs/hooks/useTools.d.ts.map +1 -1
- package/dist/cjs/hooks/useTools.js +1 -1
- package/dist/cjs/pages/CrmPage.d.ts.map +1 -1
- package/dist/cjs/pages/CrmPage.js +1 -1
- package/dist/cjs/pages/CrmPagePersistent.d.ts.map +1 -1
- package/dist/cjs/pages/CrmPagePersistent.js +1 -1
- package/dist/esm/hooks/useRealtimeVoiceAI.d.ts +10 -0
- package/dist/esm/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
- package/dist/esm/hooks/useRealtimeVoiceAI.js +1 -1
- package/dist/esm/hooks/useTools.d.ts.map +1 -1
- package/dist/esm/hooks/useTools.js +1 -1
- package/dist/esm/pages/CrmPage.d.ts.map +1 -1
- package/dist/esm/pages/CrmPage.js +1 -1
- package/dist/esm/pages/CrmPagePersistent.d.ts.map +1 -1
- package/dist/esm/pages/CrmPagePersistent.js +1 -1
- package/dist/index.d.ts +31 -21
- package/package.json +111 -105
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as i,useEffect as r,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Text as l,Spinner as c,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as j}from"@fluentui/react-icons";import{CodicentService as f}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"exceljs";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 A}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import C 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"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as M,useSearchParams as N}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 D from"../hooks/useToaster.js";import{l as I}from"../node_modules/lodash/lodash.js";const B=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...m.gap("16px"),...m.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...m.gap("16px"),...m.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",...m.gap("8px"),overflowY:"auto",...m.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...m.gap("8px"),overflowY:"auto",...m.padding("8px"),maxHeight:"300px"},historyCard:{...m.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:p.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...m.gap("4px")},historyDate:{fontSize:p.fontSizeBase200,color:p.colorNeutralForeground3},historyText:{fontSize:p.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:p.fontSizeBase400,fontWeight:p.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:p.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),T=({state:s,voice:m})=>{const p=B(),{t:T}=C(),U=M(),[P,E]=t(!1),F=n(null),_=n(null),$=n(null),[L]=t(null),[O,R]=t([]),{service:z}=s,[H,V]=N(),[W,G]=t(""),[J,Q]=t(void 0),Y=D(),[q,K]=t(void 0),[X,Z]=t("info"),[oo,eo]=t([]),[to,no]=t(!1),io=k(),ro=i((o=>{for(const e of o)z.getFileInfo(e).then((o=>{R((e=>[...e,o]))}))}),[z,R]),ao=i((o=>{const e=new FormData;e.append("file",o),z.uploadFile(o.name,e).then((o=>{ro([o])})).catch((()=>{Y.notify(T("Error"),T("Error uploading pasted image"),"")}))}),[z,ro,Y,T]),so=o=>{E(o)},mo=i((async()=>{no(!0);try{const o=await z.getMessages(["crm"]);eo(o)}catch(o){console.error("Error loading CRM messages:",o),Y.notify(T("Error"),T("Failed to load CRM messages"),"","error")}finally{no(!1)}}),[z,Y,T]);r((()=>{mo()}),[mo]),r((()=>{const o=H.get("text"),e=H.get("url");o&&(G(o),H.delete("text")),e&&(H.delete("url"),G(((o||"")+" "+e).trim())),V(H,{replace:!0})}),[H,V,G,z,ro]);const po=o=>{o=`${o=`#crm\n${o.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${L?" "+L:""}${O.length>0?"\n":""}${O.map((o=>`#file:${o.id}`)).join(" ")}`,z.sendMessage(o).then((()=>{Y.notify(T("Meddelande"),T("Meddelandet är sparat."),""),mo(),Q(""),K(void 0)}))},lo=i((async o=>{if(!o||o.length<10)return;K(T("Analyserar...")),Z("info");const e=await z.chat((o=>`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${o}`)(o));if(e){const o=new v(e.content);try{const e=JSON.parse(o.content);console.log("json",e);let t=0;for(const o in e)"true"===e[o]&&t++;K(T(4===t?"Allt är med":e.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{K("Error: "+o.content),Z("error")}}}),[z,T]),co=a((()=>I.debounce(lo,2e3)),[lo]);r((()=>()=>{co.cancel()}),[co]);const uo=o=>{const e=new Date,t=new Date(o),n=e.getTime()-t.getTime(),i=Math.floor(n/6e4),r=Math.floor(n/36e5),a=Math.floor(n/864e5);return i<1?T("Just now"):i<60?`${i} ${T("minutes ago")}`:r<24?`${r} ${T("hours ago")}`:a<7?`${a} ${T("days ago")}`:t.toLocaleDateString()},go=o=>{const e=o.split("\n").filter((o=>!o.startsWith("#")&&!o.startsWith("SALESPERSON:")&&o.trim().length>0)).join("\n");return e.substring(0,150)+(e.length>150?"...":"")},ho=()=>e("div",{className:io?p.historySectionMobile:p.historySection,children:[o(l,{className:p.historyTitle,children:T("Tidigare sparade")}),to?o("div",{className:p.emptyState,children:o(c,{size:"small"})}):0===oo.length?o("div",{className:p.emptyState,children:o(l,{children:T("Inga sparade meddelanden än")})}):oo.map((t=>o(d,{className:p.historyCard,onClick:()=>(o=>{const e=go(o.content);Q(e)})(t),children:e("div",{className:p.historyCardContent,children:[o(l,{className:p.historyDate,children:uo(t.createdAt)}),o(l,{className:p.historyText,children:go(t.content)})]})},t.id)))]});return o(A,{hideHeader:!0,children:e("div",{className:io?p.containerMobile:p.container,children:[!io&&ho(),e("div",{className:io?p.inputSectionMobile:p.inputSection,style:io?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&y("SHOW_VOICE_BUTTON")&&o("div",{className:p.voiceIcon,children:o(S,{voice:m})}),o("div",{className:p.backButton,children:o(u,{appearance:"subtle",icon:o(j,{}),onClick:()=>U(-1),children:T("Tillbaka")})}),o(x,{title:y("APP_SAVE_TITLE")?T(y("APP_SAVE_TITLE")):T("Spara")}),o(w,{defaultText:W,onSend:po,files:O,onFilesChange:R,isUploading:P,onUploadImage:()=>{_.current?.triggerUpload()},onUploadCamera:()=>{$.current?.triggerUpload()},getImageUrl:f.getImageUrl,hasLocation:!!L,disableSend:!0,rows:9,placeholder:T("Beskriv CRM-aktivitet här..."),onChange:o=>{o!==J&&(Q(o),o&&o.trim().length>0?co(o):(K(void 0),co.cancel()))},onImagePasted:ao}),q&&e("div",{className:p.review,children:[o("h3",{children:T("Analys")}),o(g,{intent:X,layout:"multiline",children:o(h,{children:T(q)})})]}),o(b,{ref:F,onFileUploaded:ro,onUploading:so,multiple:!0,codicentService:z}),o(b,{codicentService:z,ref:_,onFileUploaded:ro,onUploading:so,multiple:!0,accept:"image/*"}),o(b,{codicentService:z,ref:$,onFileUploaded:ro,onUploading:so,multiple:!0,accept:"image/*",capture:"environment"})]}),io&&ho()]})})};export{T as CrmPagePersistent,T as default};
|
|
1
|
+
import{jsxs as o,jsx as e}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as i,useEffect as r,useMemo as a}from"react";import{makeStyles as s,shorthands as l,tokens as p,Text as m,Button as c,Spinner as d,Card 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"exceljs";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 A 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"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as M,useSearchParams as N}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 B from"../hooks/useToaster.js";import{l as D}from"../node_modules/lodash/lodash.js";const I=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:p.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...l.gap("4px")},historyDate:{fontSize:p.fontSizeBase200,color:p.colorNeutralForeground3},historyText:{fontSize:p.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:p.fontSizeBase400,fontWeight:p.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:p.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),T=({state:s,voice:l})=>{const p=I(),{t:T}=A(),U=M(),[F,E]=t(!1),P=n(null),L=n(null),_=n(null),[$]=t(null),[z,R]=t([]),{service:O}=s,[H,V]=N(),[W,G]=t(""),[J,Y]=t(void 0),Q=B(),[q,K]=t(void 0),[X,Z]=t("info"),[oo,eo]=t([]),[to,no]=t(!1),io=k(),ro=i((o=>{for(const e of o)O.getFileInfo(e).then((o=>{R((e=>[...e,o]))}))}),[O,R]),ao=i((o=>{const e=new FormData;e.append("file",o),O.uploadFile(o.name,e).then((o=>{ro([o])})).catch((()=>{Q.notify(T("Error"),T("Error uploading pasted image"),"")}))}),[O,ro,Q,T]),so=o=>{E(o)},lo=i((async()=>{no(!0);try{const o=await O.getMessages(["crm"]);eo(o)}catch(o){console.error("Error loading CRM messages:",o),Q.notify(T("Error"),T("Failed to load CRM messages"),"","error")}finally{no(!1)}}),[O,Q,T]);r((()=>{lo()}),[lo]),r((()=>{const o=H.get("text"),e=H.get("url");o&&(G(o),H.delete("text")),e&&(H.delete("url"),G(((o||"")+" "+e).trim())),V(H,{replace:!0})}),[H,V,G,O,ro]);const po=o=>{o=`${o=`#crm\n${o.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${$?" "+$:""}${z.length>0?"\n":""}${z.map((o=>`#file:${o.id}`)).join(" ")}`,O.sendMessage(o).then((()=>{Q.notify(T("Meddelande"),T("Meddelandet är sparat."),""),lo(),Y(""),K(void 0)}))},mo=i((async o=>{if(!o||o.length<10)return;K(T("Analyserar...")),Z("info");const e=await O.chat((o=>`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${o}`)(o));if(e){const o=new v(e.content);try{const e=JSON.parse(o.content);console.log("json",e);let t=0;for(const o in e)"true"===e[o]&&t++;K(T(4===t?"Allt är med":e.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{K("Error: "+o.content),Z("error")}}}),[O,T]),co=a((()=>D.debounce(mo,2e3)),[mo]);r((()=>()=>{co.cancel()}),[co]);const uo=o=>{const e=new Date,t=new Date(o),n=e.getTime()-t.getTime(),i=Math.floor(n/6e4),r=Math.floor(n/36e5),a=Math.floor(n/864e5);return i<1?T("Just now"):i<60?`${i} ${T("minutes ago")}`:r<24?`${r} ${T("hours ago")}`:a<7?`${a} ${T("days ago")}`:t.toLocaleDateString()},go=o=>{const e=o.split("\n").filter((o=>!o.startsWith("#")&&!o.startsWith("SALESPERSON:")&&o.trim().length>0)).join("\n");return e.substring(0,150)+(e.length>150?"...":"")},ho=()=>o("div",{className:io?p.historySectionMobile:p.historySection,children:[e(m,{className:p.historyTitle,children:T("Tidigare sparade")}),to?e("div",{className:p.emptyState,children:e(d,{size:"small"})}):0===oo.length?e("div",{className:p.emptyState,children:e(m,{children:T("Inga sparade meddelanden än")})}):oo.map((t=>e(u,{className:p.historyCard,onClick:()=>(o=>{const e=go(o.content);Y(e)})(t),children:o("div",{className:p.historyCardContent,children:[e(m,{className:p.historyDate,children:uo(t.createdAt)}),e(m,{className:p.historyText,children:go(t.content)})]})},t.id)))]});return o(C,{hideHeader:!0,children:[o("div",{className:io?p.containerMobile:p.container,children:[!io&&ho(),o("div",{className:io?p.inputSectionMobile:p.inputSection,style:io?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[l&&y("SHOW_VOICE_BUTTON")&&e("div",{className:p.voiceIcon,children:e(S,{voice:l})}),e("div",{className:p.backButton,children:e(c,{appearance:"subtle",icon:e(f,{}),onClick:()=>U(-1),children:T("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?T(y("APP_SAVE_TITLE")):T("Spara")}),e(w,{defaultText:W,onSend:po,files:z,onFilesChange:R,isUploading:F,onUploadImage:()=>{L.current?.triggerUpload()},onUploadCamera:()=>{_.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!$,disableSend:!0,rows:9,placeholder:T("Beskriv CRM-aktivitet här..."),onChange:o=>{o!==J&&(Y(o),o&&o.trim().length>0?co(o):(K(void 0),co.cancel()))},onImagePasted:ao}),q&&o("div",{className:p.review,children:[e("h3",{children:T("Analys")}),e(g,{intent:X,layout:"multiline",children:e(h,{children:T(q)})})]}),e(b,{ref:P,onFileUploaded:ro,onUploading:so,multiple:!0,codicentService:O}),e(b,{codicentService:O,ref:L,onFileUploaded:ro,onUploading:so,multiple:!0,accept:"image/*"}),e(b,{codicentService:O,ref:_,onFileUploaded:ro,onUploading:so,multiple:!0,accept:"image/*",capture:"environment"})]}),io&&ho()]}),l?.toolCallLog&&l.toolCallLog.length>0&&o("div",{style:{padding:"8px 16px",background:"#1e1e2e",borderTop:"1px solid #444",maxHeight:220,overflowY:"auto"},children:[o("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:4},children:[e(m,{style:{color:"#aaa",fontSize:11,fontFamily:"monospace"},children:"Voice tool calls"}),e(c,{size:"small",appearance:"subtle",style:{color:"#aaa",fontSize:11},onClick:()=>l.clearToolCallLog?.(),children:"Clear"})]}),l.toolCallLog.map(((t,n)=>o("div",{style:{fontFamily:"monospace",fontSize:11,color:t.error?"#f87171":"#86efac",marginBottom:6,whiteSpace:"pre-wrap",wordBreak:"break-all"},children:[o("span",{style:{color:"#94a3b8"},children:[new Date(t.timestamp).toLocaleTimeString()," "]}),e("strong",{children:t.name})," → ",t.error?`ERROR: ${t.error}`:JSON.stringify(t.args,null,0).substring(0,300)]},n)))]})]})};export{T as CrmPagePersistent,T as default};
|
package/dist/index.d.ts
CHANGED
|
@@ -534,26 +534,26 @@ declare class AppStateMachine extends StateMachine {
|
|
|
534
534
|
}
|
|
535
535
|
declare const createAppStateMachine: (service: CodicentService, onStateChange: (state: string) => void) => AppStateMachine;
|
|
536
536
|
|
|
537
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
538
|
-
declare class WavRecorder {
|
|
539
|
-
constructor(options: { sampleRate: number });
|
|
540
|
-
begin(): Promise<void>;
|
|
541
|
-
end(): Promise<void>;
|
|
542
|
-
record(callback: (data: { mono: ArrayBuffer | Int16Array }) => void): Promise<void>;
|
|
543
|
-
pause(): Promise<void>;
|
|
544
|
-
getStatus(): string;
|
|
545
|
-
getFrequencies(type: string): { values: Float32Array };
|
|
546
|
-
recording: boolean;
|
|
547
|
-
static decode(audio: any, sampleRate: number, targetSampleRate: number): Promise<File>;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
declare class WavStreamPlayer {
|
|
551
|
-
constructor(options: { sampleRate: number });
|
|
552
|
-
connect(): Promise<void>;
|
|
553
|
-
interrupt(): Promise<{ trackId: string; offset: number } | undefined>;
|
|
554
|
-
add16BitPCM(data: any, trackId: string): void;
|
|
555
|
-
getFrequencies(type: string): { values: Float32Array };
|
|
556
|
-
analyser: any;
|
|
537
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
538
|
+
declare class WavRecorder {
|
|
539
|
+
constructor(options: { sampleRate: number });
|
|
540
|
+
begin(): Promise<void>;
|
|
541
|
+
end(): Promise<void>;
|
|
542
|
+
record(callback: (data: { mono: ArrayBuffer | Int16Array }) => void): Promise<void>;
|
|
543
|
+
pause(): Promise<void>;
|
|
544
|
+
getStatus(): string;
|
|
545
|
+
getFrequencies(type: string): { values: Float32Array };
|
|
546
|
+
recording: boolean;
|
|
547
|
+
static decode(audio: any, sampleRate: number, targetSampleRate: number): Promise<File>;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
declare class WavStreamPlayer {
|
|
551
|
+
constructor(options: { sampleRate: number });
|
|
552
|
+
connect(): Promise<void>;
|
|
553
|
+
interrupt(): Promise<{ trackId: string; offset: number } | undefined>;
|
|
554
|
+
add16BitPCM(data: any, trackId: string): void;
|
|
555
|
+
getFrequencies(type: string): { values: Float32Array };
|
|
556
|
+
analyser: any;
|
|
557
557
|
}
|
|
558
558
|
|
|
559
559
|
declare const isMobileDevice: () => boolean;
|
|
@@ -1215,6 +1215,14 @@ interface RealtimeEvent {
|
|
|
1215
1215
|
[key: string]: any;
|
|
1216
1216
|
};
|
|
1217
1217
|
}
|
|
1218
|
+
/** Single entry in the tool call debug log */
|
|
1219
|
+
interface ToolCallLogEntry {
|
|
1220
|
+
timestamp: string;
|
|
1221
|
+
name: string;
|
|
1222
|
+
args: Record<string, unknown>;
|
|
1223
|
+
result?: unknown;
|
|
1224
|
+
error?: string;
|
|
1225
|
+
}
|
|
1218
1226
|
interface RealtimeVoice {
|
|
1219
1227
|
items: ItemType[];
|
|
1220
1228
|
realtimeEvents: RealtimeEvent[];
|
|
@@ -1237,6 +1245,8 @@ interface RealtimeVoice {
|
|
|
1237
1245
|
setUsername: (username: string) => void;
|
|
1238
1246
|
updateInstructions: (instructions: string) => void;
|
|
1239
1247
|
setLanguage: (language: string) => void;
|
|
1248
|
+
toolCallLog: ToolCallLogEntry[];
|
|
1249
|
+
clearToolCallLog: () => void;
|
|
1240
1250
|
}
|
|
1241
1251
|
declare const useRealtimeVoiceAI: (codicentService: CodicentService, tools: {
|
|
1242
1252
|
definition: ToolDefinitionType;
|
|
@@ -2811,4 +2821,4 @@ interface CodicentApp {
|
|
|
2811
2821
|
*/
|
|
2812
2822
|
declare function createCodicentApp(config: CreateAppConfig): CodicentApp;
|
|
2813
2823
|
|
|
2814
|
-
export { AUDIT_CHECKBOX_OPTIONS, AiInput, AppButtonsConfig, AppConfig, AppConfigOptions, AppFrame, AppInfo, AppStateDefinition, AppStateMachine, AudioIcon, AudioRecorder, AudioRecorderState, AuditAnswer, AuditAnswerCell, AuditAnswerMode, AuditAnswerOption, AuditBulkExportDialog, AuditBulkUploadDialog, AuditCircularProgress, AuditConfig, AuditFilterBar, AuditFilterChips, AuditFilterState, AuditGroupsProgress, AuditHorizontalProgress, AuditManagerFilterState, AuditManagerStats, AuditPackage, AuditRequirement, AuditRequirementDialog, AuditRequirementDialogProps, AuditRequirementFieldMapping, AuditRequirementStatus, AuditRequirementsFilterState, AuditRole, AuditRoleCapabilities, AuditRoleIndicator, AuditRoleLabels, AuditSearchBar, AuditSortPreset, AuditSortPresets, AuditSummaryDashboard, AuditTagConfig, AuditTerminology, AuditTimeRemaining, AuditUnitExportDialog, AuditUnitFieldMapping, AuditUnitImportDialog, AuditUnitOption, AuditUnitStats, AuditUnitSwitcher, AuthStateOptions, BulkUploadDialog, Button, ButtonConfig, CacheEntry, CacheManager, CachedUserSession, Canvas, CanvasPageProps, Chat, ChatInput, ChatInstructions, ChatMessage, ChatProps, CodicentApp, CodicentAppState, CodicentMessage, CodicentService, CodicentServiceOptions, ColorPicker, ColumnAction, ColumnDefinition, CombinedPlaceholderDialog, Compose, CompoundButton, Content, CookieBanner, CookieBannerProps, CreateAppConfig, CrmPage, CrmPagePersistent, DEFAULT_AUDIT_VALIDITY_PERIOD_MONTHS, DataCacheEntry, DataMessage$1 as DataMessage, DataMessagePicker, DataMessagePickerProps, DataMessagePickerSelection, DataSchemas, DatePicker, Debug, ErrorBoundary, ExcelColumnDefinition, FileInfo$1 as FileInfo, FilePlaceholder, FileThumbnail, Footer, Form$1 as Form, FormAccept, FormInvite, Form as FormPage, GenericJsonRenderer, Header, Help, Home, HomeButtonStyles, HomePageProps, HtmlView, HtmlViewer, ImageViewer as ImageView, Input, ItemType, Label, LanguageSelector, ListConfig, ListDefinitions, ListPage, ListPageProps, _default as ListView, ListViewProps, Log, LogPageProps, LogTagDefinition, Login, Logout, Markdown, MemberInfo, Menu, MenuPageProps, Message$2 as Message, Content$1 as MessageContent, MessageInput, MessageItem, ModuleFlags, OfflineMessage, Page, Profile, Prompt, Purchase, QrCodeDialog, QrScan, QrScanner, RealtimeVoice, RecordModal, RecordModalProps, ResolvedAuditConfig, Sales, Schema, SchemaDefinition, SchemaEditor, SchemaItem, Search, SearchBox, Snap, SnapFooter, Spinner, StateContext, TemplateVariable, Text, TextHeader, Textarea, TimePicker, Title, Tool, ToolMergeStrategy, ToolsConfig, TranslationDictionary, TranslationResponse, Translations, TypingIndicator, UploadFile, UploadFileProps, UploadFileRef, UrlProcessor, UseAuditFiltersResult, UseAuditManagerDataParams, UseAuditManagerDataResult, UseAuditManagerFiltersResult, UseAuditRequirementsFiltersResult, UseAuditRoleCheckParams, UseAuditRoleCheckResult, UseAuditStateParams, UseAuditStateResult, UseAuthState, UseCodicentAppOptions, UserInfo, UserRole, VoiceIcon, VoiceIconProps, WavRecorder, WavStreamPlayer, buildAuditPackage, calcValidUntil, calculateAuditTimeRemaining, createAppStateMachine, createCodicentApp, dataCache, exportAuditPackageAsHtml, exportAuditPackageAsJson, exportToExcel, formatValidityPeriod, generateBrandVariants, getAuditComplianceRate, getAuditRoleCapabilities, getAuditUrgencyColor, getConfigValue, getEffectiveAnswerOptions, getGpsLocation, getTimeString, importAuditPackageFromHtml, importAuditPackageFromJson, initCodicentApp, isAnswerCompliant, isBffMode, isMobileDevice, log, parseValidityPeriod, reinitializeI18n, resolveAuditConfig, setBaseUrl, setBffMode, setSignalRHost, stateMachineCacheManager, useAppStyles, useAudioRecorder, useAuditFilters, useAuditManagerData, useAuditManagerFilters, useAuditRequirementsFilters, useAuditRoleCheck, useAuditState, useAuthState, useChat, useCodicentApp, useCodicentState, useDebugLogs, useLocalization, useObserveDataSchemas, useOnlineStatus, useRealtimeVoiceAI, useStateWithLocalStorage, useTemplateVariables, useToaster, useTools, useUserRoles, withWakeLock };
|
|
2824
|
+
export { AUDIT_CHECKBOX_OPTIONS, AiInput, AppButtonsConfig, AppConfig, AppConfigOptions, AppFrame, AppInfo, AppStateDefinition, AppStateMachine, AudioIcon, AudioRecorder, AudioRecorderState, AuditAnswer, AuditAnswerCell, AuditAnswerMode, AuditAnswerOption, AuditBulkExportDialog, AuditBulkUploadDialog, AuditCircularProgress, AuditConfig, AuditFilterBar, AuditFilterChips, AuditFilterState, AuditGroupsProgress, AuditHorizontalProgress, AuditManagerFilterState, AuditManagerStats, AuditPackage, AuditRequirement, AuditRequirementDialog, AuditRequirementDialogProps, AuditRequirementFieldMapping, AuditRequirementStatus, AuditRequirementsFilterState, AuditRole, AuditRoleCapabilities, AuditRoleIndicator, AuditRoleLabels, AuditSearchBar, AuditSortPreset, AuditSortPresets, AuditSummaryDashboard, AuditTagConfig, AuditTerminology, AuditTimeRemaining, AuditUnitExportDialog, AuditUnitFieldMapping, AuditUnitImportDialog, AuditUnitOption, AuditUnitStats, AuditUnitSwitcher, AuthStateOptions, BulkUploadDialog, Button, ButtonConfig, CacheEntry, CacheManager, CachedUserSession, Canvas, CanvasPageProps, Chat, ChatInput, ChatInstructions, ChatMessage, ChatProps, CodicentApp, CodicentAppState, CodicentMessage, CodicentService, CodicentServiceOptions, ColorPicker, ColumnAction, ColumnDefinition, CombinedPlaceholderDialog, Compose, CompoundButton, Content, CookieBanner, CookieBannerProps, CreateAppConfig, CrmPage, CrmPagePersistent, DEFAULT_AUDIT_VALIDITY_PERIOD_MONTHS, DataCacheEntry, DataMessage$1 as DataMessage, DataMessagePicker, DataMessagePickerProps, DataMessagePickerSelection, DataSchemas, DatePicker, Debug, ErrorBoundary, ExcelColumnDefinition, FileInfo$1 as FileInfo, FilePlaceholder, FileThumbnail, Footer, Form$1 as Form, FormAccept, FormInvite, Form as FormPage, GenericJsonRenderer, Header, Help, Home, HomeButtonStyles, HomePageProps, HtmlView, HtmlViewer, ImageViewer as ImageView, Input, ItemType, Label, LanguageSelector, ListConfig, ListDefinitions, ListPage, ListPageProps, _default as ListView, ListViewProps, Log, LogPageProps, LogTagDefinition, Login, Logout, Markdown, MemberInfo, Menu, MenuPageProps, Message$2 as Message, Content$1 as MessageContent, MessageInput, MessageItem, ModuleFlags, OfflineMessage, Page, Profile, Prompt, Purchase, QrCodeDialog, QrScan, QrScanner, RealtimeVoice, RecordModal, RecordModalProps, ResolvedAuditConfig, Sales, Schema, SchemaDefinition, SchemaEditor, SchemaItem, Search, SearchBox, Snap, SnapFooter, Spinner, StateContext, TemplateVariable, Text, TextHeader, Textarea, TimePicker, Title, Tool, ToolCallLogEntry, ToolMergeStrategy, ToolsConfig, TranslationDictionary, TranslationResponse, Translations, TypingIndicator, UploadFile, UploadFileProps, UploadFileRef, UrlProcessor, UseAuditFiltersResult, UseAuditManagerDataParams, UseAuditManagerDataResult, UseAuditManagerFiltersResult, UseAuditRequirementsFiltersResult, UseAuditRoleCheckParams, UseAuditRoleCheckResult, UseAuditStateParams, UseAuditStateResult, UseAuthState, UseCodicentAppOptions, UserInfo, UserRole, VoiceIcon, VoiceIconProps, WavRecorder, WavStreamPlayer, buildAuditPackage, calcValidUntil, calculateAuditTimeRemaining, createAppStateMachine, createCodicentApp, dataCache, exportAuditPackageAsHtml, exportAuditPackageAsJson, exportToExcel, formatValidityPeriod, generateBrandVariants, getAuditComplianceRate, getAuditRoleCapabilities, getAuditUrgencyColor, getConfigValue, getEffectiveAnswerOptions, getGpsLocation, getTimeString, importAuditPackageFromHtml, importAuditPackageFromJson, initCodicentApp, isAnswerCompliant, isBffMode, isMobileDevice, log, parseValidityPeriod, reinitializeI18n, resolveAuditConfig, setBaseUrl, setBffMode, setSignalRHost, stateMachineCacheManager, useAppStyles, useAudioRecorder, useAuditFilters, useAuditManagerData, useAuditManagerFilters, useAuditRequirementsFilters, useAuditRoleCheck, useAuditState, useAuthState, useChat, useCodicentApp, useCodicentState, useDebugLogs, useLocalization, useObserveDataSchemas, useOnlineStatus, useRealtimeVoiceAI, useStateWithLocalStorage, useTemplateVariables, useToaster, useTools, useUserRoles, withWakeLock };
|
package/package.json
CHANGED
|
@@ -1,105 +1,111 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "codicent-app-sdk",
|
|
3
|
-
"version": "0.7.
|
|
4
|
-
"description": "SDK for building AI-powered applications with Codicent",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/cjs/index.js",
|
|
7
|
-
"module": "dist/esm/index.js",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/esm/index.js",
|
|
11
|
-
"require": "./dist/cjs/index.js"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"types": "dist/index.d.ts",
|
|
15
|
-
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
],
|
|
18
|
-
"repository": {
|
|
19
|
-
"type": "git",
|
|
20
|
-
"url": "git+https://github.com/izaxon/codicent-app-sdk.git"
|
|
21
|
-
},
|
|
22
|
-
"keywords": [
|
|
23
|
-
"codicent",
|
|
24
|
-
"ai",
|
|
25
|
-
"sdk",
|
|
26
|
-
"react"
|
|
27
|
-
],
|
|
28
|
-
"author": "Codicent Inside AB",
|
|
29
|
-
"license": "MIT",
|
|
30
|
-
"bugs": {
|
|
31
|
-
"url": "https://github.com/izaxon/codicent-app-sdk/issues"
|
|
32
|
-
},
|
|
33
|
-
"homepage": "https://izaxon.github.io/codicent-app-sdk",
|
|
34
|
-
"scripts": {
|
|
35
|
-
"build": "rollup -c",
|
|
36
|
-
"dev": "rollup -c -w",
|
|
37
|
-
"test": "jest",
|
|
38
|
-
"smoke": "node scripts/smoke.mjs",
|
|
39
|
-
"prepare": "npm run build",
|
|
40
|
-
"predeploy": "npm run build && cp -r dist/* docs/",
|
|
41
|
-
"deploy": "gh-pages -d docs",
|
|
42
|
-
"npm": "npm publish --access public"
|
|
43
|
-
},
|
|
44
|
-
"peerDependencies": {
|
|
45
|
-
"@fluentui/react-components": "^9.60.0",
|
|
46
|
-
"exceljs": "^4.4.0",
|
|
47
|
-
"i18next": ">=23.0.0",
|
|
48
|
-
"mermaid": "^11.3.0",
|
|
49
|
-
"react": ">=16.8.0",
|
|
50
|
-
"react-dom": ">=16.8.0",
|
|
51
|
-
"react-i18next": ">=12.0.0",
|
|
52
|
-
"react-router-dom": "^6.27.0"
|
|
53
|
-
},
|
|
54
|
-
"dependencies": {
|
|
55
|
-
"jsqr": "^1.4.0",
|
|
56
|
-
"lodash": "^4.17.21",
|
|
57
|
-
"nosleep.js": "^0.12.0",
|
|
58
|
-
"react-json-editor-ajrm": "^2.5.14",
|
|
59
|
-
"remark-gfm": "^4.0.0"
|
|
60
|
-
},
|
|
61
|
-
"
|
|
62
|
-
"@
|
|
63
|
-
"@
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"@
|
|
69
|
-
"@
|
|
70
|
-
"@
|
|
71
|
-
"@
|
|
72
|
-
"@
|
|
73
|
-
"@
|
|
74
|
-
"@
|
|
75
|
-
"@
|
|
76
|
-
"@
|
|
77
|
-
"@
|
|
78
|
-
"@
|
|
79
|
-
"@
|
|
80
|
-
"@
|
|
81
|
-
"@
|
|
82
|
-
"@
|
|
83
|
-
"@
|
|
84
|
-
"@types/
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
|
|
105
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "codicent-app-sdk",
|
|
3
|
+
"version": "0.7.9",
|
|
4
|
+
"description": "SDK for building AI-powered applications with Codicent",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/esm/index.js",
|
|
11
|
+
"require": "./dist/cjs/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"types": "dist/index.d.ts",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/izaxon/codicent-app-sdk.git"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"codicent",
|
|
24
|
+
"ai",
|
|
25
|
+
"sdk",
|
|
26
|
+
"react"
|
|
27
|
+
],
|
|
28
|
+
"author": "Codicent Inside AB",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/izaxon/codicent-app-sdk/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://izaxon.github.io/codicent-app-sdk",
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "rollup -c",
|
|
36
|
+
"dev": "rollup -c -w",
|
|
37
|
+
"test": "jest",
|
|
38
|
+
"smoke": "node scripts/smoke.mjs",
|
|
39
|
+
"prepare": "npm run build",
|
|
40
|
+
"predeploy": "npm run build && cp -r dist/* docs/",
|
|
41
|
+
"deploy": "gh-pages -d docs",
|
|
42
|
+
"npm": "npm publish --access public"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"@fluentui/react-components": "^9.60.0",
|
|
46
|
+
"exceljs": "^4.4.0",
|
|
47
|
+
"i18next": ">=23.0.0",
|
|
48
|
+
"mermaid": "^11.3.0",
|
|
49
|
+
"react": ">=16.8.0",
|
|
50
|
+
"react-dom": ">=16.8.0",
|
|
51
|
+
"react-i18next": ">=12.0.0",
|
|
52
|
+
"react-router-dom": "^6.27.0"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"jsqr": "^1.4.0",
|
|
56
|
+
"lodash": "^4.17.21",
|
|
57
|
+
"nosleep.js": "^0.12.0",
|
|
58
|
+
"react-json-editor-ajrm": "^2.5.14",
|
|
59
|
+
"remark-gfm": "^4.0.0"
|
|
60
|
+
},
|
|
61
|
+
"overrides": {
|
|
62
|
+
"@babel/plugin-transform-modules-systemjs": "^7.29.4",
|
|
63
|
+
"@tootallnate/once": "^3.0.1",
|
|
64
|
+
"serialize-javascript": "^7.0.5",
|
|
65
|
+
"uuid": "^11.1.1"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@auth0/auth0-react": "^2.2.4",
|
|
69
|
+
"@babel/core": "^7.21.0",
|
|
70
|
+
"@babel/preset-env": "^7.20.2",
|
|
71
|
+
"@babel/preset-react": "^7.18.6",
|
|
72
|
+
"@babel/preset-typescript": "^7.21.0",
|
|
73
|
+
"@fluentui/react": "^8.123.0",
|
|
74
|
+
"@fluentui/react-datepicker-compat": "^0.6.3",
|
|
75
|
+
"@fluentui/react-icons": "^2.0.292",
|
|
76
|
+
"@fluentui/react-timepicker-compat": "^0.4.3",
|
|
77
|
+
"@openai/realtime-api-beta": "github:izaxon/openai-realtime-api-beta",
|
|
78
|
+
"@rollup/plugin-commonjs": "^24.0.1",
|
|
79
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
80
|
+
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
81
|
+
"@rollup/plugin-terser": "^0.4.0",
|
|
82
|
+
"@rollup/plugin-typescript": "^11.0.0",
|
|
83
|
+
"@stripe/stripe-js": "^5.2.0",
|
|
84
|
+
"@types/jest": "^29.4.0",
|
|
85
|
+
"@types/lodash": "^4.17.15",
|
|
86
|
+
"@types/node": "^18.14.1",
|
|
87
|
+
"@types/nosleep.js": "^0.9.0",
|
|
88
|
+
"@types/react": "^18.0.28",
|
|
89
|
+
"@types/react-dom": "^18.0.11",
|
|
90
|
+
"@types/react-json-editor-ajrm": "^2.5.6",
|
|
91
|
+
"exceljs": "^4.4.0",
|
|
92
|
+
"gh-pages": "^5.0.0",
|
|
93
|
+
"i18next": "^23.0.0",
|
|
94
|
+
"jest": "^29.4.3",
|
|
95
|
+
"jest-environment-jsdom": "^29.4.3",
|
|
96
|
+
"mermaid": "^11.3.0",
|
|
97
|
+
"react-i18next": "^15.6.0",
|
|
98
|
+
"react-markdown": "^9.0.1",
|
|
99
|
+
"rehype-raw": "^7.0.0",
|
|
100
|
+
"rehype-sanitize": "^6.0.0",
|
|
101
|
+
"remark-gfm": "^4.0.0",
|
|
102
|
+
"rollup": "^3.17.3",
|
|
103
|
+
"rollup-plugin-dts": "^5.2.0",
|
|
104
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
105
|
+
"statechart-lib": "^1.0.4",
|
|
106
|
+
"tinycolor2": "^1.6.0",
|
|
107
|
+
"ts-jest": "^29.0.5",
|
|
108
|
+
"typescript": "~5.6.2",
|
|
109
|
+
"typescript-eslint": "^8.10.0"
|
|
110
|
+
}
|
|
111
|
+
}
|