@memori.ai/memori-react 9.0.0-alpha.5 → 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 +49 -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 +19 -15
- 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/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/MemoriWidget/MemoriWidget.js +632 -280
- package/dist/components/MemoriWidget/MemoriWidget.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/WebsiteAssistant/website-assistant.css +2 -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/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 +19 -15
- 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/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/MemoriWidget/MemoriWidget.js +632 -280
- package/esm/components/MemoriWidget/MemoriWidget.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/WebsiteAssistant/website-assistant.css +2 -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/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 +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 +37 -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/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/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/__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/WebsiteAssistant/website-assistant.css +2 -1
- package/src/components/layouts/layouts.stories.tsx +131 -12
- 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/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
|
+
});
|
|
@@ -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}
|