@memori.ai/memori-react 5.1.0 → 6.0.0-rc.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.
Files changed (93) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +1 -0
  3. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.d.ts +14 -0
  4. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.js +66 -0
  5. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.js.map +1 -0
  6. package/dist/components/Header/Header.css +2 -1
  7. package/dist/components/Header/Header.d.ts +2 -0
  8. package/dist/components/Header/Header.js +3 -2
  9. package/dist/components/Header/Header.js.map +1 -1
  10. package/dist/components/ImageUpload/ImageUpload.css +168 -0
  11. package/dist/components/ImageUpload/ImageUpload.d.ts +28 -0
  12. package/dist/components/ImageUpload/ImageUpload.js +163 -0
  13. package/dist/components/ImageUpload/ImageUpload.js.map +1 -0
  14. package/dist/components/LoginDrawer/LoginDrawer.css +84 -0
  15. package/dist/components/LoginDrawer/LoginDrawer.d.ts +15 -0
  16. package/dist/components/LoginDrawer/LoginDrawer.js +129 -0
  17. package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -0
  18. package/dist/components/MemoriWidget/MemoriWidget.d.ts +2 -1
  19. package/dist/components/MemoriWidget/MemoriWidget.js +33 -5
  20. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  21. package/dist/components/StartPanel/StartPanel.d.ts +2 -0
  22. package/dist/components/StartPanel/StartPanel.js +2 -2
  23. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  24. package/dist/components/layouts/Default.d.ts +17 -0
  25. package/dist/components/layouts/Default.js +8 -0
  26. package/dist/components/layouts/Default.js.map +1 -0
  27. package/dist/components/ui/Message.d.ts +17 -0
  28. package/dist/components/ui/Message.js +13 -0
  29. package/dist/components/ui/Message.js.map +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +3 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/locales/en.json +25 -0
  34. package/dist/locales/it.json +25 -0
  35. package/dist/styles.css +1 -0
  36. package/esm/components/AttachmentMediaModal/AttachmentMediaModal.d.ts +14 -0
  37. package/esm/components/AttachmentMediaModal/AttachmentMediaModal.js +63 -0
  38. package/esm/components/AttachmentMediaModal/AttachmentMediaModal.js.map +1 -0
  39. package/esm/components/Header/Header.css +2 -1
  40. package/esm/components/Header/Header.d.ts +2 -0
  41. package/esm/components/Header/Header.js +3 -2
  42. package/esm/components/Header/Header.js.map +1 -1
  43. package/esm/components/ImageUpload/ImageUpload.css +168 -0
  44. package/esm/components/ImageUpload/ImageUpload.d.ts +28 -0
  45. package/esm/components/ImageUpload/ImageUpload.js +160 -0
  46. package/esm/components/ImageUpload/ImageUpload.js.map +1 -0
  47. package/esm/components/LoginDrawer/LoginDrawer.css +84 -0
  48. package/esm/components/LoginDrawer/LoginDrawer.d.ts +15 -0
  49. package/esm/components/LoginDrawer/LoginDrawer.js +125 -0
  50. package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -0
  51. package/esm/components/MemoriWidget/MemoriWidget.d.ts +2 -1
  52. package/esm/components/MemoriWidget/MemoriWidget.js +33 -5
  53. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  54. package/esm/components/StartPanel/StartPanel.d.ts +2 -0
  55. package/esm/components/StartPanel/StartPanel.js +2 -2
  56. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  57. package/esm/components/layouts/Default.d.ts +17 -0
  58. package/esm/components/layouts/Default.js +5 -0
  59. package/esm/components/layouts/Default.js.map +1 -0
  60. package/esm/components/ui/Message.d.ts +17 -0
  61. package/esm/components/ui/Message.js +10 -0
  62. package/esm/components/ui/Message.js.map +1 -0
  63. package/esm/index.d.ts +1 -0
  64. package/esm/index.js +3 -2
  65. package/esm/index.js.map +1 -1
  66. package/esm/locales/en.json +25 -0
  67. package/esm/locales/it.json +25 -0
  68. package/esm/styles.css +1 -0
  69. package/package.json +1 -1
  70. package/src/components/Header/Header.css +2 -1
  71. package/src/components/Header/Header.stories.tsx +27 -1
  72. package/src/components/Header/Header.test.tsx +14 -1
  73. package/src/components/Header/Header.tsx +17 -0
  74. package/src/components/Header/__snapshots__/Header.test.tsx.snap +260 -0
  75. package/src/components/LoginDrawer/LoginDrawer.css +84 -0
  76. package/src/components/LoginDrawer/LoginDrawer.stories.tsx +58 -0
  77. package/src/components/LoginDrawer/LoginDrawer.test.tsx +86 -0
  78. package/src/components/LoginDrawer/LoginDrawer.tsx +330 -0
  79. package/src/components/LoginDrawer/__snapshots__/LoginDrawer.test.tsx.snap +35 -0
  80. package/src/components/MemoriWidget/MemoriWidget.tsx +48 -4
  81. package/src/components/StartPanel/StartPanel.stories.tsx +3 -1
  82. package/src/components/StartPanel/StartPanel.test.tsx +12 -0
  83. package/src/components/StartPanel/StartPanel.tsx +11 -0
  84. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +7 -0
  85. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +20 -0
  86. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +20 -0
  87. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +20 -0
  88. package/src/index.stories.tsx +0 -1
  89. package/src/index.tsx +4 -0
  90. package/src/locales/en.json +25 -0
  91. package/src/locales/it.json +25 -0
  92. package/src/mocks/data.ts +2 -2
  93. package/src/styles.css +1 -0
