@ermis-network/ermis-chat-react 1.0.8 → 2.0.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 (99) hide show
  1. package/dist/index.cjs +15295 -4209
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.css +701 -195
  4. package/dist/index.css.map +1 -1
  5. package/dist/index.d.mts +862 -94
  6. package/dist/index.d.ts +862 -94
  7. package/dist/index.mjs +15246 -4186
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +9 -4
  10. package/src/channelTypeUtils.ts +1 -1
  11. package/src/components/Avatar.tsx +2 -1
  12. package/src/components/Channel.tsx +6 -2
  13. package/src/components/ChannelActions.tsx +61 -2
  14. package/src/components/ChannelHeader.tsx +19 -5
  15. package/src/components/ChannelInfo/AddMemberModal.tsx +5 -1
  16. package/src/components/ChannelInfo/ChannelInfo.tsx +330 -187
  17. package/src/components/ChannelInfo/ChannelInfoTabs.tsx +59 -297
  18. package/src/components/ChannelInfo/ChannelSettingsPanel.tsx +30 -174
  19. package/src/components/ChannelInfo/EditChannelModal.tsx +4 -1
  20. package/src/components/ChannelInfo/MediaGridItem.tsx +12 -2
  21. package/src/components/ChannelInfo/MemberListItem.tsx +2 -3
  22. package/src/components/ChannelInfo/MessageSearchPanel.tsx +27 -126
  23. package/src/components/ChannelInfo/States.tsx +1 -1
  24. package/src/components/ChannelInfo/index.ts +3 -0
  25. package/src/components/ChannelInfo/useChannelInfoTabs.tsx +386 -0
  26. package/src/components/ChannelInfo/useChannelSettings.ts +212 -0
  27. package/src/components/ChannelInfo/useMessageSearch.tsx +141 -0
  28. package/src/components/ChannelList.tsx +177 -290
  29. package/src/components/CreateChannelModal.tsx +166 -88
  30. package/src/components/Dropdown.tsx +1 -16
  31. package/src/components/EditPreview.tsx +1 -0
  32. package/src/components/ErmisCallProvider.tsx +72 -17
  33. package/src/components/ErmisCallUI.tsx +43 -20
  34. package/src/components/FlatTopicGroupItem.tsx +232 -0
  35. package/src/components/ForwardMessageModal.tsx +31 -77
  36. package/src/components/MediaLightbox.tsx +62 -40
  37. package/src/components/MentionSuggestions.tsx +47 -35
  38. package/src/components/MessageActionsBox.tsx +4 -1
  39. package/src/components/MessageInput.tsx +137 -16
  40. package/src/components/MessageInputDefaults.tsx +127 -1
  41. package/src/components/MessageItem.tsx +93 -26
  42. package/src/components/MessageQuickReactions.tsx +153 -26
  43. package/src/components/MessageReactions.tsx +2 -1
  44. package/src/components/MessageRenderers.tsx +111 -39
  45. package/src/components/Panel.tsx +1 -14
  46. package/src/components/PinnedMessages.tsx +17 -5
  47. package/src/components/PreviewOverlay.tsx +24 -0
  48. package/src/components/ReadReceipts.tsx +2 -1
  49. package/src/components/TopicList.tsx +221 -0
  50. package/src/components/TopicModal.tsx +4 -1
  51. package/src/components/TypingIndicator.tsx +14 -5
  52. package/src/components/UserPicker.tsx +87 -10
  53. package/src/components/VirtualMessageList.tsx +106 -20
  54. package/src/context/ChatComponentsContext.tsx +14 -0
  55. package/src/context/ChatProvider.tsx +18 -14
  56. package/src/context/ErmisCallContext.tsx +4 -0
  57. package/src/hooks/useChannelCapabilities.ts +7 -4
  58. package/src/hooks/useChannelData.ts +10 -3
  59. package/src/hooks/useChannelListUpdates.ts +72 -20
  60. package/src/hooks/useChannelMessages.ts +72 -10
  61. package/src/hooks/useChannelRowUpdates.ts +24 -5
  62. package/src/hooks/useChatUser.ts +31 -0
  63. package/src/hooks/useContactChannels.ts +45 -0
  64. package/src/hooks/useContactCount.ts +50 -0
  65. package/src/hooks/useDownloadHandler.ts +36 -0
  66. package/src/hooks/useDragAndDrop.ts +79 -0
  67. package/src/hooks/useForwardMessage.ts +112 -0
  68. package/src/hooks/useInviteChannels.ts +88 -0
  69. package/src/hooks/useInviteCount.ts +104 -0
  70. package/src/hooks/useMentions.ts +0 -1
  71. package/src/hooks/useMessageActions.ts +13 -10
  72. package/src/hooks/usePendingState.ts +21 -4
  73. package/src/hooks/usePreviewState.ts +69 -0
  74. package/src/hooks/useStickerPicker.ts +62 -0
  75. package/src/hooks/useTopicGroupUpdates.ts +197 -0
  76. package/src/index.ts +56 -6
  77. package/src/messageTypeUtils.ts +13 -1
  78. package/src/styles/_base.css +0 -1
  79. package/src/styles/_call-ui.css +59 -2
  80. package/src/styles/_channel-info.css +41 -4
  81. package/src/styles/_channel-list.css +97 -57
  82. package/src/styles/_create-channel-modal.css +10 -0
  83. package/src/styles/_forward-modal.css +16 -1
  84. package/src/styles/_media-lightbox.css +32 -0
  85. package/src/styles/_mentions.css +1 -1
  86. package/src/styles/_message-actions.css +3 -4
  87. package/src/styles/_message-bubble.css +286 -107
  88. package/src/styles/_message-input.css +131 -0
  89. package/src/styles/_message-list.css +33 -17
  90. package/src/styles/_message-quick-reactions.css +40 -9
  91. package/src/styles/_message-reactions.css +4 -0
  92. package/src/styles/_modal.css +2 -1
  93. package/src/styles/_preview-overlay.css +38 -0
  94. package/src/styles/_tokens.css +17 -15
  95. package/src/styles/_typing-indicator.css +7 -1
  96. package/src/styles/index.css +1 -0
  97. package/src/types.ts +362 -14
  98. package/src/utils/avatarColors.ts +48 -0
  99. package/src/utils.ts +193 -10
