stream-chat-react 11.15.2 → 11.16.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 (37) hide show
  1. package/dist/{Window-847d5d88.js → Window-996f3be8.js} +61 -37
  2. package/dist/browser.full-bundle.js +62 -38
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +4 -4
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Attachment/hooks/useAudioController.d.ts.map +1 -1
  7. package/dist/components/Attachment/hooks/useAudioController.js +1 -0
  8. package/dist/components/Emojis/index.cjs.js +1 -1
  9. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.d.ts.map +1 -1
  10. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.js +11 -6
  11. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.d.ts.map +1 -1
  12. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.js +7 -7
  13. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts.map +1 -1
  14. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.js +1 -1
  15. package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  16. package/dist/components/Message/hooks/useReactionHandler.js +14 -7
  17. package/dist/components/Message/utils.d.ts.map +1 -1
  18. package/dist/components/Message/utils.js +4 -1
  19. package/dist/components/MessageInput/icons.d.ts.map +1 -1
  20. package/dist/components/MessageInput/icons.js +2 -2
  21. package/dist/components/MessageList/utils.js +2 -2
  22. package/dist/components/Reactions/ReactionSelector.d.ts +7 -2
  23. package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
  24. package/dist/components/Reactions/ReactionSelector.js +4 -3
  25. package/dist/components/Reactions/ReactionsList.d.ts +7 -2
  26. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  27. package/dist/components/Reactions/SimpleReactionsList.d.ts +8 -5
  28. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  29. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +1 -1
  30. package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  31. package/dist/components/Reactions/hooks/useProcessReactions.js +16 -9
  32. package/dist/components/Reactions/types.d.ts +3 -0
  33. package/dist/components/Reactions/types.d.ts.map +1 -1
  34. package/dist/index.cjs.js +2 -2
  35. package/dist/version.d.ts +1 -1
  36. package/dist/version.js +1 -1
  37. package/package.json +3 -3
@@ -1549,6 +1549,7 @@ var useAudioController = function (_a) {
1549
1549
  return;
1550
1550
  try {
1551
1551
  audioRef.current.pause();
1552
+ setIsPlaying(false);
1552
1553
  }
1553
1554
  catch (e) {
1554
1555
  registerError(new Error(t('Failed to play the recording')));
@@ -36853,7 +36854,10 @@ var areMessageUIPropsEqual = function (prevProps, nextProps) {
36853
36854
  }
36854
36855
  return areMessagesEqual(prevMessage, nextMessage);
36855
36856
  };
36856
- var messageHasReactions = function (message) { var _a; return Object.values((_a = message === null || message === void 0 ? void 0 : message.reaction_counts) !== null && _a !== void 0 ? _a : {}).some(function (count) { return count > 0; }); };
36857
+ var messageHasReactions = function (message) { var _a; return Object.values((_a = message === null || message === void 0 ? void 0 : message.reaction_groups) !== null && _a !== void 0 ? _a : {}).some(function (_a) {
36858
+ var count = _a.count;
36859
+ return count > 0;
36860
+ }); };
36857
36861
  var messageHasAttachments = function (message) { return !!(message === null || message === void 0 ? void 0 : message.attachments) && !!message.attachments.length; };
36858
36862
  var getImages = function (message) {
36859
36863
  if (!(message === null || message === void 0 ? void 0 : message.attachments)) {
@@ -39336,9 +39340,9 @@ var MicIcon = function () { return (React__default["default"].createElement("svg
39336
39340
  React__default["default"].createElement("path", { d: 'M12 9.5C12 12.26 9.76 14.5 7 14.5C4.24 14.5 2 12.26 2 9.5H0C0 13.03 2.61 15.93 6 16.42V19.5H8V16.42C11.39 15.93 14 13.03 14 9.5H12Z' }))); };
39337
39341
  var BinIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 32 32', xmlns: 'http://www.w3.org/2000/svg' },
39338
39342
  React__default["default"].createElement("path", { d: 'M8.00033 25.3333C8.00033 26.8 9.20033 28 10.667 28H21.3337C22.8003 28 24.0003 26.8 24.0003 25.3333V12C24.0003 10.5333 22.8003 9.33333 21.3337 9.33333H10.667C9.20033 9.33333 8.00033 10.5333 8.00033 12V25.3333ZM24.0003 5.33333H20.667L19.7203 4.38667C19.4803 4.14667 19.1337 4 18.787 4H13.2137C12.867 4 12.5203 4.14667 12.2803 4.38667L11.3337 5.33333H8.00033C7.26699 5.33333 6.66699 5.93333 6.66699 6.66667C6.66699 7.4 7.26699 8 8.00033 8H24.0003C24.7337 8 25.3337 7.4 25.3337 6.66667C25.3337 5.93333 24.7337 5.33333 24.0003 5.33333Z' }))); };
39339
- var PauseIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 16 20', xmlns: 'http://www.w3.org/2000/svg' },
39343
+ var PauseIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'str-chat__pause-icon', fill: 'currentColor', viewBox: '0 0 16 20', xmlns: 'http://www.w3.org/2000/svg' },
39340
39344
  React__default["default"].createElement("path", { d: 'M0 19.3333H5.33333V0.666626H0V19.3333ZM10.6667 0.666626V19.3333H16V0.666626H10.6667Z' }))); };
39341
- var PlayIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 14 18', xmlns: 'http://www.w3.org/2000/svg' },
39345
+ var PlayIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'str-chat__play-icon', fill: 'currentColor', viewBox: '0 0 14 18', xmlns: 'http://www.w3.org/2000/svg' },
39342
39346
  React__default["default"].createElement("path", { d: 'M0.236328 2.09338V15.9067C0.236328 16.9601 1.39633 17.6001 2.28966 17.0267L13.143 10.1201C13.9697 9.60005 13.9697 8.40005 13.143 7.86672L2.28966 0.973385C1.39633 0.400051 0.236328 1.04005 0.236328 2.09338Z' }))); };
39343
39347
  var CheckSignIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 18 14', xmlns: 'http://www.w3.org/2000/svg' },
39344
39348
  React__default["default"].createElement("path", { d: 'M5.79457 10.875L2.32457 7.40502C1.93457 7.01502 1.30457 7.01502 0.91457 7.40502C0.52457 7.79502 0.52457 8.42502 0.91457 8.81502L5.09457 12.995C5.48457 13.385 6.11457 13.385 6.50457 12.995L17.0846 2.41502C17.4746 2.02502 17.4746 1.39502 17.0846 1.00502C16.6946 0.615024 16.0646 0.615024 15.6746 1.00502L5.79457 10.875Z' }))); };
