stream-chat-react 10.0.0-theming-v2.3 → 10.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 (57) hide show
  1. package/dist/browser.full-bundle.js +216 -202
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +3 -3
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
  6. package/dist/components/Attachment/AttachmentActions.js +1 -1
  7. package/dist/components/Attachment/AttachmentContainer.js +2 -2
  8. package/dist/components/Channel/Channel.d.ts.map +1 -1
  9. package/dist/components/Channel/Channel.js +6 -1
  10. package/dist/components/ChannelList/ChannelList.d.ts +3 -9
  11. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  12. package/dist/components/ChannelList/ChannelList.js +24 -26
  13. package/dist/components/ChannelSearch/ChannelSearch.d.ts +6 -3
  14. package/dist/components/ChannelSearch/ChannelSearch.d.ts.map +1 -1
  15. package/dist/components/ChannelSearch/ChannelSearch.js +19 -2
  16. package/dist/components/ChannelSearch/SearchBar.js +1 -1
  17. package/dist/components/ChannelSearch/SearchInput.d.ts +3 -1
  18. package/dist/components/ChannelSearch/SearchInput.d.ts.map +1 -1
  19. package/dist/components/ChannelSearch/SearchInput.js +2 -2
  20. package/dist/components/ChannelSearch/SearchResults.js +1 -2
  21. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +9 -7
  22. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
  23. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +23 -29
  24. package/dist/components/MessageActions/MessageActionsBox.js +1 -1
  25. package/dist/components/MessageInput/CooldownTimer.d.ts +7 -0
  26. package/dist/components/MessageInput/CooldownTimer.d.ts.map +1 -0
  27. package/dist/components/MessageInput/CooldownTimer.js +17 -0
  28. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  29. package/dist/components/MessageInput/MessageInputFlat.js +1 -1
  30. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  31. package/dist/components/MessageInput/MessageInputSmall.js +1 -1
  32. package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +0 -5
  33. package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
  34. package/dist/components/MessageInput/hooks/useCooldownTimer.js +1 -17
  35. package/dist/components/MessageInput/index.d.ts +1 -0
  36. package/dist/components/MessageInput/index.d.ts.map +1 -1
  37. package/dist/components/MessageInput/index.js +1 -0
  38. package/dist/context/ChannelStateContext.d.ts +1 -1
  39. package/dist/context/ComponentContext.d.ts +1 -1
  40. package/dist/context/ComponentContext.d.ts.map +1 -1
  41. package/dist/css/index.css +1 -1
  42. package/dist/css/index.css.map +1 -1
  43. package/dist/css/v2/index.css +1 -1
  44. package/dist/css/v2/index.css.map +1 -1
  45. package/dist/css/v2/index.layout.css +1 -1
  46. package/dist/css/v2/index.layout.css.map +1 -1
  47. package/dist/index.cjs.js +214 -200
  48. package/dist/index.cjs.js.map +1 -1
  49. package/dist/scss/Attachment.scss +45 -2
  50. package/dist/scss/Gallery.scss +12 -6
  51. package/dist/scss/Message.scss +2 -1
  52. package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +72 -46
  53. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +2 -0
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.d.ts.map +1 -1
  56. package/dist/version.js +1 -1
  57. package/package.json +4 -4
package/dist/index.cjs.js CHANGED
@@ -247,7 +247,7 @@ var UnMemoizedAttachmentActions = function (props) {
247
247
  var handleActionClick = function (event, name, value) { return actionHandler === null || actionHandler === void 0 ? void 0 : actionHandler(name, value, event); };
248
248
  return (React__default["default"].createElement("div", { className: 'str-chat__message-attachment-actions' },
249
249
  React__default["default"].createElement("div", { className: 'str-chat__message-attachment-actions-form' },
250
- React__default["default"].createElement("span", { key: 0 }, text),
250
+ React__default["default"].createElement("span", null, text),
251
251
  actions.map(function (action) { return (React__default["default"].createElement("button", { className: "str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--".concat(action.style), "data-testid": "".concat(action.name), "data-value": action.value, key: "".concat(id, "-").concat(action.value), onClick: function (event) { return handleActionClick(event, action.name, action.value); } }, action.text)); }))));
252
252
  };
