@memori.ai/memori-react 9.0.0-alpha.16 → 9.0.0-alpha.17

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 (164) hide show
  1. package/CHANGELOG.md +3 -6945
  2. package/dist/components/Chat/Chat.css +11 -15
  3. package/dist/components/Chat/Chat.js +11 -3
  4. package/dist/components/Chat/Chat.js.map +1 -1
  5. package/dist/components/ChatInputs/ChatInputs.css +59 -147
  6. package/dist/components/ChatInputs/ChatInputs.js +3 -4
  7. package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
  8. package/dist/components/Header/ChatConsumptionDropdown.js +2 -1
  9. package/dist/components/Header/ChatConsumptionDropdown.js.map +1 -1
  10. package/dist/components/Header/Header.css +192 -22
  11. package/dist/components/Header/Header.d.ts +1 -0
  12. package/dist/components/Header/Header.js +26 -24
  13. package/dist/components/Header/Header.js.map +1 -1
  14. package/dist/components/IconButton/IconButton.css +144 -0
  15. package/dist/components/IconButton/IconButton.d.ts +9 -0
  16. package/dist/components/IconButton/IconButton.js +36 -0
  17. package/dist/components/IconButton/IconButton.js.map +1 -0
  18. package/dist/components/KnownFacts/KnownFacts.css +19 -10
  19. package/dist/components/KnownFacts/KnownFacts.js +13 -3
  20. package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
  21. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +29 -44
  22. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +3 -2
  23. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  24. package/dist/components/MemoriWidget/MemoriWidget.css +2 -1
  25. package/dist/components/MemoriWidget/MemoriWidget.js +24 -28
  26. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  27. package/dist/components/MicrophoneButton/MicrophoneButton.css +2 -183
  28. package/dist/components/MicrophoneButton/MicrophoneButton.js +3 -1
  29. package/dist/components/MicrophoneButton/MicrophoneButton.js.map +1 -1
  30. package/dist/components/MobileSessionPanel/MobileSessionPanel.css +22 -7
  31. package/dist/components/MobileSessionPanel/MobileSessionPanel.d.ts +1 -0
  32. package/dist/components/MobileSessionPanel/MobileSessionPanel.js +5 -3
  33. package/dist/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  34. package/dist/components/PositionPopover/PositionPopover.d.ts +2 -0
  35. package/dist/components/PositionPopover/PositionPopover.js +18 -4
  36. package/dist/components/PositionPopover/PositionPopover.js.map +1 -1
  37. package/dist/components/ShareButton/ShareButton.css +3 -2
  38. package/dist/components/ShareButton/ShareButton.js +3 -2
  39. package/dist/components/ShareButton/ShareButton.js.map +1 -1
  40. package/dist/components/UploadButton/UploadButton.css +2 -20
  41. package/dist/components/UploadButton/UploadButton.js +2 -1
  42. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  43. package/dist/components/layouts/Chat.js +73 -55
  44. package/dist/components/layouts/Chat.js.map +1 -1
  45. package/dist/components/layouts/FullPage.js +53 -34
  46. package/dist/components/layouts/FullPage.js.map +1 -1
  47. package/dist/components/layouts/HiddenChat.js +3 -3
  48. package/dist/components/layouts/HiddenChat.js.map +1 -1
  49. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +3 -3
  50. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  51. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +28 -15
  52. package/dist/components/layouts/ZoomedFullBody.js +53 -34
  53. package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
  54. package/dist/components/layouts/chat.css +52 -22
  55. package/dist/components/layouts/hidden-chat.css +33 -68
  56. package/dist/components/layouts/zoomed-full-body.css +5 -4
  57. package/dist/styles.css +1 -1
  58. package/dist/version.d.ts +1 -1
  59. package/dist/version.js +1 -1
  60. package/esm/components/Chat/Chat.css +11 -15
  61. package/esm/components/Chat/Chat.js +11 -3
  62. package/esm/components/Chat/Chat.js.map +1 -1
  63. package/esm/components/ChatInputs/ChatInputs.css +59 -147
  64. package/esm/components/ChatInputs/ChatInputs.js +3 -4
  65. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  66. package/esm/components/Header/ChatConsumptionDropdown.js +3 -2
  67. package/esm/components/Header/ChatConsumptionDropdown.js.map +1 -1
  68. package/esm/components/Header/Header.css +192 -22
  69. package/esm/components/Header/Header.d.ts +1 -0
  70. package/esm/components/Header/Header.js +26 -24
  71. package/esm/components/Header/Header.js.map +1 -1
  72. package/esm/components/IconButton/IconButton.css +144 -0
  73. package/esm/components/IconButton/IconButton.d.ts +9 -0
  74. package/esm/components/IconButton/IconButton.js +33 -0
  75. package/esm/components/IconButton/IconButton.js.map +1 -0
  76. package/esm/components/KnownFacts/KnownFacts.css +19 -10
  77. package/esm/components/KnownFacts/KnownFacts.js +13 -3
  78. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  79. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +29 -44
  80. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +3 -2
  81. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  82. package/esm/components/MemoriWidget/MemoriWidget.css +2 -1
  83. package/esm/components/MemoriWidget/MemoriWidget.js +24 -28
  84. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  85. package/esm/components/MicrophoneButton/MicrophoneButton.css +2 -183
  86. package/esm/components/MicrophoneButton/MicrophoneButton.js +3 -2
  87. package/esm/components/MicrophoneButton/MicrophoneButton.js.map +1 -1
  88. package/esm/components/MobileSessionPanel/MobileSessionPanel.css +22 -7
  89. package/esm/components/MobileSessionPanel/MobileSessionPanel.d.ts +1 -0
  90. package/esm/components/MobileSessionPanel/MobileSessionPanel.js +5 -3
  91. package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  92. package/esm/components/PositionPopover/PositionPopover.d.ts +2 -0
  93. package/esm/components/PositionPopover/PositionPopover.js +18 -4
  94. package/esm/components/PositionPopover/PositionPopover.js.map +1 -1
  95. package/esm/components/ShareButton/ShareButton.css +3 -2
  96. package/esm/components/ShareButton/ShareButton.js +4 -3
  97. package/esm/components/ShareButton/ShareButton.js.map +1 -1
  98. package/esm/components/UploadButton/UploadButton.css +2 -20
  99. package/esm/components/UploadButton/UploadButton.js +2 -1
  100. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  101. package/esm/components/layouts/Chat.js +74 -56
  102. package/esm/components/layouts/Chat.js.map +1 -1
  103. package/esm/components/layouts/FullPage.js +54 -35
  104. package/esm/components/layouts/FullPage.js.map +1 -1
  105. package/esm/components/layouts/HiddenChat.js +3 -3
  106. package/esm/components/layouts/HiddenChat.js.map +1 -1
  107. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +3 -3
  108. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  109. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +28 -15
  110. package/esm/components/layouts/ZoomedFullBody.js +54 -35
  111. package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
  112. package/esm/components/layouts/chat.css +52 -22
  113. package/esm/components/layouts/hidden-chat.css +33 -68
  114. package/esm/components/layouts/zoomed-full-body.css +5 -4
  115. package/esm/styles.css +1 -1
  116. package/esm/version.d.ts +1 -1
  117. package/esm/version.js +1 -1
  118. package/package.json +1 -1
  119. package/src/components/Chat/Chat.css +11 -15
  120. package/src/components/Chat/Chat.tsx +11 -2
  121. package/src/components/ChatInputs/ChatInputs.css +59 -147
  122. package/src/components/ChatInputs/ChatInputs.tsx +7 -7
  123. package/src/components/Header/ChatConsumptionDropdown.tsx +3 -2
  124. package/src/components/Header/Header.css +192 -22
  125. package/src/components/Header/Header.tsx +62 -55
  126. package/src/components/Header/__snapshots__/Header.test.tsx.snap +90 -57
  127. package/src/components/IconButton/IconButton.css +144 -0
  128. package/src/components/IconButton/IconButton.tsx +89 -0
  129. package/src/components/KnownFacts/KnownFacts.css +19 -10
  130. package/src/components/KnownFacts/KnownFacts.tsx +13 -2
  131. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +29 -44
  132. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +11 -20
  133. package/src/components/MemoriWidget/MemoriWidget.css +2 -1
  134. package/src/components/MemoriWidget/MemoriWidget.tsx +30 -29
  135. package/src/components/MicrophoneButton/MicrophoneButton.css +2 -183
  136. package/src/components/MicrophoneButton/MicrophoneButton.tsx +5 -5
  137. package/src/components/MobileSessionPanel/MobileSessionPanel.css +22 -7
  138. package/src/components/MobileSessionPanel/MobileSessionPanel.tsx +8 -3
  139. package/src/components/PositionPopover/PositionPopover.tsx +30 -4
  140. package/src/components/ShareButton/ShareButton.css +3 -2
  141. package/src/components/ShareButton/ShareButton.tsx +8 -9
  142. package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +9 -9
  143. package/src/components/StartPanel/StartPanel.stories.tsx +1 -1
  144. package/src/components/UploadButton/UploadButton.css +2 -20
  145. package/src/components/UploadButton/UploadButton.tsx +3 -5
  146. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +29 -25
  147. package/src/components/layouts/Chat.tsx +224 -208
  148. package/src/components/layouts/FullPage.tsx +61 -40
  149. package/src/components/layouts/HiddenChat.tsx +5 -6
  150. package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +2 -2
  151. package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +2 -0
  152. package/src/components/layouts/WebsiteAssistant/website-assistant.css +28 -15
  153. package/src/components/layouts/ZoomedFullBody.tsx +61 -40
  154. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +145 -143
  155. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +22 -18
  156. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +10 -145
  157. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +12 -10
  158. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +11 -9
  159. package/src/components/layouts/chat.css +52 -22
  160. package/src/components/layouts/hidden-chat.css +33 -68
  161. package/src/components/layouts/layouts.stories.tsx +1 -1
  162. package/src/components/layouts/zoomed-full-body.css +5 -4
  163. package/src/styles.css +1 -0
  164. package/src/version.ts +1 -1