@@ -153,6 +153,31 @@
153
153
  "congratulationsNewLevelDescription": "Il tuo Memori è diventato più evoluto con {{points}} punti, guarda le",
154
154
  "statistics": "statistiche"
155
155
  },
156
+ "login": {
157
+ "login": "Accedi",
158
+ "logout": "Esci",
159
+ "user": "Utente",
160
+ "loggedDrawerTitle": "Ciao, {{name}}!",
161
+ "loginDrawerTitle": "Accedi",
162
+ "newUserSignUp": "Sei un nuovo utente?",
163
+ "signUp": "Registrati!",
164
+ "userNameOrEmail": "Nome utente o email",
165
+ "underage": "Devi avere almeno {{age}} anni per registrarti.",
166
+ "optional": "opzionale",
167
+ "birthDate": "Data di nascita",
168
+ "birthDateHelper": "Ti chiediamo la data di nascita esclusivamente per abilitare o disabilitare le funzionalità che hanno restrizioni in base all'età",
169
+ "missingData": "Informazioni mancanti",
170
+ "missingDataHelper": "Sappiamo che questo è un po' fastidioso, ma abbiamo bisogno di alcune informazioni in più per completare la tua registrazione.",
171
+ "goToAccountToChangeYourPreferences": "Puoi cambiare la tua scelta in qualsiasi momento dalla tua pagina Account.",
172
+ "deepThoughtExplaination": "Pensiero Profondo è una funzionalità avanzata delle AI che ti consentirà di poter sfruttare a pieno le tue conversazioni mantenendo memoria delle stesse. Le AI con Pensiero Profondo possono darti informazioni adattandosi a te e alle cose che condividerete insieme. Consenti all'autore del twin di contattarti per offerte commerciali riguardanti prodotti su cui hai espresso interesse.",
173
+ "tnCAndPPAcceptedHelper": "Dall'ultimo accesso, i T&C e l'Informativa sulla privacy sono stati modificati. Si prega di accettarle, altrimenti non sarà possibile apportare modifiche ai propri gemelli. Puoi sempre cancellare il tuo account nella pagina del tuo profilo utente.",
174
+ "privacyLabel": "Ho letto e accettato l'",
175
+ "privacyAndCookiePolicy": "informativa sui cookie e sulla privacy",
176
+ "and": "e",
177
+ "termsOfService": "i termini del servizio",
178
+ "pAndCUAccepted": "Accetto le condizioni di utilizzo relative a Pensiero Profondo",
179
+ "save": "Salva"
180
+ },
156
181
  "success": "Operazione andata a buon fine",