253
253
  /**
@@ -1728,7 +1728,7 @@ var AttachmentActionsContainer = function (_a) {
1728
1728
  var actionHandler = _a.actionHandler, attachment = _a.attachment, _c = _a.AttachmentActions, AttachmentActions$1 = _c === void 0 ? AttachmentActions : _c;
1729
1729
  if (!((_b = attachment.actions) === null || _b === void 0 ? void 0 : _b.length))
1730
1730
  return null;
1731
- return (React__default["default"].createElement(AttachmentActions$1, __assign({}, attachment, { actionHandler: function (event, name, value) { return actionHandler === null || actionHandler === void 0 ? void 0 : actionHandler(event, name, value); }, actions: attachment.actions, id: attachment.id || '', text: attachment.text || '' })));
1731
+ return (React__default["default"].createElement(AttachmentActions$1, __assign({}, attachment, { actionHandler: actionHandler, actions: attachment.actions, id: attachment.id || '', text: attachment.text || '' })));
1732
1732
  };
1733
1733
  var GalleryContainer = function (_a) {
1734
1734
  var attachment = _a.attachment, _b = _a.Gallery, Gallery$1 = _b === void 0 ? Gallery : _b;
@@ -1752,7 +1752,7 @@ var CardContainer = function (props) {
1752
1752
  var componentType = 'card';
1753
1753
  if (attachment.actions && attachment.actions.length) {
1754
1754
  return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
1755
- React__default["default"].createElement("div", { className: 'str-chat__attachment', key: "key-image-".concat(attachment.id) },
1755
+ React__default["default"].createElement("div", { className: 'str-chat__attachment' },
1756
1756
  React__default["default"].createElement(Card$1, __assign({}, attachment)),
1757
1757
  React__default["default"].createElement(AttachmentActionsContainer, __assign({}, props)))));
1758
1758
  }
@@ -4565,7 +4565,7 @@ var CustomMessageActionsList = function (props) {
4565
4565
  var customActionsArray = Object.keys(customMessageActions);
4566
4566
  return (React__default["default"].createElement(React__default["default"].Fragment, null, customActionsArray.map(function (customAction) {
4567
4567
  var customHandler = customMessageActions[customAction];
4568
- return (React__default["default"].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
4568
+ return (React__default["default"].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item str-chat__message-actions-list-item-button', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
4569
4569
  })));
4570
4570
  };
4571
4571
  var UnMemoizedMessageActionsBox = function (props) {
@@ -9072,46 +9072,6 @@ function reducer(state, action) {
9072
9072
 
9073
9073
  function noop() {}
9074
9074
 
9075
- var CooldownTimer = function (_a) {
9076
- var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
9077
- var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
9078
- React.useEffect(function () {
9079
- var countdownInterval = setInterval(function () {
9080
- if (seconds > 0) {
9081
- setSeconds(seconds - 1);
9082
- }
9083
- else {
9084
- setCooldownRemaining(0);
9085
- }
9086
- }, 1000);
9087
- return function () { return clearInterval(countdownInterval); };
9088
- });
9089
- return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
9090
- };
9091
- var useCooldownTimer = function () {
9092
- var latestMessageDatesByChannels = useChatContext('useCooldownTimer').latestMessageDatesByChannels;
9093
- var channel = useChannelStateContext('useCooldownTimer').channel;
9094
- var _a = (channel.data ||
9095
- {}), cooldownInterval = _a.cooldown, own_capabilities = _a.own_capabilities;
9096
- var _b = React.useState(), cooldownRemaining = _b[0], setCooldownRemaining = _b[1];
9097
- var skipCooldown = !(own_capabilities === null || own_capabilities === void 0 ? void 0 : own_capabilities.includes('slow-mode'));
9098
- React.useEffect(function () {
9099
- var latestMessageDate = latestMessageDatesByChannels[channel.cid];
9100
- if (!cooldownInterval || !latestMessageDate) {
9101
- return;
9102
- }
9103
- var remainingCooldown = Math.round(cooldownInterval - (new Date().getTime() - latestMessageDate.getTime()) / 1000);
9104
- if (remainingCooldown > 0 && !skipCooldown) {
9105
- setCooldownRemaining(remainingCooldown);
9106
- }
9107
- }, [channel.id, cooldownInterval, latestMessageDatesByChannels[channel.cid]]);
9108
- return {
9109
- cooldownInterval: cooldownInterval || 0,
9110
- cooldownRemaining: cooldownRemaining,
9111
- setCooldownRemaining: setCooldownRemaining,
9112
- };
9113
- };
9114
-
9115
9075
  var QuotedMessagePreviewHeader = function () {
9116
9076
  var setQuotedMessage = useChannelActionContext('QuotedMessagePreview').setQuotedMessage;
9117
9077
  var t = useTranslationContext('QuotedMessagePreview').t;
@@ -9212,6 +9172,23 @@ var FilePreviewItem = function (_a) {
9212
9172
  state.uploading && React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))));
9213
9173
  };
9214
9174
 
9175
+ var CooldownTimer = function (_a) {
9176
+ var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
9177
+ var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
9178
+ React.useEffect(function () {
9179
+ var countdownInterval = setInterval(function () {
9180
+ if (seconds > 0) {
9181
+ setSeconds(seconds - 1);
9182
+ }
9183
+ else {
9184
+ setCooldownRemaining(0);
9185
+ }
9186
+ }, 1000);
9187
+ return function () { return clearInterval(countdownInterval); };
9188
+ });
9189
+ return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
9190
+ };
9191
+
9215
9192
  var MessageInputFlat = function () {
9216
9193
  var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
9217
9194
  var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
@@ -9364,6 +9341,30 @@ var EditMessageForm = function () {
9364
9341
  React__default["default"].createElement("button", { className: 'str-chat__edit-message-send', type: 'submit' }, t('Send'))))))));
9365
9342
  };
9366
9343
 
9344
+ var useCooldownTimer = function () {
9345
+ var latestMessageDatesByChannels = useChatContext('useCooldownTimer').latestMessageDatesByChannels;
9346
+ var channel = useChannelStateContext('useCooldownTimer').channel;
9347
+ var _a = (channel.data ||
9348
+ {}), cooldownInterval = _a.cooldown, own_capabilities = _a.own_capabilities;
9349
+ var _b = React.useState(), cooldownRemaining = _b[0], setCooldownRemaining = _b[1];
9350
+ var skipCooldown = !(own_capabilities === null || own_capabilities === void 0 ? void 0 : own_capabilities.includes('slow-mode'));
9351
+ React.useEffect(function () {
9352
+ var latestMessageDate = latestMessageDatesByChannels[channel.cid];
9353
+ if (!cooldownInterval || !latestMessageDate) {
9354
+ return;
9355
+ }
9356
+ var remainingCooldown = Math.round(cooldownInterval - (new Date().getTime() - latestMessageDate.getTime()) / 1000);
9357
+ if (remainingCooldown > 0 && !skipCooldown) {
9358
+ setCooldownRemaining(remainingCooldown);
9359
+ }
9360
+ }, [channel.id, cooldownInterval, latestMessageDatesByChannels[channel.cid]]);
9361
+ return {
9362
+ cooldownInterval: cooldownInterval || 0,
9363
+ cooldownRemaining: cooldownRemaining,
9364
+ setCooldownRemaining: setCooldownRemaining,
9365
+ };
9366
+ };
9367
+
9367
9368
  var useEmojiIndex = function () {
9368
9369
  var _a = useEmojiContext('useEmojiIndex'), emojiConfig = _a.emojiConfig, EmojiIndex = _a.EmojiIndex;
9369
9370
  var emojiData = (emojiConfig || {}).emojiData;
@@ -11191,6 +11192,7 @@ var ChannelInner = function (props) {
11191
11192
  });
11192
11193
  });
11193
11194
  };
11195
+ var clearHighlightedMessageTimeoutId = React.useRef(null);
11194
11196
  var jumpToMessage = function (messageId, messageLimit) {
11195
11197
  if (messageLimit === void 0) { messageLimit = 100; }
11196
11198
  return __awaiter$1(void 0, void 0, void 0, function () {
@@ -11210,7 +11212,11 @@ var ChannelInner = function (props) {
11210
11212
  highlightedMessageId: messageId,
11211
11213
  type: 'jumpToMessageFinished',
11212
11214
  });
11213
- setTimeout(function () {
11215
+ if (clearHighlightedMessageTimeoutId.current) {
11216
+ clearTimeout(clearHighlightedMessageTimeoutId.current);
11217
+ }
11218
+ clearHighlightedMessageTimeoutId.current = setTimeout(function () {
11219
+ clearHighlightedMessageTimeoutId.current = null;
11214
11220
  dispatch({ type: 'clearHighlightedMessage' });
11215
11221
  }, 500);
11216
11222
  return [2 /*return*/];
