stream-chat-react 12.10.0 → 12.11.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 (187) hide show
  1. package/dist/components/Attachment/Attachment.js +2 -1
  2. package/dist/components/Attachment/AttachmentContainer.d.ts +1 -1
  3. package/dist/components/Attachment/AttachmentContainer.js +2 -2
  4. package/dist/components/Attachment/Card.js +3 -3
  5. package/dist/components/Attachment/VoiceRecording.d.ts +1 -1
  6. package/dist/components/Attachment/VoiceRecording.js +2 -2
  7. package/dist/components/Attachment/attachment-sizing.js +2 -1
  8. package/dist/components/Attachment/components/FileSizeIndicator.d.ts +1 -1
  9. package/dist/components/Attachment/components/FileSizeIndicator.js +1 -1
  10. package/dist/components/Attachment/hooks/useAudioController.js +3 -1
  11. package/dist/components/Attachment/utils.d.ts +1 -1
  12. package/dist/components/Attachment/utils.js +12 -3
  13. package/dist/components/AutoCompleteTextarea/List.js +3 -2
  14. package/dist/components/AutoCompleteTextarea/Textarea.js +3 -3
  15. package/dist/components/AutoCompleteTextarea/utils.js +2 -2
  16. package/dist/components/Avatar/ChannelAvatar.js +1 -1
  17. package/dist/components/Channel/Channel.d.ts +1 -1
  18. package/dist/components/Channel/Channel.js +27 -12
  19. package/dist/components/Channel/channelState.js +9 -3
  20. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +5 -3
  21. package/dist/components/Channel/hooks/useMentionsHandlers.js +5 -2
  22. package/dist/components/Channel/utils.js +2 -1
  23. package/dist/components/ChannelHeader/ChannelHeader.js +1 -1
  24. package/dist/components/ChannelList/ChannelList.js +13 -8
  25. package/dist/components/ChannelList/hooks/useChannelListShape.d.ts +2 -2
  26. package/dist/components/ChannelList/hooks/useChannelListShape.js +44 -17
  27. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +2 -1
  28. package/dist/components/ChannelList/hooks/useMessageNewListener.js +3 -1
  29. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +4 -2
  30. package/dist/components/ChannelList/hooks/useSelectedChannelState.js +1 -1
  31. package/dist/components/ChannelPreview/ChannelPreview.js +2 -2
  32. package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +1 -1
  33. package/dist/components/ChannelPreview/icons.js +0 -1
  34. package/dist/components/ChannelPreview/utils.js +3 -3
  35. package/dist/components/ChannelSearch/ChannelSearch.js +5 -3
  36. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  37. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +4 -2
  38. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +61 -36
  39. package/dist/components/ChannelSearch/index.d.ts +1 -1
  40. package/dist/components/Chat/hooks/useChat.js +4 -2
  41. package/dist/components/Chat/hooks/useCreateChatClient.js +3 -1
  42. package/dist/components/ChatAutoComplete/ChatAutoComplete.js +1 -1
  43. package/dist/components/ChatView/ChatView.js +0 -1
  44. package/dist/components/Dialog/PromptDialog.d.ts +1 -1
  45. package/dist/components/Dialog/PromptDialog.js +1 -1
  46. package/dist/components/EventComponent/EventComponent.js +1 -1
  47. package/dist/components/Gallery/Image.js +1 -1
  48. package/dist/components/Gallery/ModalGallery.js +1 -2
  49. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +5 -2
  50. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.js +1 -1
  51. package/dist/components/LoadMore/LoadMorePaginator.js +1 -1
  52. package/dist/components/MML/MML.js +1 -0
  53. package/dist/components/MediaRecorder/transcode/wav.js +6 -3
  54. package/dist/components/Message/FixedHeightMessage.js +6 -8
  55. package/dist/components/Message/Message.js +2 -1
  56. package/dist/components/Message/MessageEditedTimestamp.js +1 -1
  57. package/dist/components/Message/MessageSimple.js +2 -5
  58. package/dist/components/Message/MessageStatus.js +1 -1
  59. package/dist/components/Message/MessageText.js +7 -7
  60. package/dist/components/Message/QuotedMessage.js +2 -2
  61. package/dist/components/Message/Timestamp.js +9 -1
  62. package/dist/components/Message/hooks/useActionHandler.js +1 -1
  63. package/dist/components/Message/hooks/useFlagHandler.js +2 -1
  64. package/dist/components/Message/hooks/useMarkUnreadHandler.js +2 -1
  65. package/dist/components/Message/hooks/useMessageTextStreaming.d.ts +1 -1
  66. package/dist/components/Message/hooks/useMessageTextStreaming.js +1 -1
  67. package/dist/components/Message/hooks/useMuteHandler.js +7 -4
  68. package/dist/components/Message/hooks/usePinHandler.js +1 -1
  69. package/dist/components/Message/hooks/useReactionHandler.js +10 -5
  70. package/dist/components/Message/hooks/useRetryHandler.js +1 -1
  71. package/dist/components/Message/hooks/useUserRole.js +1 -1
  72. package/dist/components/Message/renderText/renderText.js +2 -2
  73. package/dist/components/Message/utils.js +3 -3
  74. package/dist/components/MessageActions/MessageActionsBox.js +7 -3
  75. package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.js +1 -1
  76. package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.js +4 -2
  77. package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.js +4 -2
  78. package/dist/components/MessageInput/AttachmentSelector.js +1 -1
  79. package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -1
  80. package/dist/components/MessageInput/DropzoneProvider.js +1 -1
  81. package/dist/components/MessageInput/MessageInput.js +1 -1
  82. package/dist/components/MessageInput/MessageInputFlat.js +4 -3
  83. package/dist/components/MessageInput/QuotedMessagePreview.js +1 -1
  84. package/dist/components/MessageInput/hooks/useAttachments.js +12 -4
  85. package/dist/components/MessageInput/hooks/useLinkPreviews.js +3 -1
  86. package/dist/components/MessageInput/hooks/useMessageInputState.js +4 -3
  87. package/dist/components/MessageInput/hooks/useMessageInputText.js +3 -1
  88. package/dist/components/MessageInput/hooks/useSubmitHandler.js +5 -3
  89. package/dist/components/MessageInput/hooks/useUserTrigger.js +2 -2
  90. package/dist/components/MessageInput/hooks/utils.js +6 -2
  91. package/dist/components/MessageList/ConnectionStatus.js +1 -1
  92. package/dist/components/MessageList/MessageList.js +5 -5
  93. package/dist/components/MessageList/MessageListNotifications.js +3 -1
  94. package/dist/components/MessageList/VirtualizedMessageList.js +17 -10
  95. package/dist/components/MessageList/VirtualizedMessageListComponents.js +2 -2
  96. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +1 -3
  97. package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.js +2 -1
  98. package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.js +3 -2
  99. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +6 -2
  100. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +2 -1
  101. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +7 -3
  102. package/dist/components/MessageList/utils.js +28 -11
  103. package/dist/components/Modal/Modal.d.ts +1 -1
  104. package/dist/components/Modal/Modal.js +1 -1
  105. package/dist/components/Modal/ModalHeader.js +1 -1
  106. package/dist/components/Poll/Poll.js +1 -1
  107. package/dist/components/Poll/PollActions/PollActions.js +6 -4
  108. package/dist/components/Poll/PollActions/PollAnswerList.js +1 -1
  109. package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.js +1 -1
  110. package/dist/components/Poll/PollActions/PollResults/PollOptionWithLatestVotes.js +4 -2
  111. package/dist/components/Poll/PollActions/PollResults/PollResults.js +2 -1
  112. package/dist/components/Poll/PollContent.js +1 -1
  113. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.d.ts +1 -1
  114. package/dist/components/Poll/PollCreationDialog/OptionFieldSet.js +11 -4
  115. package/dist/components/Poll/PollCreationDialog/PollCreationDialog.js +13 -4
  116. package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.js +6 -3
  117. package/dist/components/Poll/PollOptionList.js +1 -1
  118. package/dist/components/Poll/PollOptionSelector.js +12 -5
  119. package/dist/components/Poll/hooks/useManagePollVotesRealtime.js +9 -4
  120. package/dist/components/Poll/hooks/usePollAnswerPagination.js +8 -2
  121. package/dist/components/Poll/hooks/usePollOptionVotesPagination.js +8 -2
  122. package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.d.ts +1 -1
  123. package/dist/components/ReactFileUtilities/ImageDropzone.js +3 -1
  124. package/dist/components/ReactFileUtilities/UploadButton.js +1 -1
  125. package/dist/components/ReactFileUtilities/utils.js +3 -1
  126. package/dist/components/Reactions/ReactionSelector.js +3 -1
  127. package/dist/components/Reactions/ReactionSelectorWithButton.js +1 -1
  128. package/dist/components/Reactions/ReactionsList.d.ts +2 -2
  129. package/dist/components/Reactions/ReactionsList.js +7 -4
  130. package/dist/components/Reactions/ReactionsListModal.d.ts +1 -2
  131. package/dist/components/Reactions/ReactionsListModal.js +1 -1
  132. package/dist/components/Reactions/SpriteImage.js +6 -2
  133. package/dist/components/Reactions/hooks/useFetchReactions.js +1 -1
  134. package/dist/components/Reactions/hooks/useProcessReactions.js +1 -1
  135. package/dist/components/Reactions/index.d.ts +1 -0
  136. package/dist/components/Reactions/index.js +1 -0
  137. package/dist/components/Reactions/reactionOptions.js +20 -5
  138. package/dist/components/Thread/Thread.js +4 -3
  139. package/dist/components/Threads/ThreadContext.d.ts +1 -1
  140. package/dist/components/Threads/ThreadContext.js +1 -1
  141. package/dist/components/Threads/ThreadList/ThreadList.js +1 -1
  142. package/dist/components/Threads/ThreadList/ThreadListItem.d.ts +1 -1
  143. package/dist/components/Threads/ThreadList/ThreadListItem.js +1 -1
  144. package/dist/components/Threads/ThreadList/ThreadListItemUI.js +5 -3
  145. package/dist/components/Threads/icons.js +0 -1
  146. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  147. package/dist/components/Tooltip/Tooltip.js +1 -1
  148. package/dist/context/ComponentContext.d.ts +3 -1
  149. package/dist/context/ComponentContext.js +1 -1
  150. package/dist/context/DialogManagerContext.d.ts +1 -1
  151. package/dist/context/DialogManagerContext.js +1 -1
  152. package/dist/context/MessageBounceContext.js +2 -2
  153. package/dist/context/MessageContext.js +1 -1
  154. package/dist/context/WithComponents.js +1 -1
  155. package/dist/css/v2/index.css +2 -2
  156. package/dist/css/v2/index.layout.css +2 -2
  157. package/dist/experimental/MessageActions/MessageActions.js +0 -1
  158. package/dist/experimental/MessageActions/defaults.js +31 -7
  159. package/dist/experimental/index.browser.cjs +103 -37
  160. package/dist/experimental/index.browser.cjs.map +2 -2
  161. package/dist/experimental/index.node.cjs +103 -37
  162. package/dist/experimental/index.node.cjs.map +2 -2
  163. package/dist/i18n/Streami18n.js +11 -2
  164. package/dist/i18n/utils.js +14 -1
  165. package/dist/index.browser.cjs +1771 -981
  166. package/dist/index.browser.cjs.map +4 -4
  167. package/dist/index.node.cjs +1772 -981
  168. package/dist/index.node.cjs.map +4 -4
  169. package/dist/plugins/Emojis/EmojiPicker.js +0 -1
  170. package/dist/plugins/Emojis/index.browser.cjs +3 -1
  171. package/dist/plugins/Emojis/index.browser.cjs.map +2 -2
  172. package/dist/plugins/Emojis/index.node.cjs +3 -1
  173. package/dist/plugins/Emojis/index.node.cjs.map +2 -2
  174. package/dist/plugins/encoders/mp3.browser.cjs +7 -4
  175. package/dist/plugins/encoders/mp3.browser.cjs.map +2 -2
  176. package/dist/plugins/encoders/mp3.node.cjs +7 -4
  177. package/dist/plugins/encoders/mp3.node.cjs.map +2 -2
  178. package/dist/scss/v2/ChannelSearch/ChannelSearch-layout.scss +1 -0
  179. package/dist/scss/v2/Message/Message-layout.scss +12 -5
  180. package/dist/scss/v2/Poll/Poll-layout.scss +1 -1
  181. package/dist/scss/v2/Search/Search-layout.scss +148 -0
  182. package/dist/scss/v2/Search/Search-theme.scss +222 -0
  183. package/dist/scss/v2/_icons.scss +2 -0
  184. package/dist/scss/v2/index.layout.scss +1 -0
  185. package/dist/scss/v2/index.scss +1 -0
  186. package/dist/store/hooks/useStateStore.js +35 -11
  187. package/package.json +21 -33
