@memori.ai/memori-react 8.4.0 → 8.4.2

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.
Files changed (36) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/components/LoginDrawer/LoginDrawer.css +302 -0
  3. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +1 -1
  4. package/dist/components/MemoriWidget/MemoriWidget.js +1 -1
  5. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  6. package/dist/components/layouts/chat.css +7 -6
  7. package/dist/locales/de.json +17 -0
  8. package/dist/locales/en.json +17 -0
  9. package/dist/locales/es.json +17 -0
  10. package/dist/locales/fr.json +17 -0
  11. package/dist/locales/it.json +17 -0
  12. package/esm/components/LoginDrawer/LoginDrawer.css +302 -0
  13. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +1 -1
  14. package/esm/components/MemoriWidget/MemoriWidget.js +1 -1
  15. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  16. package/esm/components/layouts/chat.css +7 -6
  17. package/esm/locales/de.json +17 -0
  18. package/esm/locales/en.json +17 -0
  19. package/esm/locales/es.json +17 -0
  20. package/esm/locales/fr.json +17 -0
  21. package/esm/locales/it.json +17 -0
  22. package/package.json +1 -1
  23. package/src/components/LoginDrawer/LoginDrawer.css +302 -0
  24. package/src/components/LoginDrawer/LoginDrawer.stories.tsx +25 -0
  25. package/src/components/LoginDrawer/LoginDrawer.test.tsx +56 -0
  26. package/src/components/LoginDrawer/LoginDrawer.tsx +1 -1
  27. package/src/components/LoginDrawer/__snapshots__/LoginDrawer.test.tsx.snap +32 -0
  28. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +1 -1
  29. package/src/components/MemoriWidget/MemoriWidget.tsx +1 -1
  30. package/src/components/layouts/chat.css +7 -6
  31. package/src/index.stories.tsx +1 -0
  32. package/src/locales/de.json +17 -0
  33. package/src/locales/en.json +17 -0
  34. package/src/locales/es.json +17 -0
  35. package/src/locales/fr.json +17 -0
  36. package/src/locales/it.json +17 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
 
2
2
 
