@memori.ai/memori-react 9.0.0-alpha.5 → 9.0.0-alpha.7
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 +56 -0
- 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.js +3 -1
- package/dist/components/Chat/Chat.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.js +21 -15
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/ChatHistoryDrawer/ChatHistory.js +3 -1
- package/dist/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/dist/components/ContentPreviewModal/ContentPreviewModal.js +3 -1
- package/dist/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
- 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.js +22 -5
- package/dist/components/FilePreview/FilePreview.js.map +1 -1
- package/dist/components/KnownFacts/KnownFacts.js +5 -3
- package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
- 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/ArtifactDrawer/ArtifactDrawer.css +19 -5
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +4 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.css +4 -2
- package/dist/components/MemoriWidget/MemoriWidget.js +760 -404
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/SettingsDrawer/SettingsDrawer.js +3 -1
- package/dist/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.js +3 -1
- package/dist/components/StartPanel/StartPanel.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.js +21 -5
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +126 -60
- 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/WebsiteAssistant/WebsiteAssistant.js +3 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/website-assistant.css +21 -1
- package/dist/components/layouts/chat.css +2 -1
- package/dist/components/layouts/fullpage.css +31 -8
- package/dist/components/layouts/hidden-chat.css +1 -0
- package/dist/components/layouts/totem.css +2 -1
- package/dist/components/layouts/zoomed-full-body.css +32 -7
- 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 +3 -0
- package/dist/helpers/constants.js +27 -1
- package/dist/helpers/constants.js.map +1 -1
- 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/message.d.ts +1 -1
- package/dist/helpers/message.js +4 -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/utils.d.ts +21 -0
- package/dist/helpers/utils.js +75 -4
- package/dist/helpers/utils.js.map +1 -1
- package/dist/locales/de.json +1 -0
- package/dist/locales/en.json +1 -0
- package/dist/locales/es.json +1 -0
- package/dist/locales/fr.json +1 -0
- package/dist/locales/it.json +1 -0
- package/dist/styles.css +1 -1
- 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/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 +13 -4
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/esm/components/Chat/Chat.js +3 -1
- package/esm/components/Chat/Chat.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.js +21 -15
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/ChatHistoryDrawer/ChatHistory.js +3 -1
- package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/esm/components/ContentPreviewModal/ContentPreviewModal.js +3 -1
- package/esm/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
- 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.js +24 -7
- package/esm/components/FilePreview/FilePreview.js.map +1 -1
- package/esm/components/KnownFacts/KnownFacts.js +5 -3
- package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
- 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/ArtifactDrawer/ArtifactDrawer.css +19 -5
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +4 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.css +4 -2
- package/esm/components/MemoriWidget/MemoriWidget.js +760 -404
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/SettingsDrawer/SettingsDrawer.js +3 -1
- package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.js +3 -1
- package/esm/components/StartPanel/StartPanel.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.js +21 -5
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +126 -60
- 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/WebsiteAssistant/WebsiteAssistant.js +3 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/website-assistant.css +21 -1
- package/esm/components/layouts/chat.css +2 -1
- package/esm/components/layouts/fullpage.css +31 -8
- package/esm/components/layouts/hidden-chat.css +1 -0
- package/esm/components/layouts/totem.css +2 -1
- package/esm/components/layouts/zoomed-full-body.css +32 -7
- 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 +3 -0
- package/esm/helpers/constants.js +26 -0
- package/esm/helpers/constants.js.map +1 -1
- 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/message.d.ts +1 -1
- package/esm/helpers/message.js +2 -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/utils.d.ts +21 -0
- package/esm/helpers/utils.js +68 -3
- package/esm/helpers/utils.js.map +1 -1
- package/esm/locales/de.json +1 -0
- package/esm/locales/en.json +1 -0
- package/esm/locales/es.json +1 -0
- package/esm/locales/fr.json +1 -0
- package/esm/locales/it.json +1 -0
- package/esm/styles.css +1 -1
- 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/package.json +5 -3
- package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +9 -1
- 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.ts +16 -4
- package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +164 -0
- package/src/components/Chat/Chat.tsx +3 -0
- package/src/components/ChatBubble/ChatBubble.tsx +40 -12
- package/src/components/ChatHistoryDrawer/ChatHistory.tsx +3 -0
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +8 -4
- package/src/components/ContentPreviewModal/ContentPreviewModal.tsx +3 -0
- 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/FilePreview/FilePreview.tsx +28 -7
- package/src/components/KnownFacts/KnownFacts.tsx +5 -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.tsx +9 -7
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +19 -5
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +4 -0
- package/src/components/MemoriWidget/MemoriWidget.css +4 -2
- package/src/components/MemoriWidget/MemoriWidget.tsx +818 -349
- package/src/components/SettingsDrawer/SettingsDrawer.tsx +3 -0
- package/src/components/StartPanel/StartPanel.stories.tsx +22 -0
- package/src/components/StartPanel/StartPanel.test.tsx +64 -1
- package/src/components/StartPanel/StartPanel.tsx +3 -0
- package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +261 -0
- package/src/components/UploadButton/UploadButton.tsx +30 -11
- package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +151 -61
- package/src/components/UploadButton/UploadImages/UploadImages.tsx +3 -0
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +2 -2
- package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +3 -0
- package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +4 -0
- package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +48 -44
- package/src/components/layouts/WebsiteAssistant/website-assistant.css +21 -1
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +533 -529
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +1058 -1050
- package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +443 -439
- package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +584 -580
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +528 -524
- package/src/components/layouts/chat.css +2 -1
- package/src/components/layouts/fullpage.css +31 -8
- package/src/components/layouts/hidden-chat.css +1 -0
- package/src/components/layouts/layouts.stories.tsx +131 -12
- package/src/components/layouts/totem.css +2 -1
- package/src/components/layouts/zoomed-full-body.css +32 -7
- package/src/context/widgetSurfaceContext.tsx +14 -0
- package/src/helpers/constants.ts +32 -1
- package/src/helpers/credits.ts +16 -1
- package/src/helpers/message.test.ts +28 -1
- package/src/helpers/message.ts +4 -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/utils.test.ts +162 -0
- package/src/helpers/utils.ts +108 -3
- package/src/index.stories.tsx +32 -0
- package/src/locales/de.json +1 -0
- package/src/locales/en.json +1 -0
- package/src/locales/es.json +1 -0
- package/src/locales/fr.json +1 -0
- package/src/locales/it.json +1 -0
- package/src/styles.css +61 -1
- package/src/types/integration.test.ts +32 -0
- package/src/types/integration.ts +31 -0
- package/src/version.ts +1 -1
|
@@ -5,6 +5,9 @@ import { FileText as DocumentIcon } from 'lucide-react';
|
|
|
5
5
|
import { Modal } from '@memori.ai/ui';
|
|
6
6
|
import { useTranslation } from 'react-i18next';
|
|
7
7
|
import memoriApiClient from '@memori.ai/memori-api-client';
|
|
8
|
+
import { officeNativeExtensions } from '../../../helpers/constants';
|
|
9
|
+
import { isOfficeNativeFilename } from '../../../helpers/utils';
|
|
10
|
+
import { useWidgetSurfaceEl } from '../../../context/widgetSurfaceContext';
|
|
8
11
|
// Types
|
|
9
12
|
type PreviewFile = {
|
|
10
13
|
name: string;
|
|
@@ -78,6 +81,7 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
78
81
|
onValidatePayloadSize,
|
|
79
82
|
}) => {
|
|
80
83
|
const { t } = useTranslation();
|
|
84
|
+
const surfaceEl = useWidgetSurfaceEl();
|
|
81
85
|
const { backend } = client || {
|
|
82
86
|
backend: { uploadAsset: null, uploadAssetUnlogged: null },
|
|
83
87
|
};
|
|
@@ -165,64 +169,101 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
165
169
|
}
|
|
166
170
|
};
|
|
167
171
|
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
if (!window.XLSX) {
|
|
171
|
-
await new Promise((resolve, reject) => {
|
|
172
|
-
const script = document.createElement('script');
|
|
173
|
-
script.src = XLSX_URL;
|
|
174
|
-
script.onload = resolve;
|
|
175
|
-
script.onerror = reject;
|
|
176
|
-
document.head.appendChild(script);
|
|
177
|
-
});
|
|
178
|
-
}
|
|
172
|
+
const loadXLSXLibrary = async (): Promise<void> => {
|
|
173
|
+
if (window.XLSX) return;
|
|
179
174
|
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
175
|
+
await new Promise((resolve, reject) => {
|
|
176
|
+
const script = document.createElement('script');
|
|
177
|
+
script.src = XLSX_URL;
|
|
178
|
+
script.onload = resolve;
|
|
179
|
+
script.onerror = reject;
|
|
180
|
+
document.head.appendChild(script);
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
const readXLSXWorkbook = async (file: File) => {
|
|
185
|
+
await loadXLSXLibrary();
|
|
186
|
+
|
|
187
|
+
const arrayBuffer = await file.arrayBuffer();
|
|
188
|
+
return window.XLSX.read(arrayBuffer, {
|
|
189
|
+
type: 'array',
|
|
190
|
+
cellFormula: true,
|
|
191
|
+
cellNF: true,
|
|
192
|
+
cellText: true,
|
|
193
|
+
cellDates: true,
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
const formatXLSXWorkbookForDisplay = (workbook: {
|
|
198
|
+
SheetNames: string[];
|
|
199
|
+
Sheets: Record<string, unknown>;
|
|
200
|
+
}): string => {
|
|
201
|
+
let text = '';
|
|
202
|
+
|
|
203
|
+
for (const sheetName of workbook.SheetNames) {
|
|
204
|
+
const worksheet = workbook.Sheets[sheetName];
|
|
205
|
+
const data = window.XLSX.utils.sheet_to_json(worksheet, {
|
|
206
|
+
header: 1,
|
|
207
|
+
raw: false,
|
|
187
208
|
});
|
|
188
209
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
header: 1,
|
|
194
|
-
raw: false,
|
|
210
|
+
const colWidths = data.reduce((widths: number[], row: any[]) => {
|
|
211
|
+
row.forEach((cell, i) => {
|
|
212
|
+
const cellWidth = (cell || '').toString().length;
|
|
213
|
+
widths[i] = Math.max(widths[i] || 0, cellWidth);
|
|
195
214
|
});
|
|
215
|
+
return widths;
|
|
216
|
+
}, []);
|
|
217
|
+
|
|
218
|
+
const formattedText = data.map((row: any[]) => {
|
|
219
|
+
return row
|
|
220
|
+
.map((cell, i) => {
|
|
221
|
+
const cellStr = (cell || '').toString();
|
|
222
|
+
return cellStr.padEnd(colWidths[i] + 2);
|
|
223
|
+
})
|
|
224
|
+
.join('|')
|
|
225
|
+
.trim();
|
|
226
|
+
});
|
|
196
227
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}, []);
|
|
204
|
-
|
|
205
|
-
const formattedText = data.map((row: any[]) => {
|
|
206
|
-
return row
|
|
207
|
-
.map((cell, i) => {
|
|
208
|
-
const cellStr = (cell || '').toString();
|
|
209
|
-
return cellStr.padEnd(colWidths[i] + 2);
|
|
210
|
-
})
|
|
211
|
-
.join('|')
|
|
212
|
-
.trim();
|
|
213
|
-
});
|
|
228
|
+
if (formattedText.length > 0) {
|
|
229
|
+
const separator = colWidths
|
|
230
|
+
.map((w: number) => '-'.repeat(w + 2))
|
|
231
|
+
.join('+');
|
|
232
|
+
formattedText.splice(1, 0, separator);
|
|
233
|
+
}
|
|
214
234
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
235
|
+
text += `Sheet: ${sheetName}\n${formattedText.join('\n')}\n\n`;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return text;
|
|
239
|
+
};
|
|
221
240
|
|
|
222
|
-
|
|
241
|
+
const formatXLSXWorkbookAsCsv = (workbook: {
|
|
242
|
+
SheetNames: string[];
|
|
243
|
+
Sheets: Record<string, unknown>;
|
|
244
|
+
}): string => {
|
|
245
|
+
let text = '';
|
|
246
|
+
|
|
247
|
+
for (const sheetName of workbook.SheetNames) {
|
|
248
|
+
const worksheet = workbook.Sheets[sheetName];
|
|
249
|
+
const csv = window.XLSX.utils.sheet_to_csv(worksheet, { raw: false });
|
|
250
|
+
if (csv.trim()) {
|
|
251
|
+
text += `Sheet: ${sheetName}\n${csv}\n\n`;
|
|
223
252
|
}
|
|
253
|
+
}
|
|
224
254
|
|
|
225
|
-
|
|
255
|
+
return text;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
const extractTextFromXLSX = async (
|
|
259
|
+
file: File
|
|
260
|
+
): Promise<{ display: string; asset: string }> => {
|
|
261
|
+
try {
|
|
262
|
+
const workbook = await readXLSXWorkbook(file);
|
|
263
|
+
return {
|
|
264
|
+
display: formatXLSXWorkbookForDisplay(workbook),
|
|
265
|
+
asset: formatXLSXWorkbookAsCsv(workbook),
|
|
266
|
+
};
|
|
226
267
|
} catch (error) {
|
|
227
268
|
console.error('XLSX extraction failed:', error);
|
|
228
269
|
throw new Error(
|
|
@@ -235,21 +276,31 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
235
276
|
|
|
236
277
|
const processDocumentFile = async (
|
|
237
278
|
file: File
|
|
238
|
-
): Promise<{
|
|
239
|
-
|
|
279
|
+
): Promise<{
|
|
280
|
+
text: string | null;
|
|
281
|
+
textForAsset?: string;
|
|
282
|
+
uploadAsOriginal?: boolean;
|
|
283
|
+
}> => {
|
|
284
|
+
if (isOfficeNativeFilename(file.name)) {
|
|
285
|
+
return { text: null, uploadAsOriginal: true };
|
|
286
|
+
}
|
|
240
287
|
|
|
288
|
+
const ext = file.name.split('.').pop()?.toLowerCase() || '';
|
|
241
289
|
try {
|
|
242
290
|
let text: string | null = null;
|
|
291
|
+
let textForAsset: string | undefined;
|
|
243
292
|
|
|
244
|
-
if (
|
|
293
|
+
if (ext === 'pdf') {
|
|
245
294
|
text = await extractTextFromPDF(file);
|
|
246
|
-
} else if (['txt', 'md', 'json', 'csv', 'html'].includes(
|
|
295
|
+
} else if (['txt', 'md', 'json', 'csv', 'html'].includes(ext)) {
|
|
247
296
|
text = await file.text();
|
|
248
|
-
} else if (
|
|
249
|
-
|
|
297
|
+
} else if (ext === 'xlsx') {
|
|
298
|
+
const extracted = await extractTextFromXLSX(file);
|
|
299
|
+
text = extracted.display;
|
|
300
|
+
textForAsset = extracted.asset;
|
|
250
301
|
}
|
|
251
302
|
|
|
252
|
-
return { text };
|
|
303
|
+
return { text, textForAsset };
|
|
253
304
|
} catch (error) {
|
|
254
305
|
console.error('Document processing failed:', error);
|
|
255
306
|
throw new Error(
|
|
@@ -295,7 +346,12 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
295
346
|
throw new Error(response.resultMessage || 'Upload failed');
|
|
296
347
|
}
|
|
297
348
|
|
|
298
|
-
|
|
349
|
+
const assetURL = response.asset?.assetURL;
|
|
350
|
+
if (!assetURL) {
|
|
351
|
+
throw new Error('Upload failed: missing asset URL');
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return assetURL;
|
|
299
355
|
};
|
|
300
356
|
|
|
301
357
|
const handleDocumentUpload = async (
|
|
@@ -360,11 +416,42 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
360
416
|
const fileId = Math.random().toString(36).substr(2, 9);
|
|
361
417
|
|
|
362
418
|
try {
|
|
363
|
-
const { text } =
|
|
419
|
+
const { text, textForAsset, uploadAsOriginal } =
|
|
420
|
+
await processDocumentFile(file);
|
|
421
|
+
|
|
422
|
+
if (uploadAsOriginal) {
|
|
423
|
+
// Office native format: upload the original file as asset, no text extraction
|
|
424
|
+
let assetUrl: string | undefined;
|
|
425
|
+
try {
|
|
426
|
+
assetUrl = await uploadAssetFile(file);
|
|
427
|
+
} catch (uploadError) {
|
|
428
|
+
console.error('Office asset upload failed:', uploadError);
|
|
429
|
+
onDocumentError?.({
|
|
430
|
+
message: t('upload.officeAssetUploadFailed', {
|
|
431
|
+
fileName: file.name,
|
|
432
|
+
defaultValue: `"${file.name}" could not be uploaded and was not added.`,
|
|
433
|
+
}),
|
|
434
|
+
severity: 'error',
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (!assetUrl) {
|
|
439
|
+
activeCount--;
|
|
440
|
+
onLoadingChange?.(true, activeCount);
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
364
443
|
|
|
365
|
-
|
|
444
|
+
processedFiles.push({
|
|
445
|
+
name: file.name,
|
|
446
|
+
id: fileId,
|
|
447
|
+
content: '',
|
|
448
|
+
mimeType: file.type,
|
|
449
|
+
textAssetUrl: assetUrl,
|
|
450
|
+
});
|
|
451
|
+
} else if (text) {
|
|
366
452
|
const baseName = file.name.replace(/\.[^/.]+$/, '') || file.name;
|
|
367
|
-
const
|
|
453
|
+
const assetText = textForAsset ?? text;
|
|
454
|
+
const textFile = new File([assetText], `${baseName}.txt`, {
|
|
368
455
|
type: 'text/plain',
|
|
369
456
|
});
|
|
370
457
|
|
|
@@ -429,7 +516,9 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
429
516
|
<input
|
|
430
517
|
ref={documentInputRef}
|
|
431
518
|
type="file"
|
|
432
|
-
accept=
|
|
519
|
+
accept={`.pdf,.txt,.md,.json,.xlsx,.csv,.html,${officeNativeExtensions.join(
|
|
520
|
+
','
|
|
521
|
+
)}`}
|
|
433
522
|
multiple
|
|
434
523
|
className="memori--upload-file-input"
|
|
435
524
|
onChange={handleDocumentUpload}
|
|
@@ -468,6 +557,7 @@ const UploadDocuments: React.FC<UploadDocumentsProps> = ({
|
|
|
468
557
|
|
|
469
558
|
{/* Modal */}
|
|
470
559
|
<Modal
|
|
560
|
+
container={surfaceEl ?? undefined}
|
|
471
561
|
width="80%"
|
|
472
562
|
widthMd="80%"
|
|
473
563
|
open={!!selectedFile}
|
|
@@ -8,6 +8,7 @@ import { Asset, Medium } from '@memori.ai/memori-api-client/dist/types';
|
|
|
8
8
|
import { useTranslation } from 'react-i18next';
|
|
9
9
|
import { Button } from '@memori.ai/ui';
|
|
10
10
|
import { compressImage } from '../../../helpers/imageCompression';
|
|
11
|
+
import { useWidgetSurfaceEl } from '../../../context/widgetSurfaceContext';
|
|
11
12
|
|
|
12
13
|
// Types
|
|
13
14
|
type PreviewFile = {
|
|
@@ -54,6 +55,7 @@ const UploadImages: React.FC<UploadImagesProps> = ({
|
|
|
54
55
|
onValidateImageFile,
|
|
55
56
|
}) => {
|
|
56
57
|
const { t, i18n } = useTranslation();
|
|
58
|
+
const surfaceEl = useWidgetSurfaceEl();
|
|
57
59
|
// Client
|
|
58
60
|
const { backend, dialog } = client || {
|
|
59
61
|
backend: { uploadAsset: null, uploadAssetUnlogged: null },
|
|
@@ -483,6 +485,7 @@ const UploadImages: React.FC<UploadImagesProps> = ({
|
|
|
483
485
|
|
|
484
486
|
{/* Upload Modal with Title Input */}
|
|
485
487
|
<Modal
|
|
488
|
+
container={surfaceEl ?? undefined}
|
|
486
489
|
open={showUploadModal && !!selectedFile}
|
|
487
490
|
className="memori--modal-preview-file memori--upload-image-preview-modal"
|
|
488
491
|
onClose={handleCancelUpload}
|
|
@@ -6,7 +6,7 @@ exports[`renders UploadButton unchanged 1`] = `
|
|
|
6
6
|
class="memori--unified-upload-wrapper"
|
|
7
7
|
>
|
|
8
8
|
<input
|
|
9
|
-
accept=".jpg,.jpeg,.png,.pdf,.txt,.json,.xlsx,.csv,.md,.html"
|
|
9
|
+
accept=".jpg,.jpeg,.png,.pdf,.txt,.json,.xlsx,.csv,.md,.html,.doc,.docx,.dotx,.xltx,.potx"
|
|
10
10
|
class="memori--upload-file-input"
|
|
11
11
|
multiple=""
|
|
12
12
|
style="display: none;"
|
|
@@ -60,7 +60,7 @@ exports[`renders UploadButton unchanged 1`] = `
|
|
|
60
60
|
class="memori--document-upload-wrapper"
|
|
61
61
|
>
|
|
62
62
|
<input
|
|
63
|
-
accept=".pdf,.txt,.md,.json,.xlsx,.csv,.html"
|
|
63
|
+
accept=".pdf,.txt,.md,.json,.xlsx,.csv,.html,.doc,.docx,.dotx,.xltx,.potx"
|
|
64
64
|
class="memori--upload-file-input"
|
|
65
65
|
multiple=""
|
|
66
66
|
type="file"
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from '@memori.ai/ui';
|
|
14
14
|
import { getErrori18nKey } from '../../helpers/error';
|
|
15
15
|
import { useTranslation } from 'react-i18next';
|
|
16
|
+
import { useWidgetSurfaceEl } from '../../context/widgetSurfaceContext';
|
|
16
17
|
import Snippet from '../Snippet/Snippet';
|
|
17
18
|
import MediaWidget from '../MediaWidget/MediaWidget';
|
|
18
19
|
import { Card } from '@memori.ai/ui';
|
|
@@ -40,6 +41,7 @@ const WhyThisAnswer = ({
|
|
|
40
41
|
client,
|
|
41
42
|
_TEST_loading = false,
|
|
42
43
|
}: Props) => {
|
|
44
|
+
const surfaceEl = useWidgetSurfaceEl();
|
|
43
45
|
const { t } = useTranslation();
|
|
44
46
|
const { add } = useAlertManager();
|
|
45
47
|
const searchMemory = client?.search.searchMemory;
|
|
@@ -97,6 +99,7 @@ const WhyThisAnswer = ({
|
|
|
97
99
|
|
|
98
100
|
return (
|
|
99
101
|
<Drawer
|
|
102
|
+
container={surfaceEl ?? undefined}
|
|
100
103
|
open={visible}
|
|
101
104
|
anchor="right"
|
|
102
105
|
className="memori-whythisanswer-drawer"
|
|
@@ -62,6 +62,10 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
|
|
|
62
62
|
<div
|
|
63
63
|
className={`memori-website_assistant--${
|
|
64
64
|
collapsed ? 'collapsed' : 'expanded'
|
|
65
|
+
}${
|
|
66
|
+
useSideArtifactChrome
|
|
67
|
+
? ' memori-website_assistant--artifact-open'
|
|
68
|
+
: ''
|
|
65
69
|
}`}
|
|
66
70
|
>
|
|
67
71
|
{!collapsed && (
|
package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap
CHANGED
|
@@ -12,56 +12,60 @@ exports[`renders WEBSITE_ASSISTANT layout unchanged 1`] = `
|
|
|
12
12
|
style="height: 100vh;"
|
|
13
13
|
>
|
|
14
14
|
<div
|
|
15
|
-
class="memori-
|
|
15
|
+
class="memori-widget__surface"
|
|
16
16
|
>
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
aria-label="expand"
|
|
20
|
-
class="memori-button memori-button--ghost memori-button--md memori-button--circle memori-website_assistant--trigger-button"
|
|
21
|
-
tabindex="0"
|
|
22
|
-
title="expand"
|
|
23
|
-
type="button"
|
|
17
|
+
<div
|
|
18
|
+
class="memori-website_assistant--trigger"
|
|
24
19
|
>
|
|
25
|
-
<
|
|
26
|
-
|
|
20
|
+
<button
|
|
21
|
+
aria-expanded="false"
|
|
22
|
+
aria-label="expand"
|
|
23
|
+
class="memori-button memori-button--ghost memori-button--md memori-button--circle memori-website_assistant--trigger-button"
|
|
24
|
+
tabindex="0"
|
|
25
|
+
title="expand"
|
|
26
|
+
type="button"
|
|
27
27
|
>
|
|
28
|
-
<
|
|
29
|
-
class="memori-
|
|
28
|
+
<span
|
|
29
|
+
class="memori-button__content"
|
|
30
30
|
>
|
|
31
|
-
<figure>
|
|
32
|
-
<img
|
|
33
|
-
alt=""
|
|
34
|
-
role="presentation"
|
|
35
|
-
src="https://aisuru.com/images/aisuru/square_logo.png"
|
|
36
|
-
/>
|
|
37
|
-
</figure>
|
|
38
|
-
<div
|
|
39
|
-
class="mainDiv"
|
|
40
|
-
/>
|
|
41
|
-
<div
|
|
42
|
-
class="mainDiv"
|
|
43
|
-
/>
|
|
44
31
|
<div
|
|
45
|
-
class="
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
32
|
+
class="memori-blob"
|
|
33
|
+
>
|
|
34
|
+
<figure>
|
|
35
|
+
<img
|
|
36
|
+
alt=""
|
|
37
|
+
role="presentation"
|
|
38
|
+
src="https://aisuru.com/images/aisuru/square_logo.png"
|
|
39
|
+
/>
|
|
40
|
+
</figure>
|
|
41
|
+
<div
|
|
42
|
+
class="mainDiv"
|
|
43
|
+
/>
|
|
44
|
+
<div
|
|
45
|
+
class="mainDiv"
|
|
46
|
+
/>
|
|
47
|
+
<div
|
|
48
|
+
class="mainDiv"
|
|
49
|
+
/>
|
|
50
|
+
<div
|
|
51
|
+
class="mainDiv"
|
|
52
|
+
/>
|
|
53
|
+
<div
|
|
54
|
+
class="mainDiv"
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
</span>
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
<div
|
|
61
|
+
class="memori-website_assistant--collapsed"
|
|
62
|
+
/>
|
|
63
|
+
<audio
|
|
64
|
+
id="memori-audio"
|
|
65
|
+
src="https://aisuru.com/intro.mp3"
|
|
66
|
+
style="display: none;"
|
|
67
|
+
/>
|
|
56
68
|
</div>
|
|
57
|
-
<div
|
|
58
|
-
class="memori-website_assistant--collapsed"
|
|
59
|
-
/>
|
|
60
|
-
<audio
|
|
61
|
-
id="memori-audio"
|
|
62
|
-
src="https://aisuru.com/intro.mp3"
|
|
63
|
-
style="display: none;"
|
|
64
|
-
/>
|
|
65
69
|
</div>
|
|
66
70
|
<div
|
|
67
71
|
aria-atomic="false"
|
|
@@ -195,6 +195,15 @@
|
|
|
195
195
|
pointer-events: all;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
+
/*
|
|
199
|
+
* Keep in sync with ArtifactDrawer split width (46% / --memori-modal-size-md override).
|
|
200
|
+
* Same pairing as HiddenChat's `.memori-sidebar-toggle-artifact` → `right: 46%`.
|
|
201
|
+
*/
|
|
202
|
+
.memori-widget.memori-layout-website_assistant
|
|
203
|
+
.memori-website_assistant--expanded.memori-website_assistant--artifact-open {
|
|
204
|
+
right: 46%;
|
|
205
|
+
}
|
|
206
|
+
|
|
198
207
|
/* Tablet */
|
|
199
208
|
@media (min-width: 601px) {
|
|
200
209
|
.memori-widget.memori-layout-website_assistant .memori-website_assistant--collapsed,
|
|
@@ -205,6 +214,11 @@
|
|
|
205
214
|
border-radius: var(--memori-radius-box) 0 0 0;
|
|
206
215
|
}
|
|
207
216
|
|
|
217
|
+
.memori-widget.memori-layout-website_assistant
|
|
218
|
+
.memori-website_assistant--expanded.memori-website_assistant--artifact-open {
|
|
219
|
+
right: 46%;
|
|
220
|
+
}
|
|
221
|
+
|
|
208
222
|
.memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded {
|
|
209
223
|
height: min(75vh, calc(100vh - var(--memori-spacing-5xl)));
|
|
210
224
|
}
|
|
@@ -218,6 +232,11 @@
|
|
|
218
232
|
border-radius: var(--memori-radius-box) 0 0 0;
|
|
219
233
|
}
|
|
220
234
|
|
|
235
|
+
.memori-widget.memori-layout-website_assistant
|
|
236
|
+
.memori-website_assistant--expanded.memori-website_assistant--artifact-open {
|
|
237
|
+
right: 46%;
|
|
238
|
+
}
|
|
239
|
+
|
|
221
240
|
.memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded {
|
|
222
241
|
height: 100vh;
|
|
223
242
|
border-radius: 0;
|
|
@@ -418,7 +437,8 @@
|
|
|
418
437
|
transform: none !important;
|
|
419
438
|
}
|
|
420
439
|
|
|
421
|
-
.memori-layout-website_assistant.memori--avatar-readyplayerme-full .memori--avatar-wrapper > div
|
|
440
|
+
.memori-layout-website_assistant.memori--avatar-readyplayerme-full .memori--avatar-wrapper > div,
|
|
441
|
+
.memori-layout-website_assistant.memori--avatar-avatar-configurator .memori--avatar-wrapper > div {
|
|
422
442
|
transform: scale(1.7) translate(0px, 10vh);
|
|
423
443
|
}
|
|
424
444
|
|