@@ -39380,7 +39384,7 @@ var AudioRecordingPreview = function (_a) {
39380
39384
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
39381
39385
  React__default["default"].createElement("audio", { ref: audioRef },
39382
39386
  React__default["default"].createElement("source", { src: props.src, type: mimeType })),
39383
- React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__toggle-playback-button', onClick: togglePlay }, isPlaying ? React__default["default"].createElement(PauseIcon, null) : React__default["default"].createElement(PlayIcon, null)),
39387
+ React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__toggle-playback-button', "data-testid": 'audio-recording-preview-toggle-play-btn', onClick: togglePlay }, isPlaying ? React__default["default"].createElement(PauseIcon, null) : React__default["default"].createElement(PlayIcon, null)),
39384
39388
  React__default["default"].createElement(RecordingTimer, { durationSeconds: displayedDuration }),
39385
39389
  React__default["default"].createElement("div", { className: 'str-chat__wave-progress-bar__track-container' },
39386
39390
  React__default["default"].createElement(WaveProgressBar, { progress: progress, seek: seek, waveformData: waveformData || [] }))));
@@ -39430,11 +39434,12 @@ var AudioRecordingWaveform = function (_a) {
39430
39434
  }, [recorder]);
39431
39435
  if (!recorder)
39432
39436
  return null;
39433
- return (React__default["default"].createElement("div", { className: 'str-chat__audio_recorder__waveform-box' }, amplitudes.slice(-maxDataPointsDrawn).map(function (amplitude, i) { return (React__default["default"].createElement("div", { className: 'str-chat__wave-progress-bar__amplitude-bar', key: "amplitude-".concat(i, "-voice-recording"), style: {
39434
- '--str-chat__wave-progress-bar__amplitude-bar-height': amplitude
39435
- ? amplitude * 100 + '%'
39436
- : '0%',
39437
- } })); })));
39437
+ return (React__default["default"].createElement("div", { className: 'str-chat__waveform-box-container' },
39438
+ React__default["default"].createElement("div", { className: 'str-chat__audio_recorder__waveform-box' }, amplitudes.slice(-maxDataPointsDrawn).map(function (amplitude, i) { return (React__default["default"].createElement("div", { className: 'str-chat__wave-progress-bar__amplitude-bar', key: "amplitude-".concat(i, "-voice-recording"), style: {
39439
+ '--str-chat__wave-progress-bar__amplitude-bar-height': amplitude
39440
+ ? amplitude * 100 + '%'
39441
+ : '0%',
39442
+ } })); }))));
39438
39443
  };
39439
39444
  var AudioRecordingInProgress = function () {
39440
39445
  var _a = useTimeElapsed(), secondsElapsed = _a.secondsElapsed, startCounter = _a.startCounter, stopCounter = _a.stopCounter;
@@ -39456,8 +39461,7 @@ var AudioRecordingInProgress = function () {
39456
39461
  }, [recorder, startCounter, stopCounter]);
39457
39462
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
39458
39463
  React__default["default"].createElement(RecordingTimer, { durationSeconds: secondsElapsed }),
39459
- React__default["default"].createElement("div", { className: 'str-chat__waveform-box-container' },
39460
- React__default["default"].createElement(AudioRecordingWaveform, null))));
39464
+ React__default["default"].createElement(AudioRecordingWaveform, null)));
39461
39465
  };
39462
39466
 
39463
39467
  var Subscription = /** @class */ (function () {
@@ -52450,18 +52454,23 @@ var AudioRecorder = function () {
52450
52454
  var _a, _b;
52451
52455
  var _c = useMessageInputContext().recordingController, completeRecording = _c.completeRecording, recorder = _c.recorder, recording = _c.recording, recordingState = _c.recordingState;
52452
52456
  var isUploadingFile = ((_a = recording === null || recording === void 0 ? void 0 : recording.$internal) === null || _a === void 0 ? void 0 : _a.uploadState) === 'uploading';
52457
+ var state = React.useMemo(function () { return ({
52458
+ paused: recordingState === exports.MediaRecordingState.PAUSED,
52459
+ recording: recordingState === exports.MediaRecordingState.RECORDING,
52460
+ stopped: recordingState === exports.MediaRecordingState.STOPPED,
52461
+ }); }, [recordingState]);
52453
52462
  if (!recorder)
52454
52463
  return null;
52455
52464
  return (React__default["default"].createElement("div", { className: 'str-chat__audio_recorder-container' },
52456
52465
  React__default["default"].createElement("div", { className: 'str-chat__audio_recorder', "data-testid": 'audio-recorder' },
52457
- React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__cancel-button', disabled: isUploadingFile, onClick: recorder.cancel },
52466
+ React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__cancel-button', "data-testid": 'cancel-recording-audio-button', disabled: isUploadingFile, onClick: recorder.cancel },
52458
52467
  React__default["default"].createElement(BinIcon, null)),
52459
- (recording === null || recording === void 0 ? void 0 : recording.asset_url) ? (React__default["default"].createElement(AudioRecordingPreview, { durationSeconds: (_b = recording.duration) !== null && _b !== void 0 ? _b : 0, mimeType: recording.mime_type, src: recording.asset_url, waveformData: recording.waveform_data })) : (React__default["default"].createElement(AudioRecordingInProgress, null)),
52460
- recordingState === exports.MediaRecordingState.PAUSED && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__resume-recording-button', onClick: recorder.resume },
52468
+ state.stopped && (recording === null || recording === void 0 ? void 0 : recording.asset_url) ? (React__default["default"].createElement(AudioRecordingPreview, { durationSeconds: (_b = recording.duration) !== null && _b !== void 0 ? _b : 0, mimeType: recording.mime_type, src: recording.asset_url, waveformData: recording.waveform_data })) : state.paused || state.recording ? (React__default["default"].createElement(AudioRecordingInProgress, null)) : null,
52469
+ state.paused && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__resume-recording-button', onClick: recorder.resume },
52461
52470
  React__default["default"].createElement(MicIcon, null))),
52462
- recordingState === exports.MediaRecordingState.RECORDING && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__pause-recording-button', onClick: recorder.pause },
52471
+ state.recording && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__pause-recording-button', "data-testid": 'pause-recording-audio-button', onClick: recorder.pause },
52463
52472
  React__default["default"].createElement(PauseIcon, null))),
52464
- recordingState === exports.MediaRecordingState.STOPPED ? (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__complete-button', "data-testid": 'audio-recorder-complete-button', disabled: isUploadingFile, onClick: completeRecording }, isUploadingFile ? React__default["default"].createElement(LoadingIndicatorIcon, null) : React__default["default"].createElement(SendIconV2, null))) : (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__stop-button', "data-testid": 'audio-recorder-stop-button', onClick: recorder.stop },
52473
+ state.stopped ? (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__complete-button', "data-testid": 'audio-recorder-complete-button', disabled: isUploadingFile, onClick: completeRecording }, isUploadingFile ? React__default["default"].createElement(LoadingIndicatorIcon, null) : React__default["default"].createElement(SendIconV2, null))) : (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__stop-button', "data-testid": 'audio-recorder-stop-button', onClick: recorder.stop },
52465
52474
  React__default["default"].createElement(CheckSignIcon, null))))));