@@ -12116,149 +12122,34 @@ var ChannelPreview = function (props) {
12116
12122
  return (React__default["default"].createElement(Preview, __assign({}, props, { active: isActive, displayImage: displayImage, displayTitle: displayTitle, lastMessage: lastMessage, latestMessage: latestMessage, setActiveChannel: setActiveChannel, unread: unread })));
12117
12123
  };
12118
12124
 
12119
- var SearchInput = function (props) {
12120
- var inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, query = props.query;
12121
- var t = useTranslationContext('SearchInput').t;
12122
- return (React__default["default"].createElement("input", { className: 'str-chat__channel-search-input', "data-testid": 'search-input', onChange: onSearch, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t('Search'), ref: inputRef, type: 'text', value: query }));
12123
- };
12124
-
12125
- var MenuIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'menu-icon', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
12126
- React__default["default"].createElement("path", { clipRule: 'evenodd', d: 'M3 8V6H21V8H3ZM3 13H21V11H3V13ZM3 18H21V16H3V18Z', fill: 'black', fillRule: 'evenodd' }))); };
12127
- var ReturnIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'return-icon', fill: 'none', height: '20', viewBox: '0 0 22 22', width: '20', xmlns: 'http://www.w3.org/2000/svg' },
12128
- React__default["default"].createElement("path", { d: 'M21.6668 9.66666V12.3333H5.6529L12.9932 19.6736L11.1076 21.5592L0.54834 11L11.1076 0.440765L12.9932 2.32638L5.6529 9.66666H21.6668Z', fill: '#080707' }))); };
12129
- var XIcon = function () { return (React__default["default"].createElement("svg", { fill: 'none', height: '14', viewBox: '0 0 14 14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
12130
- React__default["default"].createElement("path", { d: 'M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z', fill: '#747881' }))); };
12131
- var SearchIcon = function (_a) {
12132
- var className = _a.className;
12133
- return (React__default["default"].createElement("svg", { className: className, fill: 'none', height: '18', viewBox: '0 0 18 18', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
12134
- React__default["default"].createElement("path", { d: 'M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z', fill: '#747881' })));
12135
- };
12136
-
12137
12125
  var isChannel = function (output) { return output.cid != null; };
12138
12126
 
12139
- var DefaultSearchEmpty = function () {
12140
- var t = useTranslationContext('SearchResults').t;
12141
- return (React__default["default"].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' },
12142
- React__default["default"].createElement(SearchIcon, null),
12143
- t('No results found')));
12144
- };
12145
- var DefaultSearchResultsHeader = function (_a) {
12146
- var results = _a.results;
12147
- var t = useTranslationContext('SearchResultsHeader').t;
12148
- return (React__default["default"].createElement("div", { className: 'str-chat__channel-search-results-header', "data-testid": 'channel-search-results-header' }, t('searchResultsCount', {
12149
- count: results.length,
12150
- })));
12151
- };
12152
- var DefaultSearchResultsList = function (props) {
12153
- var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
12154
- return (React__default["default"].createElement(React__default["default"].Fragment, null, results.map(function (result, index) { return (React__default["default"].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
12155
- };
12156
- var DefaultSearchResultItem = function (props) {
12157
- var _a, _b;
12158
- var focusedUser = props.focusedUser, index = props.index, result = props.result, selectResult = props.selectResult;
12159
- var focused = focusedUser === index;
12160
- var themeVersion = useChatContext().themeVersion;
12161
- var className = clsx('str-chat__channel-search-result', focused && 'str-chat__channel-search-result--focused focused');
12162
- if (isChannel(result)) {
12163
- var channel_1 = result;
12164
- return themeVersion === '2' ? (React__default["default"].createElement(ChannelPreview, { channel: channel_1, className: className, onSelect: function () { return selectResult(channel_1); } })) : (React__default["default"].createElement("button", { "aria-label": "Select Channel: ".concat(((_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name) || ''), className: className, "data-testid": 'channel-search-result-channel', onClick: function () { return selectResult(channel_1); }, role: 'option' },
12165
- React__default["default"].createElement("div", { className: 'result-hashtag' }, "#"),
12166
- React__default["default"].createElement("p", { className: 'channel-search__result-text' }, (_b = channel_1.data) === null || _b === void 0 ? void 0 : _b.name)));
12167
- }
12168
- else {
12169
- return (React__default["default"].createElement("button", { "aria-label": "Select User Channel: ".concat(result.name || ''), className: className, "data-testid": 'channel-search-result-user', onClick: function () { return selectResult(result); }, role: 'option' },
12170
- React__default["default"].createElement(Avatar, { image: result.image, name: result.name || result.id, size: themeVersion === '2' ? 40 : undefined, user: result }),
12171
- React__default["default"].createElement("div", { className: 'str-chat__channel-search-result--display-name' }, result.name || result.id)));
12172
- }
12173
- };
12174
- var ResultsContainer = function (_a) {
12175
- var children = _a.children, popupResults = _a.popupResults;
12176
- var containerStyle = popupResults ? 'popup' : 'inline';
12177
- return (React__default["default"].createElement("div", { "aria-label": 'Channel search results', className: "str-chat__channel-search-container str-chat__channel-search-result-list ".concat(containerStyle) }, children));
12178
- };
12179
- var SearchResults = function (props) {
12180
- var popupResults = props.popupResults, results = props.results, searching = props.searching, _a = props.SearchEmpty, SearchEmpty = _a === void 0 ? DefaultSearchEmpty : _a, _b = props.SearchResultsHeader, SearchResultsHeader = _b === void 0 ? DefaultSearchResultsHeader : _b, SearchLoading = props.SearchLoading, _c = props.SearchResultItem, SearchResultItem = _c === void 0 ? DefaultSearchResultItem : _c, _d = props.SearchResultsList, SearchResultsList = _d === void 0 ? DefaultSearchResultsList : _d, selectResult = props.selectResult;
12181
- var t = useTranslationContext('SearchResults').t;
12182
- var _e = React.useState(), focusedResult = _e[0], setFocusedResult = _e[1];
12183
- var handleKeyDown = React.useCallback(function (event) {
12184
- if (event.key === 'ArrowUp') {
12185
- setFocusedResult(function (prevFocused) {
12186
- if (prevFocused === undefined)
12187
- return 0;
12188
- return prevFocused === 0 ? results.length - 1 : prevFocused - 1;
12189
- });
12190
- }
12191
- if (event.key === 'ArrowDown') {
12192
- setFocusedResult(function (prevFocused) {
12193
- if (prevFocused === undefined)
12194
- return 0;
12195
- return prevFocused === results.length - 1 ? 0 : prevFocused + 1;
12196
- });
12197
- }
12198
- if (event.key === 'Enter') {
12199
- event.preventDefault();
12200
- if (focusedResult !== undefined) {
12201
- selectResult(results[focusedResult]);
12202
- return setFocusedResult(undefined);
12203
- }
12204
- }
12205
- }, [focusedResult]);
12206
- React.useEffect(function () {
12207
- document.addEventListener('keydown', handleKeyDown, false);
12208
- return function () { return document.removeEventListener('keydown', handleKeyDown); };
12209
- }, [handleKeyDown]);
12210
- if (searching) {
12211
- return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults }, SearchLoading ? (React__default["default"].createElement(SearchLoading, null)) : (React__default["default"].createElement("div", { className: 'str-chat__channel-search-container-searching', "data-testid": 'search-in-progress-indicator' }, t('Searching...')))));
12212
- }
12213
- if (!results.length) {
12214
- return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
12215
- React__default["default"].createElement(SearchEmpty, null)));
12216
- }
12217
- return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
12218
- React__default["default"].createElement(SearchResultsHeader, { results: results }),
12219
- React__default["default"].createElement(SearchResultsList, { focusedUser: focusedResult, results: results, SearchResultItem: SearchResultItem, selectResult: selectResult })));
12220
- };
12221
-
12222
- var UnMemoizedChannelSearch = function (props) {
12223
- var clearState = props.clearState, SearchResultsList = props.SearchResultsList, inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, _a = props.popupResults, popupResults = _a === void 0 ? false : _a, query = props.query, results = props.results, SearchEmpty = props.SearchEmpty, searching = props.searching, _b = props.SearchInput, SearchInput$1 = _b === void 0 ? SearchInput : _b, SearchLoading = props.SearchLoading, SearchResultItem = props.SearchResultItem, SearchResultsHeader = props.SearchResultsHeader, selectResult = props.selectResult;
12224
- return (React__default["default"].createElement("div", { className: 'str-chat__channel-search', "data-testid": 'channel-search' },
12225
- React__default["default"].createElement(SearchInput$1, { clearState: clearState, inputRef: inputRef, onSearch: onSearch, placeholder: placeholder, query: query }),
12226
- query && (React__default["default"].createElement(SearchResults, { popupResults: popupResults, results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList, selectResult: selectResult }))));
12227
- };
12228
- /**
12229
- * The ChannelSearch component makes a query users call and displays the results in a list.
12230
- * Clicking on a list item will navigate you into a channel with the selected user. It can be used
12231
- * on its own or added to the ChannelList component by setting the `showChannelSearch` prop to true.
12232
- */
12233
- var ChannelSearch = React__default["default"].memo(UnMemoizedChannelSearch);
12234
-
12235
12127
  var useChannelSearch = function (_a) {
12236
- var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.enabled, enabled = _d === void 0 ? false : _d, onSelectResult = _a.onSelectResult, _e = _a.searchForChannels, searchForChannels = _e === void 0 ? false : _e, searchFunction = _a.searchFunction, searchQueryParams = _a.searchQueryParams, setChannels = _a.setChannels;
12128
+ var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d, onSearchCallback = _a.onSearch, onSearchExit = _a.onSearchExit, onSelectResult = _a.onSelectResult, _e = _a.searchForChannels, searchForChannels = _e === void 0 ? false : _e, searchFunction = _a.searchFunction, searchQueryParams = _a.searchQueryParams, setChannels = _a.setChannels;
12237
12129
  var _f = useChatContext('useChannelSearch'), client = _f.client, navOpen = _f.navOpen, setActiveChannel = _f.setActiveChannel, themeVersion = _f.themeVersion;
12238
12130
  var _g = React.useState(false), inputIsFocused = _g[0], setInputIsFocused = _g[1];
12239
12131
  var _h = React.useState(''), query = _h[0], setQuery = _h[1];
12240
12132
  var _j = React.useState([]), results = _j[0], setResults = _j[1];
12241
- var _k = React.useState(false), resultsOpen = _k[0], setResultsOpen = _k[1];
12242
- var _l = React.useState(false), searching = _l[0], setSearching = _l[1];
12133
+ var _k = React.useState(false), searching = _k[0], setSearching = _k[1];
12243
12134
  var inputRef = React.useRef(null);
12244
12135
  var searchBarRef = React.useRef(null);
12245
- var clearState = function () {
12136
+ var clearState = React.useCallback(function () {
12246
12137
  setQuery('');
12247
12138
  setResults([]);
12248
- setResultsOpen(false);
12249
12139
  setSearching(false);
12250
- };
12251
- var activateSearch = function () {
12140
+ }, []);
12141
+ var activateSearch = React.useCallback(function () {
12252
12142
  setInputIsFocused(true);
12253
- };
12254
- var exitSearch = function () {
12143
+ }, []);
12144
+ var exitSearch = React.useCallback(function () {
12255
12145
  var _a;
12256
12146
  setInputIsFocused(false);
12257
12147
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
12258
12148
  clearState();
12259
- };
12149
+ onSearchExit === null || onSearchExit === void 0 ? void 0 : onSearchExit();
12150
+ }, [clearState, onSearchExit]);
12260
12151
  React.useEffect(function () {
12261
- if (!enabled)
12152
+ if (disabled)
12262
12153
  return;
12263
12154
  var clickListener = function (event) {
12264
12155
  var _a, _b;
@@ -12269,17 +12160,15 @@ var useChannelSearch = function (_a) {
12269
12160
  : (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target);
12270
12161
  if (isInputClick)
12271
12162
  return;
12272
- if ((navOpen && inputIsFocused) ||
12273
- (resultsOpen && clearSearchOnClickOutside) ||
12274
- (inputIsFocused && !query)) {
12163
+ if ((inputIsFocused && (!query || navOpen)) || clearSearchOnClickOutside) {
12275
12164
  exitSearch();
12276
12165
  }
12277
12166
  };
12278
12167
  document.addEventListener('click', clickListener);
12279
12168
  return function () { return document.removeEventListener('click', clickListener); };
12280
- }, [enabled, inputIsFocused, resultsOpen]);
12169
+ }, [disabled, inputIsFocused]);
12281
12170
  React.useEffect(function () {
12282
- if (!(inputRef.current && enabled))
12171
+ if (!inputRef.current || disabled)
12283
12172
  return;
12284
12173
  var handleKeyDown = function (event) {
12285
12174
  if (event.key === 'Escape')
@@ -12291,7 +12180,7 @@ var useChannelSearch = function (_a) {
12291
12180
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', handleKeyDown);
12292
12181
  };
12293
12182
  }, []);
12294
- var selectResult = function (result) { return __awaiter$1(void 0, void 0, void 0, function () {
12183
+ var selectResult = React.useCallback(function (result) { return __awaiter$1(void 0, void 0, void 0, function () {
12295
12184
  var selectedChannel, newChannel;
12296
12185
  return __generator$1(this, function (_a) {
12297
12186
  switch (_a.label) {
@@ -12302,7 +12191,6 @@ var useChannelSearch = function (_a) {
12302
12191
  return [4 /*yield*/, onSelectResult({
12303
12192
  setQuery: setQuery,
12304
12193
  setResults: setResults,
12305
- setResultsOpen: setResultsOpen,
12306
12194
  setSearching: setSearching,
12307
12195
  }, result)];
12308
12196
  case 1:
@@ -12324,13 +12212,13 @@ var useChannelSearch = function (_a) {
12324
12212
  case 5:
12325
12213
  setChannels(function (channels) { return uniqBy__default["default"](__spreadArray$1([selectedChannel], channels, true), 'cid'); });
12326
12214
  if (clearSearchOnClickOutside) {
12327
- clearState();
12215
+ exitSearch();
12328
12216
  }
12329
12217
  return [2 /*return*/];
12330
12218
  }
12331
12219
  });
12332
- }); };
12333
- var getChannels = function (text) { return __awaiter$1(void 0, void 0, void 0, function () {
12220
+ }); }, [clearSearchOnClickOutside, client, exitSearch, onSelectResult]);
12221
+ var getChannels = React.useCallback(function (text) { return __awaiter$1(void 0, void 0, void 0, function () {
12334
12222
  var userResponse, channelResponse, _a, channels, users_1, users, error_1;
12335
12223
  var _b, _c, _d, _e, _f, _g;
12336
12224
  return __generator$1(this, function (_h) {
@@ -12351,14 +12239,12 @@ var useChannelSearch = function (_a) {
12351
12239
  case 3:
12352
12240
  _a = _h.sent(), channels = _a[0], users_1 = _a[1].users;
12353
12241
  setResults(__spreadArray$1(__spreadArray$1([], channels, true), users_1, true));
12354
- setResultsOpen(true);
12355
12242
  setSearching(false);
12356
12243
  return [2 /*return*/];
12357
12244
  case 4: return [4 /*yield*/, Promise.resolve(userResponse)];
12358
12245
  case 5:
12359
12246
  users = (_h.sent()).users;
12360
12247
  setResults(users);
12361
- setResultsOpen(true);
12362
12248
  return [3 /*break*/, 7];
12363
12249
  case 6:
12364
12250
  error_1 = _h.sent();
@@ -12370,17 +12256,16 @@ var useChannelSearch = function (_a) {
12370
12256
  return [2 /*return*/];
12371
12257
  }
12372
12258
  });
12373
- }); };
12259
+ }); }, [client, searching]);
12374
12260
  var getChannelsThrottled = throttle__default["default"](getChannels, 200);
12375
- var onSearch = function (event) {
12261
+ var onSearch = React.useCallback(function (event) {
12376
12262
  event.preventDefault();
12377
- if (!enabled)
12263
+ if (disabled)
12378
12264
  return;
12379
12265
  if (searchFunction) {
12380
12266
  searchFunction({
12381
12267
  setQuery: setQuery,
12382
12268
  setResults: setResults,
12383
- setResultsOpen: setResultsOpen,
12384
12269
  setSearching: setSearching,
12385
12270
  }, event);
12386
12271
  }
@@ -12388,7 +12273,8 @@ var useChannelSearch = function (_a) {
12388
12273
  setQuery(event.target.value);
12389
12274
  getChannelsThrottled(event.target.value);
12390
12275
  }
12391
- };
12276
+ onSearchCallback === null || onSearchCallback === void 0 ? void 0 : onSearchCallback(event);
12277
+ }, [disabled, getChannelsThrottled, searchFunction]);
12392
12278
  return {
12393
12279
  activateSearch: activateSearch,
12394
12280
  clearState: clearState,
@@ -12404,6 +12290,24 @@ var useChannelSearch = function (_a) {
12404
12290
  };
12405
12291
  };
12406
12292
 
12293
+ var MenuIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'menu-icon', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
12294
+ React__default["default"].createElement("path", { clipRule: 'evenodd', d: 'M3 8V6H21V8H3ZM3 13H21V11H3V13ZM3 18H21V16H3V18Z', fill: 'black', fillRule: 'evenodd' }))); };
12295
+ var ReturnIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'return-icon', fill: 'none', height: '20', viewBox: '0 0 22 22', width: '20', xmlns: 'http://www.w3.org/2000/svg' },
12296
+ React__default["default"].createElement("path", { d: 'M21.6668 9.66666V12.3333H5.6529L12.9932 19.6736L11.1076 21.5592L0.54834 11L11.1076 0.440765L12.9932 2.32638L5.6529 9.66666H21.6668Z', fill: '#080707' }))); };
12297
+ var XIcon = function () { return (React__default["default"].createElement("svg", { fill: 'none', height: '14', viewBox: '0 0 14 14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
12298
+ React__default["default"].createElement("path", { d: 'M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z', fill: '#747881' }))); };
12299
+ var SearchIcon = function (_a) {
12300
+ var className = _a.className;
12301
+ return (React__default["default"].createElement("svg", { className: className, fill: 'none', height: '18', viewBox: '0 0 18 18', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
12302
+ React__default["default"].createElement("path", { d: 'M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z', fill: '#747881' })));
12303
+ };
12304
+
12305
+ var SearchInput = function (props) {
12306
+ var disabled = props.disabled, inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, query = props.query;
12307
+ var t = useTranslationContext('SearchInput').t;
12308
+ return (React__default["default"].createElement("input", { className: 'str-chat__channel-search-input', "data-testid": 'search-input', disabled: disabled, onChange: onSearch, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t('Search'), ref: inputRef, type: 'text', value: query }));
12309
+ };
12310
+
12407
12311
  var SearchBarButton = function (_a) {
12408
12312
  var children = _a.children, className = _a.className, onClick = _a.onClick;
12409
12313
  return (React__default["default"].createElement("button", { className: clsx('str-chat__channel-search-bar-button', className), "data-testid": 'search-bar-button', onClick: onClick }, children));
@@ -12455,7 +12359,7 @@ var SearchBar = function (props) {
12455
12359
  }, []);
12456
12360
  var handleClearClick = React.useCallback(function () {
12457
12361
  var _a;
12458
- inputProps.clearState();
12362
+ exitSearch();
12459
12363
  (_a = inputProps.inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
12460
12364
  }, []);
12461
12365
  return (React__default["default"].createElement("div", { className: 'str-chat__channel-search-bar', "data-testid": 'search-bar', ref: searchBarRef },
@@ -12472,6 +12376,104 @@ var SearchBar = function (props) {
12472
12376
  React__default["default"].createElement(AppMenu, null)))));
12473
12377
  };
12474
12378
 
12379
+ var DefaultSearchEmpty = function () {
12380
+ var t = useTranslationContext('SearchResults').t;
12381
+ return (React__default["default"].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' },
12382
+ React__default["default"].createElement(SearchIcon, null),
12383
+ t('No results found')));
12384
+ };
12385
+ var DefaultSearchResultsHeader = function (_a) {
12386
+ var results = _a.results;
12387
+ var t = useTranslationContext('SearchResultsHeader').t;
12388
+ return (React__default["default"].createElement("div", { className: 'str-chat__channel-search-results-header', "data-testid": 'channel-search-results-header' }, t('searchResultsCount', {
12389
+ count: results.length,
12390
+ })));
12391
+ };
12392
+ var DefaultSearchResultsList = function (props) {
12393
+ var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
12394
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, results.map(function (result, index) { return (React__default["default"].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
12395
+ };
12396
+ var DefaultSearchResultItem = function (props) {
12397
+ var _a, _b;
12398
+ var focusedUser = props.focusedUser, index = props.index, result = props.result, selectResult = props.selectResult;
12399
+ var focused = focusedUser === index;
12400
+ var themeVersion = useChatContext().themeVersion;
12401
+ var className = clsx('str-chat__channel-search-result', focused && 'str-chat__channel-search-result--focused focused');
12402
+ if (isChannel(result)) {
12403
+ var channel_1 = result;
12404
+ return themeVersion === '2' ? (React__default["default"].createElement(ChannelPreview, { channel: channel_1, className: className, onSelect: function () { return selectResult(channel_1); } })) : (React__default["default"].createElement("button", { "aria-label": "Select Channel: ".concat(((_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name) || ''), className: className, "data-testid": 'channel-search-result-channel', onClick: function () { return selectResult(channel_1); }, role: 'option' },
12405
+ React__default["default"].createElement("div", { className: 'result-hashtag' }, "#"),
12406
+ React__default["default"].createElement("p", { className: 'channel-search__result-text' }, (_b = channel_1.data) === null || _b === void 0 ? void 0 : _b.name)));
12407
+ }
12408
+ else {
12409
+ return (React__default["default"].createElement("button", { "aria-label": "Select User Channel: ".concat(result.name || ''), className: className, "data-testid": 'channel-search-result-user', onClick: function () { return selectResult(result); }, role: 'option' },
12410
+ React__default["default"].createElement(Avatar, { image: result.image, name: result.name || result.id, size: themeVersion === '2' ? 40 : undefined, user: result }),
12411
+ React__default["default"].createElement("div", { className: 'str-chat__channel-search-result--display-name' }, result.name || result.id)));
12412
+ }
12413
+ };
12414
+ var ResultsContainer = function (_a) {
12415
+ var children = _a.children, popupResults = _a.popupResults;
12416
+ return (React__default["default"].createElement("div", { "aria-label": 'Channel search results', className: clsx("str-chat__channel-search-container str-chat__channel-search-result-list", popupResults ? 'popup' : 'inline') }, children));
12417
+ };
12418
+ var SearchResults = function (props) {
12419
+ var popupResults = props.popupResults, results = props.results, searching = props.searching, _a = props.SearchEmpty, SearchEmpty = _a === void 0 ? DefaultSearchEmpty : _a, _b = props.SearchResultsHeader, SearchResultsHeader = _b === void 0 ? DefaultSearchResultsHeader : _b, SearchLoading = props.SearchLoading, _c = props.SearchResultItem, SearchResultItem = _c === void 0 ? DefaultSearchResultItem : _c, _d = props.SearchResultsList, SearchResultsList = _d === void 0 ? DefaultSearchResultsList : _d, selectResult = props.selectResult;
12420
+ var t = useTranslationContext('SearchResults').t;
12421
+ var _e = React.useState(), focusedResult = _e[0], setFocusedResult = _e[1];
12422
+ var handleKeyDown = React.useCallback(function (event) {
12423
+ if (event.key === 'ArrowUp') {
12424
+ setFocusedResult(function (prevFocused) {
12425
+ if (prevFocused === undefined)
12426
+ return 0;
12427
+ return prevFocused === 0 ? results.length - 1 : prevFocused - 1;
12428
+ });
12429
+ }
12430
+ if (event.key === 'ArrowDown') {
12431
+ setFocusedResult(function (prevFocused) {
12432
+ if (prevFocused === undefined)
12433
+ return 0;
12434
+ return prevFocused === results.length - 1 ? 0 : prevFocused + 1;
12435
+ });
12436
+ }
12437
+ if (event.key === 'Enter') {
12438
+ event.preventDefault();
12439
+ if (focusedResult !== undefined) {
12440
+ selectResult(results[focusedResult]);
12441
+ return setFocusedResult(undefined);
12442
+ }
12443
+ }
12444
+ }, [focusedResult]);
12445
+ React.useEffect(function () {
12446
+ document.addEventListener('keydown', handleKeyDown, false);
12447
+ return function () { return document.removeEventListener('keydown', handleKeyDown); };
12448
+ }, [handleKeyDown]);
12449
+ if (searching) {
12450
+ return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults }, SearchLoading ? (React__default["default"].createElement(SearchLoading, null)) : (React__default["default"].createElement("div", { className: 'str-chat__channel-search-container-searching', "data-testid": 'search-in-progress-indicator' }, t('Searching...')))));
12451
+ }
12452
+ if (!results.length) {
12453
+ return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
12454
+ React__default["default"].createElement(SearchEmpty, null)));
12455
+ }
12456
+ return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
12457
+ React__default["default"].createElement(SearchResultsHeader, { results: results }),
12458
+ React__default["default"].createElement(SearchResultsList, { focusedUser: focusedResult, results: results, SearchResultItem: SearchResultItem, selectResult: selectResult })));
12459
+ };
12460
+
12461
+ var UnMemoizedChannelSearch = function (props) {
12462
+ var AppMenu = props.AppMenu, ClearInputIcon = props.ClearInputIcon, ExitSearchIcon = props.ExitSearchIcon, MenuIcon = props.MenuIcon, placeholder = props.placeholder, _a = props.popupResults, popupResults = _a === void 0 ? false : _a, _b = props.SearchBar, SearchBar$1 = _b === void 0 ? SearchBar : _b, SearchEmpty = props.SearchEmpty, _c = props.SearchInput, SearchInput$1 = _c === void 0 ? SearchInput : _c, SearchLoading = props.SearchLoading, SearchInputIcon = props.SearchInputIcon, SearchResultItem = props.SearchResultItem, SearchResultsList = props.SearchResultsList, SearchResultsHeader = props.SearchResultsHeader, channelSearchParams = __rest(props, ["AppMenu", "ClearInputIcon", "ExitSearchIcon", "MenuIcon", "placeholder", "popupResults", "SearchBar", "SearchEmpty", "SearchInput", "SearchLoading", "SearchInputIcon", "SearchResultItem", "SearchResultsList", "SearchResultsHeader"]);
12463
+ var themeVersion = useChatContext('ChannelSearch').themeVersion;
12464
+ var _d = useChannelSearch(channelSearchParams), activateSearch = _d.activateSearch, clearState = _d.clearState, exitSearch = _d.exitSearch, inputIsFocused = _d.inputIsFocused, inputRef = _d.inputRef, onSearch = _d.onSearch, query = _d.query, results = _d.results, searchBarRef = _d.searchBarRef, searching = _d.searching, selectResult = _d.selectResult;
12465
+ var showSearchBarV2 = themeVersion === '2';
12466
+ return (React__default["default"].createElement("div", { className: 'str-chat__channel-search', "data-testid": 'channel-search' },
12467
+ showSearchBarV2 ? (React__default["default"].createElement(SearchBar$1, { activateSearch: activateSearch, AppMenu: AppMenu, ClearInputIcon: ClearInputIcon, clearState: clearState, disabled: channelSearchParams.disabled, exitSearch: exitSearch, ExitSearchIcon: ExitSearchIcon, inputIsFocused: inputIsFocused, inputRef: inputRef, MenuIcon: MenuIcon, onSearch: onSearch, placeholder: placeholder, query: query, searchBarRef: searchBarRef, SearchInput: SearchInput$1, SearchInputIcon: SearchInputIcon })) : (React__default["default"].createElement(SearchInput$1, { clearState: clearState, disabled: channelSearchParams.disabled, inputRef: inputRef, onSearch: onSearch, placeholder: placeholder, query: query })),
12468
+ query && (React__default["default"].createElement(SearchResults, { popupResults: popupResults, results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList, selectResult: selectResult }))));
12469
+ };
12470
+ /**
12471
+ * The ChannelSearch component makes a query users call and displays the results in a list.
12472
+ * Clicking on a list item will navigate you into a channel with the selected user. It can be used
12473
+ * on its own or added to the ChannelList component by setting the `showChannelSearch` prop to true.
12474
+ */
12475
+ var ChannelSearch = React__default["default"].memo(UnMemoizedChannelSearch);
12476
+
12475
12477
  var ChatBubble = function () { return (React__default["default"].createElement("svg", { "data-testid": 'chat-bubble', fill: 'none', height: '96', viewBox: '0 0 136 136', width: '96', xmlns: 'http://www.w3.org/2000/svg' },
12476
12478
  React__default["default"].createElement("path", { d: 'M106 24.5H30C24.775 24.5 20.5 28.775 20.5 34V119.5L39.5 100.5H106C111.225 100.5 115.5 96.225 115.5 91V34C115.5 28.775 111.225 24.5 106 24.5ZM106 91H39.5L30 100.5V34H106V91Z', fill: '#B4B7BB' }))); };