@@ -0,0 +1,222 @@
1
+ @use '../utils';
2
+
3
+ /* Only available in React SDK. */
4
+ .str-chat {
5
+ /* The text/icon color of the component */
6
+ --str-chat__search-input-color: var(--str-chat__text-color);
7
+
8
+ /* The text/icon color of the component */
9
+ --str-chat__search-input-placeholder-color: var(--str-chat__text-low-emphasis-color);
10
+
11
+ /* The text/icon color of the component */
12
+ --str-chat__search-input-icon-color: var(--str-chat__text-low-emphasis-color);
13
+
14
+ /* Top border of the component */
15
+ --str-chat__search-input-border-block-start: none;
16
+
17
+ /* Bottom border of the component */
18
+ --str-chat__search-input-border-block-end: none;
19
+
20
+ /* Left (right in RTL layout) borhe component */
21
+ --str-chat__search-input-border-inline-start: none;
22
+
23
+ /* Right (left in RTL layout) borhe component */
24
+ --str-chat__search-input-border-inline-end: none;
25
+
26
+ /* The border radius used for the borders of the component */
27
+ --str-chat__search-input-wrapper-border-radius: var(--str-chat__border-radius-circle);
28
+
29
+ /* The background color of the component */
30
+ --str-chat__search-input-wrapper-background-color: transparent;
31
+
32
+ /* Top border of the component */
33
+ --str-chat__search-input-wrapper-border-block-start: var(--str-chat__surface-color) 1px
34
+ solid;
35
+
36
+ /* Bottom border of the component */
37
+ --str-chat__search-input-wrapper-border-block-end: var(--str-chat__surface-color) 1px
38
+ solid;
39
+
40
+ /* Left (right in RTL layout) border of the component */
41
+ --str-chat__search-input-wrapper-border-inline-start: var(--str-chat__surface-color) 1px
42
+ solid;
43
+
44
+ /* Right (left in RTL layout) border of the component */
45
+ --str-chat__search-input-wrapper-border-inline-end: var(--str-chat__surface-color) 1px
46
+ solid;
47
+
48
+ /* The border radius used for the borders of the component */
49
+ --str-chat__search-input-wrapper-active-border-radius: var(--str-chat__border-radius-circle);
50
+
51
+ /* The background color of the component */
52
+ --str-chat__search-input-wrapper-active-background-color: transparent;
53
+
54
+ /* Top border of the component */
55
+ --str-chat__search-input-wrapper-active-border-block-start: var(--str-chat__primary-color)
56
+ 1px solid;
57
+
58
+ /* Bottom border of the component */
59
+ --str-chat__search-input-wrapper-active-border-block-end: var(--str-chat__primary-color)
60
+ 1px solid;
61
+
62
+ /* Left (right in RTL layout) border of the component */
63
+ --str-chat__search-input-wrapper-active-border-inline-start: var(
64
+ --str-chat__primary-color
65
+ )
66
+ 1px solid;
67
+
68
+ /* Right (left in RTL layout) border of the component */
69
+ --str-chat__search-input-wrapper-active-border-inline-end: var(--str-chat__primary-color)
70
+ 1px solid;
71
+
72
+ /* The background applied to channel search result */
73
+ --str-chat__search-result-background-color: transparent;
74
+
75
+ /* Top border of the component */
76
+ --str-chat__search-result-border-block-start: none;
77
+
78
+ /* Bottom border of the component */
79
+ --str-chat__search-result-border-block-end: none;
80
+
81
+ /* Left (right in RTL layout) border of the component */
82
+ --str-chat__search-result-border-inline-start: none;
83
+
84
+ /* Right (left in RTL layout) border of the component */
85
+ --str-chat__search-result-border-inline-end: none;
86
+
87
+ /* Background color used for the search result hover / focused state */
88
+ --str-chat__search-result-hover-background-color: var(
89
+ --str-chat__secondary-surface-color
90
+ );
91
+
92
+ --str-chat__search-result-list-color: var(--str-chat__text-color);
93
+
94
+ --str-chat__search-result-list-background-color: var(--str-chat__secondary-background-color);
95
+
96
+ /* Top border of the component */
97
+ --str-chat__search-result-list-border-block-start: none;
98
+
99
+ /* Bottom border of the component */
100
+ --str-chat__search-result-list-border-block-end: none;
101
+
102
+ /* Left (right in RTL layout) border of the component */
103
+ --str-chat__search-result-list-border-inline-start: none;
104
+
105
+ /* Right (left in RTL layout) border of the component */
106
+ --str-chat__search-result-list-border-inline-end: none;
107
+
108
+ /* Box shadow applied to the component */
109
+ --str-chat__search-result-list-popup-box-shadow: 0 4px 4px var(--str-chat__box-shadow-color);
110
+
111
+ /* The font color used in the search results header */
112
+ --str-chat__search-results-header-color: var(--str-chat__text-low-emphasis-color);
113
+
114
+ /* The background color used in the search results header */
115
+ --str-chat__search-results-header-background-color: var(--str-chat__background-color);
116
+
117
+ /* Top border of the component */
118
+ --str-chat__search-results-header-border-block-start: none;
119
+
120
+ /* Bottom border of the component */
121
+ --str-chat__search-results-header-border-block-end: var(--str-chat__surface-color) 1px
122
+ solid;
123
+
124
+ /* Left (right in RTL layout) border of the component */
125
+ --str-chat__search-results-header-border-inline-start: none;
126
+
127
+ /* Right (left in RTL layout) border of the component */
128
+ --str-chat__search-results-header-border-inline-end: none;
129
+
130
+ /* The font color used in the empty search results indicator */
131
+ --str-chat__search-results-empty-color: var(--str-chat__text-low-emphasis-color);
132
+
133
+ /* The icon color used in the empty search results indicator */
134
+ --str-chat__search-results-empty-icon-color: var(--str-chat__disabled-color);
135
+
136
+ /* The background color used in the empty search results indicator */
137
+ --str-chat__search-results-empty-background-color: var(--str-chat__background-color);
138
+
139
+ /* Top border of the component */
140
+ --str-chat__search-results-empty-border-block-start: none;
141
+
142
+ /* Bottom border of the component */
143
+ --str-chat__search-results-empty-border-block-end: none;
144
+
145
+ /* Left (right in RTL layout) border of the component */
146
+ --str-chat__search-results-empty-border-inline-start: none;
147
+
148
+ /* Right (left in RTL layout) border of the component */
149
+ --str-chat__search-results-empty-border-inline-end: none;
150
+ }
151
+
152
+ .str-chat__search-input--wrapper {
153
+ @include utils.component-layer-overrides('search-input-wrapper');
154
+
155
+ .str-chat__search-input--icon {
156
+ background-image: var(--str-chat__magnifier-glass-icon);
157
+ background-repeat: no-repeat;
158
+ }
159
+
160
+ input {
161
+ @include utils.component-layer-overrides('search-input');
162
+ outline: none;
163
+ font: var(--str-chat__subtitle-text);
164
+ }
165
+
166
+ .str-chat__search-input--clear-button-icon {
167
+ background-color: transparent;
168
+ -webkit-mask: var(--str-chat__clear-icon) no-repeat center / contain;
169
+ mask: var(--str-chat__clear-icon) no-repeat center / contain;
170
+ }
171
+ }
172
+
173
+ .str-chat__search-input--wrapper-active {
174
+ @include utils.component-layer-overrides('search-input-wrapper-active');
175
+
176
+ .str-chat__search-input--clear-button-icon {
177
+ background-color: var(--str-chat__text-low-emphasis-color);
178
+ }
179
+ }
180
+
181
+ .str-chat__search-bar-button--exit-search {
182
+ @include utils.button-reset();
183
+ color: var(--str-chat__primary-color);
184
+ font: var(--str-chat__subtitle-text);
185
+ }
186
+
187
+ .str-chat__search-results-header {
188
+ @include utils.component-layer-overrides('search-results-header');
189
+ font: var(--str-chat__subtitle-text);
190
+ }
191
+
192
+ .str-chat__search-source-result-list {
193
+ @include utils.component-layer-overrides('search-result-list');
194
+
195
+ .str-chat__search-container-empty {
196
+ @include utils.component-layer-overrides('search-results-empty');
197
+ font: var(--str-chat__subtitle2-medium-text);
198
+
199
+ svg path {
200
+ fill: var(--str-chat__search-results-empty-icon-color);
201
+ }
202
+ }
203
+
204
+ .str-chat__search-result {
205
+ @include utils.component-layer-overrides('search-result');
206
+
207
+ &.str-chat__channel-preview-messenger--active {
208
+ background-color: var(--str-chat__channel-preview-active-background-color);
209
+ }
210
+
211
+ .str-chat__search-result--display-name {
212
+ @include utils.channel-preview-display-name-theme;
213
+ }
214
+ }
215
+
216
+
217
+
218
+ .str-chat__search-result:hover,
219
+ .str-chat__search-result--focused {
220
+ background-color: var(--str-chat__search-result-hover-background-color);
221
+ }
222
+ }
@@ -10,6 +10,8 @@
10
10
  --str-chat__poll-icon: url('data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIGZpbGw9ImN1cnJlbnRDb2xvciIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik0xNiAwSDJDMC45IDAgMCAwLjkgMCAyVjE2QzAgMTcuMSAwLjkgMTggMiAxOEgxNkMxNy4xIDE4IDE4IDE3LjEgMTggMTZWMkMxOCAwLjkgMTcuMSAwIDE2IDBaTTE2IDE2SDJWMkgxNlYxNlpNNCA3SDZWMTRINFY3Wk04IDRIMTBWMTRIOFY0Wk0xMiAxMEgxNFYxNEgxMlYxMFoiLz4KPC9zdmc+');
