codicent-app-sdk 0.3.98 → 0.3.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +7 -0
  2. package/dist/cjs/components/AiInput.js +1 -1
  3. package/dist/cjs/components/AudioIcon.js +1 -1
  4. package/dist/cjs/components/ChatInput.js +1 -1
  5. package/dist/cjs/components/ChatMessage.js +1 -1
  6. package/dist/cjs/components/CombinedPlaceholderDialog.js +1 -1
  7. package/dist/cjs/components/Footer.js +1 -1
  8. package/dist/cjs/components/Header.d.ts.map +1 -1
  9. package/dist/cjs/components/Header.js +1 -1
  10. package/dist/cjs/components/HtmlView.js +1 -1
  11. package/dist/cjs/components/MessageInput.js +1 -1
  12. package/dist/cjs/components/MessageItem.js +1 -1
  13. package/dist/cjs/components/Profile.js +1 -1
  14. package/dist/cjs/components/Prompt.js +1 -1
  15. package/dist/cjs/components/SnapFooter.js +1 -1
  16. package/dist/cjs/components/TextHeader.js +1 -1
  17. package/dist/cjs/components/TypingIndicator.js +1 -1
  18. package/dist/cjs/components/UploadFile.js +1 -1
  19. package/dist/cjs/components/UrlProcessor.js +1 -1
  20. package/dist/cjs/components/VoiceIcon.js +1 -1
  21. package/dist/cjs/config/index.d.ts +8 -0
  22. package/dist/cjs/config/index.d.ts.map +1 -1
  23. package/dist/cjs/config/index.js +1 -1
  24. package/dist/cjs/hooks/useAuthState.js +1 -1
  25. package/dist/cjs/hooks/useChat.js +1 -1
  26. package/dist/cjs/hooks/useCodicentApp.js +1 -1
  27. package/dist/cjs/hooks/useCodicentState.js +1 -1
  28. package/dist/cjs/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
  29. package/dist/cjs/hooks/useRealtimeVoiceAI.js +1 -1
  30. package/dist/cjs/index.js +1 -1
  31. package/dist/cjs/pages/AppFrame.js +1 -1
  32. package/dist/cjs/pages/Chat.js +1 -1
  33. package/dist/cjs/pages/Compose.js +1 -1
  34. package/dist/cjs/pages/CrmPage.js +1 -1
  35. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  36. package/dist/cjs/pages/FormAccept.js +1 -1
  37. package/dist/cjs/pages/FormInvite.js +1 -1
  38. package/dist/cjs/pages/HtmlViewer.js +1 -1
  39. package/dist/cjs/pages/ImageView.js +1 -1
  40. package/dist/cjs/pages/Login.js +1 -1
  41. package/dist/cjs/pages/Purchase.js +1 -1
  42. package/dist/cjs/pages/Sales.js +1 -1
  43. package/dist/cjs/pages/Search.js +1 -1
  44. package/dist/cjs/pages/Snap.js +1 -1
  45. package/dist/cjs/services/codicent.js +1 -1
  46. package/dist/cjs/utils/appState.d.ts +45 -0
  47. package/dist/cjs/utils/appState.d.ts.map +1 -1
  48. package/dist/cjs/utils/appState.js +1 -1
  49. package/dist/cjs/utils/cacheManager.d.ts +85 -0
  50. package/dist/cjs/utils/cacheManager.d.ts.map +1 -0
  51. package/dist/cjs/utils/cacheManager.js +1 -0
  52. package/dist/cjs/utils/index.d.ts +2 -0
  53. package/dist/cjs/utils/index.d.ts.map +1 -1
  54. package/dist/esm/components/AiInput.js +1 -1
  55. package/dist/esm/components/AudioIcon.js +1 -1
  56. package/dist/esm/components/ChatInput.js +1 -1
  57. package/dist/esm/components/ChatMessage.js +1 -1
  58. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  59. package/dist/esm/components/Footer.js +1 -1
  60. package/dist/esm/components/Header.d.ts.map +1 -1
  61. package/dist/esm/components/Header.js +1 -1
  62. package/dist/esm/components/HtmlView.js +1 -1
  63. package/dist/esm/components/MessageInput.js +1 -1
  64. package/dist/esm/components/MessageItem.js +1 -1
  65. package/dist/esm/components/Profile.js +1 -1
  66. package/dist/esm/components/Prompt.js +1 -1
  67. package/dist/esm/components/SnapFooter.js +1 -1
  68. package/dist/esm/components/TextHeader.js +1 -1
  69. package/dist/esm/components/TypingIndicator.js +1 -1
  70. package/dist/esm/components/UploadFile.js +1 -1
  71. package/dist/esm/components/UrlProcessor.js +1 -1
  72. package/dist/esm/components/VoiceIcon.js +1 -1
  73. package/dist/esm/config/index.d.ts +8 -0
  74. package/dist/esm/config/index.d.ts.map +1 -1
  75. package/dist/esm/config/index.js +1 -1
  76. package/dist/esm/hooks/useAuthState.js +1 -1
  77. package/dist/esm/hooks/useChat.js +1 -1
  78. package/dist/esm/hooks/useCodicentApp.js +1 -1
  79. package/dist/esm/hooks/useCodicentState.js +1 -1
  80. package/dist/esm/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
  81. package/dist/esm/hooks/useRealtimeVoiceAI.js +1 -1
  82. package/dist/esm/index.js +1 -1
  83. package/dist/esm/pages/AppFrame.js +1 -1
  84. package/dist/esm/pages/Chat.js +1 -1
  85. package/dist/esm/pages/Compose.js +1 -1
  86. package/dist/esm/pages/CrmPage.js +1 -1
  87. package/dist/esm/pages/CrmPagePersistent.js +1 -1
  88. package/dist/esm/pages/FormAccept.js +1 -1
  89. package/dist/esm/pages/FormInvite.js +1 -1
  90. package/dist/esm/pages/HtmlViewer.js +1 -1
  91. package/dist/esm/pages/ImageView.js +1 -1
  92. package/dist/esm/pages/Login.js +1 -1
  93. package/dist/esm/pages/Purchase.js +1 -1
  94. package/dist/esm/pages/Sales.js +1 -1
  95. package/dist/esm/pages/Search.js +1 -1
  96. package/dist/esm/pages/Snap.js +1 -1
  97. package/dist/esm/services/codicent.js +1 -1
  98. package/dist/esm/utils/appState.d.ts +45 -0
  99. package/dist/esm/utils/appState.d.ts.map +1 -1
  100. package/dist/esm/utils/appState.js +1 -1
  101. package/dist/esm/utils/cacheManager.d.ts +85 -0
  102. package/dist/esm/utils/cacheManager.d.ts.map +1 -0
  103. package/dist/esm/utils/cacheManager.js +1 -0
  104. package/dist/esm/utils/index.d.ts +2 -0
  105. package/dist/esm/utils/index.d.ts.map +1 -1
  106. package/dist/index.d.ts +139 -1
  107. package/package.json +1 -1
