codicent-app-sdk 0.4.14 → 0.4.17

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 (97) hide show
  1. package/README.md +556 -521
  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/DataMessagePicker.d.ts +33 -0
  8. package/dist/cjs/components/DataMessagePicker.d.ts.map +1 -0
  9. package/dist/cjs/components/DataMessagePicker.js +1 -0
  10. package/dist/cjs/components/Footer.js +1 -1
  11. package/dist/cjs/components/Header.js +1 -1
  12. package/dist/cjs/components/HtmlView.js +1 -1
  13. package/dist/cjs/components/MermaidChart.d.ts.map +1 -1
  14. package/dist/cjs/components/MermaidChart.js +1 -1
  15. package/dist/cjs/components/MessageInput.js +1 -1
  16. package/dist/cjs/components/MessageItem.js +1 -1
  17. package/dist/cjs/components/Profile.js +1 -1
  18. package/dist/cjs/components/Prompt.js +1 -1
  19. package/dist/cjs/components/SnapFooter.js +1 -1
  20. package/dist/cjs/components/TextHeader.js +1 -1
  21. package/dist/cjs/components/TypingIndicator.js +1 -1
  22. package/dist/cjs/components/UploadFile.js +1 -1
  23. package/dist/cjs/components/UrlProcessor.js +1 -1
  24. package/dist/cjs/components/VoiceIcon.js +1 -1
  25. package/dist/cjs/components/index.d.ts +2 -0
  26. package/dist/cjs/components/index.d.ts.map +1 -1
  27. package/dist/cjs/config/index.d.ts.map +1 -1
  28. package/dist/cjs/config/index.js +1 -1
  29. package/dist/cjs/hooks/useAuthState.js +1 -1
  30. package/dist/cjs/hooks/useCodicentState.js +1 -1
  31. package/dist/cjs/hooks/useLocalization.d.ts.map +1 -1
  32. package/dist/cjs/hooks/useLocalization.js +1 -1
  33. package/dist/cjs/hooks/useTools.d.ts.map +1 -1
  34. package/dist/cjs/hooks/useTools.js +1 -1
  35. package/dist/cjs/index.js +1 -1
  36. package/dist/cjs/pages/AppFrame.js +1 -1
  37. package/dist/cjs/pages/Chat.js +1 -1
  38. package/dist/cjs/pages/Compose.js +1 -1
  39. package/dist/cjs/pages/CrmPage.js +1 -1
  40. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  41. package/dist/cjs/pages/FormAccept.js +1 -1
  42. package/dist/cjs/pages/FormInvite.js +1 -1
  43. package/dist/cjs/pages/HtmlViewer.js +1 -1
  44. package/dist/cjs/pages/Login.js +1 -1
  45. package/dist/cjs/pages/Purchase.js +1 -1
  46. package/dist/cjs/pages/Sales.js +1 -1
  47. package/dist/cjs/pages/Search.js +1 -1
  48. package/dist/cjs/pages/Snap.js +1 -1
  49. package/dist/esm/components/AiInput.js +1 -1
  50. package/dist/esm/components/AudioIcon.js +1 -1
  51. package/dist/esm/components/ChatInput.js +1 -1
  52. package/dist/esm/components/ChatMessage.js +1 -1
  53. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  54. package/dist/esm/components/DataMessagePicker.d.ts +33 -0
  55. package/dist/esm/components/DataMessagePicker.d.ts.map +1 -0
  56. package/dist/esm/components/DataMessagePicker.js +1 -0
  57. package/dist/esm/components/Footer.js +1 -1
  58. package/dist/esm/components/Header.js +1 -1
  59. package/dist/esm/components/HtmlView.js +1 -1
  60. package/dist/esm/components/MermaidChart.d.ts.map +1 -1
  61. package/dist/esm/components/MermaidChart.js +1 -1
  62. package/dist/esm/components/MessageInput.js +1 -1
  63. package/dist/esm/components/MessageItem.js +1 -1
  64. package/dist/esm/components/Profile.js +1 -1
  65. package/dist/esm/components/Prompt.js +1 -1
  66. package/dist/esm/components/SnapFooter.js +1 -1
  67. package/dist/esm/components/TextHeader.js +1 -1
  68. package/dist/esm/components/TypingIndicator.js +1 -1
  69. package/dist/esm/components/UploadFile.js +1 -1
  70. package/dist/esm/components/UrlProcessor.js +1 -1
  71. package/dist/esm/components/VoiceIcon.js +1 -1
  72. package/dist/esm/components/index.d.ts +2 -0
  73. package/dist/esm/components/index.d.ts.map +1 -1
  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/useCodicentState.js +1 -1
  78. package/dist/esm/hooks/useLocalization.d.ts.map +1 -1
  79. package/dist/esm/hooks/useLocalization.js +1 -1
  80. package/dist/esm/hooks/useTools.d.ts.map +1 -1
  81. package/dist/esm/hooks/useTools.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/Login.js +1 -1
  92. package/dist/esm/pages/Purchase.js +1 -1
  93. package/dist/esm/pages/Sales.js +1 -1
  94. package/dist/esm/pages/Search.js +1 -1
  95. package/dist/esm/pages/Snap.js +1 -1
  96. package/dist/index.d.ts +263 -233
  97. package/package.json +1 -1
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- export{CodicentService,setBaseUrl}from"./services/codicent.js";export{default as Markdown}from"./components/Markdown.js";export{Textarea}from"./components/Textarea.js";export{Button}from"./components/Button.js";export{CompoundButton}from"./components/CompoundButton.js";export{Title}from"./components/Title.js";export{Text}from"./components/Text.js";export{Spinner}from"./components/Spinner.js";export{Label}from"./components/Label.js";export{Input}from"./components/Input.js";export{default as TextHeader}from"./components/TextHeader.js";export{default as TypingIndicator}from"./components/TypingIndicator.js";export{default as Prompt}from"./components/Prompt.js";export{default as ChatInput}from"./components/ChatInput.js";export{CombinedPlaceholderDialog}from"./components/CombinedPlaceholderDialog.js";export{default as ChatMessage}from"./components/ChatMessage.js";export{Header}from"./components/Header.js";export{default as VoiceIcon}from"./components/VoiceIcon.js";export{default as AudioIcon}from"./components/AudioIcon.js";export{FileThumbnail}from"./components/FileThumbnail.js";export{default as MessageInput}from"./components/MessageInput.js";export{default as UploadFile}from"./components/UploadFile.js";export{default as SnapFooter}from"./components/SnapFooter.js";export{default as Profile}from"./components/Profile.js";export{default as MessageItem}from"./components/MessageItem.js";export{default as Content}from"./components/Content.js";export{default as AiInput}from"./components/AiInput.js";export{default as SearchBox}from"./components/SearchBox.js";export{default as HtmlView}from"./components/HtmlView.js";export{Footer}from"./components/Footer.js";export{Page}from"./components/Page.js";export{UrlProcessor}from"./components/UrlProcessor.js";export{DatePicker}from"./components/DatePicker.js";export{ColorPicker}from"./components/ColorPicker.js";export{TimePicker}from"./components/TimePicker.js";export{QrCodeDialog}from"./components/QrCodeDialog.js";export{default as QrScanner}from"./components/QrScanner.js";export{default as GenericJsonRenderer}from"./components/GenericJsonRenderer.js";export{default as ErrorBoundary}from"./components/ErrorBoundary.js";export{default as OfflineMessage}from"./components/OfflineMessage.js";export{LanguageSelector}from"./components/LanguageSelector.js";export{default as ListView}from"./components/ListView.js";export{RecordModal}from"./components/RecordModal.js";export{default as BulkUploadDialog}from"./components/BulkUploadDialog.js";export{CookieBanner}from"./components/CookieBanner.js";export{default as useStateWithLocalStorage}from"./hooks/useStateWithLocalStorage.js";export{default as useAuthState}from"./hooks/useAuthState.js";export{useChat}from"./hooks/useChat.js";export{default as useCodicentState}from"./hooks/useCodicentState.js";export{useAudioRecorder}from"./hooks/useAudioRecorder.js";export{default as useTools}from"./hooks/useTools.js";export{default as useRealtimeVoiceAI}from"./hooks/useRealtimeVoiceAI.js";export{default as useLocalization}from"./hooks/useLocalization.js";export{useTemplateVariables}from"./hooks/useTemplateVariables.js";export{useCodicentApp}from"./hooks/useCodicentApp.js";export{default as useAppStyles}from"./hooks/useAppStyles.js";export{default as useToaster}from"./hooks/useToaster.js";export{default as useDebugLogs}from"./hooks/useDebugLogs.js";export{useObserveDataSchemas}from"./hooks/useObserveDataSchemas.js";export{default as MessageContent}from"./utils/MessageContent.js";export{default as generateBrandVariants}from"./utils/theme.js";export{default as log}from"./utils/logging.js";export{default as withWakeLock}from"./utils/withWakeLock.js";export{AppStateMachine,createAppStateMachine}from"./utils/appState.js";import{d as e}from"./_virtual/index.js";import"./lib/wavtools/lib/wav_packer.js";import"./lib/wavtools/lib/analysis/audio_analysis.js";export{WavStreamPlayer}from"./lib/wavtools/lib/wav_stream_player.js";export{WavRecorder}from"./lib/wavtools/lib/wav_recorder.js";export{getGpsLocation,isMobileDevice}from"./utils/device.js";export{getTimeString}from"./utils/helpers.js";export{CacheManager,stateMachineCacheManager}from"./utils/cacheManager.js";export{AppConfig,getConfigValue,initCodicentApp}from"./config/index.js";export{default as AppFrame}from"./pages/AppFrame.js";export{default as Chat}from"./pages/Chat.js";export{Compose}from"./pages/Compose.js";export{default as Snap}from"./pages/Snap.js";export{default as Search}from"./pages/Search.js";export{default as Login}from"./pages/Login.js";export{Logout}from"./pages/Logout.js";export{CrmPage}from"./pages/CrmPage.js";export{CrmPagePersistent}from"./pages/CrmPagePersistent.js";export{default as ImageView}from"./pages/ImageView.js";export{default as FormInvite}from"./pages/FormInvite.js";export{default as FormAccept}from"./pages/FormAccept.js";export{Sales}from"./pages/Sales.js";export{default as HtmlViewer}from"./pages/HtmlViewer.js";export{Purchase}from"./pages/Purchase.js";export{default as Help}from"./pages/Help.js";export{default as Debug}from"./pages/Debug.js";export{default as SchemaEditor}from"./pages/SchemaEditor.js";export{default as QrScan}from"./pages/QrScan.js";export{default as FormPage}from"./pages/FormPage.js";export{createCodicentApp}from"./bootstrap.js";var o=e.StateMachine;export{o as StateMachine};
1
+ export{CodicentService,setBaseUrl}from"./services/codicent.js";export{default as Markdown}from"./components/Markdown.js";export{Textarea}from"./components/Textarea.js";export{Button}from"./components/Button.js";export{CompoundButton}from"./components/CompoundButton.js";export{Title}from"./components/Title.js";export{Text}from"./components/Text.js";export{Spinner}from"./components/Spinner.js";export{Label}from"./components/Label.js";export{Input}from"./components/Input.js";export{default as TextHeader}from"./components/TextHeader.js";export{default as TypingIndicator}from"./components/TypingIndicator.js";export{default as Prompt}from"./components/Prompt.js";export{default as ChatInput}from"./components/ChatInput.js";export{CombinedPlaceholderDialog}from"./components/CombinedPlaceholderDialog.js";export{default as ChatMessage}from"./components/ChatMessage.js";export{Header}from"./components/Header.js";export{default as VoiceIcon}from"./components/VoiceIcon.js";export{default as AudioIcon}from"./components/AudioIcon.js";export{FileThumbnail}from"./components/FileThumbnail.js";export{default as MessageInput}from"./components/MessageInput.js";export{default as UploadFile}from"./components/UploadFile.js";export{default as SnapFooter}from"./components/SnapFooter.js";export{default as Profile}from"./components/Profile.js";export{default as MessageItem}from"./components/MessageItem.js";export{default as Content}from"./components/Content.js";export{default as AiInput}from"./components/AiInput.js";export{default as SearchBox}from"./components/SearchBox.js";export{default as DataMessagePicker}from"./components/DataMessagePicker.js";export{default as HtmlView}from"./components/HtmlView.js";export{Footer}from"./components/Footer.js";export{Page}from"./components/Page.js";export{UrlProcessor}from"./components/UrlProcessor.js";export{DatePicker}from"./components/DatePicker.js";export{ColorPicker}from"./components/ColorPicker.js";export{TimePicker}from"./components/TimePicker.js";export{QrCodeDialog}from"./components/QrCodeDialog.js";export{default as QrScanner}from"./components/QrScanner.js";export{default as GenericJsonRenderer}from"./components/GenericJsonRenderer.js";export{default as ErrorBoundary}from"./components/ErrorBoundary.js";export{default as OfflineMessage}from"./components/OfflineMessage.js";export{LanguageSelector}from"./components/LanguageSelector.js";export{default as ListView}from"./components/ListView.js";export{RecordModal}from"./components/RecordModal.js";export{default as BulkUploadDialog}from"./components/BulkUploadDialog.js";export{CookieBanner}from"./components/CookieBanner.js";export{default as useStateWithLocalStorage}from"./hooks/useStateWithLocalStorage.js";export{default as useAuthState}from"./hooks/useAuthState.js";export{useChat}from"./hooks/useChat.js";export{default as useCodicentState}from"./hooks/useCodicentState.js";export{useAudioRecorder}from"./hooks/useAudioRecorder.js";export{default as useTools}from"./hooks/useTools.js";export{default as useRealtimeVoiceAI}from"./hooks/useRealtimeVoiceAI.js";export{default as useLocalization}from"./hooks/useLocalization.js";export{useTemplateVariables}from"./hooks/useTemplateVariables.js";export{useCodicentApp}from"./hooks/useCodicentApp.js";export{default as useAppStyles}from"./hooks/useAppStyles.js";export{default as useToaster}from"./hooks/useToaster.js";export{default as useDebugLogs}from"./hooks/useDebugLogs.js";export{useObserveDataSchemas}from"./hooks/useObserveDataSchemas.js";export{default as MessageContent}from"./utils/MessageContent.js";export{default as generateBrandVariants}from"./utils/theme.js";export{default as log}from"./utils/logging.js";export{default as withWakeLock}from"./utils/withWakeLock.js";export{AppStateMachine,createAppStateMachine}from"./utils/appState.js";import{d as e}from"./_virtual/index.js";import"./lib/wavtools/lib/wav_packer.js";import"./lib/wavtools/lib/analysis/audio_analysis.js";export{WavStreamPlayer}from"./lib/wavtools/lib/wav_stream_player.js";export{WavRecorder}from"./lib/wavtools/lib/wav_recorder.js";export{getGpsLocation,isMobileDevice}from"./utils/device.js";export{getTimeString}from"./utils/helpers.js";export{CacheManager,stateMachineCacheManager}from"./utils/cacheManager.js";export{AppConfig,getConfigValue,initCodicentApp}from"./config/index.js";export{default as AppFrame}from"./pages/AppFrame.js";export{default as Chat}from"./pages/Chat.js";export{Compose}from"./pages/Compose.js";export{default as Snap}from"./pages/Snap.js";export{default as Search}from"./pages/Search.js";export{default as Login}from"./pages/Login.js";export{Logout}from"./pages/Logout.js";export{CrmPage}from"./pages/CrmPage.js";export{CrmPagePersistent}from"./pages/CrmPagePersistent.js";export{default as ImageView}from"./pages/ImageView.js";export{default as FormInvite}from"./pages/FormInvite.js";export{default as FormAccept}from"./pages/FormAccept.js";export{Sales}from"./pages/Sales.js";export{default as HtmlViewer}from"./pages/HtmlViewer.js";export{Purchase}from"./pages/Purchase.js";export{default as Help}from"./pages/Help.js";export{default as Debug}from"./pages/Debug.js";export{default as SchemaEditor}from"./pages/SchemaEditor.js";export{default as QrScan}from"./pages/QrScan.js";export{default as FormPage}from"./pages/FormPage.js";export{createCodicentApp}from"./bootstrap.js";var o=e.StateMachine;export{o as StateMachine};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{makeStyles as t}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as e}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const s=t({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}}),r=({src:t,showFooter:r,title:i})=>{const m=s();return r?o(e,{hideFooter:!r,hideHeader:!0,children:o("iframe",{title:i,src:t,className:`${m.iframe} ${r?m.fixFrameHeight:""}`})}):o("iframe",{title:i,src:t,className:m.iframe})};export{r as default};
1
+ import{jsx as o}from"react/jsx-runtime";import{makeStyles as t}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as e}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const s=t({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}}),r=({src:t,showFooter:r,title:i})=>{const m=s();return r?o(e,{hideFooter:!r,hideHeader:!0,children:o("iframe",{title:i,src:t,className:`${m.iframe} ${r?m.fixFrameHeight:""}`})}):o("iframe",{title:i,src:t,className:m.iframe})};export{r as default};
@@ -1 +1 @@
1
- import{jsxs as e,jsx as o}from"react/jsx-runtime";import{useRef as t,useState as n,useEffect as r}from"react";import{makeStyles as s}from"@fluentui/react-components";import{useNavigate as i,useSearchParams as a}from"react-router-dom";import{CalendarWeekStart24Regular as m}from"@fluentui/react-icons";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import l from"../components/TextHeader.js";import p from"../components/TypingIndicator.js";import c from"../components/Prompt.js";import d from"../components/ChatInput.js";import{CombinedPlaceholderDialog as h}from"../components/CombinedPlaceholderDialog.js";import g from"../components/ChatMessage.js";import"../components/Header.js";import u from"../hooks/useStateWithLocalStorage.js";import{CodicentService as j}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as f}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as b}from"../components/Page.js";import"./QrScan.js";import C from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useChat as x}from"../hooks/useChat.js";import{useTemplateVariables as w}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const S=s({chatContainer:{width:"100%",flex:1,maxWidth:"1600px",height:"100%",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"}}),v=({state:s,hideFooter:v,codicent:y,title:k,welcomeMessage:F})=>{const P=S(),{t:T,tAsync:I,getLanguageInfo:_}=C(),A=i(),M=t(null),[L,H]=a(),V=L.get("codicent"),B=V||y,{messages:R,isBotTyping:N,handleSend:U,newChat:O,openChat:D}=x(s.stateMachine,B||void 0),[W,E]=n(null),[z,Q]=n(!1),[G,Y]=n(!1),{service:$,currentStateName:K}=s,[q,J]=n([]),[X,Z]=n([]),[ee,oe]=n(!1),[te,ne]=n(),[re,se]=u(s.context.selectedApp+"_prompts",[]),[ie,ae]=n(!1),{extractTemplateVariables:me,replaceTemplateVariables:le,extractFilePlaceholders:pe,replaceFilePlaceholders:ce,handleSelectFiles:de}=w($.uploadFile),he=t(!1),ge=t(null);r((()=>{const e=window.history.length>1,o=Boolean(document.referrer&&document.referrer!==window.location.href);Y(e||o)}),[]);r((()=>{f("SHOW_CHAT_PROMPTS")&&0===R.length&&s.service.getAppPrompts().then(se).catch((e=>{console.error("Failed to get prompts",e)}))}),[s.service,se,R.length]),r((()=>{setTimeout((()=>{M.current?.scrollIntoView({behavior:"smooth"})}),10)}),[R]),r((()=>{if(he.current)return;he.current=!0;const e=L.get("text"),o=L.get("id"),t=L.get("fid");if(V){console.log("Using temporary codicent from URL param:",V);const e=new URLSearchParams(L);e.delete("codicent"),H(e,{replace:!0})}if(e){(async()=>{const o=pe(e),t=me(e);O(),o.length>0||t.length>0?(Z(o),J(t),oe(!0),E(T(e))):E(T(e))})()}else o?D(o):t&&ne(t)}),[]),r((()=>{te&&"anonymous"===K&&ge.current!==te&&(ge.current=te,$.getFormById(te).then((async e=>{O();const o=_().language,t=e.prompt.replace("{{fid}}",te).replace("{{fname}}",e.name).replace("{{language}}",o);ae(!0);const n=await I(t);ae(!1),E(n),Y(!1)})))}),[te,O,$,E,K,I,_,ae]),r((()=>{if(W&&!ee){let e=W;X.length>0&&(e=ce(e,X)),q.length>0&&(e=le(e,q)),U(e),H({},{replace:!0}),E(null),J([]),Z([])}}),[W,ee,U,H,ce,le,X,q]);const ue=e=>{const o=L.get("append");o&&(e+="\n---\n"+o),U(e)};return e(b,{hideHeader:!0,hideFooter:!!te||v,children:[e("div",{id:"chat-container",className:P.chatContainer,style:{backgroundImage:`url(${f("CHAT_BACKGROUND_IMAGE_URL")})`},children:[G&&o("button",{onClick:()=>{G&&A(-1)},"aria-label":T("Tillbaka"),style:{position:"absolute",top:12,left:12,zIndex:100,background:"var(--colorNeutralBackground1)",border:"none",cursor:"pointer",padding:8,borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.08)",display:"flex",alignItems:"center",justifyContent:"center"},children:o(m,{style:{transform:"rotate(180deg)"}})}),o("div",{style:{marginLeft:G?40:0},children:o(l,{title:k||T(f("APP_CHAT_TITLE")||"Chatt"),onNewChat:te?void 0:()=>Q(!0)})}),e("div",{className:P.chatMessages,children:[F&&o(g,{sender:"bot",content:F}),f("SHOW_CHAT_PROMPTS")&&re.length>0&&0===R.length&&o(g,{sender:"bot",content:T(f("CHAT_WELCOME")||T("Välkommen!")),children:re.map(((t,n)=>e("div",{children:["> ",o("a",{href:"./#/chat",onClick:()=>{ue(t.title+"\n---\n"+t.prompt)},children:T(t.title)}),o("br",{})]},`prompt-${n}`)))}),R.map(((t,n)=>e("div",{children:[(N&&n===R.length-1||!N&&n===R.length-2)&&o("div",{ref:M}),o(g,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:n===R.length-1,onSuggestionClicked:U},t.id)]},t.id))),ie&&o(g,{sender:"user",content:T("Översätter...")}),N&&o(p,{})]}),o(d,{codicent:B||s.context.selectedApp,disableSend:N,onSend:ue,onSelectFiles:de,getImageUrl:j.getImageUrl,getFileInfo:e=>$.getFileInfo(e)})]}),o(c,{open:z,title:T("Vill du rensa chatten?"),content:T("En ny startas, men chatten kommer först sparas."),onYes:()=>{Q(!1),O()},onNo:()=>Q(!1)}),o(h,{open:ee,templateVariables:q,filePlaceholders:X,onTemplateVariablesChange:J,onFilePlaceholdersChange:Z,onConfirm:()=>oe(!1),onCancel:()=>{oe(!1),E(null),J([]),Z([])},uploadFile:$.uploadFile})]})};export{v as default};
1
+ import{jsxs as e,jsx as o}from"react/jsx-runtime";import{useRef as t,useState as n,useEffect as r}from"react";import{makeStyles as s}from"@fluentui/react-components";import{useNavigate as i,useSearchParams as a}from"react-router-dom";import{CalendarWeekStart24Regular as m}from"@fluentui/react-icons";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import p from"../components/TextHeader.js";import c from"../components/TypingIndicator.js";import l from"../components/Prompt.js";import d from"../components/ChatInput.js";import{CombinedPlaceholderDialog as h}from"../components/CombinedPlaceholderDialog.js";import g from"../components/ChatMessage.js";import"../components/Header.js";import u from"../hooks/useStateWithLocalStorage.js";import{CodicentService as j}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as f}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as b}from"../components/Page.js";import"./QrScan.js";import C from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useChat as x}from"../hooks/useChat.js";import{useTemplateVariables as w}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const S=s({chatContainer:{width:"100%",flex:1,maxWidth:"1600px",height:"100%",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"}}),v=({state:s,hideFooter:v,codicent:y,title:k,welcomeMessage:P})=>{const F=S(),{t:T,tAsync:I,getLanguageInfo:_}=C(),A=i(),M=t(null),[L,H]=a(),V=L.get("codicent"),B=V||y,{messages:R,isBotTyping:N,handleSend:U,newChat:D,openChat:O}=x(s.stateMachine,B||void 0),[W,E]=n(null),[z,Q]=n(!1),[G,Y]=n(!1),{service:$,currentStateName:K}=s,[q,J]=n([]),[X,Z]=n([]),[ee,oe]=n(!1),[te,ne]=n(),[re,se]=u(s.context.selectedApp+"_prompts",[]),[ie,ae]=n(!1),{extractTemplateVariables:me,replaceTemplateVariables:pe,extractFilePlaceholders:ce,replaceFilePlaceholders:le,handleSelectFiles:de}=w($.uploadFile),he=t(!1),ge=t(null);r((()=>{const e=window.history.length>1,o=Boolean(document.referrer&&document.referrer!==window.location.href);Y(e||o)}),[]);r((()=>{f("SHOW_CHAT_PROMPTS")&&0===R.length&&s.service.getAppPrompts().then(se).catch((e=>{console.error("Failed to get prompts",e)}))}),[s.service,se,R.length]),r((()=>{setTimeout((()=>{M.current?.scrollIntoView({behavior:"smooth"})}),10)}),[R]),r((()=>{if(he.current)return;he.current=!0;const e=L.get("text"),o=L.get("id"),t=L.get("fid");if(V){console.log("Using temporary codicent from URL param:",V);const e=new URLSearchParams(L);e.delete("codicent"),H(e,{replace:!0})}if(e){(async()=>{const o=ce(e),t=me(e);D(),o.length>0||t.length>0?(Z(o),J(t),oe(!0),E(T(e))):E(T(e))})()}else o?O(o):t&&ne(t)}),[]),r((()=>{te&&"anonymous"===K&&ge.current!==te&&(ge.current=te,$.getFormById(te).then((async e=>{D();const o=_().language,t=e.prompt.replace("{{fid}}",te).replace("{{fname}}",e.name).replace("{{language}}",o);ae(!0);const n=await I(t);ae(!1),E(n),Y(!1)})))}),[te,D,$,E,K,I,_,ae]),r((()=>{if(W&&!ee){let e=W;X.length>0&&(e=le(e,X)),q.length>0&&(e=pe(e,q)),U(e),H({},{replace:!0}),E(null),J([]),Z([])}}),[W,ee,U,H,le,pe,X,q]);const ue=e=>{const o=L.get("append");o&&(e+="\n---\n"+o),U(e)};return e(b,{hideHeader:!0,hideFooter:!!te||v,children:[e("div",{id:"chat-container",className:F.chatContainer,style:{backgroundImage:`url(${f("CHAT_BACKGROUND_IMAGE_URL")})`},children:[G&&o("button",{onClick:()=>{G&&A(-1)},"aria-label":T("Tillbaka"),style:{position:"absolute",top:12,left:12,zIndex:100,background:"var(--colorNeutralBackground1)",border:"none",cursor:"pointer",padding:8,borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.08)",display:"flex",alignItems:"center",justifyContent:"center"},children:o(m,{style:{transform:"rotate(180deg)"}})}),o("div",{style:{marginLeft:G?40:0},children:o(p,{title:k||T(f("APP_CHAT_TITLE")||"Chatt"),onNewChat:te?void 0:()=>Q(!0)})}),e("div",{className:F.chatMessages,children:[P&&o(g,{sender:"bot",content:P}),f("SHOW_CHAT_PROMPTS")&&re.length>0&&0===R.length&&o(g,{sender:"bot",content:T(f("CHAT_WELCOME")||T("Välkommen!")),children:re.map(((t,n)=>e("div",{children:["> ",o("a",{href:"./#/chat",onClick:()=>{ue(t.title+"\n---\n"+t.prompt)},children:T(t.title)}),o("br",{})]},`prompt-${n}`)))}),R.map(((t,n)=>e("div",{children:[(N&&n===R.length-1||!N&&n===R.length-2)&&o("div",{ref:M}),o(g,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:n===R.length-1,onSuggestionClicked:U},t.id)]},t.id))),ie&&o(g,{sender:"user",content:T("Översätter...")}),N&&o(c,{})]}),o(d,{codicent:B||s.context.selectedApp,disableSend:N,onSend:ue,onSelectFiles:de,getImageUrl:j.getImageUrl,getFileInfo:e=>$.getFileInfo(e)})]}),o(l,{open:z,title:T("Vill du rensa chatten?"),content:T("En ny startas, men chatten kommer först sparas."),onYes:()=>{Q(!1),D()},onNo:()=>Q(!1)}),o(h,{open:ee,templateVariables:q,filePlaceholders:X,onTemplateVariablesChange:J,onFilePlaceholdersChange:Z,onConfirm:()=>oe(!1),onCancel:()=>{oe(!1),E(null),J([]),Z([])},uploadFile:$.uploadFile})]})};export{v as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as i,useEffect as r}from"react";import{makeStyles as a,shorthands as s,tokens as m}from"@fluentui/react-components";import{useSearchParams as p,useNavigate as l}from"react-router-dom";import{getConfigValue as c}from"../config/index.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import d from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import{CodicentService as g}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{getGpsLocation as u}from"../utils/device.js";import"./AppFrame.js";import"./Chat.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import f from"../hooks/useToaster.js";import S from"../components/MessageInput.js";import C from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const v=a({main:{flexGrow:1,...s.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:m.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),I=({state:a})=>{const s=v(),{t:m}=h(),[I,P]=t(!1),_=n(null),x=n(null),b=n(null),[U,w]=t(null),[F,M]=t([]),{service:A}=a,[E,O]=p(),[T,L]=t(void 0),[y,k]=t(),$=f(),B=l(),D=i((o=>{for(const e of o)A.getFileInfo(e).then((o=>{M((e=>[...e,o]))}))}),[A,M]),H=i((o=>{const e=new FormData;e.append("file",o),A.uploadFile(o.name,e).then((o=>{D([o])})).catch((()=>{$.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[A,D,$,m]),R=o=>{P(o)};r((()=>{const o=E.get("text"),e=E.get("url"),t=E.get("parentId");o&&(L(o),E.delete("text")),t&&(k(t),E.delete("parentId")),e&&(E.delete("url"),L(((o||"")+" "+e).trim())),O(E,{replace:!0})}),[E,O,L,A,D]),r((()=>{c("COMPOSE_AUTO_LOCATION")&&u().then((o=>{o&&w(`#gps(${o.coords.latitude},${o.coords.longitude})`)}))}),[]);return o(j,{hideHeader:!0,children:e("div",{className:s.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[o(d,{title:c("APP_SAVE_TITLE")?m(c("APP_SAVE_TITLE")):m("Spara")}),o(S,{disableSend:!0,defaultText:T,onSend:o=>{o=`${o}${U?" "+U:""}${F.length>0?"\n":""}${F.map((o=>`#file:${o.id}`)).join(" ")}`,A.sendMessage(o,y).then((()=>{$.notify(m("Meddelande"),m("Meddelandet är sparat."),""),y&&(k(void 0),B(-1))}))},files:F,onFilesChange:M,isUploading:I,onHandleDefaultFiles:D,onUploadFile:()=>{_.current?.triggerUpload(),console.log("attach-file")},onUploadImage:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{x.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{b.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:g.getImageUrl,onLocationChange:c("COMPOSE_HIDE_LOCATION")?void 0:o=>{o?(async()=>{console.log("attach-location");const o=await u();o?($.notify(m("Position"),m("Position tillagd."),""),w(`#gps(${o.coords.latitude},${o.coords.longitude})`)):console.log("Failed to get GPS location")})():(w(null),$.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!U,onImagePasted:H}),o(C,{ref:_,onFileUploaded:D,onUploading:R,multiple:!0,codicentService:A}),o(C,{codicentService:A,ref:x,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*"}),o(C,{codicentService:A,ref:b,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{I as Compose,I as default};
1
+ import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as i,useEffect as r}from"react";import{makeStyles as a,shorthands as s,tokens as m}from"@fluentui/react-components";import{useSearchParams as p,useNavigate as l}from"react-router-dom";import{getConfigValue as c}from"../config/index.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import d from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import{CodicentService as g}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{getGpsLocation as u}from"../utils/device.js";import"./AppFrame.js";import"./Chat.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import f from"../hooks/useToaster.js";import S from"../components/MessageInput.js";import C from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const P=a({main:{flexGrow:1,...s.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:m.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),v=({state:a})=>{const s=P(),{t:m}=h(),[v,I]=t(!1),_=n(null),x=n(null),b=n(null),[M,U]=t(null),[w,F]=t([]),{service:A}=a,[E,O]=p(),[T,L]=t(void 0),[y,k]=t(),$=f(),B=l(),D=i((o=>{for(const e of o)A.getFileInfo(e).then((o=>{F((e=>[...e,o]))}))}),[A,F]),H=i((o=>{const e=new FormData;e.append("file",o),A.uploadFile(o.name,e).then((o=>{D([o])})).catch((()=>{$.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[A,D,$,m]),R=o=>{I(o)};r((()=>{const o=E.get("text"),e=E.get("url"),t=E.get("parentId");o&&(L(o),E.delete("text")),t&&(k(t),E.delete("parentId")),e&&(E.delete("url"),L(((o||"")+" "+e).trim())),O(E,{replace:!0})}),[E,O,L,A,D]),r((()=>{c("COMPOSE_AUTO_LOCATION")&&u().then((o=>{o&&U(`#gps(${o.coords.latitude},${o.coords.longitude})`)}))}),[]);return o(j,{hideHeader:!0,children:e("div",{className:s.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[o(d,{title:c("APP_SAVE_TITLE")?m(c("APP_SAVE_TITLE")):m("Spara")}),o(S,{disableSend:!0,defaultText:T,onSend:o=>{o=`${o}${M?" "+M:""}${w.length>0?"\n":""}${w.map((o=>`#file:${o.id}`)).join(" ")}`,A.sendMessage(o,y).then((()=>{$.notify(m("Meddelande"),m("Meddelandet är sparat."),""),y&&(k(void 0),B(-1))}))},files:w,onFilesChange:F,isUploading:v,onHandleDefaultFiles:D,onUploadFile:()=>{_.current?.triggerUpload(),console.log("attach-file")},onUploadImage:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{x.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{b.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:g.getImageUrl,onLocationChange:c("COMPOSE_HIDE_LOCATION")?void 0:o=>{o?(async()=>{console.log("attach-location");const o=await u();o?($.notify(m("Position"),m("Position tillagd."),""),U(`#gps(${o.coords.latitude},${o.coords.longitude})`)):console.log("Failed to get GPS location")})():(U(null),$.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!M,onImagePasted:H}),o(C,{ref:_,onFileUploaded:D,onUploading:R,multiple:!0,codicentService:A}),o(C,{codicentService:A,ref:x,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*"}),o(C,{codicentService:A,ref:b,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{v as Compose,v as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Button as c,MessageBar as l,MessageBarBody as d}from"@fluentui/react-components";import{ArrowLeft24Regular as u}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import g from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import h from"../components/VoiceIcon.js";import f from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as v}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import S from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import b from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import{useNavigate as w,useSearchParams as C}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import I from"../hooks/useToaster.js";import{l as y}from"../node_modules/lodash/lodash.js";const U=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",position:"relative"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:p.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},backButton:{marginBottom:"10px"}}),_=({state:s,voice:m})=>{const p=U(),{t:_}=b(),A=w(),[B,M]=t(!1),T=n(null),F=n(null),N=n(null),[P]=t(null),[E,L]=t([]),{service:O}=s,[R,$]=C(),[V,D]=t(""),[H,z]=t(void 0),G=I(),[W,Q]=t(void 0),[J,K]=t("info"),X=r((e=>{for(const o of e)O.getFileInfo(o).then((e=>{L((o=>[...o,e]))}))}),[O,L]),Y=r((e=>{const o=new FormData;o.append("file",e),O.uploadFile(e.name,o).then((e=>{X([e])})).catch((()=>{G.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[O,X,G,_]),q=e=>{M(e)};i((()=>{const e=R.get("text"),o=R.get("url");e&&(D(e),R.delete("text")),o&&(R.delete("url"),D(((e||"")+" "+o).trim())),$(R,{replace:!0})}),[R,$,D,O,X]);const Z=r((async e=>{if(!e||e.length<10)return;Q(_("Analyserar...")),K("info");const o=await O.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new f(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;Q(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{Q("Error: "+e.content),K("error")}}}),[O]),ee=a((()=>y.debounce(Z,2e3)),[Z]);return i((()=>()=>{ee.cancel()}),[ee]),e(x,{hideHeader:!0,children:o("div",{className:p.container,style:{backgroundImage:`url(${v("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&v("SHOW_VOICE_BUTTON")&&e("div",{className:p.voiceIcon,children:e(h,{voice:m})}),e("div",{className:p.backButton,children:e(c,{appearance:"subtle",icon:e(u,{}),onClick:()=>A(-1),children:_("Tillbaka")})}),e(g,{title:v("APP_SAVE_TITLE")?_(v("APP_SAVE_TITLE")):_("Spara")}),e(k,{defaultText:V,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${P?" "+P:""}${E.length>0?"\n":""}${E.map((e=>`#file:${e.id}`)).join(" ")}`,O.sendMessage(e).then((()=>{G.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:E,onFilesChange:L,isUploading:B,onUploadImage:()=>{F.current?.triggerUpload()},onUploadCamera:()=>{N.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!P,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(z(e),e&&e.trim().length>0?ee(e):(Q(void 0),ee.cancel()))},onImagePasted:Y}),W&&o("div",{className:p.review,children:[e("h3",{children:_("Analys")}),e(l,{intent:J,layout:"multiline",children:e(d,{children:_(W)})})]}),e(S,{ref:T,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:O}),e(S,{codicentService:O,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(S,{codicentService:O,ref:N,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{_ as CrmPage,_ as default};
1
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Button as c,MessageBar as l,MessageBarBody as d}from"@fluentui/react-components";import{ArrowLeft24Regular as u}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import g from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import h from"../components/VoiceIcon.js";import f from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as v}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import S from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import b from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import{useNavigate as w,useSearchParams as C}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import I from"../hooks/useToaster.js";import{l as y}from"../node_modules/lodash/lodash.js";const U=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",position:"relative"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:p.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},backButton:{marginBottom:"10px"}}),_=({state:s,voice:m})=>{const p=U(),{t:_}=b(),M=w(),[A,B]=t(!1),P=n(null),T=n(null),F=n(null),[N]=t(null),[E,L]=t([]),{service:O}=s,[R,$]=C(),[V,D]=t(""),[H,z]=t(void 0),G=I(),[W,Q]=t(void 0),[J,K]=t("info"),X=r((e=>{for(const o of e)O.getFileInfo(o).then((e=>{L((o=>[...o,e]))}))}),[O,L]),Y=r((e=>{const o=new FormData;o.append("file",e),O.uploadFile(e.name,o).then((e=>{X([e])})).catch((()=>{G.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[O,X,G,_]),q=e=>{B(e)};i((()=>{const e=R.get("text"),o=R.get("url");e&&(D(e),R.delete("text")),o&&(R.delete("url"),D(((e||"")+" "+o).trim())),$(R,{replace:!0})}),[R,$,D,O,X]);const Z=r((async e=>{if(!e||e.length<10)return;Q(_("Analyserar...")),K("info");const o=await O.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new f(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;Q(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{Q("Error: "+e.content),K("error")}}}),[O]),ee=a((()=>y.debounce(Z,2e3)),[Z]);return i((()=>()=>{ee.cancel()}),[ee]),e(x,{hideHeader:!0,children:o("div",{className:p.container,style:{backgroundImage:`url(${v("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&v("SHOW_VOICE_BUTTON")&&e("div",{className:p.voiceIcon,children:e(h,{voice:m})}),e("div",{className:p.backButton,children:e(c,{appearance:"subtle",icon:e(u,{}),onClick:()=>M(-1),children:_("Tillbaka")})}),e(g,{title:v("APP_SAVE_TITLE")?_(v("APP_SAVE_TITLE")):_("Spara")}),e(k,{defaultText:V,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${N?" "+N:""}${E.length>0?"\n":""}${E.map((e=>`#file:${e.id}`)).join(" ")}`,O.sendMessage(e).then((()=>{G.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:E,onFilesChange:L,isUploading:A,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{F.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(z(e),e&&e.trim().length>0?ee(e):(Q(void 0),ee.cancel()))},onImagePasted:Y}),W&&o("div",{className:p.review,children:[e("h3",{children:_("Analys")}),e(l,{intent:J,layout:"multiline",children:e(d,{children:_(W)})})]}),e(S,{ref:P,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:O}),e(S,{codicentService:O,ref:T,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(S,{codicentService:O,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{_ as CrmPage,_ as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as l,tokens as m,Text as c,Spinner as p,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as f}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import x from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import S from"../components/VoiceIcon.js";import v from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as y}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{isMobileDevice as k}from"../utils/device.js";import"../components/FileThumbnail.js";import w from"../components/MessageInput.js";import b from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as C}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import M from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import{useNavigate as N,useSearchParams as I}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import T from"../hooks/useToaster.js";import{l as B}from"../node_modules/lodash/lodash.js";const D=s({main:{flexGrow:1,...l.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...l.gap("16px"),...l.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...l.gap("16px"),...l.padding("10px")},inputSection:{display:"flex",flexDirection:"column",flexGrow:1,maxWidth:"640px",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",position:"relative"},inputSectionMobile:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},historySection:{flexBasis:"300px",flexShrink:0,display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px"),maxHeight:"300px"},historyCard:{...l.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:m.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...l.gap("4px")},historyDate:{fontSize:m.fontSizeBase200,color:m.colorNeutralForeground3},historyText:{fontSize:m.fontSizeBase300,wordBreak:"break-word",whiteSpace:"pre-wrap",maxHeight:"100px",overflow:"hidden",textOverflow:"ellipsis"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},historyTitle:{fontSize:m.fontSizeBase400,fontWeight:m.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:m.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),U=({state:s,voice:l})=>{const m=D(),{t:U}=M(),_=N(),[A,E]=t(!1),F=n(null),$=n(null),P=n(null),[O]=t(null),[L,z]=t([]),{service:R}=s,[H,V]=I(),[W,G]=t(""),[J,Q]=t(void 0),Y=T(),[K,X]=t(void 0),[q,Z]=t("info"),[ee,oe]=t([]),[te,ne]=t(!1),re=k(),ie=r((e=>{for(const o of e)R.getFileInfo(o).then((e=>{z((o=>[...o,e]))}))}),[R,z]),ae=r((e=>{const o=new FormData;o.append("file",e),R.uploadFile(e.name,o).then((e=>{ie([e])})).catch((()=>{Y.notify(U("Error"),U("Error uploading pasted image"),"")}))}),[R,ie,Y,U]),se=e=>{E(e)},le=r((async()=>{ne(!0);try{const e=await R.getMessages(["crm"]);oe(e)}catch(e){console.error("Error loading CRM messages:",e),Y.notify(U("Error"),U("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,Y,U]);i((()=>{le()}),[le]),i((()=>{const e=H.get("text"),o=H.get("url");e&&(G(e),H.delete("text")),o&&(H.delete("url"),G(((e||"")+" "+o).trim())),V(H,{replace:!0})}),[H,V,G,R,ie]);const me=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${O?" "+O:""}${L.length>0?"\n":""}${L.map((e=>`#file:${e.id}`)).join(" ")}`,R.sendMessage(e).then((()=>{Y.notify(U("Meddelande"),U("Meddelandet är sparat."),""),le(),Q(""),X(void 0)}))},ce=r((async e=>{if(!e||e.length<10)return;X(U("Analyserar...")),Z("info");const o=await R.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new v(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;X(U(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,U]),pe=a((()=>B.debounce(ce,2e3)),[ce]);i((()=>()=>{pe.cancel()}),[pe]);const de=e=>{const o=new Date,t=new Date(e),n=o.getTime()-t.getTime(),r=Math.floor(n/6e4),i=Math.floor(n/36e5),a=Math.floor(n/864e5);return r<1?U("Just now"):r<60?`${r} ${U("minutes ago")}`:i<24?`${i} ${U("hours ago")}`:a<7?`${a} ${U("days ago")}`:t.toLocaleDateString()},ue=e=>{const o=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return o.substring(0,150)+(o.length>150?"...":"")},ge=()=>o("div",{className:re?m.historySectionMobile:m.historySection,children:[e(c,{className:m.historyTitle,children:U("Tidigare sparade")}),te?e("div",{className:m.emptyState,children:e(p,{size:"small"})}):0===ee.length?e("div",{className:m.emptyState,children:e(c,{children:U("Inga sparade meddelanden än")})}):ee.map((t=>e(d,{className:m.historyCard,onClick:()=>(e=>{const o=ue(e.content);Q(o)})(t),children:o("div",{className:m.historyCardContent,children:[e(c,{className:m.historyDate,children:de(t.createdAt)}),e(c,{className:m.historyText,children:ue(t.content)})]})},t.id)))]});return e(C,{hideHeader:!0,children:o("div",{className:re?m.containerMobile:m.container,children:[!re&&ge(),o("div",{className:re?m.inputSectionMobile:m.inputSection,style:re?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[l&&y("SHOW_VOICE_BUTTON")&&e("div",{className:m.voiceIcon,children:e(S,{voice:l})}),e("div",{className:m.backButton,children:e(u,{appearance:"subtle",icon:e(f,{}),onClick:()=>_(-1),children:U("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?U(y("APP_SAVE_TITLE")):U("Spara")}),e(w,{defaultText:W,onSend:me,files:L,onFilesChange:z,isUploading:A,onUploadImage:()=>{$.current?.triggerUpload()},onUploadCamera:()=>{P.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!O,disableSend:!0,rows:9,placeholder:U("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==J&&(Q(e),e&&e.trim().length>0?pe(e):(X(void 0),pe.cancel()))},onImagePasted:ae}),K&&o("div",{className:m.review,children:[e("h3",{children:U("Analys")}),e(g,{intent:q,layout:"multiline",children:e(h,{children:U(K)})})]}),e(b,{ref:F,onFileUploaded:ie,onUploading:se,multiple:!0,codicentService:R}),e(b,{codicentService:R,ref:$,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*"}),e(b,{codicentService:R,ref:P,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*",capture:"environment"})]}),re&&ge()]})})};export{U as CrmPagePersistent,U as default};
1
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as l,tokens as m,Text as c,Spinner as p,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as f}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import x from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import S from"../components/VoiceIcon.js";import v from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as y}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{isMobileDevice as k}from"../utils/device.js";import"../components/FileThumbnail.js";import w from"../components/MessageInput.js";import b from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as C}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import M from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import{useNavigate as N,useSearchParams as I}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import T from"../hooks/useToaster.js";import{l as B}from"../node_modules/lodash/lodash.js";const D=s({main:{flexGrow:1,...l.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...l.gap("16px"),...l.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...l.gap("16px"),...l.padding("10px")},inputSection:{display:"flex",flexDirection:"column",flexGrow:1,maxWidth:"640px",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",position:"relative"},inputSectionMobile:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},historySection:{flexBasis:"300px",flexShrink:0,display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px"),maxHeight:"300px"},historyCard:{...l.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:m.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...l.gap("4px")},historyDate:{fontSize:m.fontSizeBase200,color:m.colorNeutralForeground3},historyText:{fontSize:m.fontSizeBase300,wordBreak:"break-word",whiteSpace:"pre-wrap",maxHeight:"100px",overflow:"hidden",textOverflow:"ellipsis"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},historyTitle:{fontSize:m.fontSizeBase400,fontWeight:m.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:m.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),U=({state:s,voice:l})=>{const m=D(),{t:U}=M(),_=N(),[A,E]=t(!1),F=n(null),P=n(null),$=n(null),[O]=t(null),[L,z]=t([]),{service:R}=s,[H,V]=I(),[W,G]=t(""),[J,Q]=t(void 0),Y=T(),[K,X]=t(void 0),[q,Z]=t("info"),[ee,oe]=t([]),[te,ne]=t(!1),re=k(),ie=r((e=>{for(const o of e)R.getFileInfo(o).then((e=>{z((o=>[...o,e]))}))}),[R,z]),ae=r((e=>{const o=new FormData;o.append("file",e),R.uploadFile(e.name,o).then((e=>{ie([e])})).catch((()=>{Y.notify(U("Error"),U("Error uploading pasted image"),"")}))}),[R,ie,Y,U]),se=e=>{E(e)},le=r((async()=>{ne(!0);try{const e=await R.getMessages(["crm"]);oe(e)}catch(e){console.error("Error loading CRM messages:",e),Y.notify(U("Error"),U("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,Y,U]);i((()=>{le()}),[le]),i((()=>{const e=H.get("text"),o=H.get("url");e&&(G(e),H.delete("text")),o&&(H.delete("url"),G(((e||"")+" "+o).trim())),V(H,{replace:!0})}),[H,V,G,R,ie]);const me=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${O?" "+O:""}${L.length>0?"\n":""}${L.map((e=>`#file:${e.id}`)).join(" ")}`,R.sendMessage(e).then((()=>{Y.notify(U("Meddelande"),U("Meddelandet är sparat."),""),le(),Q(""),X(void 0)}))},ce=r((async e=>{if(!e||e.length<10)return;X(U("Analyserar...")),Z("info");const o=await R.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new v(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;X(U(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,U]),pe=a((()=>B.debounce(ce,2e3)),[ce]);i((()=>()=>{pe.cancel()}),[pe]);const de=e=>{const o=new Date,t=new Date(e),n=o.getTime()-t.getTime(),r=Math.floor(n/6e4),i=Math.floor(n/36e5),a=Math.floor(n/864e5);return r<1?U("Just now"):r<60?`${r} ${U("minutes ago")}`:i<24?`${i} ${U("hours ago")}`:a<7?`${a} ${U("days ago")}`:t.toLocaleDateString()},ue=e=>{const o=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return o.substring(0,150)+(o.length>150?"...":"")},ge=()=>o("div",{className:re?m.historySectionMobile:m.historySection,children:[e(c,{className:m.historyTitle,children:U("Tidigare sparade")}),te?e("div",{className:m.emptyState,children:e(p,{size:"small"})}):0===ee.length?e("div",{className:m.emptyState,children:e(c,{children:U("Inga sparade meddelanden än")})}):ee.map((t=>e(d,{className:m.historyCard,onClick:()=>(e=>{const o=ue(e.content);Q(o)})(t),children:o("div",{className:m.historyCardContent,children:[e(c,{className:m.historyDate,children:de(t.createdAt)}),e(c,{className:m.historyText,children:ue(t.content)})]})},t.id)))]});return e(C,{hideHeader:!0,children:o("div",{className:re?m.containerMobile:m.container,children:[!re&&ge(),o("div",{className:re?m.inputSectionMobile:m.inputSection,style:re?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[l&&y("SHOW_VOICE_BUTTON")&&e("div",{className:m.voiceIcon,children:e(S,{voice:l})}),e("div",{className:m.backButton,children:e(u,{appearance:"subtle",icon:e(f,{}),onClick:()=>_(-1),children:U("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?U(y("APP_SAVE_TITLE")):U("Spara")}),e(w,{defaultText:W,onSend:me,files:L,onFilesChange:z,isUploading:A,onUploadImage:()=>{P.current?.triggerUpload()},onUploadCamera:()=>{$.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!O,disableSend:!0,rows:9,placeholder:U("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==J&&(Q(e),e&&e.trim().length>0?pe(e):(X(void 0),pe.cancel()))},onImagePasted:ae}),K&&o("div",{className:m.review,children:[e("h3",{children:U("Analys")}),e(g,{intent:q,layout:"multiline",children:e(h,{children:U(K)})})]}),e(b,{ref:F,onFileUploaded:ie,onUploading:se,multiple:!0,codicentService:R}),e(b,{codicentService:R,ref:P,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*"}),e(b,{codicentService:R,ref:$,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*",capture:"environment"})]}),re&&ge()]})})};export{U as CrmPagePersistent,U as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import r from"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Title as i}from"../components/Title.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import{makeStyles as s,Button as m}from"@fluentui/react-components";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{useState as p,useEffect as a}from"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as l}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./Sales.js";import"./Purchase.js";import d from"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import u from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import{useSearchParams as h,useNavigate as g}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const f=s({container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},instructionParagraph:{fontWeight:"bold",marginBottom:"1em"},orderedList:{marginLeft:"20px",marginBottom:"1em",fontSize:"1.3em"}}),k=()=>{const{t:s,tAsync:k}=u(),[C]=h(),_=g(),b=C.get("id"),v=f(),[M,S]=p(""),[P,w]=p(!1);return a((()=>{(async()=>{const o=c("FORM_ACCEPT_MARKDOWN");if(o){w(!0);const t=await k(o);w(!1),S(t.replace("{{code}}",l(b||"")))}})()}),[k,b]),o(j,{hideFooter:!0,hideHeader:!0,children:o("div",{className:v.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(d,{children:[P&&o(n,{children:s("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&M&&!P&&o(r,{content:M}),!c("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:s("Din kod för formuläret")}),o("p",{className:v.instructionParagraph,children:s("Instruktioner:")}),t("ol",{className:v.orderedList,children:[o("li",{children:s("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:s("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(n,{size:500,children:s("Din kod är (skriv ner den):")}),o(n,{size:600,style:{userSelect:"all"},children:l(b||"")})]}),b&&o(m,{appearance:"primary",onClick:()=>_(`/chat?fid=${b}`),children:s("Starta")})]})})})};export{k as default};
1
+ import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import r from"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Title as i}from"../components/Title.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import{makeStyles as s,Button as m}from"@fluentui/react-components";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{useState as p,useEffect as a}from"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as l}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./Sales.js";import"./Purchase.js";import d from"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import u from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import{useSearchParams as h,useNavigate as g}from"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const f=s({container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},instructionParagraph:{fontWeight:"bold",marginBottom:"1em"},orderedList:{marginLeft:"20px",marginBottom:"1em",fontSize:"1.3em"}}),k=()=>{const{t:s,tAsync:k}=u(),[C]=h(),M=g(),_=C.get("id"),b=f(),[v,S]=p(""),[P,w]=p(!1);return a((()=>{(async()=>{const o=c("FORM_ACCEPT_MARKDOWN");if(o){w(!0);const t=await k(o);w(!1),S(t.replace("{{code}}",l(_||"")))}})()}),[k,_]),o(j,{hideFooter:!0,hideHeader:!0,children:o("div",{className:b.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(d,{children:[P&&o(n,{children:s("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&v&&!P&&o(r,{content:v}),!c("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:s("Din kod för formuläret")}),o("p",{className:b.instructionParagraph,children:s("Instruktioner:")}),t("ol",{className:b.orderedList,children:[o("li",{children:s("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:s("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(n,{size:500,children:s("Din kod är (skriv ner den):")}),o(n,{size:600,style:{userSelect:"all"},children:l(_||"")})]}),_&&o(m,{appearance:"primary",onClick:()=>M(`/chat?fid=${_}`),children:s("Starta")})]})})})};export{k as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useEffect as r}from"react";import{makeStyles as i,useId as a,Dropdown as s,Option as m}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as l}from"../components/Title.js";import"../components/Spinner.js";import{Label as c}from"../components/Label.js";import{Input as d}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import u from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as h}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import k from"../components/Content.js";import{Page as g}from"../components/Page.js";import"./QrScan.js";import f from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const v=i({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}}),w=({state:i})=>{const w=v(),{service:b}=i,{t:C}=f(),[S,x]=u(i.context.selectedApp+"_forms",[]),[y,$]=n(),[L,B]=n(),[M,P]=n(!1),[_,A]=n(),T=a("form-dropdown");r((()=>{b.getForms().then((o=>{o.sort(((o,e)=>o.name.localeCompare(e.name))),x(o)}))}),[b,C,x]);const D=void 0!==navigator.share;return o(g,{children:o("div",{className:w.container,style:{backgroundImage:`url(${j("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e(k,{children:[o(l,{children:C("Skapa länk till formulär")}),o("p",{className:w.instructionParagraph,children:C("Instruktioner")}),e("ol",{className:w.orderedList,children:[o("li",{children:C("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),o("li",{children:C("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),o("li",{children:C("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),o("li",{children:C("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),o("li",{children:C("Kom ihåg att spara (skriva ner) koden")})]}),o("label",{id:T,className:w.instructionParagraph,children:C("Välj formulär")}),o(s,{"aria-labelledby":T,placeholder:"-",onOptionSelect:(o,e)=>A(e.optionValue),children:S.map((o=>e(m,{value:o.name,text:`${o.title} (${o.name})`,children:[`${o.title} (${o.name})`," "]},o.name)))}),o(p,{appearance:"primary",disabled:!_,onClick:()=>{const o=S.find((o=>o.name===_));o?.url?b.sendMessage(`#ss-link #${_}`).then((e=>{const t=new Date(Date.now()+2592e5);b.generateApiToken(t).then((t=>{const n=o.url.includes("?")?"&":"?",r=`${o.url}${n}token=${t}`;$(r);const i=h(e);B(i)}))})):b.sendMessage(`#ss-link #${_}`).then((o=>{const e=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;$(`${e}#/formaccept?id=${o}`);const t=h(o);B(t)}))},children:C("Skapa länk")}),y&&e(t,{children:[o("p",{className:w.generatedLinkTitle,children:C("Här är din genererade länk (du kan kopiera eller dela den):")}),o("div",{className:w.inputAndButton,children:o(d,{className:w.input,value:y,readOnly:!0,onFocus:o=>o.target.select()})}),o("br",{}),e("div",{className:w.inputAndButton,children:[o(p,{appearance:"primary",title:C("Kopiera länk"),icon:"CopyRegular",onClick:()=>{y&&(navigator.clipboard.writeText(y),P(!0),setTimeout((()=>{P(!1),$(void 0)}),2e3))},children:C("Kopiera")}),D&&o(p,{appearance:"primary",title:C("Dela länk"),icon:"ShareRegular",onClick:()=>{y&&(navigator.share({url:y}),setTimeout((()=>{$(void 0)}),2e3))},children:C("Dela")})]}),M&&o(c,{children:C("Länk kopierad!")})]})]})})})};export{w as default};
1
+ import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useEffect as r}from"react";import{makeStyles as i,useId as a,Dropdown as s,Option as m}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as l}from"../components/Title.js";import"../components/Spinner.js";import{Label as c}from"../components/Label.js";import{Input as d}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import u from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{formatGuidToShorterReadableCode as h}from"../utils/helpers.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import k from"../components/Content.js";import{Page as g}from"../components/Page.js";import"./QrScan.js";import f from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const v=i({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}}),w=({state:i})=>{const w=v(),{service:b}=i,{t:C}=f(),[S,x]=u(i.context.selectedApp+"_forms",[]),[y,$]=n(),[L,M]=n(),[P,B]=n(!1),[_,A]=n(),D=a("form-dropdown");r((()=>{b.getForms().then((o=>{o.sort(((o,e)=>o.name.localeCompare(e.name))),x(o)}))}),[b,C,x]);const T=void 0!==navigator.share;return o(g,{children:o("div",{className:w.container,style:{backgroundImage:`url(${j("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e(k,{children:[o(l,{children:C("Skapa länk till formulär")}),o("p",{className:w.instructionParagraph,children:C("Instruktioner")}),e("ol",{className:w.orderedList,children:[o("li",{children:C("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),o("li",{children:C("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),o("li",{children:C("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),o("li",{children:C("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),o("li",{children:C("Kom ihåg att spara (skriva ner) koden")})]}),o("label",{id:D,className:w.instructionParagraph,children:C("Välj formulär")}),o(s,{"aria-labelledby":D,placeholder:"-",onOptionSelect:(o,e)=>A(e.optionValue),children:S.map((o=>e(m,{value:o.name,text:`${o.title} (${o.name})`,children:[`${o.title} (${o.name})`," "]},o.name)))}),o(p,{appearance:"primary",disabled:!_,onClick:()=>{const o=S.find((o=>o.name===_));o?.url?b.sendMessage(`#ss-link #${_}`).then((e=>{const t=new Date(Date.now()+2592e5);b.generateApiToken(t).then((t=>{const n=o.url.includes("?")?"&":"?",r=`${o.url}${n}token=${t}`;$(r);const i=h(e);M(i)}))})):b.sendMessage(`#ss-link #${_}`).then((o=>{const e=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;$(`${e}#/formaccept?id=${o}`);const t=h(o);M(t)}))},children:C("Skapa länk")}),y&&e(t,{children:[o("p",{className:w.generatedLinkTitle,children:C("Här är din genererade länk (du kan kopiera eller dela den):")}),o("div",{className:w.inputAndButton,children:o(d,{className:w.input,value:y,readOnly:!0,onFocus:o=>o.target.select()})}),o("br",{}),e("div",{className:w.inputAndButton,children:[o(p,{appearance:"primary",title:C("Kopiera länk"),icon:"CopyRegular",onClick:()=>{y&&(navigator.clipboard.writeText(y),B(!0),setTimeout((()=>{B(!1),$(void 0)}),2e3))},children:C("Kopiera")}),T&&o(p,{appearance:"primary",title:C("Dela länk"),icon:"ShareRegular",onClick:()=>{y&&(navigator.share({url:y}),setTimeout((()=>{$(void 0)}),2e3))},children:C("Dela")})]}),P&&o(c,{children:C("Länk kopierad!")})]})]})})})};export{w as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t}from"react/jsx-runtime";import{Spinner as e}from"@fluentui/react-components";import{useState as s,useEffect as i}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as r}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import m from"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const p=({state:p})=>{const c=window.location.hash.match(/^#\/html\/(.+)$/),a=c?decodeURIComponent(c[1]):"",[l,d]=s(),[j,h]=s(!1),[u,g]=s(),{service:f}=p;return i((()=>{a&&f?(h(!0),g(void 0),f.getMessagesFast([a],void 0,1).then((o=>{if(0===o.length)return void g(`No messages found with tag: ${a}`);const t=o[0].content;d((o=>{const t=o.indexOf("```html");if(-1!==t){const e=o.indexOf("```",t+7);return-1===e?o.substring(t+7):o.substring(t+7,e)}const e=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const t of e){const e=o.match(t);if(e)return e[0]}if(o.includes("<html")||o.includes("<!DOCTYPE")||o.includes("<div")||o.includes("<p>")||o.includes("<span")){const t=["<!DOCTYPE","<html","<div","<body","<article","<section"];let e=-1;for(const s of t){const t=o.indexOf(s);-1!==t&&(-1===e||t<e)&&(e=t)}if(-1!==e){let t=o.substring(e);const s=["</html>","</body>","</div>"];for(const o of s){const e=t.lastIndexOf(o);if(-1!==e){t=t.substring(0,e+o.length);break}}return t}return o}return o})(t))})).catch((o=>{console.error("Error fetching message:",o),g(`Error fetching message: ${o.message||"Unknown error"}`)})).finally((()=>{h(!1)}))):g("No tag provided or service unavailable")}),[a,f]),j?o(r,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(e,{})})}):u?o(r,{hideHeader:!0,hideFooter:!0,children:t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[o(n,{children:u}),t(n,{children:["Tag: ",a]})]})}):l?o(m,{html:l,onDismiss:()=>window.history.back()}):o(r,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(n,{children:"No HTML content available"})})})};export{p as default};
1
+ import{jsx as o,jsxs as t}from"react/jsx-runtime";import{Spinner as e}from"@fluentui/react-components";import{useState as s,useEffect as i}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as r}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import m from"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const p=({state:p})=>{const c=window.location.hash.match(/^#\/html\/(.+)$/),a=c?decodeURIComponent(c[1]):"",[l,d]=s(),[j,h]=s(!1),[u,g]=s(),{service:f}=p;return i((()=>{a&&f?(h(!0),g(void 0),f.getMessagesFast([a],void 0,1).then((o=>{if(0===o.length)return void g(`No messages found with tag: ${a}`);const t=o[0].content;d((o=>{const t=o.indexOf("```html");if(-1!==t){const e=o.indexOf("```",t+7);return-1===e?o.substring(t+7):o.substring(t+7,e)}const e=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const t of e){const e=o.match(t);if(e)return e[0]}if(o.includes("<html")||o.includes("<!DOCTYPE")||o.includes("<div")||o.includes("<p>")||o.includes("<span")){const t=["<!DOCTYPE","<html","<div","<body","<article","<section"];let e=-1;for(const s of t){const t=o.indexOf(s);-1!==t&&(-1===e||t<e)&&(e=t)}if(-1!==e){let t=o.substring(e);const s=["</html>","</body>","</div>"];for(const o of s){const e=t.lastIndexOf(o);if(-1!==e){t=t.substring(0,e+o.length);break}}return t}return o}return o})(t))})).catch((o=>{console.error("Error fetching message:",o),g(`Error fetching message: ${o.message||"Unknown error"}`)})).finally((()=>{h(!1)}))):g("No tag provided or service unavailable")}),[a,f]),j?o(r,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(e,{})})}):u?o(r,{hideHeader:!0,hideFooter:!0,children:t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[o(n,{children:u}),t(n,{children:["Tag: ",a]})]})}):l?o(m,{html:l,onDismiss:()=>window.history.back()}):o(r,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(n,{children:"No HTML content available"})})})};export{p as default};
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t,Fragment as e}from"react/jsx-runtime";import i,{useState as n}from"react";import{makeStyles as r,Image as s,Input as m,mergeClasses as a}from"@fluentui/react-components";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as c}from"../components/Title.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import d from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import g from"../hooks/useAppStyles.js";const u=r({container:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",backgroundPosition:"calc(50% - 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",gap:"20px",padding:"0 20px"},button:{minWidth:"15rem"},input:{minWidth:"15rem",marginBottom:"10px"},image:{maxHeight:"200px"}}),h=({state:r})=>{const{loginWithRedirect:h,loginPasswordless:_}=r.auth,I=u(),f=g(),{t:E}=d(),[b,k]=n(""),[L,C]=n(!1),N=j("LOGIN_REDIRECT"),O=j("AUTH0_PASSWORDLESS_ENABLED");i.useEffect((()=>{N&&h()}),[N]);return o("div",N?{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E("Omdirigerar till inloggning...")})]}:{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[j("LOGIN_LOGO_URL")&&t(s,{src:j("LOGIN_LOGO_URL"),alt:j("INDEX_TITLE"),className:I.image}),!j("LOGIN_HIDE_WELCOME")&&t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E(j("LOGIN_WELCOME_TEXT")||"Logga in, eller registrera ett konto, för att komma igång.")}),o(e,O?{children:[t(m,{className:I.input,type:"email",placeholder:E("Ange din e-postadress"),value:b,onChange:o=>k(o.target.value),disabled:L}),t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:async()=>{if(b.trim()){C(!0);try{await _(b)}catch(o){console.error("Passwordless login failed:",o)}finally{C(!1)}}},disabled:!b.trim()||L,children:E(L?"Skickar...":"Skicka inloggningslänk")})]}:{children:[t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h(),children:E("Logga in")}),!j("HIDE_REGISTER_BUTTON")&&t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h({authorizationParams:{screen_hint:"signup"}}),children:E("Registrera")})]})]})};export{h as default};
1
+ import{jsxs as o,jsx as t,Fragment as e}from"react/jsx-runtime";import i,{useState as n}from"react";import{makeStyles as r,Image as s,Input as m,mergeClasses as a}from"@fluentui/react-components";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as c}from"../components/Title.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../components/FileThumbnail.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import d from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import g from"../hooks/useAppStyles.js";const u=r({container:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",backgroundPosition:"calc(50% - 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",gap:"20px",padding:"0 20px"},button:{minWidth:"15rem"},input:{minWidth:"15rem",marginBottom:"10px"},image:{maxHeight:"200px"}}),h=({state:r})=>{const{loginWithRedirect:h,loginPasswordless:_}=r.auth,I=u(),f=g(),{t:E}=d(),[b,k]=n(""),[L,C]=n(!1),N=j("LOGIN_REDIRECT"),O=j("AUTH0_PASSWORDLESS_ENABLED");i.useEffect((()=>{N&&h()}),[N]);return o("div",N?{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E("Omdirigerar till inloggning...")})]}:{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[j("LOGIN_LOGO_URL")&&t(s,{src:j("LOGIN_LOGO_URL"),alt:j("INDEX_TITLE"),className:I.image}),!j("LOGIN_HIDE_WELCOME")&&t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E(j("LOGIN_WELCOME_TEXT")||"Logga in, eller registrera ett konto, för att komma igång.")}),o(e,O?{children:[t(m,{className:I.input,type:"email",placeholder:E("Ange din e-postadress"),value:b,onChange:o=>k(o.target.value),disabled:L}),t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:async()=>{if(b.trim()){C(!0);try{await _(b)}catch(o){console.error("Passwordless login failed:",o)}finally{C(!1)}}},disabled:!b.trim()||L,children:E(L?"Skickar...":"Skicka inloggningslänk")})]}:{children:[t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h(),children:E("Logga in")}),!j("HIDE_REGISTER_BUTTON")&&t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h({authorizationParams:{screen_hint:"signup"}}),children:E("Registrera")})]})]})};export{h as default};
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t}from"react/jsx-runtime";import{makeStyles as e,tokens as r}from"@fluentui/react-components";import{useState as i,useEffect as n}from"react";import{Link as s}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as m}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as p}from"../components/Title.js";import{Text as a}from"../components/Text.js";import{Spinner as c}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as l}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"../components/Content.js";import"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const d=e({container:{display:"flex",flexDirection:"column",alignItems:"center",gap:"20px",padding:"20px"},pricing:{padding:"20px",paddingLeft:"30px",border:"1px solid #ccc",borderRadius:"8px",backgroundColor:r.colorNeutralBackground1}}),j=({state:e})=>{const r=d(),[j,u]=i(!1),{service:g,stateMachine:h}=e,{updateContext:f}=h;n((()=>{new URLSearchParams(window.location.search).get("session_id")&&f({hasValidPurchase:void 0})}),[]);return o("div",{className:r.container,children:[t(p,{children:"Starta ditt abonnemang"}),t("div",{className:r.pricing,children:o("ul",{children:[t("li",{children:t(a,{size:400,children:"Kreditkort krävs inte"})}),t("li",{children:t(a,{size:400,children:"Gratis de 2 första månaderna"})}),t("li",{children:t(a,{size:400,children:"Därefter 89 kr/månad"})})]})}),t(m,{appearance:"primary",onClick:async()=>{try{u(!0),await g.redirectToCheckout(l("STRIPE_PRICE_ID"))}catch(o){console.error("Purchase error:",o)}finally{u(!1)}},disabled:j,children:j?t(c,{size:"tiny"}):"Starta abonnemang"}),t("div",{children:o(a,{size:400,children:["Har du redan ett abonnemang? Kanske har du loggat in med fel konto. ",t(s,{to:"/logout",children:"Logga ut"})," och sedan in igen för att komma igång."]})})]})};export{j as Purchase,j as default};
1
+ import{jsxs as o,jsx as t}from"react/jsx-runtime";import{makeStyles as e,tokens as r}from"@fluentui/react-components";import{useState as i,useEffect as n}from"react";import{Link as s}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as m}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as p}from"../components/Title.js";import{Text as a}from"../components/Text.js";import{Spinner as c}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as l}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"../components/Content.js";import"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const d=e({container:{display:"flex",flexDirection:"column",alignItems:"center",gap:"20px",padding:"20px"},pricing:{padding:"20px",paddingLeft:"30px",border:"1px solid #ccc",borderRadius:"8px",backgroundColor:r.colorNeutralBackground1}}),j=({state:e})=>{const r=d(),[j,u]=i(!1),{service:g,stateMachine:h}=e,{updateContext:f}=h;n((()=>{new URLSearchParams(window.location.search).get("session_id")&&f({hasValidPurchase:void 0})}),[]);return o("div",{className:r.container,children:[t(p,{children:"Starta ditt abonnemang"}),t("div",{className:r.pricing,children:o("ul",{children:[t("li",{children:t(a,{size:400,children:"Kreditkort krävs inte"})}),t("li",{children:t(a,{size:400,children:"Gratis de 2 första månaderna"})}),t("li",{children:t(a,{size:400,children:"Därefter 89 kr/månad"})})]})}),t(m,{appearance:"primary",onClick:async()=>{try{u(!0),await g.redirectToCheckout(l("STRIPE_PRICE_ID"))}catch(o){console.error("Purchase error:",o)}finally{u(!1)}},disabled:j,children:j?t(c,{size:"tiny"}):"Starta abonnemang"}),t("div",{children:o(a,{size:400,children:["Har du redan ett abonnemang? Kanske har du loggat in med fel konto. ",t(s,{to:"/logout",children:"Logga ut"})," och sedan in igen för att komma igång."]})})]})};export{j as Purchase,j as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useCallback as i,useEffect as r}from"react";import{makeStyles as s,tokens as a,shorthands as c,Image as l,mergeClasses as p}from"@fluentui/react-components";import{useNavigate as m}from"react-router-dom";import"../components/Markdown.js";import{Textarea as d}from"../components/Textarea.js";import{Button as h}from"../components/Button.js";import"../components/CompoundButton.js";import{Text as g}from"../components/Text.js";import"../components/Spinner.js";import{Input as u}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import{Dialog as j,DialogTitle as f,DialogContent as x,DialogActions as C}from"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as k}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Purchase.js";import"../components/Content.js";import{Page as b}from"../components/Page.js";import"./QrScan.js";import w from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import{QrCodeDialog as v}from"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const _=s({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:a.colorNeutralForegroundOnBrand,...c.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...c.padding("10px"),...c.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...c.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"},backButton:{position:"absolute",top:"10px",left:"10px",zIndex:1e3}}),y={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},I=()=>{const s=_(),{t:c}=w(),I=m(),[A,P]=n(""),[F,B]=n(),[$,N]=n({opened:0,not_home:0,sales:0,call_back:0}),[M,S]=n([]),[D,L]=n(!1),[O,T]=n(""),[H,z]=n(""),[R,U]=n(""),[E,G]=n(!1),[W,Q]=n(!1),[V,K]=n(!1),q={backgroundColor:k("APP_HEADER_COLOR")||a.colorBrandBackground},J=i((()=>new Promise((o=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((e=>{const t=`#position (${e.coords.latitude},${e.coords.longitude})`;o(t)})):o(void 0)}))),[B]);r((()=>{window.Codicent.getDataMessages({codicent:k("APP_NAME"),tags:["sales_code"]}).then((o=>{o=o.filter((o=>"1"!==o.data.inactive)),S(o)})).catch(console.error),J()}),[]);const X=async()=>{if(!A)return;const o=["not_home","sales","call_back","opened"],e=new Date;e.setHours(0,0,0,0);const t={...$};for(const n of o){const o=await window.Codicent.getMessages({search:`#${n} #sales_code_${A}`,afterTimestamp:e,length:1e4});t[n]=o.filter((o=>o.content.includes(`#${n} `)&&o.content.includes(`#sales_code_${A}`))).length}N(t)},Y=async(o,e="")=>{const t=await J();console.log("Got position",t);const n=`@${k("APP_NAME")} #sales_code_${A} #${o} ${t||""} ${e.trim().length>0?"#comment ":""}${e}`.trim();await window.Codicent.postMessage({message:n}),X()};return o(b,{hideHeader:!0,children:e("div",{className:s.root,children:[o("div",{className:s.backButton,children:o(h,{appearance:"subtle",icon:"ArrowLeft24Regular",onClick:()=>I(-1),children:c("Tillbaka")})}),e("div",{className:s.header,style:q,children:[o(l,{src:H||k("APP_ICON_URL")||"https://via.placeholder.com/100",className:s.logo,onClick:()=>{H?K(!0):R&&Q(!0)}}),o("div",{className:s.inputContainer,children:o(u,{value:A,onChange:o=>P(o.target.value),onBlur:()=>{const o=M.find((o=>o.data.code===A));if(o)z(`https://codicent.com/app/GetImage?fileId=${o.fileId}&width=100`),U(o.data.link),G(!0),X();else{const o=M.find((o=>o.data.code2===A.toUpperCase()));o?(z(`https://codicent.com/app/GetImage?fileId=${o.fileIds&&o.fileIds.length>1?o.fileIds[1]:o.fileId}&width=100`),U(o.data.link2),G(!0),X()):(G(!1),alert(c("Fel försäljningskod!")))}},placeholder:c("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),E&&e(t,{children:[o("div",{className:s.dashboard,children:Object.keys($).map((e=>{return o("div",{className:(t=e,p(s.statBox,s[t])),children:o(g,{weight:"bold",size:400,children:$[e]})},e);var t}))}),o("div",{className:s.buttonContainer,children:Object.entries(y).map((([e,t])=>o(h,{size:"large",className:s.actionButton,style:{backgroundColor:t,color:"white"},onClick:()=>{Y(e),"opened"===e&&L(!0),"sales"===e&&Q(!0)},children:e.charAt(0).toUpperCase()+e.slice(1).replace("_"," ")},e)))}),e(j,{open:D,children:[o(f,{children:c("Skriv in avvikelse")}),o(x,{children:o("div",{className:s.textAreaContainer,children:o(d,{value:O,onChange:o=>T(o.target.value),placeholder:c("Skriv din text här..."),rows:4,size:"large"})})}),o(C,{children:o(h,{appearance:"primary",onClick:()=>{Y("anomaly",`\n${O}`),L(!1),T("")},children:c("Spara")})})]}),e(j,{open:W,children:[o(f,{children:c("Godkännande")}),o(x,{children:c("Är kunden över 23 år?")}),e(C,{children:[o(h,{appearance:"primary",onClick:()=>window.open(R,"_blank"),children:c("OK")}),o(h,{appearance:"secondary",onClick:()=>Q(!1),children:c("Avbryt")})]})]})]}),o(v,{isOpen:V,onDismiss:()=>K(!1),imageUrl:H})]})})};export{I as Sales,I as default};
1
+ import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useCallback as i,useEffect as r}from"react";import{makeStyles as s,tokens as a,shorthands as c,Image as p,mergeClasses as l}from"@fluentui/react-components";import{useNavigate as m}from"react-router-dom";import"../components/Markdown.js";import{Textarea as d}from"../components/Textarea.js";import{Button as h}from"../components/Button.js";import"../components/CompoundButton.js";import{Text as g}from"../components/Text.js";import"../components/Spinner.js";import{Input as u}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import{Dialog as j,DialogTitle as f,DialogContent as x,DialogActions as C}from"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as k}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Purchase.js";import"../components/Content.js";import{Page as b}from"../components/Page.js";import"./QrScan.js";import w from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{QrCodeDialog as v}from"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const _=s({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:a.colorNeutralForegroundOnBrand,...c.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...c.padding("10px"),...c.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...c.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"},backButton:{position:"absolute",top:"10px",left:"10px",zIndex:1e3}}),y={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},I=()=>{const s=_(),{t:c}=w(),I=m(),[A,P]=n(""),[F,B]=n(),[$,M]=n({opened:0,not_home:0,sales:0,call_back:0}),[N,D]=n([]),[S,L]=n(!1),[O,T]=n(""),[H,z]=n(""),[R,U]=n(""),[E,G]=n(!1),[W,Q]=n(!1),[V,K]=n(!1),q={backgroundColor:k("APP_HEADER_COLOR")||a.colorBrandBackground},J=i((()=>new Promise((o=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((e=>{const t=`#position (${e.coords.latitude},${e.coords.longitude})`;o(t)})):o(void 0)}))),[B]);r((()=>{window.Codicent.getDataMessages({codicent:k("APP_NAME"),tags:["sales_code"]}).then((o=>{o=o.filter((o=>"1"!==o.data.inactive)),D(o)})).catch(console.error),J()}),[]);const X=async()=>{if(!A)return;const o=["not_home","sales","call_back","opened"],e=new Date;e.setHours(0,0,0,0);const t={...$};for(const n of o){const o=await window.Codicent.getMessages({search:`#${n} #sales_code_${A}`,afterTimestamp:e,length:1e4});t[n]=o.filter((o=>o.content.includes(`#${n} `)&&o.content.includes(`#sales_code_${A}`))).length}M(t)},Y=async(o,e="")=>{const t=await J();console.log("Got position",t);const n=`@${k("APP_NAME")} #sales_code_${A} #${o} ${t||""} ${e.trim().length>0?"#comment ":""}${e}`.trim();await window.Codicent.postMessage({message:n}),X()};return o(b,{hideHeader:!0,children:e("div",{className:s.root,children:[o("div",{className:s.backButton,children:o(h,{appearance:"subtle",icon:"ArrowLeft24Regular",onClick:()=>I(-1),children:c("Tillbaka")})}),e("div",{className:s.header,style:q,children:[o(p,{src:H||k("APP_ICON_URL")||"https://via.placeholder.com/100",className:s.logo,onClick:()=>{H?K(!0):R&&Q(!0)}}),o("div",{className:s.inputContainer,children:o(u,{value:A,onChange:o=>P(o.target.value),onBlur:()=>{const o=N.find((o=>o.data.code===A));if(o)z(`https://codicent.com/app/GetImage?fileId=${o.fileId}&width=100`),U(o.data.link),G(!0),X();else{const o=N.find((o=>o.data.code2===A.toUpperCase()));o?(z(`https://codicent.com/app/GetImage?fileId=${o.fileIds&&o.fileIds.length>1?o.fileIds[1]:o.fileId}&width=100`),U(o.data.link2),G(!0),X()):(G(!1),alert(c("Fel försäljningskod!")))}},placeholder:c("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),E&&e(t,{children:[o("div",{className:s.dashboard,children:Object.keys($).map((e=>{return o("div",{className:(t=e,l(s.statBox,s[t])),children:o(g,{weight:"bold",size:400,children:$[e]})},e);var t}))}),o("div",{className:s.buttonContainer,children:Object.entries(y).map((([e,t])=>o(h,{size:"large",className:s.actionButton,style:{backgroundColor:t,color:"white"},onClick:()=>{Y(e),"opened"===e&&L(!0),"sales"===e&&Q(!0)},children:e.charAt(0).toUpperCase()+e.slice(1).replace("_"," ")},e)))}),e(j,{open:S,children:[o(f,{children:c("Skriv in avvikelse")}),o(x,{children:o("div",{className:s.textAreaContainer,children:o(d,{value:O,onChange:o=>T(o.target.value),placeholder:c("Skriv din text här..."),rows:4,size:"large"})})}),o(C,{children:o(h,{appearance:"primary",onClick:()=>{Y("anomaly",`\n${O}`),L(!1),T("")},children:c("Spara")})})]}),e(j,{open:W,children:[o(f,{children:c("Godkännande")}),o(x,{children:c("Är kunden över 23 år?")}),e(C,{children:[o(h,{appearance:"primary",onClick:()=>window.open(R,"_blank"),children:c("OK")}),o(h,{appearance:"secondary",onClick:()=>Q(!1),children:c("Avbryt")})]})]})]}),o(v,{isOpen:V,onDismiss:()=>K(!1),imageUrl:H})]})})};export{I as Sales,I as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t}from"react/jsx-runtime";import{useRef as e,useState as n,useEffect as r}from"react";import{makeStyles as i,tokens as s}from"@fluentui/react-components";import a from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as m}from"../components/Title.js";import"../components/Spinner.js";import"../components/TextHeader.js";import c from"../components/TypingIndicator.js";import"../components/Dialog.js";import l from"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import d from"../hooks/useStateWithLocalStorage.js";import{CodicentService as u}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as g}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useChat as f}from"../hooks/useChat.js";import{useTemplateVariables as x}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const C=i({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",overflowY:"auto",marginBottom:"16px"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"},inputArea:{display:"flex",flexDirection:"column",justifyContent:"start",alignItems:"center",height:"100%",padding:"0 16px"},promptButtons:{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"start",alignItems:"center",gap:"8px",marginTop:"8px",marginLeft:"6px",marginRight:"2px",marginBottom:"12px"},answerArea:{width:"100%",marginLeft:"12px",marginRight:"12px",padding:"12px",borderRadius:"16px",marginBottom:"24px"},title:{marginLeft:"12px",padding:"16px"}}),A=({state:i})=>{const A=C(),{t:w}=h(),{messages:T,isBotTyping:_,handleSend:v,newChat:S}=f(i.stateMachine),N=e(null),{service:b}=i;g("CHAT_BOT_BACKGROUND_COLOR")||s.colorBrandBackground2;const[O,k]=d(i.context.selectedApp+"_searchprompts",["Leta information","Vad kan jag göra?","Sök supportställe"]),[y,I]=n(),[B,M]=n(null),[P,D]=n(!1);x(b.uploadFile);r((()=>{_&&D(!0)}),[_]),r((()=>{S();const o=g("APP_CONFIG"),t=g("APP_BUTTONS");t?o.apps[t].questions&&k(o.apps[t].questions.map((o=>w(o)))):console.error("APP_BUTTONS is not defined in the configuration."),void 0!==g("ANONYMOUS_CODICENT")&&void 0!==g("ANONYMOUS_TOKEN")?(b.codicent=g("ANONYMOUS_CODICENT"),b.setToken(g("ANONYMOUS_TOKEN"))):console.error("Anonymous Codicent or Token is not defined in the configuration.")}),[S,b,k,w]),r((()=>{setTimeout((()=>{N.current?.scrollIntoView({behavior:"smooth"})}),10)}),[T]);const F=o=>{I(o),v(o)};return r((()=>{const o=T.filter((o=>"bot"===o.sender));let t=o.length>0?o[o.length-1]:null;M({...t,createdAt:new Date}),t&&D(!1)}),[T]),o(j,{hideHeader:!0,hideFooter:!0,children:t("div",{id:"search-container",className:A.chatContainer,style:{backgroundImage:`url(${g("CHAT_BACKGROUND_IMAGE_URL")})`},children:[o("div",{className:A.title,children:o(m,{children:w(g("APP_SEARCH_TITLE")||"Frågor")})}),t("div",{className:A.inputArea,children:[o(l,{noMemory:!0,defaultText:y,codicent:i.context.selectedApp,disableSend:_,onSend:F,rows:3,getImageUrl:u.getImageUrl,getFileInfo:o=>b.getFileInfo(o),selectAll:!0}),o("div",{className:A.promptButtons,children:O.length>0&&O.map(((t,e)=>o(p,{onClick:()=>F(t),size:"large",appearance:"primary",shape:"circular",children:t},`search-prompt-${e}`)))}),P&&o(c,{}),B&&!_&&t("div",{className:A.answerArea,children:[o("div",{ref:N}),o(a,{content:B.content})]})]})]})})};export{A as default};
1
+ import{jsx as o,jsxs as t}from"react/jsx-runtime";import{useRef as e,useState as n,useEffect as r}from"react";import{makeStyles as i,tokens as s}from"@fluentui/react-components";import a from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as m}from"../components/Title.js";import"../components/Spinner.js";import"../components/TextHeader.js";import c from"../components/TypingIndicator.js";import"../components/Dialog.js";import l from"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import d from"../hooks/useStateWithLocalStorage.js";import{CodicentService as u}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as g}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as j}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"react-router-dom";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useChat as f}from"../hooks/useChat.js";import{useTemplateVariables as x}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const C=i({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",overflowY:"auto",marginBottom:"16px"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"},inputArea:{display:"flex",flexDirection:"column",justifyContent:"start",alignItems:"center",height:"100%",padding:"0 16px"},promptButtons:{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"start",alignItems:"center",gap:"8px",marginTop:"8px",marginLeft:"6px",marginRight:"2px",marginBottom:"12px"},answerArea:{width:"100%",marginLeft:"12px",marginRight:"12px",padding:"12px",borderRadius:"16px",marginBottom:"24px"},title:{marginLeft:"12px",padding:"16px"}}),A=({state:i})=>{const A=C(),{t:w}=h(),{messages:T,isBotTyping:_,handleSend:v,newChat:S}=f(i.stateMachine),N=e(null),{service:b}=i;g("CHAT_BOT_BACKGROUND_COLOR")||s.colorBrandBackground2;const[k,O]=d(i.context.selectedApp+"_searchprompts",["Leta information","Vad kan jag göra?","Sök supportställe"]),[y,I]=n(),[B,M]=n(null),[P,D]=n(!1);x(b.uploadFile);r((()=>{_&&D(!0)}),[_]),r((()=>{S();const o=g("APP_CONFIG"),t=g("APP_BUTTONS");t?o.apps[t].questions&&O(o.apps[t].questions.map((o=>w(o)))):console.error("APP_BUTTONS is not defined in the configuration."),void 0!==g("ANONYMOUS_CODICENT")&&void 0!==g("ANONYMOUS_TOKEN")?(b.codicent=g("ANONYMOUS_CODICENT"),b.setToken(g("ANONYMOUS_TOKEN"))):console.error("Anonymous Codicent or Token is not defined in the configuration.")}),[S,b,O,w]),r((()=>{setTimeout((()=>{N.current?.scrollIntoView({behavior:"smooth"})}),10)}),[T]);const F=o=>{I(o),v(o)};return r((()=>{const o=T.filter((o=>"bot"===o.sender));let t=o.length>0?o[o.length-1]:null;M({...t,createdAt:new Date}),t&&D(!1)}),[T]),o(j,{hideHeader:!0,hideFooter:!0,children:t("div",{id:"search-container",className:A.chatContainer,style:{backgroundImage:`url(${g("CHAT_BACKGROUND_IMAGE_URL")})`},children:[o("div",{className:A.title,children:o(m,{children:w(g("APP_SEARCH_TITLE")||"Frågor")})}),t("div",{className:A.inputArea,children:[o(l,{noMemory:!0,defaultText:y,codicent:i.context.selectedApp,disableSend:_,onSend:F,rows:3,getImageUrl:u.getImageUrl,getFileInfo:o=>b.getFileInfo(o),selectAll:!0}),o("div",{className:A.promptButtons,children:k.length>0&&k.map(((t,e)=>o(p,{onClick:()=>F(t),size:"large",appearance:"primary",shape:"circular",children:t},`search-prompt-${e}`)))}),P&&o(c,{}),B&&!_&&t("div",{className:A.answerArea,children:[o("div",{ref:N}),o(a,{content:B.content})]})]})]})})};export{A as default};
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t}from"react/jsx-runtime";import{useState as e,useRef as n,useMemo as i,useCallback as r,useEffect as s}from"react";import{makeStyles as a}from"@fluentui/react-components";import{useSearchParams as p,useNavigate as m}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as c}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import{CombinedPlaceholderDialog as l}from"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import"../components/Page.js";import"./QrScan.js";import d from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useTemplateVariables as h}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import u from"../components/MessageInput.js";import"../components/UploadFile.js";import g from"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const j=a({container:{position:"relative",height:"100vh",width:"100vw",overflow:"auto"},flashOverlay:{position:"fixed",top:0,left:0,width:"100%",height:"100%",backgroundColor:"transparent",transition:"background-color 0.2s ease-out",pointerEvents:"none",zIndex:3},video:{position:"absolute",top:0,left:0,width:"100%",height:"100%",objectFit:"cover",zIndex:1},canvas:{display:"none"},bottomControls:{position:"fixed",bottom:"100px",width:"100%",display:"flex",justifyContent:"center",alignItems:"center",zIndex:2,boxSizing:"border-box"},controlContainer:{width:"100%",maxWidth:"600px",position:"relative"},sendButton:{position:"absolute",right:"10px",bottom:"10px",width:"50px",height:"50px",borderRadius:"50%",backgroundColor:"#0078d4",color:"white",border:"none",cursor:"pointer",display:"flex",justifyContent:"center",alignItems:"center"},topControls:{position:"fixed",top:"20px",width:"100%",display:"flex",justifyContent:"space-between",alignItems:"center",zIndex:2,padding:"0 10px",boxSizing:"border-box"},backButton:{width:"60px",height:"60px",borderRadius:"50%",backgroundColor:"transparent",color:"white",border:"none",cursor:"pointer"},input:{padding:"5px",width:"200px",fontSize:"larger",backgroundColor:"#fff8"},bottomButtons:{position:"fixed",bottom:"0px",width:"100%",display:"flex",justifyContent:"space-around",alignItems:"center",zIndex:2,boxSizing:"border-box"},iconButton:{width:"60px",height:"60px",borderRadius:"50%",backgroundColor:"transparent",color:"white",border:"none",cursor:"pointer"},centerText:{position:"fixed",top:"30%",left:"50%",transform:"translate(-50%, -50%)",zIndex:2,textAlign:"center"}}),f=({state:a,audio:f})=>{const w=j(),{service:b}=a,[x,v]=e(null),[C,y]=e(!0),k=n(null),I=n(null),[F]=p(),S=F.get("extra"),z=F.get("template"),[T,V]=e(""),[B]=e("log"),M=i((()=>new Audio("/audio/camera.mp3")),[]),[$,P]=e(!1),E=m(),{t:N}=d(),{extractTemplateVariables:_}=h(b.uploadFile),[A,D]=e(_(z||"")),[H,L]=e(A.length>0),[O,R]=e(""),[Q,U]=e(100),W=r((()=>A.map((o=>`#${o.value}`)).join(" ")),[A]);s((()=>{const o=W();R(`${S?" #"+S:""}${o.length>0?" "+o:""}`.trim())}),[A,S,W]),s((()=>{if(window.visualViewport){const o=()=>{const o=window.visualViewport?window.innerHeight-window.visualViewport.height:0;U(o>150?o+20:100)};return window.visualViewport.addEventListener("resize",o),o(),()=>{window.visualViewport&&window.visualViewport.removeEventListener("resize",o)}}}),[]);const K=async o=>{try{const t=new FormData;t.append("file",o);const e=await b.uploadFile(o.name,t),n=W(),i=`${B?" #"+B:""}${S?" #"+S:""}${n.length>0?" "+n:""} #photo #file:${e}`;await b.sendMessage(i)}catch(o){alert(N("Failed to send image:")+" "+o)}};return s((()=>()=>{x&&x.getTracks().forEach((o=>o.stop()))}),[x]),o("div",{className:w.container,children:[t("div",{className:w.flashOverlay,style:{backgroundColor:$?"#ffffff":"transparent"}}),t("video",{ref:k,autoPlay:!0,playsInline:!0,className:w.video}),t("canvas",{ref:I,width:"640",height:"480",className:w.canvas}),!x&&t(c,{weight:"semibold",size:400,className:w.centerText,children:N("Klicka på Byt kamera för att starta!")}),t("div",{className:w.bottomControls,style:{bottom:`${Q}px`},children:t("div",{className:w.controlContainer,children:t(u,{onSend:async()=>{if(""===T.trim())return;const o=W(),t=`${B?" #"+B:""}${S?" #"+S:""}${o.length>0?" "+o:""} ${T}`;try{await b.sendMessage(t),V("")}catch(o){alert(N("Failed to send message: ")+o)}},rows:4,onChange:V})})}),t("div",{className:w.bottomButtons,children:t(g,{audio:f,onHome:()=>E("/"),onTakePhoto:()=>{const o=I.current,t=k.current;if(o&&t){o.width=t.videoWidth,o.height=t.videoHeight;const e=o.getContext("2d");e&&(M.play(),P(!0),setTimeout((()=>P(!1)),100),e.drawImage(t,0,0,o.width,o.height),o.toBlob((o=>{if(o){const t=new File([o],"snapshot.png",{type:"image/png"});K(t)}})))}},onSwichCamera:()=>{y((o=>!o)),(async()=>{x&&x.getTracks().forEach((o=>o.stop()));const o={video:{facingMode:C?"user":"environment"},audio:!1};try{const t=await navigator.mediaDevices.getUserMedia(o);v(t),k.current&&(k.current.srcObject=t,k.current.play())}catch(o){console.error("Error accessing the camera: ",o),o instanceof Error?alert(N("Error accessing the camera:")+" "+o.message):alert(N("Error accessing the camera"))}})()},tag:O})}),t(l,{open:H,templateVariables:A,filePlaceholders:[],onTemplateVariablesChange:D,onFilePlaceholdersChange:()=>{},onConfirm:()=>L(!1),onCancel:()=>{L(!1),E(-1)},uploadFile:b.uploadFile})]})};export{f as default};
1
+ import{jsxs as o,jsx as t}from"react/jsx-runtime";import{useState as e,useRef as n,useMemo as i,useCallback as r,useEffect as s}from"react";import{makeStyles as a}from"@fluentui/react-components";import{useSearchParams as p,useNavigate as m}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as c}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import{CombinedPlaceholderDialog as l}from"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import"../components/Page.js";import"./QrScan.js";import d from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useTemplateVariables as h}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";import u from"../components/MessageInput.js";import"../components/UploadFile.js";import g from"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const j=a({container:{position:"relative",height:"100vh",width:"100vw",overflow:"auto"},flashOverlay:{position:"fixed",top:0,left:0,width:"100%",height:"100%",backgroundColor:"transparent",transition:"background-color 0.2s ease-out",pointerEvents:"none",zIndex:3},video:{position:"absolute",top:0,left:0,width:"100%",height:"100%",objectFit:"cover",zIndex:1},canvas:{display:"none"},bottomControls:{position:"fixed",bottom:"100px",width:"100%",display:"flex",justifyContent:"center",alignItems:"center",zIndex:2,boxSizing:"border-box"},controlContainer:{width:"100%",maxWidth:"600px",position:"relative"},sendButton:{position:"absolute",right:"10px",bottom:"10px",width:"50px",height:"50px",borderRadius:"50%",backgroundColor:"#0078d4",color:"white",border:"none",cursor:"pointer",display:"flex",justifyContent:"center",alignItems:"center"},topControls:{position:"fixed",top:"20px",width:"100%",display:"flex",justifyContent:"space-between",alignItems:"center",zIndex:2,padding:"0 10px",boxSizing:"border-box"},backButton:{width:"60px",height:"60px",borderRadius:"50%",backgroundColor:"transparent",color:"white",border:"none",cursor:"pointer"},input:{padding:"5px",width:"200px",fontSize:"larger",backgroundColor:"#fff8"},bottomButtons:{position:"fixed",bottom:"0px",width:"100%",display:"flex",justifyContent:"space-around",alignItems:"center",zIndex:2,boxSizing:"border-box"},iconButton:{width:"60px",height:"60px",borderRadius:"50%",backgroundColor:"transparent",color:"white",border:"none",cursor:"pointer"},centerText:{position:"fixed",top:"30%",left:"50%",transform:"translate(-50%, -50%)",zIndex:2,textAlign:"center"}}),f=({state:a,audio:f})=>{const w=j(),{service:b}=a,[x,v]=e(null),[C,y]=e(!0),k=n(null),I=n(null),[F]=p(),S=F.get("extra"),z=F.get("template"),[T,M]=e(""),[V]=e("log"),B=i((()=>new Audio("/audio/camera.mp3")),[]),[P,$]=e(!1),E=m(),{t:N}=d(),{extractTemplateVariables:_}=h(b.uploadFile),[D,A]=e(_(z||"")),[H,L]=e(D.length>0),[O,R]=e(""),[Q,U]=e(100),W=r((()=>D.map((o=>`#${o.value}`)).join(" ")),[D]);s((()=>{const o=W();R(`${S?" #"+S:""}${o.length>0?" "+o:""}`.trim())}),[D,S,W]),s((()=>{if(window.visualViewport){const o=()=>{const o=window.visualViewport?window.innerHeight-window.visualViewport.height:0;U(o>150?o+20:100)};return window.visualViewport.addEventListener("resize",o),o(),()=>{window.visualViewport&&window.visualViewport.removeEventListener("resize",o)}}}),[]);const K=async o=>{try{const t=new FormData;t.append("file",o);const e=await b.uploadFile(o.name,t),n=W(),i=`${V?" #"+V:""}${S?" #"+S:""}${n.length>0?" "+n:""} #photo #file:${e}`;await b.sendMessage(i)}catch(o){alert(N("Failed to send image:")+" "+o)}};return s((()=>()=>{x&&x.getTracks().forEach((o=>o.stop()))}),[x]),o("div",{className:w.container,children:[t("div",{className:w.flashOverlay,style:{backgroundColor:P?"#ffffff":"transparent"}}),t("video",{ref:k,autoPlay:!0,playsInline:!0,className:w.video}),t("canvas",{ref:I,width:"640",height:"480",className:w.canvas}),!x&&t(c,{weight:"semibold",size:400,className:w.centerText,children:N("Klicka på Byt kamera för att starta!")}),t("div",{className:w.bottomControls,style:{bottom:`${Q}px`},children:t("div",{className:w.controlContainer,children:t(u,{onSend:async()=>{if(""===T.trim())return;const o=W(),t=`${V?" #"+V:""}${S?" #"+S:""}${o.length>0?" "+o:""} ${T}`;try{await b.sendMessage(t),M("")}catch(o){alert(N("Failed to send message: ")+o)}},rows:4,onChange:M})})}),t("div",{className:w.bottomButtons,children:t(g,{audio:f,onHome:()=>E("/"),onTakePhoto:()=>{const o=I.current,t=k.current;if(o&&t){o.width=t.videoWidth,o.height=t.videoHeight;const e=o.getContext("2d");e&&(B.play(),$(!0),setTimeout((()=>$(!1)),100),e.drawImage(t,0,0,o.width,o.height),o.toBlob((o=>{if(o){const t=new File([o],"snapshot.png",{type:"image/png"});K(t)}})))}},onSwichCamera:()=>{y((o=>!o)),(async()=>{x&&x.getTracks().forEach((o=>o.stop()));const o={video:{facingMode:C?"user":"environment"},audio:!1};try{const t=await navigator.mediaDevices.getUserMedia(o);v(t),k.current&&(k.current.srcObject=t,k.current.play())}catch(o){console.error("Error accessing the camera: ",o),o instanceof Error?alert(N("Error accessing the camera:")+" "+o.message):alert(N("Error accessing the camera"))}})()},tag:O})}),t(l,{open:H,templateVariables:D,filePlaceholders:[],onTemplateVariablesChange:A,onFilePlaceholdersChange:()=>{},onConfirm:()=>L(!1),onCancel:()=>{L(!1),E(-1)},uploadFile:b.uploadFile})]})};export{f as default};