@@ -10,6 +10,7 @@
10
10
  background-color: var(--ermis-bg-secondary);
11
11
  font-family: var(--ermis-font-family);
12
12
  position: relative;
13
+ overflow: hidden;
13
14
  }
14
15
 
15
16
  .ermis-message-input__row {
@@ -117,6 +118,56 @@
117
118
  color: var(--ermis-accent);
118
119
  }
119
120
 
121
+ /* --- Voice record button --- */
122
+ .ermis-message-input__voice-btn {
123
+ display: inline-flex;
124
+ align-items: center;
125
+ justify-content: center;
126
+ padding: 4px;
127
+ border: none;
128
+ background: none;
129
+ font-size: 1.25rem;
130
+ cursor: pointer;
131
+ color: var(--ermis-text-secondary);
132
+ transition: color var(--ermis-transition);
133
+ flex-shrink: 0;
134
+ }
135
+
136
+ .ermis-message-input__voice-btn:hover {
137
+ color: var(--ermis-accent);
138
+ }
139
+
140
+ .ermis-message-input__voice-btn--recording {
141
+ color: var(--ermis-color-danger);
142
+ }
143
+
144
+ .ermis-message-input__voice-btn:disabled {
145
+ opacity: 0.4;
146
+ cursor: not-allowed;
147
+ }
148
+
149
+ .ermis-message-input__voice-recording-indicator {
150
+ display: flex;
151
+ align-items: center;
152
+ gap: 6px;
153
+ font-size: var(--ermis-font-size-sm);
154
+ font-weight: 500;
155
+ color: var(--ermis-color-danger);
156
+ }
157
+
158
+ .ermis-message-input__voice-dot {
159
+ width: 8px;
160
+ height: 8px;
161
+ background-color: var(--ermis-color-danger);
162
+ border-radius: 50%;
163
+ animation: ermis-blink 1.5s ease-in-out infinite;
164
+ }
165
+
166
+ @keyframes ermis-blink {
167
+ 0%, 100% { opacity: 1; }
168
+ 50% { opacity: 0.4; }
169
+ }
170
+
120
171
  /* --- Emoji picker container --- */
121
172
  .ermis-message-input__emoji-picker {
122
173
  position: absolute;
@@ -129,6 +180,51 @@
129
180
  overflow: hidden;
130
181
  }
131
182
 