11
11
  --str-chat__handle-icon: url('data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTYgNiIgZmlsbD0iY3VycmVuQ29sb3IiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJNMTYgMEgwVjJIMTZWMFpNMCA2SDE2VjRIMFY2WiIvPgo8L3N2Zz4K');
12
12
  --str-chat__circle-stop-icon: url('data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSI0IDQgMjggMjgiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE2LjQ1NTEgMjcuMjQ0MUMyMi42MzA5IDI3LjI0NDEgMjcuNzQ0MSAyMi4xMTk4IDI3Ljc0NDEgMTUuOTU1MUMyNy43NDQxIDkuNzc5MyAyMi42MTk4IDQuNjY2MDIgMTYuNDQ0IDQuNjY2MDJDMTAuMjc5MyA0LjY2NjAyIDUuMTY2MDIgOS43NzkzIDUuMTY2MDIgMTUuOTU1MUM1LjE2NjAyIDIyLjExOTggMTAuMjkwNCAyNy4yNDQxIDE2LjQ1NTEgMjcuMjQ0MVpNMTYuNDU1MSAyNS4zNjI2QzExLjIzMTEgMjUuMzYyNiA3LjA1ODU5IDIxLjE3OSA3LjA1ODU5IDE1Ljk1NTFDNy4wNTg1OSAxMC43MzExIDExLjIyMDEgNi41NDc1MyAxNi40NDQgNi41NDc1M0MyMS42NjggNi41NDc1MyAyNS44NTE2IDEwLjczMTEgMjUuODYyNiAxNS45NTUxQzI1Ljg3MzcgMjEuMTc5IDIxLjY3OSAyNS4zNjI2IDE2LjQ1NTEgMjUuMzYyNlpNMTMuNTIyMSAxOS45ODM3SDE5LjM2NTlDMjAuMDYzMiAxOS45ODM3IDIwLjQ3MjcgMTkuNTc0MiAyMC40NzI3IDE4Ljg5OTFWMTMuMDExMUMyMC40NzI3IDEyLjMyNDkgMjAuMDYzMiAxMS45MjY0IDE5LjM2NTkgMTEuOTI2NEgxMy41MjIxQzEyLjgzNTkgMTEuOTI2NCAxMi40MTU0IDEyLjMyNDkgMTIuNDE1NCAxMy4wMTExVjE4Ljg5OTFDMTIuNDE1NCAxOS41NzQyIDEyLjgzNTkgMTkuOTgzNyAxMy41MjIxIDE5Ljk4MzdaIiBmaWxsPSIjMDA1ZmZmIi8+Cjwvc3ZnPg==');