3
+ ## [8.4.2](https://github.com/memori-ai/memori-react/compare/v8.4.1...v8.4.2) (2025-09-12)
4
+
5
+
6
+ ### Changes
7
+
8
+ * adjust chat layout styles for improved responsiveness and height calculations ([1e71c3b](https://github.com/memori-ai/memori-react/commit/1e71c3bc0e8aab5e448d28c9f9e1887c3a25769b))
9
+ * remove OTP-related functionality from LoginDrawer ([880f51d](https://github.com/memori-ai/memori-react/commit/880f51d1f989821c263738709625dd58daf719c3))
10
+
11
+ ## [8.4.1](https://github.com/memori-ai/memori-react/compare/v8.4.0...v8.4.1) (2025-09-11)
12
+
13
+
14
+ ### Features
15
+
16
+ * enhance OTP login form with username input, validation, and loading states ([833bcf3](https://github.com/memori-ai/memori-react/commit/833bcf35d873ebcfeb3ec8634425b5ec381a881e))
17
+ * implement OTP login functionality in LoginDrawer ([b378ed3](https://github.com/memori-ai/memori-react/commit/b378ed3c8c2821cbd1ae858cb406f8273967fd50))
18
+
3
19
  ## [8.4.0](https://github.com/memori-ai/memori-react/compare/v8.4.0-rc.9...v8.4.0) (2025-09-11)
4
20
 
5
21
 
@@ -40,6 +40,22 @@ p.memori--login-drawer--inline-error {
40
40
  text-align: center;
41
41
  }
42
42
 
43
+ .memori--login-drawer--otp-form {
44
+ display: flex;
45
+ flex-direction: column;
46
+ padding: 0 1rem;
47
+ margin: 0 0 2rem;
48
+ gap: 1.5rem;
49
+ }
50
+
51
+ .memori--login-drawer--otp-form label {
52
+ display: flex;
53
+ flex-direction: column;
54
+ gap: 0.5rem;
55
+ text-align: left;
56
+ }
57
+
58
+
43
59
  .memori--login-drawer--form label:not(.memori-checkbox) {
44
60
  display: flex;
45
61
  flex-direction: column;
@@ -141,4 +157,290 @@ h3.memori--login-drawer--edit-account-title {
141
157
  font-size: 1.33rem;
142
158
  font-weight: 400;
143
159
  line-height: 1.2;
160
+ }
161
+
162
+ /* OTP Login Styles */
163
+ .memori--login-drawer--welcome {
164
+ padding: 1rem 0.5rem;
165
+ text-align: center;
166
+ }
167
+
168
+ .memori--login-drawer--welcome h3 {
169
+ margin: 0 0 1rem;
170
+ color: var(--memori-text-color, #333);
171
+ font-size: 1.5rem;
172
+ font-weight: 600;
173
+ }
174
+
175
+ .memori--login-drawer--welcome-description {
176
+ margin: 0 0 2rem;
177
+ color: var(--memori-text-secondary, #666);
178
+ font-size: 1rem;
179
+ line-height: 1.5;
180
+ }
181
+
182
+ .memori--login-drawer--otp-info {
183
+ display: flex;
184
+ flex-direction: column;
185
+ margin: 0 0 2rem;
186
+ gap: 1rem;
187
+ text-align: left;
188
+ }
189
+
190
+ .memori--login-drawer--otp-info-item {
191
+ display: flex;
192
+ align-items: center;
193
+ padding: 1rem;
194
+ border: 1px solid var(--memori-border-color, #e9ecef);
195
+ border-radius: 8px;
196
+ background: var(--memori-background-light, #f8f9fa);
197
+ gap: 1rem;
198
+ }
199
+
200
+ .memori--login-drawer--otp-info-number {
201
+ display: flex;
202
+ width: 32px;
203
+ height: 32px;
204
+ flex-shrink: 0;
205
+ align-items: center;
206
+ justify-content: center;
207
+ border-radius: 50%;
208
+ background: var(--memori-primary);
209
+ color: white;
210
+ font-size: 0.875rem;
211
+ font-weight: 600;
212
+ }
213
+
214
+ .memori--login-drawer--start-otp-button {
215
+ width: 100%;
216
+ margin-bottom: 1rem;
217
+ }
218
+
219
+ .memori--login-drawer--otp-container {
220
+ padding: 1rem 0.5rem;
221
+ text-align: center;
222
+ }
223
+
224
+ .memori--login-drawer--otp-container h3 {
225
+ margin: 0 0 1rem;
226
+ color: var(--memori-text-color, #333);
227
+ font-size: 1.5rem;
228
+ font-weight: 600;
229
+ }
230
+
231
+ .memori--login-drawer--otp-description {
232
+ margin: 0 0 2rem;
233
+ color: var(--memori-text-secondary, #666);
234
+ font-size: 1rem;
235
+ line-height: 1.5;
236
+ }
237
+ .memori--login-drawer--otp-form label span {
238
+ color: var(--memori-text-color, #333);
239
+ font-size: 0.875rem;
240
+ font-weight: 600;
241
+ letter-spacing: 0.05em;
242
+ text-transform: uppercase;
243
+ }
244
+
245
+ .memori--login-drawer--otp-username-input {
246
+ width: 95%;
247
+ height: 50px;
248
+ padding: 0 1rem;
249
+ border: 2px solid var(--memori-border-color, #e9ecef);
250
+ border-radius: 8px;
251
+ background: var(--memori-background, #fff);
252
+ font-size: 1rem;
253
+ font-weight: 500;
254
+ outline: none;
255
+ text-align: left;
256
+ transition: all 0.2s ease;
257
+ }
258
+
259
+ .memori--login-drawer--otp-username-input:focus {
260
+ border-color: var(--memori-primary);
261
+ box-shadow: 0 0 0 3px rgba(var(--memori-primary-rgb, 0, 123, 255), 0.1);
262
+ transform: translateY(-1px);
263
+ }
264
+
265
+ .memori--login-drawer--otp-username-input::placeholder {
266
+ color: var(--memori-text-muted, #999);
267
+ font-weight: 400;
268
+ }
269
+
270
+ .memori--login-drawer--otp-input {
271
+ width: 200px;
272
+ height: 60px;
273
+ border: 2px solid var(--memori-border-color, #e9ecef);
274
+ border-radius: 12px;
275
+ margin: 0 auto;
276
+ background: var(--memori-background, #fff);
277
+ font-size: 2rem;
278
+ font-weight: 600;
279
+ letter-spacing: 0.5rem;
280
+ outline: none;
281
+ text-align: center;
282
+ transition: all 0.2s ease;
283
+ }
284
+
285
+ .memori--login-drawer--otp-input:focus {
286
+ border-color: var(--memori-primary);
287
+ box-shadow: 0 0 0 3px rgba(var(--memori-primary-rgb, 0, 123, 255), 0.1);
288
+ transform: scale(1.02);
289
+ }
290
+
291
+ .memori--login-drawer--otp-input::placeholder {
292
+ color: var(--memori-text-muted, #999);
293
+ letter-spacing: 0.5rem;
294
+ }
295
+
296
+ .memori--login-drawer--otp-input:invalid {
297
+ border-color: var(--memori-error-color);
298
+ animation: shake 0.5s ease-in-out;
299
+ }
300
+
301
+ @keyframes shake {
302
+ 0%, 100% { transform: translateX(0); }
303
+ 25% { transform: translateX(-5px); }
304
+ 75% { transform: translateX(5px); }
305
+ }
306
+
307
+ .memori--login-drawer--otp-username-input:invalid {
308
+ border-color: var(--memori-error-color);
309
+ animation: shake 0.5s ease-in-out;
310
+ }
311
+
312
+ .memori--login-drawer--otp-timer {
313
+ display: flex;
314
+ align-items: center;
315
+ justify-content: center;
316
+ padding: 0.75rem 1rem;
317
+ border: 1px solid var(--memori-warning-color, #ffc107);
318
+ border-radius: 8px;
319
+ margin: 0 0 1.5rem;
320
+ background: rgba(var(--memori-warning-color-rgb, 255, 193, 7), 0.1);
321
+ color: var(--memori-warning-color, #ffc107);
322
+ font-size: 0.875rem;
323
+ font-weight: 600;
324
+ gap: 0.5rem;
325
+ }
326
+
327
+ .memori--login-drawer--otp-timer::before {
328
+ content: "⏱️";
329
+ font-size: 1rem;
330
+ }
331
+
332
+ .memori--login-drawer--otp-actions {
333
+ display: flex;
334
+ flex-wrap: wrap;
335
+ justify-content: center;
336
+ gap: 1rem;
337
+ }
338
+
339
+ .memori--login-drawer--otp-actions .memori-button {
340
+ min-width: 120px;
341
+ }
342
+
343
+ .memori--login-drawer--otp-error {
344
+ display: flex;
345
+ align-items: center;
346
+ justify-content: center;
347
+ padding: 0.75rem 1rem;
348
+ border: 1px solid var(--memori-error-color);
349
+ border-radius: 8px;
350
+ margin: 1rem 0 0;
351
+ animation: slideIn 0.3s ease-out;
352
+ background: rgba(var(--memori-error-color-rgb, 220, 53, 69), 0.1);
353
+ color: var(--memori-error-color);
354
+ font-size: 0.875rem;
355
+ font-weight: 500;
356
+ gap: 0.5rem;
357
+ text-align: center;
358
+ }
359
+
360
+ .memori--login-drawer--otp-error::before {
361
+ content: "⚠️";
362
+ font-size: 1rem;
363
+ }
364
+
365
+ @keyframes slideIn {
366
+ from {
367
+ opacity: 0;
368
+ transform: translateY(-10px);
369
+ }
370
+ to {
371
+ opacity: 1;
372
+ transform: translateY(0);
373
+ }
374
+ }
375
+
376
+ /* Loading state for OTP form */
377
+ .memori--login-drawer--otp-form.loading {
378
+ opacity: 0.7;
379
+ pointer-events: none;
380
+ }
381
+
382
+ .memori--login-drawer--otp-form.loading .memori--login-drawer--otp-username-input,
383
+ .memori--login-drawer--otp-form.loading .memori--login-drawer--otp-input {
384
+ background: var(--memori-background-light, #f8f9fa);
385
+ cursor: not-allowed;
386
+ }
387
+
388
+ /* Success state animation */
389
+ @keyframes successPulse {
390
+ 0% { transform: scale(1); }
391
+ 50% { transform: scale(1.05); }
392
+ 100% { transform: scale(1); }
393
+ }
394
+
395
+ .memori--login-drawer--otp-input.success {
396
+ border-color: var(--memori-success-color, #28a745);
397
+ animation: successPulse 0.6s ease-in-out;
398
+ background: rgba(var(--memori-success-color-rgb, 40, 167, 69), 0.1);
399
+ }
400
+
401
+ /* Responsive adjustments */
402
+ @media (max-width: 768px) {
403
+ .memori--login-drawer--otp-form {
404
+ padding: 0 0.5rem;
405
+ gap: 1rem;
406
+ }
407
+
408
+ .memori--login-drawer--otp-info {
409
+ gap: 0.75rem;
410
+ }
411
+
412
+ .memori--login-drawer--otp-info-item {
413
+ padding: 0.75rem;
414
+ }
415
+ }
416
+
417
+ @media (max-width: 480px) {
418
+ .memori--login-drawer--otp-input {
419
+ width: 160px;
420
+ height: 50px;
421
+ font-size: 1.5rem;
422
+ letter-spacing: 0.3rem;
423
+ }
424
+
425
+ .memori--login-drawer--otp-username-input {
426
+ height: 45px;
427
+ font-size: 0.9rem;
428
+ }
429
+
430
+ .memori--login-drawer--otp-actions {
431
+ flex-direction: column;
432
+ align-items: center;
433
+ gap: 0.75rem;
434
+ }
435
+
436
+ .memori--login-drawer--otp-actions .memori-button {
437
+ width: 100%;
438
+ max-width: 200px;
439
+ }
440
+
441
+ .memori--login-drawer--otp-timer,
442
+ .memori--login-drawer--otp-error {
443
+ padding: 0.5rem 0.75rem;
444
+ font-size: 0.8rem;
445
+ }
144
446
  }
@@ -19,7 +19,7 @@
19
19
 
20
20
  /* Override drawer width for ArtifactDrawer */
21
21
  .memori-artifact-panel-drawer {
22
- --memori-drawer--width-lg: 50%;
22
+ --memori-drawer--width-lg: 46%;
23
23
  }
24
24
 
25
25
  /* Main Drawer Container (Mobile Only) */
@@ -159,7 +159,7 @@ let audioContext;
159
159
  let memoriPassword;
160
160
  let speakerMuted = false;
161
161
  let userToken;
162
- const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenantID, memoriLang, multilingual, integration, layout, customLayout, showShare, preview = false, embed = false, showCopyButton = true, showTranslationOriginal = false, showInputs = true, showDates = false, showContextPerLine = false, showSettings, showTypingText = false, showClear = false, showLogin = false, showUpload, showOnlyLastMessages, showChatHistory, showReasoning, height = '100vh', secret, baseUrl = 'https://aisuru.com', apiURL = 'https://backend-staging.memori.ai', engineURL = 'https://engine-staging.memori.ai', initialContextVars, initialQuestion, ttsProvider, ogImage, sessionID: initialSessionID, tenant, personification, authToken, enableAudio, defaultSpeakerActive = true, disableTextEnteredEvents = false, onStateChange, additionalInfo, additionalSettings, customMediaRenderer, userAvatar, useMathFormatting = false, autoStart = false, applyVarsToRoot = false, showFunctionCache = false, }) => {
162
+ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenantID, memoriLang, multilingual, integration, layout, customLayout, showShare, preview = false, embed = false, showCopyButton = true, showTranslationOriginal = false, showInputs = true, showDates = false, showContextPerLine = false, showSettings, showTypingText = false, showClear = false, showLogin = false, showUpload, showOnlyLastMessages, showChatHistory, showReasoning, height = '100vh', secret, baseUrl = 'https://aisuru-staging.aclambda.online', apiURL = 'https://backend-staging.memori.ai', engineURL = 'https://engine-staging.memori.ai', initialContextVars, initialQuestion, ttsProvider, ogImage, sessionID: initialSessionID, tenant, personification, authToken, enableAudio, defaultSpeakerActive = true, disableTextEnteredEvents = false, onStateChange, additionalInfo, additionalSettings, customMediaRenderer, userAvatar, useMathFormatting = false, autoStart = false, applyVarsToRoot = false, showFunctionCache = false, }) => {
163
163
  var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
164
164
  const { t, i18n } = (0, react_i18next_1.useTranslation)();
165
165
  const [isClient, setIsClient] = (0, react_1.useState)(false);