@memori.ai/memori-react 9.0.0-alpha.16 → 9.0.0-alpha.18
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 +4 -6944
- package/dist/components/Chat/Chat.css +11 -15
- package/dist/components/Chat/Chat.js +11 -3
- package/dist/components/Chat/Chat.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.css +96 -22
- package/dist/components/ChatBubble/ChatBubble.js +31 -2
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/ChatHistoryDrawer/ChatHistory.css +1 -0
- package/dist/components/ChatInputs/ChatInputs.css +72 -147
- package/dist/components/ChatInputs/ChatInputs.js +3 -4
- package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
- package/dist/components/Header/ChatConsumptionDropdown.js +2 -1
- package/dist/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/dist/components/Header/Header.css +199 -34
- package/dist/components/Header/Header.d.ts +1 -0
- package/dist/components/Header/Header.js +42 -34
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/IconButton/IconButton.css +144 -0
- package/dist/components/IconButton/IconButton.d.ts +9 -0
- package/dist/components/IconButton/IconButton.js +36 -0
- package/dist/components/IconButton/IconButton.js.map +1 -0
- package/dist/components/KnownFacts/KnownFacts.css +22 -9
- package/dist/components/KnownFacts/KnownFacts.js +13 -4
- package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +29 -44
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +3 -2
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.css +2 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +27 -30
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/MicrophoneButton/MicrophoneButton.css +2 -183
- package/dist/components/MicrophoneButton/MicrophoneButton.js +3 -1
- package/dist/components/MicrophoneButton/MicrophoneButton.js.map +1 -1
- package/dist/components/MobileSessionPanel/MobileSessionPanel.css +22 -7
- package/dist/components/MobileSessionPanel/MobileSessionPanel.d.ts +1 -0
- package/dist/components/MobileSessionPanel/MobileSessionPanel.js +6 -4
- package/dist/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
- package/dist/components/PositionPopover/PositionPopover.d.ts +2 -0
- package/dist/components/PositionPopover/PositionPopover.js +18 -4
- package/dist/components/PositionPopover/PositionPopover.js.map +1 -1
- package/dist/components/ShareButton/ShareButton.css +3 -2
- package/dist/components/ShareButton/ShareButton.js +3 -2
- package/dist/components/ShareButton/ShareButton.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.css +2 -20
- package/dist/components/UploadButton/UploadButton.js +2 -1
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/layouts/Chat.js +59 -73
- package/dist/components/layouts/Chat.js.map +1 -1
- package/dist/components/layouts/FullPage.js +53 -34
- package/dist/components/layouts/FullPage.js.map +1 -1
- package/dist/components/layouts/HiddenChat.js +3 -3
- package/dist/components/layouts/HiddenChat.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +3 -3
- package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant/website-assistant.css +28 -15
- package/dist/components/layouts/ZoomedFullBody.js +53 -34
- package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
- package/dist/components/layouts/chat.css +76 -41
- package/dist/components/layouts/fullpage.css +18 -9
- package/dist/components/layouts/hidden-chat.css +45 -69
- package/dist/components/layouts/zoomed-full-body.css +6 -5
- package/dist/helpers/positionPopover.d.ts +1 -1
- package/dist/helpers/positionPopover.js +2 -2
- package/dist/helpers/positionPopover.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/esm/components/Chat/Chat.css +11 -15
- package/esm/components/Chat/Chat.js +11 -3
- package/esm/components/Chat/Chat.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.css +96 -22
- package/esm/components/ChatBubble/ChatBubble.js +31 -2
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/ChatHistoryDrawer/ChatHistory.css +1 -0
- package/esm/components/ChatInputs/ChatInputs.css +72 -147
- package/esm/components/ChatInputs/ChatInputs.js +3 -4
- package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
- package/esm/components/Header/ChatConsumptionDropdown.js +3 -2
- package/esm/components/Header/ChatConsumptionDropdown.js.map +1 -1
- package/esm/components/Header/Header.css +199 -34
- package/esm/components/Header/Header.d.ts +1 -0
- package/esm/components/Header/Header.js +42 -34
- package/esm/components/Header/Header.js.map +1 -1
- package/esm/components/IconButton/IconButton.css +144 -0
- package/esm/components/IconButton/IconButton.d.ts +9 -0
- package/esm/components/IconButton/IconButton.js +33 -0
- package/esm/components/IconButton/IconButton.js.map +1 -0
- package/esm/components/KnownFacts/KnownFacts.css +22 -9
- package/esm/components/KnownFacts/KnownFacts.js +13 -4
- package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +29 -44
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +3 -2
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.css +2 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +27 -30
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/MicrophoneButton/MicrophoneButton.css +2 -183
- package/esm/components/MicrophoneButton/MicrophoneButton.js +3 -2
- package/esm/components/MicrophoneButton/MicrophoneButton.js.map +1 -1
- package/esm/components/MobileSessionPanel/MobileSessionPanel.css +22 -7
- package/esm/components/MobileSessionPanel/MobileSessionPanel.d.ts +1 -0
- package/esm/components/MobileSessionPanel/MobileSessionPanel.js +6 -4
- package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
- package/esm/components/PositionPopover/PositionPopover.d.ts +2 -0
- package/esm/components/PositionPopover/PositionPopover.js +18 -4
- package/esm/components/PositionPopover/PositionPopover.js.map +1 -1
- package/esm/components/ShareButton/ShareButton.css +3 -2
- package/esm/components/ShareButton/ShareButton.js +4 -3
- package/esm/components/ShareButton/ShareButton.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.css +2 -20
- package/esm/components/UploadButton/UploadButton.js +2 -1
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/layouts/Chat.js +62 -76
- package/esm/components/layouts/Chat.js.map +1 -1
- package/esm/components/layouts/FullPage.js +54 -35
- package/esm/components/layouts/FullPage.js.map +1 -1
- package/esm/components/layouts/HiddenChat.js +3 -3
- package/esm/components/layouts/HiddenChat.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +3 -3
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant/website-assistant.css +28 -15
- package/esm/components/layouts/ZoomedFullBody.js +54 -35
- package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
- package/esm/components/layouts/chat.css +76 -41
- package/esm/components/layouts/fullpage.css +18 -9
- package/esm/components/layouts/hidden-chat.css +45 -69
- package/esm/components/layouts/zoomed-full-body.css +6 -5
- package/esm/helpers/positionPopover.d.ts +1 -1
- package/esm/helpers/positionPopover.js +2 -2
- package/esm/helpers/positionPopover.js.map +1 -1
- package/esm/styles.css +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/package.json +1 -1
- package/src/components/Chat/Chat.css +11 -15
- package/src/components/Chat/Chat.tsx +13 -2
- package/src/components/ChatBubble/ChatBubble.css +96 -22
- package/src/components/ChatBubble/ChatBubble.tsx +39 -0
- package/src/components/ChatHistoryDrawer/ChatHistory.css +1 -0
- package/src/components/ChatInputs/ChatInputs.css +72 -147
- package/src/components/ChatInputs/ChatInputs.tsx +7 -7
- package/src/components/Header/ChatConsumptionDropdown.tsx +3 -2
- package/src/components/Header/Header.css +199 -34
- package/src/components/Header/Header.tsx +120 -100
- package/src/components/Header/__snapshots__/Header.test.tsx.snap +90 -57
- package/src/components/IconButton/IconButton.css +144 -0
- package/src/components/IconButton/IconButton.tsx +89 -0
- package/src/components/KnownFacts/KnownFacts.css +22 -9
- package/src/components/KnownFacts/KnownFacts.tsx +13 -3
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +29 -44
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +11 -20
- package/src/components/MemoriWidget/MemoriWidget.css +2 -1
- package/src/components/MemoriWidget/MemoriWidget.tsx +38 -31
- package/src/components/MicrophoneButton/MicrophoneButton.css +2 -183
- package/src/components/MicrophoneButton/MicrophoneButton.tsx +5 -5
- package/src/components/MobileSessionPanel/MobileSessionPanel.css +22 -7
- package/src/components/MobileSessionPanel/MobileSessionPanel.tsx +8 -6
- package/src/components/PositionPopover/PositionPopover.tsx +30 -4
- package/src/components/ShareButton/ShareButton.css +3 -2
- package/src/components/ShareButton/ShareButton.tsx +8 -9
- package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +9 -9
- package/src/components/StartPanel/StartPanel.stories.tsx +1 -1
- package/src/components/UploadButton/UploadButton.css +2 -20
- package/src/components/UploadButton/UploadButton.tsx +3 -5
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +29 -25
- package/src/components/layouts/Chat.tsx +210 -232
- package/src/components/layouts/FullPage.tsx +61 -40
- package/src/components/layouts/HiddenChat.tsx +5 -6
- package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +2 -2
- package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +2 -0
- package/src/components/layouts/WebsiteAssistant/website-assistant.css +28 -15
- package/src/components/layouts/ZoomedFullBody.tsx +61 -40
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +145 -143
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +22 -18
- package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +10 -145
- package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +12 -10
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +11 -9
- package/src/components/layouts/chat.css +76 -41
- package/src/components/layouts/fullpage.css +18 -9
- package/src/components/layouts/hidden-chat.css +45 -69
- package/src/components/layouts/layouts.stories.tsx +1 -1
- package/src/components/layouts/zoomed-full-body.css +6 -5
- package/src/helpers/positionPopover.test.ts +10 -4
- package/src/helpers/positionPopover.ts +8 -5
- package/src/styles.css +1 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import cx from 'classnames';
|
|
3
|
+
import { Button } from '@memori.ai/ui';
|
|
4
|
+
|
|
5
|
+
export type IconButtonProps = Omit<
|
|
6
|
+
React.ComponentProps<typeof Button>,
|
|
7
|
+
'variant' | 'active'
|
|
8
|
+
> & {
|
|
9
|
+
/**
|
|
10
|
+
* Toggle / popover-open / selected. Soft primary chrome — never solid primary fill.
|
|
11
|
+
*/
|
|
12
|
+
active?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Mic (or similar) recording state. Soft error chrome — never primary.
|
|
15
|
+
*/
|
|
16
|
+
recording?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Optional override; defaults to toolbar so outline+active solid fill from the UI lib
|
|
19
|
+
* cannot leak into secondary icon tools.
|
|
20
|
+
*/
|
|
21
|
+
variant?: React.ComponentProps<typeof Button>['variant'];
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function hasVisibleLabel(children: React.ReactNode): boolean {
|
|
25
|
+
return React.Children.toArray(children).some(child => {
|
|
26
|
+
if (child === null || child === undefined) return false;
|
|
27
|
+
if (typeof child === 'boolean') return false;
|
|
28
|
+
if (typeof child === 'string') return child.trim().length > 0;
|
|
29
|
+
if (typeof child === 'number') return true;
|
|
30
|
+
return true;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Shared secondary icon control for chat header + input bar.
|
|
36
|
+
* CTA actions (Accedi, send) must keep using Button variant="primary".
|
|
37
|
+
*/
|
|
38
|
+
const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
|
|
39
|
+
(
|
|
40
|
+
{
|
|
41
|
+
active = false,
|
|
42
|
+
recording = false,
|
|
43
|
+
className,
|
|
44
|
+
variant = 'toolbar',
|
|
45
|
+
shape = 'default',
|
|
46
|
+
size = 'sm',
|
|
47
|
+
children,
|
|
48
|
+
...rest
|
|
49
|
+
},
|
|
50
|
+
ref
|
|
51
|
+
) => {
|
|
52
|
+
const isRecording = !!recording;
|
|
53
|
+
const isActive = !!active && !isRecording;
|
|
54
|
+
const isLabeled = hasVisibleLabel(children);
|
|
55
|
+
// Never inherit CTA / outline solid-active chrome from layout buttonVariant.
|
|
56
|
+
const resolvedVariant =
|
|
57
|
+
variant === 'primary' ||
|
|
58
|
+
variant === 'secondary' ||
|
|
59
|
+
variant === 'danger' ||
|
|
60
|
+
variant === 'outline' ||
|
|
61
|
+
variant === 'ghost'
|
|
62
|
+
? 'toolbar'
|
|
63
|
+
: variant;
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<Button
|
|
67
|
+
ref={ref}
|
|
68
|
+
variant={resolvedVariant}
|
|
69
|
+
shape={shape}
|
|
70
|
+
size={size}
|
|
71
|
+
active={isActive}
|
|
72
|
+
className={cx(
|
|
73
|
+
'memori-icon-button',
|
|
74
|
+
isLabeled && 'memori-icon-button--labeled',
|
|
75
|
+
isActive && 'memori-icon-button--active',
|
|
76
|
+
isRecording && 'memori-icon-button--recording',
|
|
77
|
+
className
|
|
78
|
+
)}
|
|
79
|
+
{...rest}
|
|
80
|
+
>
|
|
81
|
+
{children}
|
|
82
|
+
</Button>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
IconButton.displayName = 'IconButton';
|
|
88
|
+
|
|
89
|
+
export default IconButton;
|
|
@@ -14,22 +14,35 @@
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/* Table wrapper: flex column so pagination footer stays visible below the scroll body */
|
|
18
|
+
.memori-known-facts-table-wrapper.memori-table-wrapper {
|
|
19
|
+
display: flex;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
min-height: 0;
|
|
22
|
+
flex: 1 1 auto;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
border: 1px solid var(--memori-color-border, #e2e8f0);
|
|
25
|
+
border-radius: 8px;
|
|
26
|
+
}
|
|
27
|
+
|
|
17
28
|
.memori-known-facts-table-wrapper {
|
|
18
29
|
.memori-table-scroll {
|
|
19
|
-
height:
|
|
30
|
+
min-height: 0;
|
|
31
|
+
max-height: none;
|
|
32
|
+
flex: 1 1 auto;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.memori-table-footer {
|
|
36
|
+
flex-shrink: 0;
|
|
20
37
|
}
|
|
38
|
+
|
|
21
39
|
.memori-table-pagination__range {
|
|
22
40
|
display: none;
|
|
23
41
|
}
|
|
24
|
-
}
|
|
25
42
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
min-height: 0;
|
|
30
|
-
flex: 1 1 auto;
|
|
31
|
-
border: 1px solid var(--memori-color-border, #e2e8f0);
|
|
32
|
-
border-radius: 8px;
|
|
43
|
+
.memori-table-pagination__page-size {
|
|
44
|
+
display: none;
|
|
45
|
+
}
|
|
33
46
|
}
|
|
34
47
|
|
|
35
48
|
.memori-known-facts-text-cell {
|
|
@@ -10,7 +10,6 @@ import memoriApiClient from '@memori.ai/memori-api-client';
|
|
|
10
10
|
import {
|
|
11
11
|
Button,
|
|
12
12
|
Drawer,
|
|
13
|
-
Spin,
|
|
14
13
|
Modal,
|
|
15
14
|
Table,
|
|
16
15
|
useAlertManager,
|
|
@@ -118,7 +117,9 @@ const KnownFacts = ({
|
|
|
118
117
|
|
|
119
118
|
const [bulkDeleteModalVisible, setBulkDeleteModalVisible] = useState(false);
|
|
120
119
|
const [bulkDeleteIds, setBulkDeleteIds] = useState<string[]>([]);
|
|
120
|
+
const [bulkDeleting, setBulkDeleting] = useState(false);
|
|
121
121
|
const [deleteModalVisibleFor, setDeleteModalVisibleFor] = useState<string>();
|
|
122
|
+
const [singleDeleting, setSingleDeleting] = useState(false);
|
|
122
123
|
const selectedRowsLabel = useMemo(
|
|
123
124
|
() =>
|
|
124
125
|
t('knownFacts.selectedRows', {
|
|
@@ -222,7 +223,10 @@ const KnownFacts = ({
|
|
|
222
223
|
</Button>
|
|
223
224
|
<Button
|
|
224
225
|
variant="danger"
|
|
226
|
+
loading={bulkDeleting}
|
|
227
|
+
disabled={bulkDeleting}
|
|
225
228
|
onClick={async () => {
|
|
229
|
+
setBulkDeleting(true);
|
|
226
230
|
try {
|
|
227
231
|
const mutations = bulkDeleteIds.map(knownFactID =>
|
|
228
232
|
deleteKnownFact(sessionID, knownFactID)
|
|
@@ -261,6 +265,8 @@ const KnownFacts = ({
|
|
|
261
265
|
severity: 'error',
|
|
262
266
|
})
|
|
263
267
|
);
|
|
268
|
+
} finally {
|
|
269
|
+
setBulkDeleting(false);
|
|
264
270
|
}
|
|
265
271
|
}}
|
|
266
272
|
>
|
|
@@ -277,7 +283,7 @@ const KnownFacts = ({
|
|
|
277
283
|
getRowId={row => row.knownFactID}
|
|
278
284
|
isLoading={loading}
|
|
279
285
|
rowActionsVariant='inline'
|
|
280
|
-
maxBodyHeight=
|
|
286
|
+
maxBodyHeight={false}
|
|
281
287
|
bulkActions={[
|
|
282
288
|
{
|
|
283
289
|
label: t('delete'),
|
|
@@ -315,7 +321,6 @@ const KnownFacts = ({
|
|
|
315
321
|
);
|
|
316
322
|
},
|
|
317
323
|
initialPageSize: 10,
|
|
318
|
-
pageSizeOptions: [10,25,50,100],
|
|
319
324
|
}
|
|
320
325
|
: { enablePagination: false })}
|
|
321
326
|
/>
|
|
@@ -345,9 +350,12 @@ const KnownFacts = ({
|
|
|
345
350
|
</Button>
|
|
346
351
|
<Button
|
|
347
352
|
variant="danger"
|
|
353
|
+
loading={singleDeleting}
|
|
354
|
+
disabled={singleDeleting}
|
|
348
355
|
onClick={async () => {
|
|
349
356
|
if (!deleteModalVisibleFor) return;
|
|
350
357
|
const kfId = deleteModalVisibleFor;
|
|
358
|
+
setSingleDeleting(true);
|
|
351
359
|
try {
|
|
352
360
|
const response = await deleteKnownFact(sessionID, kfId);
|
|
353
361
|
if (response.resultCode === 0) {
|
|
@@ -378,6 +386,8 @@ const KnownFacts = ({
|
|
|
378
386
|
severity: 'error',
|
|
379
387
|
})
|
|
380
388
|
);
|
|
389
|
+
} finally {
|
|
390
|
+
setSingleDeleting(false);
|
|
381
391
|
}
|
|
382
392
|
}}
|
|
383
393
|
>
|
|
@@ -69,13 +69,14 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
|
|
|
69
69
|
display: none !important;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
/* Inline layout column —
|
|
72
|
+
/* Inline layout column — fills the layout flex slot, not a fixed overlay.
|
|
73
|
+
min-height: 0 (not 100vh) so opening the artifact cannot expand the page. */
|
|
73
74
|
.memori-artifact-layout-column {
|
|
74
75
|
display: flex;
|
|
75
76
|
overflow: hidden;
|
|
76
77
|
width: 100%;
|
|
77
78
|
height: 100%;
|
|
78
|
-
min-height:
|
|
79
|
+
min-height: 0;
|
|
79
80
|
flex-direction: column;
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -695,26 +696,25 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
|
|
|
695
696
|
background: var(--memori-primary-subtle);
|
|
696
697
|
}
|
|
697
698
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
699
|
+
/* Match website_assistant / hidden_chat sidebar close — never outline primary fill */
|
|
700
|
+
.memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button,
|
|
701
|
+
.memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button:hover:not(:disabled, .memori-button--disabled),
|
|
702
|
+
.memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button:active:not(:disabled, .memori-button--disabled) {
|
|
703
|
+
border: var(--memori-border, 1px) solid color-mix(in srgb, var(--memori-text-color, #111827) 18%, transparent);
|
|
704
|
+
background: transparent;
|
|
705
|
+
box-shadow: none;
|
|
706
|
+
color: var(--memori-text-color, #111827);
|
|
707
|
+
transform: none;
|
|
707
708
|
}
|
|
708
709
|
|
|
709
|
-
.memori-artifact-drawer--close-
|
|
710
|
-
|
|
711
|
-
background: color-mix(in srgb, var(--memori-text-color, #111827) 8%, transparent);
|
|
712
|
-
color: inherit !important;
|
|
710
|
+
.memori-widget .memori-artifact-drawer--close.memori-icon-button.memori-button:hover:not(:disabled, .memori-button--disabled) {
|
|
711
|
+
background: color-mix(in srgb, var(--memori-text-color, #111827) 6%, transparent);
|
|
713
712
|
}
|
|
714
713
|
|
|
715
|
-
.memori-artifact-drawer--close
|
|
716
|
-
|
|
717
|
-
|
|
714
|
+
.memori-widget .memori-artifact-drawer--close .memori-icon-close {
|
|
715
|
+
width: 1.125rem;
|
|
716
|
+
height: 1.125rem;
|
|
717
|
+
fill: none;
|
|
718
718
|
stroke: currentColor;
|
|
719
719
|
}
|
|
720
720
|
|
|
@@ -738,15 +738,6 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
|
|
|
738
738
|
font-family: var(--memori-font-family);
|
|
739
739
|
}
|
|
740
740
|
|
|
741
|
-
.memori-artifact-drawer--close {
|
|
742
|
-
display: flex;
|
|
743
|
-
align-items: center;
|
|
744
|
-
justify-content: center;
|
|
745
|
-
border-radius: var(--memori-radius-box);
|
|
746
|
-
/* background: var(--artifact-drawer-bg); */
|
|
747
|
-
margin-left: auto;
|
|
748
|
-
}
|
|
749
|
-
|
|
750
741
|
.memori-artifact-actions {
|
|
751
742
|
flex: 1;
|
|
752
743
|
}
|
|
@@ -806,26 +797,24 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
|
|
|
806
797
|
flex: 0 0 auto;
|
|
807
798
|
}
|
|
808
799
|
|
|
809
|
-
/* Make mobile
|
|
810
|
-
.memori-artifact-drawer-top-right .memori-button--more-options
|
|
811
|
-
.memori-artifact-drawer-top-right .memori-artifact-drawer--close {
|
|
800
|
+
/* Make mobile more-options match header toolbar buttons */
|
|
801
|
+
.memori-artifact-drawer-top-right .memori-button--more-options {
|
|
812
802
|
display: flex;
|
|
813
|
-
width:
|
|
814
|
-
min-width:
|
|
815
|
-
height:
|
|
816
|
-
min-height:
|
|
803
|
+
width: 2.5rem;
|
|
804
|
+
min-width: 2.5rem;
|
|
805
|
+
height: 2.5rem;
|
|
806
|
+
min-height: 2.5rem;
|
|
817
807
|
align-items: center;
|
|
818
808
|
justify-content: center;
|
|
819
809
|
padding: 0;
|
|
820
|
-
border: 1px solid color-mix(in srgb, var(--memori-text-color, #111827)
|
|
821
|
-
border-radius: var(--memori-radius-box);
|
|
810
|
+
border: var(--memori-border, 1px) solid color-mix(in srgb, var(--memori-text-color, #111827) 18%, transparent);
|
|
811
|
+
border-radius: var(--memori-radius-box, 0.5rem);
|
|
822
812
|
margin-left: 0;
|
|
823
813
|
}
|
|
824
814
|
|
|
825
|
-
.memori-artifact-drawer-top-right .memori-button--more-options:hover
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
background: color-mix(in srgb, var(--memori-text-color, #111827) 8%, transparent);
|
|
815
|
+
.memori-artifact-drawer-top-right .memori-button--more-options:hover {
|
|
816
|
+
border-color: color-mix(in srgb, var(--memori-text-color, #111827) 18%, transparent);
|
|
817
|
+
background: color-mix(in srgb, var(--memori-text-color, #111827) 6%, transparent);
|
|
829
818
|
}
|
|
830
819
|
|
|
831
820
|
/* Content fills remaining viewport under the toolbar (no floating card) */
|
|
@@ -1105,10 +1094,6 @@ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop,
|
|
|
1105
1094
|
}
|
|
1106
1095
|
|
|
1107
1096
|
@media (max-width: 1260px) {
|
|
1108
|
-
.memori-artifact-drawer--close {
|
|
1109
|
-
margin-left: 0;
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
1097
|
.memori-artifact-panel--header {
|
|
1113
1098
|
margin-bottom: var(--memori-spacing-sm);
|
|
1114
1099
|
}
|
|
@@ -25,6 +25,7 @@ import { ArtifactData, ArtifactTab } from '../../types/artifact.types';
|
|
|
25
25
|
import cx from 'classnames';
|
|
26
26
|
import { useCopyArtifact } from '../ArtifactActions/hooks/useCopyArtifact';
|
|
27
27
|
import TabSwitch from './components/TabSwitch';
|
|
28
|
+
import IconButton from '../../../IconButton/IconButton';
|
|
28
29
|
|
|
29
30
|
const ArtifactDrawer: React.FC<{
|
|
30
31
|
isChatLogPanel?: boolean;
|
|
@@ -261,19 +262,14 @@ const ArtifactDrawer: React.FC<{
|
|
|
261
262
|
isMobile={isMobile}
|
|
262
263
|
/>
|
|
263
264
|
{!isChatLogPanel && (
|
|
264
|
-
<
|
|
265
|
+
<IconButton
|
|
265
266
|
onClick={closeArtifact}
|
|
266
|
-
variant="outline"
|
|
267
267
|
aria-label={t('artifact.close') || 'Close'}
|
|
268
|
-
className="memori-artifact-drawer--close-desktop"
|
|
269
|
-
icon={
|
|
270
|
-
<X
|
|
271
|
-
className="memori-artifact-panel--close-icon"
|
|
272
|
-
aria-hidden
|
|
273
|
-
/>
|
|
274
|
-
}
|
|
275
268
|
title={t('artifact.close') || 'Close'}
|
|
276
|
-
|
|
269
|
+
className="memori-artifact-drawer--close"
|
|
270
|
+
>
|
|
271
|
+
<X className="memori-icon-close" aria-hidden />
|
|
272
|
+
</IconButton>
|
|
277
273
|
)}
|
|
278
274
|
</>
|
|
279
275
|
)}
|
|
@@ -395,19 +391,14 @@ const ArtifactDrawer: React.FC<{
|
|
|
395
391
|
</Dropdown.Item>
|
|
396
392
|
</Dropdown.Menu>
|
|
397
393
|
</Dropdown>
|
|
398
|
-
<
|
|
394
|
+
<IconButton
|
|
399
395
|
onClick={closeArtifact}
|
|
400
|
-
className={cx(
|
|
401
|
-
'memori-artifact-drawer--close',
|
|
402
|
-
'memori-button--icon-only'
|
|
403
|
-
)}
|
|
404
|
-
variant="ghost"
|
|
405
396
|
aria-label={t('artifact.close') || 'Close'}
|
|
406
397
|
title={t('artifact.close') || 'Close'}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
398
|
+
className="memori-artifact-drawer--close"
|
|
399
|
+
>
|
|
400
|
+
<X className="memori-icon-close" aria-hidden />
|
|
401
|
+
</IconButton>
|
|
411
402
|
</div>
|
|
412
403
|
</>
|
|
413
404
|
)}
|
|
@@ -156,7 +156,8 @@
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
.memori.memori-widget.chat-focused .memori--powered-by,
|
|
159
|
-
.memori.memori-widget.
|
|
159
|
+
.memori.memori-widget.memori-layout-website_assistant.chat-focused
|
|
160
|
+
.memori-website_assistant--close-button {
|
|
160
161
|
display: none;
|
|
161
162
|
}
|
|
162
163
|
|
|
@@ -549,6 +549,11 @@ export function getChatStyles(
|
|
|
549
549
|
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast-inverse, white) 85%)',
|
|
550
550
|
'--memori-skeleton-highlight':
|
|
551
551
|
'color-mix(in oklch, var(--memori-primary), var(--memori-surface-contrast-inverse, white) 75%)',
|
|
552
|
+
/* Soft fills for secondary IconButton active / recording (never solid CTA) */
|
|
553
|
+
'--memori-icon-active-bg':
|
|
554
|
+
'color-mix(in oklch, var(--memori-primary) 12%, transparent)',
|
|
555
|
+
'--memori-icon-recording-bg':
|
|
556
|
+
'color-mix(in oklch, var(--memori-error, #dc2626) 12%, transparent)',
|
|
552
557
|
} as CSSProperties;
|
|
553
558
|
}
|
|
554
559
|
|
|
@@ -647,23 +652,6 @@ const MemoriWidget = ({
|
|
|
647
652
|
const [widgetSurfaceEl, setWidgetSurfaceEl] = useState<HTMLDivElement | null>(
|
|
648
653
|
null
|
|
649
654
|
);
|
|
650
|
-
const [isDarkTheme, setIsDarkTheme] = useState(false);
|
|
651
|
-
useEffect(() => {
|
|
652
|
-
if (!widgetRootEl) return;
|
|
653
|
-
const check = () => {
|
|
654
|
-
setIsDarkTheme(!!widgetRootEl.closest('[data-theme="dark"]'));
|
|
655
|
-
};
|
|
656
|
-
check();
|
|
657
|
-
const observer = new MutationObserver(check);
|
|
658
|
-
const parent = widgetRootEl.parentElement ?? document.body;
|
|
659
|
-
observer.observe(parent, {
|
|
660
|
-
attributes: true,
|
|
661
|
-
attributeFilter: ['data-theme'],
|
|
662
|
-
subtree: true,
|
|
663
|
-
});
|
|
664
|
-
return () => observer.disconnect();
|
|
665
|
-
}, [widgetRootEl]);
|
|
666
|
-
|
|
667
655
|
const [loginToken, setLoginToken] = useState<string | undefined>(
|
|
668
656
|
additionalInfo?.loginToken ?? authToken
|
|
669
657
|
);
|
|
@@ -884,6 +872,8 @@ const MemoriWidget = ({
|
|
|
884
872
|
useState(false);
|
|
885
873
|
const [hasUserTypedMessage, setHasUserTypedMessage] = useState(false);
|
|
886
874
|
const [positionPopoverOpen, setPositionPopoverOpenState] = useState(false);
|
|
875
|
+
const [autoStartPositionGeolocation, setAutoStartPositionGeolocation] =
|
|
876
|
+
useState(false);
|
|
887
877
|
const [showSettingsDrawer, setShowSettingsDrawer] = useState(false);
|
|
888
878
|
const [showChatHistoryDrawer, setShowChatHistoryDrawer] = useState(false);
|
|
889
879
|
const [showKnownFactsDrawer, setShowKnownFactsDrawer] = useState(false);
|
|
@@ -2691,12 +2681,12 @@ const MemoriWidget = ({
|
|
|
2691
2681
|
}`
|
|
2692
2682
|
);
|
|
2693
2683
|
}
|
|
2694
|
-
if (integrationConfig?.blurBackground) {
|
|
2684
|
+
if (integrationConfig?.blurBackground === false) {
|
|
2695
2685
|
integrationStylesheetParts.push(
|
|
2696
2686
|
`.memori-widget .memori-chat--history--has-global-background::before,
|
|
2697
2687
|
.memori-widget .memori-chat-layout--main--has-background::before {
|
|
2698
|
-
filter:
|
|
2699
|
-
transform:
|
|
2688
|
+
filter: none;
|
|
2689
|
+
transform: none;
|
|
2700
2690
|
}`
|
|
2701
2691
|
);
|
|
2702
2692
|
}
|
|
@@ -3280,19 +3270,30 @@ const MemoriWidget = ({
|
|
|
3280
3270
|
|
|
3281
3271
|
const setPositionPopoverOpen = useCallback(
|
|
3282
3272
|
(open: boolean) => {
|
|
3273
|
+
const sessionAlreadyStarted = !!(sessionId && hasUserActivatedSpeak);
|
|
3283
3274
|
setPositionPopoverOpenState(wasOpen => {
|
|
3284
3275
|
if (
|
|
3285
|
-
shouldRestartSessionOnPositionPopoverClose(
|
|
3276
|
+
shouldRestartSessionOnPositionPopoverClose(
|
|
3277
|
+
wasOpen,
|
|
3278
|
+
open,
|
|
3279
|
+
autoStart,
|
|
3280
|
+
sessionAlreadyStarted
|
|
3281
|
+
)
|
|
3286
3282
|
) {
|
|
3287
3283
|
// Defer: React setState updaters must stay pure.
|
|
3288
3284
|
queueMicrotask(() => {
|
|
3289
3285
|
onClickStart();
|
|
3290
3286
|
});
|
|
3291
3287
|
}
|
|
3288
|
+
if (!open) {
|
|
3289
|
+
queueMicrotask(() => {
|
|
3290
|
+
setAutoStartPositionGeolocation(false);
|
|
3291
|
+
});
|
|
3292
|
+
}
|
|
3292
3293
|
return open;
|
|
3293
3294
|
});
|
|
3294
3295
|
},
|
|
3295
|
-
[autoStart, onClickStart]
|
|
3296
|
+
[autoStart, onClickStart, sessionId, hasUserActivatedSpeak]
|
|
3296
3297
|
);
|
|
3297
3298
|
|
|
3298
3299
|
useEffect(() => {
|
|
@@ -3497,6 +3498,7 @@ const MemoriWidget = ({
|
|
|
3497
3498
|
setVenue: setPosition,
|
|
3498
3499
|
positionPopoverOpen,
|
|
3499
3500
|
setPositionPopoverOpen,
|
|
3501
|
+
autoStartPositionGeolocation,
|
|
3500
3502
|
setShowSettingsDrawer,
|
|
3501
3503
|
setShowKnownFactsDrawer,
|
|
3502
3504
|
setShowExpertsDrawer,
|
|
@@ -3508,7 +3510,9 @@ const MemoriWidget = ({
|
|
|
3508
3510
|
setShowChatHistoryDrawer,
|
|
3509
3511
|
showSettings: showSettings ?? integrationConfig?.showSettings ?? true,
|
|
3510
3512
|
showChatHistory:
|
|
3511
|
-
|
|
3513
|
+
selectedLayout === 'WEBSITE_ASSISTANT'
|
|
3514
|
+
? false
|
|
3515
|
+
: showChatHistory ?? integrationConfig?.showChatHistory ?? true,
|
|
3512
3516
|
showMessageConsumption: enableMessageConsumption,
|
|
3513
3517
|
hasUserActivatedSpeak,
|
|
3514
3518
|
showReload: selectedLayout === 'TOTEM',
|
|
@@ -3564,7 +3568,10 @@ const MemoriWidget = ({
|
|
|
3564
3568
|
apiUrl: client.constants.BACKEND_URL,
|
|
3565
3569
|
position: position,
|
|
3566
3570
|
setVenue: setPosition,
|
|
3567
|
-
openPositionPopover: () =>
|
|
3571
|
+
openPositionPopover: () => {
|
|
3572
|
+
setAutoStartPositionGeolocation(true);
|
|
3573
|
+
setPositionPopoverOpen(true);
|
|
3574
|
+
},
|
|
3568
3575
|
integrationConfig: integrationConfig,
|
|
3569
3576
|
instruct: instruct,
|
|
3570
3577
|
sessionId: sessionId,
|
|
@@ -3577,7 +3584,9 @@ const MemoriWidget = ({
|
|
|
3577
3584
|
showLogin: canShowLoginButton,
|
|
3578
3585
|
setShowLoginDrawer,
|
|
3579
3586
|
showChatHistory:
|
|
3580
|
-
|
|
3587
|
+
selectedLayout === 'WEBSITE_ASSISTANT'
|
|
3588
|
+
? false
|
|
3589
|
+
: showChatHistory ?? integrationConfig?.showChatHistory ?? true,
|
|
3581
3590
|
setShowChatHistoryDrawer,
|
|
3582
3591
|
user,
|
|
3583
3592
|
};
|
|
@@ -3672,7 +3681,7 @@ const MemoriWidget = ({
|
|
|
3672
3681
|
const integrationStyle =
|
|
3673
3682
|
integration &&
|
|
3674
3683
|
(Object.keys(integrationProperties).length > 0 ||
|
|
3675
|
-
integrationConfig?.blurBackground) ? (
|
|
3684
|
+
integrationConfig?.blurBackground === false) ? (
|
|
3676
3685
|
<style dangerouslySetInnerHTML={{ __html: integrationStylesheet }} />
|
|
3677
3686
|
) : null;
|
|
3678
3687
|
|
|
@@ -3703,13 +3712,11 @@ const MemoriWidget = ({
|
|
|
3703
3712
|
|
|
3704
3713
|
// Resolve the widget theme once so both `data-theme` on the root and the
|
|
3705
3714
|
// `MemoriUIProvider` (which stamps portaled popups) stay in sync.
|
|
3706
|
-
// Prefer integration config;
|
|
3707
|
-
const widgetTheme: 'light' | 'dark'
|
|
3715
|
+
// Prefer integration config; default to light when unset.
|
|
3716
|
+
const widgetTheme: 'light' | 'dark' =
|
|
3708
3717
|
integrationConfig?.theme === 'light' || integrationConfig?.theme === 'dark'
|
|
3709
3718
|
? integrationConfig.theme
|
|
3710
|
-
:
|
|
3711
|
-
? 'dark'
|
|
3712
|
-
: undefined;
|
|
3719
|
+
: 'light';
|
|
3713
3720
|
|
|
3714
3721
|
return (
|
|
3715
3722
|
<div
|