52466
52475
  };
52467
52476
 
@@ -54467,7 +54476,7 @@ var getImageDimensions = function (source) {
54467
54476
 
54468
54477
  var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (props, ref) {
54469
54478
  var _a;
54470
- var propAvatar = props.Avatar, _b = props.detailedView, detailedView = _b === void 0 ? true : _b, propHandleReaction = props.handleReaction, propLatestReactions = props.latest_reactions, propOwnReactions = props.own_reactions, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, _c = props.reverse, reverse = _c === void 0 ? false : _c;
54479
+ var propAvatar = props.Avatar, _b = props.detailedView, detailedView = _b === void 0 ? true : _b, propHandleReaction = props.handleReaction, propLatestReactions = props.latest_reactions, propOwnReactions = props.own_reactions, propReactionGroups = props.reaction_groups, propReactionOptions = props.reactionOptions, _c = props.reverse, reverse = _c === void 0 ? false : _c;
54471
54480
  var _d = useComponentContext('ReactionSelector'), contextAvatar = _d.Avatar, contextReactionOptions = _d.reactionOptions;
54472
54481
  var _e = useMessageContext('ReactionSelector'), contextHandleReaction = _e.handleReaction, message = _e.message;
54473
54482
  var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
@@ -54475,7 +54484,7 @@ var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (
54475
54484
  var handleReaction = propHandleReaction || contextHandleReaction;
54476
54485
  var latestReactions = propLatestReactions || (message === null || message === void 0 ? void 0 : message.latest_reactions) || [];
54477
54486
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions) || [];
54478
- var reactionCounts = propReactionCounts || (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
54487
+ var reactionGroups = propReactionGroups || (message === null || message === void 0 ? void 0 : message.reaction_groups) || {};
54479
54488
  var _f = React.useState(null), tooltipReactionType = _f[0], setTooltipReactionType = _f[1];
54480
54489
  var _g = React.useState(null), tooltipPositions = _g[0], setTooltipPositions = _g[1];
54481
54490
  var targetRef = React.useRef(null);
@@ -54535,9 +54544,10 @@ var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (
54535
54544
  React__default["default"].createElement("div", { className: 'arrow', style: { left: tooltipPositions === null || tooltipPositions === void 0 ? void 0 : tooltipPositions.arrow } }), (_a = getUsersPerReactionType(tooltipReactionType)) === null || _a === void 0 ? void 0 :
54536
54545
  _a.map(function (user, i, users) { return (React__default["default"].createElement("span", { className: 'latest-user-username', key: "key-".concat(i, "-").concat(user) }, "".concat(user).concat(i < users.length - 1 ? ', ' : ''))); }))),
54537
54546
  React__default["default"].createElement("ul", { className: 'str-chat__message-reactions-list str-chat__message-reactions-options' }, reactionOptions.map(function (_a) {
54547
+ var _b, _c;
54538
54548
  var Component = _a.Component, reactionName = _a.name, reactionType = _a.type;
54539
54549
  var latestUser = getLatestUserForReactionType(reactionType);
54540
- var count = reactionCounts && reactionCounts[reactionType];
54550
+ var count = (_c = (_b = reactionGroups[reactionType]) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
54541
54551
  return (React__default["default"].createElement("li", { key: reactionType },
54542
54552
  React__default["default"].createElement("button", { "aria-label": "Select Reaction: ".concat(reactionName || reactionType), className: clsx('str-chat__message-reactions-list-item str-chat__message-reactions-option', {
54543
54553
  'str-chat__message-reactions-option-selected': iHaveReactedWithReaction(reactionType),
@@ -54554,18 +54564,21 @@ var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (
54554
54564
  var ReactionSelector = React__default["default"].memo(UnMemoizedReactionSelector);
54555
54565
 
54556
54566
  var defaultReactionsSort = function (a, b) {
54567
+ if (a.firstReactionAt && b.firstReactionAt) {
54568
+ return +a.firstReactionAt - +b.firstReactionAt;
54569
+ }
54557
54570
  return a.reactionType.localeCompare(b.reactionType, 'en');
54558
54571
  };
54559
54572
  var useProcessReactions = function (params) {
54560
54573
  var _a;
54561
- var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions, propSortReactions = params.sortReactions;
54574
+ var propOwnReactions = params.own_reactions, propReactionGroups = params.reaction_groups, propReactionOptions = params.reactionOptions, propReactions = params.reactions, propSortReactions = params.sortReactions;
54562
54575
  var _b = useMessageContext('useProcessReactions'), message = _b.message, contextSortReactions = _b.sortReactions;
54563
54576
  var contextReactionOptions = useComponentContext('useProcessReactions').reactionOptions;
54564
54577
  var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
54565
54578
  var sortReactions = (_a = propSortReactions !== null && propSortReactions !== void 0 ? propSortReactions : contextSortReactions) !== null && _a !== void 0 ? _a : defaultReactionsSort;
54566
54579
  var latestReactions = propReactions || message.latest_reactions;
54567
54580
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions);
54568
- var reactionCounts = propReactionCounts || message.reaction_counts;
54581
+ var reactionGroups = propReactionGroups || (message === null || message === void 0 ? void 0 : message.reaction_groups);
54569
54582
  var isOwnReaction = React.useCallback(function (reactionType) { var _a; return (_a = ownReactions === null || ownReactions === void 0 ? void 0 : ownReactions.some(function (reaction) { return reaction.type === reactionType; })) !== null && _a !== void 0 ? _a : false; }, [ownReactions]);
54570
54583
  var getEmojiByReactionType = React.useCallback(function (reactionType) { var _a, _b; return (_b = (_a = reactionOptions.find(function (_a) {
54571
54584
  var type = _a.type;
@@ -54586,21 +54599,25 @@ var useProcessReactions = function (params) {
54586
54599
  })) !== null && _a !== void 0 ? _a : [];
54587
54600
  }, [latestReactions]);
54588
54601
  var existingReactions = React.useMemo(function () {
54589
- if (!reactionCounts) {
54602
+ if (!reactionGroups) {
54590
54603
  return [];
54591
54604
  }
54592
- var unsortedReactions = Object.entries(reactionCounts).flatMap(function (_a) {
54593
- var reactionType = _a[0], reactionCount = _a[1];
54594
- if (reactionCount === 0 || !isSupportedReaction(reactionType)) {
54605
+ var unsortedReactions = Object.entries(reactionGroups).flatMap(function (_a) {
54606
+ var reactionType = _a[0], _b = _a[1], count = _b.count, first_reaction_at = _b.first_reaction_at, last_reaction_at = _b.last_reaction_at;
54607
+ if (count === 0 || !isSupportedReaction(reactionType)) {
54595
54608
  return [];
54596
54609
  }
54610
+ var latestReactedUserNames = getLatestReactedUserNames(reactionType);
54597
54611
  return [
54598
54612
  {
54599
54613
  EmojiComponent: getEmojiByReactionType(reactionType),
54614
+ firstReactionAt: first_reaction_at ? new Date(first_reaction_at) : null,
54600
54615
  isOwnReaction: isOwnReaction(reactionType),
54601
- latestReactedUserNames: getLatestReactedUserNames(reactionType),
54602
- reactionCount: reactionCount,
54616
+ lastReactionAt: last_reaction_at ? new Date(last_reaction_at) : null,
54617
+ latestReactedUserNames: latestReactedUserNames,
54618
+ reactionCount: count,
54603
54619
  reactionType: reactionType,
54620
+ unlistedReactedUserCount: count - latestReactedUserNames.length,
54604
54621
  },
54605
54622
  ];
54606
54623
  });
@@ -54610,7 +54627,7 @@ var useProcessReactions = function (params) {
54610
54627
  getLatestReactedUserNames,
54611
54628
  isOwnReaction,
54612
54629
  isSupportedReaction,
54613
- reactionCounts,
54630
+ reactionGroups,
54614
54631
  sortReactions,
54615
54632
  ]);
54616
54633
  var hasReactions = existingReactions.length > 0;
@@ -55064,25 +55081,32 @@ var useReactionHandler = function (message) {
55064
55081
  var client = useChatContext('useReactionHandler').client;
55065
55082
  var createMessagePreview = React.useCallback(function (add, reaction, message) {
55066
55083
  var _a, _b;
55067
- var newReactionCounts = (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
55084
+ var newReactionGroups = (message === null || message === void 0 ? void 0 : message.reaction_groups) || {};
55068
55085
  var reactionType = reaction.type;
55069
- var hasReaction = !!newReactionCounts[reactionType];
55086
+ var hasReaction = !!newReactionGroups[reactionType];
55070
55087
  if (add) {
55071
- newReactionCounts[reactionType] = hasReaction ? newReactionCounts[reactionType] + 1 : 1;
55088
+ var timestamp = new Date().toISOString();
55089
+ newReactionGroups[reactionType] = hasReaction
55090
+ ? exports.__assign(exports.__assign({}, newReactionGroups[reactionType]), { count: newReactionGroups[reactionType].count + 1 }) : {
55091
+ count: 1,
55092
+ first_reaction_at: timestamp,
55093
+ last_reaction_at: timestamp,
55094
+ sum_scores: 1,
55095
+ };
55072
55096
  }
55073
55097
  else {
55074
- if (hasReaction && newReactionCounts[reactionType] > 1) {
55075
- newReactionCounts[reactionType]--;
55098
+ if (hasReaction && newReactionGroups[reactionType].count > 1) {
55099
+ newReactionGroups[reactionType] = exports.__assign(exports.__assign({}, newReactionGroups[reactionType]), { count: newReactionGroups[reactionType].count - 1 });
55076
55100
  }
55077
55101
  else {
55078
- delete newReactionCounts[reactionType];
55102
+ delete newReactionGroups[reactionType];
55079
55103
  }
55080
55104
  }
55081
55105
  var newReactions = add
55082
55106
  ? __spreadArray([reaction], ((message === null || message === void 0 ? void 0 : message.latest_reactions) || []), true) : (_a = message.latest_reactions) === null || _a === void 0 ? void 0 : _a.filter(function (item) { return !(item.type === reaction.type && item.user_id === reaction.user_id); });
55083
55107
  var newOwnReactions = add
55084
55108
  ? __spreadArray([reaction], ((message === null || message === void 0 ? void 0 : message.own_reactions) || []), true) : (_b = message === null || message === void 0 ? void 0 : message.own_reactions) === null || _b === void 0 ? void 0 : _b.filter(function (item) { return item.type !== reaction.type; });
55085
- return exports.__assign(exports.__assign({}, message), { latest_reactions: newReactions || message.latest_reactions, own_reactions: newOwnReactions, reaction_counts: newReactionCounts, reaction_scores: newReactionCounts });
55109
+ return exports.__assign(exports.__assign({}, message), { latest_reactions: newReactions || message.latest_reactions, own_reactions: newOwnReactions, reaction_groups: newReactionGroups });
55086
55110
  },
55087
55111
  // eslint-disable-next-line react-hooks/exhaustive-deps
55088
55112
  [client.user, client.userID]);
@@ -55891,7 +55915,7 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
55891
55915
  ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_d = previousMessage.user) === null || _d === void 0 ? void 0 : _d.id) ||
55892
55916
  previousMessage.type === 'error' ||
55893
55917
  previousMessage.deleted_at ||
55894
- (message.reaction_counts && Object.keys(message.reaction_counts).length > 0) ||
55918
+ (message.reaction_groups && Object.keys(message.reaction_groups).length > 0) ||
55895
55919
  isMessageEdited(previousMessage);
55896
55920
  var isBottomMessage = !nextMessage ||
55897
55921
  nextMessage.customType === CUSTOM_MESSAGE_TYPE.date ||
@@ -55901,7 +55925,7 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
55901
55925
  ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_g = nextMessage.user) === null || _g === void 0 ? void 0 : _g.id) ||
55902
55926
  nextMessage.type === 'error' ||
55903
55927
  nextMessage.deleted_at ||
55904
- (nextMessage.reaction_counts && Object.keys(nextMessage.reaction_counts).length > 0) ||
55928
+ (nextMessage.reaction_groups && Object.keys(nextMessage.reaction_groups).length > 0) ||
55905
55929
  isMessageEdited(message);
55906
55930
  if (!isTopMessage && !isBottomMessage) {
55907
55931
  if (message.deleted_at || message.type === 'error')
@@ -10564,6 +10564,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, ReactDOM, streamC
10564
10564
  return;
10565
10565
  try {
10566
10566
  audioRef.current.pause();
10567
+ setIsPlaying(false);
10567
10568
  }
10568
10569
  catch (e) {
10569
10570
  registerError(new Error(t('Failed to play the recording')));
@@ -48862,7 +48863,10 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, ReactDOM, streamC
48862
48863
  }
48863
48864
  return areMessagesEqual(prevMessage, nextMessage);
48864
48865
  };
48865
- var messageHasReactions = function (message) { var _a; return Object.values((_a = message === null || message === void 0 ? void 0 : message.reaction_counts) !== null && _a !== void 0 ? _a : {}).some(function (count) { return count > 0; }); };
48866
+ var messageHasReactions = function (message) { var _a; return Object.values((_a = message === null || message === void 0 ? void 0 : message.reaction_groups) !== null && _a !== void 0 ? _a : {}).some(function (_a) {
48867
+ var count = _a.count;
48868
+ return count > 0;
48869
+ }); };
48866
48870
  var messageHasAttachments = function (message) { return !!(message === null || message === void 0 ? void 0 : message.attachments) && !!message.attachments.length; };
48867
48871
  var getImages = function (message) {
48868
48872
  if (!(message === null || message === void 0 ? void 0 : message.attachments)) {
@@ -51381,9 +51385,9 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, ReactDOM, streamC
51381
51385
  React__default["default"].createElement("path", { d: 'M12 9.5C12 12.26 9.76 14.5 7 14.5C4.24 14.5 2 12.26 2 9.5H0C0 13.03 2.61 15.93 6 16.42V19.5H8V16.42C11.39 15.93 14 13.03 14 9.5H12Z' }))); };
51382
51386
  var BinIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 32 32', xmlns: 'http://www.w3.org/2000/svg' },
51383
51387
  React__default["default"].createElement("path", { d: 'M8.00033 25.3333C8.00033 26.8 9.20033 28 10.667 28H21.3337C22.8003 28 24.0003 26.8 24.0003 25.3333V12C24.0003 10.5333 22.8003 9.33333 21.3337 9.33333H10.667C9.20033 9.33333 8.00033 10.5333 8.00033 12V25.3333ZM24.0003 5.33333H20.667L19.7203 4.38667C19.4803 4.14667 19.1337 4 18.787 4H13.2137C12.867 4 12.5203 4.14667 12.2803 4.38667L11.3337 5.33333H8.00033C7.26699 5.33333 6.66699 5.93333 6.66699 6.66667C6.66699 7.4 7.26699 8 8.00033 8H24.0003C24.7337 8 25.3337 7.4 25.3337 6.66667C25.3337 5.93333 24.7337 5.33333 24.0003 5.33333Z' }))); };
51384
- var PauseIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 16 20', xmlns: 'http://www.w3.org/2000/svg' },
51388
+ var PauseIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'str-chat__pause-icon', fill: 'currentColor', viewBox: '0 0 16 20', xmlns: 'http://www.w3.org/2000/svg' },
51385
51389
  React__default["default"].createElement("path", { d: 'M0 19.3333H5.33333V0.666626H0V19.3333ZM10.6667 0.666626V19.3333H16V0.666626H10.6667Z' }))); };
51386
- var PlayIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 14 18', xmlns: 'http://www.w3.org/2000/svg' },
51390
+ var PlayIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'str-chat__play-icon', fill: 'currentColor', viewBox: '0 0 14 18', xmlns: 'http://www.w3.org/2000/svg' },
51387
51391
  React__default["default"].createElement("path", { d: 'M0.236328 2.09338V15.9067C0.236328 16.9601 1.39633 17.6001 2.28966 17.0267L13.143 10.1201C13.9697 9.60005 13.9697 8.40005 13.143 7.86672L2.28966 0.973385C1.39633 0.400051 0.236328 1.04005 0.236328 2.09338Z' }))); };
51388
51392
  var CheckSignIcon = function () { return (React__default["default"].createElement("svg", { fill: 'currentColor', viewBox: '0 0 18 14', xmlns: 'http://www.w3.org/2000/svg' },
51389
51393
  React__default["default"].createElement("path", { d: 'M5.79457 10.875L2.32457 7.40502C1.93457 7.01502 1.30457 7.01502 0.91457 7.40502C0.52457 7.79502 0.52457 8.42502 0.91457 8.81502L5.09457 12.995C5.48457 13.385 6.11457 13.385 6.50457 12.995L17.0846 2.41502C17.4746 2.02502 17.4746 1.39502 17.0846 1.00502C16.6946 0.615024 16.0646 0.615024 15.6746 1.00502L5.79457 10.875Z' }))); };
@@ -51425,7 +51429,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, ReactDOM, streamC
51425
51429
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
51426
51430
  React__default["default"].createElement("audio", { ref: audioRef },
51427
51431
  React__default["default"].createElement("source", { src: props.src, type: mimeType })),
51428
- React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__toggle-playback-button', onClick: togglePlay }, isPlaying ? React__default["default"].createElement(PauseIcon, null) : React__default["default"].createElement(PlayIcon, null)),
51432
+ React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__toggle-playback-button', "data-testid": 'audio-recording-preview-toggle-play-btn', onClick: togglePlay }, isPlaying ? React__default["default"].createElement(PauseIcon, null) : React__default["default"].createElement(PlayIcon, null)),
51429
51433
  React__default["default"].createElement(RecordingTimer, { durationSeconds: displayedDuration }),
51430
51434
  React__default["default"].createElement("div", { className: 'str-chat__wave-progress-bar__track-container' },
51431
51435
  React__default["default"].createElement(WaveProgressBar, { progress: progress, seek: seek, waveformData: waveformData || [] }))));
@@ -51475,11 +51479,12 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, ReactDOM, streamC
51475
51479
  }, [recorder]);
51476
51480
  if (!recorder)
51477
51481
  return null;
51478
- return (React__default["default"].createElement("div", { className: 'str-chat__audio_recorder__waveform-box' }, amplitudes.slice(-maxDataPointsDrawn).map(function (amplitude, i) { return (React__default["default"].createElement("div", { className: 'str-chat__wave-progress-bar__amplitude-bar', key: "amplitude-".concat(i, "-voice-recording"), style: {
51479
- '--str-chat__wave-progress-bar__amplitude-bar-height': amplitude
51480
- ? amplitude * 100 + '%'
51481
- : '0%',
51482
- } })); })));
51482
+ return (React__default["default"].createElement("div", { className: 'str-chat__waveform-box-container' },
51483
+ React__default["default"].createElement("div", { className: 'str-chat__audio_recorder__waveform-box' }, amplitudes.slice(-maxDataPointsDrawn).map(function (amplitude, i) { return (React__default["default"].createElement("div", { className: 'str-chat__wave-progress-bar__amplitude-bar', key: "amplitude-".concat(i, "-voice-recording"), style: {
51484
+ '--str-chat__wave-progress-bar__amplitude-bar-height': amplitude
51485
+ ? amplitude * 100 + '%'
51486
+ : '0%',
51487
+ } })); }))));
51483
51488
  };
51484
51489
  var AudioRecordingInProgress = function () {
51485
51490
  var _a = useTimeElapsed(), secondsElapsed = _a.secondsElapsed, startCounter = _a.startCounter, stopCounter = _a.stopCounter;
@@ -51501,8 +51506,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, ReactDOM, streamC
51501
51506
  }, [recorder, startCounter, stopCounter]);
51502
51507
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
51503
51508
  React__default["default"].createElement(RecordingTimer, { durationSeconds: secondsElapsed }),
51504
- React__default["default"].createElement("div", { className: 'str-chat__waveform-box-container' },
51505
- React__default["default"].createElement(AudioRecordingWaveform, null))));
51509
+ React__default["default"].createElement(AudioRecordingWaveform, null)));
51506
51510
  };
