codicent-app-sdk 0.3.98 → 0.3.99
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 +7 -0
- package/dist/cjs/components/AiInput.js +1 -1
- package/dist/cjs/components/AudioIcon.js +1 -1
- package/dist/cjs/components/ChatInput.js +1 -1
- package/dist/cjs/components/ChatMessage.js +1 -1
- package/dist/cjs/components/CombinedPlaceholderDialog.js +1 -1
- package/dist/cjs/components/Footer.js +1 -1
- package/dist/cjs/components/Header.js +1 -1
- package/dist/cjs/components/HtmlView.js +1 -1
- package/dist/cjs/components/MessageInput.js +1 -1
- package/dist/cjs/components/MessageItem.js +1 -1
- package/dist/cjs/components/Profile.js +1 -1
- package/dist/cjs/components/Prompt.js +1 -1
- package/dist/cjs/components/SnapFooter.js +1 -1
- package/dist/cjs/components/TextHeader.js +1 -1
- package/dist/cjs/components/TypingIndicator.js +1 -1
- package/dist/cjs/components/UploadFile.js +1 -1
- package/dist/cjs/components/UrlProcessor.js +1 -1
- package/dist/cjs/components/VoiceIcon.js +1 -1
- package/dist/cjs/config/index.d.ts +8 -0
- package/dist/cjs/config/index.d.ts.map +1 -1
- package/dist/cjs/config/index.js +1 -1
- package/dist/cjs/hooks/useAuthState.js +1 -1
- package/dist/cjs/hooks/useChat.js +1 -1
- package/dist/cjs/hooks/useCodicentApp.js +1 -1
- package/dist/cjs/hooks/useCodicentState.js +1 -1
- package/dist/cjs/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
- package/dist/cjs/hooks/useRealtimeVoiceAI.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/api.js +1 -0
- package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/client.js +1 -0
- package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/conversation.js +1 -0
- package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/event_handler.js +1 -0
- package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/utils.js +1 -0
- package/dist/cjs/pages/AppFrame.js +1 -1
- package/dist/cjs/pages/Chat.js +1 -1
- package/dist/cjs/pages/Compose.js +1 -1
- package/dist/cjs/pages/CrmPage.js +1 -1
- package/dist/cjs/pages/CrmPagePersistent.js +1 -1
- package/dist/cjs/pages/FormAccept.js +1 -1
- package/dist/cjs/pages/FormInvite.js +1 -1
- package/dist/cjs/pages/HtmlViewer.js +1 -1
- package/dist/cjs/pages/ImageView.js +1 -1
- package/dist/cjs/pages/Login.js +1 -1
- package/dist/cjs/pages/Purchase.js +1 -1
- package/dist/cjs/pages/Sales.js +1 -1
- package/dist/cjs/pages/Search.js +1 -1
- package/dist/cjs/pages/Snap.js +1 -1
- package/dist/cjs/services/codicent.js +1 -1
- package/dist/cjs/utils/appState.d.ts +45 -0
- package/dist/cjs/utils/appState.d.ts.map +1 -1
- package/dist/cjs/utils/appState.js +1 -1
- package/dist/cjs/utils/cacheManager.d.ts +85 -0
- package/dist/cjs/utils/cacheManager.d.ts.map +1 -0
- package/dist/cjs/utils/cacheManager.js +1 -0
- package/dist/cjs/utils/index.d.ts +2 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/esm/components/AiInput.js +1 -1
- package/dist/esm/components/AudioIcon.js +1 -1
- package/dist/esm/components/ChatInput.js +1 -1
- package/dist/esm/components/ChatMessage.js +1 -1
- package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
- package/dist/esm/components/Footer.js +1 -1
- package/dist/esm/components/Header.js +1 -1
- package/dist/esm/components/HtmlView.js +1 -1
- package/dist/esm/components/MessageInput.js +1 -1
- package/dist/esm/components/MessageItem.js +1 -1
- package/dist/esm/components/Profile.js +1 -1
- package/dist/esm/components/Prompt.js +1 -1
- package/dist/esm/components/SnapFooter.js +1 -1
- package/dist/esm/components/TextHeader.js +1 -1
- package/dist/esm/components/TypingIndicator.js +1 -1
- package/dist/esm/components/UploadFile.js +1 -1
- package/dist/esm/components/UrlProcessor.js +1 -1
- package/dist/esm/components/VoiceIcon.js +1 -1
- package/dist/esm/config/index.d.ts +8 -0
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/hooks/useAuthState.js +1 -1
- package/dist/esm/hooks/useChat.js +1 -1
- package/dist/esm/hooks/useCodicentApp.js +1 -1
- package/dist/esm/hooks/useCodicentState.js +1 -1
- package/dist/esm/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
- package/dist/esm/hooks/useRealtimeVoiceAI.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/node_modules/@openai/realtime-api-beta/lib/api.js +1 -0
- package/dist/esm/node_modules/@openai/realtime-api-beta/lib/client.js +1 -0
- package/dist/esm/node_modules/@openai/realtime-api-beta/lib/conversation.js +1 -0
- package/dist/esm/node_modules/@openai/realtime-api-beta/lib/event_handler.js +1 -0
- package/dist/esm/node_modules/@openai/realtime-api-beta/lib/utils.js +1 -0
- package/dist/esm/pages/AppFrame.js +1 -1
- package/dist/esm/pages/Chat.js +1 -1
- package/dist/esm/pages/Compose.js +1 -1
- package/dist/esm/pages/CrmPage.js +1 -1
- package/dist/esm/pages/CrmPagePersistent.js +1 -1
- package/dist/esm/pages/FormAccept.js +1 -1
- package/dist/esm/pages/FormInvite.js +1 -1
- package/dist/esm/pages/HtmlViewer.js +1 -1
- package/dist/esm/pages/ImageView.js +1 -1
- package/dist/esm/pages/Login.js +1 -1
- package/dist/esm/pages/Purchase.js +1 -1
- package/dist/esm/pages/Sales.js +1 -1
- package/dist/esm/pages/Search.js +1 -1
- package/dist/esm/pages/Snap.js +1 -1
- package/dist/esm/services/codicent.js +1 -1
- package/dist/esm/utils/appState.d.ts +45 -0
- package/dist/esm/utils/appState.d.ts.map +1 -1
- package/dist/esm/utils/appState.js +1 -1
- package/dist/esm/utils/cacheManager.d.ts +85 -0
- package/dist/esm/utils/cacheManager.d.ts.map +1 -0
- package/dist/esm/utils/cacheManager.js +1 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/index.d.ts +139 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsxs as e,Fragment as o,jsx as t}from"react/jsx-runtime";import{useState as i}from"react";import{CombinedPlaceholderDialog as s}from"./CombinedPlaceholderDialog.js";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./ChatMessage.js";import"./Header.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.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"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";import"../stores/chatStore.js";import"../hooks/useLocalization.js";import{useTemplateVariables as r}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";const a=({service:a,children:p})=>{const[l,m]=i(!1),[n,j]=i([]),[c,g]=i([]),[d,h]=i(null),{extractTemplateVariables:u,extractFilePlaceholders:f,replaceTemplateVariables:b,replaceFilePlaceholders:w}=r(a.uploadFile);return e(o,{children:[p((async e=>{h(e);const o=f(e),t=u(e);0!==o.length||0!==t.length?(g(o),j(t),m(!0)):window.location.href=e})),t(s,{open:l,templateVariables:n,filePlaceholders:c,onTemplateVariablesChange:j,onFilePlaceholdersChange:g,onConfirm:async()=>{if(d)try{let e=d;if(c.length>0){c.filter((e=>e.fileId)).length!==c.length&&console.warn("Some file placeholders are missing fileIds:",c.filter((e=>!e.fileId)).map((e=>e.description))),e=w(e,c)}n.length>0&&(e=b(e,n)),m(!1),window.location.href=e}catch(e){console.error("Failed to process URL:",e)}finally{h(null)}},onCancel:()=>{m(!1),h(null),j([]),g([])},uploadFile:a.uploadFile})]})};export{a as UrlProcessor,a as default};
|
|
1
|
+
import{jsxs as e,Fragment as o,jsx as t}from"react/jsx-runtime";import{useState as i}from"react";import{CombinedPlaceholderDialog as s}from"./CombinedPlaceholderDialog.js";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./ChatMessage.js";import"./Header.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"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";import"../stores/chatStore.js";import"../hooks/useLocalization.js";import{useTemplateVariables as r}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";const a=({service:a,children:p})=>{const[l,m]=i(!1),[n,j]=i([]),[c,g]=i([]),[d,h]=i(null),{extractTemplateVariables:u,extractFilePlaceholders:f,replaceTemplateVariables:b,replaceFilePlaceholders:w}=r(a.uploadFile);return e(o,{children:[p((async e=>{h(e);const o=f(e),t=u(e);0!==o.length||0!==t.length?(g(o),j(t),m(!0)):window.location.href=e})),t(s,{open:l,templateVariables:n,filePlaceholders:c,onTemplateVariablesChange:j,onFilePlaceholdersChange:g,onConfirm:async()=>{if(d)try{let e=d;if(c.length>0){c.filter((e=>e.fileId)).length!==c.length&&console.warn("Some file placeholders are missing fileIds:",c.filter((e=>!e.fileId)).map((e=>e.description))),e=w(e,c)}n.length>0&&(e=b(e,n)),m(!1),window.location.href=e}catch(e){console.error("Failed to process URL:",e)}finally{h(null)}},onCancel:()=>{m(!1),h(null),j([]),g([])},uploadFile:a.uploadFile})]})};export{a as UrlProcessor,a as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o}from"react/jsx-runtime";import"react";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import s from"../utils/withWakeLock.js";import"../_virtual/index.js";import"../config/index.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"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";import"../stores/chatStore.js";import"../hooks/useLocalization.js";import t from"../hooks/useAppStyles.js";import{MicSparkle24Regular as i,MicSparkle24Filled as r}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-10.js";const e=s(r),p=({voice:s,disabled:r})=>{const{isConnected:p,connectConversation:
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import"react";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import s from"../utils/withWakeLock.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"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";import"../stores/chatStore.js";import"../hooks/useLocalization.js";import t from"../hooks/useAppStyles.js";import{MicSparkle24Regular as i,MicSparkle24Filled as r}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-10.js";const e=s(r),p=({voice:s,disabled:r})=>{const{isConnected:p,connectConversation:a,disconnectConversation:m}=s,{pointer:n}=t();return r?o(i,{}):p?o(e,{onClick:m,className:n}):o(i,{onClick:a,className:n})};export{p as default};
|
|
@@ -131,6 +131,14 @@ export interface AppConfigOptions {
|
|
|
131
131
|
HIDE_CHAT_ADD_FILE_BUTTON: boolean;
|
|
132
132
|
FORM_ACCEPT_MARKDOWN: undefined | string;
|
|
133
133
|
RESTART_AUDIO_ON_TAKE_PHOTO: boolean;
|
|
134
|
+
ENABLE_STATE_CACHE: boolean;
|
|
135
|
+
SESSION_CACHE_TTL: number;
|
|
136
|
+
USER_INFO_CACHE_TTL: number;
|
|
137
|
+
APPS_CACHE_TTL: number;
|
|
138
|
+
OPTIMISTIC_CACHE_LOAD: boolean;
|
|
139
|
+
VALIDATE_CACHE_IN_BACKGROUND: boolean;
|
|
140
|
+
SHOW_VALIDATION_INDICATOR: boolean;
|
|
141
|
+
CACHE_FAILURE_MODE: "strict" | "lenient";
|
|
134
142
|
}
|
|
135
143
|
export declare function getConfigValue<K extends keyof AppConfigOptions>(key: K): AppConfigOptions[K];
|
|
136
144
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/config/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import _ from"../node_modules/mermaid/dist/mermaid.core.js";class T{constructor(){this.CHAT_INSTRUCTIONS="",this.REALTIME_VOICE_INSTRUCTIONS="",this.apps={}}}const O={LOGIN_REDIRECT:!1,ABOUT_TEXT:"Codicent APP SDK",ANONYMOUS_CODICENT:void 0,ANONYMOUS_TOKEN:void 0,API_BASE_URL:"https://codicent.com/",APP_BUTTONS:void 0,APP_CHAT_TEXT_PLACEHOLDER:void 0,APP_CHAT_TITLE:void 0,APP_CONFIG:new T,APP_FOOTER_COLOR:void 0,APP_FOOTER_SELECTED_COLOR:void 0,APP_FOOTER_TEXT_COLOR:void 0,APP_HEADER_COLOR:void 0,APP_HEADER_ICON_URL:void 0,APP_HEADER_TEXT_COLOR:void 0,APP_ICON_URL:void 0,APP_LOG_CODICENT:"",APP_LOG_TOKEN:"",APP_LOGBOOK_TITLE:void 0,APP_MENU_TITLE:void 0,APP_NAME:void 0,APP_PREFIX:void 0,APP_SAVE_TITLE:void 0,APP_SEARCH_TITLE:void 0,APP_SLOGAN:void 0,APP_SPLASH_TEXT:void 0,APP_SPLASH_URL:void 0,APP_TEMPLATE:"",APP_TITLE:void 0,AUTH_REDIRECT_URL:void 0,AUTH0_AUDIENCE:"https://codicent.com/api",AUTH0_CLIENT_ID:"80STzWmmzN3Tgf76HgFRyv54keYmvnaw",AUTH0_DOMAIN:"auth.codicent.com",AUTH0_PASSWORDLESS_ENABLED:!1,AUTH0_PROVIDER_SCOPE:"read:current_user update:current_user_metadata openid profile email",AUTH0_SCOPE:"read:current_user",AUTH0_USER_DOMAIN:void 0,BUTTON_ACTIVE_COLOR:void 0,BUTTON_BACKGROUND_COLOR:void 0,BUTTON_BORDER_RADIUS:void 0,BUTTON_HOVER_COLOR:void 0,BUTTON_TAG:"app-button",BUTTON_TEXT_COLOR:void 0,CHAT_BACKGROUND_IMAGE_URL:void 0,CHAT_BOT_BACKGROUND_COLOR:void 0,CHAT_BOT_TEXT_COLOR:void 0,CHAT_INSTRUCTIONS:void 0,CHAT_USER_BACKGROUND_COLOR:void 0,CHAT_USER_TEXT_COLOR:void 0,CHAT_WELCOME:"Welcome",COMPOSE_BACKGROUND_IMAGE_URL:void 0,COMPOSE_HIDE_LOCATION:void 0,COMPOSE_SIMPLE_ATTACH_FILE:void 0,DEFAULT_LANGUAGE:"en",HIDE_CHAT_BUTTON:!1,HIDE_MENU_BUTTON:!1,HIDE_REGISTER_BUTTON:!1,HIDE_SAVE_BUTTON:!1,HOME_BACKGROUND_IMAGE_URL:void 0,INDEX_TITLE:void 0,LOGBOOK_TAG_DEFINITIONS:{},LOGBOOK_TAGS:"[]",MENU_BACKGROUND_IMAGE_URL:void 0,MESSAGE_HIDE_BAR:!1,MODULE_VOICE:!1,PUBLIC_FLOW_CODICENT:void 0,REALTIME_VOICE_API_KEY:"",REALTIME_VOICE_MODEL:"alloy",USE_REALTIME_SESSION_ENDPOINT:!0,REALTIME_SESSION_ENDPOINT:"/realtime/session",REALTIME_CONFIG_ENDPOINT:"/realtime/config",SEND_BUTTON_ROUND_BACKGROUND:!1,SHOW_CANVAS_BUTTON:!1,SHOW_CHAT_PROMPTS:!1,SHOW_HELP_BUTTON:!1,SHOW_LOGBOOK_BUTTON:!1,SHOW_MICROPHONE_BUTTON:!1,SHOW_SETTINGS_BUTTON:!1,SHOW_SNAP_BUTTON:!1,SHOW_VOICE_BUTTON:!1,STRIP_CUSTOMER_PORTAL:"",STRIPE_PRICE_ID:"",STRIPE_PUBLIC_KEY:"",SUBSCRIPTION_NEEDED:!1,THEME_WELCOME:void 0,USER_PREFIX:void 0,WELCOME_STATUS_PROMPT:"",SHOW_SEND_BUTTON_TEXT:!1,SHOW_SAVE_BUTTON_TEXT:!1,FORM_BACKGROUND_IMAGE_URL:void 0,AUTO_TRANSLATE:!0,FORCE_LANGUAGE:void 0,TRANSLATIONS:void 0,LOGIN_WELCOME_TEXT:void 0,LOGIN_HIDE_WELCOME:!1,LOGIN_LOGO_URL:void 0,HIDE_CHAT_ADD_FILE_BUTTON:!1,FORM_ACCEPT_MARKDOWN:void 0,RESTART_AUDIO_ON_TAKE_PHOTO:!1};const E=function(_){return new Proxy(_,{get:(_,T,O)=>Reflect.get(_,T,O)})}(O);function A(_){return E[_]}function
|
|
1
|
+
import _ from"../node_modules/mermaid/dist/mermaid.core.js";class T{constructor(){this.CHAT_INSTRUCTIONS="",this.REALTIME_VOICE_INSTRUCTIONS="",this.apps={}}}const O={LOGIN_REDIRECT:!1,ABOUT_TEXT:"Codicent APP SDK",ANONYMOUS_CODICENT:void 0,ANONYMOUS_TOKEN:void 0,API_BASE_URL:"https://codicent.com/",APP_BUTTONS:void 0,APP_CHAT_TEXT_PLACEHOLDER:void 0,APP_CHAT_TITLE:void 0,APP_CONFIG:new T,APP_FOOTER_COLOR:void 0,APP_FOOTER_SELECTED_COLOR:void 0,APP_FOOTER_TEXT_COLOR:void 0,APP_HEADER_COLOR:void 0,APP_HEADER_ICON_URL:void 0,APP_HEADER_TEXT_COLOR:void 0,APP_ICON_URL:void 0,APP_LOG_CODICENT:"",APP_LOG_TOKEN:"",APP_LOGBOOK_TITLE:void 0,APP_MENU_TITLE:void 0,APP_NAME:void 0,APP_PREFIX:void 0,APP_SAVE_TITLE:void 0,APP_SEARCH_TITLE:void 0,APP_SLOGAN:void 0,APP_SPLASH_TEXT:void 0,APP_SPLASH_URL:void 0,APP_TEMPLATE:"",APP_TITLE:void 0,AUTH_REDIRECT_URL:void 0,AUTH0_AUDIENCE:"https://codicent.com/api",AUTH0_CLIENT_ID:"80STzWmmzN3Tgf76HgFRyv54keYmvnaw",AUTH0_DOMAIN:"auth.codicent.com",AUTH0_PASSWORDLESS_ENABLED:!1,AUTH0_PROVIDER_SCOPE:"read:current_user update:current_user_metadata openid profile email",AUTH0_SCOPE:"read:current_user",AUTH0_USER_DOMAIN:void 0,BUTTON_ACTIVE_COLOR:void 0,BUTTON_BACKGROUND_COLOR:void 0,BUTTON_BORDER_RADIUS:void 0,BUTTON_HOVER_COLOR:void 0,BUTTON_TAG:"app-button",BUTTON_TEXT_COLOR:void 0,CHAT_BACKGROUND_IMAGE_URL:void 0,CHAT_BOT_BACKGROUND_COLOR:void 0,CHAT_BOT_TEXT_COLOR:void 0,CHAT_INSTRUCTIONS:void 0,CHAT_USER_BACKGROUND_COLOR:void 0,CHAT_USER_TEXT_COLOR:void 0,CHAT_WELCOME:"Welcome",COMPOSE_BACKGROUND_IMAGE_URL:void 0,COMPOSE_HIDE_LOCATION:void 0,COMPOSE_SIMPLE_ATTACH_FILE:void 0,DEFAULT_LANGUAGE:"en",HIDE_CHAT_BUTTON:!1,HIDE_MENU_BUTTON:!1,HIDE_REGISTER_BUTTON:!1,HIDE_SAVE_BUTTON:!1,HOME_BACKGROUND_IMAGE_URL:void 0,INDEX_TITLE:void 0,LOGBOOK_TAG_DEFINITIONS:{},LOGBOOK_TAGS:"[]",MENU_BACKGROUND_IMAGE_URL:void 0,MESSAGE_HIDE_BAR:!1,MODULE_VOICE:!1,PUBLIC_FLOW_CODICENT:void 0,REALTIME_VOICE_API_KEY:"",REALTIME_VOICE_MODEL:"alloy",USE_REALTIME_SESSION_ENDPOINT:!0,REALTIME_SESSION_ENDPOINT:"/realtime/session",REALTIME_CONFIG_ENDPOINT:"/realtime/config",SEND_BUTTON_ROUND_BACKGROUND:!1,SHOW_CANVAS_BUTTON:!1,SHOW_CHAT_PROMPTS:!1,SHOW_HELP_BUTTON:!1,SHOW_LOGBOOK_BUTTON:!1,SHOW_MICROPHONE_BUTTON:!1,SHOW_SETTINGS_BUTTON:!1,SHOW_SNAP_BUTTON:!1,SHOW_VOICE_BUTTON:!1,STRIP_CUSTOMER_PORTAL:"",STRIPE_PRICE_ID:"",STRIPE_PUBLIC_KEY:"",SUBSCRIPTION_NEEDED:!1,THEME_WELCOME:void 0,USER_PREFIX:void 0,WELCOME_STATUS_PROMPT:"",SHOW_SEND_BUTTON_TEXT:!1,SHOW_SAVE_BUTTON_TEXT:!1,FORM_BACKGROUND_IMAGE_URL:void 0,AUTO_TRANSLATE:!0,FORCE_LANGUAGE:void 0,TRANSLATIONS:void 0,LOGIN_WELCOME_TEXT:void 0,LOGIN_HIDE_WELCOME:!1,LOGIN_LOGO_URL:void 0,HIDE_CHAT_ADD_FILE_BUTTON:!1,FORM_ACCEPT_MARKDOWN:void 0,RESTART_AUDIO_ON_TAKE_PHOTO:!1,ENABLE_STATE_CACHE:!1,SESSION_CACHE_TTL:864e5,USER_INFO_CACHE_TTL:36e5,APPS_CACHE_TTL:3e5,OPTIMISTIC_CACHE_LOAD:!0,VALIDATE_CACHE_IN_BACKGROUND:!0,SHOW_VALIDATION_INDICATOR:!1,CACHE_FAILURE_MODE:"lenient"};const E=function(_){return new Proxy(_,{get:(_,T,O)=>Reflect.get(_,T,O)})}(O);function A(_){return E[_]}function I(T={}){for(const[_,E]of Object.entries(T))void 0!==E&&(O[_]=E);void 0!==T.TRANSLATIONS&&(globalThis.__CODICENT_REINIT_I18N__=!0),_.initialize({startOnLoad:!1})}export{T as AppConfig,A as getConfigValue,I as initCodicentApp};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as o,useMemo as e,useEffect as t,useCallback as s}from"react";import{CodicentService as n}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"react/jsx-runtime";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{getConfigValue as i}from"../config/index.js";import"../stores/chatStore.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.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"./useLocalization.js";import"./useAppStyles.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/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";const r=r=>{const{isAuthenticated:p,getAccessTokenSilently:a,user:m,isLoading:c,logout:l,getAccessTokenWithPopup:g,loginWithRedirect:j,loginWithPopup:u}=r,[P,E]=o(null),[d,T]=o(void 0),[_,C]=o(null),[A,h]=o(""),I=e((()=>new n({API_BASE_URL:i("API_BASE_URL"),APP_LOG_CODICENT:i("APP_LOG_CODICENT"),APP_LOG_TOKEN:i("APP_LOG_TOKEN"),APP_NAME:i("APP_NAME"),APP_PREFIX:i("APP_PREFIX"),APP_TEMPLATE:i("APP_TEMPLATE"),BUTTON_TAG:i("BUTTON_TAG"),STRIPE_PUBLIC_KEY:i("STRIPE_PUBLIC_KEY"),SUBSCRIPTION_NEEDED:i("SUBSCRIPTION_NEEDED"),USER_PREFIX:i("USER_PREFIX"),ANONYMOUS_TOKEN:i("ANONYMOUS_TOKEN")})),[]);t((()=>{!c&&p&&(async()=>{try{const o=await a({});console.debug("CODICENT: ACCESS TOKEN",o),E(o)}catch(o){console.debug("CODICENT: Failed to get access token",o);const e=o;if(e&&"object"==typeof e&&"error"in e&&"login_required"===e.error)console.warn("CODICENT: Login required"),S();else if(e&&"object"==typeof e&&"error"in e&&"consent_required"===e.error)try{const o=await g();if(!o)return void C("Failed to get access token: no token from auth0 with popup");console.log("CODICENT: GOT ACCESS TOKEN"),E(o)}catch(o){console.warn("CODICENT: Failed to get access token with popup",o),S()}else C("Failed to get access token: "+(e.message?.toString()||e.toString())),console.log("CODICENT: ACCESS TOKEN ERROR",e)}})().then((()=>{}))}),[p,g,a,j,c]),t((()=>{if(m&&m.sub&&P&&void 0===d){let o=!0;return I.loginUser(m.sub,P).then((e=>{o&&(null===e?T(!1):""===e?C("Kontrollera internetanslutningen och försök igen."):(I.setToken(P),I.getNickname().then(h),T(!0)))})).catch((()=>{o&&(C("Ett fel uppstod. Försök igen senare."),T(!1))})),()=>{o=!1}}}),[m,P,d,I]);const S=s((()=>{I.logout(),E(null),C(null),T(void 0),h(""),l({logoutParams:{returnTo:i("AUTH_REDIRECT_URL")}})}),[I,l]),O=s((async o=>{const e=await I.registerUser(o,m.email,m.sub,P);return e&&(I.setToken(P),T(!0)),e}),[I,m,P]);t((()=>{I.onUnauthorized=S}),[I]);const N=s((async o=>{try{await u({authorizationParams:{connection:"email",login_hint:o}})}catch(o){console.error("Passwordless login failed:",o),C(`Passwordless login failed: ${o}`)}}),[u]);return e((()=>({isAuthenticated:p,isRegistered:d,accessToken:P,authError:_,isLoading:c,user:m,nickname:A,logout:S,registerUser:O,codicentService:I,loginWithRedirect:j,loginPasswordless:N})),[p,d,P,_,c,m,A,S,O,I,j,N])};export{r as default};
|
|
1
|
+
import{useState as o,useMemo as e,useEffect as t,useCallback as s}from"react";import{CodicentService as n}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"react/jsx-runtime";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{getConfigValue as i}from"../config/index.js";import"../stores/chatStore.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/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"./useLocalization.js";import"./useAppStyles.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/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";const r=r=>{const{isAuthenticated:p,getAccessTokenSilently:a,user:m,isLoading:c,logout:l,getAccessTokenWithPopup:g,loginWithRedirect:j,loginWithPopup:u}=r,[P,E]=o(null),[d,T]=o(void 0),[_,C]=o(null),[A,h]=o(""),I=e((()=>new n({API_BASE_URL:i("API_BASE_URL"),APP_LOG_CODICENT:i("APP_LOG_CODICENT"),APP_LOG_TOKEN:i("APP_LOG_TOKEN"),APP_NAME:i("APP_NAME"),APP_PREFIX:i("APP_PREFIX"),APP_TEMPLATE:i("APP_TEMPLATE"),BUTTON_TAG:i("BUTTON_TAG"),STRIPE_PUBLIC_KEY:i("STRIPE_PUBLIC_KEY"),SUBSCRIPTION_NEEDED:i("SUBSCRIPTION_NEEDED"),USER_PREFIX:i("USER_PREFIX"),ANONYMOUS_TOKEN:i("ANONYMOUS_TOKEN")})),[]);t((()=>{!c&&p&&(async()=>{try{const o=await a({});console.debug("CODICENT: ACCESS TOKEN",o),E(o)}catch(o){console.debug("CODICENT: Failed to get access token",o);const e=o;if(e&&"object"==typeof e&&"error"in e&&"login_required"===e.error)console.warn("CODICENT: Login required"),S();else if(e&&"object"==typeof e&&"error"in e&&"consent_required"===e.error)try{const o=await g();if(!o)return void C("Failed to get access token: no token from auth0 with popup");console.log("CODICENT: GOT ACCESS TOKEN"),E(o)}catch(o){console.warn("CODICENT: Failed to get access token with popup",o),S()}else C("Failed to get access token: "+(e.message?.toString()||e.toString())),console.log("CODICENT: ACCESS TOKEN ERROR",e)}})().then((()=>{}))}),[p,g,a,j,c]),t((()=>{if(m&&m.sub&&P&&void 0===d){let o=!0;return I.loginUser(m.sub,P).then((e=>{o&&(null===e?T(!1):""===e?C("Kontrollera internetanslutningen och försök igen."):(I.setToken(P),I.getNickname().then(h),T(!0)))})).catch((()=>{o&&(C("Ett fel uppstod. Försök igen senare."),T(!1))})),()=>{o=!1}}}),[m,P,d,I]);const S=s((()=>{I.logout(),E(null),C(null),T(void 0),h(""),l({logoutParams:{returnTo:i("AUTH_REDIRECT_URL")}})}),[I,l]),O=s((async o=>{const e=await I.registerUser(o,m.email,m.sub,P);return e&&(I.setToken(P),T(!0)),e}),[I,m,P]);t((()=>{I.onUnauthorized=S}),[I]);const N=s((async o=>{try{await u({authorizationParams:{connection:"email",login_hint:o}})}catch(o){console.error("Passwordless login failed:",o),C(`Passwordless login failed: ${o}`)}}),[u]);return e((()=>({isAuthenticated:p,isRegistered:d,accessToken:P,authError:_,isLoading:c,user:m,nickname:A,logout:S,registerUser:O,codicentService:I,loginWithRedirect:j,loginPasswordless:N})),[p,d,P,_,c,m,A,S,O,I,j,N])};export{r as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as e,useEffect as s,useCallback as t}from"react";import{chatStore as o}from"../stores/chatStore.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import r from"../utils/logging.js";import"react/jsx-runtime";import"../_virtual/index.js";import"../config/index.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";function n(n){const[a,i]=e(o.getState()),{service:c}=n;s((()=>o.subscribe(i)),[c]);const d=t((async()=>{const e=o.getConversationId();if(e){console.log("Reloading chat history to check for missed messages...");try{const s=await c.getChatHistory(e),t=o.getMessages();return s.length>t.length?(console.log(`Found ${s.length-t.length} missed messages, updating chat...`),o.reset(),s.forEach(((e,s)=>{const t={id:e.id,sender:s%2==0?"user":"bot",content:e.content};o.addMessage(t)})),o.setConversationId(e),r("chat-history-reloaded"),!0):(console.log("No missed messages found"),!1)}catch(e){return console.error("Failed to reload chat history:",e),!1}}return!1}),[c]),g=t(((e,s=0)=>{if(""===e.trim())return;const t=`$user-msg-${Date.now()}`,n={id:t,sender:"user",content:e},i=a.messages.length>0?a.messages[a.messages.length-1].id:void 0;o.addMessage(n),o.setBotTyping(!0),r("chat-send");const l=Promise.race([c.chat(e,i),new Promise(((e,s)=>{setTimeout((()=>s(new Error("Request timeout - please try again"))),36e4)}))]).then((e=>{const{id:s,content:t}=e,n={id:s,sender:"bot",content:t,isNew:!0};o.setConversationId(s),o.addMessage(n),o.setBotTyping(!1),r("chat-receive"),t.startsWith("Error code: ")&&r("chat-error: "+t)})).catch((async n=>{console.error("Chat error details:",{error:n,message:n?.message,name:n?.name,stack:n?.stack,tempId:t,lastMessageId:i,retryCount:s,timestamp:(new Date).toISOString()});if(0===s&&("AbortError"===n?.name||n?.message?.includes("timeout")||n?.message?.includes("Failed to fetch")||n?.message?.includes("NetworkError")))return console.log("Auto-retrying chat request..."),o.removeMessage(t),o.setBotTyping(!1),void setTimeout((()=>g(e,s+1)),2e3);function a(){let e="An error occurred while sending the message. Please try again.";if(c.onUnauthorized&&n?.toString().includes("401"))return alert("Session expired. Please log in again."),void c.onUnauthorized();"AbortError"===n?.name||n?.message?.includes("timeout")?(e="Request timed out. Please check your connection and try again.",r("chat-timeout")):n?.message?.includes("HTTP error: 500")?(e="Server error. Please try again in a moment.",r("chat-server-error")):(n?.message?.includes("Failed to fetch")||n?.message?.includes("NetworkError"))&&(e="Network error. Please check your connection and try again.",r("chat-network-error")),console.warn(e),o.removeMessage(t),o.setBotTyping(!1),r("chat-error")}"AbortError"===n?.name||n?.message?.includes("timeout")||n?.message?.includes("Failed to fetch")||n?.message?.includes("NetworkError")||n?.message?.includes("WebSocket")||n?.message?.includes("SignalR")||n?.message?.includes("Connection")?(console.log("Potential SignalR/connection issue detected, checking for missed messages..."),setTimeout((async()=>{if(await d())return o.removeMessage(t),o.setBotTyping(!1),console.log("Recovered missed message(s) from server"),void r("chat-recovered");a()}),2e3)):a()}));o.addPendingRequest(t,l)}),[c,a.messages,d]),l=t((()=>{o.reset(),o.clearMessages(),r("new-chat")}),[]),m=t((e=>{o.reset(),o.clearMessages(),r("open-chat"),c.getChatHistory(e).then((e=>{e.forEach(((e,s)=>{const t={id:e.id,sender:s%2==0?"user":"bot",content:e.content};o.addMessage(t)}))}))}),[c]);return{messages:a.messages,isBotTyping:a.isBotTyping,handleSend:g,newChat:l,openChat:m,reloadChatHistory:d}}export{n as useChat};
|
|
1
|
+
import{useState as e,useEffect as s,useCallback as t}from"react";import{chatStore as o}from"../stores/chatStore.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import r from"../utils/logging.js";import"react/jsx-runtime";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";function n(n){const[a,i]=e(o.getState()),{service:c}=n;s((()=>o.subscribe(i)),[c]);const d=t((async()=>{const e=o.getConversationId();if(e){console.log("Reloading chat history to check for missed messages...");try{const s=await c.getChatHistory(e),t=o.getMessages();return s.length>t.length?(console.log(`Found ${s.length-t.length} missed messages, updating chat...`),o.reset(),s.forEach(((e,s)=>{const t={id:e.id,sender:s%2==0?"user":"bot",content:e.content};o.addMessage(t)})),o.setConversationId(e),r("chat-history-reloaded"),!0):(console.log("No missed messages found"),!1)}catch(e){return console.error("Failed to reload chat history:",e),!1}}return!1}),[c]),g=t(((e,s=0)=>{if(""===e.trim())return;const t=`$user-msg-${Date.now()}`,n={id:t,sender:"user",content:e},i=a.messages.length>0?a.messages[a.messages.length-1].id:void 0;o.addMessage(n),o.setBotTyping(!0),r("chat-send");const l=Promise.race([c.chat(e,i),new Promise(((e,s)=>{setTimeout((()=>s(new Error("Request timeout - please try again"))),36e4)}))]).then((e=>{const{id:s,content:t}=e,n={id:s,sender:"bot",content:t,isNew:!0};o.setConversationId(s),o.addMessage(n),o.setBotTyping(!1),r("chat-receive"),t.startsWith("Error code: ")&&r("chat-error: "+t)})).catch((async n=>{console.error("Chat error details:",{error:n,message:n?.message,name:n?.name,stack:n?.stack,tempId:t,lastMessageId:i,retryCount:s,timestamp:(new Date).toISOString()});if(0===s&&("AbortError"===n?.name||n?.message?.includes("timeout")||n?.message?.includes("Failed to fetch")||n?.message?.includes("NetworkError")))return console.log("Auto-retrying chat request..."),o.removeMessage(t),o.setBotTyping(!1),void setTimeout((()=>g(e,s+1)),2e3);function a(){let e="An error occurred while sending the message. Please try again.";if(c.onUnauthorized&&n?.toString().includes("401"))return alert("Session expired. Please log in again."),void c.onUnauthorized();"AbortError"===n?.name||n?.message?.includes("timeout")?(e="Request timed out. Please check your connection and try again.",r("chat-timeout")):n?.message?.includes("HTTP error: 500")?(e="Server error. Please try again in a moment.",r("chat-server-error")):(n?.message?.includes("Failed to fetch")||n?.message?.includes("NetworkError"))&&(e="Network error. Please check your connection and try again.",r("chat-network-error")),console.warn(e),o.removeMessage(t),o.setBotTyping(!1),r("chat-error")}"AbortError"===n?.name||n?.message?.includes("timeout")||n?.message?.includes("Failed to fetch")||n?.message?.includes("NetworkError")||n?.message?.includes("WebSocket")||n?.message?.includes("SignalR")||n?.message?.includes("Connection")?(console.log("Potential SignalR/connection issue detected, checking for missed messages..."),setTimeout((async()=>{if(await d())return o.removeMessage(t),o.setBotTyping(!1),console.log("Recovered missed message(s) from server"),void r("chat-recovered");a()}),2e3)):a()}));o.addPendingRequest(t,l)}),[c,a.messages,d]),l=t((()=>{o.reset(),o.clearMessages(),r("new-chat")}),[]),m=t((e=>{o.reset(),o.clearMessages(),r("open-chat"),c.getChatHistory(e).then((e=>{e.forEach(((e,s)=>{const t={id:e.id,sender:s%2==0?"user":"bot",content:e.content};o.addMessage(t)}))}))}),[c]);return{messages:a.messages,isBotTyping:a.isBotTyping,handleSend:g,newChat:l,openChat:m,reloadChatHistory:d}}export{n as useChat};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useRef as e,useState as t,useCallback as r,useMemo as n,useEffect as s}from"react";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"react/jsx-runtime";import{createAppStateMachine as o}from"../utils/appState.js";import"../_virtual/index.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{useAudioRecorder as i}from"./useAudioRecorder.js";import a from"./useAuthState.js";import c from"./useRealtimeVoiceAI.js";import u from"./useTools.js";import{getConfigValue as l}from"../config/index.js";const m=({auth0:m,toolsConfig:p})=>{const d=a(m),
|
|
1
|
+
import{useRef as e,useState as t,useCallback as r,useMemo as n,useEffect as s}from"react";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"react/jsx-runtime";import{createAppStateMachine as o}from"../utils/appState.js";import"../_virtual/index.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"../utils/cacheManager.js";import{useAudioRecorder as i}from"./useAudioRecorder.js";import a from"./useAuthState.js";import c from"./useRealtimeVoiceAI.js";import u from"./useTools.js";import{getConfigValue as l}from"../config/index.js";const m=({auth0:m,toolsConfig:p})=>{const d=a(m),g=e(o(d.codicentService,(()=>{}))),[f,h]=t(),{service:v,context:k}=g.current,{nickname:A,name:j,error:w,errorType:y,selectedApp:b}=k,x=r(((e,t)=>{const r=e.get("file").name;v.uploadFile(r,e).then((e=>{v.sendMessage(`#transcribe ${""!==t?(t.startsWith("#")?"":"#")+t+" ":""}#file:${e}`).then((()=>{})).catch(console.warn)}))}),[v]),C=i(x),[S,T]=t(),[_,I]=t(),[N,R]=t(!1),M=n((()=>new Audio("./notification.mp3")),[]),E=r((()=>R(!0)),[]),O=u(v,T,I,M,S,E,p),J=n((()=>l("REALTIME_VOICE_API_KEY")||""),[]),L=c(v,J,O);s((()=>{N&&(L?.disconnectConversation(),R(!1))}),[N,L]),s((()=>{d.isAuthenticated&&d.user&&d.accessToken&&g.current.updateContext({isAuthenticated:d.isAuthenticated,user:{sub:d.user.sub,email:d.user.email},accessToken:d.accessToken})}),[d.isAuthenticated,d.user,d.accessToken]),s((()=>g.current.updateContext({nickname:d.nickname})),[d.nickname]),s((()=>{g.current.update();let e,t=g.current.getCurrentStateName();h(g.current.getCurrentStateName()),JSON.stringify(g.current.context);let r=!1;const n=s=>setInterval((()=>{const s=g.current.getCurrentStateName();if("hasAccess"===s&&!r)return console.log("🎯 Reached stable state - switching to slower polling (1000ms)"),r=!0,clearInterval(e),void(e=n(1e3));if("hasAccess"!==s&&r)return console.log("🚨 Left stable state - switching to fast polling (200ms)"),r=!1,clearInterval(e),void(e=n(200));const o=JSON.stringify(g.current.context);g.current.update();const i=JSON.stringify(g.current.context),a=g.current.getCurrentStateName();a===t&&o===i||(h(a),t=a)}),s);return e=n(200),()=>clearInterval(e)}),[]);const B=r((e=>e.replace("{nickname}",A||"unknown").replace("{token}",encodeURIComponent(d.accessToken||"unknown")).replace("{app}",b||"unknown")),[A,d.accessToken,b]),U=r((e=>{g.current.updateContext({isAnonymous:e})}),[]),V=r((()=>g.current.isBusy()),[]);return n((()=>({audio:C,auth:d,currentStateName:f,stateMachine:g.current,service:v,context:k,state:f,nickname:A,name:j,error:w,errorType:y,fixAppUrl:B,setAnonymous:U,allStates:g.current.allStates,isBusy:V,voice:L,html:S,setHtml:T,script:_})),[f,A,j,w,y,S,_,d.isAuthenticated,d.isLoading,C.isRecording,L?.isConnected,B,U,V])};export{m as useCodicentApp};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as t,useRef as o,useCallback as s,useEffect as e}from"react";import p from"./useStateWithLocalStorage.js";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"react/jsx-runtime";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{getConfigValue as r}from"../config/index.js";import"../stores/chatStore.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.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"./useLocalization.js";import"./useAppStyles.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/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";const i=i=>{const[n,m]=p("APP_WELCOME_STATE_TEXT_"+i.context.selectedApp,""),[a,c]=p("CODICENT_STATE_LAST_TIMESTAMP_"+i.context.selectedApp,0),{service:j,current:l}=i,[g,T]=t(!1),
|
|
1
|
+
import{useState as t,useRef as o,useCallback as s,useEffect as e}from"react";import p from"./useStateWithLocalStorage.js";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"react/jsx-runtime";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{getConfigValue as r}from"../config/index.js";import"../stores/chatStore.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/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"./useLocalization.js";import"./useAppStyles.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/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";const i=i=>{const[n,m]=p("APP_WELCOME_STATE_TEXT_"+i.context.selectedApp,""),[a,c]=p("CODICENT_STATE_LAST_TIMESTAMP_"+i.context.selectedApp,0),{service:j,current:l}=i,[g,T]=t(!1),u=o(!1),S=s((async()=>{if(!u.current){u.current=!0;try{const t=await j.getMessagesFast(r("LOGBOOK_TAGS").split(",").filter((t=>"chat"!==t))),o=t.length>0?t[0].createdAt.getTime():a;if(o>a){c(o),T(!0);const t=await j.chat(r("WELCOME_STATUS_PROMPT"));m(t.content)}}finally{T(!1),u.current=!1}}}),[j,a,c,m]),_=s((()=>{j&&r("CHAT_INSTRUCTIONS")}),[j]);return e((()=>{l===i.allStates.hasAccess&&r("WELCOME_STATUS_PROMPT")?(S(),_()):r("WELCOME_STATUS_PROMPT")||m("")}),[l,i,S,_,m]),{welcomeStatusText:n,updating:g}};export{i as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRealtimeVoiceAI.d.ts","sourceRoot":"","sources":["../../../src/hooks/useRealtimeVoiceAI.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAK/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;CACH;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,kBAAkB,oBACL,eAAe,UACxB,MAAM,SACP;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,EAAE,UACtD,MAAM,KACb,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"useRealtimeVoiceAI.d.ts","sourceRoot":"","sources":["../../../src/hooks/useRealtimeVoiceAI.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAK/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;CACH;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,kBAAkB,oBACL,eAAe,UACxB,MAAM,SACP;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,EAAE,UACtD,MAAM,KACb,aAAa,GAAG,SA0pBlB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useRef as e,useState as t,useCallback as n,useEffect as r,useMemo as o}from"react";import{WavRenderer as a}from"../utils/wav_renderer.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import{WavStreamPlayer as
|
|
1
|
+
import{useRef as e,useState as t,useCallback as n,useEffect as r,useMemo as o}from"react";import{WavRenderer as a}from"../utils/wav_renderer.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import{WavStreamPlayer as i}from"../lib/wavtools/lib/wav_stream_player.js";import{WavRecorder as s}from"../lib/wavtools/lib/wav_recorder.js";import{getConfigValue as c}from"../config/index.js";const l=(l,u,d,p)=>{const m=!!c("APP_CONFIG"),f=!!c("APP_BUTTONS");m||console.warn("APP_CONFIG is not set. Voice AI will not be available."),f||console.warn("APP_BUTTONS is not set. Voice AI will not be available.");const g=c("APP_CONFIG"),y=c("APP_BUTTONS");c("API_BASE_URL").replace(/\/$/,""),c("USE_REALTIME_SESSION_ENDPOINT"),c("REALTIME_SESSION_ENDPOINT");const _=p||c("REALTIME_VOICE_MODEL")||"alloy",w=["alloy","shimmer","echo"],h=w.includes(_)?_:"alloy";_!==h&&console.warn(`[codicent-app-sdk] Voice "${_}" is not supported in the current SDK version. Supported voices: ${w.join(", ")}. Falling back to "${h}".`);const S=e(new s({sampleRate:24e3})),v=e(new i({sampleRate:24e3})),O=e(null),I=e(null),T=e(null),N=e(null),E=e(!1),A=e(null),C=e(null),R=e(null),P=e((new Date).toISOString()),[b,D]=t([]),[F,J]=t([]),[$,x]=t(!1),[M,k]=t(!1),[L,V]=t(!1),U=e(0),j=e(0),[B,G]=t(""),[q,W]=t("en-US"),H=e(new Map),[z,K]=t((()=>m&&f&&y&&g&&g.apps&&g.apps[y]?g.apps[y].voiceInstructions||g.REALTIME_VOICE_INSTRUCTIONS||"":g&&g.REALTIME_VOICE_INSTRUCTIONS||"")),Q=n((e=>{const t=P.current,n=new Date(t).valueOf(),r=new Date(e).valueOf()-n,o=Math.floor(r/10)%100,a=Math.floor(r/1e3)%60,i=e=>{let t=e+"";for(;t.length<2;)t="0"+t;return t};return`${i(Math.floor(r/6e4)%60)}:${i(a)}.${i(o)}`}),[]),X=n((async()=>{try{P.current=(new Date).toISOString(),x(!0),J([]),D([]),H.current.clear();const e=await l.getRealtimeSessionToken(h);if(!e)throw new Error("No ephemeral key returned from session endpoint");const t=new RTCPeerConnection;O.current=t,T.current||(T.current=new Audio,T.current.autoplay=!0),t.ontrack=e=>{T.current&&e.streams[0]&&(T.current.srcObject=e.streams[0])};const n=await navigator.mediaDevices.getUserMedia({audio:!0});N.current=n;const r=n.getTracks()[0];t.addTrack(r,n);const o=t.createDataChannel("oai-events");I.current=o,o.addEventListener("message",(e=>{try{const t=JSON.parse(e.data);if("session.created"===t.type);else if("conversation.item.created"===t.type)D((e=>[...e,t.item]));else if("conversation.item.input_audio_transcription.completed"===t.type)D((e=>{const n=[...e],r=n.findIndex((e=>e.id===t.item_id));return-1!==r&&n[r].formatted&&(n[r].formatted.transcript=t.transcript),n}));else if("response.audio_transcript.delta"===t.type);else if("response.audio_transcript.done"===t.type);else if("response.output_item.added"===t.type){const e=t.item;"function_call"===e?.type&&(console.log("[Voice AI] Function call initiated:",e.name),H.current.set(e.id,{name:e.name||"",arguments:"",call_id:e.call_id||e.id}))}else if("response.function_call_arguments.delta"===t.type){const e=t.item_id,n=t.delta,r=H.current.get(e);r&&n&&(r.arguments+=n,H.current.set(e,r))}else if("response.function_call_arguments.done"===t.type){const e=t.item_id,n=H.current.get(e);if(n){console.log(`[Voice AI] Executing tool: ${n.name}`);const t=d.find((e=>e.definition.name===n.name));if(t){let e={};try{e=n.arguments?JSON.parse(n.arguments):{}}catch(t){console.error("[Voice AI] Failed to parse tool arguments:",t),e={}}Promise.resolve(t.handler(e)).then((e=>{console.log(`[Voice AI] Tool ${n.name} completed:`,e),o&&"open"===o.readyState&&(o.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n.call_id,output:JSON.stringify(e)}})),o.send(JSON.stringify({type:"response.create"})))})).catch((e=>{console.error(`[Voice AI] Tool ${n.name} failed:`,e),o&&"open"===o.readyState&&(o.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n.call_id,output:JSON.stringify({error:e.message||"Tool execution failed"})}})),o.send(JSON.stringify({type:"response.create"})))}))}else console.error(`[Voice AI] Tool not found: ${n.name}`);H.current.delete(e)}}else"error"===t.type&&console.error("Server error:",t.error)}catch(t){console.warn("Invalid message:",e.data)}})),o.onopen=()=>{console.log("Data channel opened, configuring session"),o.send(JSON.stringify({type:"session.update",session:{instructions:z.replace("{{name}}",B).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString()),modalities:["text","audio"],input_audio_transcription:{model:"whisper-1"},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:500},voice:h,temperature:.8,max_response_output_tokens:4096,input_audio_format:"pcm16",output_audio_format:"pcm16",tools:d.map((e=>({type:"function",...e.definition})))}}))},o.onclose=()=>{console.log("Data channel closed")};const a=await t.createOffer();await t.setLocalDescription(a);let i="gpt-4o-realtime-preview";try{if(c("REALTIME_CONFIG_ENDPOINT")){const e=await l.getRealtimeConfig();e&&e.model&&(i=e.model)}}catch(e){console.warn("Failed to fetch realtime config, using default model:",e)}const s="https://api.openai.com/v1/realtime",u=await fetch(`${s}?model=${i}`,{method:"POST",body:a.sdp,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/sdp"}});if(!u.ok)throw new Error(`Failed to get SDP answer: ${u.statusText}`);const p={type:"answer",sdp:await u.text()};await t.setRemoteDescription(p),k(!1);const m=S.current,f=v.current;await m.begin(),await f.connect()}catch(e){throw console.error("[codicent-app-sdk] Failed to establish WebRTC connection:",e),x(!1),e}}),[l,h,z,B,q,d]),Y=n((async()=>{x(!1),J([]),D([]),H.current.clear(),I.current&&(I.current.close(),I.current=null),O.current&&(O.current.close(),O.current=null),N.current&&(N.current.getTracks().forEach((e=>e.stop())),N.current=null),T.current&&(T.current.pause(),T.current.srcObject=null);const e=S.current;await e.end();const t=v.current;await t.interrupt()}),[]),Z=n((async e=>{const t=I.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"conversation.item.delete",item_id:e}))}),[]),ee=n((async()=>{V(!0);const e=I.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"input_audio_buffer.commit"}))}),[]),te=n((async()=>{V(!1);const e=I.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"response.create"}))}),[]),ne=n((async e=>{const t=I.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"session.update",session:{turn_detection:"none"===e?null:{type:"server_vad"}}})),k("none"===e)}),[]);r((()=>{if(B&&$){const e=I.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"session.update",session:{instructions:z.replace("{{name}}",B).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString())}}))}}),[z,B,q,$]),r((()=>{let e=!0;const t=S.current,n=A.current;let r=null;const o=v.current,i=C.current;let s=null;const c=()=>{if(e){if(n&&(n.width&&n.height||(n.width=n.offsetWidth,n.height=n.offsetHeight),r=r||n.getContext("2d"),r)){r.clearRect(0,0,n.width,n.height);const e=t.recording?t.getFrequencies("voice"):{values:new Float32Array([0])},o=1-Math.max(...e.values);U.current=o,a.drawCircularBars(n,r,e.values,"#0099ff",20,0,8)}if(i&&(i.width&&i.height||(i.width=i.offsetWidth,i.height=i.offsetHeight),s=s||i.getContext("2d"),s)){s.clearRect(0,0,i.width,i.height);const e=o.analyser?o.getFrequencies("voice"):{values:new Float32Array([0])},t=1-Math.max(...e.values);j.current=t,a.drawCircularBars(i,s,e.values,"#009900",20,0,8)}window.requestAnimationFrame(c)}};return c(),()=>{e=!1}}),[]),r((()=>{!E.current&&d&&z&&(E.current=!0)}),[d,z]);const re=n((e=>{const t=e.replace("{{name}}",B).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString()),n=I.current;n&&"open"===n.readyState&&n.send(JSON.stringify({type:"session.update",session:{instructions:t}})),K(e)}),[B,q]);return o((()=>{if(m&&f)return{items:b,realtimeEvents:F,isConnected:$,canPushToTalk:M,isRecording:L,clientCanvasRef:A,serverCanvasRef:C,eventsScrollRef:R,formatTime:Q,connectConversation:X,disconnectConversation:Y,deleteConversationItem:Z,startRecording:ee,stopRecording:te,changeTurnEndType:ne,getRecorderLevel:()=>U.current,getStreamLevel:()=>j.current,setUsername:G,updateInstructions:re,setLanguage:W}}),[m,f,b,F,$,M,L,A,C,R])};export{l as default};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{CodicentService}from"./services/codicent.js";export{default as Markdown}from"./components/Markdown.js";export{Textarea}from"./components/Textarea.js";export{Button}from"./components/Button.js";export{CompoundButton}from"./components/CompoundButton.js";export{Title}from"./components/Title.js";export{Text}from"./components/Text.js";export{Spinner}from"./components/Spinner.js";export{Label}from"./components/Label.js";export{Input}from"./components/Input.js";export{default as TextHeader}from"./components/TextHeader.js";export{default as TypingIndicator}from"./components/TypingIndicator.js";export{default as Prompt}from"./components/Prompt.js";export{default as ChatInput}from"./components/ChatInput.js";export{CombinedPlaceholderDialog}from"./components/CombinedPlaceholderDialog.js";export{default as ChatMessage}from"./components/ChatMessage.js";export{Header}from"./components/Header.js";export{default as VoiceIcon}from"./components/VoiceIcon.js";export{default as AudioIcon}from"./components/AudioIcon.js";export{FileThumbnail}from"./components/FileThumbnail.js";export{default as MessageInput}from"./components/MessageInput.js";export{default as UploadFile}from"./components/UploadFile.js";export{default as SnapFooter}from"./components/SnapFooter.js";export{default as Profile}from"./components/Profile.js";export{default as MessageItem}from"./components/MessageItem.js";export{default as Content}from"./components/Content.js";export{default as AiInput}from"./components/AiInput.js";export{default as SearchBox}from"./components/SearchBox.js";export{default as HtmlView}from"./components/HtmlView.js";export{Footer}from"./components/Footer.js";export{Page}from"./components/Page.js";export{UrlProcessor}from"./components/UrlProcessor.js";export{DatePicker}from"./components/DatePicker.js";export{ColorPicker}from"./components/ColorPicker.js";export{TimePicker}from"./components/TimePicker.js";export{default as useStateWithLocalStorage}from"./hooks/useStateWithLocalStorage.js";export{default as useAuthState}from"./hooks/useAuthState.js";export{useChat}from"./hooks/useChat.js";export{default as useCodicentState}from"./hooks/useCodicentState.js";export{useAudioRecorder}from"./hooks/useAudioRecorder.js";export{default as useTools}from"./hooks/useTools.js";export{default as useRealtimeVoiceAI}from"./hooks/useRealtimeVoiceAI.js";export{default as useLocalization}from"./hooks/useLocalization.js";export{useTemplateVariables}from"./hooks/useTemplateVariables.js";export{useCodicentApp}from"./hooks/useCodicentApp.js";export{default as useAppStyles}from"./hooks/useAppStyles.js";export{default as useToaster}from"./hooks/useToaster.js";export{default as MessageContent}from"./utils/MessageContent.js";export{default as generateBrandVariants}from"./utils/theme.js";export{default as log}from"./utils/logging.js";export{default as withWakeLock}from"./utils/withWakeLock.js";export{AppStateMachine,createAppStateMachine}from"./utils/appState.js";import{d as e}from"./_virtual/index.js";import"./lib/wavtools/lib/wav_packer.js";import"./lib/wavtools/lib/analysis/audio_analysis.js";export{WavStreamPlayer}from"./lib/wavtools/lib/wav_stream_player.js";export{WavRecorder}from"./lib/wavtools/lib/wav_recorder.js";export{getGpsLocation,isMobileDevice}from"./utils/device.js";export{getTimeString}from"./utils/helpers.js";export{AppConfig,getConfigValue,initCodicentApp}from"./config/index.js";export{default as AppFrame}from"./pages/AppFrame.js";export{default as Chat}from"./pages/Chat.js";export{Compose}from"./pages/Compose.js";export{default as Snap}from"./pages/Snap.js";export{default as Search}from"./pages/Search.js";export{default as Login}from"./pages/Login.js";export{Logout}from"./pages/Logout.js";export{CrmPage}from"./pages/CrmPage.js";export{CrmPagePersistent}from"./pages/CrmPagePersistent.js";export{default as ImageView}from"./pages/ImageView.js";export{default as FormInvite}from"./pages/FormInvite.js";export{default as FormAccept}from"./pages/FormAccept.js";export{Sales}from"./pages/Sales.js";export{default as HtmlViewer}from"./pages/HtmlViewer.js";export{Purchase}from"./pages/Purchase.js";var o=e.StateMachine;export{o as StateMachine};
|
|
1
|
+
export{CodicentService}from"./services/codicent.js";export{default as Markdown}from"./components/Markdown.js";export{Textarea}from"./components/Textarea.js";export{Button}from"./components/Button.js";export{CompoundButton}from"./components/CompoundButton.js";export{Title}from"./components/Title.js";export{Text}from"./components/Text.js";export{Spinner}from"./components/Spinner.js";export{Label}from"./components/Label.js";export{Input}from"./components/Input.js";export{default as TextHeader}from"./components/TextHeader.js";export{default as TypingIndicator}from"./components/TypingIndicator.js";export{default as Prompt}from"./components/Prompt.js";export{default as ChatInput}from"./components/ChatInput.js";export{CombinedPlaceholderDialog}from"./components/CombinedPlaceholderDialog.js";export{default as ChatMessage}from"./components/ChatMessage.js";export{Header}from"./components/Header.js";export{default as VoiceIcon}from"./components/VoiceIcon.js";export{default as AudioIcon}from"./components/AudioIcon.js";export{FileThumbnail}from"./components/FileThumbnail.js";export{default as MessageInput}from"./components/MessageInput.js";export{default as UploadFile}from"./components/UploadFile.js";export{default as SnapFooter}from"./components/SnapFooter.js";export{default as Profile}from"./components/Profile.js";export{default as MessageItem}from"./components/MessageItem.js";export{default as Content}from"./components/Content.js";export{default as AiInput}from"./components/AiInput.js";export{default as SearchBox}from"./components/SearchBox.js";export{default as HtmlView}from"./components/HtmlView.js";export{Footer}from"./components/Footer.js";export{Page}from"./components/Page.js";export{UrlProcessor}from"./components/UrlProcessor.js";export{DatePicker}from"./components/DatePicker.js";export{ColorPicker}from"./components/ColorPicker.js";export{TimePicker}from"./components/TimePicker.js";export{default as useStateWithLocalStorage}from"./hooks/useStateWithLocalStorage.js";export{default as useAuthState}from"./hooks/useAuthState.js";export{useChat}from"./hooks/useChat.js";export{default as useCodicentState}from"./hooks/useCodicentState.js";export{useAudioRecorder}from"./hooks/useAudioRecorder.js";export{default as useTools}from"./hooks/useTools.js";export{default as useRealtimeVoiceAI}from"./hooks/useRealtimeVoiceAI.js";export{default as useLocalization}from"./hooks/useLocalization.js";export{useTemplateVariables}from"./hooks/useTemplateVariables.js";export{useCodicentApp}from"./hooks/useCodicentApp.js";export{default as useAppStyles}from"./hooks/useAppStyles.js";export{default as useToaster}from"./hooks/useToaster.js";export{default as MessageContent}from"./utils/MessageContent.js";export{default as generateBrandVariants}from"./utils/theme.js";export{default as log}from"./utils/logging.js";export{default as withWakeLock}from"./utils/withWakeLock.js";export{AppStateMachine,createAppStateMachine}from"./utils/appState.js";import{d as e}from"./_virtual/index.js";import"./lib/wavtools/lib/wav_packer.js";import"./lib/wavtools/lib/analysis/audio_analysis.js";export{WavStreamPlayer}from"./lib/wavtools/lib/wav_stream_player.js";export{WavRecorder}from"./lib/wavtools/lib/wav_recorder.js";export{getGpsLocation,isMobileDevice}from"./utils/device.js";export{getTimeString}from"./utils/helpers.js";export{CacheManager,stateMachineCacheManager}from"./utils/cacheManager.js";export{AppConfig,getConfigValue,initCodicentApp}from"./config/index.js";export{default as AppFrame}from"./pages/AppFrame.js";export{default as Chat}from"./pages/Chat.js";export{Compose}from"./pages/Compose.js";export{default as Snap}from"./pages/Snap.js";export{default as Search}from"./pages/Search.js";export{default as Login}from"./pages/Login.js";export{Logout}from"./pages/Logout.js";export{CrmPage}from"./pages/CrmPage.js";export{CrmPagePersistent}from"./pages/CrmPagePersistent.js";export{default as ImageView}from"./pages/ImageView.js";export{default as FormInvite}from"./pages/FormInvite.js";export{default as FormAccept}from"./pages/FormAccept.js";export{Sales}from"./pages/Sales.js";export{default as HtmlViewer}from"./pages/HtmlViewer.js";export{Purchase}from"./pages/Purchase.js";var o=e.StateMachine;export{o as StateMachine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RealtimeEventHandler as e}from"./event_handler.js";import{RealtimeUtils as t}from"./utils.js";class s extends e{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:s,debug:r}={}){if(super(),this.defaultUrl="wss://api.openai.com/v1/realtime",this.url=e||this.defaultUrl,this.apiKey=t||null,this.debug=!!r,this.ws=null,globalThis.document&&this.apiKey&&!s)throw new Error('Can not provide API key in the browser without "dangerouslyAllowAPIKeyInBrowser" set to true')}isConnected(){return!!this.ws}log(...e){const t=[`[Websocket/${(new Date).toISOString()}]`].concat(e).map((e=>"object"==typeof e&&null!==e?JSON.stringify(e,null,2):e));return this.debug&&console.log(...t),!0}async connect({model:e}={model:"gpt-4o-realtime-preview-2024-10-01"}){if(this.apiKey||this.url!==this.defaultUrl||console.warn(`No apiKey provided for connection to "${this.url}"`),this.isConnected())throw new Error("Already connected");if(globalThis.WebSocket){globalThis.document&&this.apiKey&&console.warn("Warning: Connecting using API key in the browser, this is not recommended");const e=new(0,globalThis.WebSocket)(`${this.url}`,["realtime",`websocket.api_key.${this.apiKey}`]);return e.addEventListener("message",(e=>{const t=JSON.parse(e.data);this.receive(t.type,t)})),new Promise(((t,s)=>{const r=()=>{this.disconnect(e),s(new Error(`Could not connect to "${this.url}"`))};e.addEventListener("error",r),e.addEventListener("open",(()=>{this.log(`Connected to "${this.url}"`),e.removeEventListener("error",r),e.addEventListener("error",(()=>{this.disconnect(e),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})})),e.addEventListener("close",(()=>{this.disconnect(e),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})})),this.ws=e,t(!0)}))}))}{const t="ws",s=new(0,(await import(t)).default)(`${this.url||"wss://api.openai.com/v1/realtime"}${e?`?model=${e}`:""}`,[],{finishRequest:e=>{e.setHeader("Authorization",`Bearer ${this.apiKey}`),e.setHeader("OpenAI-Beta","realtime=v1"),e.setHeader("api-key",this.apiKey),e.end()}});return s.on("message",(e=>{const t=JSON.parse(e.toString());this.receive(t.type,t)})),new Promise(((e,t)=>{const r=()=>{this.disconnect(s),t(new Error(`Could not connect to "${this.url}"`))};s.on("error",r),s.on("open",(()=>{this.log(`Connected to "${this.url}"`),s.removeListener("error",r),s.on("error",(()=>{this.disconnect(s),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})})),s.on("close",(()=>{this.disconnect(s),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})})),this.ws=s,e(!0)}))}))}}disconnect(e){if(!e||this.ws===e)return this.ws&&this.ws.close(),this.ws=null,!0}receive(e,t){return this.log("received:",e,t),this.dispatch(`server.${e}`,t),this.dispatch("server.*",t),!0}send(e,s){if(!this.isConnected())throw new Error("RealtimeAPI is not connected");if("object"!=typeof(s=s||{}))throw new Error("data must be an object");const r={event_id:t.generateId("evt_"),type:e,...s};return this.dispatch(`client.${e}`,r),this.dispatch("client.*",r),this.log("sent:",e,r),this.ws.send(JSON.stringify(r)),!0}}export{s as RealtimeAPI};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RealtimeEventHandler as e}from"./event_handler.js";import{RealtimeAPI as t}from"./api.js";import{RealtimeConversation as i}from"./conversation.js";import{RealtimeUtils as s}from"./utils.js";class o extends e{constructor({url:e,apiKey:s,dangerouslyAllowAPIKeyInBrowser:o,debug:n}={}){super(),this.defaultSessionConfig={modalities:["text","audio"],instructions:"",voice:"alloy",input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:null,turn_detection:null,tools:[],tool_choice:"auto",temperature:.8,max_response_output_tokens:4096},this.sessionConfig={},this.transcriptionModels=[{model:"whisper-1"}],this.defaultServerVadConfig={type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},this.realtime=new t({url:e,apiKey:s,dangerouslyAllowAPIKeyInBrowser:o,debug:n}),this.conversation=new i,this._resetConfig(),this._addAPIEventHandlers()}_resetConfig(){return this.sessionCreated=!1,this.tools={},this.sessionConfig=JSON.parse(JSON.stringify(this.defaultSessionConfig)),this.inputAudioBuffer=new Int16Array(0),!0}_addAPIEventHandlers(){this.realtime.on("client.*",(e=>{const t={time:(new Date).toISOString(),source:"client",event:e};this.dispatch("realtime.event",t)})),this.realtime.on("server.*",(e=>{const t={time:(new Date).toISOString(),source:"server",event:e};this.dispatch("realtime.event",t)})),this.realtime.on("server.session.created",(()=>this.sessionCreated=!0));const e=(e,...t)=>{const{item:i,delta:s}=this.conversation.processEvent(e,...t);return{item:i,delta:s}},t=(t,...i)=>{const{item:s,delta:o}=e(t,...i);return s&&this.dispatch("conversation.updated",{item:s,delta:o}),{item:s,delta:o}},i=async e=>{try{const t=JSON.parse(e.arguments),i=this.tools[e.name];if(!i)throw new Error(`Tool "${e.name}" has not been added`);const s=await i.handler(t);this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify(s)}})}catch(t){this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify({error:t.message})}})}this.createResponse()};return this.realtime.on("server.response.created",e),this.realtime.on("server.response.output_item.added",e),this.realtime.on("server.response.content_part.added",e),this.realtime.on("server.input_audio_buffer.speech_started",(t=>{e(t),this.dispatch("conversation.interrupted")})),this.realtime.on("server.input_audio_buffer.speech_stopped",(t=>e(t,this.inputAudioBuffer))),this.realtime.on("server.conversation.item.created",(e=>{const{item:i}=t(e);this.dispatch("conversation.item.appended",{item:i}),"completed"===i.status&&this.dispatch("conversation.item.completed",{item:i})})),this.realtime.on("server.conversation.item.truncated",t),this.realtime.on("server.conversation.item.deleted",t),this.realtime.on("server.conversation.item.input_audio_transcription.completed",t),this.realtime.on("server.response.audio_transcript.delta",t),this.realtime.on("server.response.audio.delta",t),this.realtime.on("server.response.text.delta",t),this.realtime.on("server.response.function_call_arguments.delta",t),this.realtime.on("server.response.output_item.done",(async e=>{const{item:s}=t(e);"completed"===s.status&&this.dispatch("conversation.item.completed",{item:s}),s.formatted.tool&&i(s.formatted.tool)})),!0}isConnected(){return this.realtime.isConnected()}reset(){return this.disconnect(),this.clearEventHandlers(),this.realtime.clearEventHandlers(),this._resetConfig(),this._addAPIEventHandlers(),!0}async connect(){if(this.isConnected())throw new Error("Already connected, use .disconnect() first");return await this.realtime.connect(),this.updateSession(),!0}async waitForSessionCreated(){if(!this.isConnected())throw new Error("Not connected, use .connect() first");for(;!this.sessionCreated;)await new Promise((e=>setTimeout((()=>e()),1)));return!0}disconnect(){this.sessionCreated=!1,this.realtime.isConnected()&&this.realtime.disconnect(),this.conversation.clear()}getTurnDetectionType(){return this.sessionConfig.turn_detection?.type||null}addTool(e,t){if(!e?.name)throw new Error("Missing tool name in definition");const i=e?.name;if(this.tools[i])throw new Error(`Tool "${i}" already added. Please use .removeTool("${i}") before trying to add again.`);if("function"!=typeof t)throw new Error(`Tool "${i}" handler must be a function`);return this.tools[i]={definition:e,handler:t},this.updateSession(),this.tools[i]}removeTool(e){if(!this.tools[e])throw new Error(`Tool "${e}" does not exist, can not be removed.`);return delete this.tools[e],!0}deleteItem(e){return this.realtime.send("conversation.item.delete",{item_id:e}),!0}updateSession({modalities:e,instructions:t,voice:i,input_audio_format:s,output_audio_format:o,input_audio_transcription:n,turn_detection:r,tools:a,tool_choice:d,temperature:u,max_response_output_tokens:c}={}){void 0!==e&&(this.sessionConfig.modalities=e),void 0!==t&&(this.sessionConfig.instructions=t),void 0!==i&&(this.sessionConfig.voice=i),void 0!==s&&(this.sessionConfig.input_audio_format=s),void 0!==o&&(this.sessionConfig.output_audio_format=o),void 0!==n&&(this.sessionConfig.input_audio_transcription=n),void 0!==r&&(this.sessionConfig.turn_detection=r),void 0!==a&&(this.sessionConfig.tools=a),void 0!==d&&(this.sessionConfig.tool_choice=d),void 0!==u&&(this.sessionConfig.temperature=u),void 0!==c&&(this.sessionConfig.max_response_output_tokens=c);const l=[].concat((a||[]).map((e=>{const t={type:"function",...e};if(this.tools[t?.name])throw new Error(`Tool "${t?.name}" has already been defined`);return t})),Object.keys(this.tools).map((e=>({type:"function",...this.tools[e].definition})))),m={...this.sessionConfig};return m.tools=l,this.realtime.isConnected()&&this.realtime.send("session.update",{session:m}),!0}sendUserMessageContent(e=[]){if(e.length){for(const t of e)"input_audio"===t.type&&(t.audio instanceof ArrayBuffer||t.audio instanceof Int16Array)&&(t.audio=s.arrayBufferToBase64(t.audio));this.realtime.send("conversation.item.create",{item:{type:"message",role:"user",content:e}})}return this.createResponse(),!0}appendInputAudio(e){return e.byteLength>0&&(this.realtime.send("input_audio_buffer.append",{audio:s.arrayBufferToBase64(e)}),this.inputAudioBuffer=s.mergeInt16Arrays(this.inputAudioBuffer,e)),!0}createResponse(){return null===this.getTurnDetectionType()&&this.inputAudioBuffer.byteLength>0&&(this.realtime.send("input_audio_buffer.commit"),this.conversation.queueInputAudio(this.inputAudioBuffer),this.inputAudioBuffer=new Int16Array(0)),this.realtime.send("response.create"),!0}cancelResponse(e,t=0){if(!e)return this.realtime.send("response.cancel"),{item:null};if(e){const i=this.conversation.getItem(e);if(!i)throw new Error(`Could not find item "${e}"`);if("message"!==i.type)throw new Error('Can only cancelResponse messages with type "message"');if("assistant"!==i.role)throw new Error('Can only cancelResponse messages with role "assistant"');this.realtime.send("response.cancel");const s=i.content.findIndex((e=>"audio"===e.type));if(-1===s)throw new Error("Could not find audio on item to cancel");return this.realtime.send("conversation.item.truncate",{item_id:e,content_index:s,audio_end_ms:Math.floor(t/this.conversation.defaultFrequency*1e3)}),{item:i}}}async waitForNextItem(){const e=await this.waitForNext("conversation.item.appended"),{item:t}=e;return{item:t}}async waitForNextCompletedItem(){const e=await this.waitForNext("conversation.item.completed"),{item:t}=e;return{item:t}}}export{o as RealtimeClient};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RealtimeUtils as t}from"./utils.js";class e{defaultFrequency=24e3;EventProcessors={"conversation.item.created":t=>{const{item:e}=t,o=JSON.parse(JSON.stringify(e));if(this.itemLookup[o.id]||(this.itemLookup[o.id]=o,this.items.push(o)),o.formatted={},o.formatted.audio=new Int16Array(0),o.formatted.text="",o.formatted.transcript="",this.queuedSpeechItems[o.id]&&(o.formatted.audio=this.queuedSpeechItems[o.id].audio,delete this.queuedSpeechItems[o.id]),o.content){const t=o.content.filter((t=>["text","input_text"].includes(t.type)));for(const e of t)o.formatted.text+=e.text}return this.queuedTranscriptItems[o.id]&&(o.formatted.transcript=this.queuedTranscriptItems.transcript,delete this.queuedTranscriptItems[o.id]),"message"===o.type?"user"===o.role?(o.status="completed",this.queuedInputAudio&&(o.formatted.audio=this.queuedInputAudio,this.queuedInputAudio=null)):o.status="in_progress":"function_call"===o.type?(o.formatted.tool={type:"function",name:o.name,call_id:o.call_id,arguments:""},o.status="in_progress"):"function_call_output"===o.type&&(o.status="completed",o.formatted.output=o.output),{item:o,delta:null}},"conversation.item.truncated":t=>{const{item_id:e,audio_end_ms:o}=t,s=this.itemLookup[e];if(!s)throw new Error(`item.truncated: Item "${e}" not found`);const r=Math.floor(o*this.defaultFrequency/1e3);return s.formatted.transcript="",s.formatted.audio=s.formatted.audio.slice(0,r),{item:s,delta:null}},"conversation.item.deleted":t=>{const{item_id:e}=t,o=this.itemLookup[e];if(!o)throw new Error(`item.deleted: Item "${e}" not found`);delete this.itemLookup[o.id];const s=this.items.indexOf(o);return s>-1&&this.items.splice(s,1),{item:o,delta:null}},"conversation.item.input_audio_transcription.completed":t=>{const{item_id:e,content_index:o,transcript:s}=t,r=this.itemLookup[e],n=s||" ";return r?(r.content[o].transcript=s,r.formatted.transcript=n,{item:r,delta:{transcript:s}}):(this.queuedTranscriptItems[e]={transcript:n},{item:null,delta:null})},"input_audio_buffer.speech_started":t=>{const{item_id:e,audio_start_ms:o}=t;return this.queuedSpeechItems[e]={audio_start_ms:o},{item:null,delta:null}},"input_audio_buffer.speech_stopped":(t,e)=>{const{item_id:o,audio_end_ms:s}=t;this.queuedSpeechItems[o]||(this.queuedSpeechItems[o]={audio_start_ms:s});const r=this.queuedSpeechItems[o];if(r.audio_end_ms=s,e){const t=Math.floor(r.audio_start_ms*this.defaultFrequency/1e3),o=Math.floor(r.audio_end_ms*this.defaultFrequency/1e3);r.audio=e.slice(t,o)}return{item:null,delta:null}},"response.created":t=>{const{response:e}=t;return this.responseLookup[e.id]||(this.responseLookup[e.id]=e,this.responses.push(e)),{item:null,delta:null}},"response.output_item.added":t=>{const{response_id:e,item:o}=t,s=this.responseLookup[e];if(!s)throw new Error(`response.output_item.added: Response "${e}" not found`);return s.output.push(o.id),{item:null,delta:null}},"response.output_item.done":t=>{const{item:e}=t;if(!e)throw new Error('response.output_item.done: Missing "item"');const o=this.itemLookup[e.id];if(!o)throw new Error(`response.output_item.done: Item "${e.id}" not found`);return o.status=e.status,{item:o,delta:null}},"response.content_part.added":t=>{const{item_id:e,part:o}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.content_part.added: Item "${e}" not found`);return s.content.push(o),{item:s,delta:null}},"response.audio_transcript.delta":t=>{const{item_id:e,content_index:o,delta:s}=t,r=this.itemLookup[e];if(!r)throw new Error(`response.audio_transcript.delta: Item "${e}" not found`);return r.content[o].transcript+=s,r.formatted.transcript+=s,{item:r,delta:{transcript:s}}},"response.audio.delta":e=>{const{item_id:o,content_index:s,delta:r}=e,n=this.itemLookup[o];if(!n)throw new Error(`response.audio.delta: Item "${o}" not found`);const i=t.base64ToArrayBuffer(r),u=new Int16Array(i);return n.formatted.audio=t.mergeInt16Arrays(n.formatted.audio,u),{item:n,delta:{audio:u}}},"response.text.delta":t=>{const{item_id:e,content_index:o,delta:s}=t,r=this.itemLookup[e];if(!r)throw new Error(`response.text.delta: Item "${e}" not found`);return r.content[o].text+=s,r.formatted.text+=s,{item:r,delta:{text:s}}},"response.function_call_arguments.delta":t=>{const{item_id:e,delta:o}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.function_call_arguments.delta: Item "${e}" not found`);return s.arguments+=o,s.formatted.tool.arguments+=o,{item:s,delta:{arguments:o}}}};constructor(){this.clear()}clear(){return this.itemLookup={},this.items=[],this.responseLookup={},this.responses=[],this.queuedSpeechItems={},this.queuedTranscriptItems={},this.queuedInputAudio=null,!0}queueInputAudio(t){return this.queuedInputAudio=t,t}processEvent(t,...e){if(!t.event_id)throw console.error(t),new Error('Missing "event_id" on event');if(!t.type)throw console.error(t),new Error('Missing "type" on event');const o=this.EventProcessors[t.type];if(!o)throw new Error(`Missing conversation event processor for "${t.type}"`);return o.call(this,t,...e)}getItem(t){return this.itemLookup[t]||null}getItems(){return this.items.slice()}}export{e as RealtimeConversation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=e=>new Promise((t=>setTimeout((()=>t()),e)));class t{constructor(){this.eventHandlers={},this.nextEventHandlers={}}clearEventHandlers(){return this.eventHandlers={},this.nextEventHandlers={},!0}on(e,t){return this.eventHandlers[e]=this.eventHandlers[e]||[],this.eventHandlers[e].push(t),t}onNext(e,t){return this.nextEventHandlers[e]=this.nextEventHandlers[e]||[],this.nextEventHandlers[e].push(t),t}off(e,t){const n=this.eventHandlers[e]||[];if(t){const s=n.indexOf(t);if(-1===s)throw new Error(`Could not turn off specified event listener for "${e}": not found as a listener`);n.splice(s,1)}else delete this.eventHandlers[e];return!0}offNext(e,t){const n=this.nextEventHandlers[e]||[];if(t){const s=n.indexOf(t);if(-1===s)throw new Error(`Could not turn off specified next event listener for "${e}": not found as a listener`);n.splice(s,1)}else delete this.nextEventHandlers[e];return!0}async waitForNext(t,n=null){const s=Date.now();let r;for(this.onNext(t,(e=>r=e));!r;){if(n){if(Date.now()-s>n)return null}await e(1)}return r}dispatch(e,t){const n=[].concat(this.eventHandlers[e]||[]);for(const e of n)e(t);const s=[].concat(this.nextEventHandlers[e]||[]);for(const e of s)e(t);return delete this.nextEventHandlers[e],!0}}export{t as RealtimeEventHandler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const t=globalThis.atob,r=globalThis.btoa;class e{static floatTo16BitPCM(t){const r=new ArrayBuffer(2*t.length),e=new DataView(r);let n=0;for(let r=0;r<t.length;r++,n+=2){let a=Math.max(-1,Math.min(1,t[r]));e.setInt16(n,a<0?32768*a:32767*a,!0)}return r}static base64ToArrayBuffer(r){const e=t(r),n=e.length,a=new Uint8Array(n);for(let t=0;t<n;t++)a[t]=e.charCodeAt(t);return a.buffer}static arrayBufferToBase64(t){t instanceof Float32Array?t=this.floatTo16BitPCM(t):t instanceof Int16Array&&(t=t.buffer);let e="",n=new Uint8Array(t);for(let t=0;t<n.length;t+=32768){let r=n.subarray(t,t+32768);e+=String.fromCharCode.apply(null,r)}return r(e)}static mergeInt16Arrays(t,r){if(t instanceof ArrayBuffer&&(t=new Int16Array(t)),r instanceof ArrayBuffer&&(r=new Int16Array(r)),!(t instanceof Int16Array&&r instanceof Int16Array))throw new Error("Both items must be Int16Array");const e=new Int16Array(t.length+r.length);for(let r=0;r<t.length;r++)e[r]=t[r];for(let n=0;n<r.length;n++)e[t.length+n]=r[n];return e}static generateId(t,r=21){const e="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";return`${t}${Array(r-t.length).fill(0).map((t=>e[Math.floor(58*Math.random())])).join("")}`}}export{e as RealtimeUtils};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o}from"react/jsx-runtime";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.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"react";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.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"./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"../stores/chatStore.js";import"../hooks/useLocalization.js";import"../hooks/useAppStyles.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/HtmlView.js";import"../components/Footer.js";import{Page as t}from"../components/Page.js";import{makeStyles as e}from"../node_modules/@griffel/react/makeStyles.esm.js";const s=e({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}}),r=({src:e,showFooter:r,title:i})=>{const m=s();return r?o(t,{hideFooter:!r,hideHeader:!0,children:o("iframe",{title:i,src:e,className:`${m.iframe} ${r?m.fixFrameHeight:""}`})}):o("iframe",{title:i,src:e,className:m.iframe})};export{r as default};
|
|
1
|
+
import{jsx as o}from"react/jsx-runtime";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.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"react";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"./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"../stores/chatStore.js";import"../hooks/useLocalization.js";import"../hooks/useAppStyles.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/HtmlView.js";import"../components/Footer.js";import{Page as t}from"../components/Page.js";import{makeStyles as e}from"../node_modules/@griffel/react/makeStyles.esm.js";const s=e({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}}),r=({src:e,showFooter:r,title:i})=>{const m=s();return r?o(t,{hideFooter:!r,hideHeader:!0,children:o("iframe",{title:i,src:e,className:`${m.iframe} ${r?m.fixFrameHeight:""}`})}):o("iframe",{title:i,src:e,className:m.iframe})};export{r as default};
|
package/dist/esm/pages/Chat.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsxs as e,jsx as o}from"react/jsx-runtime";import{useRef as t,useState as n,useEffect as r}from"react";import{useNavigate as s,useSearchParams as i}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import a from"../components/TextHeader.js";import l from"../components/TypingIndicator.js";import m from"../components/Prompt.js";import p from"../components/ChatInput.js";import{CombinedPlaceholderDialog as c}from"../components/CombinedPlaceholderDialog.js";import d from"../components/ChatMessage.js";import"../components/Header.js";import h 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"../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"./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{useChat as
|
|
1
|
+
import{jsxs as e,jsx as o}from"react/jsx-runtime";import{useRef as t,useState as n,useEffect as r}from"react";import{useNavigate as s,useSearchParams as i}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import a from"../components/TextHeader.js";import l from"../components/TypingIndicator.js";import m from"../components/Prompt.js";import p from"../components/ChatInput.js";import{CombinedPlaceholderDialog as c}from"../components/CombinedPlaceholderDialog.js";import d from"../components/ChatMessage.js";import"../components/Header.js";import h 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"./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{useChat as j}from"../hooks/useChat.js";import f from"../hooks/useLocalization.js";import{useTemplateVariables as b}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.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/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import{makeStyles as C}from"../node_modules/@griffel/react/makeStyles.esm.js";import{CalendarWeekStart24Regular as w}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-3.js";const y=C({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",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"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"}}),v=({state:C})=>{const v=y(),{t:S,tAsync:k,getLanguageInfo:F}=f(),I=s(),{messages:P,isBotTyping:T,handleSend:_,newChat:A,openChat:M}=j(C.stateMachine),H=t(null),[V,N]=i(),[B,L]=n(null),[R,O]=n(!1),[W,E]=n(!1),{service:U,currentStateName:z}=C,[D,G]=n([]),[Y,$]=n([]),[K,q]=n(!1),[J,Q]=n(),[X,Z]=h(C.context.selectedApp+"_prompts",[]),[ee,oe]=n(!1),{extractTemplateVariables:te,replaceTemplateVariables:ne,extractFilePlaceholders:re,replaceFilePlaceholders:se,handleSelectFiles:ie}=b(U.uploadFile),ae=t(!1),le=t(null);r((()=>{const e=window.history.length>1,o=Boolean(document.referrer&&document.referrer!==window.location.href);E(e||o)}),[]);r((()=>{g("SHOW_CHAT_PROMPTS")&&0===P.length&&C.service.getAppPrompts().then(Z).catch((e=>{console.error("Failed to get prompts",e)}))}),[C.service,Z,P.length]),r((()=>{setTimeout((()=>{H.current?.scrollIntoView({behavior:"smooth"})}),10)}),[P]),r((()=>{if(ae.current)return;ae.current=!0;const e=V.get("text"),o=V.get("id"),t=V.get("fid");if(e){(async()=>{const o=re(e),t=te(e);A(),o.length>0||t.length>0?($(o),G(t),q(!0),L(S(e))):L(S(e))})()}else o?M(o):t&&Q(t)}),[]),r((()=>{J&&"anonymous"===z&&le.current!==J&&(le.current=J,U.getFormById(J).then((async e=>{A();const o=F().language,t=e.prompt.replace("{{fid}}",J).replace("{{fname}}",e.name).replace("{{language}}",o);oe(!0);const n=await k(t);oe(!1),L(n),E(!1)})))}),[J,A,U,L,z,k,F,oe]),r((()=>{if(B&&!K){let e=B;Y.length>0&&(e=se(e,Y)),D.length>0&&(e=ne(e,D)),_(e),N({},{replace:!0}),L(null),G([]),$([])}}),[B,K,_,N,se,ne,Y,D]);const me=e=>{const o=V.get("append");o&&(e+="\n---\n"+o),_(e)};return e(x,{hideHeader:!0,hideFooter:!!J,children:[e("div",{id:"chat-container",className:v.chatContainer,style:{backgroundImage:`url(${g("CHAT_BACKGROUND_IMAGE_URL")})`},children:[W&&o("button",{onClick:()=>{W&&I(-1)},"aria-label":S("Tillbaka"),style:{position:"absolute",top:12,left:12,zIndex:100,background:"var(--colorNeutralBackground1)",border:"none",cursor:"pointer",padding:8,borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.08)",display:"flex",alignItems:"center",justifyContent:"center"},children:o(w,{style:{transform:"rotate(180deg)"}})}),o("div",{style:{marginLeft:W?40:0},children:o(a,{title:S(g("APP_CHAT_TITLE")||"Chatt"),onNewChat:J?void 0:()=>O(!0)})}),e("div",{className:v.chatMessages,children:[g("SHOW_CHAT_PROMPTS")&&X.length>0&&0===P.length&&o(d,{sender:"bot",content:S(g("CHAT_WELCOME")||"Välkommen!"),children:X.map(((t,n)=>e("div",{children:["> ",o("a",{href:"./#/chat",onClick:()=>{me(t.title+"\n---\n"+t.prompt)},children:S(t.title)}),o("br",{})]},`prompt-${n}`)))}),P.map(((t,n)=>e("div",{children:[(T&&n===P.length-1||!T&&n===P.length-2)&&o("div",{ref:H}),o(d,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:n===P.length-1,onSuggestionClicked:_},t.id)]},t.id))),ee&&o(d,{sender:"user",content:S("Översätter...")}),T&&o(l,{})]}),o(p,{codicent:C.context.selectedApp,disableSend:T,onSend:me,onSelectFiles:ie,getImageUrl:u.getImageUrl,getFileInfo:e=>U.getFileInfo(e)})]}),o(m,{open:R,title:S("Vill du rensa chatten?"),content:S("En ny startas, men chatten kommer först sparas."),onYes:()=>{O(!1),A()},onNo:()=>O(!1)}),o(c,{open:K,templateVariables:D,filePlaceholders:Y,onTemplateVariablesChange:G,onFilePlaceholdersChange:$,onConfirm:()=>q(!1),onCancel:()=>{q(!1),L(null),G([]),$([])},uploadFile:U.uploadFile})]})};export{v as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as i,useCallback as n,useEffect as r}from"react";import{useSearchParams as a,useNavigate as s}from"react-router-dom";import{getConfigValue as m}from"../config/index.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import l 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{CodicentService as p}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.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{getGpsLocation as c}from"../utils/device.js";import"./AppFrame.js";import"./Chat.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"../stores/chatStore.js";import d from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import g from"../hooks/useToaster.js";import"../components/FileThumbnail.js";import u from"../components/MessageInput.js";import j 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/HtmlView.js";import"../components/Footer.js";import{Page as f}from"../components/Page.js";import{makeStyles as h}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as S}from"../node_modules/@griffel/core/index.esm.js";import{tokens as v}from"../node_modules/@fluentui/tokens/lib/tokens.js";const _=h({main:{flexGrow:1,...S.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},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:v.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),x=({state:h})=>{const S=_(),{t:v}=d(),[x,I]=t(!1),P=i(null),b=i(null),C=i(null),[F,w]=t(null),[U,A]=t([]),{service:E}=h,[y
|
|
1
|
+
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as i,useCallback as n,useEffect as r}from"react";import{useSearchParams as a,useNavigate as s}from"react-router-dom";import{getConfigValue as m}from"../config/index.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import l 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{CodicentService as p}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/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{getGpsLocation as c}from"../utils/device.js";import"./AppFrame.js";import"./Chat.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"../stores/chatStore.js";import d from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import g from"../hooks/useToaster.js";import"../components/FileThumbnail.js";import u from"../components/MessageInput.js";import j 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/HtmlView.js";import"../components/Footer.js";import{Page as f}from"../components/Page.js";import{makeStyles as h}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as S}from"../node_modules/@griffel/core/index.esm.js";import{tokens as v}from"../node_modules/@fluentui/tokens/lib/tokens.js";const _=h({main:{flexGrow:1,...S.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},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:v.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),x=({state:h})=>{const S=_(),{t:v}=d(),[x,I]=t(!1),P=i(null),b=i(null),C=i(null),[F,w]=t(null),[U,A]=t([]),{service:E}=h,[M,y]=a(),[T,k]=t(void 0),[L,O]=t(),H=g(),$=s(),B=n((o=>{for(const e of o)E.getFileInfo(e).then((o=>{A((e=>[...e,o]))}))}),[E,A]),D=n((o=>{const e=new FormData;e.append("file",o),E.uploadFile(o.name,e).then((o=>{B([o])})).catch((()=>{H.notify(v("Error"),v("Error uploading pasted image"),"")}))}),[E,B,H,v]),G=o=>{I(o)};r((()=>{const o=M.get("text"),e=M.get("url"),t=M.get("parentId");o&&(k(o),M.delete("text")),t&&(O(t),M.delete("parentId")),e&&(M.delete("url"),k(((o||"")+" "+e).trim())),y(M,{replace:!0})}),[M,y,k,E,B]);return o(f,{hideHeader:!0,children:e("div",{className:S.container,style:{backgroundImage:`url(${m("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[o(l,{title:m("APP_SAVE_TITLE")?v(m("APP_SAVE_TITLE")):v("Spara")}),o(u,{disableSend:!0,defaultText:T,onSend:o=>{o=`${o}${F?" "+F:""}${U.length>0?"\n":""}${U.map((o=>`#file:${o.id}`)).join(" ")}`,E.sendMessage(o,L).then((()=>{H.notify(v("Meddelande"),v("Meddelandet är sparat."),""),L&&(O(void 0),$(-1))}))},files:U,onFilesChange:A,isUploading:x,onHandleDefaultFiles:B,onUploadFile:()=>{P.current?.triggerUpload(),console.log("attach-file")},onUploadImage:m("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{b.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:m("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{C.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:p.getImageUrl,onLocationChange:m("COMPOSE_HIDE_LOCATION")?void 0:o=>{o?(async()=>{console.log("attach-location");const o=await c();o?(H.notify(v("Position"),v("Position tillagd."),""),w(`#gps(${o.coords.latitude},${o.coords.longitude})`)):console.log("Failed to get GPS location")})():(w(null),H.notify(v("Position"),v("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!F,onImagePasted:D}),o(j,{ref:P,onFileUploaded:B,onUploading:G,multiple:!0,codicentService:E}),o(j,{codicentService:E,ref:b,onFileUploaded:B,onUploading:G,multiple:!0,accept:"image/*"}),o(j,{codicentService:E,ref:C,onFileUploaded:B,onUploading:G,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{x as Compose,x 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 s}from"react";import{CodicentService as a}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 m 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 p from"../components/VoiceIcon.js";import l from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../config/index.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 d from"../components/MessageInput.js";import u 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.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"../stores/chatStore.js";import j from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import f from"../hooks/useToaster.js";import{useSearchParams as h}from"react-router-dom";import{l as v}from"../node_modules/lodash/lodash.js";import{makeStyles as k}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as S}from"../node_modules/@griffel/core/index.esm.js";import{tokens as x}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{MessageBar as b}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as w}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";const y=k({main:{flexGrow:1,...S.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:x.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"}}),_=({state:k,voice:S})=>{const x=y(),{t:_}=j(),[I,C]=t(!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 s}from"react";import{CodicentService as a}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 m 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 p from"../components/VoiceIcon.js";import l from"../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"../components/FileThumbnail.js";import d from"../components/MessageInput.js";import u 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.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"../stores/chatStore.js";import j from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import f from"../hooks/useToaster.js";import{useSearchParams as h}from"react-router-dom";import{l as v}from"../node_modules/lodash/lodash.js";import{makeStyles as k}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as S}from"../node_modules/@griffel/core/index.esm.js";import{tokens as x}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{MessageBar as b}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as w}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";const y=k({main:{flexGrow:1,...S.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:x.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"}}),_=({state:k,voice:S})=>{const x=y(),{t:_}=j(),[I,C]=t(!1),M=n(null),U=n(null),B=n(null),[A]=t(null),[F,P]=t([]),{service:T}=k,[E,N]=h(),[O,$]=t(""),[L,R]=t(void 0),V=f(),[H,z]=t(void 0),[D,G]=t("info"),W=r((e=>{for(const o of e)T.getFileInfo(o).then((e=>{P((o=>[...o,e]))}))}),[T,P]),J=r((e=>{const o=new FormData;o.append("file",e),T.uploadFile(e.name,o).then((e=>{W([e])})).catch((()=>{V.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[T,W,V,_]),K=e=>{C(e)};i((()=>{const e=E.get("text"),o=E.get("url");e&&($(e),E.delete("text")),o&&(E.delete("url"),$(((e||"")+" "+o).trim())),N(E,{replace:!0})}),[E,N,$,T,W]);const X=r((async e=>{if(!e||e.length<10)return;z(_("Analyserar...")),G("info");const o=await T.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 l(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++;z(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),G(4===t?"success":"warning")}catch{z("Error: "+e.content),G("error")}}}),[T]),Y=s((()=>v.debounce(X,2e3)),[X]);return i((()=>()=>{Y.cancel()}),[Y]),e(g,{hideHeader:!0,children:o("div",{className:x.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[S&&c("SHOW_VOICE_BUTTON")&&e("div",{className:x.voiceIcon,children:e(p,{voice:S})}),e(m,{title:c("APP_SAVE_TITLE")?_(c("APP_SAVE_TITLE")):_("Spara")}),e(d,{defaultText:O,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${k.context.name||k.context.user?.email||k.context.nickname||"-"}`}${A?" "+A:""}${F.length>0?"\n":""}${F.map((e=>`#file:${e.id}`)).join(" ")}`,T.sendMessage(e).then((()=>{V.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:F,onFilesChange:P,isUploading:I,onUploadImage:()=>{U.current?.triggerUpload()},onUploadCamera:()=>{B.current?.triggerUpload()},getImageUrl:a.getImageUrl,hasLocation:!!A,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==L&&(R(e),e&&e.trim().length>0?Y(e):(z(void 0),Y.cancel()))},onImagePasted:J}),H&&o("div",{className:x.review,children:[e("h3",{children:_("Analys")}),e(b,{intent:D,layout:"multiline",children:e(w,{children:_(H)})})]}),e(u,{ref:M,onFileUploaded:W,onUploading:K,multiple:!0,codicentService:T}),e(u,{codicentService:T,ref:U,onFileUploaded:W,onUploading:K,multiple:!0,accept:"image/*"}),e(u,{codicentService:T,ref:B,onFileUploaded:W,onUploading:K,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{CodicentService as s}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 l 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 m from"../components/VoiceIcon.js";import p from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../config/index.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 d}from"../utils/device.js";import"../components/FileThumbnail.js";import u from"../components/MessageInput.js";import f 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.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"../stores/chatStore.js";import h from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import j from"../hooks/useToaster.js";import{useSearchParams as x}from"react-router-dom";import{l as S}from"../node_modules/lodash/lodash.js";import{makeStyles as v}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as y}from"../node_modules/@griffel/core/index.esm.js";import{tokens as k}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Text as w}from"../node_modules/@fluentui/react-text/lib/components/Text/Text.js";import{Spinner as b}from"../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js";import{Card as C}from"../node_modules/@fluentui/react-card/lib/components/Card/Card.js";import{MessageBar as M}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as N}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";const _=v({main:{flexGrow:1,...y.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...y.gap("16px"),...y.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...y.gap("16px"),...y.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",...y.gap("8px"),overflowY:"auto",...y.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...y.gap("8px"),overflowY:"auto",...y.padding("8px"),maxHeight:"300px"},historyCard:{...y.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:k.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...y.gap("4px")},historyDate:{fontSize:k.fontSizeBase200,color:k.colorNeutralForeground3},historyText:{fontSize:k.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:k.fontSizeBase400,fontWeight:k.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:k.colorNeutralForeground3,padding:"20px"}}),T=({state:v,voice:y})=>{const k=_(),{t:T}=h(),[I,B]=t(!1),A=n(null),E=n(null),F=n(null),[U]=t(null),[D,$]=t([]),{service:P}=v,[O,z]=x(),[L,R]=t(""),[H,W]=t(void 0),V=j(),[G,J]=t(void 0),[Y,K]=t("info"),[X,q]=t([]),[Q,Z]=t(!1),ee=d(),oe=r((e=>{for(const o of e)P.getFileInfo(o).then((e=>{$((o=>[...o,e]))}))}),[P,$]),te=r((e=>{const o=new FormData;o.append("file",e),P.uploadFile(e.name,o).then((e=>{oe([e])})).catch((()=>{V.notify(T("Error"),T("Error uploading pasted image"),"")}))}),[P,oe,V,T]),ne=e=>{B(e)},re=r((async()=>{Z(!0);try{const e=await P.getMessages(["crm"]);q(e)}catch(e){console.error("Error loading CRM messages:",e),V.notify(T("Error"),T("Failed to load CRM messages"),"","error")}finally{Z(!1)}}),[P,V,T]);i((()=>{re()}),[re]),i((()=>{const e=O.get("text"),o=O.get("url");e&&(R(e),O.delete("text")),o&&(O.delete("url"),R(((e||"")+" "+o).trim())),z(O,{replace:!0})}),[O,z,R,P,oe]);const ie=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${v.context.name||v.context.user?.email||v.context.nickname||"-"}`}${U?" "+U:""}${D.length>0?"\n":""}${D.map((e=>`#file:${e.id}`)).join(" ")}`,P.sendMessage(e).then((()=>{V.notify(T("Meddelande"),T("Meddelandet är sparat."),""),re(),W(""),J(void 0)}))},ae=r((async e=>{if(!e||e.length<10)return;J(T("Analyserar...")),K("info");const o=await P.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 p(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++;J(T(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{J("Error: "+e.content),K("error")}}}),[P,T]),se=a((()=>S.debounce(ae,2e3)),[ae]);i((()=>()=>{se.cancel()}),[se]);const le=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?T("Just now"):r<60?`${r} ${T("minutes ago")}`:i<24?`${i} ${T("hours ago")}`:a<7?`${a} ${T("days ago")}`:t.toLocaleDateString()},me=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?"...":"")},pe=()=>o("div",{className:ee?k.historySectionMobile:k.historySection,children:[e(w,{className:k.historyTitle,children:T("Tidigare sparade")}),Q?e("div",{className:k.emptyState,children:e(b,{size:"small"})}):0===X.length?e("div",{className:k.emptyState,children:e(w,{children:T("Inga sparade meddelanden än")})}):X.map((t=>e(C,{className:k.historyCard,onClick:()=>(e=>{const o=me(e.content);W(o)})(t),children:o("div",{className:k.historyCardContent,children:[e(w,{className:k.historyDate,children:le(t.createdAt)}),e(w,{className:k.historyText,children:me(t.content)})]})},t.id)))]});return e(g,{hideHeader:!0,children:o("div",{className:ee?k.containerMobile:k.container,children:[!ee&&pe(),o("div",{className:ee?k.inputSectionMobile:k.inputSection,style:ee?void 0:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[y&&c("SHOW_VOICE_BUTTON")&&e("div",{className:k.voiceIcon,children:e(m,{voice:y})}),e(l,{title:c("APP_SAVE_TITLE")?T(c("APP_SAVE_TITLE")):T("Spara")}),e(u,{defaultText:L,onSend:ie,files:D,onFilesChange:$,isUploading:I,onUploadImage:()=>{E.current?.triggerUpload()},onUploadCamera:()=>{F.current?.triggerUpload()},getImageUrl:s.getImageUrl,hasLocation:!!U,disableSend:!0,rows:9,placeholder:T("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(W(e),e&&e.trim().length>0?se(e):(J(void 0),se.cancel()))},onImagePasted:te}),G&&o("div",{className:k.review,children:[e("h3",{children:T("Analys")}),e(M,{intent:Y,layout:"multiline",children:e(N,{children:T(G)})})]}),e(f,{ref:A,onFileUploaded:oe,onUploading:ne,multiple:!0,codicentService:P}),e(f,{codicentService:P,ref:E,onFileUploaded:oe,onUploading:ne,multiple:!0,accept:"image/*"}),e(f,{codicentService:P,ref:F,onFileUploaded:oe,onUploading:ne,multiple:!0,accept:"image/*",capture:"environment"})]}),ee&&pe()]})})};export{T as CrmPagePersistent,T 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{CodicentService as s}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 l 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 m from"../components/VoiceIcon.js";import p from"../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{isMobileDevice as d}from"../utils/device.js";import"../components/FileThumbnail.js";import u from"../components/MessageInput.js";import f 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.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"../stores/chatStore.js";import h from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import j from"../hooks/useToaster.js";import{useSearchParams as x}from"react-router-dom";import{l as S}from"../node_modules/lodash/lodash.js";import{makeStyles as v}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as y}from"../node_modules/@griffel/core/index.esm.js";import{tokens as k}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Text as w}from"../node_modules/@fluentui/react-text/lib/components/Text/Text.js";import{Spinner as b}from"../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js";import{Card as C}from"../node_modules/@fluentui/react-card/lib/components/Card/Card.js";import{MessageBar as M}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as N}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";const _=v({main:{flexGrow:1,...y.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...y.gap("16px"),...y.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...y.gap("16px"),...y.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",...y.gap("8px"),overflowY:"auto",...y.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...y.gap("8px"),overflowY:"auto",...y.padding("8px"),maxHeight:"300px"},historyCard:{...y.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:k.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...y.gap("4px")},historyDate:{fontSize:k.fontSizeBase200,color:k.colorNeutralForeground3},historyText:{fontSize:k.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:k.fontSizeBase400,fontWeight:k.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:k.colorNeutralForeground3,padding:"20px"}}),T=({state:v,voice:y})=>{const k=_(),{t:T}=h(),[I,B]=t(!1),A=n(null),E=n(null),F=n(null),[U]=t(null),[D,$]=t([]),{service:P}=v,[O,z]=x(),[L,R]=t(""),[H,W]=t(void 0),V=j(),[G,J]=t(void 0),[Y,K]=t("info"),[X,q]=t([]),[Q,Z]=t(!1),ee=d(),oe=r((e=>{for(const o of e)P.getFileInfo(o).then((e=>{$((o=>[...o,e]))}))}),[P,$]),te=r((e=>{const o=new FormData;o.append("file",e),P.uploadFile(e.name,o).then((e=>{oe([e])})).catch((()=>{V.notify(T("Error"),T("Error uploading pasted image"),"")}))}),[P,oe,V,T]),ne=e=>{B(e)},re=r((async()=>{Z(!0);try{const e=await P.getMessages(["crm"]);q(e)}catch(e){console.error("Error loading CRM messages:",e),V.notify(T("Error"),T("Failed to load CRM messages"),"","error")}finally{Z(!1)}}),[P,V,T]);i((()=>{re()}),[re]),i((()=>{const e=O.get("text"),o=O.get("url");e&&(R(e),O.delete("text")),o&&(O.delete("url"),R(((e||"")+" "+o).trim())),z(O,{replace:!0})}),[O,z,R,P,oe]);const ie=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${v.context.name||v.context.user?.email||v.context.nickname||"-"}`}${U?" "+U:""}${D.length>0?"\n":""}${D.map((e=>`#file:${e.id}`)).join(" ")}`,P.sendMessage(e).then((()=>{V.notify(T("Meddelande"),T("Meddelandet är sparat."),""),re(),W(""),J(void 0)}))},ae=r((async e=>{if(!e||e.length<10)return;J(T("Analyserar...")),K("info");const o=await P.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 p(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++;J(T(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{J("Error: "+e.content),K("error")}}}),[P,T]),se=a((()=>S.debounce(ae,2e3)),[ae]);i((()=>()=>{se.cancel()}),[se]);const le=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?T("Just now"):r<60?`${r} ${T("minutes ago")}`:i<24?`${i} ${T("hours ago")}`:a<7?`${a} ${T("days ago")}`:t.toLocaleDateString()},me=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?"...":"")},pe=()=>o("div",{className:ee?k.historySectionMobile:k.historySection,children:[e(w,{className:k.historyTitle,children:T("Tidigare sparade")}),Q?e("div",{className:k.emptyState,children:e(b,{size:"small"})}):0===X.length?e("div",{className:k.emptyState,children:e(w,{children:T("Inga sparade meddelanden än")})}):X.map((t=>e(C,{className:k.historyCard,onClick:()=>(e=>{const o=me(e.content);W(o)})(t),children:o("div",{className:k.historyCardContent,children:[e(w,{className:k.historyDate,children:le(t.createdAt)}),e(w,{className:k.historyText,children:me(t.content)})]})},t.id)))]});return e(g,{hideHeader:!0,children:o("div",{className:ee?k.containerMobile:k.container,children:[!ee&&pe(),o("div",{className:ee?k.inputSectionMobile:k.inputSection,style:ee?void 0:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[y&&c("SHOW_VOICE_BUTTON")&&e("div",{className:k.voiceIcon,children:e(m,{voice:y})}),e(l,{title:c("APP_SAVE_TITLE")?T(c("APP_SAVE_TITLE")):T("Spara")}),e(u,{defaultText:L,onSend:ie,files:D,onFilesChange:$,isUploading:I,onUploadImage:()=>{E.current?.triggerUpload()},onUploadCamera:()=>{F.current?.triggerUpload()},getImageUrl:s.getImageUrl,hasLocation:!!U,disableSend:!0,rows:9,placeholder:T("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(W(e),e&&e.trim().length>0?se(e):(J(void 0),se.cancel()))},onImagePasted:te}),G&&o("div",{className:k.review,children:[e("h3",{children:T("Analys")}),e(M,{intent:Y,layout:"multiline",children:e(N,{children:T(G)})})]}),e(f,{ref:A,onFileUploaded:oe,onUploading:ne,multiple:!0,codicentService:P}),e(f,{codicentService:P,ref:E,onFileUploaded:oe,onUploading:ne,multiple:!0,accept:"image/*"}),e(f,{codicentService:P,ref:F,onFileUploaded:oe,onUploading:ne,multiple:!0,accept:"image/*",capture:"environment"})]}),ee&&pe()]})})};export{T as CrmPagePersistent,T 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"../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 s,useEffect as m}from"react";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as p}from"../config/index.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 a}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"../stores/chatStore.js";import c from"../hooks/useLocalization.js";import"../hooks/useAppStyles.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 l from"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as d}from"../components/Page.js";import{useSearchParams as j,useNavigate as u}from"react-router-dom";import{makeStyles as h}from"../node_modules/@griffel/react/makeStyles.esm.js";import{Button as g}from"../node_modules/@fluentui/react-button/lib/components/Button/Button.js";const f=h({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:h,tAsync:k}=c(),[b]=j(),C=u(),_=b.get("id"),v=f(),[S,
|
|
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"../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 s,useEffect as m}from"react";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as p}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 a}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"../stores/chatStore.js";import c from"../hooks/useLocalization.js";import"../hooks/useAppStyles.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 l from"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as d}from"../components/Page.js";import{useSearchParams as j,useNavigate as u}from"react-router-dom";import{makeStyles as h}from"../node_modules/@griffel/react/makeStyles.esm.js";import{Button as g}from"../node_modules/@fluentui/react-button/lib/components/Button/Button.js";const f=h({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:h,tAsync:k}=c(),[b]=j(),C=u(),_=b.get("id"),v=f(),[S,M]=s(""),[y,P]=s(!1);return m((()=>{(async()=>{const o=p("FORM_ACCEPT_MARKDOWN");if(o){P(!0);const t=await k(o);P(!1),M(t.replace("{{code}}",a(_||"")))}})()}),[k,_]),o(d,{hideFooter:!0,hideHeader:!0,children:o("div",{className:v.container,style:{backgroundImage:`url(${p("FORM_BACKGROUND_IMAGE_URL")})`},children:t(l,{children:[y&&o(n,{children:h("Översätter...")}),p("FORM_ACCEPT_MARKDOWN")&&S&&!y&&o(r,{content:S}),!p("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:h("Din kod för formuläret")}),o("p",{className:v.instructionParagraph,children:h("Instruktioner:")}),t("ol",{className:v.orderedList,children:[o("li",{children:h("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:h("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(n,{size:500,children:h("Din kod är (skriv ner den):")}),o(n,{size:600,style:{userSelect:"all"},children:a(_||"")})]}),_&&o(g,{appearance:"primary",onClick:()=>C(`/chat?fid=${_}`),children:h("Starta")})]})})})};export{k as default};
|