12477
12479
 
@@ -12518,11 +12520,11 @@ var DEFAULT_FILTERS = {};
12518
12520
  var DEFAULT_OPTIONS = {};
12519
12521
  var DEFAULT_SORT = {};
12520
12522
  var UnMemoizedChannelList = function (props) {
12521
- var additionalChannelSearchProps = props.additionalChannelSearchProps, _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _b = props.ChannelSearch, ChannelSearch$1 = _b === void 0 ? ChannelSearch : _b, customActiveChannel = props.customActiveChannel, _c = props.EmptyStateIndicator, EmptyStateIndicator$1 = _c === void 0 ? EmptyStateIndicator : _c, filters = props.filters, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? ChatDown : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannels : _e, _f = props.List, List = _f === void 0 ? ChannelListMessenger : _f, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _g = props.Paginator, Paginator = _g === void 0 ? LoadMorePaginator : _g, Preview = props.Preview, renderChannels = props.renderChannels, _h = props.SearchBar, SearchBar$1 = _h === void 0 ? SearchBar : _h, _j = props.sendChannelsToList, sendChannelsToList = _j === void 0 ? false : _j, _k = props.setActiveChannelOnMount, setActiveChannelOnMount = _k === void 0 ? true : _k, _l = props.showChannelSearch, showChannelSearch = _l === void 0 ? false : _l, _m = props.sort, sort = _m === void 0 ? DEFAULT_SORT : _m, _o = props.watchers, watchers = _o === void 0 ? {} : _o;
12522
- var _p = additionalChannelSearchProps || {}, AppMenu = _p.AppMenu, ClearInputIcon = _p.ClearInputIcon, ExitSearchIcon = _p.ExitSearchIcon, MenuIcon = _p.MenuIcon, placeholder = _p.placeholder, popupResults = _p.popupResults, SearchEmpty = _p.SearchEmpty, SearchInput = _p.SearchInput, SearchInputIcon = _p.SearchInputIcon, SearchLoading = _p.SearchLoading, SearchResultItem = _p.SearchResultItem, SearchResultsHeader = _p.SearchResultsHeader, SearchResultsList = _p.SearchResultsList, channelSearchParams = __rest(_p, ["AppMenu", "ClearInputIcon", "ExitSearchIcon", "MenuIcon", "placeholder", "popupResults", "SearchEmpty", "SearchInput", "SearchInputIcon", "SearchLoading", "SearchResultItem", "SearchResultsHeader", "SearchResultsList"]);
12523
- var _q = useChatContext('ChannelList'), channel = _q.channel, channelsQueryState = _q.channelsQueryState, client = _q.client, closeMobileNav = _q.closeMobileNav, customClasses = _q.customClasses, _r = _q.navOpen, navOpen = _r === void 0 ? false : _r, setActiveChannel = _q.setActiveChannel, theme = _q.theme, themeVersion = _q.themeVersion, useImageFlagEmojisOnWindows = _q.useImageFlagEmojisOnWindows;
12523
+ var additionalChannelSearchProps = props.additionalChannelSearchProps, _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _b = props.ChannelSearch, ChannelSearch$1 = _b === void 0 ? ChannelSearch : _b, customActiveChannel = props.customActiveChannel, _c = props.EmptyStateIndicator, EmptyStateIndicator$1 = _c === void 0 ? EmptyStateIndicator : _c, filters = props.filters, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? ChatDown : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannels : _e, _f = props.List, List = _f === void 0 ? ChannelListMessenger : _f, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _g = props.Paginator, Paginator = _g === void 0 ? LoadMorePaginator : _g, Preview = props.Preview, renderChannels = props.renderChannels, _h = props.sendChannelsToList, sendChannelsToList = _h === void 0 ? false : _h, _j = props.setActiveChannelOnMount, setActiveChannelOnMount = _j === void 0 ? true : _j, _k = props.showChannelSearch, showChannelSearch = _k === void 0 ? false : _k, _l = props.sort, sort = _l === void 0 ? DEFAULT_SORT : _l, _m = props.watchers, watchers = _m === void 0 ? {} : _m;
12524
+ var _o = useChatContext('ChannelList'), channel = _o.channel, channelsQueryState = _o.channelsQueryState, client = _o.client, closeMobileNav = _o.closeMobileNav, customClasses = _o.customClasses, _p = _o.navOpen, navOpen = _p === void 0 ? false : _p, setActiveChannel = _o.setActiveChannel, theme = _o.theme, useImageFlagEmojisOnWindows = _o.useImageFlagEmojisOnWindows;
12524
12525
  var channelListRef = React.useRef(null);
12525
- var _s = React.useState(0), channelUpdateCount = _s[0], setChannelUpdateCount = _s[1];
12526
+ var _q = React.useState(0), channelUpdateCount = _q[0], setChannelUpdateCount = _q[1];
12527
+ var _r = React.useState(false), searchActive = _r[0], setSearchActive = _r[1];
12526
12528
  /**
12527
12529
  * Set a channel with id {customActiveChannel} as active and move it to the top of the list.
12528
12530
  * If customActiveChannel prop is absent, then set the first channel in list as active channel.
@@ -12567,9 +12569,22 @@ var UnMemoizedChannelList = function (props) {
12567
12569
  * force a re-render. Incrementing this dummy variable ensures the channel previews update.
12568
12570
  */
12569
12571
  var forceUpdate = function () { return setChannelUpdateCount(function (count) { return count + 1; }); };
12570
- var _t = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler), channels = _t.channels, hasNextPage = _t.hasNextPage, loadNextPage = _t.loadNextPage, setChannels = _t.setChannels;
12571
- var channelSearchController = useChannelSearch(__assign({ enabled: showChannelSearch, setChannels: setChannels }, channelSearchParams));
12572
- var activateSearch = channelSearchController.activateSearch, clearState = channelSearchController.clearState, exitSearch = channelSearchController.exitSearch, inputIsFocused = channelSearchController.inputIsFocused, inputRef = channelSearchController.inputRef, onSearch = channelSearchController.onSearch, query = channelSearchController.query, results = channelSearchController.results, searchBarRef = channelSearchController.searchBarRef, searching = channelSearchController.searching, selectResult = channelSearchController.selectResult;
12572
+ var onSearch = React.useCallback(function (event) {
12573
+ var _a;
12574
+ if (!event.target.value) {
12575
+ setSearchActive(false);
12576
+ }
12577
+ else {
12578
+ setSearchActive(true);
12579
+ }
12580
+ (_a = additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.onSearch) === null || _a === void 0 ? void 0 : _a.call(additionalChannelSearchProps, event);
12581
+ }, []);
12582
+ var onSearchExit = React.useCallback(function () {
12583
+ var _a;
12584
+ setSearchActive(false);
12585
+ (_a = additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.onSearchExit) === null || _a === void 0 ? void 0 : _a.call(additionalChannelSearchProps);
12586
+ }, []);
12587
+ var _s = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler), channels = _s.channels, hasNextPage = _s.hasNextPage, loadNextPage = _s.loadNextPage, setChannels = _s.setChannels;
12573
12588
  var loadedChannels = channelRenderFilterFn ? channelRenderFilterFn(channels) : channels;