51507
51511
 
51508
51512
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var Subscription = /** @class */ (function () {
@@ -64500,18 +64504,23 @@ bitsperframe: %d
64500
64504
  var _a, _b;
64501
64505
  var _c = useMessageInputContext().recordingController, completeRecording = _c.completeRecording, recorder = _c.recorder, recording = _c.recording, recordingState = _c.recordingState;
64502
64506
  var isUploadingFile = ((_a = recording === null || recording === void 0 ? void 0 : recording.$internal) === null || _a === void 0 ? void 0 : _a.uploadState) === 'uploading';
64507
+ var state = React$2.useMemo(function () { return ({
64508
+ paused: recordingState === exports.MediaRecordingState.PAUSED,
64509
+ recording: recordingState === exports.MediaRecordingState.RECORDING,
64510
+ stopped: recordingState === exports.MediaRecordingState.STOPPED,
64511
+ }); }, [recordingState]);
64503
64512
  if (!recorder)
64504
64513
  return null;
64505
64514
  return (React__default["default"].createElement("div", { className: 'str-chat__audio_recorder-container' },
64506
64515
  React__default["default"].createElement("div", { className: 'str-chat__audio_recorder', "data-testid": 'audio-recorder' },
64507
- React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__cancel-button', disabled: isUploadingFile, onClick: recorder.cancel },
64516
+ React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__cancel-button', "data-testid": 'cancel-recording-audio-button', disabled: isUploadingFile, onClick: recorder.cancel },
64508
64517
  React__default["default"].createElement(BinIcon, null)),
64509
- (recording === null || recording === void 0 ? void 0 : recording.asset_url) ? (React__default["default"].createElement(AudioRecordingPreview, { durationSeconds: (_b = recording.duration) !== null && _b !== void 0 ? _b : 0, mimeType: recording.mime_type, src: recording.asset_url, waveformData: recording.waveform_data })) : (React__default["default"].createElement(AudioRecordingInProgress, null)),
64510
- recordingState === exports.MediaRecordingState.PAUSED && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__resume-recording-button', onClick: recorder.resume },
64518
+ state.stopped && (recording === null || recording === void 0 ? void 0 : recording.asset_url) ? (React__default["default"].createElement(AudioRecordingPreview, { durationSeconds: (_b = recording.duration) !== null && _b !== void 0 ? _b : 0, mimeType: recording.mime_type, src: recording.asset_url, waveformData: recording.waveform_data })) : state.paused || state.recording ? (React__default["default"].createElement(AudioRecordingInProgress, null)) : null,
64519
+ state.paused && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__resume-recording-button', onClick: recorder.resume },
64511
64520
  React__default["default"].createElement(MicIcon, null))),
64512
- recordingState === exports.MediaRecordingState.RECORDING && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__pause-recording-button', onClick: recorder.pause },
64521
+ state.recording && (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__pause-recording-button', "data-testid": 'pause-recording-audio-button', onClick: recorder.pause },
64513
64522
  React__default["default"].createElement(PauseIcon, null))),
64514
- recordingState === exports.MediaRecordingState.STOPPED ? (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__complete-button', "data-testid": 'audio-recorder-complete-button', disabled: isUploadingFile, onClick: completeRecording }, isUploadingFile ? React__default["default"].createElement(LoadingIndicatorIcon, null) : React__default["default"].createElement(SendIconV2, null))) : (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__stop-button', "data-testid": 'audio-recorder-stop-button', onClick: recorder.stop },
64523
+ state.stopped ? (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__complete-button', "data-testid": 'audio-recorder-complete-button', disabled: isUploadingFile, onClick: completeRecording }, isUploadingFile ? React__default["default"].createElement(LoadingIndicatorIcon, null) : React__default["default"].createElement(SendIconV2, null))) : (React__default["default"].createElement("button", { className: 'str-chat__audio_recorder__stop-button', "data-testid": 'audio-recorder-stop-button', onClick: recorder.stop },
64515
64524
  React__default["default"].createElement(CheckSignIcon, null))))));