13
+ --str-chat__magnifier-glass-icon: url('data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjEgMjEiIGZpbGw9ImN1cnJlbnRDb2xvciIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOSAwQzEzLjk2OCAwIDE4IDQuMDMyIDE4IDlDMTggMTMuOTY4IDEzLjk2OCAxOCA5IDE4QzQuMDMyIDE4IDAgMTMuOTY4IDAgOUMwIDQuMDMyIDQuMDMyIDAgOSAwWk05IDE2QzEyLjg2NyAxNiAxNiAxMi44NjcgMTYgOUMxNiA1LjEzMiAxMi44NjcgMiA5IDJDNS4xMzIgMiAyIDUuMTMyIDIgOUMyIDEyLjg2NyA1LjEzMiAxNiA5IDE2Wk0yMC4zMTQgMTguODk5TDE3LjQ4NSAxNi4wNzFMMTYuMDcxIDE3LjQ4NUwxOC44OTkgMjAuMzE0TDIwLjMxNCAxOC44OTlaIi8+Cjwvc3ZnPgo=');
14
+ --str-chat__clear-icon: url('data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDEwQzAgNC40NzcxNSA0LjQ3NzE1IDAgMTAgMEMxNS41MjI4IDAgMjAgNC40NzcxNSAyMCAxMEMyMCAxNS41MjI4IDE1LjUyMjggMjAgMTAgMjBDNC40NzcxNSAyMCAwIDE1LjUyMjggMCAxMFpNMTAgMkM1LjU4MTcyIDIgMiA1LjU4MTcyIDIgMTBDMiAxNC40MTgzIDUuNTgxNzIgMTggMTAgMThDMTQuNDE4MyAxOCAxOCAxNC40MTgzIDE4IDEwQzE4IDUuNTgxNzIgMTQuNDE4MyAyIDEwIDJaTTEzLjUzNTggNi40NjQ0NkMxMy4xNDUzIDYuMDczOTQgMTIuNTEyMSA2LjA3Mzk0IDEyLjEyMTYgNi40NjQ0NkwxMC4wMDAzIDguNTg1NzhMNy44Nzg5OCA2LjQ2NDQ2QzcuNDg4NDYgNi4wNzM5NCA2Ljg1NTI5IDYuMDczOTQgNi40NjQ3NyA2LjQ2NDQ2QzYuMDc0MjQgNi44NTQ5OSA2LjA3NDI0IDcuNDg4MTUgNi40NjQ3NyA3Ljg3ODY4TDguNTg2MDkgMTBMNi40NjQ3NyAxMi4xMjEzQzYuMDc0MjQgMTIuNTExOCA2LjA3NDI0IDEzLjE0NSA2LjQ2NDc3IDEzLjUzNTVDNi44NTUyOSAxMy45MjYxIDcuNDg4NDYgMTMuOTI2MSA3Ljg3ODk4IDEzLjUzNTVMMTAuMDAwMyAxMS40MTQyTDEyLjEyMTYgMTMuNTM1NUMxMi41MTIxIDEzLjkyNjEgMTMuMTQ1MyAxMy45MjYxIDEzLjUzNTggMTMuNTM1NUMxMy45MjY0IDEzLjE0NSAxMy45MjY0IDEyLjUxMTggMTMuNTM1OCAxMi4xMjEzTDExLjQxNDUgMTBMMTMuNTM1OCA3Ljg3ODY4QzEzLjkyNjQgNy40ODgxNSAxMy45MjY0IDYuODU0OTkgMTMuNTM1OCA2LjQ2NDQ2WiIvPgo8L3N2Zz4K');
13
15
  }
