@memori.ai/memori-react 7.21.1 → 7.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.css +33 -23
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +85 -8
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/dist/components/KnownFacts/KnownFacts.js +1 -1
- package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.css +29 -0
- package/dist/components/StartPanel/StartPanel.js +2 -1
- package/dist/components/StartPanel/StartPanel.js.map +1 -1
- package/dist/components/Typing/Typing.js +49 -47
- package/dist/components/Typing/Typing.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.d.ts +1 -0
- package/dist/components/UploadButton/UploadButton.js +142 -3
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/icons/Alert.d.ts +5 -0
- package/dist/components/icons/Alert.js +6 -0
- package/dist/components/icons/Alert.js.map +1 -0
- package/dist/components/icons/Info.d.ts +5 -0
- package/dist/components/icons/Info.js +6 -0
- package/dist/components/icons/Info.js.map +1 -0
- package/dist/components/icons/Warning.js +1 -1
- package/dist/components/icons/Warning.js.map +1 -1
- package/dist/components/ui/ConfirmDialog.css +42 -0
- package/dist/components/ui/ConfirmDialog.d.ts +11 -0
- package/dist/components/ui/ConfirmDialog.js +12 -0
- package/dist/components/ui/ConfirmDialog.js.map +1 -0
- package/dist/components/ui/Drawer.css +121 -96
- package/dist/components/ui/Drawer.d.ts +15 -6
- package/dist/components/ui/Drawer.js +44 -13
- package/dist/components/ui/Drawer.js.map +1 -1
- package/dist/locales/de.json +15 -0
- package/dist/locales/en.json +15 -0
- package/dist/locales/es.json +15 -0
- package/dist/locales/fr.json +7 -0
- package/dist/locales/it.json +15 -0
- package/dist/styles.css +6 -4
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.css +33 -23
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +85 -8
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/esm/components/KnownFacts/KnownFacts.js +1 -1
- package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.css +29 -0
- package/esm/components/StartPanel/StartPanel.js +2 -1
- package/esm/components/StartPanel/StartPanel.js.map +1 -1
- package/esm/components/Typing/Typing.js +49 -47
- package/esm/components/Typing/Typing.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.d.ts +1 -0
- package/esm/components/UploadButton/UploadButton.js +142 -3
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/icons/Alert.d.ts +5 -0
- package/esm/components/icons/Alert.js +4 -0
- package/esm/components/icons/Alert.js.map +1 -0
- package/esm/components/icons/Info.d.ts +5 -0
- package/esm/components/icons/Info.js +4 -0
- package/esm/components/icons/Info.js.map +1 -0
- package/esm/components/icons/Warning.js +1 -1
- package/esm/components/icons/Warning.js.map +1 -1
- package/esm/components/ui/ConfirmDialog.css +42 -0
- package/esm/components/ui/ConfirmDialog.d.ts +11 -0
- package/esm/components/ui/ConfirmDialog.js +9 -0
- package/esm/components/ui/ConfirmDialog.js.map +1 -0
- package/esm/components/ui/Drawer.css +121 -96
- package/esm/components/ui/Drawer.d.ts +15 -6
- package/esm/components/ui/Drawer.js +45 -14
- package/esm/components/ui/Drawer.js.map +1 -1
- package/esm/locales/de.json +15 -0
- package/esm/locales/en.json +15 -0
- package/esm/locales/es.json +15 -0
- package/esm/locales/fr.json +7 -0
- package/esm/locales/it.json +15 -0
- package/esm/styles.css +6 -4
- package/package.json +1 -1
- package/src/components/BlockedMemoriBadge/__snapshots__/BlockedMemoriBadge.test.tsx.snap +10 -0
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.css +33 -23
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.stories.tsx +274 -21
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +117 -21
- package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap +39 -21
- package/src/components/KnownFacts/KnownFacts.tsx +1 -1
- package/src/components/StartPanel/StartPanel.css +29 -0
- package/src/components/StartPanel/StartPanel.tsx +47 -0
- package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +827 -7
- package/src/components/Typing/Typing.tsx +52 -47
- package/src/components/UploadButton/UploadButton.tsx +206 -5
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +1 -1
- package/src/components/icons/Alert.tsx +31 -0
- package/src/components/icons/Info.tsx +31 -0
- package/src/components/icons/Warning.tsx +2 -1
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +74 -0
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +148 -0
- package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +74 -0
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +74 -0
- package/src/components/ui/ConfirmDialog.css +42 -0
- package/src/components/ui/ConfirmDialog.stories.tsx +216 -0
- package/src/components/ui/ConfirmDialog.test.tsx +124 -0
- package/src/components/ui/ConfirmDialog.tsx +58 -0
- package/src/components/ui/Drawer.css +121 -96
- package/src/components/ui/Drawer.stories.tsx +152 -67
- package/src/components/ui/Drawer.test.tsx +6 -2
- package/src/components/ui/Drawer.tsx +195 -89
- package/src/components/ui/__snapshots__/ConfirmDialog.test.tsx.snap +35 -0
- package/src/locales/de.json +15 -0
- package/src/locales/en.json +15 -0
- package/src/locales/es.json +15 -0
- package/src/locales/fr.json +7 -0
- package/src/locales/it.json +15 -0
- package/src/styles.css +6 -4
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useEffect, useState, useCallback } from 'react';
|
|
2
2
|
import Tooltip from '../ui/Tooltip';
|
|
3
3
|
import Warning from '../icons/Warning';
|
|
4
|
+
import Alert from '../icons/Alert';
|
|
5
|
+
import Info from '../icons/Info';
|
|
4
6
|
import { useTranslation } from 'react-i18next';
|
|
5
7
|
import Spin from '../ui/Spin';
|
|
6
8
|
|
|
@@ -19,40 +21,98 @@ export interface Props {
|
|
|
19
21
|
interface ProviderConfig {
|
|
20
22
|
statusUrl: string;
|
|
21
23
|
statusPage: string;
|
|
24
|
+
apiComponentName?: string | string[]; // Component name(s) to look for
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
const PROVIDER_CONFIGS: Record<string, ProviderConfig> = {
|
|
25
28
|
OpenAI: {
|
|
26
29
|
statusUrl: 'https://status.openai.com/api/v2/summary.json',
|
|
27
30
|
statusPage: 'https://status.openai.com/',
|
|
31
|
+
apiComponentName: ['Chat', 'Completions (legacy)'],
|
|
28
32
|
},
|
|
29
33
|
Mistral: {
|
|
30
34
|
statusUrl: 'https://status.mistral-data.com/api/v2/summary.json',
|
|
31
35
|
statusPage: 'https://status.mistral-data.com/',
|
|
36
|
+
apiComponentName: ['Mistral'],
|
|
32
37
|
},
|
|
33
38
|
Anthropic: {
|
|
34
|
-
statusUrl: 'https://status.anthropic.com/api/v2/summary.json',
|
|
39
|
+
statusUrl: 'https://status.anthropic.com/api/v2/summary.json',
|
|
35
40
|
statusPage: 'https://status.anthropic.com/',
|
|
41
|
+
apiComponentName: ['api.anthropic.com'],
|
|
36
42
|
},
|
|
37
43
|
};
|
|
38
44
|
|
|
39
|
-
// Modified to handle fetch errors and
|
|
40
|
-
const fetchProviderStatus = async (
|
|
45
|
+
// Modified to handle fetch errors, different component names, and check incidents
|
|
46
|
+
const fetchProviderStatus = async (config: ProviderConfig): Promise<Status> => {
|
|
41
47
|
try {
|
|
42
48
|
// Use cross-fetch instead of native fetch
|
|
43
|
-
const response = await fetch(statusUrl);
|
|
44
|
-
|
|
49
|
+
const response = await fetch(config.statusUrl);
|
|
45
50
|
if (!response.ok) {
|
|
46
51
|
console.warn(`Status API returned ${response.status}`);
|
|
47
52
|
return 'operational'; // Fallback to operational on API errors
|
|
48
53
|
}
|
|
49
|
-
|
|
54
|
+
|
|
50
55
|
const data = await response.json();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
|
|
57
|
+
// Check for active incidents first
|
|
58
|
+
if (data.incidents && Array.isArray(data.incidents) && data.incidents.length > 0) {
|
|
59
|
+
const activeIncidents = data.incidents.filter(
|
|
60
|
+
(incident: { status: string }) =>
|
|
61
|
+
!['resolved', 'completed', 'postmortem'].includes(incident.status.toLowerCase())
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
if (activeIncidents.length > 0) {
|
|
65
|
+
// If there are active incidents, determine the severity
|
|
66
|
+
const critical = activeIncidents.some((i: { impact: string }) =>
|
|
67
|
+
i.impact === 'critical' || i.impact === 'major'
|
|
68
|
+
);
|
|
69
|
+
const major = activeIncidents.some((i: { impact: string }) =>
|
|
70
|
+
i.impact === 'moderate'
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
if (critical) return 'major_outage';
|
|
74
|
+
if (major) return 'partial_outage';
|
|
75
|
+
return 'degraded_performance';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// If no incidents or they're all resolved, check specific API components
|
|
80
|
+
if (data.components) {
|
|
81
|
+
// First try with primary API component names
|
|
82
|
+
if (config.apiComponentName) {
|
|
83
|
+
const apiComponentNames = Array.isArray(config.apiComponentName)
|
|
84
|
+
? config.apiComponentName
|
|
85
|
+
: [config.apiComponentName];
|
|
86
|
+
|
|
87
|
+
for (const name of apiComponentNames) {
|
|
88
|
+
const apiComponent = data.components.find(
|
|
89
|
+
(component: { name: string }) => component.name === name
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
if (apiComponent && apiComponent.status !== 'operational') {
|
|
93
|
+
return apiComponent.status as Status;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Check if any component is degraded (might indicate API issues)
|
|
99
|
+
const anyDegradedComponent = data.components.some(
|
|
100
|
+
(component: { status: string }) => component.status !== 'operational'
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
if (anyDegradedComponent) {
|
|
104
|
+
return 'degraded_performance';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// If no specific component issues found, check overall status
|
|
109
|
+
if (data.status && data.status.indicator !== 'none') {
|
|
110
|
+
if (data.status.indicator === 'critical') return 'major_outage';
|
|
111
|
+
if (data.status.indicator === 'major') return 'partial_outage';
|
|
112
|
+
if (data.status.indicator === 'minor') return 'degraded_performance';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return 'operational'; // Default to operational if no issues detected
|
|
56
116
|
} catch (error) {
|
|
57
117
|
console.error('Error fetching provider status:', error);
|
|
58
118
|
return 'operational'; // Fallback to operational on network errors
|
|
@@ -66,12 +126,11 @@ const CompletionProviderStatus = ({
|
|
|
66
126
|
const { t } = useTranslation();
|
|
67
127
|
const [status, setStatus] = useState<Status>(forceStatus ?? 'operational');
|
|
68
128
|
const [isLoading, setIsLoading] = useState(false);
|
|
69
|
-
|
|
70
129
|
const config = PROVIDER_CONFIGS[provider];
|
|
71
130
|
|
|
72
131
|
const getStatus = useCallback(async () => {
|
|
73
132
|
if (!config) return 'operational';
|
|
74
|
-
return fetchProviderStatus(config
|
|
133
|
+
return fetchProviderStatus(config);
|
|
75
134
|
}, [config]);
|
|
76
135
|
|
|
77
136
|
useEffect(() => {
|
|
@@ -80,7 +139,6 @@ const CompletionProviderStatus = ({
|
|
|
80
139
|
|
|
81
140
|
const checkStatus = async () => {
|
|
82
141
|
if (forceStatus) return;
|
|
83
|
-
|
|
84
142
|
setIsLoading(true);
|
|
85
143
|
try {
|
|
86
144
|
const newStatus = await getStatus();
|
|
@@ -119,17 +177,55 @@ const CompletionProviderStatus = ({
|
|
|
119
177
|
return null;
|
|
120
178
|
}
|
|
121
179
|
|
|
180
|
+
// Get appropriate icon and message based on status severity
|
|
181
|
+
const getStatusDetails = () => {
|
|
182
|
+
switch (status) {
|
|
183
|
+
case 'major_outage':
|
|
184
|
+
return {
|
|
185
|
+
Icon: Alert,
|
|
186
|
+
message: t('completionProviderMajorOutage', {
|
|
187
|
+
provider: provider ?? t('completionProviderFallbackName'),
|
|
188
|
+
fallback: t('completionProviderDown', {
|
|
189
|
+
provider: provider ?? t('completionProviderFallbackName'),
|
|
190
|
+
})
|
|
191
|
+
}),
|
|
192
|
+
className: "memori--completion-provider-status--icon-error"
|
|
193
|
+
};
|
|
194
|
+
case 'partial_outage':
|
|
195
|
+
return {
|
|
196
|
+
Icon: Warning,
|
|
197
|
+
message: t('completionProviderPartialOutage', {
|
|
198
|
+
provider: provider ?? t('completionProviderFallbackName'),
|
|
199
|
+
fallback: t('completionProviderDown', {
|
|
200
|
+
provider: provider ?? t('completionProviderFallbackName'),
|
|
201
|
+
})
|
|
202
|
+
}),
|
|
203
|
+
className: "memori--completion-provider-status--icon-warning"
|
|
204
|
+
};
|
|
205
|
+
case 'degraded_performance':
|
|
206
|
+
default:
|
|
207
|
+
return {
|
|
208
|
+
Icon: Info,
|
|
209
|
+
message: t('completionProviderDegraded', {
|
|
210
|
+
provider: provider ?? t('completionProviderFallbackName'),
|
|
211
|
+
fallback: t('completionProviderDown', {
|
|
212
|
+
provider: provider ?? t('completionProviderFallbackName'),
|
|
213
|
+
})
|
|
214
|
+
}),
|
|
215
|
+
className: "memori--completion-provider-status--icon-info"
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
const { Icon, message, className } = getStatusDetails();
|
|
221
|
+
|
|
122
222
|
return (
|
|
123
223
|
<Tooltip
|
|
124
224
|
className="memori--completion-provider-status--tooltip"
|
|
125
|
-
align="
|
|
225
|
+
align="right"
|
|
126
226
|
content={
|
|
127
227
|
<div>
|
|
128
|
-
<p>
|
|
129
|
-
{t('completionProviderDown', {
|
|
130
|
-
provider: provider ?? t('completionProviderFallbackName'),
|
|
131
|
-
})}
|
|
132
|
-
</p>
|
|
228
|
+
<p>{message}</p>
|
|
133
229
|
{config?.statusPage && (
|
|
134
230
|
<p>
|
|
135
231
|
<a
|
|
@@ -144,7 +240,7 @@ const CompletionProviderStatus = ({
|
|
|
144
240
|
</div>
|
|
145
241
|
}
|
|
146
242
|
>
|
|
147
|
-
<
|
|
243
|
+
<Icon className={`memori--completion-provider-status--icon ${className}`} />
|
|
148
244
|
</Tooltip>
|
|
149
245
|
);
|
|
150
246
|
};
|
package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
exports[`renders CompletionProviderStatus errored unchanged 1`] = `
|
|
4
4
|
<div>
|
|
5
5
|
<div
|
|
6
|
-
class="memori-tooltip memori-tooltip--align-
|
|
6
|
+
class="memori-tooltip memori-tooltip--align-right memori--completion-provider-status--tooltip"
|
|
7
7
|
>
|
|
8
8
|
<div
|
|
9
9
|
class="memori-tooltip--content"
|
|
10
10
|
>
|
|
11
11
|
<div>
|
|
12
12
|
<p>
|
|
13
|
-
|
|
13
|
+
completionProviderMajorOutage
|
|
14
14
|
</p>
|
|
15
15
|
<p>
|
|
16
16
|
<a
|
|
@@ -28,14 +28,20 @@ exports[`renders CompletionProviderStatus errored unchanged 1`] = `
|
|
|
28
28
|
>
|
|
29
29
|
<svg
|
|
30
30
|
aria-hidden="true"
|
|
31
|
-
class="memori--completion-provider-status--icon"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
class="memori--completion-provider-status--icon memori--completion-provider-status--icon-error"
|
|
32
|
+
color="currentColor"
|
|
33
|
+
fill="none"
|
|
34
|
+
height="800px"
|
|
35
|
+
viewBox="0 0 24 24"
|
|
36
|
+
width="800px"
|
|
35
37
|
xmlns="http://www.w3.org/2000/svg"
|
|
36
38
|
>
|
|
37
39
|
<path
|
|
38
|
-
d="
|
|
40
|
+
d="M12 16H12.01M12 8V12M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z"
|
|
41
|
+
stroke="currentColor"
|
|
42
|
+
stroke-linecap="round"
|
|
43
|
+
stroke-linejoin="round"
|
|
44
|
+
stroke-width="2"
|
|
39
45
|
/>
|
|
40
46
|
</svg>
|
|
41
47
|
</div>
|
|
@@ -46,14 +52,14 @@ exports[`renders CompletionProviderStatus errored unchanged 1`] = `
|
|
|
46
52
|
exports[`renders CompletionProviderStatus errored with provider specified unchanged 1`] = `
|
|
47
53
|
<div>
|
|
48
54
|
<div
|
|
49
|
-
class="memori-tooltip memori-tooltip--align-
|
|
55
|
+
class="memori-tooltip memori-tooltip--align-right memori--completion-provider-status--tooltip"
|
|
50
56
|
>
|
|
51
57
|
<div
|
|
52
58
|
class="memori-tooltip--content"
|
|
53
59
|
>
|
|
54
60
|
<div>
|
|
55
61
|
<p>
|
|
56
|
-
|
|
62
|
+
completionProviderMajorOutage
|
|
57
63
|
</p>
|
|
58
64
|
<p>
|
|
59
65
|
<a
|
|
@@ -71,14 +77,20 @@ exports[`renders CompletionProviderStatus errored with provider specified unchan
|
|
|
71
77
|
>
|
|
72
78
|
<svg
|
|
73
79
|
aria-hidden="true"
|
|
74
|
-
class="memori--completion-provider-status--icon"
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
class="memori--completion-provider-status--icon memori--completion-provider-status--icon-error"
|
|
81
|
+
color="currentColor"
|
|
82
|
+
fill="none"
|
|
83
|
+
height="800px"
|
|
84
|
+
viewBox="0 0 24 24"
|
|
85
|
+
width="800px"
|
|
78
86
|
xmlns="http://www.w3.org/2000/svg"
|
|
79
87
|
>
|
|
80
88
|
<path
|
|
81
|
-
d="
|
|
89
|
+
d="M12 16H12.01M12 8V12M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z"
|
|
90
|
+
stroke="currentColor"
|
|
91
|
+
stroke-linecap="round"
|
|
92
|
+
stroke-linejoin="round"
|
|
93
|
+
stroke-width="2"
|
|
82
94
|
/>
|
|
83
95
|
</svg>
|
|
84
96
|
</div>
|
|
@@ -89,14 +101,14 @@ exports[`renders CompletionProviderStatus errored with provider specified unchan
|
|
|
89
101
|
exports[`renders CompletionProviderStatus unchanged 1`] = `
|
|
90
102
|
<div>
|
|
91
103
|
<div
|
|
92
|
-
class="memori-tooltip memori-tooltip--align-
|
|
104
|
+
class="memori-tooltip memori-tooltip--align-right memori--completion-provider-status--tooltip"
|
|
93
105
|
>
|
|
94
106
|
<div
|
|
95
107
|
class="memori-tooltip--content"
|
|
96
108
|
>
|
|
97
109
|
<div>
|
|
98
110
|
<p>
|
|
99
|
-
|
|
111
|
+
completionProviderMajorOutage
|
|
100
112
|
</p>
|
|
101
113
|
<p>
|
|
102
114
|
<a
|
|
@@ -114,14 +126,20 @@ exports[`renders CompletionProviderStatus unchanged 1`] = `
|
|
|
114
126
|
>
|
|
115
127
|
<svg
|
|
116
128
|
aria-hidden="true"
|
|
117
|
-
class="memori--completion-provider-status--icon"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
129
|
+
class="memori--completion-provider-status--icon memori--completion-provider-status--icon-error"
|
|
130
|
+
color="currentColor"
|
|
131
|
+
fill="none"
|
|
132
|
+
height="800px"
|
|
133
|
+
viewBox="0 0 24 24"
|
|
134
|
+
width="800px"
|
|
121
135
|
xmlns="http://www.w3.org/2000/svg"
|
|
122
136
|
>
|
|
123
137
|
<path
|
|
124
|
-
d="
|
|
138
|
+
d="M12 16H12.01M12 8V12M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z"
|
|
139
|
+
stroke="currentColor"
|
|
140
|
+
stroke-linecap="round"
|
|
141
|
+
stroke-linejoin="round"
|
|
142
|
+
stroke-width="2"
|
|
125
143
|
/>
|
|
126
144
|
</svg>
|
|
127
145
|
</div>
|
|
@@ -218,3 +218,32 @@
|
|
|
218
218
|
color: inherit;
|
|
219
219
|
text-decoration: underline;
|
|
220
220
|
}
|
|
221
|
+
|
|
222
|
+
.memori--start-privacy-explanation-container {
|
|
223
|
+
display: flex;
|
|
224
|
+
align-items: center;
|
|
225
|
+
justify-content: flex-start;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.memori--start-privacy-explanation {
|
|
229
|
+
color: var(--memori-text-color, rgba(0, 0, 0, 0.85));
|
|
230
|
+
font-size: 0.85em;
|
|
231
|
+
font-style: italic;
|
|
232
|
+
opacity: 0.85;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.memori--start-privacy-explanation-icon {
|
|
236
|
+
display: flex;
|
|
237
|
+
width: 1.2rem;
|
|
238
|
+
height: 1.2rem;
|
|
239
|
+
align-self: center;
|
|
240
|
+
margin-left: 0.5rem;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.memori--privacy-tooltip-content {
|
|
244
|
+
text-align: left;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.memori--privacy-tooltip-content-list {
|
|
248
|
+
padding-left: 1rem;
|
|
249
|
+
}
|
|
@@ -20,6 +20,7 @@ import CompletionProviderStatus, {
|
|
|
20
20
|
Props as CPSProps,
|
|
21
21
|
} from '../CompletionProviderStatus/CompletionProviderStatus';
|
|
22
22
|
import MapMarker from '../icons/MapMarker';
|
|
23
|
+
import QuestionHelp from '../icons/QuestionHelp';
|
|
23
24
|
|
|
24
25
|
export interface Props {
|
|
25
26
|
memori: Memori;
|
|
@@ -245,6 +246,52 @@ const StartPanel: React.FC<Props> = ({
|
|
|
245
246
|
</div>
|
|
246
247
|
)}
|
|
247
248
|
|
|
249
|
+
<div className="memori--start-privacy-explanation-container">
|
|
250
|
+
<p className="memori--start-privacy-explanation">
|
|
251
|
+
{t('write_and_speak.pagePrivacyExplanation')}
|
|
252
|
+
</p>
|
|
253
|
+
<Tooltip
|
|
254
|
+
align="right"
|
|
255
|
+
content={
|
|
256
|
+
<div className="memori--privacy-tooltip-content">
|
|
257
|
+
<p>
|
|
258
|
+
{' '}
|
|
259
|
+
{t(
|
|
260
|
+
'write_and_speak.pagePrivacyExplanationList.allConversations'
|
|
261
|
+
)}
|
|
262
|
+
</p>
|
|
263
|
+
<ul className="memori--privacy-tooltip-content-list">
|
|
264
|
+
<li>
|
|
265
|
+
{t(
|
|
266
|
+
'write_and_speak.pagePrivacyExplanationList.anonymousUser'
|
|
267
|
+
)}
|
|
268
|
+
</li>
|
|
269
|
+
<li>
|
|
270
|
+
{t(
|
|
271
|
+
'write_and_speak.pagePrivacyExplanationList.registeredUser'
|
|
272
|
+
)}
|
|
273
|
+
</li>
|
|
274
|
+
</ul>
|
|
275
|
+
<p>
|
|
276
|
+
{t(
|
|
277
|
+
'write_and_speak.pagePrivacyExplanationList.authorUsesInfo'
|
|
278
|
+
)}
|
|
279
|
+
</p>
|
|
280
|
+
|
|
281
|
+
<a
|
|
282
|
+
href={'https://memori.ai/en/privacy-policy'}
|
|
283
|
+
target="_blank"
|
|
284
|
+
rel="noopener noreferrer"
|
|
285
|
+
>
|
|
286
|
+
{t('privacyPolicy')}
|
|
287
|
+
</a>
|
|
288
|
+
</div>
|
|
289
|
+
}
|
|
290
|
+
>
|
|
291
|
+
<QuestionHelp className="memori--start-privacy-explanation-icon" />
|
|
292
|
+
</Tooltip>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
248
295
|
<Button
|
|
249
296
|
primary
|
|
250
297
|
disabled={
|