183
+ /* --- Sticker button --- */
184
+ .ermis-message-input__sticker-btn {
185
+ display: inline-flex;
186
+ align-items: center;
187
+ justify-content: center;
188
+ padding: 4px;
189
+ border: none;
190
+ background: none;
191
+ font-size: 1.25rem;
192
+ cursor: pointer;
193
+ color: var(--ermis-text-secondary);
194
+ transition: color var(--ermis-transition);
195
+ flex-shrink: 0;
196
+ }
197
+
198
+ .ermis-message-input__sticker-btn:hover,
199
+ .ermis-message-input__sticker-btn--active {
200
+ color: var(--ermis-accent);
201
+ }
202
+
203
+ .ermis-message-input__sticker-btn:disabled {
204
+ opacity: 0.4;
205
+ cursor: not-allowed;
206
+ }
207
+
208
+ /* --- Sticker picker container --- */
209
+ .ermis-message-input__sticker-picker-container {
210
+ position: absolute;
211
+ bottom: 100%;
212
+ right: 0;
213
+ margin-bottom: var(--ermis-spacing-xs);
214
+ z-index: 100;
215
+ border-radius: var(--ermis-radius-lg);
216
+ box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.15);
217
+ overflow: hidden;
218
+ }
219
+
220
+ .ermis-message-input__sticker-iframe {
221
+ border: none;
222
+ width: 320px;
223
+ height: 400px;
224
+ background: var(--ermis-bg-primary);
225
+ display: block;
226
+ }
227
+
132
228
  /* --- Files preview --- */
133
229
  .ermis-files-preview {
134
230
  display: flex;
@@ -411,3 +507,38 @@
411
507
  border-top-left-radius: 0;
412
508
  border-top-right-radius: 0;
413
509
  }
510
+
511
+ /* ----------------------------------------------------------
512
+ Drag & Drop Overlay (Global over channel)
513
+ ---------------------------------------------------------- */
514
+ .ermis-channel__drop-overlay {
515
+ position: fixed;
516
+ inset: 0;
517
+ z-index: 9999;
518
+ background-color: var(--ermis-bg-overlay);
519
+ backdrop-filter: blur(4px);
520
+ display: flex;
521
+ align-items: center;
522
+ justify-content: center;
523
+ pointer-events: none; /* Let the window drag events pass through */
524
+ }
525
+
526
+ .ermis-channel__drop-overlay-content {
527
+ border: 2px dashed var(--ermis-accent);
528
+ border-radius: var(--ermis-radius-lg);
529
+ padding: var(--ermis-spacing-xl) var(--ermis-spacing-xxl);
530
+ display: flex;
531
+ flex-direction: column;
532
+ align-items: center;
533
+ gap: var(--ermis-spacing-md);
534
+ color: var(--ermis-accent);
535
+ background-color: var(--ermis-bg-primary);
536
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
537
+ pointer-events: none;
538
+ }
539
+
540
+ .ermis-channel__drop-overlay-content span {
541
+ font-size: var(--ermis-font-size-lg);
542
+ font-weight: 600;
543
+ font-family: var(--ermis-font-family);
544
+ }
@@ -34,14 +34,14 @@
34
34
  .ermis-message-list__vlist {
35
35
  display: flex !important;
36
36
  flex-direction: column !important;
37
- padding-left: 3rem;
38
- padding-right: 3rem;
37
+ padding-left: 1rem;
38
+ padding-right: 1rem;
39
39
  padding-top: var(--ermis-spacing-lg);
40
40
  padding-bottom: var(--ermis-spacing-lg);
41
41
  }
42
42
 
43
43
  /* Push content to bottom when few messages, margin collapses when content overflows */
44
- .ermis-message-list__vlist > div {
44
+ .ermis-message-list__vlist>div {
45
45
  margin-top: auto;
46
46
  }
47
47
 
@@ -93,21 +93,22 @@
93
93
  .ermis-message-list__date-separator {
94
94
  display: flex;
95
95
  align-items: center;
96
- gap: var(--ermis-spacing-md);
96
+ justify-content: center;
97
97
  padding: var(--ermis-spacing-md) 0;
98
98
  margin: var(--ermis-spacing-xs) 0;
99
99
  align-self: stretch;
100
100
  }
101
101
 
102
102
  .ermis-message-list__date-separator-line {
103
- flex: 1;
104
- height: 1px;
105
- background-color: var(--ermis-border);
103
+ display: none;
106
104
  }
107
105
 
108
106
  .ermis-message-list__date-separator-label {
109
- font-size: var(--ermis-font-size-xs);
110
- color: var(--ermis-text-muted);
107
+ font-size: 11px;
108
+ color: #fff;
109
+ background-color: rgba(0, 0, 0, 0.2);
110
+ padding: 4px 12px;
111
+ border-radius: 12px;
111
112
  white-space: nowrap;
112
113
  font-weight: 500;
113
114
  }
@@ -150,13 +151,15 @@
150
151
  width: 100%;
151
152
  }