14
16
 
15
17
  @font-face {
@@ -37,6 +37,7 @@
37
37
  @use 'Notification/NotificationList-layout';
38
38
  @use 'Notification/Notification-layout';
39
39
  @use 'Poll/Poll-layout';
40
+ @use 'Search/Search-layout';
40
41
  @use 'Thread/Thread-layout';
41
42
  @use 'Tooltip/Tooltip-layout';
42
43
  @use 'TypingIndicator/TypingIndicator-layout';
@@ -38,6 +38,7 @@
38
38
  @use 'Notification/NotificationList-theme';
39
39
  @use 'Notification/Notification-theme';
40
40
  @use 'Poll/Poll-theme';
41
+ @use 'Search/Search-theme';
41
42
  @use 'Thread/Thread-theme';
42
43
  @use 'Tooltip/Tooltip-theme';
43
44
  @use 'TypingIndicator/TypingIndicator-theme';
@@ -1,15 +1,39 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useCallback, useMemo } from 'react';
2
+ import { useSyncExternalStore } from 'use-sync-external-store/shim';
3
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
4
+ const noop = () => { };
2
5
  export function useStateStore(store, selector) {
3
- const [state, setState] = useState(() => {
4
- if (!store)
5
- return undefined;
6
- return selector(store.getLatestValue());
7
- });
8
- useEffect(() => {
9
- if (!store)
10
- return;
11
- const unsubscribe = store.subscribeWithSelector(selector, setState);
12
- return unsubscribe;
6
+ const wrappedSubscription = useCallback((onStoreChange) => {
7
+ const unsubscribe = store?.subscribeWithSelector(selector, onStoreChange);
8
+ return unsubscribe ?? noop;
13
9
  }, [store, selector]);
10
+ const wrappedSnapshot = useMemo(() => {
11
+ let cachedTuple;
12
+ return () => {
13
+ const currentValue = store?.getLatestValue();
14
+ if (!currentValue)
15
+ return undefined;
16
+ // store value hasn't changed, no need to compare individual values
17
+ if (cachedTuple && cachedTuple[0] === currentValue) {
18
+ return cachedTuple[1];
19
+ }
20
+ const newlySelected = selector(currentValue);
21
+ // store value changed but selected values wouldn't have to, double-check selected
22
+ if (cachedTuple) {
23
+ let selectededAreEqualToCached = true;
24
+ for (const key in cachedTuple[1]) {
25
+ if (cachedTuple[1][key] === newlySelected[key])
26
+ continue;
27
+ selectededAreEqualToCached = false;
28
+ break;
29
+ }
30
+ if (selectededAreEqualToCached)
31
+ return cachedTuple[1];
32
+ }
33
+ cachedTuple = [currentValue, newlySelected];
34
+ return cachedTuple[1];
35
+ };
36
+ }, [store, selector]);
37
+ const state = useSyncExternalStore(wrappedSubscription, wrappedSnapshot);
14
38
  return state;
15
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stream-chat-react",
3
- "version": "12.10.0",
3
+ "version": "12.11.0",
4
4
  "description": "React components to create chat conversations or livestream style chat",
5
5
  "author": "GetStream",
6
6
  "homepage": "https://getstream.io/chat/",
@@ -181,13 +181,15 @@
181
181
  "@commitlint/config-conventional": "^18.4.3",
182
182
  "@emoji-mart/data": "^1.1.2",
183
183
  "@emoji-mart/react": "^1.1.1",
184
+ "@eslint/js": "^9.16.0",
184
185
  "@ladle/react": "^0.16.0",
185
186
  "@playwright/test": "^1.42.1",
186
187
  "@semantic-release/changelog": "^6.0.2",
187
188
  "@semantic-release/exec": "^6.0.3",
188
189
  "@semantic-release/git": "^10.0.1",
189
190
  "@stream-io/rollup-plugin-node-builtins": "^2.1.5",
190
- "@stream-io/stream-chat-css": "^5.6.0",
191
+ "@stream-io/stream-chat-css": "^5.7.0",
192
+ "@testing-library/dom": "^10.4.0",
191
193
  "@testing-library/jest-dom": "^6.6.3",
192
194
  "@testing-library/react": "^16.2.0",
193
195
  "@types/deep-equal": "^1.0.1",
@@ -208,10 +210,7 @@
208
210
  "@types/textarea-caret": "3.0.0",
209
211
  "@types/use-sync-external-store": "^0.0.6",
210
212
  "@types/uuid": "^8.3.0",
211
- "@typescript-eslint/eslint-plugin": "5.62.0",
212
- "@typescript-eslint/parser": "5.62.0",
213
213
  "autoprefixer": "^10.0.3",
214
- "babel-eslint": "^10.1.0",
215
214
  "babel-jest": "^28.1.3",
216
215
  "babel-plugin-module-resolver": "^4.1.0",
217
216
  "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
@@ -223,27 +222,14 @@
223
222
  "emoji-mart": "^5.5.2",
224
223
  "esbuild": "^0.23.1",
225
224
  "esbuild-plugin-replace": "^1.4.0",
226
- "eslint": "7.14.0",
227
- "eslint-config-airbnb": "^18.2.1",
228
- "eslint-config-prettier": "^6.15.0",
229
- "eslint-config-react-app": "^6.0.0",
230
- "eslint-import-resolver-alias": "^1.1.2",
231
- "eslint-import-resolver-babel-module": "^5.2.0",
232
- "eslint-plugin-babel": "^5.3.1",
233
- "eslint-plugin-flowtype": "^5.2.0",
234
- "eslint-plugin-import": "^2.22.1",
235
- "eslint-plugin-jest": "^24.1.3",
236
- "eslint-plugin-jest-dom": "^3.3.0",
237
- "eslint-plugin-jsx-a11y": "^6.4.1",
238
- "eslint-plugin-node": "^11.1.0",
239
- "eslint-plugin-prettier": "^3.1.4",
240
- "eslint-plugin-promise": "^4.2.1",
241
- "eslint-plugin-react": "^7.21.5",
242
- "eslint-plugin-react-hooks": "^4.2.0",
243
- "eslint-plugin-sort-destructure-keys": "1.3.5",
244
- "eslint-plugin-sort-keys-fix": "^1.1.2",
245
- "eslint-plugin-testing-library": "^6.2.0",
246
- "eslint-plugin-typescript-sort-keys": "^2.1.0",
225
+ "eslint": "^9.16.0",
226
+ "eslint-plugin-import": "^2.31.0",
227
+ "eslint-plugin-jest": "^28.11.0",
228
+ "eslint-plugin-jest-dom": "^5.5.0",
229
+ "eslint-plugin-react": "^7.37.2",
230
+ "eslint-plugin-react-hooks": "^5.1.0",
231
+ "eslint-plugin-sort-destructure-keys": "^2.0.0",
232
+ "globals": "^15.13.0",
247
233
  "husky": "^8.0.3",
248
234
  "i18next-parser": "^6.0.0",
249
235
  "jest": "^29.7.0",
@@ -252,24 +238,26 @@
252
238
  "jsdom": "^24.1.1",
253
239
  "lint-staged": "^15.2.1",
254
240
  "moment-timezone": "^0.5.43",
255
- "prettier": "^2.2.0",
241
+ "prettier": "^3.4.2",
256
242
  "react": "^19.0.0",
257
243
  "react-dom": "^19.0.0",
258
244
  "semantic-release": "^19.0.5",
259
245
  "stream-chat": "^8.50.0",
260
246
  "ts-jest": "^29.2.5",
261
- "typescript": "^5.4.5"
247
+ "typescript": "^5.4.5",
248
+ "typescript-eslint": "^8.17.0"
262
249
  },
263
250
  "scripts": {
264
251
  "build": "rm -rf dist && yarn build-translations && yarn bundle",
265
252
  "bundle": "concurrently ./scripts/bundle-esm.mjs ./scripts/copy-css.sh scripts/bundle-cjs.mjs",
266
253
  "build-translations": "i18next",
267
254
  "coverage": "jest --collectCoverage && codecov",
268
- "eslint": "eslint '**/*.{js,md,ts,jsx,tsx}' --max-warnings 0",
269
- "lint": "prettier --list-different 'src/**/*.{js,ts,tsx,md,json}' .eslintrc.json .prettierrc babel.config.js && eslint 'src/**/*.{js,ts,tsx,md}' --max-warnings 0 && yarn validate-translations",
270
- "lint-fix": "prettier --write 'src/**/*.{js,ts,tsx,md,json}' .eslintrc.json .prettierrc babel.config.js && eslint --fix 'src/**/*.{js,ts,tsx,md}' --max-warnings 0",
271
- "prettier": "prettier --list-different '**/*.{js,ts,tsx,md,json}' .eslintrc.json .prettierrc babel.config.js",
272
- "prettier-fix": "prettier --write '**/*.{js,ts,tsx,md,json}' .eslintrc.json .prettierrc babel.config.js",
255
+ "lint": "yarn prettier --list-different && yarn eslint && yarn validate-translations",
256
+ "lint-fix": "yarn prettier-fix && yarn eslint-fix",
257
+ "eslint": "eslint --max-warnings 0",
258
+ "eslint-fix": "eslint --fix",
259
+ "prettier": "prettier 'src/**/*.{js,ts,jsx,tsx,md,json}' .prettierrc babel.config.js eslint.config.mjs",
260
+ "prettier-fix": "yarn prettier --write",
273
261
  "fix-staged": "lint-staged --config .lintstagedrc.fix.json --concurrent 1",
274
262
  "start": "tsc --watch --sourceMap --declarationMap",
275
263
  "prepare": "husky install",