64516
64525
  };
64517
64526
 
@@ -66588,7 +66597,7 @@ bitsperframe: %d
66588
66597
 
66589
66598
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (props, ref) {
66590
66599
  var _a;
66591
- var propAvatar = props.Avatar, _b = props.detailedView, detailedView = _b === void 0 ? true : _b, propHandleReaction = props.handleReaction, propLatestReactions = props.latest_reactions, propOwnReactions = props.own_reactions, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, _c = props.reverse, reverse = _c === void 0 ? false : _c;
66600
+ var propAvatar = props.Avatar, _b = props.detailedView, detailedView = _b === void 0 ? true : _b, propHandleReaction = props.handleReaction, propLatestReactions = props.latest_reactions, propOwnReactions = props.own_reactions, propReactionGroups = props.reaction_groups, propReactionOptions = props.reactionOptions, _c = props.reverse, reverse = _c === void 0 ? false : _c;
66592
66601
  var _d = useComponentContext('ReactionSelector'), contextAvatar = _d.Avatar, contextReactionOptions = _d.reactionOptions;
66593
66602
  var _e = useMessageContext('ReactionSelector'), contextHandleReaction = _e.handleReaction, message = _e.message;
66594
66603
  var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
@@ -66596,7 +66605,7 @@ bitsperframe: %d
66596
66605
  var handleReaction = propHandleReaction || contextHandleReaction;
66597
66606
  var latestReactions = propLatestReactions || (message === null || message === void 0 ? void 0 : message.latest_reactions) || [];
66598
66607
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions) || [];
66599
- var reactionCounts = propReactionCounts || (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
66608
+ var reactionGroups = propReactionGroups || (message === null || message === void 0 ? void 0 : message.reaction_groups) || {};
66600
66609
  var _f = React$2.useState(null), tooltipReactionType = _f[0], setTooltipReactionType = _f[1];
66601
66610
  var _g = React$2.useState(null), tooltipPositions = _g[0], setTooltipPositions = _g[1];
66602
66611
  var targetRef = React$2.useRef(null);
@@ -66656,9 +66665,10 @@ bitsperframe: %d
66656
66665
  React__default["default"].createElement("div", { className: 'arrow', style: { left: tooltipPositions === null || tooltipPositions === void 0 ? void 0 : tooltipPositions.arrow } }), (_a = getUsersPerReactionType(tooltipReactionType)) === null || _a === void 0 ? void 0 :
66657
66666
  _a.map(function (user, i, users) { return (React__default["default"].createElement("span", { className: 'latest-user-username', key: "key-".concat(i, "-").concat(user) }, "".concat(user).concat(i < users.length - 1 ? ', ' : ''))); }))),