@@ -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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"}
@@ -1 +1 @@
1
- "use strict";var _=require("../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);exports.AppConfig=T,exports.getConfigValue=function(_){return E[_]},exports.initCodicentApp=function(T={}){for(const[_,E]of Object.entries(T))void 0!==E&&(O[_]=E);void 0!==T.TRANSLATIONS&&(globalThis.__CODICENT_REINIT_I18N__=!0),_.default.initialize({startOnLoad:!1})};
1
+ "use strict";var _=require("../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);exports.AppConfig=T,exports.getConfigValue=function(_){return E[_]},exports.initCodicentApp=function(T={}){for(const[_,E]of Object.entries(T))void 0!==E&&(O[_]=E);void 0!==T.TRANSLATIONS&&(globalThis.__CODICENT_REINIT_I18N__=!0),_.default.initialize({startOnLoad:!1})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=o=>{const{isAuthenticated:t,getAccessTokenSilently:n,user:i,isLoading:a,logout:u,getAccessTokenWithPopup:c,loginWithRedirect:l,loginWithPopup:g}=o,[p,q]=e.useState(null),[j,C]=e.useState(void 0),[m,E]=e.useState(null),[P,d]=e.useState(""),_=e.useMemo((()=>new r.CodicentService({API_BASE_URL:s.getConfigValue("API_BASE_URL"),APP_LOG_CODICENT:s.getConfigValue("APP_LOG_CODICENT"),APP_LOG_TOKEN:s.getConfigValue("APP_LOG_TOKEN"),APP_NAME:s.getConfigValue("APP_NAME"),APP_PREFIX:s.getConfigValue("APP_PREFIX"),APP_TEMPLATE:s.getConfigValue("APP_TEMPLATE"),BUTTON_TAG:s.getConfigValue("BUTTON_TAG"),STRIPE_PUBLIC_KEY:s.getConfigValue("STRIPE_PUBLIC_KEY"),SUBSCRIPTION_NEEDED:s.getConfigValue("SUBSCRIPTION_NEEDED"),USER_PREFIX:s.getConfigValue("USER_PREFIX"),ANONYMOUS_TOKEN:s.getConfigValue("ANONYMOUS_TOKEN")})),[]);e.useEffect((()=>{!a&&t&&(async()=>{try{const e=await n({});console.debug("CODICENT: ACCESS TOKEN",e),q(e)}catch(e){console.debug("CODICENT: Failed to get access token",e);const r=e;if(r&&"object"==typeof r&&"error"in r&&"login_required"===r.error)console.warn("CODICENT: Login required"),T();else if(r&&"object"==typeof r&&"error"in r&&"consent_required"===r.error)try{const e=await c();if(!e)return void E("Failed to get access token: no token from auth0 with popup");console.log("CODICENT: GOT ACCESS TOKEN"),q(e)}catch(e){console.warn("CODICENT: Failed to get access token with popup",e),T()}else E("Failed to get access token: "+(r.message?.toString()||r.toString())),console.log("CODICENT: ACCESS TOKEN ERROR",r)}})().then((()=>{}))}),[t,c,n,l,a]),e.useEffect((()=>{if(i&&i.sub&&p&&void 0===j){let e=!0;return _.loginUser(i.sub,p).then((r=>{e&&(null===r?C(!1):""===r?E("Kontrollera internetanslutningen och försök igen."):(_.setToken(p),_.getNickname().then(d),C(!0)))})).catch((()=>{e&&(E("Ett fel uppstod. Försök igen senare."),C(!1))})),()=>{e=!1}}}),[i,p,j,_]);const T=e.useCallback((()=>{_.logout(),q(null),E(null),C(void 0),d(""),u({logoutParams:{returnTo:s.getConfigValue("AUTH_REDIRECT_URL")}})}),[_,u]),S=e.useCallback((async e=>{const r=await _.registerUser(e,i.email,i.sub,p);return r&&(_.setToken(p),C(!0)),r}),[_,i,p]);e.useEffect((()=>{_.onUnauthorized=T}),[_]);const A=e.useCallback((async e=>{try{await g({authorizationParams:{connection:"email",login_hint:e}})}catch(e){console.error("Passwordless login failed:",e),E(`Passwordless login failed: ${e}`)}}),[g]);return e.useMemo((()=>({isAuthenticated:t,isRegistered:j,accessToken:p,authError:m,isLoading:a,user:i,nickname:P,logout:T,registerUser:S,codicentService:_,loginWithRedirect:l,loginPasswordless:A})),[t,j,p,m,a,i,P,T,S,_,l,A])};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=o=>{const{isAuthenticated:t,getAccessTokenSilently:n,user:i,isLoading:a,logout:u,getAccessTokenWithPopup:c,loginWithRedirect:l,loginWithPopup:g}=o,[p,q]=e.useState(null),[j,C]=e.useState(void 0),[m,E]=e.useState(null),[P,d]=e.useState(""),_=e.useMemo((()=>new r.CodicentService({API_BASE_URL:s.getConfigValue("API_BASE_URL"),APP_LOG_CODICENT:s.getConfigValue("APP_LOG_CODICENT"),APP_LOG_TOKEN:s.getConfigValue("APP_LOG_TOKEN"),APP_NAME:s.getConfigValue("APP_NAME"),APP_PREFIX:s.getConfigValue("APP_PREFIX"),APP_TEMPLATE:s.getConfigValue("APP_TEMPLATE"),BUTTON_TAG:s.getConfigValue("BUTTON_TAG"),STRIPE_PUBLIC_KEY:s.getConfigValue("STRIPE_PUBLIC_KEY"),SUBSCRIPTION_NEEDED:s.getConfigValue("SUBSCRIPTION_NEEDED"),USER_PREFIX:s.getConfigValue("USER_PREFIX"),ANONYMOUS_TOKEN:s.getConfigValue("ANONYMOUS_TOKEN")})),[]);e.useEffect((()=>{!a&&t&&(async()=>{try{const e=await n({});console.debug("CODICENT: ACCESS TOKEN",e),q(e)}catch(e){console.debug("CODICENT: Failed to get access token",e);const r=e;if(r&&"object"==typeof r&&"error"in r&&"login_required"===r.error)console.warn("CODICENT: Login required"),T();else if(r&&"object"==typeof r&&"error"in r&&"consent_required"===r.error)try{const e=await c();if(!e)return void E("Failed to get access token: no token from auth0 with popup");console.log("CODICENT: GOT ACCESS TOKEN"),q(e)}catch(e){console.warn("CODICENT: Failed to get access token with popup",e),T()}else E("Failed to get access token: "+(r.message?.toString()||r.toString())),console.log("CODICENT: ACCESS TOKEN ERROR",r)}})().then((()=>{}))}),[t,c,n,l,a]),e.useEffect((()=>{if(i&&i.sub&&p&&void 0===j){let e=!0;return _.loginUser(i.sub,p).then((r=>{e&&(null===r?C(!1):""===r?E("Kontrollera internetanslutningen och försök igen."):(_.setToken(p),_.getNickname().then(d),C(!0)))})).catch((()=>{e&&(E("Ett fel uppstod. Försök igen senare."),C(!1))})),()=>{e=!1}}}),[i,p,j,_]);const T=e.useCallback((()=>{_.logout(),q(null),E(null),C(void 0),d(""),u({logoutParams:{returnTo:s.getConfigValue("AUTH_REDIRECT_URL")}})}),[_,u]),S=e.useCallback((async e=>{const r=await _.registerUser(e,i.email,i.sub,p);return r&&(_.setToken(p),C(!0)),r}),[_,i,p]);e.useEffect((()=>{_.onUnauthorized=T}),[_]);const A=e.useCallback((async e=>{try{await g({authorizationParams:{connection:"email",login_hint:e}})}catch(e){console.error("Passwordless login failed:",e),E(`Passwordless login failed: ${e}`)}}),[g]);return e.useMemo((()=>({isAuthenticated:t,isRegistered:j,accessToken:p,authError:m,isLoading:a,user:i,nickname:P,logout:T,registerUser:S,codicentService:_,loginWithRedirect:l,loginPasswordless:A})),[t,j,p,m,a,i,P,T,S,_,l,A])};
@@ -1 +1 @@
1
- "use strict";var e=require("react"),t=require("../stores/chatStore.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js");var s=require("../utils/logging.js");require("react/jsx-runtime"),require("../_virtual/index.js"),require("../config/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),exports.useChat=function(r){const[o,a]=e.useState(t.chatStore.getState()),{service:n}=r;e.useEffect((()=>t.chatStore.subscribe(a)),[n]);const i=e.useCallback((async()=>{const e=t.chatStore.getConversationId();if(e){console.log("Reloading chat history to check for missed messages...");try{const r=await n.getChatHistory(e),o=t.chatStore.getMessages();return r.length>o.length?(console.log(`Found ${r.length-o.length} missed messages, updating chat...`),t.chatStore.reset(),r.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)})),t.chatStore.setConversationId(e),s.default("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}),[n]),c=e.useCallback(((e,r=0)=>{if(""===e.trim())return;const a=`$user-msg-${Date.now()}`,l={id:a,sender:"user",content:e},d=o.messages.length>0?o.messages[o.messages.length-1].id:void 0;t.chatStore.addMessage(l),t.chatStore.setBotTyping(!0),s.default("chat-send");const u=Promise.race([n.chat(e,d),new Promise(((e,t)=>{setTimeout((()=>t(new Error("Request timeout - please try again"))),36e4)}))]).then((e=>{const{id:r,content:o}=e,a={id:r,sender:"bot",content:o,isNew:!0};t.chatStore.setConversationId(r),t.chatStore.addMessage(a),t.chatStore.setBotTyping(!1),s.default("chat-receive"),o.startsWith("Error code: ")&&s.default("chat-error: "+o)})).catch((async o=>{console.error("Chat error details:",{error:o,message:o?.message,name:o?.name,stack:o?.stack,tempId:a,lastMessageId:d,retryCount:r,timestamp:(new Date).toISOString()});if(0===r&&("AbortError"===o?.name||o?.message?.includes("timeout")||o?.message?.includes("Failed to fetch")||o?.message?.includes("NetworkError")))return console.log("Auto-retrying chat request..."),t.chatStore.removeMessage(a),t.chatStore.setBotTyping(!1),void setTimeout((()=>c(e,r+1)),2e3);function l(){let e="An error occurred while sending the message. Please try again.";if(n.onUnauthorized&&o?.toString().includes("401"))return alert("Session expired. Please log in again."),void n.onUnauthorized();"AbortError"===o?.name||o?.message?.includes("timeout")?(e="Request timed out. Please check your connection and try again.",s.default("chat-timeout")):o?.message?.includes("HTTP error: 500")?(e="Server error. Please try again in a moment.",s.default("chat-server-error")):(o?.message?.includes("Failed to fetch")||o?.message?.includes("NetworkError"))&&(e="Network error. Please check your connection and try again.",s.default("chat-network-error")),console.warn(e),t.chatStore.removeMessage(a),t.chatStore.setBotTyping(!1),s.default("chat-error")}"AbortError"===o?.name||o?.message?.includes("timeout")||o?.message?.includes("Failed to fetch")||o?.message?.includes("NetworkError")||o?.message?.includes("WebSocket")||o?.message?.includes("SignalR")||o?.message?.includes("Connection")?(console.log("Potential SignalR/connection issue detected, checking for missed messages..."),setTimeout((async()=>{if(await i())return t.chatStore.removeMessage(a),t.chatStore.setBotTyping(!1),console.log("Recovered missed message(s) from server"),void s.default("chat-recovered");l()}),2e3)):l()}));t.chatStore.addPendingRequest(a,u)}),[n,o.messages,i]),l=e.useCallback((()=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("new-chat")}),[]),d=e.useCallback((e=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("open-chat"),n.getChatHistory(e).then((e=>{e.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)}))}))}),[n]);return{messages:o.messages,isBotTyping:o.isBotTyping,handleSend:c,newChat:l,openChat:d,reloadChatHistory:i}};
1
+ "use strict";var e=require("react"),t=require("../stores/chatStore.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js");var s=require("../utils/logging.js");require("react/jsx-runtime"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),exports.useChat=function(r){const[a,o]=e.useState(t.chatStore.getState()),{service:n}=r;e.useEffect((()=>t.chatStore.subscribe(o)),[n]);const i=e.useCallback((async()=>{const e=t.chatStore.getConversationId();if(e){console.log("Reloading chat history to check for missed messages...");try{const r=await n.getChatHistory(e),a=t.chatStore.getMessages();return r.length>a.length?(console.log(`Found ${r.length-a.length} missed messages, updating chat...`),t.chatStore.reset(),r.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)})),t.chatStore.setConversationId(e),s.default("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}),[n]),c=e.useCallback(((e,r=0)=>{if(""===e.trim())return;const o=`$user-msg-${Date.now()}`,l={id:o,sender:"user",content:e},d=a.messages.length>0?a.messages[a.messages.length-1].id:void 0;t.chatStore.addMessage(l),t.chatStore.setBotTyping(!0),s.default("chat-send");const u=Promise.race([n.chat(e,d),new Promise(((e,t)=>{setTimeout((()=>t(new Error("Request timeout - please try again"))),36e4)}))]).then((e=>{const{id:r,content:a}=e,o={id:r,sender:"bot",content:a,isNew:!0};t.chatStore.setConversationId(r),t.chatStore.addMessage(o),t.chatStore.setBotTyping(!1),s.default("chat-receive"),a.startsWith("Error code: ")&&s.default("chat-error: "+a)})).catch((async a=>{console.error("Chat error details:",{error:a,message:a?.message,name:a?.name,stack:a?.stack,tempId:o,lastMessageId:d,retryCount:r,timestamp:(new Date).toISOString()});if(0===r&&("AbortError"===a?.name||a?.message?.includes("timeout")||a?.message?.includes("Failed to fetch")||a?.message?.includes("NetworkError")))return console.log("Auto-retrying chat request..."),t.chatStore.removeMessage(o),t.chatStore.setBotTyping(!1),void setTimeout((()=>c(e,r+1)),2e3);function l(){let e="An error occurred while sending the message. Please try again.";if(n.onUnauthorized&&a?.toString().includes("401"))return alert("Session expired. Please log in again."),void n.onUnauthorized();"AbortError"===a?.name||a?.message?.includes("timeout")?(e="Request timed out. Please check your connection and try again.",s.default("chat-timeout")):a?.message?.includes("HTTP error: 500")?(e="Server error. Please try again in a moment.",s.default("chat-server-error")):(a?.message?.includes("Failed to fetch")||a?.message?.includes("NetworkError"))&&(e="Network error. Please check your connection and try again.",s.default("chat-network-error")),console.warn(e),t.chatStore.removeMessage(o),t.chatStore.setBotTyping(!1),s.default("chat-error")}"AbortError"===a?.name||a?.message?.includes("timeout")||a?.message?.includes("Failed to fetch")||a?.message?.includes("NetworkError")||a?.message?.includes("WebSocket")||a?.message?.includes("SignalR")||a?.message?.includes("Connection")?(console.log("Potential SignalR/connection issue detected, checking for missed messages..."),setTimeout((async()=>{if(await i())return t.chatStore.removeMessage(o),t.chatStore.setBotTyping(!1),console.log("Recovered missed message(s) from server"),void s.default("chat-recovered");l()}),2e3)):l()}));t.chatStore.addPendingRequest(o,u)}),[n,a.messages,i]),l=e.useCallback((()=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("new-chat")}),[]),d=e.useCallback((e=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("open-chat"),n.getChatHistory(e).then((e=>{e.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)}))}))}),[n]);return{messages:a.messages,isBotTyping:a.isBotTyping,handleSend:c,newChat:l,openChat:d,reloadChatHistory:i}};
@@ -1 +1 @@
1
- "use strict";var e=require("react");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime");var t=require("../utils/appState.js");require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var r=require("./useAudioRecorder.js"),s=require("./useAuthState.js"),n=require("./useRealtimeVoiceAI.js"),a=require("./useTools.js"),c=require("../config/index.js");exports.useCodicentApp=({auth0:i,toolsConfig:u})=>{const o=s.default(i),l=e.useRef(t.createAppStateMachine(o.codicentService,(()=>{}))),[d,m]=e.useState(),{service:p,context:f}=l.current,{nickname:g,name:k,error:v,errorType:h,selectedApp:A}=f,C=e.useCallback(((e,t)=>{const r=e.get("file").name;p.uploadFile(r,e).then((e=>{p.sendMessage(`#transcribe ${""!==t?(t.startsWith("#")?"":"#")+t+" ":""}#file:${e}`).then((()=>{})).catch(console.warn)}))}),[p]),b=r.useAudioRecorder(C),[S,q]=e.useState(),[w,j]=e.useState(),[y,x]=e.useState(!1),T=e.useMemo((()=>new Audio("./notification.mp3")),[]),_=e.useCallback((()=>x(!0)),[]),I=a.default(p,q,j,T,S,_,u),E=e.useMemo((()=>c.getConfigValue("REALTIME_VOICE_API_KEY")||""),[]),M=n.default(p,E,I);e.useEffect((()=>{y&&(M?.disconnectConversation(),x(!1))}),[y,M]),e.useEffect((()=>{o.isAuthenticated&&o.user&&o.accessToken&&l.current.updateContext({isAuthenticated:o.isAuthenticated,user:{sub:o.user.sub,email:o.user.email},accessToken:o.accessToken})}),[o.isAuthenticated,o.user,o.accessToken]),e.useEffect((()=>l.current.updateContext({nickname:o.nickname})),[o.nickname]),e.useEffect((()=>{l.current.update();let e,t=l.current.getCurrentStateName();m(l.current.getCurrentStateName()),JSON.stringify(l.current.context);let r=!1;const s=n=>setInterval((()=>{const n=l.current.getCurrentStateName();if("hasAccess"===n&&!r)return console.log("🎯 Reached stable state - switching to slower polling (1000ms)"),r=!0,clearInterval(e),void(e=s(1e3));if("hasAccess"!==n&&r)return console.log("🚨 Left stable state - switching to fast polling (200ms)"),r=!1,clearInterval(e),void(e=s(200));const a=JSON.stringify(l.current.context);l.current.update();const c=JSON.stringify(l.current.context),i=l.current.getCurrentStateName();i===t&&a===c||(m(i),t=i)}),n);return e=s(200),()=>clearInterval(e)}),[]);const N=e.useCallback((e=>e.replace("{nickname}",g||"unknown").replace("{token}",encodeURIComponent(o.accessToken||"unknown")).replace("{app}",A||"unknown")),[g,o.accessToken,A]),R=e.useCallback((e=>{l.current.updateContext({isAnonymous:e})}),[]),O=e.useCallback((()=>l.current.isBusy()),[]);return e.useMemo((()=>({audio:b,auth:o,currentStateName:d,stateMachine:l.current,service:p,context:f,state:d,nickname:g,name:k,error:v,errorType:h,fixAppUrl:N,setAnonymous:R,allStates:l.current.allStates,isBusy:O,voice:M,html:S,setHtml:q,script:w})),[d,g,k,v,h,S,w,o.isAuthenticated,o.isLoading,b.isRecording,M?.isConnected,N,R,O])};
1
+ "use strict";var e=require("react");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime");var t=require("../utils/appState.js");require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../utils/cacheManager.js");var r=require("./useAudioRecorder.js"),s=require("./useAuthState.js"),n=require("./useRealtimeVoiceAI.js"),a=require("./useTools.js"),c=require("../config/index.js");exports.useCodicentApp=({auth0:i,toolsConfig:u})=>{const o=s.default(i),l=e.useRef(t.createAppStateMachine(o.codicentService,(()=>{}))),[d,m]=e.useState(),{service:p,context:f}=l.current,{nickname:g,name:k,error:v,errorType:h,selectedApp:A}=f,C=e.useCallback(((e,t)=>{const r=e.get("file").name;p.uploadFile(r,e).then((e=>{p.sendMessage(`#transcribe ${""!==t?(t.startsWith("#")?"":"#")+t+" ":""}#file:${e}`).then((()=>{})).catch(console.warn)}))}),[p]),b=r.useAudioRecorder(C),[S,q]=e.useState(),[j,w]=e.useState(),[y,x]=e.useState(!1),T=e.useMemo((()=>new Audio("./notification.mp3")),[]),_=e.useCallback((()=>x(!0)),[]),I=a.default(p,q,w,T,S,_,u),M=e.useMemo((()=>c.getConfigValue("REALTIME_VOICE_API_KEY")||""),[]),E=n.default(p,M,I);e.useEffect((()=>{y&&(E?.disconnectConversation(),x(!1))}),[y,E]),e.useEffect((()=>{o.isAuthenticated&&o.user&&o.accessToken&&l.current.updateContext({isAuthenticated:o.isAuthenticated,user:{sub:o.user.sub,email:o.user.email},accessToken:o.accessToken})}),[o.isAuthenticated,o.user,o.accessToken]),e.useEffect((()=>l.current.updateContext({nickname:o.nickname})),[o.nickname]),e.useEffect((()=>{l.current.update();let e,t=l.current.getCurrentStateName();m(l.current.getCurrentStateName()),JSON.stringify(l.current.context);let r=!1;const s=n=>setInterval((()=>{const n=l.current.getCurrentStateName();if("hasAccess"===n&&!r)return console.log("🎯 Reached stable state - switching to slower polling (1000ms)"),r=!0,clearInterval(e),void(e=s(1e3));if("hasAccess"!==n&&r)return console.log("🚨 Left stable state - switching to fast polling (200ms)"),r=!1,clearInterval(e),void(e=s(200));const a=JSON.stringify(l.current.context);l.current.update();const c=JSON.stringify(l.current.context),i=l.current.getCurrentStateName();i===t&&a===c||(m(i),t=i)}),n);return e=s(200),()=>clearInterval(e)}),[]);const N=e.useCallback((e=>e.replace("{nickname}",g||"unknown").replace("{token}",encodeURIComponent(o.accessToken||"unknown")).replace("{app}",A||"unknown")),[g,o.accessToken,A]),R=e.useCallback((e=>{l.current.updateContext({isAnonymous:e})}),[]),O=e.useCallback((()=>l.current.isBusy()),[]);return e.useMemo((()=>({audio:b,auth:o,currentStateName:d,stateMachine:l.current,service:p,context:f,state:d,nickname:g,name:k,error:v,errorType:h,fixAppUrl:N,setAnonymous:R,allStates:l.current.allStates,isBusy:O,voice:E,html:S,setHtml:q,script:j})),[d,g,k,v,h,S,j,o.isAuthenticated,o.isLoading,b.isRecording,E?.isConnected,N,R,O])};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useStateWithLocalStorage.js");require("../services/codicent.js"),require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=t=>{const[o,i]=r.default("APP_WELCOME_STATE_TEXT_"+t.context.selectedApp,""),[n,a]=r.default("CODICENT_STATE_LAST_TIMESTAMP_"+t.context.selectedApp,0),{service:u,current:c}=t,[p,l]=e.useState(!1),j=e.useRef(!1),q=e.useCallback((async()=>{if(!j.current){j.current=!0;try{const e=await u.getMessagesFast(s.getConfigValue("LOGBOOK_TAGS").split(",").filter((e=>"chat"!==e))),r=e.length>0?e[0].createdAt.getTime():n;if(r>n){a(r),l(!0);const e=await u.chat(s.getConfigValue("WELCOME_STATUS_PROMPT"));i(e.content)}}finally{l(!1),j.current=!1}}}),[u,n,a,i]),g=e.useCallback((()=>{u&&s.getConfigValue("CHAT_INSTRUCTIONS")}),[u]);return e.useEffect((()=>{c===t.allStates.hasAccess&&s.getConfigValue("WELCOME_STATUS_PROMPT")?(q(),g()):s.getConfigValue("WELCOME_STATUS_PROMPT")||i("")}),[c,t,q,g,i]),{welcomeStatusText:o,updating:p}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useStateWithLocalStorage.js");require("../services/codicent.js"),require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=t=>{const[o,i]=r.default("APP_WELCOME_STATE_TEXT_"+t.context.selectedApp,""),[n,a]=r.default("CODICENT_STATE_LAST_TIMESTAMP_"+t.context.selectedApp,0),{service:u,current:c}=t,[p,l]=e.useState(!1),j=e.useRef(!1),q=e.useCallback((async()=>{if(!j.current){j.current=!0;try{const e=await u.getMessagesFast(s.getConfigValue("LOGBOOK_TAGS").split(",").filter((e=>"chat"!==e))),r=e.length>0?e[0].createdAt.getTime():n;if(r>n){a(r),l(!0);const e=await u.chat(s.getConfigValue("WELCOME_STATUS_PROMPT"));i(e.content)}}finally{l(!1),j.current=!1}}}),[u,n,a,i]),g=e.useCallback((()=>{u&&s.getConfigValue("CHAT_INSTRUCTIONS")}),[u]);return e.useEffect((()=>{c===t.allStates.hasAccess&&s.getConfigValue("WELCOME_STATUS_PROMPT")?(q(),g()):s.getConfigValue("WELCOME_STATUS_PROMPT")||i("")}),[c,t,q,g,i]),{welcomeStatusText:o,updating:p}};
@@ -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,SA2iBlB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
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
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/wav_renderer.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js");var n=require("../lib/wavtools/lib/wav_stream_player.js"),r=require("../lib/wavtools/lib/wav_recorder.js"),a=require("../config/index.js");exports.default=(s,o,i,c)=>{const u=!!a.getConfigValue("APP_CONFIG"),l=!!a.getConfigValue("APP_BUTTONS");u||console.warn("APP_CONFIG is not set. Voice AI will not be available."),l||console.warn("APP_BUTTONS is not set. Voice AI will not be available.");const d=a.getConfigValue("APP_CONFIG"),p=a.getConfigValue("APP_BUTTONS");a.getConfigValue("API_BASE_URL").replace(/\/$/,""),a.getConfigValue("USE_REALTIME_SESSION_ENDPOINT"),a.getConfigValue("REALTIME_SESSION_ENDPOINT");const f=c||a.getConfigValue("REALTIME_VOICE_MODEL")||"alloy",g=["alloy","shimmer","echo"],m=g.includes(f)?f:"alloy";f!==m&&console.warn(`[codicent-app-sdk] Voice "${f}" is not supported in the current SDK version. Supported voices: ${g.join(", ")}. Falling back to "${m}".`);const w=e.useRef(new r.WavRecorder({sampleRate:24e3})),S=e.useRef(new n.WavStreamPlayer({sampleRate:24e3})),v=e.useRef(null),y=e.useRef(null),h=e.useRef(null),_=e.useRef(null),C=e.useRef(!1),R=e.useRef(null),O=e.useRef(null),I=e.useRef(null),T=e.useRef((new Date).toISOString()),[E,b]=e.useState([]),[N,P]=e.useState([]),[k,A]=e.useState(!1),[D,M]=e.useState(!1),[V,x]=e.useState(!1),F=e.useRef(0),L=e.useRef(0),[$,j]=e.useState(""),[q,U]=e.useState("en-US"),[J,B]=e.useState((()=>u&&l&&p&&d&&d.apps&&d.apps[p]?d.apps[p].voiceInstructions||d.REALTIME_VOICE_INSTRUCTIONS||"":d&&d.REALTIME_VOICE_INSTRUCTIONS||"")),W=e.useCallback((e=>{const t=T.current,n=new Date(t).valueOf(),r=new Date(e).valueOf()-n,a=Math.floor(r/10)%100,s=Math.floor(r/1e3)%60,o=e=>{let t=e+"";for(;t.length<2;)t="0"+t;return t};return`${o(Math.floor(r/6e4)%60)}:${o(s)}.${o(a)}`}),[]),G=e.useCallback((async()=>{try{T.current=(new Date).toISOString(),A(!0),P([]),b([]);const e=await s.getRealtimeSessionToken(m);if(!e)throw new Error("No ephemeral key returned from session endpoint");const t=new RTCPeerConnection;v.current=t,h.current||(h.current=new Audio,h.current.autoplay=!0),t.ontrack=e=>{h.current&&e.streams[0]&&(h.current.srcObject=e.streams[0])};const n=await navigator.mediaDevices.getUserMedia({audio:!0});_.current=n;const r=n.getTracks()[0];t.addTrack(r,n);const o=t.createDataChannel("oai-events");y.current=o,o.addEventListener("message",(e=>{try{const t=JSON.parse(e.data);"session.created"===t.type||("conversation.item.created"===t.type?b((e=>[...e,t.item])):"conversation.item.input_audio_transcription.completed"===t.type?b((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})):"response.audio_transcript.delta"===t.type||"response.audio_transcript.done"===t.type||"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:J.replace("{{name}}",$).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:m,temperature:.8,max_response_output_tokens:4096,input_audio_format:"pcm16",output_audio_format:"pcm16",tools:i.map((e=>({type:"function",...e.definition})))}}))},o.onclose=()=>{console.log("Data channel closed")};const c=await t.createOffer();await t.setLocalDescription(c);let u="gpt-4o-realtime-preview";try{if(a.getConfigValue("REALTIME_CONFIG_ENDPOINT")){const e=await s.getRealtimeConfig();e&&e.model&&(u=e.model)}}catch(e){console.warn("Failed to fetch realtime config, using default model:",e)}const l="https://api.openai.com/v1/realtime",d=await fetch(`${l}?model=${u}`,{method:"POST",body:c.sdp,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/sdp"}});if(!d.ok)throw new Error(`Failed to get SDP answer: ${d.statusText}`);const p={type:"answer",sdp:await d.text()};await t.setRemoteDescription(p),M(!1);const f=w.current,g=S.current;await f.begin(),await g.connect()}catch(e){throw console.error("[codicent-app-sdk] Failed to establish WebRTC connection:",e),A(!1),e}}),[s,m,J,$,q,i]),H=e.useCallback((async()=>{A(!1),P([]),b([]),y.current&&(y.current.close(),y.current=null),v.current&&(v.current.close(),v.current=null),_.current&&(_.current.getTracks().forEach((e=>e.stop())),_.current=null),h.current&&(h.current.pause(),h.current.srcObject=null);const e=w.current;await e.end();const t=S.current;await t.interrupt()}),[]),z=e.useCallback((async e=>{const t=y.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"conversation.item.delete",item_id:e}))}),[]),K=e.useCallback((async()=>{x(!0);const e=y.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"input_audio_buffer.commit"}))}),[]),Q=e.useCallback((async()=>{x(!1);const e=y.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"response.create"}))}),[]),X=e.useCallback((async e=>{const t=y.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"session.update",session:{turn_detection:"none"===e?null:{type:"server_vad"}}})),M("none"===e)}),[]);e.useEffect((()=>{if($&&k){const e=y.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"session.update",session:{instructions:J.replace("{{name}}",$).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString())}}))}}),[J,$,q,k]),e.useEffect((()=>{let e=!0;const n=w.current,r=R.current;let a=null;const s=S.current,o=O.current;let i=null;const c=()=>{if(e){if(r&&(r.width&&r.height||(r.width=r.offsetWidth,r.height=r.offsetHeight),a=a||r.getContext("2d"),a)){a.clearRect(0,0,r.width,r.height);const e=n.recording?n.getFrequencies("voice"):{values:new Float32Array([0])},s=1-Math.max(...e.values);F.current=s,t.WavRenderer.drawCircularBars(r,a,e.values,"#0099ff",20,0,8)}if(o&&(o.width&&o.height||(o.width=o.offsetWidth,o.height=o.offsetHeight),i=i||o.getContext("2d"),i)){i.clearRect(0,0,o.width,o.height);const e=s.analyser?s.getFrequencies("voice"):{values:new Float32Array([0])},n=1-Math.max(...e.values);L.current=n,t.WavRenderer.drawCircularBars(o,i,e.values,"#009900",20,0,8)}window.requestAnimationFrame(c)}};return c(),()=>{e=!1}}),[]),e.useEffect((()=>{!C.current&&i&&J&&(C.current=!0)}),[i,J]);const Y=e.useCallback((e=>{const t=e.replace("{{name}}",$).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString()),n=y.current;n&&"open"===n.readyState&&n.send(JSON.stringify({type:"session.update",session:{instructions:t}})),B(e)}),[$,q]);return e.useMemo((()=>{if(u&&l)return{items:E,realtimeEvents:N,isConnected:k,canPushToTalk:D,isRecording:V,clientCanvasRef:R,serverCanvasRef:O,eventsScrollRef:I,formatTime:W,connectConversation:G,disconnectConversation:H,deleteConversationItem:z,startRecording:K,stopRecording:Q,changeTurnEndType:X,getRecorderLevel:()=>F.current,getStreamLevel:()=>L.current,setUsername:j,updateInstructions:Y,setLanguage:U}}),[u,l,E,N,k,D,V,R,O,I])};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/wav_renderer.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js");var n=require("../lib/wavtools/lib/wav_stream_player.js"),r=require("../lib/wavtools/lib/wav_recorder.js"),a=require("../config/index.js");exports.default=(o,s,i,c)=>{const l=!!a.getConfigValue("APP_CONFIG"),u=!!a.getConfigValue("APP_BUTTONS");l||console.warn("APP_CONFIG is not set. Voice AI will not be available."),u||console.warn("APP_BUTTONS is not set. Voice AI will not be available.");const d=a.getConfigValue("APP_CONFIG"),p=a.getConfigValue("APP_BUTTONS");a.getConfigValue("API_BASE_URL").replace(/\/$/,""),a.getConfigValue("USE_REALTIME_SESSION_ENDPOINT"),a.getConfigValue("REALTIME_SESSION_ENDPOINT");const f=c||a.getConfigValue("REALTIME_VOICE_MODEL")||"alloy",g=["alloy","shimmer","echo"],m=g.includes(f)?f:"alloy";f!==m&&console.warn(`[codicent-app-sdk] Voice "${f}" is not supported in the current SDK version. Supported voices: ${g.join(", ")}. Falling back to "${m}".`);const y=e.useRef(new r.WavRecorder({sampleRate:24e3})),_=e.useRef(new n.WavStreamPlayer({sampleRate:24e3})),S=e.useRef(null),w=e.useRef(null),v=e.useRef(null),h=e.useRef(null),O=e.useRef(!1),C=e.useRef(null),R=e.useRef(null),I=e.useRef(null),T=e.useRef((new Date).toISOString()),[N,E]=e.useState([]),[b,A]=e.useState([]),[P,k]=e.useState(!1),[V,D]=e.useState(!1),[M,x]=e.useState(!1),F=e.useRef(0),J=e.useRef(0),[$,L]=e.useState(""),[j,q]=e.useState("en-US"),U=e.useRef(new Map),[B,W]=e.useState((()=>l&&u&&p&&d&&d.apps&&d.apps[p]?d.apps[p].voiceInstructions||d.REALTIME_VOICE_INSTRUCTIONS||"":d&&d.REALTIME_VOICE_INSTRUCTIONS||"")),G=e.useCallback((e=>{const t=T.current,n=new Date(t).valueOf(),r=new Date(e).valueOf()-n,a=Math.floor(r/10)%100,o=Math.floor(r/1e3)%60,s=e=>{let t=e+"";for(;t.length<2;)t="0"+t;return t};return`${s(Math.floor(r/6e4)%60)}:${s(o)}.${s(a)}`}),[]),H=e.useCallback((async()=>{try{T.current=(new Date).toISOString(),k(!0),A([]),E([]),U.current.clear();const e=await o.getRealtimeSessionToken(m);if(!e)throw new Error("No ephemeral key returned from session endpoint");const t=new RTCPeerConnection;S.current=t,v.current||(v.current=new Audio,v.current.autoplay=!0),t.ontrack=e=>{v.current&&e.streams[0]&&(v.current.srcObject=e.streams[0])};const n=await navigator.mediaDevices.getUserMedia({audio:!0});h.current=n;const r=n.getTracks()[0];t.addTrack(r,n);const s=t.createDataChannel("oai-events");w.current=s,s.addEventListener("message",(e=>{try{const t=JSON.parse(e.data);if("session.created"===t.type);else if("conversation.item.created"===t.type)E((e=>[...e,t.item]));else if("conversation.item.input_audio_transcription.completed"===t.type)E((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),U.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=U.current.get(e);r&&n&&(r.arguments+=n,U.current.set(e,r))}else if("response.function_call_arguments.done"===t.type){const e=t.item_id,n=U.current.get(e);if(n){console.log(`[Voice AI] Executing tool: ${n.name}`);const t=i.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),s&&"open"===s.readyState&&(s.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n.call_id,output:JSON.stringify(e)}})),s.send(JSON.stringify({type:"response.create"})))})).catch((e=>{console.error(`[Voice AI] Tool ${n.name} failed:`,e),s&&"open"===s.readyState&&(s.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"})}})),s.send(JSON.stringify({type:"response.create"})))}))}else console.error(`[Voice AI] Tool not found: ${n.name}`);U.current.delete(e)}}else"error"===t.type&&console.error("Server error:",t.error)}catch(t){console.warn("Invalid message:",e.data)}})),s.onopen=()=>{console.log("Data channel opened, configuring session"),s.send(JSON.stringify({type:"session.update",session:{instructions:B.replace("{{name}}",$).replace("{{language}}",j).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:m,temperature:.8,max_response_output_tokens:4096,input_audio_format:"pcm16",output_audio_format:"pcm16",tools:i.map((e=>({type:"function",...e.definition})))}}))},s.onclose=()=>{console.log("Data channel closed")};const c=await t.createOffer();await t.setLocalDescription(c);let l="gpt-4o-realtime-preview";try{if(a.getConfigValue("REALTIME_CONFIG_ENDPOINT")){const e=await o.getRealtimeConfig();e&&e.model&&(l=e.model)}}catch(e){console.warn("Failed to fetch realtime config, using default model:",e)}const u="https://api.openai.com/v1/realtime",d=await fetch(`${u}?model=${l}`,{method:"POST",body:c.sdp,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/sdp"}});if(!d.ok)throw new Error(`Failed to get SDP answer: ${d.statusText}`);const p={type:"answer",sdp:await d.text()};await t.setRemoteDescription(p),D(!1);const f=y.current,g=_.current;await f.begin(),await g.connect()}catch(e){throw console.error("[codicent-app-sdk] Failed to establish WebRTC connection:",e),k(!1),e}}),[o,m,B,$,j,i]),z=e.useCallback((async()=>{k(!1),A([]),E([]),U.current.clear(),w.current&&(w.current.close(),w.current=null),S.current&&(S.current.close(),S.current=null),h.current&&(h.current.getTracks().forEach((e=>e.stop())),h.current=null),v.current&&(v.current.pause(),v.current.srcObject=null);const e=y.current;await e.end();const t=_.current;await t.interrupt()}),[]),K=e.useCallback((async e=>{const t=w.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"conversation.item.delete",item_id:e}))}),[]),Q=e.useCallback((async()=>{x(!0);const e=w.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"input_audio_buffer.commit"}))}),[]),X=e.useCallback((async()=>{x(!1);const e=w.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"response.create"}))}),[]),Y=e.useCallback((async e=>{const t=w.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"session.update",session:{turn_detection:"none"===e?null:{type:"server_vad"}}})),D("none"===e)}),[]);e.useEffect((()=>{if($&&P){const e=w.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"session.update",session:{instructions:B.replace("{{name}}",$).replace("{{language}}",j).replace("{{time}}",(new Date).toISOString())}}))}}),[B,$,j,P]),e.useEffect((()=>{let e=!0;const n=y.current,r=C.current;let a=null;const o=_.current,s=R.current;let i=null;const c=()=>{if(e){if(r&&(r.width&&r.height||(r.width=r.offsetWidth,r.height=r.offsetHeight),a=a||r.getContext("2d"),a)){a.clearRect(0,0,r.width,r.height);const e=n.recording?n.getFrequencies("voice"):{values:new Float32Array([0])},o=1-Math.max(...e.values);F.current=o,t.WavRenderer.drawCircularBars(r,a,e.values,"#0099ff",20,0,8)}if(s&&(s.width&&s.height||(s.width=s.offsetWidth,s.height=s.offsetHeight),i=i||s.getContext("2d"),i)){i.clearRect(0,0,s.width,s.height);const e=o.analyser?o.getFrequencies("voice"):{values:new Float32Array([0])},n=1-Math.max(...e.values);J.current=n,t.WavRenderer.drawCircularBars(s,i,e.values,"#009900",20,0,8)}window.requestAnimationFrame(c)}};return c(),()=>{e=!1}}),[]),e.useEffect((()=>{!O.current&&i&&B&&(O.current=!0)}),[i,B]);const Z=e.useCallback((e=>{const t=e.replace("{{name}}",$).replace("{{language}}",j).replace("{{time}}",(new Date).toISOString()),n=w.current;n&&"open"===n.readyState&&n.send(JSON.stringify({type:"session.update",session:{instructions:t}})),W(e)}),[$,j]);return e.useMemo((()=>{if(l&&u)return{items:N,realtimeEvents:b,isConnected:P,canPushToTalk:V,isRecording:M,clientCanvasRef:C,serverCanvasRef:R,eventsScrollRef:I,formatTime:G,connectConversation:H,disconnectConversation:z,deleteConversationItem:K,startRecording:Q,stopRecording:X,changeTurnEndType:Y,getRecorderLevel:()=>F.current,getStreamLevel:()=>J.current,setUsername:L,updateInstructions:Z,setLanguage:q}}),[l,u,N,b,P,V,M,C,R,I])};
package/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("./services/codicent.js"),r=require("./components/Markdown.js"),t=require("./components/Textarea.js"),s=require("./components/Button.js"),o=require("./components/CompoundButton.js"),i=require("./components/Title.js"),a=require("./components/Text.js"),p=require("./components/Spinner.js"),u=require("./components/Label.js"),n=require("./components/Input.js"),l=require("./components/TextHeader.js"),c=require("./components/TypingIndicator.js"),x=require("./components/Prompt.js"),d=require("./components/ChatInput.js"),m=require("./components/CombinedPlaceholderDialog.js"),j=require("./components/ChatMessage.js"),q=require("./components/Header.js"),g=require("./components/VoiceIcon.js"),h=require("./components/AudioIcon.js"),f=require("./components/FileThumbnail.js"),C=require("./components/MessageInput.js"),S=require("./components/UploadFile.js"),P=require("./components/SnapFooter.js"),k=require("./components/Profile.js"),A=require("./components/MessageItem.js"),T=require("./components/Content.js"),I=require("./components/AiInput.js"),b=require("./components/SearchBox.js"),v=require("./components/HtmlView.js"),M=require("./components/Footer.js"),w=require("./components/Page.js"),F=require("./components/UrlProcessor.js"),L=require("./components/DatePicker.js"),V=require("./components/ColorPicker.js"),y=require("./components/TimePicker.js"),B=require("./hooks/useStateWithLocalStorage.js"),H=require("./hooks/useAuthState.js"),D=require("./hooks/useChat.js"),W=require("./hooks/useCodicentState.js"),R=require("./hooks/useAudioRecorder.js"),_=require("./hooks/useTools.js"),U=require("./hooks/useRealtimeVoiceAI.js"),z=require("./hooks/useLocalization.js"),G=require("./hooks/useTemplateVariables.js"),E=require("./hooks/useCodicentApp.js"),J=require("./hooks/useAppStyles.js"),K=require("./hooks/useToaster.js"),N=require("./utils/MessageContent.js"),O=require("./utils/theme.js"),Q=require("./utils/logging.js"),X=require("./utils/withWakeLock.js"),Y=require("./utils/appState.js"),Z=require("./_virtual/index.js");require("./lib/wavtools/lib/wav_packer.js"),require("./lib/wavtools/lib/analysis/audio_analysis.js");var $=require("./lib/wavtools/lib/wav_stream_player.js"),ee=require("./lib/wavtools/lib/wav_recorder.js"),re=require("./utils/device.js"),te=require("./utils/helpers.js"),se=require("./config/index.js"),oe=require("./pages/AppFrame.js"),ie=require("./pages/Chat.js"),ae=require("./pages/Compose.js"),pe=require("./pages/Snap.js"),ue=require("./pages/Search.js"),ne=require("./pages/Login.js"),le=require("./pages/Logout.js"),ce=require("./pages/CrmPage.js"),xe=require("./pages/CrmPagePersistent.js"),de=require("./pages/ImageView.js"),me=require("./pages/FormInvite.js"),je=require("./pages/FormAccept.js"),qe=require("./pages/Sales.js"),ge=require("./pages/HtmlViewer.js"),he=require("./pages/Purchase.js");exports.CodicentService=e.CodicentService,exports.Markdown=r.default,exports.Textarea=t.Textarea,exports.Button=s.Button,exports.CompoundButton=o.CompoundButton,exports.Title=i.Title,exports.Text=a.Text,exports.Spinner=p.Spinner,exports.Label=u.Label,exports.Input=n.Input,exports.TextHeader=l.default,exports.TypingIndicator=c.default,exports.Prompt=x.default,exports.ChatInput=d.default,exports.CombinedPlaceholderDialog=m.CombinedPlaceholderDialog,exports.ChatMessage=j.default,exports.Header=q.Header,exports.VoiceIcon=g.default,exports.AudioIcon=h.default,exports.FileThumbnail=f.FileThumbnail,exports.MessageInput=C.default,exports.UploadFile=S.default,exports.SnapFooter=P.default,exports.Profile=k.default,exports.MessageItem=A.default,exports.Content=T.default,exports.AiInput=I.default,exports.SearchBox=b.default,exports.HtmlView=v.default,exports.Footer=M.Footer,exports.Page=w.Page,exports.UrlProcessor=F.UrlProcessor,exports.DatePicker=L.DatePicker,exports.ColorPicker=V.ColorPicker,exports.TimePicker=y.TimePicker,exports.useStateWithLocalStorage=B.default,exports.useAuthState=H.default,exports.useChat=D.useChat,exports.useCodicentState=W.default,exports.useAudioRecorder=R.useAudioRecorder,exports.useTools=_.default,exports.useRealtimeVoiceAI=U.default,exports.useLocalization=z.default,exports.useTemplateVariables=G.useTemplateVariables,exports.useCodicentApp=E.useCodicentApp,exports.useAppStyles=J.default,exports.useToaster=K.default,exports.MessageContent=N.default,exports.generateBrandVariants=O.default,exports.log=Q.default,exports.withWakeLock=X.default,exports.AppStateMachine=Y.AppStateMachine,exports.createAppStateMachine=Y.createAppStateMachine,exports.WavStreamPlayer=$.WavStreamPlayer,exports.WavRecorder=ee.WavRecorder,exports.getGpsLocation=re.getGpsLocation,exports.isMobileDevice=re.isMobileDevice,exports.getTimeString=te.getTimeString,exports.AppConfig=se.AppConfig,exports.getConfigValue=se.getConfigValue,exports.initCodicentApp=se.initCodicentApp,exports.AppFrame=oe.default,exports.Chat=ie.default,exports.Compose=ae.Compose,exports.Snap=pe.default,exports.Search=ue.default,exports.Login=ne.default,exports.Logout=le.Logout,exports.CrmPage=ce.CrmPage,exports.CrmPagePersistent=xe.CrmPagePersistent,exports.ImageView=de.default,exports.FormInvite=me.default,exports.FormAccept=je.default,exports.Sales=qe.Sales,exports.HtmlViewer=ge.default,exports.Purchase=he.Purchase,exports.StateMachine=Z.distExports.StateMachine;
1
+ "use strict";var e=require("./services/codicent.js"),r=require("./components/Markdown.js"),t=require("./components/Textarea.js"),s=require("./components/Button.js"),o=require("./components/CompoundButton.js"),a=require("./components/Title.js"),i=require("./components/Text.js"),p=require("./components/Spinner.js"),u=require("./components/Label.js"),n=require("./components/Input.js"),l=require("./components/TextHeader.js"),c=require("./components/TypingIndicator.js"),x=require("./components/Prompt.js"),d=require("./components/ChatInput.js"),m=require("./components/CombinedPlaceholderDialog.js"),j=require("./components/ChatMessage.js"),q=require("./components/Header.js"),g=require("./components/VoiceIcon.js"),h=require("./components/AudioIcon.js"),C=require("./components/FileThumbnail.js"),f=require("./components/MessageInput.js"),S=require("./components/UploadFile.js"),P=require("./components/SnapFooter.js"),k=require("./components/Profile.js"),A=require("./components/MessageItem.js"),T=require("./components/Content.js"),M=require("./components/AiInput.js"),I=require("./components/SearchBox.js"),b=require("./components/HtmlView.js"),v=require("./components/Footer.js"),w=require("./components/Page.js"),F=require("./components/UrlProcessor.js"),L=require("./components/DatePicker.js"),V=require("./components/ColorPicker.js"),y=require("./components/TimePicker.js"),B=require("./hooks/useStateWithLocalStorage.js"),H=require("./hooks/useAuthState.js"),D=require("./hooks/useChat.js"),W=require("./hooks/useCodicentState.js"),R=require("./hooks/useAudioRecorder.js"),_=require("./hooks/useTools.js"),U=require("./hooks/useRealtimeVoiceAI.js"),z=require("./hooks/useLocalization.js"),G=require("./hooks/useTemplateVariables.js"),E=require("./hooks/useCodicentApp.js"),J=require("./hooks/useAppStyles.js"),K=require("./hooks/useToaster.js"),N=require("./utils/MessageContent.js"),O=require("./utils/theme.js"),Q=require("./utils/logging.js"),X=require("./utils/withWakeLock.js"),Y=require("./utils/appState.js"),Z=require("./_virtual/index.js");require("./lib/wavtools/lib/wav_packer.js"),require("./lib/wavtools/lib/analysis/audio_analysis.js");var $=require("./lib/wavtools/lib/wav_stream_player.js"),ee=require("./lib/wavtools/lib/wav_recorder.js"),re=require("./utils/device.js"),te=require("./utils/helpers.js"),se=require("./utils/cacheManager.js"),oe=require("./config/index.js"),ae=require("./pages/AppFrame.js"),ie=require("./pages/Chat.js"),pe=require("./pages/Compose.js"),ue=require("./pages/Snap.js"),ne=require("./pages/Search.js"),le=require("./pages/Login.js"),ce=require("./pages/Logout.js"),xe=require("./pages/CrmPage.js"),de=require("./pages/CrmPagePersistent.js"),me=require("./pages/ImageView.js"),je=require("./pages/FormInvite.js"),qe=require("./pages/FormAccept.js"),ge=require("./pages/Sales.js"),he=require("./pages/HtmlViewer.js"),Ce=require("./pages/Purchase.js");exports.CodicentService=e.CodicentService,exports.Markdown=r.default,exports.Textarea=t.Textarea,exports.Button=s.Button,exports.CompoundButton=o.CompoundButton,exports.Title=a.Title,exports.Text=i.Text,exports.Spinner=p.Spinner,exports.Label=u.Label,exports.Input=n.Input,exports.TextHeader=l.default,exports.TypingIndicator=c.default,exports.Prompt=x.default,exports.ChatInput=d.default,exports.CombinedPlaceholderDialog=m.CombinedPlaceholderDialog,exports.ChatMessage=j.default,exports.Header=q.Header,exports.VoiceIcon=g.default,exports.AudioIcon=h.default,exports.FileThumbnail=C.FileThumbnail,exports.MessageInput=f.default,exports.UploadFile=S.default,exports.SnapFooter=P.default,exports.Profile=k.default,exports.MessageItem=A.default,exports.Content=T.default,exports.AiInput=M.default,exports.SearchBox=I.default,exports.HtmlView=b.default,exports.Footer=v.Footer,exports.Page=w.Page,exports.UrlProcessor=F.UrlProcessor,exports.DatePicker=L.DatePicker,exports.ColorPicker=V.ColorPicker,exports.TimePicker=y.TimePicker,exports.useStateWithLocalStorage=B.default,exports.useAuthState=H.default,exports.useChat=D.useChat,exports.useCodicentState=W.default,exports.useAudioRecorder=R.useAudioRecorder,exports.useTools=_.default,exports.useRealtimeVoiceAI=U.default,exports.useLocalization=z.default,exports.useTemplateVariables=G.useTemplateVariables,exports.useCodicentApp=E.useCodicentApp,exports.useAppStyles=J.default,exports.useToaster=K.default,exports.MessageContent=N.default,exports.generateBrandVariants=O.default,exports.log=Q.default,exports.withWakeLock=X.default,exports.AppStateMachine=Y.AppStateMachine,exports.createAppStateMachine=Y.createAppStateMachine,exports.WavStreamPlayer=$.WavStreamPlayer,exports.WavRecorder=ee.WavRecorder,exports.getGpsLocation=re.getGpsLocation,exports.isMobileDevice=re.isMobileDevice,exports.getTimeString=te.getTimeString,exports.CacheManager=se.CacheManager,exports.stateMachineCacheManager=se.stateMachineCacheManager,exports.AppConfig=oe.AppConfig,exports.getConfigValue=oe.getConfigValue,exports.initCodicentApp=oe.initCodicentApp,exports.AppFrame=ae.default,exports.Chat=ie.default,exports.Compose=pe.Compose,exports.Snap=ue.default,exports.Search=ne.default,exports.Login=le.default,exports.Logout=ce.Logout,exports.CrmPage=xe.CrmPage,exports.CrmPagePersistent=de.CrmPagePersistent,exports.ImageView=me.default,exports.FormInvite=je.default,exports.FormAccept=qe.default,exports.Sales=ge.Sales,exports.HtmlViewer=he.default,exports.Purchase=Ce.Purchase,exports.StateMachine=Z.distExports.StateMachine;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("react"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js"),require("../hooks/useLocalization.js"),require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var r=require("../components/Page.js");const s=require("../node_modules/@griffel/react/makeStyles.esm.js").makeStyles({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}});exports.default=({src:o,showFooter:i,title:t})=>{const n=s();return i?e.jsx(r.Page,{hideFooter:!i,hideHeader:!0,children:e.jsx("iframe",{title:t,src:o,className:`${n.iframe} ${i?n.fixFrameHeight:""}`})}):e.jsx("iframe",{title:t,src:o,className:n.iframe})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("react"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js"),require("../hooks/useLocalization.js"),require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var r=require("../components/Page.js");const s=require("../node_modules/@griffel/react/makeStyles.esm.js").makeStyles({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}});exports.default=({src:o,showFooter:i,title:t})=>{const n=s();return i?e.jsx(r.Page,{hideFooter:!i,hideHeader:!0,children:e.jsx("iframe",{title:t,src:o,className:`${n.iframe} ${i?n.fixFrameHeight:""}`})}):e.jsx("iframe",{title:t,src:o,className:n.iframe})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-router-dom");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var s=require("../components/TextHeader.js"),n=require("../components/TypingIndicator.js"),o=require("../components/Prompt.js"),a=require("../components/ChatInput.js"),i=require("../components/CombinedPlaceholderDialog.js"),l=require("../components/ChatMessage.js");require("../components/Header.js");var u=require("../hooks/useStateWithLocalStorage.js"),c=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var d=require("../config/index.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var p=require("../hooks/useChat.js"),m=require("../hooks/useLocalization.js"),g=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var h=require("../components/Page.js"),j=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-3.js");const q=j.makeStyles({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"}});exports.default=({state:j})=>{const x=q(),{t:C,tAsync:b,getLanguageInfo:S}=m.default(),v=r.useNavigate(),{messages:y,isBotTyping:w,handleSend:P,newChat:k,openChat:_}=p.useChat(j.stateMachine),T=t.useRef(null),[F,I]=r.useSearchParams(),[A,V]=t.useState(null),[M,E]=t.useState(!1),[H,R]=t.useState(!1),{service:N,currentStateName:B}=j,[L,O]=t.useState([]),[W,D]=t.useState([]),[U,z]=t.useState(!1),[G,Y]=t.useState(),[$,K]=u.default(j.context.selectedApp+"_prompts",[]),[J,Q]=t.useState(!1),{extractTemplateVariables:X,replaceTemplateVariables:Z,extractFilePlaceholders:ee,replaceFilePlaceholders:te,handleSelectFiles:re}=g.useTemplateVariables(N.uploadFile),se=t.useRef(!1),ne=t.useRef(null);t.useEffect((()=>{const e=window.history.length>1,t=Boolean(document.referrer&&document.referrer!==window.location.href);R(e||t)}),[]);t.useEffect((()=>{d.getConfigValue("SHOW_CHAT_PROMPTS")&&0===y.length&&j.service.getAppPrompts().then(K).catch((e=>{console.error("Failed to get prompts",e)}))}),[j.service,K,y.length]),t.useEffect((()=>{setTimeout((()=>{T.current?.scrollIntoView({behavior:"smooth"})}),10)}),[y]),t.useEffect((()=>{if(se.current)return;se.current=!0;const e=F.get("text"),t=F.get("id"),r=F.get("fid");if(e){(async()=>{const t=ee(e),r=X(e);k(),t.length>0||r.length>0?(D(t),O(r),z(!0),V(C(e))):V(C(e))})()}else t?_(t):r&&Y(r)}),[]),t.useEffect((()=>{G&&"anonymous"===B&&ne.current!==G&&(ne.current=G,N.getFormById(G).then((async e=>{k();const t=S().language,r=e.prompt.replace("{{fid}}",G).replace("{{fname}}",e.name).replace("{{language}}",t);Q(!0);const s=await b(r);Q(!1),V(s),R(!1)})))}),[G,k,N,V,B,b,S,Q]),t.useEffect((()=>{if(A&&!U){let e=A;W.length>0&&(e=te(e,W)),L.length>0&&(e=Z(e,L)),P(e),I({},{replace:!0}),V(null),O([]),D([])}}),[A,U,P,I,te,Z,W,L]);const oe=e=>{const t=F.get("append");t&&(e+="\n---\n"+t),P(e)};return e.jsxs(h.Page,{hideHeader:!0,hideFooter:!!G,children:[e.jsxs("div",{id:"chat-container",className:x.chatContainer,style:{backgroundImage:`url(${d.getConfigValue("CHAT_BACKGROUND_IMAGE_URL")})`},children:[H&&e.jsx("button",{onClick:()=>{H&&v(-1)},"aria-label":C("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:e.jsx(f.CalendarWeekStart24Regular,{style:{transform:"rotate(180deg)"}})}),e.jsx("div",{style:{marginLeft:H?40:0},children:e.jsx(s.default,{title:C(d.getConfigValue("APP_CHAT_TITLE")||"Chatt"),onNewChat:G?void 0:()=>E(!0)})}),e.jsxs("div",{className:x.chatMessages,children:[d.getConfigValue("SHOW_CHAT_PROMPTS")&&$.length>0&&0===y.length&&e.jsx(l.default,{sender:"bot",content:C(d.getConfigValue("CHAT_WELCOME")||"Välkommen!"),children:$.map(((t,r)=>e.jsxs("div",{children:["> ",e.jsx("a",{href:"./#/chat",onClick:()=>{oe(t.title+"\n---\n"+t.prompt)},children:C(t.title)}),e.jsx("br",{})]},`prompt-${r}`)))}),y.map(((t,r)=>e.jsxs("div",{children:[(w&&r===y.length-1||!w&&r===y.length-2)&&e.jsx("div",{ref:T}),e.jsx(l.default,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:r===y.length-1,onSuggestionClicked:P},t.id)]},t.id))),J&&e.jsx(l.default,{sender:"user",content:C("Översätter...")}),w&&e.jsx(n.default,{})]}),e.jsx(a.default,{codicent:j.context.selectedApp,disableSend:w,onSend:oe,onSelectFiles:re,getImageUrl:c.CodicentService.getImageUrl,getFileInfo:e=>N.getFileInfo(e)})]}),e.jsx(o.default,{open:M,title:C("Vill du rensa chatten?"),content:C("En ny startas, men chatten kommer först sparas."),onYes:()=>{E(!1),k()},onNo:()=>E(!1)}),e.jsx(i.CombinedPlaceholderDialog,{open:U,templateVariables:L,filePlaceholders:W,onTemplateVariablesChange:O,onFilePlaceholdersChange:D,onConfirm:()=>z(!1),onCancel:()=>{z(!1),V(null),O([]),D([])},uploadFile:N.uploadFile})]})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-router-dom");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var s=require("../components/TextHeader.js"),n=require("../components/TypingIndicator.js"),o=require("../components/Prompt.js"),a=require("../components/ChatInput.js"),i=require("../components/CombinedPlaceholderDialog.js"),l=require("../components/ChatMessage.js");require("../components/Header.js");var u=require("../hooks/useStateWithLocalStorage.js"),c=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var d=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var p=require("../hooks/useChat.js"),m=require("../hooks/useLocalization.js"),g=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var h=require("../components/Page.js"),j=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-3.js");const q=j.makeStyles({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"}});exports.default=({state:j})=>{const x=q(),{t:C,tAsync:b,getLanguageInfo:S}=m.default(),v=r.useNavigate(),{messages:y,isBotTyping:w,handleSend:P,newChat:k,openChat:_}=p.useChat(j.stateMachine),T=t.useRef(null),[F,I]=r.useSearchParams(),[A,V]=t.useState(null),[M,E]=t.useState(!1),[H,R]=t.useState(!1),{service:N,currentStateName:B}=j,[L,O]=t.useState([]),[W,D]=t.useState([]),[U,z]=t.useState(!1),[G,Y]=t.useState(),[$,K]=u.default(j.context.selectedApp+"_prompts",[]),[J,Q]=t.useState(!1),{extractTemplateVariables:X,replaceTemplateVariables:Z,extractFilePlaceholders:ee,replaceFilePlaceholders:te,handleSelectFiles:re}=g.useTemplateVariables(N.uploadFile),se=t.useRef(!1),ne=t.useRef(null);t.useEffect((()=>{const e=window.history.length>1,t=Boolean(document.referrer&&document.referrer!==window.location.href);R(e||t)}),[]);t.useEffect((()=>{d.getConfigValue("SHOW_CHAT_PROMPTS")&&0===y.length&&j.service.getAppPrompts().then(K).catch((e=>{console.error("Failed to get prompts",e)}))}),[j.service,K,y.length]),t.useEffect((()=>{setTimeout((()=>{T.current?.scrollIntoView({behavior:"smooth"})}),10)}),[y]),t.useEffect((()=>{if(se.current)return;se.current=!0;const e=F.get("text"),t=F.get("id"),r=F.get("fid");if(e){(async()=>{const t=ee(e),r=X(e);k(),t.length>0||r.length>0?(D(t),O(r),z(!0),V(C(e))):V(C(e))})()}else t?_(t):r&&Y(r)}),[]),t.useEffect((()=>{G&&"anonymous"===B&&ne.current!==G&&(ne.current=G,N.getFormById(G).then((async e=>{k();const t=S().language,r=e.prompt.replace("{{fid}}",G).replace("{{fname}}",e.name).replace("{{language}}",t);Q(!0);const s=await b(r);Q(!1),V(s),R(!1)})))}),[G,k,N,V,B,b,S,Q]),t.useEffect((()=>{if(A&&!U){let e=A;W.length>0&&(e=te(e,W)),L.length>0&&(e=Z(e,L)),P(e),I({},{replace:!0}),V(null),O([]),D([])}}),[A,U,P,I,te,Z,W,L]);const oe=e=>{const t=F.get("append");t&&(e+="\n---\n"+t),P(e)};return e.jsxs(h.Page,{hideHeader:!0,hideFooter:!!G,children:[e.jsxs("div",{id:"chat-container",className:x.chatContainer,style:{backgroundImage:`url(${d.getConfigValue("CHAT_BACKGROUND_IMAGE_URL")})`},children:[H&&e.jsx("button",{onClick:()=>{H&&v(-1)},"aria-label":C("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:e.jsx(f.CalendarWeekStart24Regular,{style:{transform:"rotate(180deg)"}})}),e.jsx("div",{style:{marginLeft:H?40:0},children:e.jsx(s.default,{title:C(d.getConfigValue("APP_CHAT_TITLE")||"Chatt"),onNewChat:G?void 0:()=>E(!0)})}),e.jsxs("div",{className:x.chatMessages,children:[d.getConfigValue("SHOW_CHAT_PROMPTS")&&$.length>0&&0===y.length&&e.jsx(l.default,{sender:"bot",content:C(d.getConfigValue("CHAT_WELCOME")||"Välkommen!"),children:$.map(((t,r)=>e.jsxs("div",{children:["> ",e.jsx("a",{href:"./#/chat",onClick:()=>{oe(t.title+"\n---\n"+t.prompt)},children:C(t.title)}),e.jsx("br",{})]},`prompt-${r}`)))}),y.map(((t,r)=>e.jsxs("div",{children:[(w&&r===y.length-1||!w&&r===y.length-2)&&e.jsx("div",{ref:T}),e.jsx(l.default,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:r===y.length-1,onSuggestionClicked:P},t.id)]},t.id))),J&&e.jsx(l.default,{sender:"user",content:C("Översätter...")}),w&&e.jsx(n.default,{})]}),e.jsx(a.default,{codicent:j.context.selectedApp,disableSend:w,onSend:oe,onSelectFiles:re,getImageUrl:c.CodicentService.getImageUrl,getFileInfo:e=>N.getFileInfo(e)})]}),e.jsx(o.default,{open:M,title:C("Vill du rensa chatten?"),content:C("En ny startas, men chatten kommer först sparas."),onYes:()=>{E(!1),k()},onNo:()=>E(!1)}),e.jsx(i.CombinedPlaceholderDialog,{open:U,templateVariables:L,filePlaceholders:W,onTemplateVariablesChange:O,onFilePlaceholdersChange:D,onConfirm:()=>z(!1),onCancel:()=>{z(!1),V(null),O([]),D([])},uploadFile:N.uploadFile})]})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),o=require("react"),r=require("react-router-dom"),t=require("../config/index.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var i=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var a=require("../utils/device.js");require("./AppFrame.js"),require("./Chat.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var s=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var l=require("../hooks/useToaster.js");require("../components/FileThumbnail.js");var u=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),p=require("../node_modules/@griffel/core/index.esm.js"),m=require("../node_modules/@fluentui/tokens/lib/tokens.js");const j=g.makeStyles({main:{flexGrow:1,...p.shorthands.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:m.tokens.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),q=({state:g})=>{const p=j(),{t:m}=s.default(),[q,f]=o.useState(!1),h=o.useRef(null),v=o.useRef(null),S=o.useRef(null),[x,C]=o.useState(null),[P,_]=o.useState([]),{service:b}=g,[I,F]=r.useSearchParams(),[w,U]=o.useState(void 0),[k,y]=o.useState(),E=l.default(),A=r.useNavigate(),M=o.useCallback((e=>{for(const o of e)b.getFileInfo(o).then((e=>{_((o=>[...o,e]))}))}),[b,_]),T=o.useCallback((e=>{const o=new FormData;o.append("file",e),b.uploadFile(e.name,o).then((e=>{M([e])})).catch((()=>{E.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[b,M,E,m]),L=e=>{f(e)};o.useEffect((()=>{const e=I.get("text"),o=I.get("url"),r=I.get("parentId");e&&(U(e),I.delete("text")),r&&(y(r),I.delete("parentId")),o&&(I.delete("url"),U(((e||"")+" "+o).trim())),F(I,{replace:!0})}),[I,F,U,b,M]);return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:p.container,style:{backgroundImage:`url(${t.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[e.jsx(i.default,{title:t.getConfigValue("APP_SAVE_TITLE")?m(t.getConfigValue("APP_SAVE_TITLE")):m("Spara")}),e.jsx(u.default,{disableSend:!0,defaultText:w,onSend:e=>{e=`${e}${x?" "+x:""}${P.length>0?"\n":""}${P.map((e=>`#file:${e.id}`)).join(" ")}`,b.sendMessage(e,k).then((()=>{E.notify(m("Meddelande"),m("Meddelandet är sparat."),""),k&&(y(void 0),A(-1))}))},files:P,onFilesChange:_,isUploading:q,onHandleDefaultFiles:M,onUploadFile:()=>{h.current?.triggerUpload(),console.log("attach-file")},onUploadImage:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{v.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{S.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:n.CodicentService.getImageUrl,onLocationChange:t.getConfigValue("COMPOSE_HIDE_LOCATION")?void 0:e=>{e?(async()=>{console.log("attach-location");const e=await a.getGpsLocation();e?(E.notify(m("Position"),m("Position tillagd."),""),C(`#gps(${e.coords.latitude},${e.coords.longitude})`)):console.log("Failed to get GPS location")})():(C(null),E.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!x,onImagePasted:T}),e.jsx(c.default,{ref:h,onFileUploaded:M,onUploading:L,multiple:!0,codicentService:b}),e.jsx(c.default,{codicentService:b,ref:v,onFileUploaded:M,onUploading:L,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:b,ref:S,onFileUploaded:M,onUploading:L,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.Compose=q,exports.default=q;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),o=require("react"),r=require("react-router-dom"),t=require("../config/index.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var i=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var a=require("../utils/device.js");require("./AppFrame.js"),require("./Chat.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var s=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var l=require("../hooks/useToaster.js");require("../components/FileThumbnail.js");var u=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),p=require("../node_modules/@griffel/core/index.esm.js"),m=require("../node_modules/@fluentui/tokens/lib/tokens.js");const j=g.makeStyles({main:{flexGrow:1,...p.shorthands.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:m.tokens.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),q=({state:g})=>{const p=j(),{t:m}=s.default(),[q,f]=o.useState(!1),h=o.useRef(null),v=o.useRef(null),S=o.useRef(null),[x,C]=o.useState(null),[P,_]=o.useState([]),{service:b}=g,[I,F]=r.useSearchParams(),[w,U]=o.useState(void 0),[k,y]=o.useState(),E=l.default(),M=r.useNavigate(),A=o.useCallback((e=>{for(const o of e)b.getFileInfo(o).then((e=>{_((o=>[...o,e]))}))}),[b,_]),T=o.useCallback((e=>{const o=new FormData;o.append("file",e),b.uploadFile(e.name,o).then((e=>{A([e])})).catch((()=>{E.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[b,A,E,m]),L=e=>{f(e)};o.useEffect((()=>{const e=I.get("text"),o=I.get("url"),r=I.get("parentId");e&&(U(e),I.delete("text")),r&&(y(r),I.delete("parentId")),o&&(I.delete("url"),U(((e||"")+" "+o).trim())),F(I,{replace:!0})}),[I,F,U,b,A]);return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:p.container,style:{backgroundImage:`url(${t.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[e.jsx(i.default,{title:t.getConfigValue("APP_SAVE_TITLE")?m(t.getConfigValue("APP_SAVE_TITLE")):m("Spara")}),e.jsx(u.default,{disableSend:!0,defaultText:w,onSend:e=>{e=`${e}${x?" "+x:""}${P.length>0?"\n":""}${P.map((e=>`#file:${e.id}`)).join(" ")}`,b.sendMessage(e,k).then((()=>{E.notify(m("Meddelande"),m("Meddelandet är sparat."),""),k&&(y(void 0),M(-1))}))},files:P,onFilesChange:_,isUploading:q,onHandleDefaultFiles:A,onUploadFile:()=>{h.current?.triggerUpload(),console.log("attach-file")},onUploadImage:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{v.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{S.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:n.CodicentService.getImageUrl,onLocationChange:t.getConfigValue("COMPOSE_HIDE_LOCATION")?void 0:e=>{e?(async()=>{console.log("attach-location");const e=await a.getGpsLocation();e?(E.notify(m("Position"),m("Position tillagd."),""),C(`#gps(${e.coords.latitude},${e.coords.longitude})`)):console.log("Failed to get GPS location")})():(C(null),E.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!x,onImagePasted:T}),e.jsx(c.default,{ref:h,onFileUploaded:A,onUploading:L,multiple:!0,codicentService:b}),e.jsx(c.default,{codicentService:b,ref:v,onFileUploaded:A,onUploading:L,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:b,ref:S,onFileUploaded:A,onUploading:L,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.Compose=q,exports.default=q;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),n=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var t=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var o=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../components/FileThumbnail.js");var i=require("../components/MessageInput.js"),u=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var l=require("../components/Page.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var c=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var d=require("../hooks/useToaster.js"),m=require("react-router-dom"),p=require("../node_modules/lodash/lodash.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),j=require("../node_modules/@griffel/core/index.esm.js"),f=require("../node_modules/@fluentui/tokens/lib/tokens.js"),h=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js");const v=g.makeStyles({main:{flexGrow:1,...j.shorthands.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:f.tokens.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"}}),x=({state:g,voice:j})=>{const f=v(),{t:x}=c.default(),[S,k]=r.useState(!1),b=r.useRef(null),w=r.useRef(null),C=r.useRef(null),[y]=r.useState(null),[_,I]=r.useState([]),{service:M}=g,[B,P]=m.useSearchParams(),[U,E]=r.useState(""),[A,F]=r.useState(void 0),T=d.default(),[N,R]=r.useState(void 0),[V,O]=r.useState("info"),$=r.useCallback((e=>{for(const r of e)M.getFileInfo(r).then((e=>{I((r=>[...r,e]))}))}),[M,I]),L=r.useCallback((e=>{const r=new FormData;r.append("file",e),M.uploadFile(e.name,r).then((e=>{$([e])})).catch((()=>{T.notify(x("Error"),x("Error uploading pasted image"),"")}))}),[M,$,T,x]),H=e=>{k(e)};r.useEffect((()=>{const e=B.get("text"),r=B.get("url");e&&(E(e),B.delete("text")),r&&(B.delete("url"),E(((e||"")+" "+r).trim())),P(B,{replace:!0})}),[B,P,E,M,$]);const z=r.useCallback((async e=>{if(!e||e.length<10)return;R(x("Analyserar...")),O("info");const r=await M.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let n=0;for(const e in r)"true"===r[e]&&n++;R(x(4===n?"Allt är med":r.shortSummary||"Något saknas")),O(4===n?"success":"warning")}catch{R("Error: "+e.content),O("error")}}}),[M]),D=r.useMemo((()=>p.lodashExports.debounce(z,2e3)),[z]);return r.useEffect((()=>()=>{D.cancel()}),[D]),e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:f.container,style:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[j&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:f.voiceIcon,children:e.jsx(o.default,{voice:j})}),e.jsx(t.default,{title:a.getConfigValue("APP_SAVE_TITLE")?x(a.getConfigValue("APP_SAVE_TITLE")):x("Spara")}),e.jsx(i.default,{defaultText:U,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${g.context.name||g.context.user?.email||g.context.nickname||"-"}`}${y?" "+y:""}${_.length>0?"\n":""}${_.map((e=>`#file:${e.id}`)).join(" ")}`,M.sendMessage(e).then((()=>{T.notify(x("Meddelande"),x("Meddelandet är sparat."),"")}))},files:_,onFilesChange:I,isUploading:S,onUploadImage:()=>{w.current?.triggerUpload()},onUploadCamera:()=>{C.current?.triggerUpload()},getImageUrl:n.CodicentService.getImageUrl,hasLocation:!!y,disableSend:!0,rows:9,placeholder:x("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==A&&(F(e),e&&e.trim().length>0?D(e):(R(void 0),D.cancel()))},onImagePasted:L}),N&&e.jsxs("div",{className:f.review,children:[e.jsx("h3",{children:x("Analys")}),e.jsx(h.MessageBar,{intent:V,layout:"multiline",children:e.jsx(q.MessageBarBody,{children:x(N)})})]}),e.jsx(u.default,{ref:b,onFileUploaded:$,onUploading:H,multiple:!0,codicentService:M}),e.jsx(u.default,{codicentService:M,ref:w,onFileUploaded:$,onUploading:H,multiple:!0,accept:"image/*"}),e.jsx(u.default,{codicentService:M,ref:C,onFileUploaded:$,onUploading:H,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.CrmPage=x,exports.default=x;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),n=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var t=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var o=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../components/FileThumbnail.js");var i=require("../components/MessageInput.js"),u=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var l=require("../components/Page.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var c=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var d=require("../hooks/useToaster.js"),m=require("react-router-dom"),p=require("../node_modules/lodash/lodash.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),j=require("../node_modules/@griffel/core/index.esm.js"),f=require("../node_modules/@fluentui/tokens/lib/tokens.js"),h=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js");const v=g.makeStyles({main:{flexGrow:1,...j.shorthands.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:f.tokens.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"}}),x=({state:g,voice:j})=>{const f=v(),{t:x}=c.default(),[S,k]=r.useState(!1),b=r.useRef(null),w=r.useRef(null),C=r.useRef(null),[y]=r.useState(null),[_,I]=r.useState([]),{service:M}=g,[B,P]=m.useSearchParams(),[U,E]=r.useState(""),[A,F]=r.useState(void 0),T=d.default(),[N,R]=r.useState(void 0),[V,O]=r.useState("info"),$=r.useCallback((e=>{for(const r of e)M.getFileInfo(r).then((e=>{I((r=>[...r,e]))}))}),[M,I]),L=r.useCallback((e=>{const r=new FormData;r.append("file",e),M.uploadFile(e.name,r).then((e=>{$([e])})).catch((()=>{T.notify(x("Error"),x("Error uploading pasted image"),"")}))}),[M,$,T,x]),H=e=>{k(e)};r.useEffect((()=>{const e=B.get("text"),r=B.get("url");e&&(E(e),B.delete("text")),r&&(B.delete("url"),E(((e||"")+" "+r).trim())),P(B,{replace:!0})}),[B,P,E,M,$]);const z=r.useCallback((async e=>{if(!e||e.length<10)return;R(x("Analyserar...")),O("info");const r=await M.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let n=0;for(const e in r)"true"===r[e]&&n++;R(x(4===n?"Allt är med":r.shortSummary||"Något saknas")),O(4===n?"success":"warning")}catch{R("Error: "+e.content),O("error")}}}),[M]),D=r.useMemo((()=>p.lodashExports.debounce(z,2e3)),[z]);return r.useEffect((()=>()=>{D.cancel()}),[D]),e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:f.container,style:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[j&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:f.voiceIcon,children:e.jsx(o.default,{voice:j})}),e.jsx(t.default,{title:a.getConfigValue("APP_SAVE_TITLE")?x(a.getConfigValue("APP_SAVE_TITLE")):x("Spara")}),e.jsx(i.default,{defaultText:U,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${g.context.name||g.context.user?.email||g.context.nickname||"-"}`}${y?" "+y:""}${_.length>0?"\n":""}${_.map((e=>`#file:${e.id}`)).join(" ")}`,M.sendMessage(e).then((()=>{T.notify(x("Meddelande"),x("Meddelandet är sparat."),"")}))},files:_,onFilesChange:I,isUploading:S,onUploadImage:()=>{w.current?.triggerUpload()},onUploadCamera:()=>{C.current?.triggerUpload()},getImageUrl:n.CodicentService.getImageUrl,hasLocation:!!y,disableSend:!0,rows:9,placeholder:x("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==A&&(F(e),e&&e.trim().length>0?D(e):(R(void 0),D.cancel()))},onImagePasted:L}),N&&e.jsxs("div",{className:f.review,children:[e.jsx("h3",{children:x("Analys")}),e.jsx(h.MessageBar,{intent:V,layout:"multiline",children:e.jsx(q.MessageBarBody,{children:x(N)})})]}),e.jsx(u.default,{ref:b,onFileUploaded:$,onUploading:H,multiple:!0,codicentService:M}),e.jsx(u.default,{codicentService:M,ref:w,onFileUploaded:$,onUploading:H,multiple:!0,accept:"image/*"}),e.jsx(u.default,{codicentService:M,ref:C,onFileUploaded:$,onUploading:H,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.CrmPage=x,exports.default=x;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),t=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var o=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/device.js");require("../components/FileThumbnail.js");var l=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var u=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var p=require("../hooks/useToaster.js"),m=require("react-router-dom"),h=require("../node_modules/lodash/lodash.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@griffel/core/index.esm.js"),j=require("../node_modules/@fluentui/tokens/lib/tokens.js"),x=require("../node_modules/@fluentui/react-text/lib/components/Text/Text.js"),S=require("../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js"),v=require("../node_modules/@fluentui/react-card/lib/components/Card/Card.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),y=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js");const k=g.makeStyles({main:{flexGrow:1,...f.shorthands.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.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",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px"),maxHeight:"300px"},historyCard:{...f.shorthands.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:j.tokens.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...f.shorthands.gap("4px")},historyDate:{fontSize:j.tokens.fontSizeBase200,color:j.tokens.colorNeutralForeground3},historyText:{fontSize:j.tokens.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:j.tokens.fontSizeBase400,fontWeight:j.tokens.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:j.tokens.colorNeutralForeground3,padding:"20px"}}),b=({state:g,voice:f})=>{const j=k(),{t:b}=u.default(),[C,w]=r.useState(!1),M=r.useRef(null),T=r.useRef(null),_=r.useRef(null),[N]=r.useState(null),[B,I]=r.useState([]),{service:E}=g,[P,A]=m.useSearchParams(),[D,F]=r.useState(""),[U,$]=r.useState(void 0),O=p.default(),[R,V]=r.useState(void 0),[z,L]=r.useState("info"),[H,W]=r.useState([]),[G,J]=r.useState(!1),Y=i.isMobileDevice(),K=r.useCallback((e=>{for(const r of e)E.getFileInfo(r).then((e=>{I((r=>[...r,e]))}))}),[E,I]),X=r.useCallback((e=>{const r=new FormData;r.append("file",e),E.uploadFile(e.name,r).then((e=>{K([e])})).catch((()=>{O.notify(b("Error"),b("Error uploading pasted image"),"")}))}),[E,K,O,b]),Q=e=>{w(e)},Z=r.useCallback((async()=>{J(!0);try{const e=await E.getMessages(["crm"]);W(e)}catch(e){console.error("Error loading CRM messages:",e),O.notify(b("Error"),b("Failed to load CRM messages"),"","error")}finally{J(!1)}}),[E,O,b]);r.useEffect((()=>{Z()}),[Z]),r.useEffect((()=>{const e=P.get("text"),r=P.get("url");e&&(F(e),P.delete("text")),r&&(P.delete("url"),F(((e||"")+" "+r).trim())),A(P,{replace:!0})}),[P,A,F,E,K]);const ee=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${g.context.name||g.context.user?.email||g.context.nickname||"-"}`}${N?" "+N:""}${B.length>0?"\n":""}${B.map((e=>`#file:${e.id}`)).join(" ")}`,E.sendMessage(e).then((()=>{O.notify(b("Meddelande"),b("Meddelandet är sparat."),""),Z(),$(""),V(void 0)}))},re=r.useCallback((async e=>{if(!e||e.length<10)return;V(b("Analyserar...")),L("info");const r=await E.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let t=0;for(const e in r)"true"===r[e]&&t++;V(b(4===t?"Allt är med":r.shortSummary||"Något saknas")),L(4===t?"success":"warning")}catch{V("Error: "+e.content),L("error")}}}),[E,b]),te=r.useMemo((()=>h.lodashExports.debounce(re,2e3)),[re]);r.useEffect((()=>()=>{te.cancel()}),[te]);const oe=e=>{const r=new Date,t=new Date(e),o=r.getTime()-t.getTime(),n=Math.floor(o/6e4),s=Math.floor(o/36e5),a=Math.floor(o/864e5);return n<1?b("Just now"):n<60?`${n} ${b("minutes ago")}`:s<24?`${s} ${b("hours ago")}`:a<7?`${a} ${b("days ago")}`:t.toLocaleDateString()},ne=e=>{const r=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return r.substring(0,150)+(r.length>150?"...":"")},se=()=>e.jsxs("div",{className:Y?j.historySectionMobile:j.historySection,children:[e.jsx(x.Text,{className:j.historyTitle,children:b("Tidigare sparade")}),G?e.jsx("div",{className:j.emptyState,children:e.jsx(S.Spinner,{size:"small"})}):0===H.length?e.jsx("div",{className:j.emptyState,children:e.jsx(x.Text,{children:b("Inga sparade meddelanden än")})}):H.map((r=>e.jsx(v.Card,{className:j.historyCard,onClick:()=>(e=>{const r=ne(e.content);$(r)})(r),children:e.jsxs("div",{className:j.historyCardContent,children:[e.jsx(x.Text,{className:j.historyDate,children:oe(r.createdAt)}),e.jsx(x.Text,{className:j.historyText,children:ne(r.content)})]})},r.id)))]});return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:Y?j.containerMobile:j.container,children:[!Y&&se(),e.jsxs("div",{className:Y?j.inputSectionMobile:j.inputSection,style:Y?void 0:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[f&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:j.voiceIcon,children:e.jsx(n.default,{voice:f})}),e.jsx(o.default,{title:a.getConfigValue("APP_SAVE_TITLE")?b(a.getConfigValue("APP_SAVE_TITLE")):b("Spara")}),e.jsx(l.default,{defaultText:D,onSend:ee,files:B,onFilesChange:I,isUploading:C,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{_.current?.triggerUpload()},getImageUrl:t.CodicentService.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:b("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==U&&($(e),e&&e.trim().length>0?te(e):(V(void 0),te.cancel()))},onImagePasted:X}),R&&e.jsxs("div",{className:j.review,children:[e.jsx("h3",{children:b("Analys")}),e.jsx(q.MessageBar,{intent:z,layout:"multiline",children:e.jsx(y.MessageBarBody,{children:b(R)})})]}),e.jsx(c.default,{ref:M,onFileUploaded:K,onUploading:Q,multiple:!0,codicentService:E}),e.jsx(c.default,{codicentService:E,ref:T,onFileUploaded:K,onUploading:Q,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:E,ref:_,onFileUploaded:K,onUploading:Q,multiple:!0,accept:"image/*",capture:"environment"})]}),Y&&se()]})})};exports.CrmPagePersistent=b,exports.default=b;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),t=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var o=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/device.js");require("../components/FileThumbnail.js");var l=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var u=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var p=require("../hooks/useToaster.js"),m=require("react-router-dom"),h=require("../node_modules/lodash/lodash.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@griffel/core/index.esm.js"),j=require("../node_modules/@fluentui/tokens/lib/tokens.js"),x=require("../node_modules/@fluentui/react-text/lib/components/Text/Text.js"),S=require("../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js"),v=require("../node_modules/@fluentui/react-card/lib/components/Card/Card.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),y=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js");const k=g.makeStyles({main:{flexGrow:1,...f.shorthands.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.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",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px"),maxHeight:"300px"},historyCard:{...f.shorthands.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:j.tokens.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...f.shorthands.gap("4px")},historyDate:{fontSize:j.tokens.fontSizeBase200,color:j.tokens.colorNeutralForeground3},historyText:{fontSize:j.tokens.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:j.tokens.fontSizeBase400,fontWeight:j.tokens.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:j.tokens.colorNeutralForeground3,padding:"20px"}}),b=({state:g,voice:f})=>{const j=k(),{t:b}=u.default(),[C,w]=r.useState(!1),M=r.useRef(null),T=r.useRef(null),_=r.useRef(null),[N]=r.useState(null),[B,I]=r.useState([]),{service:E}=g,[P,A]=m.useSearchParams(),[D,F]=r.useState(""),[U,$]=r.useState(void 0),O=p.default(),[R,V]=r.useState(void 0),[z,L]=r.useState("info"),[H,W]=r.useState([]),[G,J]=r.useState(!1),Y=i.isMobileDevice(),K=r.useCallback((e=>{for(const r of e)E.getFileInfo(r).then((e=>{I((r=>[...r,e]))}))}),[E,I]),X=r.useCallback((e=>{const r=new FormData;r.append("file",e),E.uploadFile(e.name,r).then((e=>{K([e])})).catch((()=>{O.notify(b("Error"),b("Error uploading pasted image"),"")}))}),[E,K,O,b]),Q=e=>{w(e)},Z=r.useCallback((async()=>{J(!0);try{const e=await E.getMessages(["crm"]);W(e)}catch(e){console.error("Error loading CRM messages:",e),O.notify(b("Error"),b("Failed to load CRM messages"),"","error")}finally{J(!1)}}),[E,O,b]);r.useEffect((()=>{Z()}),[Z]),r.useEffect((()=>{const e=P.get("text"),r=P.get("url");e&&(F(e),P.delete("text")),r&&(P.delete("url"),F(((e||"")+" "+r).trim())),A(P,{replace:!0})}),[P,A,F,E,K]);const ee=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${g.context.name||g.context.user?.email||g.context.nickname||"-"}`}${N?" "+N:""}${B.length>0?"\n":""}${B.map((e=>`#file:${e.id}`)).join(" ")}`,E.sendMessage(e).then((()=>{O.notify(b("Meddelande"),b("Meddelandet är sparat."),""),Z(),$(""),V(void 0)}))},re=r.useCallback((async e=>{if(!e||e.length<10)return;V(b("Analyserar...")),L("info");const r=await E.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let t=0;for(const e in r)"true"===r[e]&&t++;V(b(4===t?"Allt är med":r.shortSummary||"Något saknas")),L(4===t?"success":"warning")}catch{V("Error: "+e.content),L("error")}}}),[E,b]),te=r.useMemo((()=>h.lodashExports.debounce(re,2e3)),[re]);r.useEffect((()=>()=>{te.cancel()}),[te]);const oe=e=>{const r=new Date,t=new Date(e),o=r.getTime()-t.getTime(),n=Math.floor(o/6e4),s=Math.floor(o/36e5),a=Math.floor(o/864e5);return n<1?b("Just now"):n<60?`${n} ${b("minutes ago")}`:s<24?`${s} ${b("hours ago")}`:a<7?`${a} ${b("days ago")}`:t.toLocaleDateString()},ne=e=>{const r=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return r.substring(0,150)+(r.length>150?"...":"")},se=()=>e.jsxs("div",{className:Y?j.historySectionMobile:j.historySection,children:[e.jsx(x.Text,{className:j.historyTitle,children:b("Tidigare sparade")}),G?e.jsx("div",{className:j.emptyState,children:e.jsx(S.Spinner,{size:"small"})}):0===H.length?e.jsx("div",{className:j.emptyState,children:e.jsx(x.Text,{children:b("Inga sparade meddelanden än")})}):H.map((r=>e.jsx(v.Card,{className:j.historyCard,onClick:()=>(e=>{const r=ne(e.content);$(r)})(r),children:e.jsxs("div",{className:j.historyCardContent,children:[e.jsx(x.Text,{className:j.historyDate,children:oe(r.createdAt)}),e.jsx(x.Text,{className:j.historyText,children:ne(r.content)})]})},r.id)))]});return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:Y?j.containerMobile:j.container,children:[!Y&&se(),e.jsxs("div",{className:Y?j.inputSectionMobile:j.inputSection,style:Y?void 0:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[f&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:j.voiceIcon,children:e.jsx(n.default,{voice:f})}),e.jsx(o.default,{title:a.getConfigValue("APP_SAVE_TITLE")?b(a.getConfigValue("APP_SAVE_TITLE")):b("Spara")}),e.jsx(l.default,{defaultText:D,onSend:ee,files:B,onFilesChange:I,isUploading:C,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{_.current?.triggerUpload()},getImageUrl:t.CodicentService.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:b("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==U&&($(e),e&&e.trim().length>0?te(e):(V(void 0),te.cancel()))},onImagePasted:X}),R&&e.jsxs("div",{className:j.review,children:[e.jsx("h3",{children:b("Analys")}),e.jsx(q.MessageBar,{intent:z,layout:"multiline",children:e.jsx(y.MessageBarBody,{children:b(R)})})]}),e.jsx(c.default,{ref:M,onFileUploaded:K,onUploading:Q,multiple:!0,codicentService:E}),e.jsx(c.default,{codicentService:E,ref:T,onFileUploaded:K,onUploading:Q,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:E,ref:_,onFileUploaded:K,onUploading:Q,multiple:!0,accept:"image/*",capture:"environment"})]}),Y&&se()]})})};exports.CrmPagePersistent=b,exports.default=b;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("../components/Markdown.js");require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var s=require("../components/Title.js"),t=require("../components/Text.js");require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var i=require("react");require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var o=require("../config/index.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var n=require("../utils/helpers.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var a=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js");var u=require("../components/Content.js");require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var c=require("../components/Page.js"),l=require("react-router-dom"),d=require("../node_modules/@griffel/react/makeStyles.esm.js"),m=require("../node_modules/@fluentui/react-button/lib/components/Button/Button.js");const j=d.makeStyles({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"}});exports.default=()=>{const{t:d,tAsync:p}=a.default(),[q]=l.useSearchParams(),g=l.useNavigate(),h=q.get("id"),x=j(),[f,v]=i.useState(""),[C,b]=i.useState(!1);return i.useEffect((()=>{(async()=>{const e=o.getConfigValue("FORM_ACCEPT_MARKDOWN");if(e){b(!0);const r=await p(e);b(!1),v(r.replace("{{code}}",n.formatGuidToShorterReadableCode(h||"")))}})()}),[p,h]),e.jsx(c.Page,{hideFooter:!0,hideHeader:!0,children:e.jsx("div",{className:x.container,style:{backgroundImage:`url(${o.getConfigValue("FORM_BACKGROUND_IMAGE_URL")})`},children:e.jsxs(u.default,{children:[C&&e.jsx(t.Text,{children:d("Översätter...")}),o.getConfigValue("FORM_ACCEPT_MARKDOWN")&&f&&!C&&e.jsx(r.default,{content:f}),!o.getConfigValue("FORM_ACCEPT_MARKDOWN")&&e.jsxs(e.Fragment,{children:[e.jsx(s.Title,{children:d("Din kod för formuläret")}),e.jsx("p",{className:x.instructionParagraph,children:d("Instruktioner:")}),e.jsxs("ol",{className:x.orderedList,children:[e.jsx("li",{children:d("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),e.jsx("li",{children:d("Klicka på 'Starta' för att komma igång med chatten.")})]}),e.jsx(t.Text,{size:500,children:d("Din kod är (skriv ner den):")}),e.jsx(t.Text,{size:600,style:{userSelect:"all"},children:n.formatGuidToShorterReadableCode(h||"")})]}),h&&e.jsx(m.Button,{appearance:"primary",onClick:()=>g(`/chat?fid=${h}`),children:d("Starta")})]})})})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("../components/Markdown.js");require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var s=require("../components/Title.js"),t=require("../components/Text.js");require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var i=require("react");require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var o=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var n=require("../utils/helpers.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var a=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js");var u=require("../components/Content.js");require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var c=require("../components/Page.js"),l=require("react-router-dom"),d=require("../node_modules/@griffel/react/makeStyles.esm.js"),m=require("../node_modules/@fluentui/react-button/lib/components/Button/Button.js");const j=d.makeStyles({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"}});exports.default=()=>{const{t:d,tAsync:p}=a.default(),[q]=l.useSearchParams(),g=l.useNavigate(),h=q.get("id"),x=j(),[f,v]=i.useState(""),[C,b]=i.useState(!1);return i.useEffect((()=>{(async()=>{const e=o.getConfigValue("FORM_ACCEPT_MARKDOWN");if(e){b(!0);const r=await p(e);b(!1),v(r.replace("{{code}}",n.formatGuidToShorterReadableCode(h||"")))}})()}),[p,h]),e.jsx(c.Page,{hideFooter:!0,hideHeader:!0,children:e.jsx("div",{className:x.container,style:{backgroundImage:`url(${o.getConfigValue("FORM_BACKGROUND_IMAGE_URL")})`},children:e.jsxs(u.default,{children:[C&&e.jsx(t.Text,{children:d("Översätter...")}),o.getConfigValue("FORM_ACCEPT_MARKDOWN")&&f&&!C&&e.jsx(r.default,{content:f}),!o.getConfigValue("FORM_ACCEPT_MARKDOWN")&&e.jsxs(e.Fragment,{children:[e.jsx(s.Title,{children:d("Din kod för formuläret")}),e.jsx("p",{className:x.instructionParagraph,children:d("Instruktioner:")}),e.jsxs("ol",{className:x.orderedList,children:[e.jsx("li",{children:d("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),e.jsx("li",{children:d("Klicka på 'Starta' för att komma igång med chatten.")})]}),e.jsx(t.Text,{size:500,children:d("Din kod är (skriv ner den):")}),e.jsx(t.Text,{size:600,style:{userSelect:"all"},children:n.formatGuidToShorterReadableCode(h||"")})]}),h&&e.jsx(m.Button,{appearance:"primary",onClick:()=>g(`/chat?fid=${h}`),children:d("Starta")})]})})})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react");require("../components/Markdown.js"),require("../components/Textarea.js");var n=require("../components/Button.js");require("../components/CompoundButton.js");var o=require("../components/Title.js");require("../components/Spinner.js");var t=require("../components/Label.js"),i=require("../components/Input.js");require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var a=require("../hooks/useStateWithLocalStorage.js");require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var s=require("../config/index.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var l=require("../utils/helpers.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var u=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js");var c=require("../components/Content.js");require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),p=require("../node_modules/@griffel/react/makeStyles.esm.js"),m=require("../node_modules/@fluentui/react-utilities/lib/hooks/useId.js"),j=require("../node_modules/@fluentui/react-combobox/lib/components/Dropdown/Dropdown.js"),h=require("../node_modules/@fluentui/react-combobox/lib/components/Option/Option.js");const q=p.makeStyles({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}});exports.default=({state:p})=>{const k=q(),{service:g}=p,{t:x}=u.default(),[v,f]=a.default(p.context.selectedApp+"_forms",[]),[b,w]=r.useState(),[S,C]=r.useState(),[y,_]=r.useState(!1),[$,P]=r.useState(),T=m.useId("form-dropdown");r.useEffect((()=>{g.getForms().then((e=>{e.sort(((e,r)=>e.name.localeCompare(r.name))),f(e)}))}),[g,x,f]);const B=void 0!==navigator.share;return e.jsx(d.Page,{children:e.jsx("div",{className:k.container,style:{backgroundImage:`url(${s.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e.jsxs(c.default,{children:[e.jsx(o.Title,{children:x("Skapa länk till formulär")}),e.jsx("p",{className:k.instructionParagraph,children:x("Instruktioner")}),e.jsxs("ol",{className:k.orderedList,children:[e.jsx("li",{children:x("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),e.jsx("li",{children:x("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),e.jsx("li",{children:x("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),e.jsx("li",{children:x("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),e.jsx("li",{children:x("Kom ihåg att spara (skriva ner) koden")})]}),e.jsx("label",{id:T,className:k.instructionParagraph,children:x("Välj formulär")}),e.jsx(j.Dropdown,{"aria-labelledby":T,placeholder:"-",onOptionSelect:(e,r)=>P(r.optionValue),children:v.map((r=>e.jsxs(h.Option,{value:r.name,text:`${r.title} (${r.name})`,children:[`${r.title} (${r.name})`," "]},r.name)))}),e.jsx(n.Button,{appearance:"primary",disabled:!$,onClick:()=>{const e=v.find((e=>e.name===$));e?.url?g.sendMessage(`#ss-link #${$}`).then((r=>{const n=new Date(Date.now()+2592e5);g.generateApiToken(n).then((n=>{const o=e.url.includes("?")?"&":"?",t=`${e.url}${o}token=${n}`;w(t);const i=l.formatGuidToShorterReadableCode(r);C(i)}))})):g.sendMessage(`#ss-link #${$}`).then((e=>{const r=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;w(`${r}#/formaccept?id=${e}`);const n=l.formatGuidToShorterReadableCode(e);C(n)}))},children:x("Skapa länk")}),b&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:k.generatedLinkTitle,children:x("Här är din genererade länk (du kan kopiera eller dela den):")}),e.jsx("div",{className:k.inputAndButton,children:e.jsx(i.Input,{className:k.input,value:b,readOnly:!0,onFocus:e=>e.target.select()})}),e.jsx("br",{}),e.jsxs("div",{className:k.inputAndButton,children:[e.jsx(n.Button,{appearance:"primary",title:x("Kopiera länk"),icon:"CopyRegular",onClick:()=>{b&&(navigator.clipboard.writeText(b),_(!0),setTimeout((()=>{_(!1),w(void 0)}),2e3))},children:x("Kopiera")}),B&&e.jsx(n.Button,{appearance:"primary",title:x("Dela länk"),icon:"ShareRegular",onClick:()=>{b&&(navigator.share({url:b}),setTimeout((()=>{w(void 0)}),2e3))},children:x("Dela")})]}),y&&e.jsx(t.Label,{children:x("Länk kopierad!")})]})]})})})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react");require("../components/Markdown.js"),require("../components/Textarea.js");var n=require("../components/Button.js");require("../components/CompoundButton.js");var o=require("../components/Title.js");require("../components/Spinner.js");var t=require("../components/Label.js"),i=require("../components/Input.js");require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var a=require("../hooks/useStateWithLocalStorage.js");require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var s=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var l=require("../utils/helpers.js");require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var u=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js");var c=require("../components/Content.js");require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),p=require("../node_modules/@griffel/react/makeStyles.esm.js"),m=require("../node_modules/@fluentui/react-utilities/lib/hooks/useId.js"),j=require("../node_modules/@fluentui/react-combobox/lib/components/Dropdown/Dropdown.js"),h=require("../node_modules/@fluentui/react-combobox/lib/components/Option/Option.js");const q=p.makeStyles({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}});exports.default=({state:p})=>{const k=q(),{service:g}=p,{t:x}=u.default(),[v,f]=a.default(p.context.selectedApp+"_forms",[]),[b,w]=r.useState(),[S,C]=r.useState(),[y,_]=r.useState(!1),[$,P]=r.useState(),T=m.useId("form-dropdown");r.useEffect((()=>{g.getForms().then((e=>{e.sort(((e,r)=>e.name.localeCompare(r.name))),f(e)}))}),[g,x,f]);const B=void 0!==navigator.share;return e.jsx(d.Page,{children:e.jsx("div",{className:k.container,style:{backgroundImage:`url(${s.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e.jsxs(c.default,{children:[e.jsx(o.Title,{children:x("Skapa länk till formulär")}),e.jsx("p",{className:k.instructionParagraph,children:x("Instruktioner")}),e.jsxs("ol",{className:k.orderedList,children:[e.jsx("li",{children:x("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),e.jsx("li",{children:x("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),e.jsx("li",{children:x("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),e.jsx("li",{children:x("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),e.jsx("li",{children:x("Kom ihåg att spara (skriva ner) koden")})]}),e.jsx("label",{id:T,className:k.instructionParagraph,children:x("Välj formulär")}),e.jsx(j.Dropdown,{"aria-labelledby":T,placeholder:"-",onOptionSelect:(e,r)=>P(r.optionValue),children:v.map((r=>e.jsxs(h.Option,{value:r.name,text:`${r.title} (${r.name})`,children:[`${r.title} (${r.name})`," "]},r.name)))}),e.jsx(n.Button,{appearance:"primary",disabled:!$,onClick:()=>{const e=v.find((e=>e.name===$));e?.url?g.sendMessage(`#ss-link #${$}`).then((r=>{const n=new Date(Date.now()+2592e5);g.generateApiToken(n).then((n=>{const o=e.url.includes("?")?"&":"?",t=`${e.url}${o}token=${n}`;w(t);const i=l.formatGuidToShorterReadableCode(r);C(i)}))})):g.sendMessage(`#ss-link #${$}`).then((e=>{const r=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;w(`${r}#/formaccept?id=${e}`);const n=l.formatGuidToShorterReadableCode(e);C(n)}))},children:x("Skapa länk")}),b&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:k.generatedLinkTitle,children:x("Här är din genererade länk (du kan kopiera eller dela den):")}),e.jsx("div",{className:k.inputAndButton,children:e.jsx(i.Input,{className:k.input,value:b,readOnly:!0,onFocus:e=>e.target.select()})}),e.jsx("br",{}),e.jsxs("div",{className:k.inputAndButton,children:[e.jsx(n.Button,{appearance:"primary",title:x("Kopiera länk"),icon:"CopyRegular",onClick:()=>{b&&(navigator.clipboard.writeText(b),_(!0),setTimeout((()=>{_(!1),w(void 0)}),2e3))},children:x("Kopiera")}),B&&e.jsx(n.Button,{appearance:"primary",title:x("Dela länk"),icon:"ShareRegular",onClick:()=>{b&&(navigator.share({url:b}),setTimeout((()=>{w(void 0)}),2e3))},children:x("Dela")})]}),y&&e.jsx(t.Label,{children:x("Länk kopierad!")})]})]})})})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var s=require("../components/Text.js");require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js"),require("../hooks/useLocalization.js"),require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js");var i=require("../components/HtmlView.js");require("../components/Footer.js");var t=require("../components/Page.js"),n=require("../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js");exports.default=({state:o})=>{const c=window.location.hash.match(/^#\/html\/(.+)$/),a=c?decodeURIComponent(c[1]):"",[u,l]=r.useState(),[d,j]=r.useState(!1),[m,p]=r.useState(),{service:h}=o;return r.useEffect((()=>{a&&h?(j(!0),p(void 0),h.getMessagesFast([a],void 0,1).then((e=>{if(0===e.length)return void p(`No messages found with tag: ${a}`);const r=e[0].content;l((e=>{const r=e.indexOf("```html");if(-1!==r){const s=e.indexOf("```",r+7);return-1===s?e.substring(r+7):e.substring(r+7,s)}const s=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const r of s){const s=e.match(r);if(s)return s[0]}if(e.includes("<html")||e.includes("<!DOCTYPE")||e.includes("<div")||e.includes("<p>")||e.includes("<span")){const r=["<!DOCTYPE","<html","<div","<body","<article","<section"];let s=-1;for(const i of r){const r=e.indexOf(i);-1!==r&&(-1===s||r<s)&&(s=r)}if(-1!==s){let r=e.substring(s);const i=["</html>","</body>","</div>"];for(const e of i){const s=r.lastIndexOf(e);if(-1!==s){r=r.substring(0,s+e.length);break}}return r}return e}return e})(r))})).catch((e=>{console.error("Error fetching message:",e),p(`Error fetching message: ${e.message||"Unknown error"}`)})).finally((()=>{j(!1)}))):p("No tag provided or service unavailable")}),[a,h]),d?e.jsx(t.Page,{hideHeader:!0,hideFooter:!0,children:e.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:e.jsx(n.Spinner,{})})}):m?e.jsx(t.Page,{hideHeader:!0,hideFooter:!0,children:e.jsxs("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[e.jsx(s.Text,{children:m}),e.jsxs(s.Text,{children:["Tag: ",a]})]})}):u?e.jsx(i.default,{html:u,onDismiss:()=>window.history.back()}):e.jsx(t.Page,{hideHeader:!0,hideFooter:!0,children:e.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:e.jsx(s.Text,{children:"No HTML content available"})})})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js");var s=require("../components/Text.js");require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js"),require("../hooks/useLocalization.js"),require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js");var i=require("../components/HtmlView.js");require("../components/Footer.js");var t=require("../components/Page.js"),n=require("../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js");exports.default=({state:o})=>{const a=window.location.hash.match(/^#\/html\/(.+)$/),c=a?decodeURIComponent(a[1]):"",[u,l]=r.useState(),[d,j]=r.useState(!1),[m,p]=r.useState(),{service:h}=o;return r.useEffect((()=>{c&&h?(j(!0),p(void 0),h.getMessagesFast([c],void 0,1).then((e=>{if(0===e.length)return void p(`No messages found with tag: ${c}`);const r=e[0].content;l((e=>{const r=e.indexOf("```html");if(-1!==r){const s=e.indexOf("```",r+7);return-1===s?e.substring(r+7):e.substring(r+7,s)}const s=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const r of s){const s=e.match(r);if(s)return s[0]}if(e.includes("<html")||e.includes("<!DOCTYPE")||e.includes("<div")||e.includes("<p>")||e.includes("<span")){const r=["<!DOCTYPE","<html","<div","<body","<article","<section"];let s=-1;for(const i of r){const r=e.indexOf(i);-1!==r&&(-1===s||r<s)&&(s=r)}if(-1!==s){let r=e.substring(s);const i=["</html>","</body>","</div>"];for(const e of i){const s=r.lastIndexOf(e);if(-1!==s){r=r.substring(0,s+e.length);break}}return r}return e}return e})(r))})).catch((e=>{console.error("Error fetching message:",e),p(`Error fetching message: ${e.message||"Unknown error"}`)})).finally((()=>{j(!1)}))):p("No tag provided or service unavailable")}),[c,h]),d?e.jsx(t.Page,{hideHeader:!0,hideFooter:!0,children:e.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:e.jsx(n.Spinner,{})})}):m?e.jsx(t.Page,{hideHeader:!0,hideFooter:!0,children:e.jsxs("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[e.jsx(s.Text,{children:m}),e.jsxs(s.Text,{children:["Tag: ",c]})]})}):u?e.jsx(i.default,{html:u,onDismiss:()=>window.history.back()}):e.jsx(t.Page,{hideHeader:!0,hideFooter:!0,children:e.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:e.jsx(s.Text,{children:"No HTML content available"})})})};