152
153
 
153
- /* First message in a group: normal top margin */
154
- .ermis-message-list__item--group-start {
155
- padding-top: var(--ermis-spacing-md);
154
+ /* First message in a group (or standalone): normal top margin */
155
+ .ermis-message-list__item--group-single,
156
+ .ermis-message-list__item--group-top {
157
+ padding-top: var(--ermis-spacing-sm);
156
158
  }
157
159
 
158
- /* Continuation messages in a group: tight spacing */
159
- .ermis-message-list__item--group-cont {
160
+ /* Continuation messages in a group: tight spacing (increased slightly per request) */
161
+ .ermis-message-list__item--group-middle,
162
+ .ermis-message-list__item--group-bottom {
160
163
  padding-top: 2px;
161
164
  }
162
165
 
@@ -174,6 +177,7 @@
174
177
  0% {
175
178
  background-color: rgba(99, 102, 241, 0.15);
176
179
  }
180
+
177
181
  100% {
178
182
  background-color: transparent;
179
183
  }
@@ -186,6 +190,7 @@
186
190
  0% {
187
191
  opacity: 0;
188
192
  }
193
+
189
194
  100% {
190
195
  opacity: 1;
191
196
  }
@@ -221,6 +226,18 @@
221
226
  border: 1px solid #e74c3c;
222
227
  }
223
228
 
229
+ /* --- Deleted Display Message --- */
230
+
231
+ .ermis-message-list__deleted-text {
232
+ display: inline-flex;
233
+ align-items: center;
234
+ gap: 6px;
235
+ font-style: italic;
236
+ font-size: var(--ermis-font-size-sm);
237
+ user-select: none;
238
+ opacity: 0.5;
239
+ }
240
+
224
241
  /* --- Pinned Message Indicator --- */
225
242
  .ermis-message-list__pinned-indicator {
226
243
  position: absolute;
@@ -329,8 +346,6 @@
329
346
  transform: translateY(0);
330
347
  }
331
348
 
332
-
333
-
334
349
  /* Unblock button inside blocked overlay */
335
350
  .ermis-message-list__unblock-btn {
336
351
  margin-top: var(--ermis-spacing-md);
@@ -456,6 +471,7 @@
456
471
  transform: translateY(-2px);
457
472
  box-shadow: 0 6px 14px rgba(239, 68, 68, 0.3);
458
473
  }
474
+
459
475
  .ermis-message-list__reject-btn:active {
460
476
  transform: translateY(0);
461
477
  }
@@ -483,4 +499,4 @@
483
499
 
484
500
  .ermis-message-list__pending-invitee-content svg {
485
501
  color: var(--ermis-accent);
486
- }
502
+ }
@@ -4,23 +4,38 @@
4
4
 
5
5
  .ermis-message-quick-reactions {
6
6
  position: absolute;
7
- bottom: calc(100% - 10px); /* hover right above the bubble */
7
+ bottom: 100%; /* Sits exactly on top of bubble-wrapper, no gap */
8
8
  display: flex;
9
9
  align-items: center;
10
10
  gap: 2px;
11
- background-color: var(--ermis-bg-primary);
12
- border: 1px solid var(--ermis-border);
13
11
  padding: 4px;
12
+ padding-bottom: 8px; /* 4px normal padding + 4px transparent gap */
14
13
  border-radius: 20px;
15
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
16
14
  opacity: 0;
17
15
  visibility: hidden;
18
- pointer-events: none;
19
- transform: translateY(8px);
20
- transition: opacity 0.2s ease, transform 0.2s ease;
16
+ transform: translateY(4px);
17
+ /* Fast, snappy transition with NO delay to prevent stuttering */
18
+ transition: opacity 0.1s ease, transform 0.1s ease, visibility 0.1s ease;
21
19
  z-index: 20;
22
20
  }
23
21
 
22
+ /* Visual background pushed up by the padding gap */
23
+ .ermis-message-quick-reactions::before {
24
+ content: '';
25
+ position: absolute;
26
+ top: 0;
27
+ left: 0;
28
+ right: 0;
29
+ bottom: 4px; /* Leave 4px transparent at the bottom */
30
+ background-color: var(--ermis-bg-primary);
31
+ border: 1px solid var(--ermis-border);
32
+ border-radius: 20px;
33
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
34
+ z-index: -1;
35
+ }
36
+
37
+
38
+
24
39
  /* Align based on ownership */