@@ -186,10 +186,16 @@
186
186
  opacity: 0.6;
187
187
  }
188
188
 
189
- /* Logout action */
190
- .memori-dropdown--action-button.memori-dropdown--action-button--logout {
189
+ /* Logout action — full-width labeled control inside user menu */
190
+ .memori-dropdown--action-button.memori-dropdown--action-button--logout,
191
+ .memori-widget
192
+ .memori-icon-button.memori-icon-button--labeled.memori-dropdown--action-button--logout.memori-button {
191
193
  display: flex;
192
194
  width: 100%;
195
+ min-width: 0;
196
+ max-width: none;
197
+ height: auto;
198
+ min-height: var(--memori-icon-button-size, 36px);
193
199
  box-sizing: border-box;
194
200
  align-items: center;
195
201
  justify-content: center;
@@ -240,8 +246,8 @@
240
246
  }
241
247
 
242
248
  .memori-header--button svg {
243
- width: 1em;
244
- height: 1em;
249
+ width: 1.25em;
250
+ height: 1.25em;
245
251
  font-size: 1em;
246
252
  line-height: 1;
247
253
  }
@@ -250,6 +256,19 @@
250
256
  fill: currentColor;
251
257
  }
252
258
 
259
+ /* Accedi / login CTA — ~1.8:1 horizontal:vertical padding, height aligned to icon tools */
260
+ .memori-header .memori-header--button-login.memori-button {
261
+ height: var(--memori-icon-button-size, 40px);
262
+ min-height: var(--memori-icon-button-size, 40px);
263
+ padding: 0.5rem 0.9rem;
264
+ gap: 0.4rem;
265
+ }
266
+
267
+ .memori-header .memori-header--button-login.memori-button svg {
268
+ width: var(--memori-icon-button-icon-size, 20px);
269
+ height: var(--memori-icon-button-icon-size, 20px);
270
+ }
271
+
253
272
  .memori-header--position {
254
273
  display: inline-flex;
255
274
  align-items: center;
@@ -302,10 +321,175 @@
302
321
  pointer-events: none;
303
322
  }
