@memori.ai/memori-react 9.0.0-alpha.2 → 9.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1103 -0
- package/dist/components/AgeVerificationModal/AgeVerificationModal.css +9 -4
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js +8 -3
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
- package/dist/components/Auth/Auth.js +3 -1
- package/dist/components/Auth/Auth.js.map +1 -1
- package/dist/components/Avatar/Avatar.js +5 -10
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +8 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +14 -5
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/dist/components/Chat/Chat.css +137 -34
- package/dist/components/Chat/Chat.d.ts +3 -0
- package/dist/components/Chat/Chat.js +68 -58
- package/dist/components/Chat/Chat.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.css +150 -32
- package/dist/components/ChatBubble/ChatBubble.d.ts +1 -0
- package/dist/components/ChatBubble/ChatBubble.js +122 -95
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/ChatHistoryDrawer/ChatHistory.css +5 -0
- package/dist/components/ChatHistoryDrawer/ChatHistory.js +27 -10
- package/dist/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
- package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.css +6 -1
- package/dist/components/ChatInputs/ChatInputs.css +332 -149
- package/dist/components/ChatInputs/ChatInputs.d.ts +2 -0
- package/dist/components/ChatInputs/ChatInputs.js +5 -6
- package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
- package/dist/components/ChatTextArea/ChatTextArea.css +31 -27
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/dist/components/ContentPreviewModal/ContentPreviewModal.css +6 -22
- package/dist/components/ContentPreviewModal/ContentPreviewModal.js +3 -1
- package/dist/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
- package/dist/components/DateSelector/DateSelector.css +25 -2
- package/dist/components/DateSelector/DateSelector.d.ts +2 -1
- package/dist/components/DateSelector/DateSelector.js +17 -7
- package/dist/components/DateSelector/DateSelector.js.map +1 -1
- package/dist/components/ExpertsDrawer/ExpertsDrawer.js +3 -1
- package/dist/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
- package/dist/components/FilePreview/FilePreview.css +42 -21
- package/dist/components/FilePreview/FilePreview.d.ts +2 -1
- package/dist/components/FilePreview/FilePreview.js +28 -7
- package/dist/components/FilePreview/FilePreview.js.map +1 -1
- package/dist/components/Header/ChatConsumptionDropdown.d.ts +3 -1
- package/dist/components/Header/ChatConsumptionDropdown.js +5 -3
- package/dist/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/dist/components/Header/Header.css +210 -39
- package/dist/components/Header/Header.d.ts +1 -0
- package/dist/components/Header/Header.js +135 -51
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/IconButton/IconButton.css +144 -0
- package/dist/components/IconButton/IconButton.d.ts +9 -0
- package/dist/components/IconButton/IconButton.js +36 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/KnownFacts/KnownFacts.css +22 -9
- package/dist/components/KnownFacts/KnownFacts.js +18 -7
- package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
- package/dist/components/LoginDrawer/LoginDrawer.css +42 -0
- package/dist/components/LoginDrawer/LoginDrawer.js +3 -1
- package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -1
- package/dist/components/MediaWidget/MediaItemWidget.js +14 -12
- package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
- package/dist/components/MediaWidget/MediaItemWidget.utils.d.ts +3 -2
- package/dist/components/MediaWidget/MediaItemWidget.utils.js +28 -6
- package/dist/components/MediaWidget/MediaItemWidget.utils.js.map +1 -1
- package/dist/components/MediaWidget/MediaPreviewModal.js +6 -7
- package/dist/components/MediaWidget/MediaPreviewModal.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.css +7 -2
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js +14 -12
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +36 -124
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +251 -170
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +25 -15
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +18 -2
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +210 -62
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +1 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/context/ArtifactContext.d.ts +3 -1
- package/dist/components/MemoriArtifactSystem/context/ArtifactContext.js +65 -1
- package/dist/components/MemoriArtifactSystem/context/ArtifactContext.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/types/artifact.types.d.ts +11 -0
- package/dist/components/MemoriArtifactSystem/utils/ArtifactAPI.js +18 -13
- package/dist/components/MemoriArtifactSystem/utils/ArtifactAPI.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/utils/applyEdits.d.ts +8 -0
- package/dist/components/MemoriArtifactSystem/utils/applyEdits.js +117 -0
- package/dist/components/MemoriArtifactSystem/utils/applyEdits.js.map +1 -0
- package/dist/components/MemoriWidget/MemoriWidget.css +65 -5
- package/dist/components/MemoriWidget/MemoriWidget.d.ts +1 -0
- package/dist/components/MemoriWidget/MemoriWidget.js +820 -457
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/MicrophoneButton/MicrophoneButton.css +4 -131
- package/dist/components/MicrophoneButton/MicrophoneButton.js +3 -1
- package/dist/components/MicrophoneButton/MicrophoneButton.js.map +1 -1
- package/dist/components/MobileSessionPanel/MobileSessionPanel.css +29 -7
- package/dist/components/MobileSessionPanel/MobileSessionPanel.d.ts +6 -1
- package/dist/components/MobileSessionPanel/MobileSessionPanel.js +12 -9
- package/dist/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
- package/dist/components/PositionPopover/PositionPopover.d.ts +2 -0
- package/dist/components/PositionPopover/PositionPopover.js +19 -11
- package/dist/components/PositionPopover/PositionPopover.js.map +1 -1
- package/dist/components/PoweredBy/PoweredBy.css +4 -3
- package/dist/components/SettingsDrawer/SettingsDrawer.js +4 -2
- package/dist/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
- package/dist/components/ShareButton/ShareButton.css +3 -2
- package/dist/components/ShareButton/ShareButton.js +3 -4
- package/dist/components/ShareButton/ShareButton.js.map +1 -1
- package/dist/components/Snippet/Snippet.css +6 -36
- package/dist/components/Snippet/Snippet.js +3 -1
- package/dist/components/Snippet/Snippet.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.css +114 -10
- package/dist/components/StartPanel/StartPanel.js +14 -9
- package/dist/components/StartPanel/StartPanel.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.css +3 -40
- package/dist/components/UploadButton/UploadButton.d.ts +1 -0
- package/dist/components/UploadButton/UploadButton.js +34 -25
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.d.ts +1 -6
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +47 -113
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
- package/dist/components/UploadButton/UploadImages/UploadImages.js +3 -1
- package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
- package/dist/components/WhyThisAnswer/WhyThisAnswer.js +3 -1
- package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
- package/dist/components/layouts/Chat.js +67 -79
- package/dist/components/layouts/Chat.js.map +1 -1
- package/dist/components/layouts/FullPage.js +90 -42
- package/dist/components/layouts/FullPage.js.map +1 -1
- package/dist/components/layouts/HiddenChat.js +11 -236
- package/dist/components/layouts/HiddenChat.js.map +1 -1
- package/dist/components/layouts/Totem.js +10 -1
- package/dist/components/layouts/Totem.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +30 -3
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/website-assistant.css +175 -61
- package/dist/components/layouts/ZoomedFullBody.js +90 -42
- package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
- package/dist/components/layouts/chat.css +232 -85
- package/dist/components/layouts/fullpage.css +253 -93
- package/dist/components/layouts/hidden-chat.css +172 -62
- package/dist/components/layouts/totem.css +151 -50
- package/dist/components/layouts/zoomed-full-body.css +339 -34
- package/dist/context/widgetSurfaceContext.d.ts +3 -0
- package/dist/context/widgetSurfaceContext.js +11 -0
- package/dist/context/widgetSurfaceContext.js.map +1 -0
- package/dist/helpers/constants.d.ts +4 -0
- package/dist/helpers/constants.js +50 -1
- package/dist/helpers/constants.js.map +1 -1
- package/dist/helpers/convertDocument.d.ts +1 -0
- package/dist/helpers/convertDocument.js +24 -0
- package/dist/helpers/convertDocument.js.map +1 -0
- package/dist/helpers/credits.d.ts +5 -2
- package/dist/helpers/credits.js +5 -1
- package/dist/helpers/credits.js.map +1 -1
- package/dist/helpers/media.js +18 -3
- package/dist/helpers/media.js.map +1 -1
- package/dist/helpers/message.d.ts +1 -1
- package/dist/helpers/message.js +7 -4
- package/dist/helpers/message.js.map +1 -1
- package/dist/helpers/nats/getNatsConfig.d.ts +9 -0
- package/dist/helpers/nats/getNatsConfig.js +65 -0
- package/dist/helpers/nats/getNatsConfig.js.map +1 -0
- package/dist/helpers/nats/isSessionExpiredError.d.ts +3 -0
- package/dist/helpers/nats/isSessionExpiredError.js +36 -0
- package/dist/helpers/nats/isSessionExpiredError.js.map +1 -0
- package/dist/helpers/nats/useNats.d.ts +12 -0
- package/dist/helpers/nats/useNats.js +75 -0
- package/dist/helpers/nats/useNats.js.map +1 -0
- package/dist/helpers/nats/useNatsSession.d.ts +28 -0
- package/dist/helpers/nats/useNatsSession.js +212 -0
- package/dist/helpers/nats/useNatsSession.js.map +1 -0
- package/dist/helpers/positionPopover.d.ts +1 -0
- package/dist/helpers/positionPopover.js +7 -0
- package/dist/helpers/positionPopover.js.map +1 -0
- package/dist/helpers/tts/muteSpeaker.d.ts +13 -0
- package/dist/helpers/tts/muteSpeaker.js +26 -0
- package/dist/helpers/tts/muteSpeaker.js.map +1 -0
- package/dist/helpers/tts/useTTS.js +18 -9
- package/dist/helpers/tts/useTTS.js.map +1 -1
- package/dist/helpers/usePressTooltip.d.ts +13 -0
- package/dist/helpers/usePressTooltip.js +23 -0
- package/dist/helpers/usePressTooltip.js.map +1 -0
- package/dist/helpers/utils.d.ts +21 -0
- package/dist/helpers/utils.js +75 -4
- package/dist/helpers/utils.js.map +1 -1
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/locales/de.json +15 -1
- package/dist/locales/en.json +16 -2
- package/dist/locales/es.json +15 -1
- package/dist/locales/fr.json +15 -1
- package/dist/locales/it.json +16 -2
- package/dist/styles.css +1 -163
- package/dist/types/integration.d.ts +3 -0
- package/dist/types/integration.js +16 -0
- package/dist/types/integration.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/esm/components/AgeVerificationModal/AgeVerificationModal.css +9 -4
- package/esm/components/AgeVerificationModal/AgeVerificationModal.js +8 -3
- package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
- package/esm/components/Auth/Auth.js +3 -1
- package/esm/components/Auth/Auth.js.map +1 -1
- package/esm/components/Avatar/Avatar.js +5 -10
- package/esm/components/Avatar/Avatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +9 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +2 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +12 -4
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/esm/components/Chat/Chat.css +137 -34
- package/esm/components/Chat/Chat.d.ts +3 -0
- package/esm/components/Chat/Chat.js +68 -58
- package/esm/components/Chat/Chat.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.css +150 -32
- package/esm/components/ChatBubble/ChatBubble.d.ts +1 -0
- package/esm/components/ChatBubble/ChatBubble.js +123 -96
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/ChatHistoryDrawer/ChatHistory.css +5 -0
- package/esm/components/ChatHistoryDrawer/ChatHistory.js +27 -10
- package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
- package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.css +6 -1
- package/esm/components/ChatInputs/ChatInputs.css +332 -149
- package/esm/components/ChatInputs/ChatInputs.d.ts +2 -0
- package/esm/components/ChatInputs/ChatInputs.js +5 -6
- package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
- package/esm/components/ChatTextArea/ChatTextArea.css +31 -27
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/esm/components/ContentPreviewModal/ContentPreviewModal.css +6 -22
- package/esm/components/ContentPreviewModal/ContentPreviewModal.js +3 -1
- package/esm/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
- package/esm/components/DateSelector/DateSelector.css +25 -2
- package/esm/components/DateSelector/DateSelector.d.ts +2 -1
- package/esm/components/DateSelector/DateSelector.js +17 -7
- package/esm/components/DateSelector/DateSelector.js.map +1 -1
- package/esm/components/ExpertsDrawer/ExpertsDrawer.js +3 -1
- package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
- package/esm/components/FilePreview/FilePreview.css +42 -21
- package/esm/components/FilePreview/FilePreview.d.ts +2 -1
- package/esm/components/FilePreview/FilePreview.js +31 -10
- package/esm/components/FilePreview/FilePreview.js.map +1 -1
- package/esm/components/Header/ChatConsumptionDropdown.d.ts +3 -1
- package/esm/components/Header/ChatConsumptionDropdown.js +7 -5
- package/esm/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/esm/components/Header/Header.css +210 -39
- package/esm/components/Header/Header.d.ts +1 -0
- package/esm/components/Header/Header.js +136 -52
- package/esm/components/Header/Header.js.map +1 -1
- package/esm/components/IconButton/IconButton.css +144 -0
- package/esm/components/IconButton/IconButton.d.ts +9 -0
- package/esm/components/IconButton/IconButton.js +33 -0
- package/esm/components/IconButton/IconButton.js.map +1 -0
- package/esm/components/KnownFacts/KnownFacts.css +22 -9
- package/esm/components/KnownFacts/KnownFacts.js +18 -7
- package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
- package/esm/components/LoginDrawer/LoginDrawer.css +42 -0
- package/esm/components/LoginDrawer/LoginDrawer.js +3 -1
- package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
- package/esm/components/MediaWidget/MediaItemWidget.js +16 -14
- package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
- package/esm/components/MediaWidget/MediaItemWidget.utils.d.ts +3 -2
- package/esm/components/MediaWidget/MediaItemWidget.utils.js +27 -6
- package/esm/components/MediaWidget/MediaItemWidget.utils.js.map +1 -1
- package/esm/components/MediaWidget/MediaPreviewModal.js +6 -7
- package/esm/components/MediaWidget/MediaPreviewModal.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.css +7 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js +15 -13
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +36 -124
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +251 -170
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +26 -16
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +18 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +211 -63
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +1 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js +2 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/context/ArtifactContext.d.ts +3 -1
- package/esm/components/MemoriArtifactSystem/context/ArtifactContext.js +66 -2
- package/esm/components/MemoriArtifactSystem/context/ArtifactContext.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/types/artifact.types.d.ts +11 -0
- package/esm/components/MemoriArtifactSystem/utils/ArtifactAPI.js +18 -13
- package/esm/components/MemoriArtifactSystem/utils/ArtifactAPI.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/utils/applyEdits.d.ts +8 -0
- package/esm/components/MemoriArtifactSystem/utils/applyEdits.js +112 -0
- package/esm/components/MemoriArtifactSystem/utils/applyEdits.js.map +1 -0
- package/esm/components/MemoriWidget/MemoriWidget.css +65 -5
- package/esm/components/MemoriWidget/MemoriWidget.d.ts +1 -0
- package/esm/components/MemoriWidget/MemoriWidget.js +821 -458
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/MicrophoneButton/MicrophoneButton.css +4 -131
- package/esm/components/MicrophoneButton/MicrophoneButton.js +3 -2
- package/esm/components/MicrophoneButton/MicrophoneButton.js.map +1 -1
- package/esm/components/MobileSessionPanel/MobileSessionPanel.css +29 -7
- package/esm/components/MobileSessionPanel/MobileSessionPanel.d.ts +6 -1
- package/esm/components/MobileSessionPanel/MobileSessionPanel.js +12 -9
- package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
- package/esm/components/PositionPopover/PositionPopover.d.ts +2 -0
- package/esm/components/PositionPopover/PositionPopover.js +20 -12
- package/esm/components/PositionPopover/PositionPopover.js.map +1 -1
- package/esm/components/PoweredBy/PoweredBy.css +4 -3
- package/esm/components/SettingsDrawer/SettingsDrawer.js +4 -2
- package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
- package/esm/components/ShareButton/ShareButton.css +3 -2
- package/esm/components/ShareButton/ShareButton.js +4 -5
- package/esm/components/ShareButton/ShareButton.js.map +1 -1
- package/esm/components/Snippet/Snippet.css +6 -36
- package/esm/components/Snippet/Snippet.js +4 -2
- package/esm/components/Snippet/Snippet.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.css +114 -10
- package/esm/components/StartPanel/StartPanel.js +15 -10
- package/esm/components/StartPanel/StartPanel.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.css +3 -40
- package/esm/components/UploadButton/UploadButton.d.ts +1 -0
- package/esm/components/UploadButton/UploadButton.js +34 -25
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.d.ts +1 -6
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +47 -113
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
- package/esm/components/UploadButton/UploadImages/UploadImages.js +3 -1
- package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
- package/esm/components/WhyThisAnswer/WhyThisAnswer.js +3 -1
- package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
- package/esm/components/layouts/Chat.js +70 -82
- package/esm/components/layouts/Chat.js.map +1 -1
- package/esm/components/layouts/FullPage.js +91 -43
- package/esm/components/layouts/FullPage.js.map +1 -1
- package/esm/components/layouts/HiddenChat.js +13 -238
- package/esm/components/layouts/HiddenChat.js.map +1 -1
- package/esm/components/layouts/Totem.js +10 -1
- package/esm/components/layouts/Totem.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +30 -3
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/website-assistant.css +175 -61
- package/esm/components/layouts/ZoomedFullBody.js +91 -43
- package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
- package/esm/components/layouts/chat.css +232 -85
- package/esm/components/layouts/fullpage.css +253 -93
- package/esm/components/layouts/hidden-chat.css +172 -62
- package/esm/components/layouts/totem.css +151 -50
- package/esm/components/layouts/zoomed-full-body.css +339 -34
- package/esm/context/widgetSurfaceContext.d.ts +3 -0
- package/esm/context/widgetSurfaceContext.js +7 -0
- package/esm/context/widgetSurfaceContext.js.map +1 -0
- package/esm/helpers/constants.d.ts +4 -0
- package/esm/helpers/constants.js +49 -0
- package/esm/helpers/constants.js.map +1 -1
- package/esm/helpers/convertDocument.d.ts +1 -0
- package/esm/helpers/convertDocument.js +20 -0
- package/esm/helpers/convertDocument.js.map +1 -0
- package/esm/helpers/credits.d.ts +5 -2
- package/esm/helpers/credits.js +5 -1
- package/esm/helpers/credits.js.map +1 -1
- package/esm/helpers/media.js +18 -3
- package/esm/helpers/media.js.map +1 -1
- package/esm/helpers/message.d.ts +1 -1
- package/esm/helpers/message.js +5 -2
- package/esm/helpers/message.js.map +1 -1
- package/esm/helpers/nats/getNatsConfig.d.ts +9 -0
- package/esm/helpers/nats/getNatsConfig.js +61 -0
- package/esm/helpers/nats/getNatsConfig.js.map +1 -0
- package/esm/helpers/nats/isSessionExpiredError.d.ts +3 -0
- package/esm/helpers/nats/isSessionExpiredError.js +32 -0
- package/esm/helpers/nats/isSessionExpiredError.js.map +1 -0
- package/esm/helpers/nats/useNats.d.ts +12 -0
- package/esm/helpers/nats/useNats.js +72 -0
- package/esm/helpers/nats/useNats.js.map +1 -0
- package/esm/helpers/nats/useNatsSession.d.ts +28 -0
- package/esm/helpers/nats/useNatsSession.js +208 -0
- package/esm/helpers/nats/useNatsSession.js.map +1 -0
- package/esm/helpers/positionPopover.d.ts +1 -0
- package/esm/helpers/positionPopover.js +4 -0
- package/esm/helpers/positionPopover.js.map +1 -0
- package/esm/helpers/tts/muteSpeaker.d.ts +13 -0
- package/esm/helpers/tts/muteSpeaker.js +21 -0
- package/esm/helpers/tts/muteSpeaker.js.map +1 -0
- package/esm/helpers/tts/useTTS.js +18 -9
- package/esm/helpers/tts/useTTS.js.map +1 -1
- package/esm/helpers/usePressTooltip.d.ts +13 -0
- package/esm/helpers/usePressTooltip.js +20 -0
- package/esm/helpers/usePressTooltip.js.map +1 -0
- package/esm/helpers/utils.d.ts +21 -0
- package/esm/helpers/utils.js +68 -3
- package/esm/helpers/utils.js.map +1 -1
- package/esm/index.js +17 -17
- package/esm/index.js.map +1 -1
- package/esm/locales/de.json +15 -1
- package/esm/locales/en.json +16 -2
- package/esm/locales/es.json +15 -1
- package/esm/locales/fr.json +15 -1
- package/esm/locales/it.json +16 -2
- package/esm/styles.css +1 -163
- package/esm/types/integration.d.ts +3 -0
- package/esm/types/integration.js +11 -0
- package/esm/types/integration.js.map +1 -0
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/esm/version.js.map +1 -1
- package/package.json +13 -6
- package/src/__snapshots__/index.test.tsx.snap +0 -50
- package/src/components/AgeVerificationModal/AgeVerificationModal.css +9 -4
- package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +13 -2
- package/src/components/Auth/Auth.tsx +3 -0
- package/src/components/Avatar/Avatar.stories.tsx +45 -28
- package/src/components/Avatar/Avatar.test.tsx +54 -0
- package/src/components/Avatar/Avatar.tsx +8 -12
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +12 -5
- package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.ts +2 -1
- package/src/components/Avatar/AvatarView/AvatarComponent/constants.test.ts +19 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +19 -4
- package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +164 -0
- package/src/components/BlockedMemoriBadge/__snapshots__/BlockedMemoriBadge.test.tsx.snap +10 -10
- package/src/components/Chat/Chat.css +137 -34
- package/src/components/Chat/Chat.tsx +43 -22
- package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +7429 -7603
- package/src/components/ChatBubble/ChatBubble.css +150 -32
- package/src/components/ChatBubble/ChatBubble.test.tsx +65 -1
- package/src/components/ChatBubble/ChatBubble.tsx +168 -90
- package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +6491 -6387
- package/src/components/ChatHistoryDrawer/ChatHistory.css +5 -0
- package/src/components/ChatHistoryDrawer/ChatHistory.test.tsx +77 -1
- package/src/components/ChatHistoryDrawer/ChatHistory.tsx +59 -27
- package/src/components/ChatHistoryDrawer/ChatResumeDrawer.css +6 -1
- package/src/components/ChatInputs/ChatInputs.css +332 -149
- package/src/components/ChatInputs/ChatInputs.tsx +25 -11
- package/src/components/ChatTextArea/ChatTextArea.css +31 -27
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +8 -4
- package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap +6 -6
- package/src/components/ContentPreviewModal/ContentPreviewModal.css +6 -22
- package/src/components/ContentPreviewModal/ContentPreviewModal.tsx +3 -0
- package/src/components/DateSelector/DateSelector.css +25 -2
- package/src/components/DateSelector/DateSelector.stories.tsx +11 -2
- package/src/components/DateSelector/DateSelector.tsx +28 -9
- package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +3 -0
- package/src/components/FeedbackButtons/__snapshots__/FeedbackButtons.test.tsx.snap +2 -2
- package/src/components/FilePreview/FilePreview.css +42 -21
- package/src/components/FilePreview/FilePreview.stories.tsx +0 -3
- package/src/components/FilePreview/FilePreview.tsx +42 -7
- package/src/components/FilePreview/__snapshots__/FilePreview.test.tsx.snap +14 -0
- package/src/components/Header/ChatConsumptionDropdown.tsx +18 -6
- package/src/components/Header/Header.css +210 -39
- package/src/components/Header/Header.test.tsx +55 -1
- package/src/components/Header/Header.tsx +456 -160
- package/src/components/Header/__snapshots__/Header.test.tsx.snap +194 -135
- package/src/components/IconButton/IconButton.css +144 -0
- package/src/components/IconButton/IconButton.tsx +89 -0
- package/src/components/KnownFacts/KnownFacts.css +22 -9
- package/src/components/KnownFacts/KnownFacts.tsx +18 -3
- package/src/components/LoginDrawer/LoginDrawer.css +42 -0
- package/src/components/LoginDrawer/LoginDrawer.tsx +3 -0
- package/src/components/MediaWidget/MediaItemWidget.tsx +26 -13
- package/src/components/MediaWidget/MediaItemWidget.utils.test.ts +45 -2
- package/src/components/MediaWidget/MediaItemWidget.utils.ts +39 -6
- package/src/components/MediaWidget/MediaPreviewModal.test.tsx +2 -3
- package/src/components/MediaWidget/MediaPreviewModal.tsx +9 -7
- package/src/components/MemoriArtifactSystem/ArtifactDrawer.stories.tsx +218 -2252
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.css +7 -2
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.tsx +19 -33
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/components/CopyButtonWithDropdown.tsx +44 -45
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +36 -124
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +251 -170
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +110 -105
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +18 -2
- package/src/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.tsx +359 -149
- package/src/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +1 -0
- package/src/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.tsx +2 -2
- package/src/components/MemoriArtifactSystem/context/ArtifactContext.tsx +111 -9
- package/src/components/MemoriArtifactSystem/types/artifact.types.ts +20 -1
- package/src/components/MemoriArtifactSystem/utils/ArtifactAPI.test.tsx +1 -0
- package/src/components/MemoriArtifactSystem/utils/ArtifactAPI.tsx +19 -13
- package/src/components/MemoriArtifactSystem/utils/applyEdits.test.ts +85 -0
- package/src/components/MemoriArtifactSystem/utils/applyEdits.ts +173 -0
- package/src/components/MemoriWidget/MemoriWidget.css +65 -5
- package/src/components/MemoriWidget/MemoriWidget.tsx +1294 -764
- package/src/components/MicrophoneButton/MicrophoneButton.css +4 -131
- package/src/components/MicrophoneButton/MicrophoneButton.tsx +5 -5
- package/src/components/MobileSessionPanel/MobileSessionPanel.css +29 -7
- package/src/components/MobileSessionPanel/MobileSessionPanel.test.tsx +44 -0
- package/src/components/MobileSessionPanel/MobileSessionPanel.tsx +60 -38
- package/src/components/PositionPopover/PositionPopover.tsx +32 -20
- package/src/components/PoweredBy/PoweredBy.css +4 -3
- package/src/components/SettingsDrawer/SettingsDrawer.tsx +4 -1
- package/src/components/ShareButton/ShareButton.css +3 -2
- package/src/components/ShareButton/ShareButton.tsx +14 -12
- package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +36 -27
- package/src/components/Snippet/Snippet.css +6 -36
- package/src/components/Snippet/Snippet.tsx +6 -7
- package/src/components/StartPanel/StartPanel.css +114 -10
- package/src/components/StartPanel/StartPanel.stories.tsx +43 -1
- package/src/components/StartPanel/StartPanel.test.tsx +64 -1
- package/src/components/StartPanel/StartPanel.tsx +38 -10
- package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +287 -86
- package/src/components/UploadButton/UploadButton.css +3 -40
- package/src/components/UploadButton/UploadButton.stories.tsx +3 -3
- package/src/components/UploadButton/UploadButton.tsx +50 -44
- package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +59 -143
- package/src/components/UploadButton/UploadImages/UploadImages.tsx +3 -0
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +33 -29
- package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +3 -0
- package/src/components/layouts/Chat.tsx +235 -239
- package/src/components/layouts/FullPage.tsx +160 -65
- package/src/components/layouts/HiddenChat.tsx +20 -413
- package/src/components/layouts/Totem.tsx +20 -3
- package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +72 -16
- package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +60 -44
- package/src/components/layouts/WebsiteAssistant/website-assistant.css +175 -61
- package/src/components/layouts/ZoomedFullBody.tsx +163 -67
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +597 -583
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +1186 -1146
- package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +409 -435
- package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +590 -602
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +585 -565
- package/src/components/layouts/chat.css +232 -85
- package/src/components/layouts/fullpage.css +253 -93
- package/src/components/layouts/hidden-chat.css +172 -62
- package/src/components/layouts/layouts.stories.tsx +135 -15
- package/src/components/layouts/totem.css +151 -50
- package/src/components/layouts/zoomed-full-body.css +339 -34
- package/src/context/widgetSurfaceContext.tsx +14 -0
- package/src/helpers/constants.ts +56 -1
- package/src/helpers/convertDocument.test.ts +67 -0
- package/src/helpers/convertDocument.ts +35 -0
- package/src/helpers/credits.ts +16 -1
- package/src/helpers/media.test.ts +36 -0
- package/src/helpers/media.ts +39 -12
- package/src/helpers/message.test.ts +28 -1
- package/src/helpers/message.ts +19 -4
- package/src/helpers/nats/getNatsConfig.ts +145 -0
- package/src/helpers/nats/isSessionExpiredError.test.ts +38 -0
- package/src/helpers/nats/isSessionExpiredError.ts +51 -0
- package/src/helpers/nats/useNats.ts +124 -0
- package/src/helpers/nats/useNatsSession.ts +394 -0
- package/src/helpers/positionPopover.test.ts +39 -0
- package/src/helpers/positionPopover.ts +16 -0
- package/src/helpers/tts/muteSpeaker.test.ts +81 -0
- package/src/helpers/tts/muteSpeaker.ts +46 -0
- package/src/helpers/tts/useTTS.ts +32 -22
- package/src/helpers/usePressTooltip.ts +29 -0
- package/src/helpers/utils.test.ts +162 -0
- package/src/helpers/utils.ts +108 -3
- package/src/index.stories.tsx +32 -0
- package/src/index.tsx +1 -5
- package/src/locales/de.json +15 -1
- package/src/locales/en.json +16 -2
- package/src/locales/es.json +15 -1
- package/src/locales/fr.json +15 -1
- package/src/locales/it.json +16 -2
- package/src/styles.css +113 -15
- package/src/types/integration.test.ts +32 -0
- package/src/types/integration.ts +31 -0
- package/src/version.ts +1 -1
- package/dist/components/PositionDrawer/PositionDrawer.d.ts +0 -12
- package/dist/components/PositionDrawer/PositionDrawer.js +0 -17
- package/dist/components/PositionDrawer/PositionDrawer.js.map +0 -1
- package/dist/components/icons/AI.d.ts +0 -6
- package/dist/components/icons/AI.js +0 -6
- package/dist/components/icons/AI.js.map +0 -1
- package/dist/components/icons/Alert.d.ts +0 -6
- package/dist/components/icons/Alert.js +0 -6
- package/dist/components/icons/Alert.js.map +0 -1
- package/dist/components/icons/ArrowUp.d.ts +0 -6
- package/dist/components/icons/ArrowUp.js +0 -6
- package/dist/components/icons/ArrowUp.js.map +0 -1
- package/dist/components/icons/Bug.d.ts +0 -6
- package/dist/components/icons/Bug.js +0 -6
- package/dist/components/icons/Bug.js.map +0 -1
- package/dist/components/icons/Chat.d.ts +0 -6
- package/dist/components/icons/Chat.js +0 -6
- package/dist/components/icons/Chat.js.map +0 -1
- package/dist/components/icons/ChevronDown.d.ts +0 -6
- package/dist/components/icons/ChevronDown.js +0 -6
- package/dist/components/icons/ChevronDown.js.map +0 -1
- package/dist/components/icons/ChevronLeft.d.ts +0 -6
- package/dist/components/icons/ChevronLeft.js +0 -6
- package/dist/components/icons/ChevronLeft.js.map +0 -1
- package/dist/components/icons/ChevronRight.d.ts +0 -6
- package/dist/components/icons/ChevronRight.js +0 -6
- package/dist/components/icons/ChevronRight.js.map +0 -1
- package/dist/components/icons/ChevronUp.d.ts +0 -6
- package/dist/components/icons/ChevronUp.js +0 -6
- package/dist/components/icons/ChevronUp.js.map +0 -1
- package/dist/components/icons/Clear.d.ts +0 -6
- package/dist/components/icons/Clear.js +0 -6
- package/dist/components/icons/Clear.js.map +0 -1
- package/dist/components/icons/Close.d.ts +0 -7
- package/dist/components/icons/Close.js +0 -6
- package/dist/components/icons/Close.js.map +0 -1
- package/dist/components/icons/Code.d.ts +0 -6
- package/dist/components/icons/Code.js +0 -6
- package/dist/components/icons/Code.js.map +0 -1
- package/dist/components/icons/Copy.d.ts +0 -6
- package/dist/components/icons/Copy.js +0 -6
- package/dist/components/icons/Copy.js.map +0 -1
- package/dist/components/icons/DeepThought.d.ts +0 -6
- package/dist/components/icons/DeepThought.js +0 -6
- package/dist/components/icons/DeepThought.js.map +0 -1
- package/dist/components/icons/Delete.d.ts +0 -6
- package/dist/components/icons/Delete.js +0 -6
- package/dist/components/icons/Delete.js.map +0 -1
- package/dist/components/icons/Document.d.ts +0 -5
- package/dist/components/icons/Document.js +0 -10
- package/dist/components/icons/Document.js.map +0 -1
- package/dist/components/icons/Download.d.ts +0 -6
- package/dist/components/icons/Download.js +0 -6
- package/dist/components/icons/Download.js.map +0 -1
- package/dist/components/icons/Edit.d.ts +0 -6
- package/dist/components/icons/Edit.js +0 -6
- package/dist/components/icons/Edit.js.map +0 -1
- package/dist/components/icons/Expand.d.ts +0 -6
- package/dist/components/icons/Expand.js +0 -6
- package/dist/components/icons/Expand.js.map +0 -1
- package/dist/components/icons/Eye.d.ts +0 -6
- package/dist/components/icons/Eye.js +0 -6
- package/dist/components/icons/Eye.js.map +0 -1
- package/dist/components/icons/EyeInvisible.d.ts +0 -6
- package/dist/components/icons/EyeInvisible.js +0 -6
- package/dist/components/icons/EyeInvisible.js.map +0 -1
- package/dist/components/icons/Facebook.d.ts +0 -6
- package/dist/components/icons/Facebook.js +0 -6
- package/dist/components/icons/Facebook.js.map +0 -1
- package/dist/components/icons/Feedback.d.ts +0 -6
- package/dist/components/icons/Feedback.js +0 -6
- package/dist/components/icons/Feedback.js.map +0 -1
- package/dist/components/icons/File.d.ts +0 -6
- package/dist/components/icons/File.js +0 -6
- package/dist/components/icons/File.js.map +0 -1
- package/dist/components/icons/FileExcel.d.ts +0 -6
- package/dist/components/icons/FileExcel.js +0 -6
- package/dist/components/icons/FileExcel.js.map +0 -1
- package/dist/components/icons/FilePdf.d.ts +0 -6
- package/dist/components/icons/FilePdf.js +0 -6
- package/dist/components/icons/FilePdf.js.map +0 -1
- package/dist/components/icons/FileWord.d.ts +0 -6
- package/dist/components/icons/FileWord.js +0 -6
- package/dist/components/icons/FileWord.js.map +0 -1
- package/dist/components/icons/Fullscreen.d.ts +0 -6
- package/dist/components/icons/Fullscreen.js +0 -6
- package/dist/components/icons/Fullscreen.js.map +0 -1
- package/dist/components/icons/FullscreenExit.d.ts +0 -6
- package/dist/components/icons/FullscreenExit.js +0 -6
- package/dist/components/icons/FullscreenExit.js.map +0 -1
- package/dist/components/icons/Group.d.ts +0 -6
- package/dist/components/icons/Group.js +0 -6
- package/dist/components/icons/Group.js.map +0 -1
- package/dist/components/icons/History.d.ts +0 -7
- package/dist/components/icons/History.js +0 -6
- package/dist/components/icons/History.js.map +0 -1
- package/dist/components/icons/Image.d.ts +0 -4
- package/dist/components/icons/Image.js +0 -9
- package/dist/components/icons/Image.js.map +0 -1
- package/dist/components/icons/Info.d.ts +0 -6
- package/dist/components/icons/Info.js +0 -6
- package/dist/components/icons/Info.js.map +0 -1
- package/dist/components/icons/Link.d.ts +0 -6
- package/dist/components/icons/Link.js +0 -6
- package/dist/components/icons/Link.js.map +0 -1
- package/dist/components/icons/Linkedin.d.ts +0 -6
- package/dist/components/icons/Linkedin.js +0 -6
- package/dist/components/icons/Linkedin.js.map +0 -1
- package/dist/components/icons/Loading.d.ts +0 -7
- package/dist/components/icons/Loading.js +0 -10
- package/dist/components/icons/Loading.js.map +0 -1
- package/dist/components/icons/Logout.d.ts +0 -6
- package/dist/components/icons/Logout.js +0 -6
- package/dist/components/icons/Logout.js.map +0 -1
- package/dist/components/icons/Mail.d.ts +0 -6
- package/dist/components/icons/Mail.js +0 -6
- package/dist/components/icons/Mail.js.map +0 -1
- package/dist/components/icons/MapMarker.d.ts +0 -6
- package/dist/components/icons/MapMarker.js +0 -6
- package/dist/components/icons/MapMarker.js.map +0 -1
- package/dist/components/icons/MenuHorizontal.d.ts +0 -7
- package/dist/components/icons/MenuHorizontal.js +0 -6
- package/dist/components/icons/MenuHorizontal.js.map +0 -1
- package/dist/components/icons/MenuVertical.d.ts +0 -7
- package/dist/components/icons/MenuVertical.js +0 -6
- package/dist/components/icons/MenuVertical.js.map +0 -1
- package/dist/components/icons/Message.d.ts +0 -6
- package/dist/components/icons/Message.js +0 -6
- package/dist/components/icons/Message.js.map +0 -1
- package/dist/components/icons/Microphone.d.ts +0 -6
- package/dist/components/icons/Microphone.js +0 -6
- package/dist/components/icons/Microphone.js.map +0 -1
- package/dist/components/icons/Minus.d.ts +0 -6
- package/dist/components/icons/Minus.js +0 -6
- package/dist/components/icons/Minus.js.map +0 -1
- package/dist/components/icons/MinusCircle.d.ts +0 -6
- package/dist/components/icons/MinusCircle.js +0 -6
- package/dist/components/icons/MinusCircle.js.map +0 -1
- package/dist/components/icons/PaperClip.d.ts +0 -6
- package/dist/components/icons/PaperClip.js +0 -6
- package/dist/components/icons/PaperClip.js.map +0 -1
- package/dist/components/icons/Picture.d.ts +0 -6
- package/dist/components/icons/Picture.js +0 -6
- package/dist/components/icons/Picture.js.map +0 -1
- package/dist/components/icons/Plus.d.ts +0 -6
- package/dist/components/icons/Plus.js +0 -6
- package/dist/components/icons/Plus.js.map +0 -1
- package/dist/components/icons/Preview.d.ts +0 -4
- package/dist/components/icons/Preview.js +0 -9
- package/dist/components/icons/Preview.js.map +0 -1
- package/dist/components/icons/Print.d.ts +0 -6
- package/dist/components/icons/Print.js +0 -6
- package/dist/components/icons/Print.js.map +0 -1
- package/dist/components/icons/QuestionHelp.d.ts +0 -6
- package/dist/components/icons/QuestionHelp.js +0 -6
- package/dist/components/icons/QuestionHelp.js.map +0 -1
- package/dist/components/icons/Refresh.d.ts +0 -6
- package/dist/components/icons/Refresh.js +0 -6
- package/dist/components/icons/Refresh.js.map +0 -1
- package/dist/components/icons/SelectIcon.d.ts +0 -6
- package/dist/components/icons/SelectIcon.js +0 -6
- package/dist/components/icons/SelectIcon.js.map +0 -1
- package/dist/components/icons/Send.d.ts +0 -6
- package/dist/components/icons/Send.js +0 -6
- package/dist/components/icons/Send.js.map +0 -1
- package/dist/components/icons/Setting.d.ts +0 -6
- package/dist/components/icons/Setting.js +0 -6
- package/dist/components/icons/Setting.js.map +0 -1
- package/dist/components/icons/Share.d.ts +0 -6
- package/dist/components/icons/Share.js +0 -6
- package/dist/components/icons/Share.js.map +0 -1
- package/dist/components/icons/Sound.d.ts +0 -6
- package/dist/components/icons/Sound.js +0 -6
- package/dist/components/icons/Sound.js.map +0 -1
- package/dist/components/icons/SoundDeactivated.d.ts +0 -6
- package/dist/components/icons/SoundDeactivated.js +0 -6
- package/dist/components/icons/SoundDeactivated.js.map +0 -1
- package/dist/components/icons/Telegram.d.ts +0 -6
- package/dist/components/icons/Telegram.js +0 -6
- package/dist/components/icons/Telegram.js.map +0 -1
- package/dist/components/icons/ThumbDown.d.ts +0 -6
- package/dist/components/icons/ThumbDown.js +0 -6
- package/dist/components/icons/ThumbDown.js.map +0 -1
- package/dist/components/icons/ThumbUp.d.ts +0 -6
- package/dist/components/icons/ThumbUp.js +0 -6
- package/dist/components/icons/ThumbUp.js.map +0 -1
- package/dist/components/icons/Translation.d.ts +0 -6
- package/dist/components/icons/Translation.js +0 -6
- package/dist/components/icons/Translation.js.map +0 -1
- package/dist/components/icons/Twitter.d.ts +0 -6
- package/dist/components/icons/Twitter.js +0 -6
- package/dist/components/icons/Twitter.js.map +0 -1
- package/dist/components/icons/Upload.d.ts +0 -4
- package/dist/components/icons/Upload.js +0 -9
- package/dist/components/icons/Upload.js.map +0 -1
- package/dist/components/icons/User.d.ts +0 -6
- package/dist/components/icons/User.js +0 -6
- package/dist/components/icons/User.js.map +0 -1
- package/dist/components/icons/Warning.d.ts +0 -6
- package/dist/components/icons/Warning.js +0 -6
- package/dist/components/icons/Warning.js.map +0 -1
- package/dist/components/icons/WhatsApp.d.ts +0 -6
- package/dist/components/icons/WhatsApp.js +0 -6
- package/dist/components/icons/WhatsApp.js.map +0 -1
- package/dist/components/icons/loading.css +0 -14
- package/dist/components/layouts/WebsiteAssistant.d.ts +0 -4
- package/dist/components/layouts/WebsiteAssistant.js +0 -38
- package/dist/components/layouts/WebsiteAssistant.js.map +0 -1
- package/dist/components/layouts/website-assistant.css +0 -676
- package/dist/components/ui/Alert.css +0 -93
- package/dist/components/ui/Alert.d.ts +0 -18
- package/dist/components/ui/Alert.js +0 -42
- package/dist/components/ui/Alert.js.map +0 -1
- package/dist/components/ui/Button.css +0 -167
- package/dist/components/ui/Button.d.ts +0 -27
- package/dist/components/ui/Button.js +0 -23
- package/dist/components/ui/Button.js.map +0 -1
- package/dist/components/ui/Card.css +0 -65
- package/dist/components/ui/Card.d.ts +0 -13
- package/dist/components/ui/Card.js +0 -14
- package/dist/components/ui/Card.js.map +0 -1
- package/dist/components/ui/Checkbox.css +0 -116
- package/dist/components/ui/Checkbox.d.ts +0 -11
- package/dist/components/ui/Checkbox.js +0 -20
- package/dist/components/ui/Checkbox.js.map +0 -1
- package/dist/components/ui/ConfirmDialog.css +0 -42
- package/dist/components/ui/ConfirmDialog.d.ts +0 -11
- package/dist/components/ui/ConfirmDialog.js +0 -12
- package/dist/components/ui/ConfirmDialog.js.map +0 -1
- package/dist/components/ui/Details.css +0 -66
- package/dist/components/ui/Drawer.css +0 -270
- package/dist/components/ui/Drawer.d.ts +0 -46
- package/dist/components/ui/Drawer.js +0 -60
- package/dist/components/ui/Drawer.js.map +0 -1
- package/dist/components/ui/Dropdown.css +0 -173
- package/dist/components/ui/Dropdown.d.ts +0 -11
- package/dist/components/ui/Dropdown.js +0 -33
- package/dist/components/ui/Dropdown.js.map +0 -1
- package/dist/components/ui/Expandable.css +0 -15
- package/dist/components/ui/Expandable.d.ts +0 -15
- package/dist/components/ui/Expandable.js +0 -59
- package/dist/components/ui/Expandable.js.map +0 -1
- package/dist/components/ui/Modal.css +0 -98
- package/dist/components/ui/Modal.d.ts +0 -16
- package/dist/components/ui/Modal.js +0 -24
- package/dist/components/ui/Modal.js.map +0 -1
- package/dist/components/ui/Select.css +0 -138
- package/dist/components/ui/Select.d.ts +0 -17
- package/dist/components/ui/Select.js +0 -17
- package/dist/components/ui/Select.js.map +0 -1
- package/dist/components/ui/Slider.css +0 -192
- package/dist/components/ui/Slider.d.ts +0 -12
- package/dist/components/ui/Slider.js +0 -78
- package/dist/components/ui/Slider.js.map +0 -1
- package/dist/components/ui/Spin.css +0 -31
- package/dist/components/ui/Spin.d.ts +0 -9
- package/dist/components/ui/Spin.js +0 -12
- package/dist/components/ui/Spin.js.map +0 -1
- package/dist/components/ui/Table.css +0 -132
- package/dist/components/ui/Tooltip.css +0 -171
- package/dist/components/ui/Tooltip.d.ts +0 -11
- package/dist/components/ui/Tooltip.js +0 -90
- package/dist/components/ui/Tooltip.js.map +0 -1
- package/esm/components/PositionDrawer/PositionDrawer.d.ts +0 -12
- package/esm/components/PositionDrawer/PositionDrawer.js +0 -14
- package/esm/components/PositionDrawer/PositionDrawer.js.map +0 -1
- package/esm/components/icons/AI.d.ts +0 -6
- package/esm/components/icons/AI.js +0 -4
- package/esm/components/icons/AI.js.map +0 -1
- package/esm/components/icons/Alert.d.ts +0 -6
- package/esm/components/icons/Alert.js +0 -4
- package/esm/components/icons/Alert.js.map +0 -1
- package/esm/components/icons/ArrowUp.d.ts +0 -6
- package/esm/components/icons/ArrowUp.js +0 -4
- package/esm/components/icons/ArrowUp.js.map +0 -1
- package/esm/components/icons/Bug.d.ts +0 -6
- package/esm/components/icons/Bug.js +0 -4
- package/esm/components/icons/Bug.js.map +0 -1
- package/esm/components/icons/Chat.d.ts +0 -6
- package/esm/components/icons/Chat.js +0 -4
- package/esm/components/icons/Chat.js.map +0 -1
- package/esm/components/icons/ChevronDown.d.ts +0 -6
- package/esm/components/icons/ChevronDown.js +0 -4
- package/esm/components/icons/ChevronDown.js.map +0 -1
- package/esm/components/icons/ChevronLeft.d.ts +0 -6
- package/esm/components/icons/ChevronLeft.js +0 -4
- package/esm/components/icons/ChevronLeft.js.map +0 -1
- package/esm/components/icons/ChevronRight.d.ts +0 -6
- package/esm/components/icons/ChevronRight.js +0 -4
- package/esm/components/icons/ChevronRight.js.map +0 -1
- package/esm/components/icons/ChevronUp.d.ts +0 -6
- package/esm/components/icons/ChevronUp.js +0 -4
- package/esm/components/icons/ChevronUp.js.map +0 -1
- package/esm/components/icons/Clear.d.ts +0 -6
- package/esm/components/icons/Clear.js +0 -4
- package/esm/components/icons/Clear.js.map +0 -1
- package/esm/components/icons/Close.d.ts +0 -7
- package/esm/components/icons/Close.js +0 -4
- package/esm/components/icons/Close.js.map +0 -1
- package/esm/components/icons/Code.d.ts +0 -6
- package/esm/components/icons/Code.js +0 -4
- package/esm/components/icons/Code.js.map +0 -1
- package/esm/components/icons/Copy.d.ts +0 -6
- package/esm/components/icons/Copy.js +0 -4
- package/esm/components/icons/Copy.js.map +0 -1
- package/esm/components/icons/DeepThought.d.ts +0 -6
- package/esm/components/icons/DeepThought.js +0 -4
- package/esm/components/icons/DeepThought.js.map +0 -1
- package/esm/components/icons/Delete.d.ts +0 -6
- package/esm/components/icons/Delete.js +0 -4
- package/esm/components/icons/Delete.js.map +0 -1
- package/esm/components/icons/Document.d.ts +0 -5
- package/esm/components/icons/Document.js +0 -6
- package/esm/components/icons/Document.js.map +0 -1
- package/esm/components/icons/Download.d.ts +0 -6
- package/esm/components/icons/Download.js +0 -4
- package/esm/components/icons/Download.js.map +0 -1
- package/esm/components/icons/Edit.d.ts +0 -6
- package/esm/components/icons/Edit.js +0 -4
- package/esm/components/icons/Edit.js.map +0 -1
- package/esm/components/icons/Expand.d.ts +0 -6
- package/esm/components/icons/Expand.js +0 -4
- package/esm/components/icons/Expand.js.map +0 -1
- package/esm/components/icons/Eye.d.ts +0 -6
- package/esm/components/icons/Eye.js +0 -4
- package/esm/components/icons/Eye.js.map +0 -1
- package/esm/components/icons/EyeInvisible.d.ts +0 -6
- package/esm/components/icons/EyeInvisible.js +0 -4
- package/esm/components/icons/EyeInvisible.js.map +0 -1
- package/esm/components/icons/Facebook.d.ts +0 -6
- package/esm/components/icons/Facebook.js +0 -4
- package/esm/components/icons/Facebook.js.map +0 -1
- package/esm/components/icons/Feedback.d.ts +0 -6
- package/esm/components/icons/Feedback.js +0 -4
- package/esm/components/icons/Feedback.js.map +0 -1
- package/esm/components/icons/File.d.ts +0 -6
- package/esm/components/icons/File.js +0 -4
- package/esm/components/icons/File.js.map +0 -1
- package/esm/components/icons/FileExcel.d.ts +0 -6
- package/esm/components/icons/FileExcel.js +0 -4
- package/esm/components/icons/FileExcel.js.map +0 -1
- package/esm/components/icons/FilePdf.d.ts +0 -6
- package/esm/components/icons/FilePdf.js +0 -4
- package/esm/components/icons/FilePdf.js.map +0 -1
- package/esm/components/icons/FileWord.d.ts +0 -6
- package/esm/components/icons/FileWord.js +0 -4
- package/esm/components/icons/FileWord.js.map +0 -1
- package/esm/components/icons/Fullscreen.d.ts +0 -6
- package/esm/components/icons/Fullscreen.js +0 -4
- package/esm/components/icons/Fullscreen.js.map +0 -1
- package/esm/components/icons/FullscreenExit.d.ts +0 -6
- package/esm/components/icons/FullscreenExit.js +0 -4
- package/esm/components/icons/FullscreenExit.js.map +0 -1
- package/esm/components/icons/Group.d.ts +0 -6
- package/esm/components/icons/Group.js +0 -4
- package/esm/components/icons/Group.js.map +0 -1
- package/esm/components/icons/History.d.ts +0 -7
- package/esm/components/icons/History.js +0 -4
- package/esm/components/icons/History.js.map +0 -1
- package/esm/components/icons/Image.d.ts +0 -4
- package/esm/components/icons/Image.js +0 -5
- package/esm/components/icons/Image.js.map +0 -1
- package/esm/components/icons/Info.d.ts +0 -6
- package/esm/components/icons/Info.js +0 -4
- package/esm/components/icons/Info.js.map +0 -1
- package/esm/components/icons/Link.d.ts +0 -6
- package/esm/components/icons/Link.js +0 -4
- package/esm/components/icons/Link.js.map +0 -1
- package/esm/components/icons/Linkedin.d.ts +0 -6
- package/esm/components/icons/Linkedin.js +0 -4
- package/esm/components/icons/Linkedin.js.map +0 -1
- package/esm/components/icons/Loading.d.ts +0 -7
- package/esm/components/icons/Loading.js +0 -7
- package/esm/components/icons/Loading.js.map +0 -1
- package/esm/components/icons/Logout.d.ts +0 -6
- package/esm/components/icons/Logout.js +0 -4
- package/esm/components/icons/Logout.js.map +0 -1
- package/esm/components/icons/Mail.d.ts +0 -6
- package/esm/components/icons/Mail.js +0 -4
- package/esm/components/icons/Mail.js.map +0 -1
- package/esm/components/icons/MapMarker.d.ts +0 -6
- package/esm/components/icons/MapMarker.js +0 -4
- package/esm/components/icons/MapMarker.js.map +0 -1
- package/esm/components/icons/MenuHorizontal.d.ts +0 -7
- package/esm/components/icons/MenuHorizontal.js +0 -4
- package/esm/components/icons/MenuHorizontal.js.map +0 -1
- package/esm/components/icons/MenuVertical.d.ts +0 -7
- package/esm/components/icons/MenuVertical.js +0 -4
- package/esm/components/icons/MenuVertical.js.map +0 -1
- package/esm/components/icons/Message.d.ts +0 -6
- package/esm/components/icons/Message.js +0 -4
- package/esm/components/icons/Message.js.map +0 -1
- package/esm/components/icons/Microphone.d.ts +0 -6
- package/esm/components/icons/Microphone.js +0 -4
- package/esm/components/icons/Microphone.js.map +0 -1
- package/esm/components/icons/Minus.d.ts +0 -6
- package/esm/components/icons/Minus.js +0 -4
- package/esm/components/icons/Minus.js.map +0 -1
- package/esm/components/icons/MinusCircle.d.ts +0 -6
- package/esm/components/icons/MinusCircle.js +0 -4
- package/esm/components/icons/MinusCircle.js.map +0 -1
- package/esm/components/icons/PaperClip.d.ts +0 -6
- package/esm/components/icons/PaperClip.js +0 -4
- package/esm/components/icons/PaperClip.js.map +0 -1
- package/esm/components/icons/Picture.d.ts +0 -6
- package/esm/components/icons/Picture.js +0 -4
- package/esm/components/icons/Picture.js.map +0 -1
- package/esm/components/icons/Plus.d.ts +0 -6
- package/esm/components/icons/Plus.js +0 -4
- package/esm/components/icons/Plus.js.map +0 -1
- package/esm/components/icons/Preview.d.ts +0 -4
- package/esm/components/icons/Preview.js +0 -5
- package/esm/components/icons/Preview.js.map +0 -1
- package/esm/components/icons/Print.d.ts +0 -6
- package/esm/components/icons/Print.js +0 -4
- package/esm/components/icons/Print.js.map +0 -1
- package/esm/components/icons/QuestionHelp.d.ts +0 -6
- package/esm/components/icons/QuestionHelp.js +0 -4
- package/esm/components/icons/QuestionHelp.js.map +0 -1
- package/esm/components/icons/Refresh.d.ts +0 -6
- package/esm/components/icons/Refresh.js +0 -4
- package/esm/components/icons/Refresh.js.map +0 -1
- package/esm/components/icons/SelectIcon.d.ts +0 -6
- package/esm/components/icons/SelectIcon.js +0 -4
- package/esm/components/icons/SelectIcon.js.map +0 -1
- package/esm/components/icons/Send.d.ts +0 -6
- package/esm/components/icons/Send.js +0 -4
- package/esm/components/icons/Send.js.map +0 -1
- package/esm/components/icons/Setting.d.ts +0 -6
- package/esm/components/icons/Setting.js +0 -4
- package/esm/components/icons/Setting.js.map +0 -1
- package/esm/components/icons/Share.d.ts +0 -6
- package/esm/components/icons/Share.js +0 -4
- package/esm/components/icons/Share.js.map +0 -1
- package/esm/components/icons/Sound.d.ts +0 -6
- package/esm/components/icons/Sound.js +0 -4
- package/esm/components/icons/Sound.js.map +0 -1
- package/esm/components/icons/SoundDeactivated.d.ts +0 -6
- package/esm/components/icons/SoundDeactivated.js +0 -4
- package/esm/components/icons/SoundDeactivated.js.map +0 -1
- package/esm/components/icons/Telegram.d.ts +0 -6
- package/esm/components/icons/Telegram.js +0 -4
- package/esm/components/icons/Telegram.js.map +0 -1
- package/esm/components/icons/ThumbDown.d.ts +0 -6
- package/esm/components/icons/ThumbDown.js +0 -4
- package/esm/components/icons/ThumbDown.js.map +0 -1
- package/esm/components/icons/ThumbUp.d.ts +0 -6
- package/esm/components/icons/ThumbUp.js +0 -4
- package/esm/components/icons/ThumbUp.js.map +0 -1
- package/esm/components/icons/Translation.d.ts +0 -6
- package/esm/components/icons/Translation.js +0 -4
- package/esm/components/icons/Translation.js.map +0 -1
- package/esm/components/icons/Twitter.d.ts +0 -6
- package/esm/components/icons/Twitter.js +0 -4
- package/esm/components/icons/Twitter.js.map +0 -1
- package/esm/components/icons/Upload.d.ts +0 -4
- package/esm/components/icons/Upload.js +0 -5
- package/esm/components/icons/Upload.js.map +0 -1
- package/esm/components/icons/User.d.ts +0 -6
- package/esm/components/icons/User.js +0 -4
- package/esm/components/icons/User.js.map +0 -1
- package/esm/components/icons/Warning.d.ts +0 -6
- package/esm/components/icons/Warning.js +0 -4
- package/esm/components/icons/Warning.js.map +0 -1
- package/esm/components/icons/WhatsApp.d.ts +0 -6
- package/esm/components/icons/WhatsApp.js +0 -4
- package/esm/components/icons/WhatsApp.js.map +0 -1
- package/esm/components/icons/loading.css +0 -14
- package/esm/components/layouts/WebsiteAssistant.d.ts +0 -4
- package/esm/components/layouts/WebsiteAssistant.js +0 -35
- package/esm/components/layouts/WebsiteAssistant.js.map +0 -1
- package/esm/components/layouts/website-assistant.css +0 -676
- package/esm/components/ui/Alert.css +0 -93
- package/esm/components/ui/Alert.d.ts +0 -18
- package/esm/components/ui/Alert.js +0 -39
- package/esm/components/ui/Alert.js.map +0 -1
- package/esm/components/ui/Button.css +0 -167
- package/esm/components/ui/Button.d.ts +0 -27
- package/esm/components/ui/Button.js +0 -20
- package/esm/components/ui/Button.js.map +0 -1
- package/esm/components/ui/Card.css +0 -65
- package/esm/components/ui/Card.d.ts +0 -13
- package/esm/components/ui/Card.js +0 -11
- package/esm/components/ui/Card.js.map +0 -1
- package/esm/components/ui/Checkbox.css +0 -116
- package/esm/components/ui/Checkbox.d.ts +0 -11
- package/esm/components/ui/Checkbox.js +0 -17
- package/esm/components/ui/Checkbox.js.map +0 -1
- package/esm/components/ui/ConfirmDialog.css +0 -42
- package/esm/components/ui/ConfirmDialog.d.ts +0 -11
- package/esm/components/ui/ConfirmDialog.js +0 -9
- package/esm/components/ui/ConfirmDialog.js.map +0 -1
- package/esm/components/ui/Details.css +0 -66
- package/esm/components/ui/Drawer.css +0 -270
- package/esm/components/ui/Drawer.d.ts +0 -46
- package/esm/components/ui/Drawer.js +0 -57
- package/esm/components/ui/Drawer.js.map +0 -1
- package/esm/components/ui/Dropdown.css +0 -173
- package/esm/components/ui/Dropdown.d.ts +0 -11
- package/esm/components/ui/Dropdown.js +0 -30
- package/esm/components/ui/Dropdown.js.map +0 -1
- package/esm/components/ui/Expandable.css +0 -15
- package/esm/components/ui/Expandable.d.ts +0 -15
- package/esm/components/ui/Expandable.js +0 -56
- package/esm/components/ui/Expandable.js.map +0 -1
- package/esm/components/ui/Modal.css +0 -98
- package/esm/components/ui/Modal.d.ts +0 -16
- package/esm/components/ui/Modal.js +0 -21
- package/esm/components/ui/Modal.js.map +0 -1
- package/esm/components/ui/Select.css +0 -138
- package/esm/components/ui/Select.d.ts +0 -17
- package/esm/components/ui/Select.js +0 -14
- package/esm/components/ui/Select.js.map +0 -1
- package/esm/components/ui/Slider.css +0 -192
- package/esm/components/ui/Slider.d.ts +0 -12
- package/esm/components/ui/Slider.js +0 -75
- package/esm/components/ui/Slider.js.map +0 -1
- package/esm/components/ui/Spin.css +0 -31
- package/esm/components/ui/Spin.d.ts +0 -9
- package/esm/components/ui/Spin.js +0 -9
- package/esm/components/ui/Spin.js.map +0 -1
- package/esm/components/ui/Table.css +0 -132
- package/esm/components/ui/Tooltip.css +0 -171
- package/esm/components/ui/Tooltip.d.ts +0 -11
- package/esm/components/ui/Tooltip.js +0 -87
- package/esm/components/ui/Tooltip.js.map +0 -1
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
PiiDetectionConfig,
|
|
25
25
|
} from '../../types/layout';
|
|
26
26
|
import { checkPii } from '../../helpers/piiDetection'; // PII check when integrationConfig.layout has piiDetection.enabled
|
|
27
|
+
import { shouldRestartSessionOnPositionPopoverClose } from '../../helpers/positionPopover';
|
|
27
28
|
|
|
28
29
|
// Libraries
|
|
29
30
|
import React, {
|
|
@@ -39,7 +40,13 @@ import memoriApiClient from '@memori.ai/memori-api-client';
|
|
|
39
40
|
import { IAudioContext } from 'standardized-audio-context';
|
|
40
41
|
import cx from 'classnames';
|
|
41
42
|
import { DateTime } from 'luxon';
|
|
42
|
-
import {
|
|
43
|
+
import {
|
|
44
|
+
useAlertManager,
|
|
45
|
+
createAlertOptions,
|
|
46
|
+
MemoriUIProvider,
|
|
47
|
+
AlertViewport,
|
|
48
|
+
} from '@memori.ai/ui';
|
|
49
|
+
import { WidgetSurfaceProvider } from '../../context/widgetSurfaceContext';
|
|
43
50
|
|
|
44
51
|
// Components
|
|
45
52
|
import MemoriAuth from '../Auth/Auth';
|
|
@@ -77,6 +84,10 @@ import {
|
|
|
77
84
|
installMathJax,
|
|
78
85
|
} from '../../helpers/utils';
|
|
79
86
|
import { getTTSVoice } from '../../helpers/tts/ttsVoiceUtility';
|
|
87
|
+
import {
|
|
88
|
+
getMuteSpeakerFallback,
|
|
89
|
+
shouldPlayTtsAudio,
|
|
90
|
+
} from '../../helpers/tts/muteSpeaker';
|
|
80
91
|
import {
|
|
81
92
|
allowedMediaTypes,
|
|
82
93
|
anonTag,
|
|
@@ -88,6 +99,16 @@ import { sanitizeText } from '../../helpers/sanitizer';
|
|
|
88
99
|
import { TTSConfig, useTTS } from '../../helpers/tts/useTTS';
|
|
89
100
|
import ChatHistoryDrawer from '../ChatHistoryDrawer/ChatHistory';
|
|
90
101
|
import { STTConfig, useSTT } from '../../helpers/stt/useSTT';
|
|
102
|
+
import { useNats } from '../../helpers/nats/useNats';
|
|
103
|
+
import {
|
|
104
|
+
NatsProgressEvent,
|
|
105
|
+
NatsDialogResponseEvent,
|
|
106
|
+
NatsErrorEvent,
|
|
107
|
+
} from '../../helpers/nats/useNatsSession';
|
|
108
|
+
import {
|
|
109
|
+
isSessionExpiredNatsError,
|
|
110
|
+
isSessionExpiredNatsResponse,
|
|
111
|
+
} from '../../helpers/nats/isSessionExpiredError';
|
|
91
112
|
|
|
92
113
|
// Widget utilities and helpers
|
|
93
114
|
const getMemoriState = (integrationId?: string): object | null => {
|
|
@@ -118,7 +139,21 @@ const getMemoriState = (integrationId?: string): object | null => {
|
|
|
118
139
|
};
|
|
119
140
|
};
|
|
120
141
|
|
|
121
|
-
/**
|
|
142
|
+
/** Unified login token resolution: React state > ref > call-site override > props. */
|
|
143
|
+
const resolveLoginTokenValue = (
|
|
144
|
+
loginToken: string | undefined,
|
|
145
|
+
userTokenRef: string | undefined,
|
|
146
|
+
callAdditionalInfoLoginToken: string | undefined,
|
|
147
|
+
additionalInfoLoginToken: string | undefined,
|
|
148
|
+
authTokenProp: string | undefined
|
|
149
|
+
): string | undefined =>
|
|
150
|
+
loginToken ??
|
|
151
|
+
userTokenRef ??
|
|
152
|
+
callAdditionalInfoLoginToken ??
|
|
153
|
+
additionalInfoLoginToken ??
|
|
154
|
+
authTokenProp;
|
|
155
|
+
|
|
156
|
+
/** Place spec with all nulls for postEnterTextAsync when position is not set or user chose "I don't want to provide my position". */
|
|
122
157
|
const NULL_PLACE_SPEC = {
|
|
123
158
|
placeName: null,
|
|
124
159
|
latitude: null,
|
|
@@ -126,6 +161,18 @@ const NULL_PLACE_SPEC = {
|
|
|
126
161
|
uncertaintyKm: null,
|
|
127
162
|
} as const;
|
|
128
163
|
|
|
164
|
+
const logWidgetError = (context: string, detail?: unknown) => {
|
|
165
|
+
console.error(`[MemoriWidget] ${context}`, detail ?? '');
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/** Reads correlation id from HTTP async response (supports camelCase / snake_case). */
|
|
169
|
+
function readCorrelationID(response: {
|
|
170
|
+
correlationID?: string;
|
|
171
|
+
}): string | undefined {
|
|
172
|
+
const value = response.correlationID;
|
|
173
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
174
|
+
}
|
|
175
|
+
|
|
129
176
|
type MemoriTextEnteredEvent = CustomEvent<{
|
|
130
177
|
text: string;
|
|
131
178
|
waitForPrevious?: boolean;
|
|
@@ -359,7 +406,6 @@ window.typeBatchMessages = typeBatchMessages;
|
|
|
359
406
|
let audioContext: IAudioContext;
|
|
360
407
|
|
|
361
408
|
let memoriPassword: string | undefined;
|
|
362
|
-
let userToken: string | undefined;
|
|
363
409
|
|
|
364
410
|
export interface LayoutProps {
|
|
365
411
|
Header?: typeof Header;
|
|
@@ -381,6 +427,9 @@ export interface LayoutProps {
|
|
|
381
427
|
onSidebarToggle?: (isOpen: boolean) => void;
|
|
382
428
|
/** When true or "true" (e.g. from integrationConfig or web component attribute), hide the 3D avatar. */
|
|
383
429
|
avatar3dHidden?: boolean | string;
|
|
430
|
+
/** TOTEM only: max-width of the shared content axis (avatar + panel + status).
|
|
431
|
+
* Accepts a number (px) or a CSS length string; enables vertical-kiosk widths. */
|
|
432
|
+
totemContentMaxWidth?: number | string;
|
|
384
433
|
}
|
|
385
434
|
|
|
386
435
|
export interface Props {
|
|
@@ -474,20 +523,23 @@ export function getChatStyles(
|
|
|
474
523
|
|
|
475
524
|
const primaryContent = config?.buttonTextColor ?? '#ffffff';
|
|
476
525
|
|
|
526
|
+
// Match @memori.ai/ui token semantics:
|
|
527
|
+
// --memori-surface-contrast = ink (#000 light / #fff dark)
|
|
528
|
+
// --memori-surface-contrast-inverse = surface (#fff light / #000 dark)
|
|
477
529
|
return {
|
|
478
530
|
'--memori-primary-color': primary,
|
|
479
531
|
'--memori-primary': primary,
|
|
480
532
|
'--memori-primary-content': primaryContent,
|
|
481
533
|
'--memori-primary-hover':
|
|
482
|
-
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast
|
|
534
|
+
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast, black) 15%)',
|
|
483
535
|
'--memori-primary-active':
|
|
484
|
-
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast
|
|
536
|
+
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast, black) 25%)',
|
|
485
537
|
'--memori-primary-disabled':
|
|
486
538
|
'color-mix(in oklch, var(--memori-primary), transparent 60%)',
|
|
487
539
|
'--memori-primary-subtle':
|
|
488
|
-
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast, white) 60%)',
|
|
540
|
+
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast-inverse, white) 60%)',
|
|
489
541
|
'--memori-primary-subtle-hover':
|
|
490
|
-
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast, white) 50%)',
|
|
542
|
+
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast-inverse, white) 50%)',
|
|
491
543
|
'--memori-border-primary':
|
|
492
544
|
'color-mix(in oklch, var(--memori-primary), transparent 70%)',
|
|
493
545
|
'--memori-border-primary-hover':
|
|
@@ -498,9 +550,14 @@ export function getChatStyles(
|
|
|
498
550
|
'--memori-shadow-primary':
|
|
499
551
|
'0 8px 16px -4px color-mix(in oklch, var(--memori-primary), transparent 70%)',
|
|
500
552
|
'--memori-skeleton-base':
|
|
501
|
-
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast, white) 85%)',
|
|
553
|
+
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast-inverse, white) 85%)',
|
|
502
554
|
'--memori-skeleton-highlight':
|
|
503
|
-
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast, white) 75%)',
|
|
555
|
+
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast-inverse, white) 75%)',
|
|
556
|
+
/* Soft fills for secondary IconButton active / recording (never solid CTA) */
|
|
557
|
+
'--memori-icon-active-bg':
|
|
558
|
+
'color-mix(in oklch, var(--memori-primary) 12%, transparent)',
|
|
559
|
+
'--memori-icon-recording-bg':
|
|
560
|
+
'color-mix(in oklch, var(--memori-error, #dc2626) 12%, transparent)',
|
|
504
561
|
} as CSSProperties;
|
|
505
562
|
}
|
|
506
563
|
|
|
@@ -576,6 +633,7 @@ const MemoriWidget = ({
|
|
|
576
633
|
const {
|
|
577
634
|
initSession,
|
|
578
635
|
deleteSession,
|
|
636
|
+
postEnterTextAsync,
|
|
579
637
|
postTextEnteredEvent,
|
|
580
638
|
postPlaceChangedEvent,
|
|
581
639
|
postDateChangedEvent,
|
|
@@ -588,58 +646,98 @@ const MemoriWidget = ({
|
|
|
588
646
|
const [instruct, setInstruct] = useState(false);
|
|
589
647
|
const [enableFocusChatInput, setEnableFocusChatInput] = useState(true);
|
|
590
648
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
const parent = el.parentElement ?? document.body;
|
|
602
|
-
observer.observe(parent, {
|
|
603
|
-
attributes: true,
|
|
604
|
-
attributeFilter: ['data-theme'],
|
|
605
|
-
subtree: true,
|
|
606
|
-
});
|
|
607
|
-
return () => observer.disconnect();
|
|
608
|
-
}, []);
|
|
609
|
-
|
|
649
|
+
// Capture the widget root via a callback ref so the value is non-null on
|
|
650
|
+
// the first render that matters (used as the `container` for portal-based
|
|
651
|
+
// UI primitives via `MemoriUIProvider`). `useRef` would not trigger a
|
|
652
|
+
// re-render and would leave the value `null` on the first pass.
|
|
653
|
+
const [widgetRootEl, setWidgetRootEl] = useState<HTMLDivElement | null>(null);
|
|
654
|
+
// Inner surface establishes `contain: layout` for Drawers/Modals. Kept separate
|
|
655
|
+
// from widgetRootEl so Floating UI menus can portal outside containment.
|
|
656
|
+
const [widgetSurfaceEl, setWidgetSurfaceEl] = useState<HTMLDivElement | null>(
|
|
657
|
+
null
|
|
658
|
+
);
|
|
610
659
|
const [loginToken, setLoginToken] = useState<string | undefined>(
|
|
611
660
|
additionalInfo?.loginToken ?? authToken
|
|
612
661
|
);
|
|
662
|
+
const userTokenRef = useRef<string | undefined>(
|
|
663
|
+
additionalInfo?.loginToken ?? authToken
|
|
664
|
+
);
|
|
665
|
+
const prevPropsLoginTokenRef = useRef<string | undefined>(
|
|
666
|
+
additionalInfo?.loginToken ?? authToken
|
|
667
|
+
);
|
|
668
|
+
|
|
613
669
|
const [user, setUser] = useState<User | undefined>({
|
|
614
670
|
avatarURL: typeof userAvatar === 'string' ? userAvatar : undefined,
|
|
615
671
|
} as User);
|
|
672
|
+
|
|
673
|
+
const resolveLoginToken = useCallback(
|
|
674
|
+
(callAdditionalInfoLoginToken?: string) =>
|
|
675
|
+
resolveLoginTokenValue(
|
|
676
|
+
loginToken,
|
|
677
|
+
userTokenRef.current,
|
|
678
|
+
callAdditionalInfoLoginToken,
|
|
679
|
+
additionalInfo?.loginToken,
|
|
680
|
+
authToken
|
|
681
|
+
),
|
|
682
|
+
[loginToken, additionalInfo?.loginToken, authToken]
|
|
683
|
+
);
|
|
684
|
+
|
|
685
|
+
// Sync loginToken when props change (including explicit removal from parent)
|
|
616
686
|
useEffect(() => {
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
) {
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
removeLocalConfig('loginToken');
|
|
635
|
-
}
|
|
636
|
-
});
|
|
687
|
+
const incomingToken = additionalInfo?.loginToken ?? authToken;
|
|
688
|
+
const prevPropsToken = prevPropsLoginTokenRef.current;
|
|
689
|
+
prevPropsLoginTokenRef.current = incomingToken;
|
|
690
|
+
|
|
691
|
+
if (incomingToken !== prevPropsToken) {
|
|
692
|
+
setLoginToken(incomingToken);
|
|
693
|
+
userTokenRef.current = incomingToken;
|
|
694
|
+
if (!incomingToken) {
|
|
695
|
+
removeLocalConfig('loginToken');
|
|
696
|
+
setUser(undefined);
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}, [additionalInfo?.loginToken, authToken]);
|
|
700
|
+
|
|
701
|
+
useEffect(() => {
|
|
702
|
+
if (!loginToken || !(showLogin || memori.requireLoginToken)) {
|
|
703
|
+
return;
|
|
637
704
|
}
|
|
638
|
-
|
|
705
|
+
|
|
706
|
+
let cancelled = false;
|
|
707
|
+
|
|
708
|
+
client.backend
|
|
709
|
+
.pwlGetCurrentUser(loginToken)
|
|
710
|
+
.then(({ user: fetchedUser, resultCode }) => {
|
|
711
|
+
if (cancelled) return;
|
|
712
|
+
|
|
713
|
+
if (fetchedUser && resultCode === 0) {
|
|
714
|
+
setUser(fetchedUser);
|
|
715
|
+
setLocalConfig('loginToken', loginToken);
|
|
716
|
+
userTokenRef.current = loginToken;
|
|
717
|
+
|
|
718
|
+
if (!birthDate && fetchedUser.birthDate) {
|
|
719
|
+
setBirthDate(fetchedUser.birthDate);
|
|
720
|
+
setLocalConfig('birthDate', fetchedUser.birthDate);
|
|
721
|
+
}
|
|
722
|
+
} else {
|
|
723
|
+
setLoginToken(undefined);
|
|
724
|
+
userTokenRef.current = undefined;
|
|
725
|
+
setUser(undefined);
|
|
726
|
+
removeLocalConfig('loginToken');
|
|
727
|
+
}
|
|
728
|
+
});
|
|
729
|
+
|
|
730
|
+
return () => {
|
|
731
|
+
cancelled = true;
|
|
732
|
+
};
|
|
733
|
+
}, [loginToken, showLogin, memori.requireLoginToken]);
|
|
639
734
|
const [showLoginDrawer, setShowLoginDrawer] = useState(false);
|
|
640
735
|
|
|
641
736
|
const [clickedStart, setClickedStart] = useState(false);
|
|
642
737
|
const [gotErrorInOpening, setGotErrorInOpening] = useState(false);
|
|
738
|
+
const sessionStartingRef = useRef(false);
|
|
739
|
+
const needsCredits = tenant?.billingDelegation;
|
|
740
|
+
const [hasEnoughCredits, setHasEnoughCredits] = useState<boolean>(true);
|
|
643
741
|
|
|
644
742
|
const language =
|
|
645
743
|
memori.culture?.split('-')?.[0]?.toUpperCase()! ||
|
|
@@ -701,7 +799,34 @@ const MemoriWidget = ({
|
|
|
701
799
|
const [memoriTyping, setMemoriTyping] = useState<boolean>(false);
|
|
702
800
|
const [typingText, setTypingText] = useState<string>();
|
|
703
801
|
|
|
704
|
-
|
|
802
|
+
type EnterTextRetryParams = {
|
|
803
|
+
text?: string;
|
|
804
|
+
media?: Medium[];
|
|
805
|
+
translate?: boolean;
|
|
806
|
+
translatedText?: string;
|
|
807
|
+
hidden?: boolean;
|
|
808
|
+
typingText?: string;
|
|
809
|
+
useLoaderTextAsMsg?: boolean;
|
|
810
|
+
hasBatchQueued?: boolean;
|
|
811
|
+
expiredSessionID?: string;
|
|
812
|
+
continueFromChatLogID?: string;
|
|
813
|
+
};
|
|
814
|
+
|
|
815
|
+
type PendingEnterText = EnterTextRetryParams & {
|
|
816
|
+
msg?: string;
|
|
817
|
+
waitForResponse?: {
|
|
818
|
+
resolve: (event: NatsDialogResponseEvent) => void;
|
|
819
|
+
reject: (error: Error) => void;
|
|
820
|
+
timeoutId: ReturnType<typeof setTimeout>;
|
|
821
|
+
};
|
|
822
|
+
};
|
|
823
|
+
const pendingEnterTextRef = useRef<Map<string, PendingEnterText>>(new Map());
|
|
824
|
+
const bufferedNatsResponsesRef = useRef<Map<string, NatsDialogResponseEvent>>(
|
|
825
|
+
new Map()
|
|
826
|
+
);
|
|
827
|
+
|
|
828
|
+
// Layout: from prop (string only) or integrationConfig; when neither is set, default to FULLPAGE.
|
|
829
|
+
// PII detection is only from integrationConfig (customData.layout as object with piiDetection).
|
|
705
830
|
const layoutName =
|
|
706
831
|
typeof layout === 'string'
|
|
707
832
|
? layout
|
|
@@ -729,7 +854,7 @@ const MemoriWidget = ({
|
|
|
729
854
|
return layoutName as LayoutName;
|
|
730
855
|
}
|
|
731
856
|
if (layoutName === 2 || layoutName === '2') return 'FULLPAGE';
|
|
732
|
-
return '
|
|
857
|
+
return 'FULLPAGE';
|
|
733
858
|
})();
|
|
734
859
|
// PII: from layout prop when object with piiDetection, or from integrationConfig.layout
|
|
735
860
|
const piiDetection: PiiDetectionConfig | undefined =
|
|
@@ -752,6 +877,8 @@ const MemoriWidget = ({
|
|
|
752
877
|
useState(false);
|
|
753
878
|
const [hasUserTypedMessage, setHasUserTypedMessage] = useState(false);
|
|
754
879
|
const [positionPopoverOpen, setPositionPopoverOpenState] = useState(false);
|
|
880
|
+
const [autoStartPositionGeolocation, setAutoStartPositionGeolocation] =
|
|
881
|
+
useState(false);
|
|
755
882
|
const [showSettingsDrawer, setShowSettingsDrawer] = useState(false);
|
|
756
883
|
const [showChatHistoryDrawer, setShowChatHistoryDrawer] = useState(false);
|
|
757
884
|
const [showKnownFactsDrawer, setShowKnownFactsDrawer] = useState(false);
|
|
@@ -818,7 +945,10 @@ const MemoriWidget = ({
|
|
|
818
945
|
|
|
819
946
|
if (!additionalInfo?.loginToken && !authToken) {
|
|
820
947
|
setLoginToken(getLocalConfig<typeof loginToken>('loginToken', undefined));
|
|
821
|
-
|
|
948
|
+
userTokenRef.current = getLocalConfig<typeof loginToken>(
|
|
949
|
+
'loginToken',
|
|
950
|
+
undefined
|
|
951
|
+
);
|
|
822
952
|
|
|
823
953
|
setBirthDate(getLocalConfig<string | undefined>('birthDate', undefined));
|
|
824
954
|
}
|
|
@@ -893,7 +1023,7 @@ const MemoriWidget = ({
|
|
|
893
1023
|
return Object.keys(place).length > 0 ? place : undefined;
|
|
894
1024
|
}, []);
|
|
895
1025
|
|
|
896
|
-
/** Place to send with
|
|
1026
|
+
/** Place to send with postEnterTextAsync: real place, nulls when no/declined position, or undefined when position not needed. */
|
|
897
1027
|
const getPlaceSpecForEnterText = useCallback(
|
|
898
1028
|
(venue: Venue | undefined) => {
|
|
899
1029
|
if (!memori.needsPosition) return undefined;
|
|
@@ -967,6 +1097,7 @@ const MemoriWidget = ({
|
|
|
967
1097
|
* @param typingText Optional custom typing indicator text
|
|
968
1098
|
* @param useLoaderTextAsMsg Whether to use the loader text as the message (default false)
|
|
969
1099
|
* @param hasBatchQueued Whether there are more messages queued to be sent (default false)
|
|
1100
|
+
* @param skipHistoryPush Skip adding the user message to history (e.g. session-expired retry)
|
|
970
1101
|
*/
|
|
971
1102
|
const sendMessage = async (
|
|
972
1103
|
text: string,
|
|
@@ -977,7 +1108,8 @@ const MemoriWidget = ({
|
|
|
977
1108
|
hidden: boolean = false,
|
|
978
1109
|
typingText?: string,
|
|
979
1110
|
useLoaderTextAsMsg = false,
|
|
980
|
-
hasBatchQueued = false
|
|
1111
|
+
hasBatchQueued = false,
|
|
1112
|
+
skipHistoryPush = false
|
|
981
1113
|
) => {
|
|
982
1114
|
// Get the session ID from params or global state
|
|
983
1115
|
const sessionID =
|
|
@@ -1044,7 +1176,7 @@ const MemoriWidget = ({
|
|
|
1044
1176
|
}
|
|
1045
1177
|
|
|
1046
1178
|
// Add user message to chat history if not hidden
|
|
1047
|
-
if (!hidden)
|
|
1179
|
+
if (!hidden && !skipHistoryPush)
|
|
1048
1180
|
pushMessage({
|
|
1049
1181
|
text: text,
|
|
1050
1182
|
translatedText,
|
|
@@ -1055,27 +1187,12 @@ const MemoriWidget = ({
|
|
|
1055
1187
|
: !!newSessionId,
|
|
1056
1188
|
});
|
|
1057
1189
|
|
|
1058
|
-
// Show typing indicator
|
|
1059
|
-
setMemoriTyping(true);
|
|
1060
|
-
setTypingText(typingText);
|
|
1061
|
-
|
|
1190
|
+
// Show typing indicator after the async enter-text request is accepted (HTTP 200).
|
|
1062
1191
|
let gotError = false;
|
|
1063
1192
|
|
|
1064
1193
|
try {
|
|
1065
|
-
// Add chat reference link to the message if it exists
|
|
1066
|
-
// if (chatLogID) {
|
|
1067
|
-
// msg =
|
|
1068
|
-
// msg +
|
|
1069
|
-
// ' \n\n' +
|
|
1070
|
-
// '<chat-reference session-id="' +
|
|
1071
|
-
// sessionID +
|
|
1072
|
-
// '" event-log-id="' +
|
|
1073
|
-
// chatLogID +
|
|
1074
|
-
// '"></chat-reference>';
|
|
1075
|
-
// }
|
|
1076
|
-
|
|
1077
1194
|
const placeSpec = getPlaceSpecForEnterText(position);
|
|
1078
|
-
const
|
|
1195
|
+
const response = await postEnterTextAsync({
|
|
1079
1196
|
sessionId: sessionID,
|
|
1080
1197
|
text: msg,
|
|
1081
1198
|
...(memori.needsDateTime && {
|
|
@@ -1083,85 +1200,35 @@ const MemoriWidget = ({
|
|
|
1083
1200
|
}),
|
|
1084
1201
|
...(placeSpec !== undefined && { place: placeSpec }),
|
|
1085
1202
|
});
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
handleSpeak(text);
|
|
1104
|
-
}
|
|
1105
|
-
});
|
|
1106
|
-
} else {
|
|
1107
|
-
setCurrentDialogState({
|
|
1108
|
-
...currentState,
|
|
1109
|
-
emission,
|
|
1110
|
-
});
|
|
1111
|
-
|
|
1112
|
-
if (emission) {
|
|
1113
|
-
pushMessage({
|
|
1114
|
-
text: emission,
|
|
1115
|
-
emitter: currentState.emitter,
|
|
1116
|
-
media: currentState.emittedMedia ?? currentState.media,
|
|
1117
|
-
llmUsage: (currentState as any).llmUsage,
|
|
1118
|
-
fromUser: false,
|
|
1119
|
-
questionAnswered: msg,
|
|
1120
|
-
generatedByAI: !!currentState.completion,
|
|
1121
|
-
contextVars: currentState.contextVars,
|
|
1122
|
-
date: currentState.currentDate,
|
|
1123
|
-
placeName: currentState.currentPlaceName,
|
|
1124
|
-
placeLatitude: currentState.currentLatitude,
|
|
1125
|
-
placeLongitude: currentState.currentLongitude,
|
|
1126
|
-
placeUncertaintyKm: currentState.currentUncertaintyKm,
|
|
1127
|
-
tag: currentState.currentTag,
|
|
1128
|
-
memoryTags: currentState.memoryTags,
|
|
1129
|
-
} as any);
|
|
1130
|
-
if (emission && shouldPlayAudio(emission)) {
|
|
1131
|
-
handleSpeak(emission);
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
}
|
|
1203
|
+
const correlationID = readCorrelationID(response);
|
|
1204
|
+
if (response.resultCode === 0 && correlationID) {
|
|
1205
|
+
registerPendingEnterText(correlationID, {
|
|
1206
|
+
msg,
|
|
1207
|
+
text,
|
|
1208
|
+
media,
|
|
1209
|
+
translate,
|
|
1210
|
+
translatedText,
|
|
1211
|
+
hidden,
|
|
1212
|
+
typingText,
|
|
1213
|
+
useLoaderTextAsMsg,
|
|
1214
|
+
hasBatchQueued,
|
|
1215
|
+
});
|
|
1216
|
+
setMemoriTyping(true);
|
|
1217
|
+
setTypingText(typingText);
|
|
1218
|
+
} else if (response.resultCode === 0) {
|
|
1219
|
+
logWidgetError('enter-text missing correlationID', response);
|
|
1135
1220
|
} else if (response.resultCode === 404) {
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
LANG: userLang,
|
|
1148
|
-
PATHNAME: window.location.pathname,
|
|
1149
|
-
ROUTE: window.location.pathname?.split('/')?.pop() || '',
|
|
1150
|
-
...(initialContextVars || {}),
|
|
1151
|
-
},
|
|
1152
|
-
initialQuestion,
|
|
1153
|
-
undefined,
|
|
1154
|
-
undefined,
|
|
1155
|
-
undefined,
|
|
1156
|
-
undefined,
|
|
1157
|
-
true // isSessionExpired
|
|
1158
|
-
).then(state => {
|
|
1159
|
-
console.info('session timeout');
|
|
1160
|
-
if (state?.sessionID) {
|
|
1161
|
-
setTimeout(() => {
|
|
1162
|
-
sendMessage(text, media, state?.sessionID);
|
|
1163
|
-
}, 500);
|
|
1164
|
-
}
|
|
1221
|
+
retryAfterExpiredSessionRef.current({
|
|
1222
|
+
text,
|
|
1223
|
+
media,
|
|
1224
|
+
translate,
|
|
1225
|
+
translatedText,
|
|
1226
|
+
hidden,
|
|
1227
|
+
typingText,
|
|
1228
|
+
useLoaderTextAsMsg,
|
|
1229
|
+
hasBatchQueued,
|
|
1230
|
+
expiredSessionID: sessionID,
|
|
1231
|
+
continueFromChatLogID: chatLogID,
|
|
1165
1232
|
});
|
|
1166
1233
|
} else if (response.resultCode === 500 && response.resultMessage) {
|
|
1167
1234
|
setHistory(h => [
|
|
@@ -1176,22 +1243,15 @@ const MemoriWidget = ({
|
|
|
1176
1243
|
},
|
|
1177
1244
|
]);
|
|
1178
1245
|
} else {
|
|
1179
|
-
console.warn('[SEND_MESSAGE]', response);
|
|
1180
1246
|
return Promise.reject(response);
|
|
1181
1247
|
}
|
|
1182
1248
|
} catch (error) {
|
|
1183
|
-
console.log('error', error);
|
|
1184
|
-
console.error(error);
|
|
1185
1249
|
gotError = true;
|
|
1250
|
+
logWidgetError('sendMessage failed', error);
|
|
1186
1251
|
|
|
1187
1252
|
setTypingText(undefined);
|
|
1188
1253
|
setMemoriTyping(false);
|
|
1189
1254
|
}
|
|
1190
|
-
|
|
1191
|
-
if (!hasBatchQueued) {
|
|
1192
|
-
setTypingText(undefined);
|
|
1193
|
-
setMemoriTyping(false);
|
|
1194
|
-
}
|
|
1195
1255
|
};
|
|
1196
1256
|
|
|
1197
1257
|
/**
|
|
@@ -1204,12 +1264,6 @@ const MemoriWidget = ({
|
|
|
1204
1264
|
msg?: string,
|
|
1205
1265
|
avoidPushingMessage: boolean = false
|
|
1206
1266
|
) => {
|
|
1207
|
-
// console.log('[TRANSLATE] Starting translation with params:', {
|
|
1208
|
-
// state,
|
|
1209
|
-
// userLang,
|
|
1210
|
-
// msg
|
|
1211
|
-
// });
|
|
1212
|
-
|
|
1213
1267
|
const emission = state?.emission ?? currentDialogState?.emission;
|
|
1214
1268
|
|
|
1215
1269
|
let translatedState = { ...state };
|
|
@@ -1222,7 +1276,6 @@ const MemoriWidget = ({
|
|
|
1222
1276
|
!isMultilanguageEnabled ||
|
|
1223
1277
|
avoidPushingMessage
|
|
1224
1278
|
) {
|
|
1225
|
-
// console.log('[TRANSLATE] Skipping translation - using original emission');
|
|
1226
1279
|
translatedState = { ...state, emission };
|
|
1227
1280
|
if (emission) {
|
|
1228
1281
|
translatedMsg = {
|
|
@@ -1244,12 +1297,10 @@ const MemoriWidget = ({
|
|
|
1244
1297
|
}
|
|
1245
1298
|
} else {
|
|
1246
1299
|
try {
|
|
1247
|
-
// console.log('[TRANSLATE] Translating emission');
|
|
1248
1300
|
const t = await getTranslation(emission, userLang, language, baseUrl);
|
|
1249
1301
|
|
|
1250
1302
|
// Handle hints translation if present
|
|
1251
1303
|
if (state.hints && state.hints.length > 0) {
|
|
1252
|
-
// console.log('[TRANSLATE] Translating hints');
|
|
1253
1304
|
const translatedHints = await Promise.all(
|
|
1254
1305
|
(state.hints ?? []).map(async hint => {
|
|
1255
1306
|
const tHint = await getTranslation(
|
|
@@ -1281,7 +1332,6 @@ const MemoriWidget = ({
|
|
|
1281
1332
|
}
|
|
1282
1333
|
|
|
1283
1334
|
if (t.text.length > 0) {
|
|
1284
|
-
// console.log('[TRANSLATE] Creating translated message');
|
|
1285
1335
|
translatedMsg = {
|
|
1286
1336
|
text: emission,
|
|
1287
1337
|
translatedText: t.text,
|
|
@@ -1302,7 +1352,6 @@ const MemoriWidget = ({
|
|
|
1302
1352
|
};
|
|
1303
1353
|
}
|
|
1304
1354
|
} catch (error) {
|
|
1305
|
-
console.error('[TRANSLATE] Error during translation:', error);
|
|
1306
1355
|
translatedState = { ...state, emission };
|
|
1307
1356
|
translatedMsg = {
|
|
1308
1357
|
text: emission,
|
|
@@ -1323,10 +1372,8 @@ const MemoriWidget = ({
|
|
|
1323
1372
|
}
|
|
1324
1373
|
}
|
|
1325
1374
|
|
|
1326
|
-
// console.log('[TRANSLATE] Setting translated state and message');
|
|
1327
1375
|
setCurrentDialogState(translatedState);
|
|
1328
1376
|
if (!avoidPushingMessage && translatedMsg) {
|
|
1329
|
-
// console.log('[TRANSLATE] Pushing translated message', translatedMsg);
|
|
1330
1377
|
pushMessage(translatedMsg);
|
|
1331
1378
|
}
|
|
1332
1379
|
|
|
@@ -1432,7 +1479,6 @@ const MemoriWidget = ({
|
|
|
1432
1479
|
executableSnippets?.forEach(s => {
|
|
1433
1480
|
try {
|
|
1434
1481
|
setTimeout(() => {
|
|
1435
|
-
console.log('snippet', s);
|
|
1436
1482
|
// eslint-disable-next-line no-new-func
|
|
1437
1483
|
new Function(s.content ?? '')();
|
|
1438
1484
|
|
|
@@ -1446,8 +1492,8 @@ const MemoriWidget = ({
|
|
|
1446
1492
|
);
|
|
1447
1493
|
}, 400);
|
|
1448
1494
|
}, 1000);
|
|
1449
|
-
} catch
|
|
1450
|
-
|
|
1495
|
+
} catch {
|
|
1496
|
+
// ignore snippet execution errors
|
|
1451
1497
|
}
|
|
1452
1498
|
});
|
|
1453
1499
|
};
|
|
@@ -1498,6 +1544,10 @@ const MemoriWidget = ({
|
|
|
1498
1544
|
return;
|
|
1499
1545
|
}
|
|
1500
1546
|
|
|
1547
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
1548
|
+
return;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1501
1551
|
setLoading(true);
|
|
1502
1552
|
|
|
1503
1553
|
try {
|
|
@@ -1519,8 +1569,8 @@ const MemoriWidget = ({
|
|
|
1519
1569
|
referral = (() => {
|
|
1520
1570
|
return window.location.href;
|
|
1521
1571
|
})();
|
|
1522
|
-
} catch
|
|
1523
|
-
|
|
1572
|
+
} catch {
|
|
1573
|
+
// ignore referral URL errors
|
|
1524
1574
|
}
|
|
1525
1575
|
|
|
1526
1576
|
// Initialize session with parameters
|
|
@@ -1531,12 +1581,7 @@ const MemoriWidget = ({
|
|
|
1531
1581
|
pin: params.pin ?? personification?.pin,
|
|
1532
1582
|
additionalInfo: {
|
|
1533
1583
|
...(params.additionalInfo || additionalInfo || {}),
|
|
1534
|
-
loginToken:
|
|
1535
|
-
userToken ??
|
|
1536
|
-
loginToken ??
|
|
1537
|
-
params.additionalInfo?.loginToken ??
|
|
1538
|
-
additionalInfo?.loginToken ??
|
|
1539
|
-
authToken,
|
|
1584
|
+
loginToken: resolveLoginToken(params.additionalInfo?.loginToken),
|
|
1540
1585
|
language: (
|
|
1541
1586
|
userLang ??
|
|
1542
1587
|
memori.culture?.split('-')?.[0] ??
|
|
@@ -1582,7 +1627,7 @@ const MemoriWidget = ({
|
|
|
1582
1627
|
setGotErrorInOpening(true);
|
|
1583
1628
|
}
|
|
1584
1629
|
// Handle authentication error
|
|
1585
|
-
else if (session?.resultCode === 403) {
|
|
1630
|
+
else if (session?.resultCode === 403 && memori.privacyType !== 'PUBLIC') {
|
|
1586
1631
|
setMemoriPwd(undefined);
|
|
1587
1632
|
setAuthModalState('password');
|
|
1588
1633
|
return session;
|
|
@@ -1607,11 +1652,10 @@ const MemoriWidget = ({
|
|
|
1607
1652
|
duration: 0,
|
|
1608
1653
|
})
|
|
1609
1654
|
);
|
|
1610
|
-
setGotErrorInOpening(true);
|
|
1611
1655
|
return session;
|
|
1612
1656
|
}
|
|
1613
1657
|
} catch (err) {
|
|
1614
|
-
|
|
1658
|
+
logWidgetError('fetchSession failed', err);
|
|
1615
1659
|
}
|
|
1616
1660
|
};
|
|
1617
1661
|
|
|
@@ -1639,7 +1683,8 @@ const MemoriWidget = ({
|
|
|
1639
1683
|
additionalInfoProp?: { [key: string]: string | undefined },
|
|
1640
1684
|
continueFromChatLogID?: string,
|
|
1641
1685
|
continueFromSessionID?: string,
|
|
1642
|
-
isSessionExpired?: boolean
|
|
1686
|
+
isSessionExpired?: boolean,
|
|
1687
|
+
suppressHistoryUpdate?: boolean
|
|
1643
1688
|
) => {
|
|
1644
1689
|
// Set loading state while reopening session
|
|
1645
1690
|
setLoading(true);
|
|
@@ -1650,12 +1695,10 @@ const MemoriWidget = ({
|
|
|
1650
1695
|
undefined
|
|
1651
1696
|
);
|
|
1652
1697
|
let userBirthDate = birthDate ?? storageBirthDate;
|
|
1653
|
-
// console.log('[REOPEN_SESSION] Using birth date:', userBirthDate);
|
|
1654
1698
|
|
|
1655
1699
|
try {
|
|
1656
1700
|
// Show age verification if required and birth date not provided
|
|
1657
1701
|
if (!userBirthDate && !!minAge) {
|
|
1658
|
-
// console.log('[REOPEN_SESSION] Age verification required, showing modal');
|
|
1659
1702
|
setShowAgeVerification(true);
|
|
1660
1703
|
return;
|
|
1661
1704
|
}
|
|
@@ -1669,24 +1712,26 @@ const MemoriWidget = ({
|
|
|
1669
1712
|
!recoveryTokens &&
|
|
1670
1713
|
!memoriTokens
|
|
1671
1714
|
) {
|
|
1672
|
-
// console.log('[REOPEN_SESSION] Authentication required, showing modal');
|
|
1673
1715
|
setAuthModalState('password');
|
|
1674
1716
|
return;
|
|
1675
1717
|
}
|
|
1676
1718
|
|
|
1719
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
1720
|
+
setLoading(false);
|
|
1721
|
+
return null;
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1677
1724
|
// Get current URL as referral
|
|
1678
1725
|
let referral;
|
|
1679
1726
|
try {
|
|
1680
1727
|
referral = (() => {
|
|
1681
1728
|
return window.location.href;
|
|
1682
1729
|
})();
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
console.debug('[REOPEN_SESSION] Error getting referral:', err);
|
|
1730
|
+
} catch {
|
|
1731
|
+
// ignore referral URL errors
|
|
1686
1732
|
}
|
|
1687
1733
|
|
|
1688
1734
|
// Initialize session with provided parameters
|
|
1689
|
-
// console.log('[REOPEN_SESSION] Initializing session...');
|
|
1690
1735
|
const { sessionID, currentState, ...response } = await initSession({
|
|
1691
1736
|
memoriID: memori.engineMemoriID ?? '',
|
|
1692
1737
|
password: password || memoriPwd || memori.secretToken,
|
|
@@ -1705,12 +1750,7 @@ const MemoriWidget = ({
|
|
|
1705
1750
|
birthDate: userBirthDate,
|
|
1706
1751
|
additionalInfo: {
|
|
1707
1752
|
...(additionalInfoProp || additionalInfo || {}),
|
|
1708
|
-
loginToken:
|
|
1709
|
-
userToken ??
|
|
1710
|
-
loginToken ??
|
|
1711
|
-
additionalInfoProp?.loginToken ??
|
|
1712
|
-
additionalInfo?.loginToken ??
|
|
1713
|
-
authToken,
|
|
1753
|
+
loginToken: resolveLoginToken(additionalInfoProp?.loginToken),
|
|
1714
1754
|
language: (
|
|
1715
1755
|
userLang ??
|
|
1716
1756
|
memori.culture?.split('-')?.[0] ??
|
|
@@ -1723,30 +1763,36 @@ const MemoriWidget = ({
|
|
|
1723
1763
|
|
|
1724
1764
|
// Handle successful session initialization
|
|
1725
1765
|
if (sessionID && currentState && response.resultCode === 0) {
|
|
1726
|
-
console.log(
|
|
1727
|
-
'[REOPEN_SESSION] Session initialized successfully:',
|
|
1728
|
-
sessionID
|
|
1729
|
-
);
|
|
1730
1766
|
setSessionId(sessionID);
|
|
1731
1767
|
|
|
1732
1768
|
// Update dialog state and history if requested
|
|
1733
1769
|
if (updateDialogState) {
|
|
1734
|
-
// console.log('[REOPEN_SESSION] Updating dialog state');
|
|
1735
1770
|
setCurrentDialogState(currentState);
|
|
1736
1771
|
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1772
|
+
const sessionExpiredStatus =
|
|
1773
|
+
isSessionExpired && history.length > 1
|
|
1774
|
+
? t('sessionExpiredReopening')
|
|
1775
|
+
: null;
|
|
1776
|
+
|
|
1777
|
+
if (sessionExpiredStatus && suppressHistoryUpdate) {
|
|
1778
|
+
pushMessage({
|
|
1779
|
+
text: '',
|
|
1780
|
+
emitter: 'system',
|
|
1781
|
+
fromUser: false,
|
|
1782
|
+
initial: sessionExpiredStatus as any,
|
|
1783
|
+
contextVars: {},
|
|
1784
|
+
date: new Date().toISOString(),
|
|
1785
|
+
});
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
if (currentState.emission && !suppressHistoryUpdate) {
|
|
1742
1789
|
// Determine initial status message based on context
|
|
1743
1790
|
// Show status message only if session expired and there's existing history
|
|
1744
|
-
const initialStatus =
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
: undefined;
|
|
1791
|
+
const initialStatus = sessionExpiredStatus
|
|
1792
|
+
? sessionExpiredStatus
|
|
1793
|
+
: history.length <= 1
|
|
1794
|
+
? true
|
|
1795
|
+
: undefined;
|
|
1750
1796
|
|
|
1751
1797
|
// Set initial message or append to existing history
|
|
1752
1798
|
history.length <= 1
|
|
@@ -1809,8 +1855,10 @@ const MemoriWidget = ({
|
|
|
1809
1855
|
setGotErrorInOpening(true);
|
|
1810
1856
|
}
|
|
1811
1857
|
// Handle authentication error
|
|
1812
|
-
else if (
|
|
1813
|
-
|
|
1858
|
+
else if (
|
|
1859
|
+
response?.resultCode === 403 &&
|
|
1860
|
+
memori.privacyType !== 'PUBLIC'
|
|
1861
|
+
) {
|
|
1814
1862
|
setMemoriPwd(undefined);
|
|
1815
1863
|
setAuthModalState('password');
|
|
1816
1864
|
}
|
|
@@ -1826,7 +1874,7 @@ const MemoriWidget = ({
|
|
|
1826
1874
|
setGotErrorInOpening(true);
|
|
1827
1875
|
}
|
|
1828
1876
|
} catch (err) {
|
|
1829
|
-
|
|
1877
|
+
logWidgetError('reopenSession failed', err);
|
|
1830
1878
|
}
|
|
1831
1879
|
// Reset loading state
|
|
1832
1880
|
setLoading(false);
|
|
@@ -1834,6 +1882,101 @@ const MemoriWidget = ({
|
|
|
1834
1882
|
return null;
|
|
1835
1883
|
};
|
|
1836
1884
|
|
|
1885
|
+
const retryAfterExpiredSessionRef = useRef<
|
|
1886
|
+
(params: EnterTextRetryParams) => ReturnType<typeof reopenSession>
|
|
1887
|
+
>(() => Promise.resolve(null));
|
|
1888
|
+
|
|
1889
|
+
retryAfterExpiredSessionRef.current = (params: EnterTextRetryParams) => {
|
|
1890
|
+
const {
|
|
1891
|
+
text,
|
|
1892
|
+
media,
|
|
1893
|
+
translate = true,
|
|
1894
|
+
translatedText,
|
|
1895
|
+
hidden = false,
|
|
1896
|
+
typingText,
|
|
1897
|
+
useLoaderTextAsMsg = false,
|
|
1898
|
+
hasBatchQueued = false,
|
|
1899
|
+
expiredSessionID,
|
|
1900
|
+
continueFromChatLogID: continueFromChatLogIDParam,
|
|
1901
|
+
} = params;
|
|
1902
|
+
|
|
1903
|
+
const continueFromSessionID = expiredSessionID ?? sessionId;
|
|
1904
|
+
const continueFromChatLogID = continueFromChatLogIDParam ?? chatLogID;
|
|
1905
|
+
|
|
1906
|
+
const reopenAfterExpiry = () =>
|
|
1907
|
+
reopenSession(
|
|
1908
|
+
true,
|
|
1909
|
+
memoriPwd || memori.secretToken,
|
|
1910
|
+
memoriTokens,
|
|
1911
|
+
undefined,
|
|
1912
|
+
undefined,
|
|
1913
|
+
{
|
|
1914
|
+
LANG: userLang,
|
|
1915
|
+
PATHNAME: window.location.pathname,
|
|
1916
|
+
ROUTE: window.location.pathname?.split('/')?.pop() || '',
|
|
1917
|
+
...(initialContextVars || {}),
|
|
1918
|
+
},
|
|
1919
|
+
initialQuestion,
|
|
1920
|
+
undefined,
|
|
1921
|
+
undefined,
|
|
1922
|
+
continueFromChatLogID,
|
|
1923
|
+
continueFromSessionID,
|
|
1924
|
+
true,
|
|
1925
|
+
true
|
|
1926
|
+
);
|
|
1927
|
+
|
|
1928
|
+
const scheduleRetry = (newSessionID: string) => {
|
|
1929
|
+
setTimeout(() => {
|
|
1930
|
+
sendMessage(
|
|
1931
|
+
text!,
|
|
1932
|
+
media,
|
|
1933
|
+
newSessionID,
|
|
1934
|
+
translate,
|
|
1935
|
+
translatedText,
|
|
1936
|
+
hidden,
|
|
1937
|
+
typingText,
|
|
1938
|
+
useLoaderTextAsMsg,
|
|
1939
|
+
hasBatchQueued,
|
|
1940
|
+
true
|
|
1941
|
+
);
|
|
1942
|
+
}, 500);
|
|
1943
|
+
};
|
|
1944
|
+
|
|
1945
|
+
const handleReopenFailure = (
|
|
1946
|
+
state: Awaited<ReturnType<typeof reopenSession>>
|
|
1947
|
+
) => {
|
|
1948
|
+
setMemoriTyping(false);
|
|
1949
|
+
setTypingText(undefined);
|
|
1950
|
+
// `null` = explicit failure; `undefined` = auth/age modal opened (message kept in history)
|
|
1951
|
+
if (state === null && text && !hidden) {
|
|
1952
|
+
add(
|
|
1953
|
+
createAlertOptions({
|
|
1954
|
+
description: t('errors.SESSION_EXPIRED'),
|
|
1955
|
+
severity: 'error',
|
|
1956
|
+
})
|
|
1957
|
+
);
|
|
1958
|
+
}
|
|
1959
|
+
};
|
|
1960
|
+
|
|
1961
|
+
if (!text) {
|
|
1962
|
+
return reopenAfterExpiry().then(state => {
|
|
1963
|
+
if (!state?.sessionID) {
|
|
1964
|
+
handleReopenFailure(state);
|
|
1965
|
+
}
|
|
1966
|
+
return state;
|
|
1967
|
+
});
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
return reopenAfterExpiry().then(state => {
|
|
1971
|
+
if (state?.sessionID) {
|
|
1972
|
+
scheduleRetry(state.sessionID);
|
|
1973
|
+
} else {
|
|
1974
|
+
handleReopenFailure(state);
|
|
1975
|
+
}
|
|
1976
|
+
return state;
|
|
1977
|
+
});
|
|
1978
|
+
};
|
|
1979
|
+
|
|
1837
1980
|
const changeTag = async (
|
|
1838
1981
|
memoriId: string,
|
|
1839
1982
|
sessionId: string,
|
|
@@ -1841,7 +1984,6 @@ const MemoriWidget = ({
|
|
|
1841
1984
|
pin?: string
|
|
1842
1985
|
) => {
|
|
1843
1986
|
if (!memoriId || !sessionId) {
|
|
1844
|
-
console.error('CHANGETAG/Session not found');
|
|
1845
1987
|
return Promise.reject('Session not found');
|
|
1846
1988
|
}
|
|
1847
1989
|
|
|
@@ -1881,7 +2023,6 @@ const MemoriWidget = ({
|
|
|
1881
2023
|
};
|
|
1882
2024
|
}
|
|
1883
2025
|
} else if ([400, 401, 403, 404, 500].includes(resultCode)) {
|
|
1884
|
-
console.warn('[APPCONTEXT/CHANGETAG]', resultCode);
|
|
1885
2026
|
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
1886
2027
|
'birthDate',
|
|
1887
2028
|
undefined
|
|
@@ -1892,8 +2033,8 @@ const MemoriWidget = ({
|
|
|
1892
2033
|
referral = (() => {
|
|
1893
2034
|
return window.location.href;
|
|
1894
2035
|
})();
|
|
1895
|
-
} catch
|
|
1896
|
-
|
|
2036
|
+
} catch {
|
|
2037
|
+
// ignore referral URL errors
|
|
1897
2038
|
}
|
|
1898
2039
|
|
|
1899
2040
|
fetchSession({
|
|
@@ -1911,11 +2052,7 @@ const MemoriWidget = ({
|
|
|
1911
2052
|
birthDate: birthDate || storageBirthDate || undefined,
|
|
1912
2053
|
additionalInfo: {
|
|
1913
2054
|
...(additionalInfo || {}),
|
|
1914
|
-
loginToken:
|
|
1915
|
-
userToken ??
|
|
1916
|
-
loginToken ??
|
|
1917
|
-
additionalInfo?.loginToken ??
|
|
1918
|
-
authToken,
|
|
2055
|
+
loginToken: resolveLoginToken(),
|
|
1919
2056
|
language: (
|
|
1920
2057
|
userLang ??
|
|
1921
2058
|
memori.culture?.split('-')?.[0] ??
|
|
@@ -1935,7 +2072,6 @@ const MemoriWidget = ({
|
|
|
1935
2072
|
}
|
|
1936
2073
|
} catch (_e) {
|
|
1937
2074
|
let err = _e as Error;
|
|
1938
|
-
console.warn('[APPCONTEXT/CHANGETAG]', err);
|
|
1939
2075
|
return Promise.reject(err);
|
|
1940
2076
|
}
|
|
1941
2077
|
|
|
@@ -1962,6 +2098,7 @@ const MemoriWidget = ({
|
|
|
1962
2098
|
return () => {
|
|
1963
2099
|
setHasUserActivatedSpeak(false);
|
|
1964
2100
|
setClickedStart(false);
|
|
2101
|
+
sessionStartingRef.current = false;
|
|
1965
2102
|
clearInteractionTimeout();
|
|
1966
2103
|
timeoutRef.current = undefined;
|
|
1967
2104
|
};
|
|
@@ -1974,8 +2111,6 @@ const MemoriWidget = ({
|
|
|
1974
2111
|
const [requestedListening, setRequestedListening] = useState(false);
|
|
1975
2112
|
const startListeningRef = useRef<(() => Promise<void>) | null>(null);
|
|
1976
2113
|
|
|
1977
|
-
// console.log('tenantID', tenantID);
|
|
1978
|
-
|
|
1979
2114
|
// Define TTS configuration
|
|
1980
2115
|
const ttsConfig = useMemo(
|
|
1981
2116
|
() => ({
|
|
@@ -2002,6 +2137,9 @@ const MemoriWidget = ({
|
|
|
2002
2137
|
[ttsProvider, userLang]
|
|
2003
2138
|
);
|
|
2004
2139
|
|
|
2140
|
+
const resolvedDefaultSpeakerActive =
|
|
2141
|
+
defaultSpeakerActive ?? integrationConfig?.defaultSpeakerActive ?? true;
|
|
2142
|
+
|
|
2005
2143
|
// Initialize TTS hook with basic options first
|
|
2006
2144
|
const {
|
|
2007
2145
|
speak: ttsSpeak,
|
|
@@ -2020,29 +2158,30 @@ const MemoriWidget = ({
|
|
|
2020
2158
|
},
|
|
2021
2159
|
autoStart,
|
|
2022
2160
|
defaultEnableAudio,
|
|
2023
|
-
|
|
2161
|
+
resolvedDefaultSpeakerActive
|
|
2162
|
+
);
|
|
2163
|
+
|
|
2164
|
+
const muteSpeakerFallback = getMuteSpeakerFallback(
|
|
2165
|
+
defaultEnableAudio,
|
|
2166
|
+
resolvedDefaultSpeakerActive,
|
|
2167
|
+
autoStart
|
|
2024
2168
|
);
|
|
2025
2169
|
|
|
2026
2170
|
// Helper function to check if audio should be played.
|
|
2027
|
-
//
|
|
2028
|
-
const shouldPlayAudio = (text?: string) =>
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
!currentSpeakerMuted &&
|
|
2039
|
-
defaultEnableAudio
|
|
2040
|
-
);
|
|
2041
|
-
};
|
|
2171
|
+
// Align mute fallback with UI state so autostart + muted speaker never speaks.
|
|
2172
|
+
const shouldPlayAudio = (text?: string) =>
|
|
2173
|
+
shouldPlayTtsAudio({
|
|
2174
|
+
text,
|
|
2175
|
+
preview,
|
|
2176
|
+
defaultEnableAudio,
|
|
2177
|
+
defaultSpeakerActive: resolvedDefaultSpeakerActive,
|
|
2178
|
+
autoStart,
|
|
2179
|
+
speakerMuted,
|
|
2180
|
+
storedMute: getLocalConfig('muteSpeaker', muteSpeakerFallback),
|
|
2181
|
+
});
|
|
2042
2182
|
|
|
2043
2183
|
// Create a single, centralized function to process and send messages
|
|
2044
2184
|
const processSpeechAndSendMessage = (text: string) => {
|
|
2045
|
-
// console.log('processSpeechAndSendMessage', text);
|
|
2046
2185
|
// Skip if already processing or no text
|
|
2047
2186
|
if (!text || text.trim().length === 0) {
|
|
2048
2187
|
return;
|
|
@@ -2051,17 +2190,15 @@ const MemoriWidget = ({
|
|
|
2051
2190
|
try {
|
|
2052
2191
|
// Process the text
|
|
2053
2192
|
const message = stripDuplicates(text);
|
|
2054
|
-
console.debug('Processing speech message:', message);
|
|
2055
2193
|
|
|
2056
2194
|
if (message.length > 0) {
|
|
2057
2195
|
setUserMessage('');
|
|
2058
2196
|
|
|
2059
2197
|
// Send the message
|
|
2060
|
-
console.debug('Sending message:', message);
|
|
2061
2198
|
sendMessage(message);
|
|
2062
2199
|
}
|
|
2063
|
-
} catch
|
|
2064
|
-
|
|
2200
|
+
} catch {
|
|
2201
|
+
// ignore speech processing errors
|
|
2065
2202
|
}
|
|
2066
2203
|
};
|
|
2067
2204
|
|
|
@@ -2141,8 +2278,7 @@ const MemoriWidget = ({
|
|
|
2141
2278
|
}
|
|
2142
2279
|
|
|
2143
2280
|
return translatedState;
|
|
2144
|
-
} catch
|
|
2145
|
-
console.error('Error in translateAndSpeak:', error);
|
|
2281
|
+
} catch {
|
|
2146
2282
|
// Still update activation state even if there's an error
|
|
2147
2283
|
if (!hasUserActivatedSpeak) {
|
|
2148
2284
|
setHasUserActivatedSpeak(true);
|
|
@@ -2159,6 +2295,277 @@ const MemoriWidget = ({
|
|
|
2159
2295
|
]
|
|
2160
2296
|
);
|
|
2161
2297
|
|
|
2298
|
+
const processEnterTextDialogResponse = useCallback(
|
|
2299
|
+
(event: NatsDialogResponseEvent, pending: PendingEnterText) => {
|
|
2300
|
+
const {
|
|
2301
|
+
msg,
|
|
2302
|
+
typingText: pendingTypingText,
|
|
2303
|
+
useLoaderTextAsMsg,
|
|
2304
|
+
} = pending;
|
|
2305
|
+
const currentState = event.currentState;
|
|
2306
|
+
|
|
2307
|
+
if (event.resultCode !== 0 || !currentState) {
|
|
2308
|
+
if (isSessionExpiredNatsResponse(event) && pending.text) {
|
|
2309
|
+
setMemoriTyping(false);
|
|
2310
|
+
setTypingText(undefined);
|
|
2311
|
+
retryAfterExpiredSessionRef.current({
|
|
2312
|
+
text: pending.text,
|
|
2313
|
+
media: pending.media,
|
|
2314
|
+
translate: pending.translate,
|
|
2315
|
+
translatedText: pending.translatedText,
|
|
2316
|
+
hidden: pending.hidden,
|
|
2317
|
+
typingText: pending.typingText,
|
|
2318
|
+
useLoaderTextAsMsg: pending.useLoaderTextAsMsg,
|
|
2319
|
+
hasBatchQueued: pending.hasBatchQueued,
|
|
2320
|
+
expiredSessionID: sessionId,
|
|
2321
|
+
continueFromChatLogID: chatLogID,
|
|
2322
|
+
});
|
|
2323
|
+
return;
|
|
2324
|
+
}
|
|
2325
|
+
|
|
2326
|
+
if (event.resultCode === 500 && event.resultMessage) {
|
|
2327
|
+
setHistory(h => [
|
|
2328
|
+
...h,
|
|
2329
|
+
{
|
|
2330
|
+
text: 'Error: ' + event.resultMessage,
|
|
2331
|
+
emitter: 'system',
|
|
2332
|
+
fromUser: false,
|
|
2333
|
+
initial: false,
|
|
2334
|
+
contextVars: {},
|
|
2335
|
+
date: new Date().toISOString(),
|
|
2336
|
+
},
|
|
2337
|
+
]);
|
|
2338
|
+
}
|
|
2339
|
+
return;
|
|
2340
|
+
}
|
|
2341
|
+
|
|
2342
|
+
if (!msg) {
|
|
2343
|
+
return;
|
|
2344
|
+
}
|
|
2345
|
+
|
|
2346
|
+
setChatLogID(undefined);
|
|
2347
|
+
const emission =
|
|
2348
|
+
useLoaderTextAsMsg && pendingTypingText
|
|
2349
|
+
? pendingTypingText
|
|
2350
|
+
: currentState.emission ?? currentDialogState?.emission;
|
|
2351
|
+
|
|
2352
|
+
if (
|
|
2353
|
+
userLang.toLowerCase() !== language.toLowerCase() &&
|
|
2354
|
+
emission &&
|
|
2355
|
+
isMultilanguageEnabled
|
|
2356
|
+
) {
|
|
2357
|
+
currentState.emission = emission;
|
|
2358
|
+
|
|
2359
|
+
translateDialogState(currentState, userLang, msg).then(ts => {
|
|
2360
|
+
const text = ts.translatedEmission || ts.emission;
|
|
2361
|
+
if (text && shouldPlayAudio(text)) {
|
|
2362
|
+
handleSpeak(text);
|
|
2363
|
+
}
|
|
2364
|
+
});
|
|
2365
|
+
} else {
|
|
2366
|
+
setCurrentDialogState({
|
|
2367
|
+
...currentState,
|
|
2368
|
+
emission,
|
|
2369
|
+
});
|
|
2370
|
+
|
|
2371
|
+
if (emission) {
|
|
2372
|
+
pushMessage({
|
|
2373
|
+
text: emission,
|
|
2374
|
+
emitter: currentState.emitter,
|
|
2375
|
+
media: currentState.emittedMedia ?? currentState.media,
|
|
2376
|
+
llmUsage: (currentState as any).llmUsage,
|
|
2377
|
+
fromUser: false,
|
|
2378
|
+
questionAnswered: msg,
|
|
2379
|
+
generatedByAI: !!currentState.completion,
|
|
2380
|
+
contextVars: currentState.contextVars,
|
|
2381
|
+
date: currentState.currentDate,
|
|
2382
|
+
placeName: currentState.currentPlaceName,
|
|
2383
|
+
placeLatitude: currentState.currentLatitude,
|
|
2384
|
+
placeLongitude: currentState.currentLongitude,
|
|
2385
|
+
placeUncertaintyKm: currentState.currentUncertaintyKm,
|
|
2386
|
+
tag: currentState.currentTag,
|
|
2387
|
+
memoryTags: currentState.memoryTags,
|
|
2388
|
+
} as any);
|
|
2389
|
+
if (emission && shouldPlayAudio(emission)) {
|
|
2390
|
+
handleSpeak(emission);
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
}
|
|
2394
|
+
},
|
|
2395
|
+
[
|
|
2396
|
+
userLang,
|
|
2397
|
+
language,
|
|
2398
|
+
isMultilanguageEnabled,
|
|
2399
|
+
currentDialogState?.emission,
|
|
2400
|
+
translateDialogState,
|
|
2401
|
+
handleSpeak,
|
|
2402
|
+
shouldPlayAudio,
|
|
2403
|
+
]
|
|
2404
|
+
);
|
|
2405
|
+
|
|
2406
|
+
const clearEnterTextPending = useCallback(
|
|
2407
|
+
(correlationID: string, pending: PendingEnterText) => {
|
|
2408
|
+
if (pending.waitForResponse?.timeoutId) {
|
|
2409
|
+
clearTimeout(pending.waitForResponse.timeoutId);
|
|
2410
|
+
}
|
|
2411
|
+
pendingEnterTextRef.current.delete(correlationID);
|
|
2412
|
+
},
|
|
2413
|
+
[]
|
|
2414
|
+
);
|
|
2415
|
+
|
|
2416
|
+
const deliverEnterTextNatsError = useCallback(
|
|
2417
|
+
(event: NatsErrorEvent) => {
|
|
2418
|
+
const correlationID = event.correlationID;
|
|
2419
|
+
let pending: PendingEnterText | undefined;
|
|
2420
|
+
|
|
2421
|
+
if (correlationID) {
|
|
2422
|
+
pending = pendingEnterTextRef.current.get(correlationID);
|
|
2423
|
+
if (pending) {
|
|
2424
|
+
clearEnterTextPending(correlationID, pending);
|
|
2425
|
+
pending.waitForResponse?.reject(
|
|
2426
|
+
new Error(
|
|
2427
|
+
event.errorMessage ?? String(event.errorCode ?? 'NATS error')
|
|
2428
|
+
)
|
|
2429
|
+
);
|
|
2430
|
+
}
|
|
2431
|
+
}
|
|
2432
|
+
|
|
2433
|
+
if (isSessionExpiredNatsError(event) && pending?.text) {
|
|
2434
|
+
setMemoriTyping(false);
|
|
2435
|
+
setTypingText(undefined);
|
|
2436
|
+
retryAfterExpiredSessionRef.current({
|
|
2437
|
+
text: pending.text,
|
|
2438
|
+
media: pending.media,
|
|
2439
|
+
translate: pending.translate,
|
|
2440
|
+
translatedText: pending.translatedText,
|
|
2441
|
+
hidden: pending.hidden,
|
|
2442
|
+
typingText: pending.typingText,
|
|
2443
|
+
useLoaderTextAsMsg: pending.useLoaderTextAsMsg,
|
|
2444
|
+
hasBatchQueued: pending.hasBatchQueued,
|
|
2445
|
+
expiredSessionID: sessionId,
|
|
2446
|
+
continueFromChatLogID: chatLogID,
|
|
2447
|
+
});
|
|
2448
|
+
return;
|
|
2449
|
+
}
|
|
2450
|
+
|
|
2451
|
+
const errorText = event.errorMessage
|
|
2452
|
+
? `Error: ${event.errorMessage}`
|
|
2453
|
+
: event.errorCode
|
|
2454
|
+
? `Error: ${event.errorCode}`
|
|
2455
|
+
: 'Error: An unexpected error occurred';
|
|
2456
|
+
|
|
2457
|
+
pushMessage({
|
|
2458
|
+
text: errorText,
|
|
2459
|
+
emitter: 'system',
|
|
2460
|
+
fromUser: false,
|
|
2461
|
+
initial: false,
|
|
2462
|
+
contextVars: {},
|
|
2463
|
+
date: new Date().toISOString(),
|
|
2464
|
+
});
|
|
2465
|
+
|
|
2466
|
+
setMemoriTyping(false);
|
|
2467
|
+
setTypingText(undefined);
|
|
2468
|
+
},
|
|
2469
|
+
[clearEnterTextPending]
|
|
2470
|
+
);
|
|
2471
|
+
|
|
2472
|
+
const deliverEnterTextNatsResponse = useCallback(
|
|
2473
|
+
(correlationID: string, event: NatsDialogResponseEvent) => {
|
|
2474
|
+
const pending = pendingEnterTextRef.current.get(correlationID);
|
|
2475
|
+
if (!pending) {
|
|
2476
|
+
bufferedNatsResponsesRef.current.set(correlationID, event);
|
|
2477
|
+
return;
|
|
2478
|
+
}
|
|
2479
|
+
|
|
2480
|
+
clearEnterTextPending(correlationID, pending);
|
|
2481
|
+
|
|
2482
|
+
if (pending.waitForResponse) {
|
|
2483
|
+
pending.waitForResponse.resolve(event);
|
|
2484
|
+
setMemoriTyping(false);
|
|
2485
|
+
setTypingText(undefined);
|
|
2486
|
+
return;
|
|
2487
|
+
}
|
|
2488
|
+
|
|
2489
|
+
processEnterTextDialogResponse(event, pending);
|
|
2490
|
+
|
|
2491
|
+
if (!pending.hasBatchQueued) {
|
|
2492
|
+
setMemoriTyping(false);
|
|
2493
|
+
setTypingText(undefined);
|
|
2494
|
+
}
|
|
2495
|
+
},
|
|
2496
|
+
[processEnterTextDialogResponse, clearEnterTextPending]
|
|
2497
|
+
);
|
|
2498
|
+
|
|
2499
|
+
const registerPendingEnterText = useCallback(
|
|
2500
|
+
(correlationID: string, pending: PendingEnterText) => {
|
|
2501
|
+
const buffered = bufferedNatsResponsesRef.current.get(correlationID);
|
|
2502
|
+
if (buffered) {
|
|
2503
|
+
bufferedNatsResponsesRef.current.delete(correlationID);
|
|
2504
|
+
pendingEnterTextRef.current.set(correlationID, pending);
|
|
2505
|
+
deliverEnterTextNatsResponse(correlationID, buffered);
|
|
2506
|
+
return;
|
|
2507
|
+
}
|
|
2508
|
+
|
|
2509
|
+
pendingEnterTextRef.current.set(correlationID, pending);
|
|
2510
|
+
},
|
|
2511
|
+
[deliverEnterTextNatsResponse]
|
|
2512
|
+
);
|
|
2513
|
+
|
|
2514
|
+
const waitForEnterTextNatsResponse = useCallback(
|
|
2515
|
+
(correlationID: string, timeoutMs = 120000) =>
|
|
2516
|
+
new Promise<NatsDialogResponseEvent>((resolve, reject) => {
|
|
2517
|
+
const timeoutId = setTimeout(() => {
|
|
2518
|
+
const current = pendingEnterTextRef.current.get(correlationID);
|
|
2519
|
+
if (current) {
|
|
2520
|
+
clearEnterTextPending(correlationID, current);
|
|
2521
|
+
}
|
|
2522
|
+
logWidgetError('NATS timeout', { correlationID, timeoutMs });
|
|
2523
|
+
reject(new Error('NATS enter-text response timeout'));
|
|
2524
|
+
}, timeoutMs);
|
|
2525
|
+
|
|
2526
|
+
registerPendingEnterText(correlationID, {
|
|
2527
|
+
waitForResponse: {
|
|
2528
|
+
resolve: event => {
|
|
2529
|
+
clearTimeout(timeoutId);
|
|
2530
|
+
resolve(event);
|
|
2531
|
+
},
|
|
2532
|
+
reject: error => {
|
|
2533
|
+
clearTimeout(timeoutId);
|
|
2534
|
+
reject(error);
|
|
2535
|
+
},
|
|
2536
|
+
timeoutId,
|
|
2537
|
+
},
|
|
2538
|
+
});
|
|
2539
|
+
}),
|
|
2540
|
+
[registerPendingEnterText, clearEnterTextPending]
|
|
2541
|
+
);
|
|
2542
|
+
|
|
2543
|
+
// NATS subscription: receives progress updates and the async enter-text response.
|
|
2544
|
+
useNats({
|
|
2545
|
+
baseUrl,
|
|
2546
|
+
sessionId,
|
|
2547
|
+
onProgress: useCallback((event: NatsProgressEvent) => {
|
|
2548
|
+
if (event.message) {
|
|
2549
|
+
setTypingText(event.message);
|
|
2550
|
+
}
|
|
2551
|
+
}, []),
|
|
2552
|
+
onDialogResponse: useCallback(
|
|
2553
|
+
(event: NatsDialogResponseEvent) => {
|
|
2554
|
+
const correlationID = event.correlationID;
|
|
2555
|
+
if (!correlationID) {
|
|
2556
|
+
logWidgetError('NATS dialog response missing correlationID', event);
|
|
2557
|
+
setMemoriTyping(false);
|
|
2558
|
+
setTypingText(undefined);
|
|
2559
|
+
return;
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2562
|
+
deliverEnterTextNatsResponse(correlationID, event);
|
|
2563
|
+
},
|
|
2564
|
+
[deliverEnterTextNatsResponse]
|
|
2565
|
+
),
|
|
2566
|
+
onError: deliverEnterTextNatsError,
|
|
2567
|
+
});
|
|
2568
|
+
|
|
2162
2569
|
const focusChatInput = () => {
|
|
2163
2570
|
let textarea = document.querySelector(
|
|
2164
2571
|
'#chat-fieldset textarea'
|
|
@@ -2187,8 +2594,8 @@ const MemoriWidget = ({
|
|
|
2187
2594
|
setClickedStart(false);
|
|
2188
2595
|
timeoutRef.current = undefined;
|
|
2189
2596
|
ttsStop();
|
|
2190
|
-
} catch
|
|
2191
|
-
//
|
|
2597
|
+
} catch {
|
|
2598
|
+
// ignore reset errors
|
|
2192
2599
|
}
|
|
2193
2600
|
};
|
|
2194
2601
|
useEffect(() => {
|
|
@@ -2245,9 +2652,6 @@ const MemoriWidget = ({
|
|
|
2245
2652
|
>();
|
|
2246
2653
|
|
|
2247
2654
|
const globalBackground = integrationConfig?.globalBackground;
|
|
2248
|
-
const globalBackgroundUrl = globalBackground
|
|
2249
|
-
? `url(${globalBackground})`
|
|
2250
|
-
: null;
|
|
2251
2655
|
|
|
2252
2656
|
const integrationProperties = (
|
|
2253
2657
|
integration ? getChatStyles(integrationConfig) : {}
|
|
@@ -2288,9 +2692,13 @@ const MemoriWidget = ({
|
|
|
2288
2692
|
}`
|
|
2289
2693
|
);
|
|
2290
2694
|
}
|
|
2291
|
-
if (integrationConfig?.blurBackground) {
|
|
2695
|
+
if (integrationConfig?.blurBackground === false) {
|
|
2292
2696
|
integrationStylesheetParts.push(
|
|
2293
|
-
|
|
2697
|
+
`.memori-widget .memori-chat--history--has-global-background::before,
|
|
2698
|
+
.memori-widget .memori-chat-layout--main--has-background::before {
|
|
2699
|
+
filter: none;
|
|
2700
|
+
transform: none;
|
|
2701
|
+
}`
|
|
2294
2702
|
);
|
|
2295
2703
|
}
|
|
2296
2704
|
const integrationStylesheet = `@layer integration {
|
|
@@ -2444,12 +2852,6 @@ const MemoriWidget = ({
|
|
|
2444
2852
|
chatLog?: ChatLog,
|
|
2445
2853
|
targetSessionID?: string
|
|
2446
2854
|
) => {
|
|
2447
|
-
// console.log('[onClickStart] Starting with params:', {
|
|
2448
|
-
// session,
|
|
2449
|
-
// initialSessionExpired,
|
|
2450
|
-
// chatLog
|
|
2451
|
-
// });
|
|
2452
|
-
|
|
2453
2855
|
const sessionID = chatLog ? undefined : session?.sessionID || sessionId;
|
|
2454
2856
|
const dialogState = chatLog
|
|
2455
2857
|
? undefined
|
|
@@ -2478,10 +2880,17 @@ const MemoriWidget = ({
|
|
|
2478
2880
|
return;
|
|
2479
2881
|
}
|
|
2480
2882
|
|
|
2883
|
+
if (!(await checkCredits({ notify: true }))) {
|
|
2884
|
+
setClickedStart(false);
|
|
2885
|
+
setLoading(false);
|
|
2886
|
+
return;
|
|
2887
|
+
}
|
|
2888
|
+
|
|
2481
2889
|
// Handle age verification
|
|
2482
2890
|
if (!sessionID && !!minAge && !birth) {
|
|
2483
2891
|
setShowAgeVerification(true);
|
|
2484
2892
|
setClickedStart(false);
|
|
2893
|
+
return;
|
|
2485
2894
|
}
|
|
2486
2895
|
// Handle authentication
|
|
2487
2896
|
else if (
|
|
@@ -2498,117 +2907,125 @@ const MemoriWidget = ({
|
|
|
2498
2907
|
}
|
|
2499
2908
|
// Create new session if needed
|
|
2500
2909
|
else if (!sessionID || initialSessionExpired) {
|
|
2501
|
-
setClickedStart(false);
|
|
2502
2910
|
setGotErrorInOpening(false);
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
:
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2911
|
+
if (sessionStartingRef.current) {
|
|
2912
|
+
return;
|
|
2913
|
+
}
|
|
2914
|
+
sessionStartingRef.current = true;
|
|
2915
|
+
try {
|
|
2916
|
+
const session = await fetchSession({
|
|
2917
|
+
memoriID: memori.engineMemoriID!,
|
|
2918
|
+
password: secret || memoriPwd || memori.secretToken,
|
|
2919
|
+
tag: personification?.tag,
|
|
2920
|
+
pin: personification?.pin,
|
|
2921
|
+
continueFromChatLogID: chatLog?.chatLogID,
|
|
2922
|
+
initialContextVars: {
|
|
2923
|
+
LANG: userLang,
|
|
2924
|
+
PATHNAME: window.location.pathname?.toUpperCase(),
|
|
2925
|
+
ROUTE:
|
|
2926
|
+
window.location.pathname?.split('/')?.pop()?.toUpperCase() ||
|
|
2927
|
+
'',
|
|
2928
|
+
...((!chatLog
|
|
2929
|
+
? initialContextVars
|
|
2930
|
+
: chatLog.lines[chatLog.lines.length - 1].contextVars) || {}),
|
|
2931
|
+
},
|
|
2932
|
+
initialQuestion: chatLog ? undefined : initialQuestion,
|
|
2933
|
+
birthDate: birth,
|
|
2934
|
+
additionalInfo: {
|
|
2935
|
+
...(additionalInfo || {}),
|
|
2936
|
+
loginToken: resolveLoginToken(),
|
|
2937
|
+
language: (
|
|
2938
|
+
userLang ??
|
|
2939
|
+
memori.culture?.split('-')?.[0] ??
|
|
2940
|
+
'IT'
|
|
2941
|
+
).toLowerCase(),
|
|
2942
|
+
timeZoneOffset: new Date().getTimezoneOffset().toString(),
|
|
2943
|
+
},
|
|
2944
|
+
});
|
|
2535
2945
|
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2946
|
+
if (session?.dialogState) {
|
|
2947
|
+
// reset history
|
|
2948
|
+
if (!chatLog) {
|
|
2949
|
+
setHistory([]);
|
|
2540
2950
|
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
(
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2951
|
+
// Use translateAndSpeak which already handles the speaking
|
|
2952
|
+
await translateAndSpeak(session.dialogState, userLang);
|
|
2953
|
+
// No need for additional handleSpeak call since translateAndSpeak already handles it
|
|
2954
|
+
setHasUserActivatedSpeak(true);
|
|
2955
|
+
setClickedStart(false);
|
|
2956
|
+
} else {
|
|
2957
|
+
const messages = chatLog.lines.map(
|
|
2958
|
+
(l, i) =>
|
|
2959
|
+
({
|
|
2960
|
+
text: l.text,
|
|
2961
|
+
media: l.media
|
|
2962
|
+
?.filter(m => allowedMediaTypes.includes(m.mimeType))
|
|
2963
|
+
?.map(m => ({
|
|
2964
|
+
mediumID: `${i}-${m.mimeType}`,
|
|
2965
|
+
...m,
|
|
2966
|
+
})),
|
|
2967
|
+
fromUser: l.inbound,
|
|
2968
|
+
llmUsage: (l as any).llmUsage,
|
|
2969
|
+
timestamp: l.timestamp,
|
|
2970
|
+
emitter: l.emitter,
|
|
2971
|
+
initial: i === 0,
|
|
2972
|
+
} as Message)
|
|
2973
|
+
);
|
|
2563
2974
|
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2975
|
+
// we dont remove the last one as it is the current state
|
|
2976
|
+
translatedMessages = messages ?? [];
|
|
2977
|
+
if (
|
|
2978
|
+
language.toUpperCase() !== userLang.toUpperCase() &&
|
|
2979
|
+
isMultilanguageEnabled
|
|
2980
|
+
) {
|
|
2981
|
+
try {
|
|
2982
|
+
translatedMessages = await Promise.all(
|
|
2983
|
+
messages.map(async m => {
|
|
2984
|
+
// If original text is present, the message is already translated
|
|
2985
|
+
if ('originalText' in m && m.originalText) {
|
|
2986
|
+
return m;
|
|
2987
|
+
}
|
|
2988
|
+
// Otherwise translate the message
|
|
2989
|
+
return {
|
|
2990
|
+
...m,
|
|
2991
|
+
originalText: m.text,
|
|
2992
|
+
text: (
|
|
2993
|
+
await getTranslation(
|
|
2994
|
+
m.text,
|
|
2995
|
+
userLang,
|
|
2996
|
+
language,
|
|
2997
|
+
baseUrl
|
|
2998
|
+
)
|
|
2999
|
+
).text,
|
|
3000
|
+
};
|
|
3001
|
+
})
|
|
3002
|
+
);
|
|
3003
|
+
} catch {
|
|
3004
|
+
// ignore translation errors
|
|
3005
|
+
}
|
|
2594
3006
|
}
|
|
2595
|
-
}
|
|
2596
3007
|
|
|
2597
|
-
|
|
3008
|
+
setHistory(translatedMessages);
|
|
2598
3009
|
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
3010
|
+
translateDialogState(
|
|
3011
|
+
session.dialogState,
|
|
3012
|
+
userLang,
|
|
3013
|
+
undefined,
|
|
3014
|
+
true
|
|
3015
|
+
).finally(() => {
|
|
3016
|
+
setHasUserActivatedSpeak(true);
|
|
3017
|
+
setClickedStart(false);
|
|
3018
|
+
});
|
|
3019
|
+
}
|
|
3020
|
+
} else if (session?.resultCode === 0) {
|
|
3021
|
+
sessionStartingRef.current = false;
|
|
3022
|
+
await onClickStart((session as any) || undefined);
|
|
3023
|
+
} else {
|
|
3024
|
+
setLoading(false);
|
|
3025
|
+
setClickedStart(false);
|
|
2607
3026
|
}
|
|
2608
|
-
}
|
|
2609
|
-
|
|
2610
|
-
} else {
|
|
2611
|
-
setLoading(false);
|
|
3027
|
+
} finally {
|
|
3028
|
+
sessionStartingRef.current = false;
|
|
2612
3029
|
}
|
|
2613
3030
|
|
|
2614
3031
|
return;
|
|
@@ -2621,9 +3038,7 @@ const MemoriWidget = ({
|
|
|
2621
3038
|
|
|
2622
3039
|
if (response.resultCode !== 0 || !currentState) {
|
|
2623
3040
|
const { chatLogs } = await getSessionChatLogs(sessionID!, sessionID!);
|
|
2624
|
-
setGotErrorInOpening(true);
|
|
2625
3041
|
setSessionId(undefined);
|
|
2626
|
-
setClickedStart(false);
|
|
2627
3042
|
await onClickStart(undefined, true, chatLogs?.[0]);
|
|
2628
3043
|
return;
|
|
2629
3044
|
}
|
|
@@ -2649,11 +3064,11 @@ const MemoriWidget = ({
|
|
|
2649
3064
|
|
|
2650
3065
|
if (session && session.resultCode === 0) {
|
|
2651
3066
|
await translateAndSpeak(session.currentState, userLang);
|
|
3067
|
+
setClickedStart(false);
|
|
2652
3068
|
} else {
|
|
2653
3069
|
throw new Error('No session');
|
|
2654
3070
|
}
|
|
2655
|
-
} catch
|
|
2656
|
-
console.error('[onClickStart] Error changing tag:', e);
|
|
3071
|
+
} catch {
|
|
2657
3072
|
reopenSession(
|
|
2658
3073
|
true,
|
|
2659
3074
|
memori?.secretToken,
|
|
@@ -2672,6 +3087,7 @@ const MemoriWidget = ({
|
|
|
2672
3087
|
birth
|
|
2673
3088
|
).then(() => {
|
|
2674
3089
|
setHasUserActivatedSpeak(true);
|
|
3090
|
+
setClickedStart(false);
|
|
2675
3091
|
});
|
|
2676
3092
|
}
|
|
2677
3093
|
}
|
|
@@ -2694,6 +3110,7 @@ const MemoriWidget = ({
|
|
|
2694
3110
|
|
|
2695
3111
|
if (session && session.resultCode === 0) {
|
|
2696
3112
|
await translateAndSpeak(session.currentState, userLang);
|
|
3113
|
+
setClickedStart(false);
|
|
2697
3114
|
} else {
|
|
2698
3115
|
throw new Error('No session');
|
|
2699
3116
|
}
|
|
@@ -2716,6 +3133,7 @@ const MemoriWidget = ({
|
|
|
2716
3133
|
birth
|
|
2717
3134
|
).then(() => {
|
|
2718
3135
|
setHasUserActivatedSpeak(true);
|
|
3136
|
+
setClickedStart(false);
|
|
2719
3137
|
});
|
|
2720
3138
|
}
|
|
2721
3139
|
}
|
|
@@ -2762,14 +3180,14 @@ const MemoriWidget = ({
|
|
|
2762
3180
|
).text,
|
|
2763
3181
|
}))
|
|
2764
3182
|
);
|
|
2765
|
-
} catch
|
|
2766
|
-
|
|
3183
|
+
} catch {
|
|
3184
|
+
// ignore translation errors
|
|
2767
3185
|
}
|
|
2768
3186
|
}
|
|
2769
3187
|
|
|
2770
3188
|
setHistory(translatedMessages);
|
|
2771
|
-
} catch
|
|
2772
|
-
|
|
3189
|
+
} catch {
|
|
3190
|
+
// ignore chat log retrieval errors
|
|
2773
3191
|
}
|
|
2774
3192
|
|
|
2775
3193
|
if (
|
|
@@ -2778,6 +3196,7 @@ const MemoriWidget = ({
|
|
|
2778
3196
|
) {
|
|
2779
3197
|
// we have a history, don't push message
|
|
2780
3198
|
setHasUserActivatedSpeak(true);
|
|
3199
|
+
setClickedStart(false);
|
|
2781
3200
|
await translateAndSpeak(
|
|
2782
3201
|
currentState,
|
|
2783
3202
|
userLang,
|
|
@@ -2787,16 +3206,13 @@ const MemoriWidget = ({
|
|
|
2787
3206
|
!!translatedMessages?.length
|
|
2788
3207
|
);
|
|
2789
3208
|
} else {
|
|
2790
|
-
console.log('[onClickStart] Starting with initial question');
|
|
2791
3209
|
// remove default initial message
|
|
2792
3210
|
translatedMessages = [];
|
|
2793
3211
|
setHistory([]);
|
|
2794
3212
|
|
|
2795
|
-
setMemoriTyping(true);
|
|
2796
|
-
|
|
2797
3213
|
// we have no chat history, we start by initial question
|
|
2798
3214
|
const placeSpec = getPlaceSpecForEnterText(position);
|
|
2799
|
-
const response = await
|
|
3215
|
+
const response = await postEnterTextAsync({
|
|
2800
3216
|
sessionId: sessionID!,
|
|
2801
3217
|
text: initialQuestion,
|
|
2802
3218
|
...(memori.needsDateTime && {
|
|
@@ -2804,8 +3220,7 @@ const MemoriWidget = ({
|
|
|
2804
3220
|
}),
|
|
2805
3221
|
...(placeSpec !== undefined && { place: placeSpec }),
|
|
2806
3222
|
});
|
|
2807
|
-
|
|
2808
|
-
// Handle 500 error from TextEnteredEvent
|
|
3223
|
+
// Handle 500 error from EnterTextAsync
|
|
2809
3224
|
if (response.resultCode === 500 && response.resultMessage) {
|
|
2810
3225
|
setHistory(h => [
|
|
2811
3226
|
...h,
|
|
@@ -2818,16 +3233,36 @@ const MemoriWidget = ({
|
|
|
2818
3233
|
date: new Date().toISOString(),
|
|
2819
3234
|
},
|
|
2820
3235
|
]);
|
|
2821
|
-
setMemoriTyping(false);
|
|
2822
3236
|
return;
|
|
2823
3237
|
}
|
|
2824
3238
|
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
3239
|
+
const onClickStartCorrelationID = readCorrelationID(response);
|
|
3240
|
+
if (response.resultCode === 0 && onClickStartCorrelationID) {
|
|
3241
|
+
setMemoriTyping(true);
|
|
3242
|
+
try {
|
|
3243
|
+
const natsEvent = await waitForEnterTextNatsResponse(
|
|
3244
|
+
onClickStartCorrelationID
|
|
3245
|
+
);
|
|
3246
|
+
if (natsEvent.resultCode === 0 && natsEvent.currentState) {
|
|
3247
|
+
await translateAndSpeak(
|
|
3248
|
+
natsEvent.currentState,
|
|
3249
|
+
userLang,
|
|
3250
|
+
undefined,
|
|
3251
|
+
false
|
|
3252
|
+
);
|
|
3253
|
+
setClickedStart(false);
|
|
3254
|
+
}
|
|
3255
|
+
} catch (err) {
|
|
3256
|
+
logWidgetError('onClickStart NATS wait failed', err);
|
|
3257
|
+
setMemoriTyping(false);
|
|
3258
|
+
setTypingText(undefined);
|
|
3259
|
+
}
|
|
3260
|
+
} else if (response.resultCode === 0) {
|
|
3261
|
+
logWidgetError(
|
|
3262
|
+
'onClickStart enter-text missing correlationID',
|
|
3263
|
+
response
|
|
3264
|
+
);
|
|
3265
|
+
}
|
|
2831
3266
|
}
|
|
2832
3267
|
}
|
|
2833
3268
|
}
|
|
@@ -2838,6 +3273,7 @@ const MemoriWidget = ({
|
|
|
2838
3273
|
|
|
2839
3274
|
// everything is fine, just translate dialog state and activate chat
|
|
2840
3275
|
await translateAndSpeak(dialogState!, userLang);
|
|
3276
|
+
setClickedStart(false);
|
|
2841
3277
|
}
|
|
2842
3278
|
},
|
|
2843
3279
|
[memoriPwd, memori, memoriTokens, birthDate, sessionId, userLang, position]
|
|
@@ -2845,19 +3281,51 @@ const MemoriWidget = ({
|
|
|
2845
3281
|
|
|
2846
3282
|
const setPositionPopoverOpen = useCallback(
|
|
2847
3283
|
(open: boolean) => {
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
3284
|
+
const sessionAlreadyStarted = !!(sessionId && hasUserActivatedSpeak);
|
|
3285
|
+
setPositionPopoverOpenState(wasOpen => {
|
|
3286
|
+
if (
|
|
3287
|
+
shouldRestartSessionOnPositionPopoverClose(
|
|
3288
|
+
wasOpen,
|
|
3289
|
+
open,
|
|
3290
|
+
autoStart,
|
|
3291
|
+
sessionAlreadyStarted
|
|
3292
|
+
)
|
|
3293
|
+
) {
|
|
3294
|
+
// Defer: React setState updaters must stay pure.
|
|
3295
|
+
queueMicrotask(() => {
|
|
3296
|
+
onClickStart();
|
|
3297
|
+
});
|
|
3298
|
+
}
|
|
3299
|
+
if (!open) {
|
|
3300
|
+
queueMicrotask(() => {
|
|
3301
|
+
setAutoStartPositionGeolocation(false);
|
|
3302
|
+
});
|
|
3303
|
+
}
|
|
3304
|
+
return open;
|
|
3305
|
+
});
|
|
2852
3306
|
},
|
|
2853
|
-
[autoStart, onClickStart]
|
|
3307
|
+
[autoStart, onClickStart, sessionId, hasUserActivatedSpeak]
|
|
2854
3308
|
);
|
|
2855
3309
|
|
|
2856
3310
|
useEffect(() => {
|
|
2857
|
-
if (
|
|
3311
|
+
if (
|
|
3312
|
+
!clickedStart &&
|
|
3313
|
+
!sessionStartingRef.current &&
|
|
3314
|
+
!sessionId &&
|
|
3315
|
+
autoStart &&
|
|
3316
|
+
selectedLayout !== 'HIDDEN_CHAT' &&
|
|
3317
|
+
(!needsCredits || hasEnoughCredits)
|
|
3318
|
+
) {
|
|
2858
3319
|
onClickStart();
|
|
2859
3320
|
}
|
|
2860
|
-
}, [
|
|
3321
|
+
}, [
|
|
3322
|
+
clickedStart,
|
|
3323
|
+
autoStart,
|
|
3324
|
+
selectedLayout,
|
|
3325
|
+
sessionId,
|
|
3326
|
+
needsCredits,
|
|
3327
|
+
hasEnoughCredits,
|
|
3328
|
+
]);
|
|
2861
3329
|
|
|
2862
3330
|
useEffect(() => {
|
|
2863
3331
|
const targetNode =
|
|
@@ -2868,29 +3336,31 @@ const MemoriWidget = ({
|
|
|
2868
3336
|
return;
|
|
2869
3337
|
}
|
|
2870
3338
|
|
|
3339
|
+
const propsToken = additionalInfo?.loginToken ?? authToken;
|
|
3340
|
+
const initialDomToken = targetNode.getAttribute('authtoken') || undefined;
|
|
3341
|
+
if (initialDomToken && !propsToken) {
|
|
3342
|
+
setLoginToken(initialDomToken);
|
|
3343
|
+
userTokenRef.current = initialDomToken;
|
|
3344
|
+
}
|
|
3345
|
+
|
|
3346
|
+
const applyAuthTokenFromElement = (element: Element) => {
|
|
3347
|
+
const clientNode =
|
|
3348
|
+
element.nodeName === 'MEMORI-CLIENT'
|
|
3349
|
+
? element
|
|
3350
|
+
: element.closest('memori-client') ?? element.parentElement;
|
|
3351
|
+
const token = clientNode?.getAttribute('authtoken') || undefined;
|
|
3352
|
+
setLoginToken(token);
|
|
3353
|
+
userTokenRef.current = token;
|
|
3354
|
+
};
|
|
3355
|
+
|
|
2871
3356
|
const config = { attributes: true, childList: false, subtree: false };
|
|
2872
|
-
const callback: MutationCallback =
|
|
3357
|
+
const callback: MutationCallback = mutationList => {
|
|
2873
3358
|
for (const mutation of mutationList) {
|
|
2874
3359
|
if (
|
|
2875
3360
|
mutation.type === 'attributes' &&
|
|
2876
3361
|
mutation.attributeName?.toLowerCase() === 'authtoken'
|
|
2877
3362
|
) {
|
|
2878
|
-
|
|
2879
|
-
setLoginToken(
|
|
2880
|
-
// @ts-ignore
|
|
2881
|
-
mutation.target.getAttribute('authtoken') || undefined
|
|
2882
|
-
);
|
|
2883
|
-
// @ts-ignore
|
|
2884
|
-
userToken = mutation.target.getAttribute('authtoken') || undefined;
|
|
2885
|
-
} else {
|
|
2886
|
-
// @ts-ignore
|
|
2887
|
-
setLoginToken(
|
|
2888
|
-
mutation.target?.parentElement?.getAttribute('authtoken') ||
|
|
2889
|
-
undefined
|
|
2890
|
-
);
|
|
2891
|
-
// @ts-ignore
|
|
2892
|
-
userToken = mutation.target.getAttribute('authtoken') || undefined;
|
|
2893
|
-
}
|
|
3363
|
+
applyAuthTokenFromElement(mutation.target as Element);
|
|
2894
3364
|
}
|
|
2895
3365
|
}
|
|
2896
3366
|
};
|
|
@@ -2900,7 +3370,7 @@ const MemoriWidget = ({
|
|
|
2900
3370
|
return () => {
|
|
2901
3371
|
observer.disconnect();
|
|
2902
3372
|
};
|
|
2903
|
-
}, []);
|
|
3373
|
+
}, [memori.name, memori.memoriID, additionalInfo?.loginToken, authToken]);
|
|
2904
3374
|
|
|
2905
3375
|
/**
|
|
2906
3376
|
* Experts references
|
|
@@ -2914,11 +3384,9 @@ const MemoriWidget = ({
|
|
|
2914
3384
|
|
|
2915
3385
|
if (resp.resultCode === 0) {
|
|
2916
3386
|
setExperts(experts);
|
|
2917
|
-
} else {
|
|
2918
|
-
console.warn('Error fetching experts', resp);
|
|
2919
3387
|
}
|
|
2920
|
-
} catch
|
|
2921
|
-
|
|
3388
|
+
} catch {
|
|
3389
|
+
// ignore expert fetch errors
|
|
2922
3390
|
}
|
|
2923
3391
|
}, [sessionId, memori?.enableBoardOfExperts]);
|
|
2924
3392
|
useEffect(() => {
|
|
@@ -2931,39 +3399,74 @@ const MemoriWidget = ({
|
|
|
2931
3399
|
!!user?.userID &&
|
|
2932
3400
|
user?.pAndCUAccepted;
|
|
2933
3401
|
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
3402
|
+
const handleNotEnoughCredits = useCallback(() => {
|
|
3403
|
+
setHasEnoughCredits(false);
|
|
3404
|
+
setAuthModalState(null);
|
|
3405
|
+
add(
|
|
3406
|
+
createAlertOptions({
|
|
3407
|
+
description: t('notEnoughCredits'),
|
|
3408
|
+
severity: 'error',
|
|
3409
|
+
})
|
|
3410
|
+
);
|
|
3411
|
+
}, [add, t]);
|
|
3412
|
+
const checkCredits = useCallback(
|
|
3413
|
+
async (options?: { notify?: boolean }) => {
|
|
3414
|
+
if (!tenant?.billingDelegation) return true;
|
|
3415
|
+
|
|
3416
|
+
// Billing delegation is active: credits MUST be verified.
|
|
3417
|
+
// Without either owner identifier we cannot call the API, so we fail closed
|
|
3418
|
+
// instead of silently letting the session start unverified.
|
|
3419
|
+
if (!ownerUserID && !ownerUserName) {
|
|
3420
|
+
if (options?.notify) {
|
|
3421
|
+
handleNotEnoughCredits();
|
|
3422
|
+
} else {
|
|
3423
|
+
setHasEnoughCredits(false);
|
|
3424
|
+
}
|
|
3425
|
+
return false;
|
|
3426
|
+
}
|
|
2939
3427
|
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
3428
|
+
try {
|
|
3429
|
+
const resp = await getCredits({
|
|
3430
|
+
operation: deepThoughtEnabled
|
|
3431
|
+
? 'dt_session_creation'
|
|
3432
|
+
: 'session_creation',
|
|
3433
|
+
baseUrl: baseUrl,
|
|
3434
|
+
userID: ownerUserID,
|
|
3435
|
+
userName: ownerUserName,
|
|
3436
|
+
tenant: tenantID,
|
|
3437
|
+
});
|
|
2950
3438
|
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
3439
|
+
if (resp.enough) {
|
|
3440
|
+
setHasEnoughCredits(true);
|
|
3441
|
+
return true;
|
|
3442
|
+
} else {
|
|
3443
|
+
if (options?.notify) {
|
|
3444
|
+
handleNotEnoughCredits();
|
|
3445
|
+
} else {
|
|
3446
|
+
setHasEnoughCredits(false);
|
|
3447
|
+
}
|
|
3448
|
+
return false;
|
|
3449
|
+
}
|
|
3450
|
+
} catch (err) {
|
|
3451
|
+
logWidgetError('checkCredits failed', err);
|
|
3452
|
+
return true;
|
|
2956
3453
|
}
|
|
2957
|
-
}
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
3454
|
+
},
|
|
3455
|
+
[
|
|
3456
|
+
baseUrl,
|
|
3457
|
+
deepThoughtEnabled,
|
|
3458
|
+
handleNotEnoughCredits,
|
|
3459
|
+
ownerUserID,
|
|
3460
|
+
ownerUserName,
|
|
3461
|
+
tenant?.billingDelegation,
|
|
3462
|
+
tenantID,
|
|
3463
|
+
]
|
|
3464
|
+
);
|
|
2962
3465
|
useEffect(() => {
|
|
2963
3466
|
if (tenant?.billingDelegation) {
|
|
2964
3467
|
checkCredits();
|
|
2965
3468
|
}
|
|
2966
|
-
}, [tenant?.billingDelegation, deepThoughtEnabled]);
|
|
3469
|
+
}, [tenant?.billingDelegation, deepThoughtEnabled, checkCredits]);
|
|
2967
3470
|
|
|
2968
3471
|
useEffect(() => {
|
|
2969
3472
|
if (__WEBCOMPONENT__) return;
|
|
@@ -3006,6 +3509,7 @@ const MemoriWidget = ({
|
|
|
3006
3509
|
setVenue: setPosition,
|
|
3007
3510
|
positionPopoverOpen,
|
|
3008
3511
|
setPositionPopoverOpen,
|
|
3512
|
+
autoStartPositionGeolocation,
|
|
3009
3513
|
setShowSettingsDrawer,
|
|
3010
3514
|
setShowKnownFactsDrawer,
|
|
3011
3515
|
setShowExpertsDrawer,
|
|
@@ -3017,7 +3521,9 @@ const MemoriWidget = ({
|
|
|
3017
3521
|
setShowChatHistoryDrawer,
|
|
3018
3522
|
showSettings: showSettings ?? integrationConfig?.showSettings ?? true,
|
|
3019
3523
|
showChatHistory:
|
|
3020
|
-
|
|
3524
|
+
selectedLayout === 'WEBSITE_ASSISTANT'
|
|
3525
|
+
? false
|
|
3526
|
+
: showChatHistory ?? integrationConfig?.showChatHistory ?? true,
|
|
3021
3527
|
showMessageConsumption: enableMessageConsumption,
|
|
3022
3528
|
hasUserActivatedSpeak,
|
|
3023
3529
|
showReload: selectedLayout === 'TOTEM',
|
|
@@ -3036,7 +3542,7 @@ const MemoriWidget = ({
|
|
|
3036
3542
|
setShowLoginDrawer(false);
|
|
3037
3543
|
setUser(undefined);
|
|
3038
3544
|
setLoginToken(undefined);
|
|
3039
|
-
|
|
3545
|
+
userTokenRef.current = undefined;
|
|
3040
3546
|
removeLocalConfig('loginToken');
|
|
3041
3547
|
});
|
|
3042
3548
|
},
|
|
@@ -3073,7 +3579,10 @@ const MemoriWidget = ({
|
|
|
3073
3579
|
apiUrl: client.constants.BACKEND_URL,
|
|
3074
3580
|
position: position,
|
|
3075
3581
|
setVenue: setPosition,
|
|
3076
|
-
openPositionPopover: () =>
|
|
3582
|
+
openPositionPopover: () => {
|
|
3583
|
+
setAutoStartPositionGeolocation(true);
|
|
3584
|
+
setPositionPopoverOpen(true);
|
|
3585
|
+
},
|
|
3077
3586
|
integrationConfig: integrationConfig,
|
|
3078
3587
|
instruct: instruct,
|
|
3079
3588
|
sessionId: sessionId,
|
|
@@ -3086,7 +3595,9 @@ const MemoriWidget = ({
|
|
|
3086
3595
|
showLogin: canShowLoginButton,
|
|
3087
3596
|
setShowLoginDrawer,
|
|
3088
3597
|
showChatHistory:
|
|
3089
|
-
|
|
3598
|
+
selectedLayout === 'WEBSITE_ASSISTANT'
|
|
3599
|
+
? false
|
|
3600
|
+
: showChatHistory ?? integrationConfig?.showChatHistory ?? true,
|
|
3090
3601
|
setShowChatHistoryDrawer,
|
|
3091
3602
|
user,
|
|
3092
3603
|
};
|
|
@@ -3113,8 +3624,7 @@ const MemoriWidget = ({
|
|
|
3113
3624
|
showTypingText:
|
|
3114
3625
|
showTypingText ?? integrationConfig?.showTypingText ?? false,
|
|
3115
3626
|
history: showFullHistory ? history : history.slice(-2),
|
|
3116
|
-
authToken:
|
|
3117
|
-
loginToken ?? userToken ?? additionalInfo?.loginToken ?? authToken,
|
|
3627
|
+
authToken: resolveLoginToken(),
|
|
3118
3628
|
dialogState: currentDialogState,
|
|
3119
3629
|
pushMessage,
|
|
3120
3630
|
simulateUserPrompt,
|
|
@@ -3170,24 +3680,19 @@ const MemoriWidget = ({
|
|
|
3170
3680
|
isChatlogPanel:
|
|
3171
3681
|
(integrationConfig as { artifactChatLogPanel?: boolean } | undefined)
|
|
3172
3682
|
?.artifactChatLogPanel === true,
|
|
3683
|
+
globalBackground: globalBackground || undefined,
|
|
3173
3684
|
};
|
|
3174
3685
|
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
style={{ backgroundImage: globalBackgroundUrl }}
|
|
3181
|
-
/>
|
|
3182
|
-
</div>
|
|
3183
|
-
) : (
|
|
3184
|
-
<div className="memori--global-background no-background-image" />
|
|
3185
|
-
);
|
|
3686
|
+
// Layout chrome placeholder (e.g. Totem gradient when no image). The actual
|
|
3687
|
+
// integration background image is applied on `.memori-chat--content` via chatProps.
|
|
3688
|
+
const integrationBackground = (
|
|
3689
|
+
<div className="memori--global-background no-background-image" />
|
|
3690
|
+
);
|
|
3186
3691
|
|
|
3187
3692
|
const integrationStyle =
|
|
3188
3693
|
integration &&
|
|
3189
3694
|
(Object.keys(integrationProperties).length > 0 ||
|
|
3190
|
-
integrationConfig?.blurBackground) ? (
|
|
3695
|
+
integrationConfig?.blurBackground === false) ? (
|
|
3191
3696
|
<style dangerouslySetInnerHTML={{ __html: integrationStylesheet }} />
|
|
3192
3697
|
) : null;
|
|
3193
3698
|
|
|
@@ -3216,9 +3721,17 @@ const MemoriWidget = ({
|
|
|
3216
3721
|
? ZoomedFullBodyLayout
|
|
3217
3722
|
: FullPageLayout;
|
|
3218
3723
|
|
|
3724
|
+
// Resolve the widget theme once so both `data-theme` on the root and the
|
|
3725
|
+
// `MemoriUIProvider` (which stamps portaled popups) stay in sync.
|
|
3726
|
+
// Prefer integration config; default to light when unset.
|
|
3727
|
+
const widgetTheme: 'light' | 'dark' =
|
|
3728
|
+
integrationConfig?.theme === 'light' || integrationConfig?.theme === 'dark'
|
|
3729
|
+
? integrationConfig.theme
|
|
3730
|
+
: 'light';
|
|
3731
|
+
|
|
3219
3732
|
return (
|
|
3220
3733
|
<div
|
|
3221
|
-
ref={
|
|
3734
|
+
ref={setWidgetRootEl}
|
|
3222
3735
|
className={cx(
|
|
3223
3736
|
'memori',
|
|
3224
3737
|
'memori-widget',
|
|
@@ -3236,12 +3749,7 @@ const MemoriWidget = ({
|
|
|
3236
3749
|
'memori--has-active-session': !!sessionId,
|
|
3237
3750
|
}
|
|
3238
3751
|
)}
|
|
3239
|
-
data-theme={
|
|
3240
|
-
integrationConfig?.theme === 'light' ||
|
|
3241
|
-
integrationConfig?.theme === 'dark'
|
|
3242
|
-
? integrationConfig.theme
|
|
3243
|
-
: undefined
|
|
3244
|
-
}
|
|
3752
|
+
data-theme={widgetTheme}
|
|
3245
3753
|
data-memori-name={memori?.name}
|
|
3246
3754
|
data-memori-id={memori?.engineMemoriID}
|
|
3247
3755
|
data-memori-secondary-id={memori?.memoriID}
|
|
@@ -3253,304 +3761,326 @@ const MemoriWidget = ({
|
|
|
3253
3761
|
})}
|
|
3254
3762
|
style={{ height }}
|
|
3255
3763
|
>
|
|
3256
|
-
<
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3764
|
+
<MemoriUIProvider container={widgetRootEl} theme={widgetTheme}>
|
|
3765
|
+
{/* Inside themed root so alert text uses dark-theme tokens (white). */}
|
|
3766
|
+
<AlertViewport placement="top-end" style={{ zIndex: 10002 }} />
|
|
3767
|
+
<WidgetSurfaceProvider value={widgetSurfaceEl}>
|
|
3768
|
+
<div ref={setWidgetSurfaceEl} className="memori-widget__surface">
|
|
3769
|
+
<Layout
|
|
3770
|
+
Header={Header}
|
|
3771
|
+
headerProps={headerProps}
|
|
3772
|
+
Avatar={Avatar}
|
|
3773
|
+
avatarProps={avatarProps}
|
|
3774
|
+
Chat={Chat}
|
|
3775
|
+
chatProps={chatProps}
|
|
3776
|
+
StartPanel={StartPanel}
|
|
3777
|
+
startPanelProps={startPanelProps}
|
|
3778
|
+
integrationStyle={integrationStyle}
|
|
3779
|
+
integrationBackground={integrationBackground}
|
|
3780
|
+
poweredBy={poweredBy}
|
|
3781
|
+
autoStart={autoStart}
|
|
3782
|
+
sessionId={sessionId}
|
|
3783
|
+
hasUserActivatedSpeak={hasUserActivatedSpeak}
|
|
3784
|
+
loading={loading}
|
|
3785
|
+
avatar3dHidden={
|
|
3786
|
+
avatar3dHidden ?? integrationConfig?.avatar_3d_hidden
|
|
3787
|
+
}
|
|
3788
|
+
totemContentMaxWidth={integrationConfig?.totemContentMaxWidth}
|
|
3789
|
+
/>
|
|
3790
|
+
|
|
3791
|
+
<ArtifactAPIBridge
|
|
3792
|
+
pushMessage={(message: Message) => {
|
|
3793
|
+
setHistory(history => {
|
|
3794
|
+
if (!history.length) return history;
|
|
3795
|
+
const lastMessage = history[history.length - 1];
|
|
3796
|
+
if (!lastMessage || lastMessage.fromUser) return history;
|
|
3797
|
+
// Create a new message object with the updated text
|
|
3798
|
+
const updatedLastMessage = {
|
|
3799
|
+
...lastMessage,
|
|
3800
|
+
text: lastMessage.text + message.text,
|
|
3801
|
+
};
|
|
3802
|
+
return [...history.slice(0, -1), updatedLastMessage];
|
|
3803
|
+
});
|
|
3804
|
+
}}
|
|
3805
|
+
/>
|
|
3806
|
+
|
|
3807
|
+
<audio
|
|
3808
|
+
id="memori-audio"
|
|
3809
|
+
style={{ display: 'none' }}
|
|
3810
|
+
src="https://aisuru.com/intro.mp3"
|
|
3811
|
+
/>
|
|
3812
|
+
|
|
3813
|
+
{isClient && (
|
|
3814
|
+
<MemoriAuth
|
|
3815
|
+
withModal
|
|
3816
|
+
pwdOrTokens={authModalState}
|
|
3817
|
+
openModal={!!authModalState}
|
|
3818
|
+
setPwdOrTokens={setAuthModalState}
|
|
3819
|
+
showTokens={memori.privacyType === 'SECRET'}
|
|
3820
|
+
onFinish={(values: any) => {
|
|
3821
|
+
if (values['password']) setMemoriPwd(values['password']);
|
|
3822
|
+
if (values['password']) memoriPassword = values['password'];
|
|
3823
|
+
if (values['tokens']) setMemoriTokens(values['tokens']);
|
|
3824
|
+
|
|
3825
|
+
return reopenSession(
|
|
3826
|
+
!sessionId,
|
|
3827
|
+
values['password'],
|
|
3828
|
+
values['tokens'],
|
|
3829
|
+
personification?.tag,
|
|
3830
|
+
personification?.pin,
|
|
3831
|
+
{
|
|
3832
|
+
LANG: userLang,
|
|
3833
|
+
PATHNAME: window.location.pathname?.toUpperCase(),
|
|
3834
|
+
ROUTE:
|
|
3835
|
+
window.location.pathname
|
|
3836
|
+
?.split('/')
|
|
3837
|
+
?.pop()
|
|
3838
|
+
?.toUpperCase() || '',
|
|
3839
|
+
...(initialContextVars || {}),
|
|
3840
|
+
},
|
|
3841
|
+
initialQuestion,
|
|
3842
|
+
birthDate
|
|
3843
|
+
)
|
|
3844
|
+
.then(state => {
|
|
3845
|
+
if (!state?.sessionID) {
|
|
3846
|
+
throw new Error('AUTH_FAILED');
|
|
3847
|
+
}
|
|
3848
|
+
|
|
3849
|
+
setAuthModalState(null);
|
|
3850
|
+
// If we got a valid state from reopenSession, don't call onClickStart again
|
|
3851
|
+
// to avoid duplicate snippet execution
|
|
3852
|
+
if (state?.dialogState) {
|
|
3853
|
+
setHasUserActivatedSpeak(true);
|
|
3854
|
+
} else {
|
|
3855
|
+
// Only call onClickStart if reopenSession didn't return a valid state
|
|
3856
|
+
onClickStart(state);
|
|
3857
|
+
}
|
|
3858
|
+
})
|
|
3859
|
+
.catch(error => {
|
|
3860
|
+
if (
|
|
3861
|
+
!(error instanceof Error) ||
|
|
3862
|
+
error.message !== 'AUTH_FAILED'
|
|
3863
|
+
) {
|
|
3864
|
+
setGotErrorInOpening(true);
|
|
3865
|
+
}
|
|
3866
|
+
throw error;
|
|
3867
|
+
});
|
|
3868
|
+
}}
|
|
3869
|
+
minimumNumberOfRecoveryTokens={
|
|
3870
|
+
memori?.minimumNumberOfRecoveryTokens ?? 1
|
|
3329
3871
|
}
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
}
|
|
3337
|
-
|
|
3338
|
-
|
|
3872
|
+
/>
|
|
3873
|
+
)}
|
|
3874
|
+
|
|
3875
|
+
{isClient && (
|
|
3876
|
+
<AgeVerificationModal
|
|
3877
|
+
visible={showAgeVerification}
|
|
3878
|
+
minAge={minAge}
|
|
3879
|
+
onClose={birthDate => {
|
|
3880
|
+
if (birthDate) {
|
|
3881
|
+
setBirthDate(birthDate);
|
|
3882
|
+
|
|
3883
|
+
setLocalConfig('birthDate', birthDate);
|
|
3884
|
+
|
|
3885
|
+
reopenSession(
|
|
3886
|
+
!sessionId,
|
|
3887
|
+
memoriPassword || memoriPwd || memori?.secretToken,
|
|
3888
|
+
memoriTokens,
|
|
3889
|
+
personification?.tag,
|
|
3890
|
+
personification?.pin,
|
|
3891
|
+
{
|
|
3892
|
+
LANG: userLang,
|
|
3893
|
+
PATHNAME: window.location.pathname?.toUpperCase(),
|
|
3894
|
+
ROUTE:
|
|
3895
|
+
window.location.pathname
|
|
3896
|
+
?.split('/')
|
|
3897
|
+
?.pop()
|
|
3898
|
+
?.toUpperCase() || '',
|
|
3899
|
+
...(initialContextVars || {}),
|
|
3900
|
+
},
|
|
3901
|
+
initialQuestion,
|
|
3902
|
+
birthDate
|
|
3903
|
+
)
|
|
3904
|
+
.then(state => {
|
|
3905
|
+
setShowAgeVerification(false);
|
|
3906
|
+
setAuthModalState(null);
|
|
3907
|
+
onClickStart(state || undefined);
|
|
3908
|
+
})
|
|
3909
|
+
.catch(() => {
|
|
3910
|
+
setShowAgeVerification(false);
|
|
3911
|
+
setGotErrorInOpening(true);
|
|
3912
|
+
});
|
|
3913
|
+
} else {
|
|
3914
|
+
setShowAgeVerification(false);
|
|
3915
|
+
setClickedStart(false);
|
|
3916
|
+
}
|
|
3917
|
+
}}
|
|
3918
|
+
/>
|
|
3919
|
+
)}
|
|
3920
|
+
|
|
3921
|
+
{showSettingsDrawer && (
|
|
3922
|
+
<SettingsDrawer
|
|
3923
|
+
layout={selectedLayout}
|
|
3924
|
+
open={!!showSettingsDrawer}
|
|
3925
|
+
onClose={() => setShowSettingsDrawer(false)}
|
|
3926
|
+
microphoneMode={
|
|
3927
|
+
continuousSpeech ? 'CONTINUOUS' : 'HOLD_TO_TALK'
|
|
3339
3928
|
}
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
!(error instanceof Error) ||
|
|
3344
|
-
error.message !== 'AUTH_FAILED'
|
|
3345
|
-
) {
|
|
3346
|
-
setGotErrorInOpening(true);
|
|
3929
|
+
continuousSpeechTimeout={continuousSpeechTimeout}
|
|
3930
|
+
setMicrophoneMode={mode =>
|
|
3931
|
+
setContinuousSpeech(mode === 'CONTINUOUS')
|
|
3347
3932
|
}
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
{
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
}
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
)}
|
|
3425
|
-
|
|
3426
|
-
{showChatHistoryDrawer && (
|
|
3427
|
-
<ChatHistoryDrawer
|
|
3428
|
-
open={!!showChatHistoryDrawer}
|
|
3429
|
-
onClose={() => setShowChatHistoryDrawer(false)}
|
|
3430
|
-
resumeSession={chatLog => {
|
|
3431
|
-
setChatLogID(chatLog.chatLogID);
|
|
3432
|
-
onClickStart(undefined, false, chatLog);
|
|
3433
|
-
setShowChatHistoryDrawer(false);
|
|
3434
|
-
}}
|
|
3435
|
-
apiClient={client}
|
|
3436
|
-
sessionId={sessionId || ''}
|
|
3437
|
-
memori={memori}
|
|
3438
|
-
baseUrl={baseUrl}
|
|
3439
|
-
history={history}
|
|
3440
|
-
apiUrl={client.constants.BACKEND_URL}
|
|
3441
|
-
loginToken={loginToken}
|
|
3442
|
-
language={language}
|
|
3443
|
-
userLang={userLang}
|
|
3444
|
-
isMultilanguageEnabled={isMultilanguageEnabled}
|
|
3445
|
-
/>
|
|
3446
|
-
)}
|
|
3447
|
-
|
|
3448
|
-
{showKnownFactsDrawer && sessionId && (
|
|
3449
|
-
<KnownFacts
|
|
3450
|
-
apiClient={client}
|
|
3451
|
-
memori={memori}
|
|
3452
|
-
sessionID={sessionId}
|
|
3453
|
-
visible={showKnownFactsDrawer}
|
|
3454
|
-
closeDrawer={() => setShowKnownFactsDrawer(false)}
|
|
3455
|
-
/>
|
|
3456
|
-
)}
|
|
3457
|
-
|
|
3458
|
-
{showExpertsDrawer && !!experts && (
|
|
3459
|
-
<ExpertsDrawer
|
|
3460
|
-
apiUrl={client.constants.BACKEND_URL}
|
|
3461
|
-
baseUrl={baseUrl}
|
|
3462
|
-
tenant={tenant}
|
|
3463
|
-
experts={experts}
|
|
3464
|
-
open={showExpertsDrawer}
|
|
3465
|
-
onClose={() => setShowExpertsDrawer(false)}
|
|
3466
|
-
/>
|
|
3467
|
-
)}
|
|
3468
|
-
|
|
3469
|
-
{showLoginDrawer && tenant?.name && (
|
|
3470
|
-
<LoginDrawer
|
|
3471
|
-
tenant={tenant}
|
|
3472
|
-
apiClient={client}
|
|
3473
|
-
open={!!showLoginDrawer}
|
|
3474
|
-
user={user}
|
|
3475
|
-
loginToken={loginToken}
|
|
3476
|
-
onClose={() => setShowLoginDrawer(false)}
|
|
3477
|
-
drawerClassName={
|
|
3478
|
-
selectedLayout === 'WEBSITE_ASSISTANT'
|
|
3479
|
-
? 'memori-drawer--above-website-assistant'
|
|
3480
|
-
: undefined
|
|
3481
|
-
}
|
|
3482
|
-
onLogin={(user, token) => {
|
|
3483
|
-
//The user is logged in, so we need to set open a new session with the new token
|
|
3484
|
-
reopenSession(
|
|
3485
|
-
false,
|
|
3486
|
-
memoriPassword || memoriPwd || memori?.secretToken,
|
|
3487
|
-
[],
|
|
3488
|
-
personification?.tag,
|
|
3489
|
-
personification?.pin,
|
|
3490
|
-
{
|
|
3491
|
-
LANG: userLang,
|
|
3492
|
-
PATHNAME: window.location.pathname?.toUpperCase(),
|
|
3493
|
-
ROUTE:
|
|
3494
|
-
window.location.pathname?.split('/')?.pop()?.toUpperCase() ||
|
|
3495
|
-
'',
|
|
3496
|
-
...(initialContextVars || {}),
|
|
3497
|
-
},
|
|
3498
|
-
undefined, // Don't send initialQuestion after login, only show the login status chip
|
|
3499
|
-
birthDate,
|
|
3500
|
-
{ loginToken: token } as any,
|
|
3501
|
-
undefined,
|
|
3502
|
-
sessionId
|
|
3503
|
-
).then(state => {
|
|
3504
|
-
setShowLoginDrawer(false);
|
|
3505
|
-
setUser(user);
|
|
3506
|
-
setLoginToken(token);
|
|
3507
|
-
userToken = token;
|
|
3508
|
-
setLocalConfig('loginToken', token);
|
|
3509
|
-
// Push a message with initial status to show status message when a new session is created after login
|
|
3510
|
-
if (
|
|
3511
|
-
state?.sessionID &&
|
|
3512
|
-
state.sessionID !== sessionId &&
|
|
3513
|
-
state?.dialogState
|
|
3514
|
-
) {
|
|
3515
|
-
// Push a message with initial status message showing successful login
|
|
3516
|
-
// Only show the chip component, not the emission text
|
|
3517
|
-
const username = user?.userName || t('login.user');
|
|
3518
|
-
pushMessage({
|
|
3519
|
-
text: '', // Empty text so only the chip is visible
|
|
3520
|
-
emitter: state.dialogState.emitter,
|
|
3521
|
-
media:
|
|
3522
|
-
state.dialogState.emittedMedia ??
|
|
3523
|
-
state.dialogState.media ??
|
|
3933
|
+
setContinuousSpeechTimeout={setContinuousSpeechTimeout}
|
|
3934
|
+
controlsPosition={controlsPosition}
|
|
3935
|
+
setControlsPosition={setControlsPosition}
|
|
3936
|
+
hideEmissions={hideEmissions}
|
|
3937
|
+
setHideEmissions={setHideEmissions}
|
|
3938
|
+
avatarType={avatarType}
|
|
3939
|
+
setAvatarType={setAvatarType}
|
|
3940
|
+
enablePositionControls={enablePositionControls}
|
|
3941
|
+
setEnablePositionControls={setEnablePositionControls}
|
|
3942
|
+
isAvatar3d={!!integrationConfig?.avatarURL}
|
|
3943
|
+
additionalSettings={additionalSettings}
|
|
3944
|
+
speakerMuted={speakerMuted}
|
|
3945
|
+
/>
|
|
3946
|
+
)}
|
|
3947
|
+
|
|
3948
|
+
{showChatHistoryDrawer && (
|
|
3949
|
+
<ChatHistoryDrawer
|
|
3950
|
+
open={!!showChatHistoryDrawer}
|
|
3951
|
+
onClose={() => setShowChatHistoryDrawer(false)}
|
|
3952
|
+
resumeSession={chatLog => {
|
|
3953
|
+
setChatLogID(chatLog.chatLogID);
|
|
3954
|
+
onClickStart(undefined, false, chatLog);
|
|
3955
|
+
setShowChatHistoryDrawer(false);
|
|
3956
|
+
}}
|
|
3957
|
+
apiClient={client}
|
|
3958
|
+
sessionId={sessionId || ''}
|
|
3959
|
+
memori={memori}
|
|
3960
|
+
baseUrl={baseUrl}
|
|
3961
|
+
history={history}
|
|
3962
|
+
apiUrl={client.constants.BACKEND_URL}
|
|
3963
|
+
loginToken={loginToken}
|
|
3964
|
+
language={language}
|
|
3965
|
+
userLang={userLang}
|
|
3966
|
+
isMultilanguageEnabled={isMultilanguageEnabled}
|
|
3967
|
+
/>
|
|
3968
|
+
)}
|
|
3969
|
+
|
|
3970
|
+
{showKnownFactsDrawer && sessionId && (
|
|
3971
|
+
<KnownFacts
|
|
3972
|
+
apiClient={client}
|
|
3973
|
+
memori={memori}
|
|
3974
|
+
sessionID={sessionId}
|
|
3975
|
+
visible={showKnownFactsDrawer}
|
|
3976
|
+
closeDrawer={() => setShowKnownFactsDrawer(false)}
|
|
3977
|
+
/>
|
|
3978
|
+
)}
|
|
3979
|
+
|
|
3980
|
+
{showExpertsDrawer && !!experts && (
|
|
3981
|
+
<ExpertsDrawer
|
|
3982
|
+
apiUrl={client.constants.BACKEND_URL}
|
|
3983
|
+
baseUrl={baseUrl}
|
|
3984
|
+
tenant={tenant}
|
|
3985
|
+
experts={experts}
|
|
3986
|
+
open={showExpertsDrawer}
|
|
3987
|
+
onClose={() => setShowExpertsDrawer(false)}
|
|
3988
|
+
/>
|
|
3989
|
+
)}
|
|
3990
|
+
|
|
3991
|
+
{showLoginDrawer && tenant?.name && (
|
|
3992
|
+
<LoginDrawer
|
|
3993
|
+
tenant={tenant}
|
|
3994
|
+
apiClient={client}
|
|
3995
|
+
open={!!showLoginDrawer}
|
|
3996
|
+
user={user}
|
|
3997
|
+
loginToken={loginToken}
|
|
3998
|
+
onClose={() => setShowLoginDrawer(false)}
|
|
3999
|
+
drawerClassName={
|
|
4000
|
+
selectedLayout === 'WEBSITE_ASSISTANT'
|
|
4001
|
+
? 'memori-drawer--above-website-assistant'
|
|
4002
|
+
: undefined
|
|
4003
|
+
}
|
|
4004
|
+
onLogin={(user, token) => {
|
|
4005
|
+
//The user is logged in, so we need to set open a new session with the new token
|
|
4006
|
+
reopenSession(
|
|
4007
|
+
false,
|
|
4008
|
+
memoriPassword || memoriPwd || memori?.secretToken,
|
|
3524
4009
|
[],
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
4010
|
+
personification?.tag,
|
|
4011
|
+
personification?.pin,
|
|
4012
|
+
{
|
|
4013
|
+
LANG: userLang,
|
|
4014
|
+
PATHNAME: window.location.pathname?.toUpperCase(),
|
|
4015
|
+
ROUTE:
|
|
4016
|
+
window.location.pathname
|
|
4017
|
+
?.split('/')
|
|
4018
|
+
?.pop()
|
|
4019
|
+
?.toUpperCase() || '',
|
|
4020
|
+
...(initialContextVars || {}),
|
|
4021
|
+
},
|
|
4022
|
+
undefined, // Don't send initialQuestion after login, only show the login status chip
|
|
4023
|
+
birthDate,
|
|
4024
|
+
{ loginToken: token } as any,
|
|
4025
|
+
undefined,
|
|
4026
|
+
sessionId
|
|
4027
|
+
).then(state => {
|
|
4028
|
+
setShowLoginDrawer(false);
|
|
4029
|
+
setUser(user);
|
|
4030
|
+
setLoginToken(token);
|
|
4031
|
+
userTokenRef.current = token;
|
|
4032
|
+
setLocalConfig('loginToken', token);
|
|
4033
|
+
// Push a message with initial status to show status message when a new session is created after login
|
|
4034
|
+
if (
|
|
4035
|
+
state?.sessionID &&
|
|
4036
|
+
state.sessionID !== sessionId &&
|
|
4037
|
+
state?.dialogState
|
|
4038
|
+
) {
|
|
4039
|
+
// Push a message with initial status message showing successful login
|
|
4040
|
+
// Only show the chip component, not the emission text
|
|
4041
|
+
const username = user?.userName || t('login.user');
|
|
4042
|
+
pushMessage({
|
|
4043
|
+
text: '', // Empty text so only the chip is visible
|
|
4044
|
+
emitter: state.dialogState.emitter,
|
|
4045
|
+
media:
|
|
4046
|
+
state.dialogState.emittedMedia ??
|
|
4047
|
+
state.dialogState.media ??
|
|
4048
|
+
[],
|
|
4049
|
+
fromUser: false,
|
|
4050
|
+
initial: t('login.successfullyLoggedIn', {
|
|
4051
|
+
username,
|
|
4052
|
+
}) as any,
|
|
4053
|
+
contextVars: state.dialogState.contextVars,
|
|
4054
|
+
date: state.dialogState.currentDate,
|
|
4055
|
+
placeName: state.dialogState.currentPlaceName,
|
|
4056
|
+
placeLatitude: state.dialogState.currentLatitude,
|
|
4057
|
+
placeLongitude: state.dialogState.currentLongitude,
|
|
4058
|
+
placeUncertaintyKm:
|
|
4059
|
+
state.dialogState.currentUncertaintyKm,
|
|
4060
|
+
tag: state.dialogState.currentTag,
|
|
4061
|
+
memoryTags: state.dialogState.memoryTags,
|
|
4062
|
+
});
|
|
4063
|
+
// Update the dialog state so the UI reflects the new session
|
|
4064
|
+
setCurrentDialogState(state.dialogState);
|
|
4065
|
+
}
|
|
4066
|
+
});
|
|
4067
|
+
}}
|
|
4068
|
+
setUser={setUser}
|
|
4069
|
+
onLogout={() => {
|
|
4070
|
+
if (!loginToken) return;
|
|
4071
|
+
client.backend.pwlUserLogout(loginToken).then(() => {
|
|
4072
|
+
setShowLoginDrawer(false);
|
|
4073
|
+
setUser(undefined);
|
|
4074
|
+
setLoginToken(undefined);
|
|
4075
|
+
userTokenRef.current = undefined;
|
|
4076
|
+
removeLocalConfig('loginToken');
|
|
4077
|
+
});
|
|
4078
|
+
}}
|
|
4079
|
+
/>
|
|
4080
|
+
)}
|
|
4081
|
+
</div>
|
|
4082
|
+
</WidgetSurfaceProvider>
|
|
4083
|
+
</MemoriUIProvider>
|
|
3554
4084
|
</div>
|
|
3555
4085
|
);
|
|
3556
4086
|
};
|