66658
66667
  React__default["default"].createElement("ul", { className: 'str-chat__message-reactions-list str-chat__message-reactions-options' }, reactionOptions.map(function (_a) {
66668
+ var _b, _c;
66659
66669
  var Component = _a.Component, reactionName = _a.name, reactionType = _a.type;
66660
66670
  var latestUser = getLatestUserForReactionType(reactionType);
66661
- var count = reactionCounts && reactionCounts[reactionType];
66671
+ var count = (_c = (_b = reactionGroups[reactionType]) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
66662
66672
  return (React__default["default"].createElement("li", { key: reactionType },
66663
66673
  React__default["default"].createElement("button", { "aria-label": "Select Reaction: ".concat(reactionName || reactionType), className: clsx('str-chat__message-reactions-list-item str-chat__message-reactions-option', {
66664
66674
  'str-chat__message-reactions-option-selected': iHaveReactedWithReaction(reactionType),
@@ -66675,18 +66685,21 @@ bitsperframe: %d
66675
66685
  var ReactionSelector = React__default["default"].memo(UnMemoizedReactionSelector);
66676
66686
 
66677
66687
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var defaultReactionsSort = function (a, b) {
66688
+ if (a.firstReactionAt && b.firstReactionAt) {
66689
+ return +a.firstReactionAt - +b.firstReactionAt;
66690
+ }
66678
66691
  return a.reactionType.localeCompare(b.reactionType, 'en');
66679
66692
  };
66680
66693
  var useProcessReactions = function (params) {
66681
66694
  var _a;
66682
- var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions, propSortReactions = params.sortReactions;
66695
+ var propOwnReactions = params.own_reactions, propReactionGroups = params.reaction_groups, propReactionOptions = params.reactionOptions, propReactions = params.reactions, propSortReactions = params.sortReactions;
66683
66696
  var _b = useMessageContext('useProcessReactions'), message = _b.message, contextSortReactions = _b.sortReactions;
66684
66697
  var contextReactionOptions = useComponentContext('useProcessReactions').reactionOptions;
66685
66698
  var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
66686
66699
  var sortReactions = (_a = propSortReactions !== null && propSortReactions !== void 0 ? propSortReactions : contextSortReactions) !== null && _a !== void 0 ? _a : defaultReactionsSort;
66687
66700
  var latestReactions = propReactions || message.latest_reactions;
66688
66701
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions);
66689
- var reactionCounts = propReactionCounts || message.reaction_counts;
66702
+ var reactionGroups = propReactionGroups || (message === null || message === void 0 ? void 0 : message.reaction_groups);
66690
66703
  var isOwnReaction = React$2.useCallback(function (reactionType) { var _a; return (_a = ownReactions === null || ownReactions === void 0 ? void 0 : ownReactions.some(function (reaction) { return reaction.type === reactionType; })) !== null && _a !== void 0 ? _a : false; }, [ownReactions]);
66691
66704
  var getEmojiByReactionType = React$2.useCallback(function (reactionType) { var _a, _b; return (_b = (_a = reactionOptions.find(function (_a) {
66692
66705
  var type = _a.type;
@@ -66707,21 +66720,25 @@ bitsperframe: %d
66707
66720
  })) !== null && _a !== void 0 ? _a : [];
66708
66721
  }, [latestReactions]);
66709
66722
  var existingReactions = React$2.useMemo(function () {
66710
- if (!reactionCounts) {
66723
+ if (!reactionGroups) {
66711
66724
  return [];
66712
66725
  }
66713
- var unsortedReactions = Object.entries(reactionCounts).flatMap(function (_a) {
66714
- var reactionType = _a[0], reactionCount = _a[1];
66715
- if (reactionCount === 0 || !isSupportedReaction(reactionType)) {
66726
+ var unsortedReactions = Object.entries(reactionGroups).flatMap(function (_a) {
66727
+ var reactionType = _a[0], _b = _a[1], count = _b.count, first_reaction_at = _b.first_reaction_at, last_reaction_at = _b.last_reaction_at;
66728
+ if (count === 0 || !isSupportedReaction(reactionType)) {
66716
66729
  return [];
66717
66730
  }
66731
+ var latestReactedUserNames = getLatestReactedUserNames(reactionType);
66718
66732
  return [
66719
66733
  {
66720
66734
  EmojiComponent: getEmojiByReactionType(reactionType),
66735
+ firstReactionAt: first_reaction_at ? new Date(first_reaction_at) : null,
66721
66736
  isOwnReaction: isOwnReaction(reactionType),
66722
- latestReactedUserNames: getLatestReactedUserNames(reactionType),
66723
- reactionCount: reactionCount,
66737
+ lastReactionAt: last_reaction_at ? new Date(last_reaction_at) : null,
66738
+ latestReactedUserNames: latestReactedUserNames,
66739
+ reactionCount: count,
66724
66740
  reactionType: reactionType,
66741
+ unlistedReactedUserCount: count - latestReactedUserNames.length,
66725
66742
  },
66726
66743
  ];
66727
66744
  });
@@ -66731,7 +66748,7 @@ bitsperframe: %d
66731
66748
  getLatestReactedUserNames,
66732
66749
  isOwnReaction,
66733
66750
  isSupportedReaction,
66734
- reactionCounts,
66751
+ reactionGroups,
66735
66752
  sortReactions,
66736
66753
  ]);
66737
66754
  var hasReactions = existingReactions.length > 0;
@@ -67185,25 +67202,32 @@ bitsperframe: %d
67185
67202
  var client = useChatContext('useReactionHandler').client;
67186
67203
  var createMessagePreview = React$2.useCallback(function (add, reaction, message) {
67187
67204
  var _a, _b;
67188
- var newReactionCounts = (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
67205
+ var newReactionGroups = (message === null || message === void 0 ? void 0 : message.reaction_groups) || {};
67189
67206
  var reactionType = reaction.type;
67190
- var hasReaction = !!newReactionCounts[reactionType];
67207
+ var hasReaction = !!newReactionGroups[reactionType];
67191
67208
  if (add) {
67192
- newReactionCounts[reactionType] = hasReaction ? newReactionCounts[reactionType] + 1 : 1;
67209
+ var timestamp = new Date().toISOString();
67210
+ newReactionGroups[reactionType] = hasReaction
67211
+ ? __assign(__assign({}, newReactionGroups[reactionType]), { count: newReactionGroups[reactionType].count + 1 }) : {
67212
+ count: 1,
67213
+ first_reaction_at: timestamp,
67214
+ last_reaction_at: timestamp,
67215
+ sum_scores: 1,
67216
+ };
67193
67217
  }
67194
67218
  else {
67195
- if (hasReaction && newReactionCounts[reactionType] > 1) {
67196
- newReactionCounts[reactionType]--;
67219
+ if (hasReaction && newReactionGroups[reactionType].count > 1) {
67220
+ newReactionGroups[reactionType] = __assign(__assign({}, newReactionGroups[reactionType]), { count: newReactionGroups[reactionType].count - 1 });
67197
67221
  }
67198
67222
  else {
67199
- delete newReactionCounts[reactionType];
67223
+ delete newReactionGroups[reactionType];
67200
67224
  }
67201
67225
  }
67202
67226
  var newReactions = add
67203
67227
  ? __spreadArray([reaction], ((message === null || message === void 0 ? void 0 : message.latest_reactions) || []), true) : (_a = message.latest_reactions) === null || _a === void 0 ? void 0 : _a.filter(function (item) { return !(item.type === reaction.type && item.user_id === reaction.user_id); });
67204
67228
  var newOwnReactions = add
67205
67229
  ? __spreadArray([reaction], ((message === null || message === void 0 ? void 0 : message.own_reactions) || []), true) : (_b = message === null || message === void 0 ? void 0 : message.own_reactions) === null || _b === void 0 ? void 0 : _b.filter(function (item) { return item.type !== reaction.type; });
67206
- return __assign(__assign({}, message), { latest_reactions: newReactions || message.latest_reactions, own_reactions: newOwnReactions, reaction_counts: newReactionCounts, reaction_scores: newReactionCounts });
67230
+ return __assign(__assign({}, message), { latest_reactions: newReactions || message.latest_reactions, own_reactions: newOwnReactions, reaction_groups: newReactionGroups });
67207
67231
  },
67208
67232
  // eslint-disable-next-line react-hooks/exhaustive-deps
67209
67233
  [client.user, client.userID]);
@@ -68022,7 +68046,7 @@ bitsperframe: %d
68022
68046
  ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_d = previousMessage.user) === null || _d === void 0 ? void 0 : _d.id) ||
68023
68047
  previousMessage.type === 'error' ||
68024
68048
  previousMessage.deleted_at ||
68025
- (message.reaction_counts && Object.keys(message.reaction_counts).length > 0) ||
68049
+ (message.reaction_groups && Object.keys(message.reaction_groups).length > 0) ||
68026
68050
  isMessageEdited(previousMessage);
68027
68051
  var isBottomMessage = !nextMessage ||
68028
68052
  nextMessage.customType === CUSTOM_MESSAGE_TYPE.date ||
@@ -68032,7 +68056,7 @@ bitsperframe: %d
68032
68056
  ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_g = nextMessage.user) === null || _g === void 0 ? void 0 : _g.id) ||
68033
68057
  nextMessage.type === 'error' ||
68034
68058
  nextMessage.deleted_at ||
68035
- (nextMessage.reaction_counts && Object.keys(nextMessage.reaction_counts).length > 0) ||
68059
+ (nextMessage.reaction_groups && Object.keys(nextMessage.reaction_groups).length > 0) ||
68036
68060
  isMessageEdited(message);
68037
68061
  if (!isTopMessage && !isBottomMessage) {
68038
68062
  if (message.deleted_at || message.type === 'error')
@@ -73280,7 +73304,7 @@ bitsperframe: %d
73280
73304
 
73281
73305
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
73282
73306
 
73283
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version$1 = '11.15.2';
73307
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version$1 = '11.16.0';
73284
73308
 
73285
73309
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useChat = function (_a) {
73286
73310
  var _b, _c;