25
40
  .ermis-message-quick-reactions {
26
41
  left: 0;
@@ -30,11 +45,27 @@
30
45
  right: 0;
31
46
  }
32
47
 
33
- .ermis-message-list__bubble-wrapper:hover .ermis-message-quick-reactions {
48
+ .ermis-message-list__bubble-wrapper:hover {
49
+ z-index: 100; /* Ensure the hovered wrapper is above adjacent messages */
50
+ }
51
+
52
+ .ermis-message-list__bubble-wrapper:hover .ermis-message-quick-reactions,
53
+ .ermis-message-quick-reactions:hover {
54
+ opacity: 1;
55
+ visibility: visible;
56
+ transform: translateY(0);
57
+ }
58
+
59
+ .ermis-message-quick-reactions--expanded {
34
60
  opacity: 1;
35
61
  visibility: visible;
36
- pointer-events: auto;
37
62
  transform: translateY(0);
63
+ transition: none !important; /* Let framer-motion handle transitions */
64
+ will-change: width, height, transform;
65
+ }
66
+
67
+ .ermis-message-quick-reactions--expanded::before {
68
+ display: none; /* Hide custom background when expanded, framer-motion takes over */
38
69
  }
39
70
 
40
71
  .ermis-message-list__bubble-wrapper:hover .ermis-message-quick-reactions--disabled {
@@ -15,6 +15,10 @@
15
15
  pointer-events: none;
16
16
  }
17
17
 
18
+ .ermis-message-reactions--own {
19
+ justify-content: flex-end;
20
+ }
21
+
18
22
  .ermis-message-reactions__item {
19
23
  position: relative; /* For tooltip */
20
24
  display: inline-flex;
@@ -85,8 +85,9 @@
85
85
  padding: 20px;
86
86
  display: flex;
87
87
  flex-direction: column;
88
- overflow: hidden;
88
+ overflow-y: auto;
89
89
  flex: 1;
90
+ min-height: 0;
90
91
  }
91
92
 
92
93
  .ermis-modal-footer {
@@ -0,0 +1,38 @@
1
+ /* ----------------------------------------------------------
2
+ PreviewOverlay
3
+ ---------------------------------------------------------- */
4
+ .ermis-preview-overlay {
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: space-between;
8
+ padding: var(--ermis-spacing-md);
9
+ background-color: var(--ermis-bg-secondary);
10
+ border-top: 1px solid var(--ermis-border);
11
+ font-family: var(--ermis-font-family);
12
+ }
13
+
14
+ .ermis-preview-overlay__text {
15
+ font-size: var(--ermis-font-size-sm);
16
+ color: var(--ermis-text-secondary);
17
+ font-weight: 500;
18
+ }
19
+
20
+ .ermis-preview-overlay__button {
21
+ background-color: var(--ermis-accent);
22
+ color: #ffffff;
23
+ border: none;
24
+ border-radius: var(--ermis-radius-md);
25
+ padding: var(--ermis-spacing-sm) var(--ermis-spacing-md);
26
+ font-size: var(--ermis-font-size-sm);
27
+ font-weight: 600;
28
+ cursor: pointer;
29
+ transition: opacity 0.2s ease, transform 0.1s ease;
30
+ }
31
+
32
+ .ermis-preview-overlay__button:hover {
33
+ opacity: 0.9;
34
+ }
35
+
36
+ .ermis-preview-overlay__button:active {
37
+ transform: scale(0.98);
38
+ }
@@ -12,6 +12,7 @@
12
12
  --ermis-bg-secondary: #111118;
13
13
  --ermis-bg-hover: rgba(255, 255, 255, 0.04);
14
14
  --ermis-bg-active: rgba(99, 102, 241, 0.12);
15
+ --ermis-bg-overlay: rgba(0, 0, 0, 0.4);
15
16
  --ermis-border: rgba(255, 255, 255, 0.08);
16
17
  --ermis-accent: #6366f1;
17
18
  --ermis-accent-hover: #818cf8;
@@ -34,11 +35,11 @@
34
35
  /* Quote message */
35
36
  --ermis-quote-other-bg: rgba(99, 102, 241, 0.1);
36
37
  --ermis-quote-other-bg-hover: rgba(99, 102, 241, 0.18);
37
- --ermis-quote-own-bg: rgba(99, 102, 241, 0.2);
38
- --ermis-quote-own-bg-hover: rgba(99, 102, 241, 0.3);
39
- --ermis-quote-own-border: rgba(255, 255, 255, 0.4);
40
- --ermis-quote-own-author: rgba(255, 255, 255, 0.9);
41
- --ermis-quote-own-text: rgba(255, 255, 255, 0.65);
38
+ --ermis-quote-own-bg: rgba(255, 255, 255, 0.2);
39
+ --ermis-quote-own-bg-hover: rgba(255, 255, 255, 0.3);
40
+ --ermis-quote-own-border: rgba(255, 255, 255, 0.5);
41
+ --ermis-quote-own-author: #ffffff;
42
+ --ermis-quote-own-text: rgba(255, 255, 255, 0.75);
42
43
 
43
44
  /* Typography */
44
45
  --ermis-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,
@@ -89,9 +90,10 @@
89
90
  --ermis-bg-secondary: #f9fafb;
90
91
  --ermis-bg-hover: rgba(0, 0, 0, 0.04);
91
92
  --ermis-bg-active: rgba(99, 102, 241, 0.08);
93
+ --ermis-bg-overlay: rgba(255, 255, 255, 0.6);
92
94
  --ermis-border: rgba(0, 0, 0, 0.08);
93
- --ermis-accent: #6366f1;
94
- --ermis-accent-hover: #4f46e5;
95
+ --ermis-accent: #3436b6;
96
+ --ermis-accent-hover: #0d00ff;
95
97
  --ermis-text-primary: #111827;
96
98
  --ermis-text-secondary: #6b7280;
97
99
  --ermis-text-muted: #9ca3af;
@@ -109,13 +111,13 @@
109
111
  --ermis-bubble-other-text: var(--ermis-text-primary);
110
112
 
111
113
  /* Quote message */
112
- --ermis-quote-other-bg: rgba(99, 102, 241, 0.08);
113
- --ermis-quote-other-bg-hover: rgba(99, 102, 241, 0.14);
114
- --ermis-quote-own-bg: rgba(0, 0, 0, 0.25);
115
- --ermis-quote-own-bg-hover: rgba(0, 0, 0, 0.4);
116
- --ermis-quote-own-border: rgba(255, 255, 255, 0.6);
117
- --ermis-quote-own-author: rgba(255, 255, 255, 0.95);
118
- --ermis-quote-own-text: rgba(255, 255, 255, 0.8);
114
+ --ermis-quote-other-bg: rgba(99, 102, 241, 0.06);
115
+ --ermis-quote-other-bg-hover: rgba(99, 102, 241, 0.12);
116
+ --ermis-quote-own-bg: rgba(255, 255, 255, 0.3);
117
+ --ermis-quote-own-bg-hover: rgba(255, 255, 255, 0.4);
118
+ --ermis-quote-own-border: rgba(255, 255, 255, 0.7);
119
+ --ermis-quote-own-author: #ffffff;
120
+ --ermis-quote-own-text: rgba(255, 255, 255, 0.85);
119
121
 
120
122
  /* Signal messages (call events) */
121
123
  --ermis-signal-success: #229A16;
@@ -131,4 +133,4 @@
131
133
  --ermis-call-glass: rgba(0, 0, 0, 0.04);
132
134
  --ermis-call-glass-border: rgba(0, 0, 0, 0.08);
133
135
  --ermis-call-pulse: rgba(99, 102, 241, 0.3);
134
- }
136
+ }
@@ -12,6 +12,10 @@
12
12
  font-size: 12px;
13
13
  color: var(--ermis-text-secondary);
14
14
  overflow: hidden;
15
+ position: absolute;
16
+ bottom: 0;
17
+ left: 0;
18
+ right: 0;
15
19
  }
16
20
 
17
21
  .ermis-typing-indicator__dots {
@@ -53,7 +57,9 @@
53
57
  }
54
58
 
55
59
  @keyframes ermis-typing-bounce {
56
- 0%, 80%, 100% {
60
+ 0%,
61
+ 80%,
62
+ 100% {
57
63
  transform: scale(0.6);
58
64
  opacity: 0.4;
59
65
  }
@@ -27,3 +27,4 @@
27
27
  @import './_call-ui.css';
28
28
  @import './_topic-modal.css';
29
29
  @import './_media-lightbox.css';
30
+ @import './_preview-overlay.css';