304
323
 
305
- .memori-header .memori-button.memori-button--active:not(:disabled):not(.memori-button--disabled),
324
+ .memori-header .memori-icon-button.memori-button.memori-icon-button--active:not(:disabled):not(.memori-button--disabled),
306
325
  .memori-header
307
- .memori-dropdown--user-trigger-button.memori-button--active:not(:disabled):not(.memori-button--disabled) {
308
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--memori-primary, #3b82f6) 40%, transparent);
326
+ .memori-dropdown--user-trigger-button.memori-icon-button.memori-button--active:not(:disabled):not(.memori-button--disabled) {
327
+ /* Soft active owned by IconButton.css — do not use CTA ring/fill here */
328
+ box-shadow: none;
329
+ }
330
+
331
+ /* Header (+ mobile overflow) icon tools: primary icon on hover (not logout / recording) */
332
+ .memori-widget
333
+ .memori-header
334
+ .memori-icon-button.memori-button:hover:not(
335
+ :disabled,
336
+ .memori-button--disabled,
337
+ .memori-icon-button--recording,
338
+ .memori-dropdown--action-button--logout
339
+ ),
340
+ .memori-widget
341
+ .memori-fullpage-header-row
342
+ .memori-icon-button.memori-button:hover:not(
343
+ :disabled,
344
+ .memori-button--disabled,
345
+ .memori-icon-button--recording
346
+ ),
347
+ .memori-widget
348
+ .memori-chat-layout--header
349
+ .memori-icon-button.memori-button:hover:not(
350
+ :disabled,
351
+ .memori-button--disabled,
352
+ .memori-icon-button--recording
353
+ ),
354
+ .memori-widget
355
+ .memori-chat-layout--overflow-trigger.memori-icon-button.memori-button:hover:not(
356
+ :disabled,
357
+ .memori-button--disabled
358
+ ) {
359
+ color: var(--memori-primary);
360
+ }
361
+
362
+ .memori-widget
363
+ .memori-header
364
+ .memori-icon-button.memori-button:hover:not(
365
+ :disabled,
366
+ .memori-button--disabled,
367
+ .memori-icon-button--recording,
368
+ .memori-dropdown--action-button--logout
369
+ )
370
+ svg,
371
+ .memori-widget
372
+ .memori-fullpage-header-row
373
+ .memori-icon-button.memori-button:hover:not(
374
+ :disabled,
375
+ .memori-button--disabled,
376
+ .memori-icon-button--recording
377
+ )
378
+ svg,
379
+ .memori-widget
380
+ .memori-chat-layout--header
381
+ .memori-icon-button.memori-button:hover:not(
382
+ :disabled,
383
+ .memori-button--disabled,
384
+ .memori-icon-button--recording
385
+ )
386
+ svg,
387
+ .memori-widget
388
+ .memori-chat-layout--overflow-trigger.memori-icon-button.memori-button:hover:not(
389
+ :disabled,
390
+ .memori-button--disabled
391
+ )
392
+ svg {
393
+ color: var(--memori-primary);
394
+ }
395
+
396
+ /* Dark: keep white at rest, but still use primary on hover for icon tools */
397
+ .memori-widget[data-theme='dark']
398
+ .memori-header
399
+ .memori-icon-button.memori-button:hover:not(
400
+ :disabled,
401
+ .memori-button--disabled,
402
+ .memori-icon-button--recording,
403
+ .memori-dropdown--action-button--logout
404
+ ),
405
+ [data-theme='dark']
406
+ .memori-widget
407
+ .memori-header
408
+ .memori-icon-button.memori-button:hover:not(
409
+ :disabled,
410
+ .memori-button--disabled,
411
+ .memori-icon-button--recording,
412
+ .memori-dropdown--action-button--logout
413
+ ),
414
+ .memori-widget[data-theme='dark']
415
+ .memori-fullpage-header-row
416
+ .memori-icon-button.memori-button:hover:not(
417
+ :disabled,
418
+ .memori-button--disabled,
419
+ .memori-icon-button--recording
420
+ ),
421
+ [data-theme='dark']
422
+ .memori-widget
423
+ .memori-fullpage-header-row
424
+ .memori-icon-button.memori-button:hover:not(
425
+ :disabled,
426
+ .memori-button--disabled,
427
+ .memori-icon-button--recording
428
+ ),
429
+ .memori-widget[data-theme='dark']
430
+ .memori-chat-layout--overflow-trigger.memori-icon-button.memori-button:hover:not(
431
+ :disabled,
432
+ .memori-button--disabled
433
+ ),
434
+ [data-theme='dark']
435
+ .memori-widget
436
+ .memori-chat-layout--overflow-trigger.memori-icon-button.memori-button:hover:not(
437
+ :disabled,
438
+ .memori-button--disabled
439
+ ) {
440
+ color: var(--memori-primary);
441
+ }
442
+
443
+ .memori-widget[data-theme='dark']
444
+ .memori-header
445
+ .memori-icon-button.memori-button:hover:not(
446
+ :disabled,
447
+ .memori-button--disabled,
448
+ .memori-icon-button--recording,
449
+ .memori-dropdown--action-button--logout
450
+ )
451
+ svg,
452
+ [data-theme='dark']
453
+ .memori-widget
454
+ .memori-header
455
+ .memori-icon-button.memori-button:hover:not(
456
+ :disabled,
457
+ .memori-button--disabled,
458
+ .memori-icon-button--recording,
459
+ .memori-dropdown--action-button--logout
460
+ )
461
+ svg,
462
+ .memori-widget[data-theme='dark']
463
+ .memori-fullpage-header-row
464
+ .memori-icon-button.memori-button:hover:not(
465
+ :disabled,
466
+ .memori-button--disabled,
467
+ .memori-icon-button--recording
468
+ )
469
+ svg,
470
+ [data-theme='dark']
471
+ .memori-widget
472
+ .memori-fullpage-header-row
473
+ .memori-icon-button.memori-button:hover:not(
474
+ :disabled,
475
+ .memori-button--disabled,
476
+ .memori-icon-button--recording
477
+ )
478
+ svg,
479
+ .memori-widget[data-theme='dark']
480
+ .memori-chat-layout--overflow-trigger.memori-icon-button.memori-button:hover:not(
481
+ :disabled,
482
+ .memori-button--disabled
483
+ )
484
+ svg,
485
+ [data-theme='dark']
486
+ .memori-widget
487
+ .memori-chat-layout--overflow-trigger.memori-icon-button.memori-button:hover:not(
488
+ :disabled,
489
+ .memori-button--disabled
490
+ )
491
+ svg {
492
+ color: var(--memori-primary);
309
493
  }
310
494
 
311
495
  .memori-dropdown--avatar-input {
@@ -576,19 +760,9 @@
576
760
  gap: 0.5rem;
577
761
  }
578
762
 
579
- .memori-header--auth-icon-button {
580
- width: 38px;
581
- min-width: 38px;
582
- height: 38px;
583
- min-height: 38px;
584
- padding: 8px;
585
- border: 1px solid color-mix(in srgb, var(--memori-text-color, #111827) 16%, transparent);
586
- background: transparent;
587
- }
588
-
589
763
  .memori-header--auth-icon-button:has(.memori-header--action-label) {
590
764
  width: auto;
591
- min-width: 38px;
765
+ min-width: var(--memori-icon-button-size, 36px);
592
766
  gap: 0.35rem;
593
767
  padding-inline: 10px;
594
768
  }
@@ -600,10 +774,6 @@
600
774
  white-space: nowrap;
601
775
  }
602
776
 
603
- .memori-header--auth-icon-button:hover {
604
- background: color-mix(in srgb, var(--memori-text-color, #111827) 8%, transparent);
605
- }
606
-
607
777
  .memori-dropdown--auth-menu {
608
778
  min-width: 320px;
609
779
  padding: 0.45rem;
@@ -44,6 +44,7 @@ import memoriApiClient from '@memori.ai/memori-api-client';
44
44
  import { Props as WidgetProps } from '../MemoriWidget/MemoriWidget';
45
45
  import { BADGE_EMOJI } from '../../helpers/llmUsage';
46
46
  import ChatConsumptionDropdown from './ChatConsumptionDropdown';
47
+ import IconButton from '../IconButton/IconButton';
47
48
  import { imgMimeTypes } from '../../helpers/utils';
48
49
  import { getResourceUrl } from '../../helpers/media';
49
50
 
@@ -58,6 +59,8 @@ export interface Props {
58
59
  setVenue: (venue?: Venue) => void;
59
60
  positionPopoverOpen: boolean;
60
61
  setPositionPopoverOpen: (open: boolean) => void;
62
+ /** Start geolocation automatically when the position popover opens (StartPanel CTA). */
63
+ autoStartPositionGeolocation?: boolean;
61
64
  setShowSettingsDrawer: (show: boolean) => void;
62
65
  setShowChatHistoryDrawer: (show: boolean) => void;
63
66
  setShowKnownFactsDrawer: (show: boolean) => void;
@@ -98,6 +101,7 @@ const Header: React.FC<Props> = ({
98
101
  setVenue,
99
102
  positionPopoverOpen,
100
103
  setPositionPopoverOpen,
104
+ autoStartPositionGeolocation = false,
101
105
  setShowSettingsDrawer,
102
106
  setShowChatHistoryDrawer,
103
107
  setShowKnownFactsDrawer,
@@ -419,7 +423,7 @@ const Header: React.FC<Props> = ({
419
423
  const fullscreenLabel = fullScreen
420
424
  ? t('fullscreenExit') || 'Exit fullscreen'
421
425
  : t('fullscreenEnter') || 'Full screen';
422
- const isAuthenticated = !!loginToken && !!user;
426
+ const isAuthenticated = !!loginToken && !!user?.userID;
423
427
  const isConversationStarted = Boolean(sessionID && hasUserActivatedSpeak);
424
428
 
425
429
  const brandTitle = memori?.name?.trim() || '';
@@ -479,7 +483,7 @@ const Header: React.FC<Props> = ({
479
483
  placement="bottom"
480
484
  >
481
485
  <span style={{ display: 'inline-flex' }}>
482
- <Button
486
+ <IconButton
483
487
  variant={buttonVariant}
484
488
  className="memori-header--chat-history-button"
485
489
  disabled={!loginToken}
@@ -487,15 +491,19 @@ const Header: React.FC<Props> = ({
487
491
  icon={<MessageCircle />}
488
492
  onClick={() => setShowChatHistoryDrawer(true)}
489
493
  >
490
- {chatHistoryButtonLabel}
491
- </Button>
494
+ {chatHistoryButtonLabel ? (
495
+ <span className="memori-header--action-label">
496
+ {chatHistoryButtonLabel}
497
+ </span>
498
+ ) : null}
499
+ </IconButton>
492
500
  </span>
493
501
  </Tooltip>
494
502
  );
495
503
 
496
504
  const loginNode = showLogin && (
497
505
  <>
498
- {loginToken && user ? (
506
+ {loginToken && user?.userID ? (
499
507
  <Popover
500
508
  className="memori-header--dropdown"
501
509
  open={userPopoverOpen}
@@ -519,13 +527,11 @@ const Header: React.FC<Props> = ({
519
527
  render: (props: React.ComponentProps<typeof Button>) => (
520
528
  <Tooltip title={t('login.user') || 'User'} placement="bottom">
521
529
  <span style={{ display: 'inline-flex' }}>
522
- <Button
530
+ <IconButton
523
531
  {...props}
532
+ active={userPopoverOpen}
524
533
  variant={buttonVariant}
525
- className={cx(
526
- 'memori-dropdown--user-trigger-button',
527
- userPopoverOpen && 'memori-button--active'
528
- )}
534
+ className="memori-dropdown--user-trigger-button"
529
535
  aria-label={t('login.user') || 'User'}
530
536
  icon={<UserIcon />}
531
537
  />
@@ -615,15 +621,17 @@ const Header: React.FC<Props> = ({
615
621
  </div>
616
622
  </div>
617
623
  <div className="memori-dropdown--separator" />
618
- <Button
624
+ <IconButton
619
625
  type="button"
620
626
  variant={buttonVariant}
621
627
  onClick={onLogout}
622
628
  className="memori-dropdown--action-button memori-dropdown--action-button--logout"
623
629
  icon={<LogOut size={18} strokeWidth={2} aria-hidden />}
624
630
  >
625
- {t('login.logout') || 'Logout'}
626
- </Button>
631
+ <span className="memori-header--action-label">
632
+ {t('login.logout') || 'Logout'}
633
+ </span>
634
+ </IconButton>
627
635
  </div>
628
636
  }
629
637
  >
@@ -661,6 +669,7 @@ const Header: React.FC<Props> = ({
661
669
  venue={position}
662
670
  setVenue={setVenue}
663
671
  open={positionPopoverOpen}
672
+ autoStartGeolocation={autoStartPositionGeolocation}
664
673
  onOpenChange={open => {
665
674
  setPositionPopoverOpen(open);
666
675
  if (open) {
@@ -683,7 +692,7 @@ const Header: React.FC<Props> = ({
683
692
  {showReload && (
684
693
  <Tooltip title={t('reload') || 'Reload'} placement="bottom">
685
694
  <span style={{ display: 'inline-flex' }}>
686
- <Button
695
+ <IconButton
687
696
  variant={buttonVariant}
688
697
  aria-label={t('reload') || 'Reload'}
689
698
  icon={<RefreshCw />}
@@ -697,7 +706,7 @@ const Header: React.FC<Props> = ({
697
706
  {showClear && (
698
707
  <Tooltip title={t('clearHistory') || 'Clear chat'} placement="bottom">
699
708
  <span style={{ display: 'inline-flex' }}>
700
- <Button
709
+ <IconButton
701
710
  variant={buttonVariant}
702
711
  aria-label={t('clearHistory') || 'Clear chat'}
703
712
  icon={<Trash2 />}
@@ -728,7 +737,7 @@ const Header: React.FC<Props> = ({
728
737
  {showFullscreen && fullScreenAvailable && (
729
738
  <Tooltip title={fullscreenLabel} placement="bottom">
730
739
  <span style={{ display: 'inline-flex' }}>
731
- <Button
740
+ <IconButton
732
741
  variant={buttonVariant}
733
742
  title={fullscreenLabel}
734
743
  aria-label={fullscreenLabel}
@@ -807,7 +816,7 @@ const Header: React.FC<Props> = ({
807
816
  placement="bottom"
808
817
  >
809
818
  <span style={{ display: 'inline-flex' }}>
810
- <Button
819
+ <IconButton
811
820
  variant={buttonVariant}
812
821
  icon={<Brain />}
813
822
  aria-label={t('knownFacts.title') || 'Known facts'}
@@ -822,7 +831,7 @@ const Header: React.FC<Props> = ({
822
831
  placement="bottom"
823
832
  >
824
833
  <span style={{ display: 'inline-flex' }}>
825
- <Button
834
+ <IconButton
826
835
  variant={buttonVariant}
827
836
  icon={<Users />}
828
837
  disabled={!hasUserActivatedSpeak || !sessionID}
@@ -837,9 +846,9 @@ const Header: React.FC<Props> = ({
837
846
  {enableAudio && (
838
847
  <Tooltip title={soundLabel} placement="bottom">
839
848
  <span style={{ display: 'inline-flex' }}>
840
- <Button
849
+ <IconButton
841
850
  variant={buttonVariant}
842
- icon={speakerMuted ? <VolumeX /> : <Volume2 />}
851
+ icon={speakerMuted ? <VolumeX size={20} strokeWidth={2.35} aria-hidden /> : <Volume2 size={20} strokeWidth={2} aria-hidden />}
843
852
  title={soundLabel}
844
853
  aria-label={soundLabel}
845
854
  onClick={() => setSpeakerMuted(!speakerMuted)}
@@ -856,7 +865,7 @@ const Header: React.FC<Props> = ({
856
865
  {showSettings && hasSettingsContent(layout, additionalSettings) && (
857
866
  <Tooltip title={t('widget.settings') || 'Settings'} placement="bottom">
858
867
  <span style={{ display: 'inline-flex' }}>
859
- <Button
868
+ <IconButton
860
869
  variant={buttonVariant}
861
870
  icon={<Settings />}
862
871
  aria-label={t('widget.settings') || 'Settings'}
@@ -915,13 +924,11 @@ const Header: React.FC<Props> = ({
915
924
  render: (props: React.ComponentProps<typeof Button>) => (
916
925
  <Tooltip title="Info sessione" placement="bottom">
917
926
  <span style={{ display: 'inline-flex' }}>
918
- <Button
927
+ <IconButton
919
928
  {...props}
929
+ active={infoPopoverOpen}
920
930
  variant={buttonVariant}
921
- className={cx(
922
- 'memori-header--auth-icon-button',
923
- infoPopoverOpen && 'memori-button--active'
924
- )}
931
+ className="memori-header--auth-icon-button"
925
932
  aria-label="Info sessione"
926
933
  icon={<MoreVertical />}
927
934
  />
@@ -1017,7 +1024,7 @@ const Header: React.FC<Props> = ({
1017
1024
  {showFullscreen && fullScreenAvailable && (
1018
1025
  <Tooltip title={fullscreenLabel} placement="bottom">
1019
1026
  <span style={{ display: 'inline-flex' }}>
1020
- <Button
1027
+ <IconButton
1021
1028
  variant={buttonVariant}
1022
1029
  className="memori-header--auth-icon-button"
1023
1030
  title={fullscreenLabel}
@@ -1085,12 +1092,12 @@ const Header: React.FC<Props> = ({
1085
1092
  {enableAudio && (
1086
1093
  <Tooltip title={soundLabel} placement="bottom">
1087
1094
  <span style={{ display: 'inline-flex' }}>
1088
- <Button
1095
+ <IconButton
1089
1096
  variant={buttonVariant}
1090
1097
  className="memori-header--auth-icon-button"
1091
1098
  title={soundLabel}
1092
1099
  aria-label={soundLabel}
1093
- icon={speakerMuted ? <VolumeX /> : <Volume2 />}
1100
+ icon={speakerMuted ? <VolumeX size={20} strokeWidth={2.35} aria-hidden /> : <Volume2 size={20} strokeWidth={2} aria-hidden />}
1094
1101
  onClick={() => setSpeakerMuted(!speakerMuted)}
1095
1102
  />
1096
1103
  </span>
@@ -1103,6 +1110,7 @@ const Header: React.FC<Props> = ({
1103
1110
  venue={position}
1104
1111
  setVenue={setVenue}
1105
1112
  open={positionPopoverOpen}
1113
+ autoStartGeolocation={autoStartPositionGeolocation}
1106
1114
  onOpenChange={open => {
1107
1115
  setPositionPopoverOpen(open);
1108
1116
  if (open) {
@@ -1190,10 +1198,10 @@ const Header: React.FC<Props> = ({
1190
1198
  {enableAudio && (
1191
1199
  <Tooltip title={soundLabel} placement="left">
1192
1200
  <span style={{ display: 'inline-flex' }}>
1193
- <Button
1201
+ <IconButton
1194
1202
  variant={buttonVariant}
1195
1203
  className="memori-totem-rail--button"
1196
- icon={speakerMuted ? <VolumeX /> : <Volume2 />}
1204
+ icon={speakerMuted ? <VolumeX size={20} strokeWidth={2.35} aria-hidden /> : <Volume2 size={20} strokeWidth={2} aria-hidden />}
1197
1205
  title={soundLabel}
1198
1206
  aria-label={soundLabel}
1199
1207
  aria-pressed={speakerMuted}
@@ -1205,7 +1213,7 @@ const Header: React.FC<Props> = ({
1205
1213
  {showFullscreen && fullScreenAvailable && (
1206
1214
  <Tooltip title={fullscreenLabel} placement="left">
1207
1215
  <span style={{ display: 'inline-flex' }}>
1208
- <Button
1216
+ <IconButton
1209
1217
  variant={buttonVariant}
1210
1218
  className="memori-totem-rail--button"
1211
1219
  icon={fullScreen ? <Minimize /> : <Maximize />}
@@ -1255,13 +1263,13 @@ const Header: React.FC<Props> = ({
1255
1263
  render: (props: React.ComponentProps<typeof Button>) => (
1256
1264
  <Tooltip title={totemAccountLabel} placement="left">
1257
1265
  <span style={{ display: 'inline-flex' }}>
1258
- <Button
1266
+ <IconButton
1259
1267
  {...props}
1268
+ active={userPopoverOpen}
1260
1269
  variant={buttonVariant}
1261
1270
  className={cx(
1262
1271
  'memori-totem-rail--button',
1263
- 'memori-totem-rail--account-trigger',
1264
- userPopoverOpen && 'memori-button--active'
1272
+ 'memori-totem-rail--account-trigger'
1265
1273
  )}
1266
1274
  title={totemAccountLabel}
1267
1275
  aria-label={totemAccountLabel}
@@ -1274,7 +1282,7 @@ const Header: React.FC<Props> = ({
1274
1282
  }}
1275
1283
  content={
1276
1284
  <div className="memori-totem-rail--menu-content">
1277
- {isAuthenticated && (
1285
+ {showLogin && isAuthenticated && (
1278
1286
  <div className="memori-totem-rail--menu-identity">
1279
1287
  <span className="memori-totem-rail--menu-identity-name">
1280
1288
  {user?.userName || t('login.welcomeUser')}
@@ -1334,23 +1342,23 @@ const Header: React.FC<Props> = ({
1334
1342
  {totemKnownFactsLabel}
1335
1343
  </Button>
1336
1344
  )}
1337
- {isAuthenticated ? (
1338
- <Button
1339
- type="button"
1340
- variant="ghost"
1341
- className="memori-totem-rail--menu-item memori-totem-rail--menu-item--logout"
1342
- icon={<LogOut size={18} aria-hidden />}
1343
- title={t('login.logout') || 'Logout'}
1344
- aria-label={t('login.logout') || 'Logout'}
1345
- onClick={() => {
1346
- setUserPopoverOpen(false);
1347
- onLogout?.();
1348
- }}
1349
- >
1350
- {t('login.logout') || 'Logout'}
1351
- </Button>
1352
- ) : (
1353
- showLogin && (
1345
+ {showLogin &&
1346
+ (isAuthenticated ? (
1347
+ <Button
1348
+ type="button"
1349
+ variant="ghost"
1350
+ className="memori-totem-rail--menu-item memori-totem-rail--menu-item--logout"
1351
+ icon={<LogOut size={18} aria-hidden />}
1352
+ title={t('login.logout') || 'Logout'}
1353
+ aria-label={t('login.logout') || 'Logout'}
1354
+ onClick={() => {
1355
+ setUserPopoverOpen(false);
1356
+ onLogout?.();
1357
+ }}
1358
+ >
1359
+ {t('login.logout') || 'Logout'}
1360
+ </Button>
1361
+ ) : (
1354
1362
  <Button
1355
1363
  type="button"
1356
1364
  variant="ghost"
@@ -1365,8 +1373,7 @@ const Header: React.FC<Props> = ({
1365
1373
  >
1366
1374
  {t('login.login') || 'Login'}
1367
1375
  </Button>
1368
- )
1369
- )}
1376
+ ))}
1370
1377
  </div>
1371
1378
  }
1372
1379
  >