@memori.ai/memori-react 9.0.0-alpha.4 → 9.0.0-alpha.6
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 +62 -0
- package/dist/components/AgeVerificationModal/AgeVerificationModal.js +5 -2
- package/dist/components/AgeVerificationModal/AgeVerificationModal.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/ChatBubble/ChatBubble.js +22 -16
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.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/FilePreview/FilePreview.js +22 -5
- package/dist/components/FilePreview/FilePreview.js.map +1 -1
- package/dist/components/Header/ChatConsumptionDropdown.js +1 -1
- package/dist/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/dist/components/Header/Header.css +2 -1
- package/dist/components/Header/Header.js +1 -1
- package/dist/components/Header/Header.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/styles.css +5 -4
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +14 -9
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +2 -2
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +632 -280
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.js +10 -5
- 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 +123 -59
- package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
- package/dist/components/layouts/Chat.js +25 -30
- package/dist/components/layouts/Chat.js.map +1 -1
- package/dist/components/layouts/FullPage.js +5 -8
- package/dist/components/layouts/FullPage.js.map +1 -1
- package/dist/components/layouts/HiddenChat.js +2 -1
- package/dist/components/layouts/HiddenChat.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +5 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
- package/dist/components/layouts/ZoomedFullBody.js +4 -7
- package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
- package/dist/components/layouts/chat.css +19 -31
- package/dist/components/layouts/fullpage.css +52 -19
- package/dist/components/layouts/zoomed-full-body.css +40 -1
- 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/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/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 +5 -2
- package/esm/components/AgeVerificationModal/AgeVerificationModal.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/ChatBubble/ChatBubble.js +22 -16
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.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/FilePreview/FilePreview.js +24 -7
- package/esm/components/FilePreview/FilePreview.js.map +1 -1
- package/esm/components/Header/ChatConsumptionDropdown.js +1 -1
- package/esm/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/esm/components/Header/Header.css +2 -1
- package/esm/components/Header/Header.js +1 -1
- package/esm/components/Header/Header.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/styles.css +5 -4
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +14 -9
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +2 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +632 -280
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.js +10 -5
- 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 +123 -59
- package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
- package/esm/components/layouts/Chat.js +25 -30
- package/esm/components/layouts/Chat.js.map +1 -1
- package/esm/components/layouts/FullPage.js +5 -8
- package/esm/components/layouts/FullPage.js.map +1 -1
- package/esm/components/layouts/HiddenChat.js +2 -1
- package/esm/components/layouts/HiddenChat.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +5 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
- package/esm/components/layouts/ZoomedFullBody.js +4 -7
- package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
- package/esm/components/layouts/chat.css +19 -31
- package/esm/components/layouts/fullpage.css +52 -19
- package/esm/components/layouts/zoomed-full-body.css +40 -1
- 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/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/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 +6 -4
- package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +6 -1
- 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/ChatBubble/ChatBubble.tsx +41 -12
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +8 -4
- package/src/components/DateSelector/DateSelector.stories.tsx +11 -2
- package/src/components/DateSelector/DateSelector.tsx +28 -9
- package/src/components/FilePreview/FilePreview.tsx +28 -7
- package/src/components/Header/ChatConsumptionDropdown.tsx +5 -1
- package/src/components/Header/Header.css +2 -1
- package/src/components/Header/Header.tsx +1 -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/ArtifactDrawer.stories.tsx +218 -2252
- package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +31 -14
- package/src/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.tsx +4 -3
- package/src/components/MemoriWidget/MemoriWidget.tsx +785 -331
- package/src/components/StartPanel/StartPanel.stories.tsx +22 -0
- package/src/components/StartPanel/StartPanel.test.tsx +64 -1
- package/src/components/StartPanel/StartPanel.tsx +26 -3
- 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 +148 -61
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +2 -2
- package/src/components/layouts/Chat.tsx +16 -19
- package/src/components/layouts/FullPage.tsx +32 -25
- package/src/components/layouts/HiddenChat.tsx +4 -0
- package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +8 -0
- package/src/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
- package/src/components/layouts/ZoomedFullBody.tsx +30 -24
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +6 -3
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +824 -810
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +280 -273
- package/src/components/layouts/chat.css +19 -31
- package/src/components/layouts/fullpage.css +52 -19
- package/src/components/layouts/layouts.stories.tsx +131 -12
- package/src/components/layouts/zoomed-full-body.css +40 -1
- 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/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/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 +4 -7
- package/src/types/integration.test.ts +32 -0
- package/src/types/integration.ts +31 -0
- package/src/version.ts +1 -1
package/src/helpers/utils.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useState, useEffect, useRef, useMemo } from 'react';
|
|
2
2
|
import { Material, MeshStandardMaterial, SkinnedMesh } from 'three';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
|
+
import { officeNativeExtensions } from './constants';
|
|
4
5
|
|
|
5
6
|
export const hasTouchscreen = (): boolean => {
|
|
6
7
|
let hasTouchScreen = false;
|
|
@@ -237,6 +238,67 @@ export const stripMarkdown = (text: string) => {
|
|
|
237
238
|
return text;
|
|
238
239
|
};
|
|
239
240
|
|
|
241
|
+
export const OFFICE_NATIVE_EXTENSIONS = officeNativeExtensions;
|
|
242
|
+
|
|
243
|
+
export const isOfficeNativeFilename = (filename: string): boolean => {
|
|
244
|
+
const ext = `.${filename.split('.').pop()?.toLowerCase() || ''}`;
|
|
245
|
+
return (officeNativeExtensions as readonly string[]).includes(ext);
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
export type ParsedDocumentAttachment = {
|
|
249
|
+
filename: string;
|
|
250
|
+
type: string;
|
|
251
|
+
content: string;
|
|
252
|
+
url: string;
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
const DOCUMENT_ATTACHMENT_REGEX =
|
|
256
|
+
/<document_attachment filename="([^"]+)" type="([^"]+)">([\s\S]*?)<\/document_attachment>/g;
|
|
257
|
+
|
|
258
|
+
const ATTACHMENT_LINK_AFTER_REGEX =
|
|
259
|
+
/<attachment_link>\s*([\s\S]*?)\s*<\/attachment_link>/;
|
|
260
|
+
|
|
261
|
+
export const parseDocumentAttachmentsFromMessage = (
|
|
262
|
+
text: string
|
|
263
|
+
): ParsedDocumentAttachment[] => {
|
|
264
|
+
if (!text) return [];
|
|
265
|
+
|
|
266
|
+
const attachments: ParsedDocumentAttachment[] = [];
|
|
267
|
+
const regex = new RegExp(DOCUMENT_ATTACHMENT_REGEX.source, 'g');
|
|
268
|
+
let match;
|
|
269
|
+
|
|
270
|
+
while ((match = regex.exec(text)) !== null) {
|
|
271
|
+
const [, filename, type, content] = match;
|
|
272
|
+
const afterTag = text.slice(match.index + match[0].length);
|
|
273
|
+
const linkMatch = afterTag.match(ATTACHMENT_LINK_AFTER_REGEX);
|
|
274
|
+
const rawUrl = linkMatch?.[1]?.trim() || '';
|
|
275
|
+
const url = /^https?:\/\//.test(rawUrl) ? rawUrl : '';
|
|
276
|
+
|
|
277
|
+
attachments.push({
|
|
278
|
+
filename,
|
|
279
|
+
type,
|
|
280
|
+
content: content.trim(),
|
|
281
|
+
url,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return attachments;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
export const extractAttachmentLinks = (content: string): string[] => {
|
|
289
|
+
return parseDocumentAttachmentsFromMessage(content).map(
|
|
290
|
+
attachment => attachment.url
|
|
291
|
+
);
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
export const extractAttachmentLink = (content: string): string | null => {
|
|
295
|
+
const match = content?.match(
|
|
296
|
+
/<attachment_link>\s*([\s\S]*?)\s*<\/attachment_link>/
|
|
297
|
+
);
|
|
298
|
+
const rawUrl = match?.[1]?.trim() || '';
|
|
299
|
+
return /^https?:\/\//.test(rawUrl) ? rawUrl : null;
|
|
300
|
+
};
|
|
301
|
+
|
|
240
302
|
export const stripDocumentAttachmentTags = (text: string): string => {
|
|
241
303
|
const documentAttachmentTagRegex = /<document_attachment filename="([^"]+)" type="([^"]+)">([\s\S]*?)<\/document_attachment>/g;
|
|
242
304
|
return text
|
|
@@ -245,6 +307,36 @@ export const stripDocumentAttachmentTags = (text: string): string => {
|
|
|
245
307
|
.replace(/<attachment_link>\s*[\s\S]*?\s*<\/attachment_link>/g, '');
|
|
246
308
|
};
|
|
247
309
|
|
|
310
|
+
export const getDocumentAttachmentAssetUrl = (attachment: {
|
|
311
|
+
content?: string | null;
|
|
312
|
+
url?: string | null;
|
|
313
|
+
}): string =>
|
|
314
|
+
attachment.url?.trim() ||
|
|
315
|
+
extractAttachmentLink(attachment.content || '') ||
|
|
316
|
+
'';
|
|
317
|
+
|
|
318
|
+
export const isAssetOnlyDocumentAttachment = (attachment: {
|
|
319
|
+
title?: string;
|
|
320
|
+
name?: string;
|
|
321
|
+
content?: string | null;
|
|
322
|
+
url?: string | null;
|
|
323
|
+
}): boolean => {
|
|
324
|
+
const filename = attachment.title || attachment.name || '';
|
|
325
|
+
const assetUrl = getDocumentAttachmentAssetUrl(attachment);
|
|
326
|
+
|
|
327
|
+
if (!assetUrl) return false;
|
|
328
|
+
|
|
329
|
+
if (isOfficeNativeFilename(filename)) {
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
const strippedContent = attachment.content
|
|
334
|
+
? stripDocumentAttachmentTags(attachment.content).trim()
|
|
335
|
+
: '';
|
|
336
|
+
|
|
337
|
+
return !strippedContent;
|
|
338
|
+
};
|
|
339
|
+
|
|
248
340
|
export const stripOutputTags = (text: string): string => {
|
|
249
341
|
const outputTagRegex = /<output.*?<\/output>/gs;
|
|
250
342
|
|
|
@@ -271,10 +363,23 @@ export const stripReasoningTags = (text: string) => {
|
|
|
271
363
|
return strippedText;
|
|
272
364
|
};
|
|
273
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Strip HTML tags / decode entities without executing scripts or event handlers.
|
|
368
|
+
* Uses an inert DOMParser document (no resource loads / onerror), unlike live innerHTML.
|
|
369
|
+
*/
|
|
274
370
|
export const stripHTML = (text: string) => {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
371
|
+
if (typeof DOMParser !== 'undefined') {
|
|
372
|
+
try {
|
|
373
|
+
return (
|
|
374
|
+
new DOMParser().parseFromString(text, 'text/html').body.textContent ||
|
|
375
|
+
''
|
|
376
|
+
);
|
|
377
|
+
} catch {
|
|
378
|
+
// fall through
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Non-DOM / parse failure: strip tags only (does not decode entities)
|
|
382
|
+
return text.replace(/<[^>]*>/g, '');
|
|
278
383
|
};
|
|
279
384
|
|
|
280
385
|
/** Ensures all <a> tags in HTML open in a new tab (target="_blank" rel="noopener noreferrer"). */
|
package/src/index.stories.tsx
CHANGED
|
@@ -192,3 +192,35 @@ WithPiiDetection.args = {
|
|
|
192
192
|
}),
|
|
193
193
|
},
|
|
194
194
|
};
|
|
195
|
+
|
|
196
|
+
export const WithLocalNats = Template.bind({});
|
|
197
|
+
WithLocalNats.args = {
|
|
198
|
+
memoriName: 'test324',
|
|
199
|
+
ownerUserName: 'andrea.patini',
|
|
200
|
+
memoriID: 'd661a9ca-e907-4396-a986-5095ccd582d6',
|
|
201
|
+
ownerUserID: '69fcc557-9cb6-4e5e-b8ab-140cff975492',
|
|
202
|
+
tenantID: 'localhost:3000',
|
|
203
|
+
engineURL: 'http://localhost:7778/memori/v2',
|
|
204
|
+
apiURL: 'http://localhost:7778/api/v2',
|
|
205
|
+
baseURL: 'http://localhost:3000',
|
|
206
|
+
layout: 'FULLPAGE',
|
|
207
|
+
uiLang: 'IT',
|
|
208
|
+
spokenLang: 'IT',
|
|
209
|
+
integrationID: 'ee1c3d98-7819-4506-ba28-818e79ba86cb',
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
export const WithFunctionalities = Template.bind({});
|
|
213
|
+
WithFunctionalities.args = {
|
|
214
|
+
memoriName: 'test324',
|
|
215
|
+
ownerUserName: 'andrea.patini',
|
|
216
|
+
memoriID: 'd661a9ca-e907-4396-a986-5095ccd582d6',
|
|
217
|
+
ownerUserID: '69fcc557-9cb6-4e5e-b8ab-140cff975492',
|
|
218
|
+
tenantID: 'localhost:3000',
|
|
219
|
+
engineURL: 'http://localhost:7778/memori/v2',
|
|
220
|
+
apiURL: 'http://localhost:7778/api/v2',
|
|
221
|
+
baseURL: 'http://localhost:3000',
|
|
222
|
+
layout: 'FULLPAGE',
|
|
223
|
+
uiLang: 'IT',
|
|
224
|
+
spokenLang: 'IT',
|
|
225
|
+
integrationID: 'ee1c3d98-7819-4506-ba28-818e79ba86cb',
|
|
226
|
+
};
|
package/src/locales/de.json
CHANGED
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"errorFetchingSession": "Fehler beim Laden der Sitzung",
|
|
88
88
|
"errorGettingReferralURL": "Fehler beim Laden des Referrals",
|
|
89
89
|
"errorReopeningSession": "Fehler beim erneuten Öffnen der Sitzung",
|
|
90
|
+
"sessionExpiredReopening": "Sitzung abgelaufen, Sitzung wird neu geöffnet",
|
|
90
91
|
"ageVerification": "Altersüberprüfung",
|
|
91
92
|
"ageVerificationText": "Um mit diesem Zwilling interagieren zu können, müssen Sie mindestens sein {{minAge}} Jahre alt.",
|
|
92
93
|
"ageVerificationSuccess": "Altersprüfung bestanden mit Erfolg.",
|
package/src/locales/en.json
CHANGED
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"errorFetchingSession": "Error during session loading",
|
|
90
90
|
"errorGettingReferralURL": "Error during referral loading",
|
|
91
91
|
"errorReopeningSession": "Error during session reopening",
|
|
92
|
+
"sessionExpiredReopening": "Session expired, reopening session",
|
|
92
93
|
"ageVerification": "Age verification",
|
|
93
94
|
"ageVerificationText": "To interact with this agent, you must be at least {{minAge}} years old.",
|
|
94
95
|
"ageVerificationSuccess": "Age verified with success.",
|
package/src/locales/es.json
CHANGED
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"errorFetchingSession": "Error durante el cargamento de la sesión",
|
|
88
88
|
"errorGettingReferralURL": "Error durante el cargamento del référent",
|
|
89
89
|
"errorReopeningSession": "Error durante el re-abrir la sesión",
|
|
90
|
+
"sessionExpiredReopening": "Sesión expirada, reabriendo sesión",
|
|
90
91
|
"ageVerification": "Verificación de edad",
|
|
91
92
|
"ageVerificationText": "Para interactuar con este Gemelo, debes tener al menos {{minAge}} años.",
|
|
92
93
|
"ageVerificationSuccess": "Edad verificada con éxito.",
|
package/src/locales/fr.json
CHANGED
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"errorFetchingSession": "Erreur lors du chargement de la session",
|
|
87
87
|
"errorGettingReferralURL": "Erreur lors du chargement du référent",
|
|
88
88
|
"errorReopeningSession": "Erreur lors de la re-ouverture de la session",
|
|
89
|
+
"sessionExpiredReopening": "Session expirée, réouverture en cours",
|
|
89
90
|
"ageVerification": "Vérification de l'âge",
|
|
90
91
|
"ageVerificationText": "Pour interagir avec ce Agent, vous devez être au minimum {{minAge}} ans.",
|
|
91
92
|
"ageVerificationSuccess": "Âge vérifié avec succès.",
|
package/src/locales/it.json
CHANGED
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"errorFetchingSession": "Errore durante il caricamento della sessione",
|
|
91
91
|
"errorGettingReferralURL": "Errore durante il caricamento del riferimento",
|
|
92
92
|
"errorReopeningSession": "Errore durante il riapertura della sessione",
|
|
93
|
+
"sessionExpiredReopening": "Sessione scaduta, riapertura in corso",
|
|
93
94
|
"ageVerification": "Verifica dell'età",
|
|
94
95
|
"ageVerificationText": "Per interagire con questo agente, devi aver almeno {{minAge}} anni.",
|
|
95
96
|
"ageVerificationSuccess": "Età verificata con successo.",
|
package/src/styles.css
CHANGED
|
@@ -81,13 +81,10 @@
|
|
|
81
81
|
clip: rect(0, 0, 0, 0);
|
|
82
82
|
white-space: nowrap;
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
memori-
|
|
87
|
-
|
|
88
|
-
.memori-widget {
|
|
89
|
-
--memori-surface-contrast: white;
|
|
90
|
-
--memori-surface-contrast-inverse: black;
|
|
84
|
+
.memori.memori-widget.memori-layout-chat,
|
|
85
|
+
.memori.memori-widget.memori-layout-fullpage,
|
|
86
|
+
.memori.memori-widget.memori-layout-zoomed-full-body {
|
|
87
|
+
contain: layout;
|
|
91
88
|
}
|
|
92
89
|
|
|
93
90
|
/* --- 6. Base: brand e tema di default (in layer così integration può sovrascrivere --memori-primary) --- */
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
is3dAvatarWithUrl,
|
|
3
|
+
usesRpmAvatarView,
|
|
4
|
+
} from './integration';
|
|
5
|
+
|
|
6
|
+
describe('integration avatar helpers', () => {
|
|
7
|
+
const avatarURL = 'https://example.com/avatar.glb';
|
|
8
|
+
|
|
9
|
+
describe('is3dAvatarWithUrl', () => {
|
|
10
|
+
it('returns true for avatar-configurator with avatarURL', () => {
|
|
11
|
+
expect(is3dAvatarWithUrl('avatar-configurator', avatarURL)).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('returns false for avatar-configurator without avatarURL', () => {
|
|
15
|
+
expect(is3dAvatarWithUrl('avatar-configurator', undefined)).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
describe('usesRpmAvatarView', () => {
|
|
20
|
+
it('returns true for avatar-configurator', () => {
|
|
21
|
+
expect(usesRpmAvatarView('avatar-configurator')).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('returns true for readyplayerme-full', () => {
|
|
25
|
+
expect(usesRpmAvatarView('readyplayerme-full')).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('returns false for customglb', () => {
|
|
29
|
+
expect(usesRpmAvatarView('customglb')).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Avatar mode stored in integration.customData.avatar.
|
|
3
|
+
* `avatar-configurator` is used in admin/editor UI; at runtime it renders like `readyplayerme-full`.
|
|
4
|
+
*/
|
|
5
|
+
export type AvatarMode =
|
|
6
|
+
| 'readyplayerme'
|
|
7
|
+
| 'readyplayerme-full'
|
|
8
|
+
| 'customglb'
|
|
9
|
+
| 'customrpm'
|
|
10
|
+
| 'userAvatar'
|
|
11
|
+
| 'avatar-configurator';
|
|
12
|
+
|
|
13
|
+
export const is3dAvatarWithUrl = (
|
|
14
|
+
avatar: AvatarMode | string | undefined,
|
|
15
|
+
avatarURL: string | undefined
|
|
16
|
+
): boolean =>
|
|
17
|
+
!!avatarURL &&
|
|
18
|
+
(avatar === 'readyplayerme' ||
|
|
19
|
+
avatar === 'readyplayerme-full' ||
|
|
20
|
+
avatar === 'customglb' ||
|
|
21
|
+
avatar === 'customrpm' ||
|
|
22
|
+
avatar === 'avatar-configurator');
|
|
23
|
+
|
|
24
|
+
/** RPM-based 3D avatar view (ContainerAvatarView), including avatar-configurator exports. */
|
|
25
|
+
export const usesRpmAvatarView = (
|
|
26
|
+
avatar: AvatarMode | string | undefined
|
|
27
|
+
): boolean =>
|
|
28
|
+
avatar === 'readyplayerme' ||
|
|
29
|
+
avatar === 'readyplayerme-full' ||
|
|
30
|
+
avatar === 'customrpm' ||
|
|
31
|
+
avatar === 'avatar-configurator';
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// This file is auto-generated. Do not edit manually.
|
|
2
|
-
export const version = '9.0.0-alpha.
|
|
2
|
+
export const version = '9.0.0-alpha.6';
|