12574
12589
  useMobileNavigation(channelListRef, navOpen, closeMobileNav);
12575
12590
  useMessageNewListener(setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels);
@@ -12614,12 +12629,11 @@ var UnMemoizedChannelList = function (props) {
12614
12629
  'str-chat--windows-flags': useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/),
12615
12630
  'str-chat-channel-list--open': navOpen,
12616
12631
  });
12617
- var showSearchV2 = themeVersion === '2' && !popupResults;
12632
+ var showChannelList = !searchActive || (additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.popupResults);
12618
12633
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
12619
12634
  React__default["default"].createElement("div", { className: className, ref: channelListRef },
12620
- showChannelSearch &&
12621
- (showSearchV2 ? (React__default["default"].createElement(SearchBar$1, { activateSearch: activateSearch, AppMenu: AppMenu, ClearInputIcon: ClearInputIcon, clearState: clearState, exitSearch: exitSearch, ExitSearchIcon: ExitSearchIcon, inputIsFocused: inputIsFocused, inputRef: inputRef, MenuIcon: MenuIcon, onSearch: onSearch, placeholder: placeholder, query: query, searchBarRef: searchBarRef, SearchInputIcon: SearchInputIcon })) : (React__default["default"].createElement(ChannelSearch$1, __assign({ placeholder: placeholder, popupResults: popupResults, SearchEmpty: SearchEmpty, SearchInput: SearchInput, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList }, channelSearchController)))),
12622
- query && showSearchV2 ? (React__default["default"].createElement(SearchResults, { results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList, selectResult: selectResult })) : (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: channelsQueryState.queryInProgress === 'load-more' }, renderChannels
12635
+ showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, __assign({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
12636
+ showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: channelsQueryState.queryInProgress === 'load-more' }, renderChannels
12623
12637
  ? renderChannels(loadedChannels, renderChannel)
12624
12638
  : loadedChannels.map(function (channel) { return renderChannel(channel); }))))))));
12625
12639
  };
@@ -12628,7 +12642,7 @@ var UnMemoizedChannelList = function (props) {
12628
12642
  */
12629
12643
  var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
12630
12644
 
12631
- var version = '10.0.0-theming-v2.3';
12645
+ var version = '10.0.0';
12632
12646
 
12633
12647
  var useChat = function (_a) {
12634
12648
  var _b, _c;