@memori.ai/memori-react 7.21.1 → 7.22.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 +18 -0
- 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/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/locales/de.json +8 -0
- package/dist/locales/en.json +8 -0
- package/dist/locales/es.json +8 -0
- package/dist/locales/it.json +8 -0
- 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/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/locales/de.json +8 -0
- package/esm/locales/en.json +8 -0
- package/esm/locales/es.json +8 -0
- package/esm/locales/it.json +8 -0
- package/package.json +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 +814 -0
- package/src/components/UploadButton/UploadButton.tsx +206 -5
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +1 -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/locales/de.json +8 -0
- package/src/locales/en.json +8 -0
- package/src/locales/es.json +8 -0
- package/src/locales/it.json +8 -0
|
@@ -13,8 +13,9 @@ type UploadError = {
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* FileUploadButton component allows users to upload and convert files to text
|
|
16
|
-
* Supports PDF and
|
|
16
|
+
* Supports PDF, TXT, CSV and XLSX files up to 10MB
|
|
17
17
|
* Extracts text from PDFs using PDF.js
|
|
18
|
+
* Extracts text from XLSX using xlsx library
|
|
18
19
|
*/
|
|
19
20
|
|
|
20
21
|
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
|
|
@@ -22,11 +23,14 @@ const MAX_TEXT_LENGTH = 100000; // 100,000 characters
|
|
|
22
23
|
const PDF_JS_VERSION = '3.11.174'; // Last stable version with .min.js files
|
|
23
24
|
const WORKER_URL = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDF_JS_VERSION}/pdf.worker.min.js`;
|
|
24
25
|
const PDF_JS_URL = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDF_JS_VERSION}/pdf.min.js`;
|
|
26
|
+
const XLSX_URL =
|
|
27
|
+
'https://cdn.sheetjs.com/xlsx-0.20.0/package/dist/xlsx.full.min.js';
|
|
25
28
|
|
|
26
|
-
// Add type
|
|
29
|
+
// Add type definitions for external libraries
|
|
27
30
|
declare global {
|
|
28
31
|
interface Window {
|
|
29
32
|
pdfjsLib: any;
|
|
33
|
+
XLSX: any;
|
|
30
34
|
}
|
|
31
35
|
}
|
|
32
36
|
|
|
@@ -105,6 +109,16 @@ const FileUploadButton = ({
|
|
|
105
109
|
// Return extracted text
|
|
106
110
|
return text;
|
|
107
111
|
} catch (error) {
|
|
112
|
+
setErrors(prev => [
|
|
113
|
+
...prev,
|
|
114
|
+
{
|
|
115
|
+
message: `PDF extraction failed: ${
|
|
116
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
117
|
+
}`,
|
|
118
|
+
severity: 'error',
|
|
119
|
+
fileId: file.name,
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
108
122
|
throw new Error(
|
|
109
123
|
`PDF extraction failed: ${
|
|
110
124
|
error instanceof Error ? error.message : 'Unknown error'
|
|
@@ -113,6 +127,191 @@ const FileUploadButton = ({
|
|
|
113
127
|
}
|
|
114
128
|
};
|
|
115
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Extracts text from XLSX using xlsx library with enhanced error handling
|
|
132
|
+
* @param file XLSX file to process
|
|
133
|
+
* @returns Promise resolving to extracted text
|
|
134
|
+
*/
|
|
135
|
+
const extractTextFromXLSX = async (file: File): Promise<string> => {
|
|
136
|
+
try {
|
|
137
|
+
// First, check if the XLSX library is loaded in the window object
|
|
138
|
+
// If not, dynamically load it by creating and appending a script tag
|
|
139
|
+
if (!window.XLSX) {
|
|
140
|
+
await new Promise((resolve, reject) => {
|
|
141
|
+
const script = document.createElement('script');
|
|
142
|
+
script.src = XLSX_URL;
|
|
143
|
+
script.onload = resolve;
|
|
144
|
+
script.onerror = reject;
|
|
145
|
+
document.head.appendChild(script);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Convert the File object to ArrayBuffer for XLSX parsing
|
|
150
|
+
const arrayBuffer = await file.arrayBuffer();
|
|
151
|
+
|
|
152
|
+
// Check for minimum valid Excel file size
|
|
153
|
+
if (arrayBuffer.byteLength < 4) {
|
|
154
|
+
throw new Error('File appears to be corrupted or empty');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
let workbook;
|
|
158
|
+
try {
|
|
159
|
+
// Try parsing with full options first
|
|
160
|
+
workbook = window.XLSX.read(arrayBuffer, {
|
|
161
|
+
type: 'array',
|
|
162
|
+
cellFormula: false, // Disable formula parsing to avoid potential issues
|
|
163
|
+
cellNF: false, // Disable number format parsing
|
|
164
|
+
cellHTML: false, // Disable HTML parsing
|
|
165
|
+
cellText: true, // Force text output
|
|
166
|
+
cellDates: false, // Disable date parsing to avoid errors
|
|
167
|
+
error: (e: any) => {
|
|
168
|
+
console.warn('Non-fatal XLSX error:', e);
|
|
169
|
+
}, // Log non-fatal errors
|
|
170
|
+
cellStyles: false, // Disable style parsing
|
|
171
|
+
});
|
|
172
|
+
} catch (initialError) {
|
|
173
|
+
console.warn(
|
|
174
|
+
'Initial XLSX parsing failed, attempting recovery mode:',
|
|
175
|
+
initialError
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
// Fallback to a more permissive parsing method
|
|
179
|
+
try {
|
|
180
|
+
workbook = window.XLSX.read(arrayBuffer, {
|
|
181
|
+
type: 'array',
|
|
182
|
+
sheetRows: 1000, // Limit number of rows to parse
|
|
183
|
+
cellFormula: false,
|
|
184
|
+
cellStyles: false,
|
|
185
|
+
bookDeps: false, // Don't parse external dependencies
|
|
186
|
+
bookFiles: false, // Don't parse embedded files
|
|
187
|
+
bookProps: false, // Don't parse document properties
|
|
188
|
+
bookSheets: false, // Don't parse sheet properties
|
|
189
|
+
bookVBA: false, // Don't parse VBA
|
|
190
|
+
WTF: true, // "What the Formula" mode - ignores errors when possible
|
|
191
|
+
});
|
|
192
|
+
} catch (recoveryError) {
|
|
193
|
+
setErrors(prev => [
|
|
194
|
+
...prev,
|
|
195
|
+
{
|
|
196
|
+
message: `File appears to be corrupted. Recovery attempt failed: ${
|
|
197
|
+
recoveryError instanceof Error
|
|
198
|
+
? recoveryError.message
|
|
199
|
+
: 'Unknown error'
|
|
200
|
+
}`,
|
|
201
|
+
severity: 'error',
|
|
202
|
+
fileId: file.name,
|
|
203
|
+
},
|
|
204
|
+
]);
|
|
205
|
+
throw new Error(
|
|
206
|
+
`File appears to be corrupted. Recovery attempt failed: ${
|
|
207
|
+
recoveryError instanceof Error
|
|
208
|
+
? recoveryError.message
|
|
209
|
+
: 'Unknown error'
|
|
210
|
+
}`
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Verify that workbook contains at least one sheet
|
|
216
|
+
if (
|
|
217
|
+
!workbook ||
|
|
218
|
+
!workbook.SheetNames ||
|
|
219
|
+
workbook.SheetNames.length === 0
|
|
220
|
+
) {
|
|
221
|
+
throw new Error('Excel file contains no valid worksheets');
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
let text = '';
|
|
225
|
+
let successfulSheets = 0;
|
|
226
|
+
const totalSheets = workbook.SheetNames.length;
|
|
227
|
+
|
|
228
|
+
// Loop through each sheet in the workbook
|
|
229
|
+
for (const sheetName of workbook.SheetNames) {
|
|
230
|
+
try {
|
|
231
|
+
const worksheet = workbook.Sheets[sheetName];
|
|
232
|
+
if (!worksheet) {
|
|
233
|
+
throw new Error(`Sheet ${sheetName} is empty or corrupted`);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Safely get the dimensions of the sheet
|
|
237
|
+
const range = window.XLSX.utils.decode_range(
|
|
238
|
+
worksheet['!ref'] || 'A1:A1'
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
// Check if sheet seems abnormally large (possible corruption)
|
|
242
|
+
const rowCount = range.e.r - range.s.r + 1;
|
|
243
|
+
const colCount = range.e.c - range.s.c + 1;
|
|
244
|
+
if (rowCount > 10000 || colCount > 1000) {
|
|
245
|
+
throw new Error(
|
|
246
|
+
`Sheet ${sheetName} has suspicious dimensions (${rowCount}x${colCount}) and may be corrupted`
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Try to convert sheet to CSV
|
|
251
|
+
let csv;
|
|
252
|
+
try {
|
|
253
|
+
csv = window.XLSX.utils.sheet_to_csv(worksheet);
|
|
254
|
+
} catch (csvError) {
|
|
255
|
+
// If CSV conversion fails, try a more basic cell-by-cell approach
|
|
256
|
+
csv = '';
|
|
257
|
+
for (let r = range.s.r; r <= Math.min(range.e.r, 1000); ++r) {
|
|
258
|
+
let row = '';
|
|
259
|
+
for (let c = range.s.c; c <= Math.min(range.e.c, 100); ++c) {
|
|
260
|
+
const cell =
|
|
261
|
+
worksheet[window.XLSX.utils.encode_cell({ r: r, c: c })];
|
|
262
|
+
row += (cell ? String(cell.v || '') : '') + ',';
|
|
263
|
+
}
|
|
264
|
+
csv += row + '\n';
|
|
265
|
+
}
|
|
266
|
+
csv += '...(truncated due to potential corruption)';
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Add sheet name and content to final text
|
|
270
|
+
text += `Sheet: ${sheetName}\n${csv}\n\n`;
|
|
271
|
+
successfulSheets++;
|
|
272
|
+
} catch (sheetError) {
|
|
273
|
+
// Log sheet-specific error but continue with other sheets
|
|
274
|
+
text += `Sheet: ${sheetName}\nError extracting content: ${
|
|
275
|
+
sheetError instanceof Error ? sheetError.message : 'Unknown error'
|
|
276
|
+
}\n\n`;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// If we couldn't extract any sheets successfully
|
|
281
|
+
if (successfulSheets === 0) {
|
|
282
|
+
throw new Error(
|
|
283
|
+
'Could not extract any valid content from the Excel file'
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// If some sheets failed but others succeeded
|
|
288
|
+
if (successfulSheets < totalSheets) {
|
|
289
|
+
text =
|
|
290
|
+
`Warning: Only extracted ${successfulSheets} of ${totalSheets} sheets due to possible corruption.\n\n` +
|
|
291
|
+
text;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return text; // Return the extracted text from all sheets
|
|
295
|
+
} catch (error) {
|
|
296
|
+
setErrors(prev => [
|
|
297
|
+
...prev,
|
|
298
|
+
{
|
|
299
|
+
message: `XLSX extraction failed: ${
|
|
300
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
301
|
+
}`,
|
|
302
|
+
severity: 'error',
|
|
303
|
+
fileId: file.name,
|
|
304
|
+
},
|
|
305
|
+
]);
|
|
306
|
+
// If any error occurs during processing, throw with descriptive message
|
|
307
|
+
throw new Error(
|
|
308
|
+
`XLSX extraction failed: ${
|
|
309
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
310
|
+
}`
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
|
|
116
315
|
/**
|
|
117
316
|
* Validates uploaded file
|
|
118
317
|
* Checks file type and size restrictions
|
|
@@ -121,7 +320,7 @@ const FileUploadButton = ({
|
|
|
121
320
|
*/
|
|
122
321
|
const validateFile = (file: File): boolean => {
|
|
123
322
|
const fileExt = `.${file.name.split('.').pop()?.toLowerCase()}`;
|
|
124
|
-
const ALLOWED_FILE_TYPES = ['.pdf', '.txt'];
|
|
323
|
+
const ALLOWED_FILE_TYPES = ['.pdf', '.txt', '.json', '.xlsx', '.csv'];
|
|
125
324
|
|
|
126
325
|
if (!ALLOWED_FILE_TYPES.includes(fileExt)) {
|
|
127
326
|
addError({
|
|
@@ -161,8 +360,10 @@ const FileUploadButton = ({
|
|
|
161
360
|
|
|
162
361
|
if (fileExt === 'pdf') {
|
|
163
362
|
text = await extractTextFromPDF(file);
|
|
164
|
-
} else if (fileExt === 'txt' || fileExt === 'json') {
|
|
363
|
+
} else if (fileExt === 'txt' || fileExt === 'json' || fileExt === 'csv') {
|
|
165
364
|
text = await file.text();
|
|
365
|
+
} else if (fileExt === 'xlsx') {
|
|
366
|
+
text = await extractTextFromXLSX(file);
|
|
166
367
|
}
|
|
167
368
|
|
|
168
369
|
// Check text length limit
|
|
@@ -241,7 +442,7 @@ const FileUploadButton = ({
|
|
|
241
442
|
<input
|
|
242
443
|
ref={fileInputRef}
|
|
243
444
|
type="file"
|
|
244
|
-
accept=".pdf,.txt,.json"
|
|
445
|
+
accept=".pdf,.txt,.json,.xlsx,.csv"
|
|
245
446
|
className="memori--upload-file-input"
|
|
246
447
|
onChange={handleFileSelect}
|
|
247
448
|
multiple
|
|
@@ -337,6 +337,80 @@ exports[`renders Chat layout unchanged 1`] = `
|
|
|
337
337
|
</option>
|
|
338
338
|
</select>
|
|
339
339
|
</div>
|
|
340
|
+
<div
|
|
341
|
+
class="memori--start-privacy-explanation-container"
|
|
342
|
+
>
|
|
343
|
+
<p
|
|
344
|
+
class="memori--start-privacy-explanation"
|
|
345
|
+
>
|
|
346
|
+
Le conversazioni sono visibili all'autore dell'agente
|
|
347
|
+
</p>
|
|
348
|
+
<div
|
|
349
|
+
class="memori-tooltip memori-tooltip--align-right"
|
|
350
|
+
>
|
|
351
|
+
<div
|
|
352
|
+
class="memori-tooltip--content"
|
|
353
|
+
>
|
|
354
|
+
<div
|
|
355
|
+
class="memori--privacy-tooltip-content"
|
|
356
|
+
>
|
|
357
|
+
<p>
|
|
358
|
+
|
|
359
|
+
Tutte le conversazioni con questo agente sono visibili all'autore dell'agente
|
|
360
|
+
</p>
|
|
361
|
+
<ul
|
|
362
|
+
class="memori--privacy-tooltip-content-list"
|
|
363
|
+
>
|
|
364
|
+
<li>
|
|
365
|
+
Per utenti anonimi: l'autore vedrà il contenuto e l'indirizzo IP
|
|
366
|
+
</li>
|
|
367
|
+
<li>
|
|
368
|
+
Per utenti registrati: l'autore vedrà il contenuto e il nome utente
|
|
369
|
+
</li>
|
|
370
|
+
</ul>
|
|
371
|
+
<p>
|
|
372
|
+
L'autore utilizza queste informazioni per migliorare le funzionalità dell'agente. Continuando, accetti queste condizioni.
|
|
373
|
+
</p>
|
|
374
|
+
<a
|
|
375
|
+
href="https://memori.ai/en/privacy-policy"
|
|
376
|
+
rel="noopener noreferrer"
|
|
377
|
+
target="_blank"
|
|
378
|
+
>
|
|
379
|
+
Informativa sulla privacy
|
|
380
|
+
</a>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
<div
|
|
384
|
+
class="memori-tooltip--trigger"
|
|
385
|
+
>
|
|
386
|
+
<svg
|
|
387
|
+
aria-hidden="true"
|
|
388
|
+
class="memori--start-privacy-explanation-icon"
|
|
389
|
+
fill="none"
|
|
390
|
+
focusable="false"
|
|
391
|
+
role="img"
|
|
392
|
+
stroke="currentColor"
|
|
393
|
+
stroke-linecap="round"
|
|
394
|
+
stroke-linejoin="round"
|
|
395
|
+
stroke-width="1.5"
|
|
396
|
+
viewBox="0 0 24 24"
|
|
397
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
398
|
+
>
|
|
399
|
+
<circle
|
|
400
|
+
cx="12"
|
|
401
|
+
cy="12"
|
|
402
|
+
r="10"
|
|
403
|
+
/>
|
|
404
|
+
<path
|
|
405
|
+
d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"
|
|
406
|
+
/>
|
|
407
|
+
<path
|
|
408
|
+
d="M12 17L12.01 17"
|
|
409
|
+
/>
|
|
410
|
+
</svg>
|
|
411
|
+
</div>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
340
414
|
<button
|
|
341
415
|
class="memori-button memori-button--primary memori-button--rounded memori-button--padded memori--start-button"
|
|
342
416
|
>
|
|
@@ -376,6 +376,80 @@ exports[`renders FullPage layout unchanged 1`] = `
|
|
|
376
376
|
</option>
|
|
377
377
|
</select>
|
|
378
378
|
</div>
|
|
379
|
+
<div
|
|
380
|
+
class="memori--start-privacy-explanation-container"
|
|
381
|
+
>
|
|
382
|
+
<p
|
|
383
|
+
class="memori--start-privacy-explanation"
|
|
384
|
+
>
|
|
385
|
+
Le conversazioni sono visibili all'autore dell'agente
|
|
386
|
+
</p>
|
|
387
|
+
<div
|
|
388
|
+
class="memori-tooltip memori-tooltip--align-right"
|
|
389
|
+
>
|
|
390
|
+
<div
|
|
391
|
+
class="memori-tooltip--content"
|
|
392
|
+
>
|
|
393
|
+
<div
|
|
394
|
+
class="memori--privacy-tooltip-content"
|
|
395
|
+
>
|
|
396
|
+
<p>
|
|
397
|
+
|
|
398
|
+
Tutte le conversazioni con questo agente sono visibili all'autore dell'agente
|
|
399
|
+
</p>
|
|
400
|
+
<ul
|
|
401
|
+
class="memori--privacy-tooltip-content-list"
|
|
402
|
+
>
|
|
403
|
+
<li>
|
|
404
|
+
Per utenti anonimi: l'autore vedrà il contenuto e l'indirizzo IP
|
|
405
|
+
</li>
|
|
406
|
+
<li>
|
|
407
|
+
Per utenti registrati: l'autore vedrà il contenuto e il nome utente
|
|
408
|
+
</li>
|
|
409
|
+
</ul>
|
|
410
|
+
<p>
|
|
411
|
+
L'autore utilizza queste informazioni per migliorare le funzionalità dell'agente. Continuando, accetti queste condizioni.
|
|
412
|
+
</p>
|
|
413
|
+
<a
|
|
414
|
+
href="https://memori.ai/en/privacy-policy"
|
|
415
|
+
rel="noopener noreferrer"
|
|
416
|
+
target="_blank"
|
|
417
|
+
>
|
|
418
|
+
Informativa sulla privacy
|
|
419
|
+
</a>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
<div
|
|
423
|
+
class="memori-tooltip--trigger"
|
|
424
|
+
>
|
|
425
|
+
<svg
|
|
426
|
+
aria-hidden="true"
|
|
427
|
+
class="memori--start-privacy-explanation-icon"
|
|
428
|
+
fill="none"
|
|
429
|
+
focusable="false"
|
|
430
|
+
role="img"
|
|
431
|
+
stroke="currentColor"
|
|
432
|
+
stroke-linecap="round"
|
|
433
|
+
stroke-linejoin="round"
|
|
434
|
+
stroke-width="1.5"
|
|
435
|
+
viewBox="0 0 24 24"
|
|
436
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
437
|
+
>
|
|
438
|
+
<circle
|
|
439
|
+
cx="12"
|
|
440
|
+
cy="12"
|
|
441
|
+
r="10"
|
|
442
|
+
/>
|
|
443
|
+
<path
|
|
444
|
+
d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"
|
|
445
|
+
/>
|
|
446
|
+
<path
|
|
447
|
+
d="M12 17L12.01 17"
|
|
448
|
+
/>
|
|
449
|
+
</svg>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
379
453
|
<button
|
|
380
454
|
class="memori-button memori-button--primary memori-button--rounded memori-button--padded memori--start-button"
|
|
381
455
|
>
|
|
@@ -838,6 +912,80 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
|
|
|
838
912
|
</option>
|
|
839
913
|
</select>
|
|
840
914
|
</div>
|
|
915
|
+
<div
|
|
916
|
+
class="memori--start-privacy-explanation-container"
|
|
917
|
+
>
|
|
918
|
+
<p
|
|
919
|
+
class="memori--start-privacy-explanation"
|
|
920
|
+
>
|
|
921
|
+
Le conversazioni sono visibili all'autore dell'agente
|
|
922
|
+
</p>
|
|
923
|
+
<div
|
|
924
|
+
class="memori-tooltip memori-tooltip--align-right"
|
|
925
|
+
>
|
|
926
|
+
<div
|
|
927
|
+
class="memori-tooltip--content"
|
|
928
|
+
>
|
|
929
|
+
<div
|
|
930
|
+
class="memori--privacy-tooltip-content"
|
|
931
|
+
>
|
|
932
|
+
<p>
|
|
933
|
+
|
|
934
|
+
Tutte le conversazioni con questo agente sono visibili all'autore dell'agente
|
|
935
|
+
</p>
|
|
936
|
+
<ul
|
|
937
|
+
class="memori--privacy-tooltip-content-list"
|
|
938
|
+
>
|
|
939
|
+
<li>
|
|
940
|
+
Per utenti anonimi: l'autore vedrà il contenuto e l'indirizzo IP
|
|
941
|
+
</li>
|
|
942
|
+
<li>
|
|
943
|
+
Per utenti registrati: l'autore vedrà il contenuto e il nome utente
|
|
944
|
+
</li>
|
|
945
|
+
</ul>
|
|
946
|
+
<p>
|
|
947
|
+
L'autore utilizza queste informazioni per migliorare le funzionalità dell'agente. Continuando, accetti queste condizioni.
|
|
948
|
+
</p>
|
|
949
|
+
<a
|
|
950
|
+
href="https://memori.ai/en/privacy-policy"
|
|
951
|
+
rel="noopener noreferrer"
|
|
952
|
+
target="_blank"
|
|
953
|
+
>
|
|
954
|
+
Informativa sulla privacy
|
|
955
|
+
</a>
|
|
956
|
+
</div>
|
|
957
|
+
</div>
|
|
958
|
+
<div
|
|
959
|
+
class="memori-tooltip--trigger"
|
|
960
|
+
>
|
|
961
|
+
<svg
|
|
962
|
+
aria-hidden="true"
|
|
963
|
+
class="memori--start-privacy-explanation-icon"
|
|
964
|
+
fill="none"
|
|
965
|
+
focusable="false"
|
|
966
|
+
role="img"
|
|
967
|
+
stroke="currentColor"
|
|
968
|
+
stroke-linecap="round"
|
|
969
|
+
stroke-linejoin="round"
|
|
970
|
+
stroke-width="1.5"
|
|
971
|
+
viewBox="0 0 24 24"
|
|
972
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
973
|
+
>
|
|
974
|
+
<circle
|
|
975
|
+
cx="12"
|
|
976
|
+
cy="12"
|
|
977
|
+
r="10"
|
|
978
|
+
/>
|
|
979
|
+
<path
|
|
980
|
+
d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"
|
|
981
|
+
/>
|
|
982
|
+
<path
|
|
983
|
+
d="M12 17L12.01 17"
|
|
984
|
+
/>
|
|
985
|
+
</svg>
|
|
986
|
+
</div>
|
|
987
|
+
</div>
|
|
988
|
+
</div>
|
|
841
989
|
<button
|
|
842
990
|
class="memori-button memori-button--primary memori-button--rounded memori-button--padded memori--start-button"
|
|
843
991
|
>
|
|
@@ -430,6 +430,80 @@ exports[`renders Totem layout unchanged 1`] = `
|
|
|
430
430
|
</option>
|
|
431
431
|
</select>
|
|
432
432
|
</div>
|
|
433
|
+
<div
|
|
434
|
+
class="memori--start-privacy-explanation-container"
|
|
435
|
+
>
|
|
436
|
+
<p
|
|
437
|
+
class="memori--start-privacy-explanation"
|
|
438
|
+
>
|
|
439
|
+
Le conversazioni sono visibili all'autore dell'agente
|
|
440
|
+
</p>
|
|
441
|
+
<div
|
|
442
|
+
class="memori-tooltip memori-tooltip--align-right"
|
|
443
|
+
>
|
|
444
|
+
<div
|
|
445
|
+
class="memori-tooltip--content"
|
|
446
|
+
>
|
|
447
|
+
<div
|
|
448
|
+
class="memori--privacy-tooltip-content"
|
|
449
|
+
>
|
|
450
|
+
<p>
|
|
451
|
+
|
|
452
|
+
Tutte le conversazioni con questo agente sono visibili all'autore dell'agente
|
|
453
|
+
</p>
|
|
454
|
+
<ul
|
|
455
|
+
class="memori--privacy-tooltip-content-list"
|
|
456
|
+
>
|
|
457
|
+
<li>
|
|
458
|
+
Per utenti anonimi: l'autore vedrà il contenuto e l'indirizzo IP
|
|
459
|
+
</li>
|
|
460
|
+
<li>
|
|
461
|
+
Per utenti registrati: l'autore vedrà il contenuto e il nome utente
|
|
462
|
+
</li>
|
|
463
|
+
</ul>
|
|
464
|
+
<p>
|
|
465
|
+
L'autore utilizza queste informazioni per migliorare le funzionalità dell'agente. Continuando, accetti queste condizioni.
|
|
466
|
+
</p>
|
|
467
|
+
<a
|
|
468
|
+
href="https://memori.ai/en/privacy-policy"
|
|
469
|
+
rel="noopener noreferrer"
|
|
470
|
+
target="_blank"
|
|
471
|
+
>
|
|
472
|
+
Informativa sulla privacy
|
|
473
|
+
</a>
|
|
474
|
+
</div>
|
|
475
|
+
</div>
|
|
476
|
+
<div
|
|
477
|
+
class="memori-tooltip--trigger"
|
|
478
|
+
>
|
|
479
|
+
<svg
|
|
480
|
+
aria-hidden="true"
|
|
481
|
+
class="memori--start-privacy-explanation-icon"
|
|
482
|
+
fill="none"
|
|
483
|
+
focusable="false"
|
|
484
|
+
role="img"
|
|
485
|
+
stroke="currentColor"
|
|
486
|
+
stroke-linecap="round"
|
|
487
|
+
stroke-linejoin="round"
|
|
488
|
+
stroke-width="1.5"
|
|
489
|
+
viewBox="0 0 24 24"
|
|
490
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
491
|
+
>
|
|
492
|
+
<circle
|
|
493
|
+
cx="12"
|
|
494
|
+
cy="12"
|
|
495
|
+
r="10"
|
|
496
|
+
/>
|
|
497
|
+
<path
|
|
498
|
+
d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"
|
|
499
|
+
/>
|
|
500
|
+
<path
|
|
501
|
+
d="M12 17L12.01 17"
|
|
502
|
+
/>
|
|
503
|
+
</svg>
|
|
504
|
+
</div>
|
|
505
|
+
</div>
|
|
506
|
+
</div>
|
|
433
507
|
<button
|
|
434
508
|
class="memori-button memori-button--primary memori-button--rounded memori-button--padded memori--start-button"
|
|
435
509
|
>
|
|
@@ -376,6 +376,80 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
|
|
|
376
376
|
</option>
|
|
377
377
|
</select>
|
|
378
378
|
</div>
|
|
379
|
+
<div
|
|
380
|
+
class="memori--start-privacy-explanation-container"
|
|
381
|
+
>
|
|
382
|
+
<p
|
|
383
|
+
class="memori--start-privacy-explanation"
|
|
384
|
+
>
|
|
385
|
+
Le conversazioni sono visibili all'autore dell'agente
|
|
386
|
+
</p>
|
|
387
|
+
<div
|
|
388
|
+
class="memori-tooltip memori-tooltip--align-right"
|
|
389
|
+
>
|
|
390
|
+
<div
|
|
391
|
+
class="memori-tooltip--content"
|
|
392
|
+
>
|
|
393
|
+
<div
|
|
394
|
+
class="memori--privacy-tooltip-content"
|
|
395
|
+
>
|
|
396
|
+
<p>
|
|
397
|
+
|
|
398
|
+
Tutte le conversazioni con questo agente sono visibili all'autore dell'agente
|
|
399
|
+
</p>
|
|
400
|
+
<ul
|
|
401
|
+
class="memori--privacy-tooltip-content-list"
|
|
402
|
+
>
|
|
403
|
+
<li>
|
|
404
|
+
Per utenti anonimi: l'autore vedrà il contenuto e l'indirizzo IP
|
|
405
|
+
</li>
|
|
406
|
+
<li>
|
|
407
|
+
Per utenti registrati: l'autore vedrà il contenuto e il nome utente
|
|
408
|
+
</li>
|
|
409
|
+
</ul>
|
|
410
|
+
<p>
|
|
411
|
+
L'autore utilizza queste informazioni per migliorare le funzionalità dell'agente. Continuando, accetti queste condizioni.
|
|
412
|
+
</p>
|
|
413
|
+
<a
|
|
414
|
+
href="https://memori.ai/en/privacy-policy"
|
|
415
|
+
rel="noopener noreferrer"
|
|
416
|
+
target="_blank"
|
|
417
|
+
>
|
|
418
|
+
Informativa sulla privacy
|
|
419
|
+
</a>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
<div
|
|
423
|
+
class="memori-tooltip--trigger"
|
|
424
|
+
>
|
|
425
|
+
<svg
|
|
426
|
+
aria-hidden="true"
|
|
427
|
+
class="memori--start-privacy-explanation-icon"
|
|
428
|
+
fill="none"
|
|
429
|
+
focusable="false"
|
|
430
|
+
role="img"
|
|
431
|
+
stroke="currentColor"
|
|
432
|
+
stroke-linecap="round"
|
|
433
|
+
stroke-linejoin="round"
|
|
434
|
+
stroke-width="1.5"
|
|
435
|
+
viewBox="0 0 24 24"
|
|
436
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
437
|
+
>
|
|
438
|
+
<circle
|
|
439
|
+
cx="12"
|
|
440
|
+
cy="12"
|
|
441
|
+
r="10"
|
|
442
|
+
/>
|
|
443
|
+
<path
|
|
444
|
+
d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"
|
|
445
|
+
/>
|
|
446
|
+
<path
|
|
447
|
+
d="M12 17L12.01 17"
|
|
448
|
+
/>
|
|
449
|
+
</svg>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
379
453
|
<button
|
|
380
454
|
class="memori-button memori-button--primary memori-button--rounded memori-button--padded memori--start-button"
|
|
381
455
|
>
|