157
182
  "Error": "Errore",
158
183
  "internal server error": "Ops, scusa... qualcosa è andato storto nel server",
package/esm/styles.css CHANGED
@@ -39,6 +39,7 @@
39
39
  @import url('./components/DateSelector/DateSelector.css');
40
40
  @import url('./components/AgeVerificationModal/AgeVerificationModal.css');
41
41
  @import url('./components/KnownFacts/KnownFacts.css');
42
+ @import url('./components/LoginDrawer/LoginDrawer.css');
42
43
  @import url('./components/MemoriWidget/MemoriWidget.css');
43
44
 
44
45
  @import url('https://fonts.bunny.net/css?family=exo-2:200,400,700');
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.1.0",
2
+ "version": "6.0.0-rc.0",
3
3
  "name": "@memori.ai/memori-react",
4
4
  "author": "Memori Srl",
5
5
  "main": "dist/index.js",
@@ -60,6 +60,7 @@
60
60
  margin-left: 0.5rem;
61
61
  }
62
62
 
63
- .memori-header .memori-share-button {
63
+ .memori-header .memori-share-button,
64
+ .memori-header .memori-header--button-login {
64
65
  margin-left: 0.25rem;
65
66
  }
@@ -1,9 +1,10 @@
1
1
  import React from 'react';
2
2
  import { Meta, Story } from '@storybook/react';
3
- import { memori, history } from '../../mocks/data';
3
+ import { memori, tenant, history } from '../../mocks/data';
4
4
  import I18nWrapper from '../../I18nWrapper';
5
5
  import Header, { Props } from './Header';
6
6
  import SettingsDrawer from '../SettingsDrawer/SettingsDrawer';
7
+ import LoginDrawer from '../LoginDrawer/LoginDrawer';
7
8
 
8
9
  import './Header.css';
9
10
 
@@ -32,6 +33,7 @@ const Template: Story<Props> = args => {
32
33
  const [continuousSpeech, setContinuousSpeech] = React.useState(true);
33
34
  const [continuousSpeechTimeout, setContinuousSpeechTimeout] =
34
35
  React.useState(2);
36
+ const [showLoginDrawer, setShowLoginDrawer] = React.useState(false);
35
37
 
36
38
  return (
37
39
  <I18nWrapper>
@@ -43,6 +45,7 @@ const Template: Story<Props> = args => {
43
45
  setShowSettingsDrawer={() => setShowSettingsDrawer(true)}
44
46
  setShowKnownFactsDrawer={() => setShowKnownFactsDrawer(true)}
45
47
  setShowExpertsDrawer={() => setShowExpertsDrawer(true)}
48
+ setShowLoginDrawer={() => setShowLoginDrawer(true)}
46
49
  />
47
50
  <SettingsDrawer
48
51
  open={!!showSettingsDrawer}
@@ -56,6 +59,17 @@ const Template: Story<Props> = args => {
56
59
  hideEmissions={false}
57
60
  setHideEmissions={() => {}}
58
61
  />
62
+ <LoginDrawer
63
+ tenant={tenant}
64
+ open={!!showLoginDrawer}
65
+ onClose={() => setShowLoginDrawer(false)}
66
+ onLogin={(user, token) => {
67
+ console.log(user, token);
68
+ setShowLoginDrawer(false);
69
+ }}
70
+ onLogout={() => setShowLoginDrawer(false)}
71
+ apiUrl="https://backend.memori.ai"
72
+ />
59
73
  </I18nWrapper>
60
74
  );
61
75
  };
@@ -233,3 +247,15 @@ ForBoardOfExpertsAndOngoingChat.args = {
233
247
  sessionID: '1234',
234
248
  loginToken: 'abcd',
235
249
  };
250
+
251
+ export const WithLogin = Template.bind({});
252
+ WithLogin.args = {
253
+ memori,
254
+ history,
255
+ setShowPositionDrawer: () => {},
256
+ setShowSettingsDrawer: () => {},
257
+ clearHistory: () => {},
258
+ speakerMuted: false,
259
+ hasUserActivatedSpeak: false,
260
+ showLogin: true,
261
+ };
@@ -18,6 +18,7 @@ it('renders Header unchanged', () => {
18
18
  showShare={false}
19
19
  showSettings={false}
20
20
  clearHistory={jest.fn()}
21
+ setShowLoginDrawer={jest.fn()}
21
22
  />
22
23
  );
23
24
  expect(container).toMatchSnapshot();
@@ -46,6 +47,7 @@ it('renders Header with position unchanged', () => {
46
47
  showShare={false}
47
48
  showSettings={false}
48
49
  clearHistory={jest.fn()}
50
+ setShowLoginDrawer={jest.fn()}
49
51
  />
50
52
  );
51
53
  expect(container).toMatchSnapshot();
@@ -66,6 +68,7 @@ it('renders Header with speaker muted unchanged', () => {
66
68
  showShare={false}
67
69
  showSettings={false}
68
70
  clearHistory={jest.fn()}
71
+ setShowLoginDrawer={jest.fn()}
69
72
  />
70
73
  );
71
74
  expect(container).toMatchSnapshot();
@@ -86,6 +89,7 @@ it('renders Header with share button unchanged', () => {
86
89
  showShare={true}
87
90
  showSettings={false}
88
91
  clearHistory={jest.fn()}
92
+ setShowLoginDrawer={jest.fn()}
89
93
  />
90
94
  );
91
95
  expect(container).toMatchSnapshot();
@@ -106,6 +110,7 @@ it('renders Header with settings button unchanged', () => {
106
110
  showShare={false}
107
111
  showSettings={true}
108
112
  clearHistory={jest.fn()}
113
+ setShowLoginDrawer={jest.fn()}
109
114
  />
110
115
  );
111
116
  expect(container).toMatchSnapshot();
@@ -127,6 +132,7 @@ it('renders Header with clear button unchanged', () => {
127
132
  showSettings={false}
128
133
  showClear
129
134
  clearHistory={jest.fn()}
135
+ setShowLoginDrawer={jest.fn()}
130
136
  />
131
137
  );
132
138
  expect(container).toMatchSnapshot();
@@ -147,6 +153,7 @@ it('renders Header with user activated speak unchanged', () => {
147
153
  showShare={false}
148
154
  showSettings={false}
149
155
  clearHistory={jest.fn()}
156
+ setShowLoginDrawer={jest.fn()}
150
157
  />
151
158
  );
152
159
  expect(container).toMatchSnapshot();
@@ -170,7 +177,8 @@ it('renders Header with deep thought unlogged unchanged', () => {
170
177
  showShare={false}
171
178
  showSettings={false}
172
179
  clearHistory={jest.fn()}
173
- loginToken="abcd"
180
+ showLogin
181
+ setShowLoginDrawer={jest.fn()}
174
182
  />
175
183
  );
176
184
  expect(container).toMatchSnapshot();
@@ -199,6 +207,7 @@ it('renders Header with deep thought logged but without permission flag unchange
199
207
  ...user,
200
208
  pAndCUAccepted: false,
201
209
  }}
210
+ setShowLoginDrawer={jest.fn()}
202
211
  />
203
212
  );
204
213
  expect(container).toMatchSnapshot();
@@ -227,6 +236,7 @@ it('renders Header with deep thought logged with permission flag unchanged', ()
227
236
  ...user,
228
237
  pAndCUAccepted: true,
229
238
  }}
239
+ setShowLoginDrawer={jest.fn()}
230
240
  />
231
241
  );
232
242
  expect(container).toMatchSnapshot();
@@ -252,6 +262,7 @@ it('renders Header with deep thought and session open unchanged', () => {
252
262
  clearHistory={jest.fn()}
253
263
  sessionID="1234"
254
264
  loginToken="abcd"
265
+ setShowLoginDrawer={jest.fn()}
255
266
  />
256
267
  );
257
268
  expect(container).toMatchSnapshot();
@@ -276,6 +287,7 @@ it('renders Header for board of experts unchanged', () => {
276
287
  showSettings={false}
277
288
  clearHistory={jest.fn()}
278
289
  loginToken="abcd"
290
+ setShowLoginDrawer={jest.fn()}
279
291
  />
280
292
  );
281
293
  expect(container).toMatchSnapshot();
@@ -301,6 +313,7 @@ it('renders Header for board of experts with session open unchanged', () => {
301
313
  clearHistory={jest.fn()}
302
314
  sessionID="1234"
303
315
  loginToken="abcd"
316
+ setShowLoginDrawer={jest.fn()}
304
317
  />
305
318
  );
306
319
  expect(container).toMatchSnapshot();
@@ -21,6 +21,7 @@ import Refresh from '../icons/Refresh';
21
21
  import Clear from '../icons/Clear';
22
22
  import DeepThought from '../icons/DeepThought';
23
23
  import Group from '../icons/Group';
24
+ import UserIcon from '../icons/User';
24
25
 
25
26
  export interface Props {
26
27
  className?: string;
@@ -40,6 +41,8 @@ export interface Props {
40
41
  showSpeaker?: boolean;
41
42
  showReload?: boolean;
42
43
  showClear?: boolean;
44
+ showLogin?: boolean;
45
+ setShowLoginDrawer: (show: boolean) => void;
43
46
  clearHistory: () => void;
44
47
  loginToken?: string;
45
48
  user?: User;
@@ -64,6 +67,8 @@ const Header: React.FC<Props> = ({
64
67
  showSpeaker = true,
65
68
  showReload = false,
66
69
  showClear = false,
70
+ showLogin = true,
71
+ setShowLoginDrawer,
67
72
  clearHistory,
68
73
  loginToken,
69
74
  user,
@@ -194,6 +199,18 @@ const Header: React.FC<Props> = ({
194
199
  align="left"
195
200
  />
196
201
  )}
202
+ {showLogin && (
203
+ <Button
204
+ primary
205
+ shape="circle"
206
+ className="memori-header--button memori-header--button-login"
207
+ icon={<UserIcon />}
208
+ onClick={() => setShowLoginDrawer(true)}
209
+ title={
210
+ loginToken ? t('login.user') || 'User' : t('login.login') || 'Login'
211
+ }
212
+ />
213
+ )}
197
214
  </div>
198
215
  );
199
216
  };
@@ -82,6 +82,26 @@ exports[`renders Header for board of experts unchanged 1`] = `
82
82
  </div>
83
83
  </button>
84
84
  </div>
85
+ <button
86
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
87
+ title="login.user"
88
+ >
89
+ <span
90
+ class="memori-button--icon"
91
+ >
92
+ <svg
93
+ aria-hidden="true"
94
+ focusable="false"
95
+ role="img"
96
+ viewBox="0 0 1024 1024"
97
+ xmlns="http://www.w3.org/2000/svg"
98
+ >
99
+ <path
100
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
101
+ />
102
+ </svg>
103
+ </span>
104
+ </button>
85
105
  </div>
86
106
  </div>
87
107
  `;
@@ -167,6 +187,26 @@ exports[`renders Header for board of experts with session open unchanged 1`] = `
167
187
  </div>
168
188
  </button>
169
189
  </div>
190
+ <button
191
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
192
+ title="login.user"
193
+ >
194
+ <span
195
+ class="memori-button--icon"
196
+ >
197
+ <svg
198
+ aria-hidden="true"
199
+ focusable="false"
200
+ role="img"
201
+ viewBox="0 0 1024 1024"
202
+ xmlns="http://www.w3.org/2000/svg"
203
+ >
204
+ <path
205
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
206
+ />
207
+ </svg>
208
+ </span>
209
+ </button>
170
210
  </div>
171
211
  </div>
172
212
  `;
@@ -225,6 +265,26 @@ exports[`renders Header unchanged 1`] = `
225
265
  </div>
226
266
  </button>
227
267
  </div>
268
+ <button
269
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
270
+ title="login.login"
271
+ >
272
+ <span
273
+ class="memori-button--icon"
274
+ >
275
+ <svg
276
+ aria-hidden="true"
277
+ focusable="false"
278
+ role="img"
279
+ viewBox="0 0 1024 1024"
280
+ xmlns="http://www.w3.org/2000/svg"
281
+ >
282
+ <path
283
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
284
+ />
285
+ </svg>
286
+ </span>
287
+ </button>
228
288
  </div>
229
289
  </div>
230
290
  `;
@@ -303,6 +363,26 @@ exports[`renders Header with clear button unchanged 1`] = `
303
363
  </div>
304
364
  </button>
305
365
  </div>
366
+ <button
367
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
368
+ title="login.login"
369
+ >
370
+ <span
371
+ class="memori-button--icon"
372
+ >
373
+ <svg
374
+ aria-hidden="true"
375
+ focusable="false"
376
+ role="img"
377
+ viewBox="0 0 1024 1024"
378
+ xmlns="http://www.w3.org/2000/svg"
379
+ >
380
+ <path
381
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
382
+ />
383
+ </svg>
384
+ </span>
385
+ </button>
306
386
  </div>
307
387
  </div>
308
388
  `;
@@ -361,6 +441,26 @@ exports[`renders Header with deep thought and session open unchanged 1`] = `
361
441
  </div>
362
442
  </button>
363
443
  </div>
444
+ <button
445
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
446
+ title="login.user"
447
+ >
448
+ <span
449
+ class="memori-button--icon"
450
+ >
451
+ <svg
452
+ aria-hidden="true"
453
+ focusable="false"
454
+ role="img"
455
+ viewBox="0 0 1024 1024"
456
+ xmlns="http://www.w3.org/2000/svg"
457
+ >
458
+ <path
459
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
460
+ />
461
+ </svg>
462
+ </span>
463
+ </button>
364
464
  </div>
365
465
  </div>
366
466
  `;
@@ -419,6 +519,26 @@ exports[`renders Header with deep thought logged but without permission flag unc
419
519
  </div>
420
520
  </button>
421
521
  </div>
522
+ <button
523
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
524
+ title="login.user"
525
+ >
526
+ <span
527
+ class="memori-button--icon"
528
+ >
529
+ <svg
530
+ aria-hidden="true"
531
+ focusable="false"
532
+ role="img"
533
+ viewBox="0 0 1024 1024"
534
+ xmlns="http://www.w3.org/2000/svg"
535
+ >
536
+ <path
537
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
538
+ />
539
+ </svg>
540
+ </span>
541
+ </button>
422
542
  </div>
423
543
  </div>
424
544
  `;
@@ -521,6 +641,26 @@ exports[`renders Header with deep thought logged with permission flag unchanged
521
641
  </div>
522
642
  </button>
523
643
  </div>
644
+ <button
645
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
646
+ title="login.user"
647
+ >
648
+ <span
649
+ class="memori-button--icon"
650
+ >
651
+ <svg
652
+ aria-hidden="true"
653
+ focusable="false"
654
+ role="img"
655
+ viewBox="0 0 1024 1024"
656
+ xmlns="http://www.w3.org/2000/svg"
657
+ >
658
+ <path
659
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
660
+ />
661
+ </svg>
662
+ </span>
663
+ </button>
524
664
  </div>
525
665
  </div>
526
666
  `;
@@ -579,6 +719,26 @@ exports[`renders Header with deep thought unlogged unchanged 1`] = `
579
719
  </div>
580
720
  </button>
581
721
  </div>
722
+ <button
723
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
724
+ title="login.login"
725
+ >
726
+ <span
727
+ class="memori-button--icon"
728
+ >
729
+ <svg
730
+ aria-hidden="true"
731
+ focusable="false"
732
+ role="img"
733
+ viewBox="0 0 1024 1024"
734
+ xmlns="http://www.w3.org/2000/svg"
735
+ >
736
+ <path
737
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
738
+ />
739
+ </svg>
740
+ </span>
741
+ </button>
582
742
  </div>
583
743
  </div>
584
744
  `;
@@ -666,6 +826,26 @@ exports[`renders Header with position unchanged 1`] = `
666
826
  </div>
667
827
  </button>
668
828
  </div>
829
+ <button
830
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
831
+ title="login.login"
832
+ >
833
+ <span
834
+ class="memori-button--icon"
835
+ >
836
+ <svg
837
+ aria-hidden="true"
838
+ focusable="false"
839
+ role="img"
840
+ viewBox="0 0 1024 1024"
841
+ xmlns="http://www.w3.org/2000/svg"
842
+ >
843
+ <path
844
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
845
+ />
846
+ </svg>
847
+ </span>
848
+ </button>
669
849
  </div>
670
850
  </div>
671
851
  `;
@@ -744,6 +924,26 @@ exports[`renders Header with settings button unchanged 1`] = `
744
924
  </svg>
745
925
  </span>
746
926
  </button>
927
+ <button
928
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
929
+ title="login.login"
930
+ >
931
+ <span
932
+ class="memori-button--icon"
933
+ >
934
+ <svg
935
+ aria-hidden="true"
936
+ focusable="false"
937
+ role="img"
938
+ viewBox="0 0 1024 1024"
939
+ xmlns="http://www.w3.org/2000/svg"
940
+ >
941
+ <path
942
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
943
+ />
944
+ </svg>
945
+ </span>
946
+ </button>
747
947
  </div>
748
948
  </div>
749
949
  `;
@@ -832,6 +1032,26 @@ exports[`renders Header with share button unchanged 1`] = `
832
1032
  </div>
833
1033
  </button>
834
1034
  </div>
1035
+ <button
1036
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
1037
+ title="login.login"
1038
+ >
1039
+ <span
1040
+ class="memori-button--icon"
1041
+ >
1042
+ <svg
1043
+ aria-hidden="true"
1044
+ focusable="false"
1045
+ role="img"
1046
+ viewBox="0 0 1024 1024"
1047
+ xmlns="http://www.w3.org/2000/svg"
1048
+ >
1049
+ <path
1050
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
1051
+ />
1052
+ </svg>
1053
+ </span>
1054
+ </button>
835
1055
  </div>
836
1056
  </div>
837
1057
  `;
@@ -892,6 +1112,26 @@ exports[`renders Header with speaker muted unchanged 1`] = `
892
1112
  </div>
893
1113
  </button>
894
1114
  </div>
1115
+ <button
1116
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
1117
+ title="login.login"
1118
+ >
1119
+ <span
1120
+ class="memori-button--icon"
1121
+ >
1122
+ <svg
1123
+ aria-hidden="true"
1124
+ focusable="false"
1125
+ role="img"
1126
+ viewBox="0 0 1024 1024"
1127
+ xmlns="http://www.w3.org/2000/svg"
1128
+ >
1129
+ <path
1130
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
1131
+ />
1132
+ </svg>
1133
+ </span>
1134
+ </button>
895
1135
  </div>
896
1136
  </div>
897
1137
  `;
@@ -950,6 +1190,26 @@ exports[`renders Header with user activated speak unchanged 1`] = `
950
1190
  </div>
951
1191
  </button>
952
1192
  </div>
1193
+ <button
1194
+ class="memori-button memori-button--primary memori-button--circle memori-button--padded memori-button--icon-only memori-header--button memori-header--button-login"
1195
+ title="login.login"
1196
+ >
1197
+ <span
1198
+ class="memori-button--icon"
1199
+ >
1200
+ <svg
1201
+ aria-hidden="true"
1202
+ focusable="false"
1203
+ role="img"
1204
+ viewBox="0 0 1024 1024"
1205
+ xmlns="http://www.w3.org/2000/svg"
1206
+ >
1207
+ <path
1208
+ d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
1209
+ />
1210
+ </svg>
1211
+ </span>
1212
+ </button>
953
1213
  </div>
954
1214
  </div>
955
1215
  `;