@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
|
@@ -370,3 +370,25 @@ WithCompletionProviderDown.args = {
|
|
|
370
370
|
onClickStart: () => {},
|
|
371
371
|
_TEST_forceProviderStatus: 'major',
|
|
372
372
|
};
|
|
373
|
+
|
|
374
|
+
/** Public agent whose owner has run out of credits: the start button is
|
|
375
|
+
* disabled and a "not enough credits" badge is shown instead of starting a
|
|
376
|
+
* session or asking for a password. */
|
|
377
|
+
export const NotEnoughCredits = Template.bind({});
|
|
378
|
+
NotEnoughCredits.args = {
|
|
379
|
+
memori: {
|
|
380
|
+
...memori,
|
|
381
|
+
privacyType: 'PUBLIC',
|
|
382
|
+
},
|
|
383
|
+
tenant,
|
|
384
|
+
language: 'it',
|
|
385
|
+
userLang: 'en',
|
|
386
|
+
setUserLang: () => {},
|
|
387
|
+
setVenue: () => {},
|
|
388
|
+
openPositionPopover: () => {},
|
|
389
|
+
instruct: false,
|
|
390
|
+
sessionId: sessionID,
|
|
391
|
+
clickedStart: false,
|
|
392
|
+
onClickStart: () => {},
|
|
393
|
+
notEnoughCredits: true,
|
|
394
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { render } from '@testing-library/react';
|
|
2
|
+
import { render, fireEvent } from '@testing-library/react';
|
|
3
|
+
import '@testing-library/jest-dom';
|
|
3
4
|
import { memori, tenant, sessionID, integration, user } from '../../mocks/data';
|
|
4
5
|
import StartPanel from './StartPanel';
|
|
5
6
|
|
|
@@ -306,3 +307,65 @@ it('renders StartPanel with completion provider down unchanged', () => {
|
|
|
306
307
|
);
|
|
307
308
|
expect(container).toMatchSnapshot();
|
|
308
309
|
});
|
|
310
|
+
|
|
311
|
+
it('renders StartPanel with not enough credits unchanged', () => {
|
|
312
|
+
const { container } = render(
|
|
313
|
+
<StartPanel
|
|
314
|
+
memori={memori}
|
|
315
|
+
tenant={tenant}
|
|
316
|
+
language="it"
|
|
317
|
+
userLang="en"
|
|
318
|
+
setUserLang={() => {}}
|
|
319
|
+
setVenue={jest.fn()}
|
|
320
|
+
openPositionPopover={() => {}}
|
|
321
|
+
instruct={false}
|
|
322
|
+
clickedStart={false}
|
|
323
|
+
onClickStart={() => {}}
|
|
324
|
+
setShowLoginDrawer={jest.fn()}
|
|
325
|
+
notEnoughCredits
|
|
326
|
+
/>
|
|
327
|
+
);
|
|
328
|
+
expect(container).toMatchSnapshot();
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
// When the agent owner has not enough credits, opening the chat for a PUBLIC
|
|
332
|
+
// agent must not start a session nor ask for a password: the start button is
|
|
333
|
+
// disabled and a "not enough credits" badge is shown instead.
|
|
334
|
+
it('blocks start and shows credits badge when owner has not enough credits', () => {
|
|
335
|
+
const onClickStart = jest.fn();
|
|
336
|
+
const { container, getByText, queryByPlaceholderText } = render(
|
|
337
|
+
<StartPanel
|
|
338
|
+
memori={{ ...memori, privacyType: 'PUBLIC' }}
|
|
339
|
+
tenant={tenant}
|
|
340
|
+
language="it"
|
|
341
|
+
userLang="en"
|
|
342
|
+
setUserLang={() => {}}
|
|
343
|
+
setVenue={jest.fn()}
|
|
344
|
+
openPositionPopover={() => {}}
|
|
345
|
+
instruct={false}
|
|
346
|
+
clickedStart={false}
|
|
347
|
+
onClickStart={onClickStart}
|
|
348
|
+
setShowLoginDrawer={jest.fn()}
|
|
349
|
+
notEnoughCredits
|
|
350
|
+
/>
|
|
351
|
+
);
|
|
352
|
+
|
|
353
|
+
const startButton = container.querySelector(
|
|
354
|
+
'.memori--start-actions__start'
|
|
355
|
+
) as HTMLButtonElement;
|
|
356
|
+
expect(startButton).toBeInTheDocument();
|
|
357
|
+
expect(startButton).toBeDisabled();
|
|
358
|
+
|
|
359
|
+
// Clicking the disabled button must not attempt to open a session.
|
|
360
|
+
fireEvent.click(startButton);
|
|
361
|
+
expect(onClickStart).not.toHaveBeenCalled();
|
|
362
|
+
|
|
363
|
+
// No password field is ever rendered for a public agent.
|
|
364
|
+
expect(queryByPlaceholderText('Password')).not.toBeInTheDocument();
|
|
365
|
+
|
|
366
|
+
// The credits badge is rendered (tooltip content is portaled on hover by
|
|
367
|
+
// @memori.ai/ui and is covered by BlockedMemoriBadge unit tests).
|
|
368
|
+
const badge = container.querySelector('.blocked-memori-badge--wrapper');
|
|
369
|
+
expect(badge).toBeInTheDocument();
|
|
370
|
+
expect(getByText('memoriBlockedTitle')).toBeInTheDocument();
|
|
371
|
+
});
|
|
@@ -27,6 +27,7 @@ import CompletionProviderStatus, {
|
|
|
27
27
|
Props as CPSProps,
|
|
28
28
|
} from '../CompletionProviderStatus/CompletionProviderStatus';
|
|
29
29
|
import { Expandable } from '@memori.ai/ui';
|
|
30
|
+
import { usePressTooltip } from '../../helpers/usePressTooltip';
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* Sentinel values used as non-selectable section headers in the language
|
|
@@ -96,6 +97,10 @@ const StartPanel: React.FC<Props> = ({
|
|
|
96
97
|
showFullDescriptionOnMobile = false,
|
|
97
98
|
}) => {
|
|
98
99
|
const { t, i18n } = useTranslation();
|
|
100
|
+
const boardOfExpertsTooltip = usePressTooltip();
|
|
101
|
+
const nsfwTooltip = usePressTooltip();
|
|
102
|
+
const deepThoughtTooltip = usePressTooltip();
|
|
103
|
+
const privacyTooltip = usePressTooltip();
|
|
99
104
|
const [translatedDescription, setTranslatedDescription] = useState(
|
|
100
105
|
memori.description
|
|
101
106
|
);
|
|
@@ -213,21 +218,35 @@ const StartPanel: React.FC<Props> = ({
|
|
|
213
218
|
>
|
|
214
219
|
{!!memori.enableBoardOfExperts && (
|
|
215
220
|
<div className="memori--board-of-experts">
|
|
216
|
-
<Tooltip
|
|
221
|
+
<Tooltip
|
|
222
|
+
align="left"
|
|
223
|
+
content={t('boardOfExperts')}
|
|
224
|
+
{...boardOfExpertsTooltip.tooltipProps}
|
|
225
|
+
>
|
|
217
226
|
<Button
|
|
218
227
|
type="button"
|
|
219
228
|
variant="ghost"
|
|
220
229
|
shape="circle"
|
|
221
230
|
aria-label={t('boardOfExperts') || 'Board of Experts'}
|
|
222
231
|
icon={<Users aria-hidden />}
|
|
232
|
+
{...boardOfExpertsTooltip.pressTriggerProps}
|
|
223
233
|
/>
|
|
224
234
|
</Tooltip>
|
|
225
235
|
</div>
|
|
226
236
|
)}
|
|
227
237
|
{!!memori.nsfw && (
|
|
228
238
|
<div className="memori--nsfw">
|
|
229
|
-
<Tooltip
|
|
230
|
-
|
|
239
|
+
<Tooltip
|
|
240
|
+
align="left"
|
|
241
|
+
content={t('nsfw')}
|
|
242
|
+
{...nsfwTooltip.tooltipProps}
|
|
243
|
+
>
|
|
244
|
+
<span
|
|
245
|
+
title={t('nsfw') || 'NSFW'}
|
|
246
|
+
{...nsfwTooltip.pressTriggerProps}
|
|
247
|
+
>
|
|
248
|
+
🔞
|
|
249
|
+
</span>
|
|
231
250
|
</Tooltip>
|
|
232
251
|
</div>
|
|
233
252
|
)}
|
|
@@ -453,6 +472,7 @@ const StartPanel: React.FC<Props> = ({
|
|
|
453
472
|
leaveDelay={150}
|
|
454
473
|
sideOffset={8}
|
|
455
474
|
content={t('deepThoughtHelper')}
|
|
475
|
+
{...deepThoughtTooltip.tooltipProps}
|
|
456
476
|
slotProps={{
|
|
457
477
|
positioner: {
|
|
458
478
|
className:
|
|
@@ -471,6 +491,7 @@ const StartPanel: React.FC<Props> = ({
|
|
|
471
491
|
aria-label={String(
|
|
472
492
|
t('deepThoughtHelper') ?? 'Deep Thought help'
|
|
473
493
|
)}
|
|
494
|
+
{...deepThoughtTooltip.pressTriggerProps}
|
|
474
495
|
>
|
|
475
496
|
<Info className="memori--settings-section__inline-info-icon" />
|
|
476
497
|
</Button>
|
|
@@ -557,6 +578,7 @@ const StartPanel: React.FC<Props> = ({
|
|
|
557
578
|
</a>
|
|
558
579
|
</div>
|
|
559
580
|
}
|
|
581
|
+
{...privacyTooltip.tooltipProps}
|
|
560
582
|
slotProps={{
|
|
561
583
|
positioner: {
|
|
562
584
|
className: 'memori--privacy-popover-positioner',
|
|
@@ -572,6 +594,7 @@ const StartPanel: React.FC<Props> = ({
|
|
|
572
594
|
size="sm"
|
|
573
595
|
className="memori--privacy-popover-trigger memori--settings-section__info-trigger"
|
|
574
596
|
aria-label={String(t('privacyPolicy') ?? '')}
|
|
597
|
+
{...privacyTooltip.pressTriggerProps}
|
|
575
598
|
>
|
|
576
599
|
<Info className="memori--settings-section__inline-info-icon" />
|
|
577
600
|
</Button>
|
|
@@ -2907,6 +2907,267 @@ exports[`renders StartPanel with multilangual unchanged 1`] = `
|
|
|
2907
2907
|
</div>
|
|
2908
2908
|
`;
|
|
2909
2909
|
|
|
2910
|
+
exports[`renders StartPanel with not enough credits unchanged 1`] = `
|
|
2911
|
+
<div>
|
|
2912
|
+
<div
|
|
2913
|
+
class="memori--start-panel"
|
|
2914
|
+
>
|
|
2915
|
+
<div
|
|
2916
|
+
class="memori--cover"
|
|
2917
|
+
/>
|
|
2918
|
+
<div
|
|
2919
|
+
class="memori--start-panel__body"
|
|
2920
|
+
>
|
|
2921
|
+
<div
|
|
2922
|
+
class="memori--title-container"
|
|
2923
|
+
>
|
|
2924
|
+
<picture
|
|
2925
|
+
class="memori--avatar"
|
|
2926
|
+
>
|
|
2927
|
+
<source
|
|
2928
|
+
src="https://aisuru.com/images/aisuru/square_logo.png"
|
|
2929
|
+
/>
|
|
2930
|
+
<img
|
|
2931
|
+
alt="Memori"
|
|
2932
|
+
src="https://aisuru.com/images/aisuru/square_logo.png"
|
|
2933
|
+
/>
|
|
2934
|
+
</picture>
|
|
2935
|
+
<div
|
|
2936
|
+
class="memori--title-container__content"
|
|
2937
|
+
>
|
|
2938
|
+
<h2
|
|
2939
|
+
class="memori--title"
|
|
2940
|
+
>
|
|
2941
|
+
Memori
|
|
2942
|
+
</h2>
|
|
2943
|
+
<div
|
|
2944
|
+
class="memori-expandable memori--description-text memori--description-text--collapsible"
|
|
2945
|
+
>
|
|
2946
|
+
<div
|
|
2947
|
+
class="memori-expandable__inner"
|
|
2948
|
+
style="max-height: 9999px;"
|
|
2949
|
+
>
|
|
2950
|
+
Lorem ipsum.
|
|
2951
|
+
</div>
|
|
2952
|
+
</div>
|
|
2953
|
+
</div>
|
|
2954
|
+
<div
|
|
2955
|
+
class="memori--completion-provider-status--loading"
|
|
2956
|
+
>
|
|
2957
|
+
<div
|
|
2958
|
+
class="memori-spin memori-spin--spinning"
|
|
2959
|
+
>
|
|
2960
|
+
<div
|
|
2961
|
+
aria-label="Loading"
|
|
2962
|
+
aria-live="polite"
|
|
2963
|
+
class="memori-spin__overlay"
|
|
2964
|
+
role="status"
|
|
2965
|
+
>
|
|
2966
|
+
<div
|
|
2967
|
+
class="memori-spin__container"
|
|
2968
|
+
>
|
|
2969
|
+
<svg
|
|
2970
|
+
aria-hidden="true"
|
|
2971
|
+
class="lucide lucide-loader-circle memori-spin__icon"
|
|
2972
|
+
fill="none"
|
|
2973
|
+
height="24"
|
|
2974
|
+
stroke="currentColor"
|
|
2975
|
+
stroke-linecap="round"
|
|
2976
|
+
stroke-linejoin="round"
|
|
2977
|
+
stroke-width="2"
|
|
2978
|
+
viewBox="0 0 24 24"
|
|
2979
|
+
width="24"
|
|
2980
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
2981
|
+
>
|
|
2982
|
+
<path
|
|
2983
|
+
d="M21 12a9 9 0 1 1-6.219-8.56"
|
|
2984
|
+
/>
|
|
2985
|
+
</svg>
|
|
2986
|
+
</div>
|
|
2987
|
+
</div>
|
|
2988
|
+
</div>
|
|
2989
|
+
</div>
|
|
2990
|
+
</div>
|
|
2991
|
+
<div
|
|
2992
|
+
class="memori--description"
|
|
2993
|
+
>
|
|
2994
|
+
<section
|
|
2995
|
+
class="memori--start-panel__mobile-info"
|
|
2996
|
+
>
|
|
2997
|
+
<div
|
|
2998
|
+
class="memori--start-panel__mobile-info-content"
|
|
2999
|
+
>
|
|
3000
|
+
<section
|
|
3001
|
+
class="memori--settings-section"
|
|
3002
|
+
>
|
|
3003
|
+
<div
|
|
3004
|
+
class="memori--settings-section__row"
|
|
3005
|
+
>
|
|
3006
|
+
<div
|
|
3007
|
+
aria-hidden="true"
|
|
3008
|
+
class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
|
|
3009
|
+
>
|
|
3010
|
+
<svg
|
|
3011
|
+
class="lucide lucide-eye memori--settings-section__icon"
|
|
3012
|
+
fill="none"
|
|
3013
|
+
height="24"
|
|
3014
|
+
stroke="currentColor"
|
|
3015
|
+
stroke-linecap="round"
|
|
3016
|
+
stroke-linejoin="round"
|
|
3017
|
+
stroke-width="2"
|
|
3018
|
+
viewBox="0 0 24 24"
|
|
3019
|
+
width="24"
|
|
3020
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3021
|
+
>
|
|
3022
|
+
<path
|
|
3023
|
+
d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"
|
|
3024
|
+
/>
|
|
3025
|
+
<circle
|
|
3026
|
+
cx="12"
|
|
3027
|
+
cy="12"
|
|
3028
|
+
r="3"
|
|
3029
|
+
/>
|
|
3030
|
+
</svg>
|
|
3031
|
+
</div>
|
|
3032
|
+
<div
|
|
3033
|
+
class="memori--settings-section__content"
|
|
3034
|
+
>
|
|
3035
|
+
<div
|
|
3036
|
+
class="memori--settings-section__title-inline"
|
|
3037
|
+
>
|
|
3038
|
+
<p
|
|
3039
|
+
class="memori--settings-section__title"
|
|
3040
|
+
>
|
|
3041
|
+
write_and_speak.pagePrivacyExplanation
|
|
3042
|
+
</p>
|
|
3043
|
+
</div>
|
|
3044
|
+
<p
|
|
3045
|
+
class="memori--settings-section__description"
|
|
3046
|
+
>
|
|
3047
|
+
write_and_speak.pagePrivacyExplanationList.authorUsesInfo
|
|
3048
|
+
</p>
|
|
3049
|
+
</div>
|
|
3050
|
+
<span
|
|
3051
|
+
class="memori-tooltip"
|
|
3052
|
+
>
|
|
3053
|
+
<span
|
|
3054
|
+
class="memori-tooltip__trigger"
|
|
3055
|
+
id="base-ui-:r35:"
|
|
3056
|
+
>
|
|
3057
|
+
<button
|
|
3058
|
+
aria-label="privacyPolicy"
|
|
3059
|
+
class="memori-button memori-button--toolbar memori-button--sm memori--privacy-popover-trigger memori--settings-section__info-trigger"
|
|
3060
|
+
tabindex="0"
|
|
3061
|
+
type="button"
|
|
3062
|
+
>
|
|
3063
|
+
<span
|
|
3064
|
+
class="memori-button__content"
|
|
3065
|
+
>
|
|
3066
|
+
<svg
|
|
3067
|
+
class="lucide lucide-info memori--settings-section__inline-info-icon"
|
|
3068
|
+
fill="none"
|
|
3069
|
+
height="24"
|
|
3070
|
+
stroke="currentColor"
|
|
3071
|
+
stroke-linecap="round"
|
|
3072
|
+
stroke-linejoin="round"
|
|
3073
|
+
stroke-width="2"
|
|
3074
|
+
viewBox="0 0 24 24"
|
|
3075
|
+
width="24"
|
|
3076
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3077
|
+
>
|
|
3078
|
+
<circle
|
|
3079
|
+
cx="12"
|
|
3080
|
+
cy="12"
|
|
3081
|
+
r="10"
|
|
3082
|
+
/>
|
|
3083
|
+
<path
|
|
3084
|
+
d="M12 16v-4"
|
|
3085
|
+
/>
|
|
3086
|
+
<path
|
|
3087
|
+
d="M12 8h.01"
|
|
3088
|
+
/>
|
|
3089
|
+
</svg>
|
|
3090
|
+
</span>
|
|
3091
|
+
</button>
|
|
3092
|
+
</span>
|
|
3093
|
+
</span>
|
|
3094
|
+
</div>
|
|
3095
|
+
</section>
|
|
3096
|
+
</div>
|
|
3097
|
+
</section>
|
|
3098
|
+
<div
|
|
3099
|
+
class="memori--start-actions"
|
|
3100
|
+
>
|
|
3101
|
+
<button
|
|
3102
|
+
class="memori-button memori-button--primary memori-button--lg memori-button--disabled memori--start-actions__start"
|
|
3103
|
+
data-disabled=""
|
|
3104
|
+
disabled=""
|
|
3105
|
+
style="font-weight: var(--memori-text-weight-bold);"
|
|
3106
|
+
tabindex="0"
|
|
3107
|
+
type="button"
|
|
3108
|
+
>
|
|
3109
|
+
<span
|
|
3110
|
+
class="memori-button__content"
|
|
3111
|
+
>
|
|
3112
|
+
write_and_speak.tryMeButton
|
|
3113
|
+
</span>
|
|
3114
|
+
</button>
|
|
3115
|
+
</div>
|
|
3116
|
+
<p
|
|
3117
|
+
class="memori--start-description"
|
|
3118
|
+
>
|
|
3119
|
+
write_and_speak.pageTryMeExplanation
|
|
3120
|
+
</p>
|
|
3121
|
+
<span
|
|
3122
|
+
class="memori-tooltip blocked-memori-badge--tooltip"
|
|
3123
|
+
>
|
|
3124
|
+
<span
|
|
3125
|
+
class="memori-tooltip__trigger"
|
|
3126
|
+
id="base-ui-:r37:"
|
|
3127
|
+
>
|
|
3128
|
+
<div
|
|
3129
|
+
class="blocked-memori-badge--wrapper"
|
|
3130
|
+
>
|
|
3131
|
+
<div
|
|
3132
|
+
class="blocked-memori-badge margin-left"
|
|
3133
|
+
>
|
|
3134
|
+
<svg
|
|
3135
|
+
class="lucide lucide-triangle-alert blocked-memori-badge--icon"
|
|
3136
|
+
fill="none"
|
|
3137
|
+
height="24"
|
|
3138
|
+
stroke="currentColor"
|
|
3139
|
+
stroke-linecap="round"
|
|
3140
|
+
stroke-linejoin="round"
|
|
3141
|
+
stroke-width="2"
|
|
3142
|
+
viewBox="0 0 24 24"
|
|
3143
|
+
width="24"
|
|
3144
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3145
|
+
>
|
|
3146
|
+
<path
|
|
3147
|
+
d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"
|
|
3148
|
+
/>
|
|
3149
|
+
<path
|
|
3150
|
+
d="M12 9v4"
|
|
3151
|
+
/>
|
|
3152
|
+
<path
|
|
3153
|
+
d="M12 17h.01"
|
|
3154
|
+
/>
|
|
3155
|
+
</svg>
|
|
3156
|
+
</div>
|
|
3157
|
+
<span
|
|
3158
|
+
class="blocked-memori-badge--title"
|
|
3159
|
+
>
|
|
3160
|
+
memoriBlockedTitle
|
|
3161
|
+
</span>
|
|
3162
|
+
</div>
|
|
3163
|
+
</span>
|
|
3164
|
+
</span>
|
|
3165
|
+
</div>
|
|
3166
|
+
</div>
|
|
3167
|
+
</div>
|
|
3168
|
+
</div>
|
|
3169
|
+
`;
|
|
3170
|
+
|
|
2910
3171
|
exports[`renders StartPanel with position required unchanged 1`] = `
|
|
2911
3172
|
<div>
|
|
2912
3173
|
<div
|
|
@@ -12,7 +12,7 @@ import UploadDocuments from './UploadDocuments/UploadDocuments';
|
|
|
12
12
|
import UploadImages from './UploadImages/UploadImages';
|
|
13
13
|
import { useTranslation } from 'react-i18next';
|
|
14
14
|
import memoriApiClient from '@memori.ai/memori-api-client';
|
|
15
|
-
|
|
15
|
+
import { officeNativeExtensions } from '../../helpers/constants';
|
|
16
16
|
// Props interface
|
|
17
17
|
interface UploadManagerProps {
|
|
18
18
|
authToken?: string;
|
|
@@ -116,6 +116,7 @@ const UploadButton: React.FC<UploadManagerProps> = ({
|
|
|
116
116
|
'.csv',
|
|
117
117
|
'.md',
|
|
118
118
|
'.html',
|
|
119
|
+
...officeNativeExtensions,
|
|
119
120
|
];
|
|
120
121
|
const fileExt = `.${file.name.split('.').pop()?.toLowerCase()}`;
|
|
121
122
|
return documentExtensions.includes(fileExt);
|
|
@@ -413,15 +414,30 @@ const UploadButton: React.FC<UploadManagerProps> = ({
|
|
|
413
414
|
// Process each document file
|
|
414
415
|
const processedDocuments = files.map(file => {
|
|
415
416
|
const escapedFileName = escapeAttributeValue(file.name);
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
417
|
+
|
|
418
|
+
let formattedContent: string;
|
|
419
|
+
|
|
420
|
+
if (!file.content) {
|
|
421
|
+
// Office native format: metadata-only attachment tag + asset link (no text body)
|
|
422
|
+
formattedContent = `<document_attachment filename="${escapedFileName}" type="${file.mimeType}">
|
|
423
|
+
</document_attachment>
|
|
424
|
+
|
|
425
|
+
<attachment_link>
|
|
426
|
+
${file.textAssetUrl || ''}
|
|
427
|
+
</attachment_link>`;
|
|
428
|
+
} else {
|
|
429
|
+
// Truncate only the content that gets inlined inside the message
|
|
430
|
+
// <document_attachment> tag. The full text is still available via
|
|
431
|
+
// textAssetUrl as an uploaded asset.
|
|
432
|
+
const inlinedContent =
|
|
433
|
+
file.content.length > effectivePerDocumentLimit
|
|
434
|
+
? file.content.substring(0, effectivePerDocumentLimit) +
|
|
435
|
+
'\n\n[Content truncated due to size limits]'
|
|
436
|
+
: file.content;
|
|
437
|
+
|
|
438
|
+
formattedContent = `<document_attachment filename="${escapedFileName}" type="${
|
|
439
|
+
file.mimeType
|
|
440
|
+
}">
|
|
425
441
|
|
|
426
442
|
${inlinedContent}
|
|
427
443
|
|
|
@@ -430,6 +446,7 @@ ${inlinedContent}
|
|
|
430
446
|
<attachment_link>
|
|
431
447
|
${file.textAssetUrl || ''}
|
|
432
448
|
</attachment_link>`;
|
|
449
|
+
}
|
|
433
450
|
|
|
434
451
|
return {
|
|
435
452
|
name: file.name,
|
|
@@ -437,6 +454,7 @@ ${file.textAssetUrl || ''}
|
|
|
437
454
|
content: formattedContent,
|
|
438
455
|
type: 'document',
|
|
439
456
|
mimeType: file.mimeType,
|
|
457
|
+
url: file.textAssetUrl,
|
|
440
458
|
};
|
|
441
459
|
});
|
|
442
460
|
|
|
@@ -455,6 +473,7 @@ ${file.textAssetUrl || ''}
|
|
|
455
473
|
'.csv',
|
|
456
474
|
'.md',
|
|
457
475
|
'.html',
|
|
476
|
+
...officeNativeExtensions,
|
|
458
477
|
];
|
|
459
478
|
const MAX_FILE_SIZE = 15 * 1024 * 1024; // 15MB
|
|
460
479
|
|
|
@@ -607,7 +626,7 @@ ${file.textAssetUrl || ''}
|
|
|
607
626
|
<input
|
|
608
627
|
ref={unifiedInputRef}
|
|
609
628
|
type="file"
|
|
610
|
-
accept=
|
|
629
|
+
accept={`.jpg,.jpeg,.png,.pdf,.txt,.json,.xlsx,.csv,.md,.html,${officeNativeExtensions.join(',')}`}
|
|
611
630
|
multiple
|
|
612
631
|
className="memori--upload-file-input"
|
|
613
632
|
onChange={handleFileInputChange}
|