stream-chat-react 10.14.0 → 11.0.0-rc.1

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 (47) hide show
  1. package/dist/browser.full-bundle.js +581 -529
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +5 -5
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Channel/Channel.d.ts +3 -2
  6. package/dist/components/Channel/Channel.d.ts.map +1 -1
  7. package/dist/components/Channel/Channel.js +46 -42
  8. package/dist/components/Reactions/ReactionSelector.d.ts +3 -8
  9. package/dist/components/Reactions/ReactionSelector.d.ts.map +1 -1
  10. package/dist/components/Reactions/ReactionSelector.js +18 -25
  11. package/dist/components/Reactions/ReactionsList.d.ts +3 -8
  12. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  13. package/dist/components/Reactions/ReactionsList.js +9 -12
  14. package/dist/components/Reactions/SimpleReactionsList.d.ts +2 -5
  15. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  16. package/dist/components/Reactions/SimpleReactionsList.js +12 -15
  17. package/dist/components/Reactions/SpriteImage.d.ts +12 -0
  18. package/dist/components/Reactions/SpriteImage.d.ts.map +1 -0
  19. package/dist/components/Reactions/SpriteImage.js +28 -0
  20. package/dist/components/Reactions/StreamEmoji.d.ts +18 -0
  21. package/dist/components/Reactions/StreamEmoji.d.ts.map +1 -0
  22. package/dist/components/Reactions/StreamEmoji.js +16 -0
  23. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +8 -10
  24. package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  25. package/dist/components/Reactions/hooks/useProcessReactions.js +14 -18
  26. package/dist/components/Reactions/index.d.ts +3 -0
  27. package/dist/components/Reactions/index.d.ts.map +1 -1
  28. package/dist/components/Reactions/index.js +3 -0
  29. package/dist/components/Reactions/reactionOptions.d.ts +8 -0
  30. package/dist/components/Reactions/reactionOptions.d.ts.map +1 -0
  31. package/dist/components/Reactions/reactionOptions.js +11 -0
  32. package/dist/components/Reactions/utils/utils.d.ts +1 -0
  33. package/dist/components/Reactions/utils/utils.d.ts.map +1 -1
  34. package/dist/components/Reactions/utils/utils.js +12 -0
  35. package/dist/context/ComponentContext.d.ts +2 -0
  36. package/dist/context/ComponentContext.d.ts.map +1 -1
  37. package/dist/context/EmojiContext.d.ts +1 -2
  38. package/dist/context/EmojiContext.d.ts.map +1 -1
  39. package/dist/context/EmojiContext.js +1 -3
  40. package/dist/index.cjs.js +160 -115
  41. package/dist/index.cjs.js.map +1 -1
  42. package/dist/types/types.d.ts +3 -0
  43. package/dist/types/types.d.ts.map +1 -1
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.d.ts.map +1 -1
  46. package/dist/version.js +1 -1
  47. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -55,7 +55,6 @@ var streamChat = require('stream-chat');
55
55
  var deepequal = require('react-fast-compare');
56
56
  var ReactDOM = require('react-dom');
57
57
  var reactVirtuoso = require('react-virtuoso');
58
- var nimbleEmoji = require('emoji-mart/dist/components/emoji/nimble-emoji');
59
58
  var nimblePicker = require('emoji-mart/dist/components/picker/nimble-picker');
60
59
 
61
60
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -117,7 +116,6 @@ var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce$1);
117
116
  var throttle__default = /*#__PURE__*/_interopDefaultLegacy(throttle);
118
117
  var deepequal__default = /*#__PURE__*/_interopDefaultLegacy(deepequal);
119
118
  var ReactDOM__namespace = /*#__PURE__*/_interopNamespace(ReactDOM);
120
- var nimbleEmoji__default = /*#__PURE__*/_interopDefaultLegacy(nimbleEmoji);
121
119
  var nimblePicker__default = /*#__PURE__*/_interopDefaultLegacy(nimblePicker);
122
120
 
123
121
  /******************************************************************************
@@ -506,14 +504,12 @@ var withComponentContext = function (Component) {
506
504
  return WithComponentContextComponent;
507
505
  };
508
506
 
509
- var DefaultEmoji$1 = React__default["default"].lazy(function () { return Promise.resolve().then(function () { return DefaultEmoji; }); });
510
507
  var DefaultEmojiPicker$1 = React__default["default"].lazy(function () { return Promise.resolve().then(function () { return DefaultEmojiPicker; }); });
511
508
  var EmojiContext = React__default["default"].createContext(undefined);
512
509
  var EmojiProvider = function (_a) {
513
510
  var children = _a.children, value = _a.value;
514
- var _b = value.Emoji, Emoji = _b === void 0 ? DefaultEmoji$1 : _b, emojiConfig = value.emojiConfig, _c = value.EmojiIndex, EmojiIndex = _c === void 0 ? DefaultEmojiIndex__default["default"] : _c, _d = value.EmojiPicker, EmojiPicker = _d === void 0 ? DefaultEmojiPicker$1 : _d;
511
+ var emojiConfig = value.emojiConfig, _b = value.EmojiIndex, EmojiIndex = _b === void 0 ? DefaultEmojiIndex__default["default"] : _b, _c = value.EmojiPicker, EmojiPicker = _c === void 0 ? DefaultEmojiPicker$1 : _c;
515
512
  var emojiContextValue = {
516
- Emoji: Emoji,
517
513
  emojiConfig: emojiConfig,
518
514
  EmojiIndex: EmojiIndex,
519
515
  EmojiPicker: EmojiPicker,
@@ -27387,8 +27383,6 @@ var defaultMinimalEmojis = [
27387
27383
  __assign(__assign({ colons: ':pensive:', id: 'sad', name: 'sad', sheet_x: 0, sheet_y: 1 }, commonEmoji), emojiSetDef),
27388
27384
  __assign(__assign({ colons: ':angry:', id: 'angry', name: 'angry', sheet_x: 1, sheet_y: 1 }, commonEmoji), emojiSetDef),
27389
27385
  ];
27390
- // use this only for small lists like in ReactionSelector
27391
- var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data), { emojis: {} })); };
27392
27386
 
27393
27387
  var useCreateChannelStateContext = function (value) {
27394
27388
  var _a;
@@ -32318,24 +32312,32 @@ var isMutableRef = function (ref) {
32318
32312
  }
32319
32313
  return false;
32320
32314
  };
32315
+ var getImageDimensions = function (source) {
32316
+ return new Promise(function (resolve, reject) {
32317
+ var image = new Image();
32318
+ image.addEventListener('load', function () {
32319
+ resolve([image.width, image.height]);
32320
+ }, { once: true });
32321
+ image.addEventListener('error', function () { return reject("Couldn't load image from ".concat(source)); }, {
32322
+ once: true,
32323
+ });
32324
+ image.src = source;
32325
+ });
32326
+ };
32321
32327
 
32322
32328
  var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (props, ref) {
32323
32329
  var _a;
32324
- var _b = props.additionalEmojiProps, additionalEmojiProps = _b === void 0 ? {} : _b, propAvatar = props.Avatar, _c = props.detailedView, detailedView = _c === void 0 ? true : _c, propHandleReaction = props.handleReaction, propLatestReactions = props.latest_reactions, propOwnReactions = props.own_reactions, propReactionCounts = props.reaction_counts, propReactionOptions = props.reactionOptions, _d = props.reverse, reverse = _d === void 0 ? false : _d;
32325
- var contextAvatar = useComponentContext('ReactionSelector').Avatar;
32326
- var _e = useEmojiContext('ReactionSelector'), Emoji = _e.Emoji, emojiConfig = _e.emojiConfig;
32327
- var _f = useMessageContext('ReactionSelector'), contextHandleReaction = _f.handleReaction, message = _f.message;
32328
- var _g = emojiConfig || {}, defaultMinimalEmojis = _g.defaultMinimalEmojis, fullEmojiData = _g.emojiData, emojiSetDef = _g.emojiSetDef;
32330
+ 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;
32331
+ var _d = useComponentContext('ReactionSelector'), contextAvatar = _d.Avatar, contextReactionOptions = _d.reactionOptions;
32332
+ var _e = useMessageContext('ReactionSelector'), contextHandleReaction = _e.handleReaction, message = _e.message;
32333
+ var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
32329
32334
  var Avatar$1 = propAvatar || contextAvatar || Avatar;
32330
32335
  var handleReaction = propHandleReaction || contextHandleReaction;
32331
32336
  var latestReactions = propLatestReactions || (message === null || message === void 0 ? void 0 : message.latest_reactions) || [];
32332
32337
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions) || [];
32333
32338
  var reactionCounts = propReactionCounts || (message === null || message === void 0 ? void 0 : message.reaction_counts) || {};
32334
- var reactionOptions = propReactionOptions || defaultMinimalEmojis;
32335
- var reactionsAreCustom = !!(propReactionOptions === null || propReactionOptions === void 0 ? void 0 : propReactionOptions.length);
32336
- var emojiData = React.useMemo(function () { return (reactionsAreCustom ? fullEmojiData : getStrippedEmojiData(fullEmojiData)); }, [fullEmojiData, reactionsAreCustom]);
32337
- var _h = React.useState(null), tooltipReactionType = _h[0], setTooltipReactionType = _h[1];
32338
- var _j = React.useState(null), tooltipPositions = _j[0], setTooltipPositions = _j[1];
32339
+ var _f = React.useState(null), tooltipReactionType = _f[0], setTooltipReactionType = _f[1];
32340
+ var _g = React.useState(null), tooltipPositions = _g[0], setTooltipPositions = _g[1];
32339
32341
  var targetRef = React.useRef(null);
32340
32342
  var tooltipRef = React.useRef(null);
32341
32343
  var showTooltip = React.useCallback(function (event, reactionType) {
@@ -32392,17 +32394,17 @@ var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (
32392
32394
  } },
32393
32395
  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 :
32394
32396
  _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 ? ', ' : ''))); }))),
32395
- React__default["default"].createElement("ul", { className: 'str-chat__message-reactions-list str-chat__message-reactions-options' }, reactionOptions.map(function (reactionOption) {
32396
- var latestUser = getLatestUserForReactionType(reactionOption.id);
32397
- var count = reactionCounts && reactionCounts[reactionOption.id];
32398
- return (React__default["default"].createElement("li", { key: "item-".concat(reactionOption.id) },
32399
- React__default["default"].createElement("button", { "aria-label": "Select Reaction: ".concat(reactionOption.name), className: clsx('str-chat__message-reactions-list-item str-chat__message-reactions-option', {
32400
- 'str-chat__message-reactions-option-selected': iHaveReactedWithReaction(reactionOption.id),
32401
- }), "data-text": reactionOption.id, onClick: function (event) { return handleReaction(reactionOption.id, event); } },
32402
- !!count && detailedView && (React__default["default"].createElement("div", { className: 'latest-user str-chat__message-reactions-last-user', onClick: hideTooltip, onMouseEnter: function (e) { return showTooltip(e, reactionOption.id); }, onMouseLeave: hideTooltip }, latestUser ? (React__default["default"].createElement(Avatar$1, { image: latestUser.image, name: latestUser.name, size: 20, user: latestUser })) : (React__default["default"].createElement("div", { className: 'latest-user-not-found' })))),
32403
- React__default["default"].createElement(React.Suspense, { fallback: null },
32404
- React__default["default"].createElement("span", { className: 'str-chat__message-reaction-emoji' },
32405
- React__default["default"].createElement(Emoji, __assign({ data: emojiData, emoji: reactionOption, size: 20 }, (reactionsAreCustom ? additionalEmojiProps : emojiSetDef))))),
32397
+ React__default["default"].createElement("ul", { className: 'str-chat__message-reactions-list str-chat__message-reactions-options' }, reactionOptions.map(function (_a) {
32398
+ var Component = _a.Component, reactionName = _a.name, reactionType = _a.type;
32399
+ var latestUser = getLatestUserForReactionType(reactionType);
32400
+ var count = reactionCounts && reactionCounts[reactionType];
32401
+ return (React__default["default"].createElement("li", { key: reactionType },
32402
+ 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', {
32403
+ 'str-chat__message-reactions-option-selected': iHaveReactedWithReaction(reactionType),
32404
+ }), "data-text": reactionType, onClick: function (event) { return handleReaction(reactionType, event); } },
32405
+ !!count && detailedView && (React__default["default"].createElement("div", { className: 'latest-user str-chat__message-reactions-last-user', onClick: hideTooltip, onMouseEnter: function (e) { return showTooltip(e, reactionType); }, onMouseLeave: hideTooltip }, latestUser ? (React__default["default"].createElement(Avatar$1, { image: latestUser.image, name: latestUser.name, size: 20, user: latestUser })) : (React__default["default"].createElement("div", { className: 'latest-user-not-found' })))),
32406
+ React__default["default"].createElement("span", { className: 'str-chat__message-reaction-emoji' },
32407
+ React__default["default"].createElement(Component, null)),
32406
32408
  Boolean(count) && detailedView && (React__default["default"].createElement("span", { className: 'str-chat__message-reactions-list-item__count' }, count || '')))));
32407
32409
  }))));
32408
32410
  });
@@ -32412,19 +32414,18 @@ var UnMemoizedReactionSelector = React__default["default"].forwardRef(function (
32412
32414
  var ReactionSelector = React__default["default"].memo(UnMemoizedReactionSelector);
32413
32415
 
32414
32416
  var useProcessReactions = function (params) {
32415
- var _a = params.additionalEmojiProps, additionalEmojiProps = _a === void 0 ? {} : _a, emojiConfig = params.emojiConfig, propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions;
32416
- var message = useMessageContext('ReactionsList').message;
32417
- var _b = emojiConfig || {}, defaultMinimalEmojis = _b.defaultMinimalEmojis, fullEmojiData = _b.emojiData, emojiSetDef = _b.emojiSetDef;
32417
+ var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions;
32418
+ var message = useMessageContext('useProcessReactions').message;
32419
+ var contextReactionOptions = useComponentContext('useProcessReactions').reactionOptions;
32420
+ var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
32418
32421
  var latestReactions = propReactions || message.latest_reactions || [];
32419
32422
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions) || [];
32420
32423
  var reactionCounts = propReactionCounts || message.reaction_counts || {};
32421
- var reactionOptions = propReactionOptions || defaultMinimalEmojis;
32422
- var reactionsAreCustom = !!(propReactionOptions === null || propReactionOptions === void 0 ? void 0 : propReactionOptions.length);
32423
32424
  var iHaveReactedWithReaction = React.useCallback(function (reactionType) { return ownReactions.find(function (reaction) { return reaction.type === reactionType; }); }, [ownReactions]);
32424
- var getEmojiByReactionType = React.useCallback(function (type) {
32425
- return reactionOptions.find(function (option) { return option.id === type; });
32426
- }, [reactionOptions]);
32427
- var emojiData = React.useMemo(function () { return (reactionsAreCustom ? fullEmojiData : getStrippedEmojiData(fullEmojiData)); }, [fullEmojiData, reactionsAreCustom]);
32425
+ var getEmojiByReactionType = React.useCallback(function (reactionType) { return reactionOptions.find(function (_a) {
32426
+ var type = _a.type;
32427
+ return type === reactionType;
32428
+ }); }, [reactionOptions]);
32428
32429
  var latestReactionTypes = React.useMemo(function () {
32429
32430
  return latestReactions.reduce(function (reactionTypes, _a) {
32430
32431
  var type = _a.type;
@@ -32435,13 +32436,13 @@ var useProcessReactions = function (params) {
32435
32436
  }, []);
32436
32437
  }, [latestReactions]);
32437
32438
  var supportedReactionMap = React.useMemo(function () {
32438
- return reactionOptions.reduce(function (acc, _a) {
32439
- var id = _a.id;
32440
- acc[id] = true;
32441
- return acc;
32439
+ return reactionOptions.reduce(function (map, _a) {
32440
+ var reactionType = _a.type;
32441
+ map[reactionType] = true;
32442
+ return map;
32442
32443
  }, {});
32443
32444
  }, [reactionOptions]);
32444
- var supportedReactionsArePresent = React.useMemo(function () { return latestReactionTypes.some(function (type) { return supportedReactionMap[type]; }); }, [latestReactionTypes, supportedReactionMap]);
32445
+ var supportedReactionsArePresent = React.useMemo(function () { return latestReactionTypes.some(function (reactionType) { return supportedReactionMap[reactionType]; }); }, [latestReactionTypes, supportedReactionMap]);
32445
32446
  var totalReactionCount = React.useMemo(function () {
32446
32447
  return supportedReactionsArePresent
32447
32448
  ? Object.values(reactionCounts).reduce(function (total, count) { return total + count; }, 0)
@@ -32458,9 +32459,7 @@ var useProcessReactions = function (params) {
32458
32459
  }, {});
32459
32460
  }, [latestReactions]);
32460
32461
  return {
32461
- additionalEmojiProps: reactionsAreCustom ? additionalEmojiProps : emojiSetDef,
32462
32462
  aggregatedUserNamesByType: aggregatedUserNamesByType,
32463
- emojiData: emojiData,
32464
32463
  getEmojiByReactionType: getEmojiByReactionType,
32465
32464
  iHaveReactedWithReaction: iHaveReactedWithReaction,
32466
32465
  latestReactions: latestReactions,
@@ -32485,9 +32484,8 @@ var ButtonWithTooltip = function (_a) {
32485
32484
  };
32486
32485
  var UnMemoizedReactionsList = function (props) {
32487
32486
  var onClick = props.onClick, _a = props.reverse, reverse = _a === void 0 ? false : _a, rest = __rest(props, ["onClick", "reverse"]);
32488
- var _b = useEmojiContext('ReactionsList'), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
32489
32487
  var onReactionListClick = useMessageContext('ReactionsList').onReactionListClick;
32490
- var _c = useProcessReactions(__assign({ emojiConfig: emojiConfig }, rest)), additionalEmojiProps = _c.additionalEmojiProps, aggregatedUserNamesByType = _c.aggregatedUserNamesByType, emojiData = _c.emojiData, getEmojiByReactionType = _c.getEmojiByReactionType, iHaveReactedWithReaction = _c.iHaveReactedWithReaction, latestReactions = _c.latestReactions, latestReactionTypes = _c.latestReactionTypes, reactionCounts = _c.reactionCounts, supportedReactionsArePresent = _c.supportedReactionsArePresent, totalReactionCount = _c.totalReactionCount;
32488
+ var _b = useProcessReactions(rest), aggregatedUserNamesByType = _b.aggregatedUserNamesByType, getEmojiByReactionType = _b.getEmojiByReactionType, iHaveReactedWithReaction = _b.iHaveReactedWithReaction, latestReactions = _b.latestReactions, latestReactionTypes = _b.latestReactionTypes, reactionCounts = _b.reactionCounts, supportedReactionsArePresent = _b.supportedReactionsArePresent, totalReactionCount = _b.totalReactionCount;
32491
32489
  if (!latestReactions.length)
32492
32490
  return null;
32493
32491
  if (!supportedReactionsArePresent)
@@ -32497,17 +32495,16 @@ var UnMemoizedReactionsList = function (props) {
32497
32495
  }), "data-testid": 'reaction-list', onClick: onClick || onReactionListClick, onKeyUp: onClick || onReactionListClick, role: 'figure' },
32498
32496
  React__default["default"].createElement("ul", { className: 'str-chat__message-reactions' },
32499
32497
  latestReactionTypes.map(function (reactionType) {
32500
- var emojiObject = getEmojiByReactionType(reactionType);
32498
+ var ReactionOption = getEmojiByReactionType(reactionType);
32501
32499
  var isOwnReaction = iHaveReactedWithReaction(reactionType);
32502
- return emojiObject ? (React__default["default"].createElement("li", { className: clsx('str-chat__message-reaction', {
32500
+ return (ReactionOption && (React__default["default"].createElement("li", { className: clsx('str-chat__message-reaction', {
32503
32501
  'str-chat__message-reaction-own': isOwnReaction,
32504
- }), key: emojiObject.id },
32505
- React__default["default"].createElement(ButtonWithTooltip, { "aria-label": "Reactions: ".concat(reactionType), title: aggregatedUserNamesByType[reactionType].join(', '), type: 'button' },
32506
- React__default["default"].createElement(React.Suspense, { fallback: null },
32507
- React__default["default"].createElement("span", { className: 'str-chat__message-reaction-emoji' },
32508
- React__default["default"].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 16 }, additionalEmojiProps)))),
32502
+ }), key: reactionType },
32503
+ React__default["default"].createElement(ButtonWithTooltip, { "aria-label": "Reactions: ".concat(reactionType), "data-testid": "reactions-list-button-".concat(reactionType), title: aggregatedUserNamesByType[reactionType].join(', '), type: 'button' },
32504
+ React__default["default"].createElement("span", { className: 'str-chat__message-reaction-emoji' },
32505
+ React__default["default"].createElement(ReactionOption.Component, null)),
32509
32506
  "\u00A0",
32510
- React__default["default"].createElement("span", { className: 'str-chat__message-reaction-count', "data-testclass": 'reaction-list-reaction-count' }, reactionCounts[reactionType])))) : null;
32507
+ React__default["default"].createElement("span", { className: 'str-chat__message-reaction-count', "data-testclass": 'reaction-list-reaction-count' }, reactionCounts[reactionType])))));
32511
32508
  }),
32512
32509
  React__default["default"].createElement("li", null,
32513
32510
  React__default["default"].createElement("span", { className: 'str-chat__reaction-list--counter' }, totalReactionCount)))));
@@ -32533,10 +32530,9 @@ var WithTooltip = function (_a) {
32533
32530
  };
32534
32531
  var UnMemoizedSimpleReactionsList = function (props) {
32535
32532
  var propHandleReaction = props.handleReaction, rest = __rest(props, ["handleReaction"]);
32536
- var _a = useEmojiContext('SimpleReactionsList'), Emoji = _a.Emoji, emojiConfig = _a.emojiConfig;
32537
32533
  var contextHandleReaction = useMessageContext('SimpleReactionsList').handleReaction;
32538
- var _b = useProcessReactions(__assign({ emojiConfig: emojiConfig }, rest)), additionalEmojiProps = _b.additionalEmojiProps, emojiData = _b.emojiData, getEmojiByReactionType = _b.getEmojiByReactionType, iHaveReactedWithReaction = _b.iHaveReactedWithReaction, latestReactions = _b.latestReactions, latestReactionTypes = _b.latestReactionTypes, supportedReactionsArePresent = _b.supportedReactionsArePresent, totalReactionCount = _b.totalReactionCount;
32539
- var _c = React.useState(undefined), tooltipReactionType = _c[0], setTooltipReactionType = _c[1];
32534
+ var _a = useProcessReactions(rest), getEmojiByReactionType = _a.getEmojiByReactionType, iHaveReactedWithReaction = _a.iHaveReactedWithReaction, latestReactions = _a.latestReactions, latestReactionTypes = _a.latestReactionTypes, supportedReactionsArePresent = _a.supportedReactionsArePresent, totalReactionCount = _a.totalReactionCount;
32535
+ var _b = React.useState(undefined), tooltipReactionType = _b[0], setTooltipReactionType = _b[1];
32540
32536
  var themeVersion = useChatContext('SimpleReactionsList').themeVersion;
32541
32537
  var handleReaction = propHandleReaction || contextHandleReaction;
32542
32538
  if (!latestReactions.length)
@@ -32556,27 +32552,77 @@ var UnMemoizedSimpleReactionsList = function (props) {
32556
32552
  };
32557
32553
  return (React__default["default"].createElement("div", { className: 'str-chat__message-reactions-container' },
32558
32554
  React__default["default"].createElement("ul", { className: 'str-chat__simple-reactions-list str-chat__message-reactions', "data-testid": 'simple-reaction-list', onMouseLeave: function () { return setTooltipReactionType(undefined); } },
32559
- latestReactionTypes.map(function (reactionType, i) {
32555
+ latestReactionTypes.map(function (reactionType) {
32560
32556
  var _a;
32561
- var emojiObject = getEmojiByReactionType(reactionType);
32557
+ var ReactionOption = getEmojiByReactionType(reactionType);
32562
32558
  var isOwnReaction = iHaveReactedWithReaction(reactionType);
32563
- var tooltipVisible = emojiObject && tooltipReactionType === (emojiObject === null || emojiObject === void 0 ? void 0 : emojiObject.id);
32559
+ var tooltipVisible = tooltipReactionType === reactionType;
32564
32560
  var tooltipContent = (_a = getUsersPerReactionType(tooltipReactionType)) === null || _a === void 0 ? void 0 : _a.join(', ');
32565
- return emojiObject ? (React__default["default"].createElement("li", { className: clsx('str-chat__simple-reactions-list-item', {
32561
+ return (ReactionOption && (React__default["default"].createElement("li", { className: clsx('str-chat__simple-reactions-list-item', {
32566
32562
  'str-chat__message-reaction-own': isOwnReaction,
32567
- }), key: "".concat(emojiObject.id, "-").concat(i), onClick: function (event) { return handleReaction(reactionType, event); }, onKeyUp: function (event) { return handleReaction(reactionType, event); } },
32563
+ }), key: reactionType, onClick: function (event) { return handleReaction(reactionType, event); }, onKeyUp: function (event) { return handleReaction(reactionType, event); } },
32568
32564
  React__default["default"].createElement(WithTooltip, { onMouseEnter: function () { return setTooltipReactionType(reactionType); }, onMouseLeave: function () { return setTooltipReactionType(undefined); }, title: tooltipContent },
32569
- React__default["default"].createElement(React.Suspense, { fallback: null },
32570
- React__default["default"].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 13 }, additionalEmojiProps))),
32565
+ React__default["default"].createElement(ReactionOption.Component, null),
32571
32566
  "\u00A0",
32572
32567
  tooltipVisible && themeVersion === '1' && (React__default["default"].createElement("div", { className: 'str-chat__simple-reactions-list-tooltip' },
32573
32568
  React__default["default"].createElement("div", { className: 'arrow' }),
32574
- tooltipContent))))) : null;
32569
+ tooltipContent))))));
32575
32570
  }),
32576
32571
  React__default["default"].createElement("li", { className: 'str-chat__simple-reactions-list-item--last-number' }, totalReactionCount))));
32577
32572
  };
32578
32573
  var SimpleReactionsList = React__default["default"].memo(UnMemoizedSimpleReactionsList);
32579
32574
 
32575
+ var SpriteImage = function (_a) {
32576
+ var columns = _a.columns, fallback = _a.fallback, height = _a.height, position = _a.position, rows = _a.rows, spriteUrl = _a.spriteUrl, width = _a.width;
32577
+ var _b = React.useState([0, 0]), _c = _b[0], spriteWidth = _c[0], spriteHeight = _c[1], setSpriteDimensions = _b[1];
32578
+ React.useEffect(function () {
32579
+ getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);
32580
+ }, [spriteUrl]);
32581
+ var x = position[0], y = position[1];
32582
+ var spriteItemWidth = spriteWidth / columns;
32583
+ var spriteItemHeight = spriteHeight / rows;
32584
+ var resizeRatio = 1;
32585
+ if (!width && height)
32586
+ resizeRatio = height / spriteItemHeight;
32587
+ if (width && !height)
32588
+ resizeRatio = width / spriteItemWidth;
32589
+ if (resizeRatio === Infinity)
32590
+ resizeRatio = 1;
32591
+ if (!spriteHeight || !spriteWidth)
32592
+ return React__default["default"].createElement(React__default["default"].Fragment, null, fallback);
32593
+ return (React__default["default"].createElement("div", { "data-testid": 'sprite-image', style: {
32594
+ backgroundImage: "url('".concat(spriteUrl, "')"),
32595
+ backgroundPosition: "".concat(x * (100 / (columns - 1)), "% ").concat(y * (100 / (rows - 1)), "%"),
32596
+ backgroundSize: "".concat(columns * 100, "% ").concat(rows * 100, "%"),
32597
+ height: height !== null && height !== void 0 ? height : spriteItemHeight * resizeRatio,
32598
+ width: width !== null && width !== void 0 ? width : spriteItemWidth * resizeRatio,
32599
+ } }));
32600
+ };
32601
+
32602
+ var StreamSpriteEmojiPositions = {
32603
+ angry: [1, 1],
32604
+ haha: [1, 0],
32605
+ like: [0, 0],
32606
+ love: [1, 2],
32607
+ sad: [0, 1],
32608
+ wow: [0, 2],
32609
+ };
32610
+ var STREAM_SPRITE_URL = 'https://getstream.imgix.net/images/emoji-sprite.png';
32611
+ var StreamEmoji = function (_a) {
32612
+ var fallback = _a.fallback, type = _a.type;
32613
+ var position = StreamSpriteEmojiPositions[type];
32614
+ return (React__default["default"].createElement(SpriteImage, { columns: 2, fallback: fallback, height: 18, position: position, rows: 3, spriteUrl: STREAM_SPRITE_URL }));
32615
+ };
32616
+
32617
+ /* eslint-disable sort-keys */
32618
+ var defaultReactionOptions = [
32619
+ { type: 'haha', Component: function () { return React__default["default"].createElement(StreamEmoji, { fallback: '\uD83D\uDE02', type: 'haha' }); }, name: 'Joy' },
32620
+ { type: 'like', Component: function () { return React__default["default"].createElement(StreamEmoji, { fallback: '\uD83D\uDC4D', type: 'like' }); }, name: 'Thumbs up' },
32621
+ { type: 'love', Component: function () { return React__default["default"].createElement(StreamEmoji, { fallback: '\u2764\uFE0F', type: 'love' }); }, name: 'Heart' },
32622
+ { type: 'sad', Component: function () { return React__default["default"].createElement(StreamEmoji, { fallback: '\uD83D\uDE14', type: 'sad' }); }, name: 'Sad' },
32623
+ { type: 'wow', Component: function () { return React__default["default"].createElement(StreamEmoji, { fallback: '\uD83D\uDE32', type: 'wow' }); }, name: 'Astonished' },
32624
+ ];
32625
+
32580
32626
  var MessageSimpleWithContext = function (props) {
32581
32627
  var _a;
32582
32628
  var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, endOfGroup = props.endOfGroup, firstOfGroup = props.firstOfGroup, groupedByUser = props.groupedByUser, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, highlighted = props.highlighted, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, renderText = props.renderText, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
@@ -33633,49 +33679,52 @@ var ChannelInner = function (props) {
33633
33679
  jumpToMessage,
33634
33680
  jumpToLatestMessage,
33635
33681
  ]);
33636
- var componentContextValue = React.useMemo(function () { return ({
33637
- Attachment: props.Attachment || Attachment,
33638
- AttachmentPreviewList: props.AttachmentPreviewList,
33639
- AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
33640
- AutocompleteSuggestionItem: props.AutocompleteSuggestionItem,
33641
- AutocompleteSuggestionList: props.AutocompleteSuggestionList,
33642
- Avatar: props.Avatar,
33643
- CooldownTimer: props.CooldownTimer,
33644
- DateSeparator: props.DateSeparator,
33645
- EditMessageInput: props.EditMessageInput,
33646
- EmojiIcon: props.EmojiIcon,
33647
- EmptyStateIndicator: props.EmptyStateIndicator,
33648
- FileUploadIcon: props.FileUploadIcon,
33649
- GiphyPreviewMessage: props.GiphyPreviewMessage,
33650
- HeaderComponent: props.HeaderComponent,
33651
- Input: props.Input,
33652
- LinkPreviewList: props.LinkPreviewList,
33653
- LoadingIndicator: props.LoadingIndicator,
33654
- Message: props.Message || MessageSimple,
33655
- MessageDeleted: props.MessageDeleted,
33656
- MessageListNotifications: props.MessageListNotifications,
33657
- MessageNotification: props.MessageNotification,
33658
- MessageOptions: props.MessageOptions,
33659
- MessageRepliesCountButton: props.MessageRepliesCountButton,
33660
- MessageStatus: props.MessageStatus,
33661
- MessageSystem: props.MessageSystem,
33662
- MessageTimestamp: props.MessageTimestamp,
33663
- ModalGallery: props.ModalGallery,
33664
- PinIndicator: props.PinIndicator,
33665
- QuotedMessage: props.QuotedMessage,
33666
- QuotedMessagePreview: props.QuotedMessagePreview,
33667
- ReactionSelector: props.ReactionSelector,
33668
- ReactionsList: props.ReactionsList,
33669
- SendButton: props.SendButton,
33670
- ThreadHead: props.ThreadHead,
33671
- ThreadHeader: props.ThreadHeader,
33672
- ThreadStart: props.ThreadStart,
33673
- TriggerProvider: props.TriggerProvider,
33674
- TypingIndicator: props.TypingIndicator,
33675
- VirtualMessage: props.VirtualMessage,
33676
- }); }, []);
33682
+ var componentContextValue = React.useMemo(function () {
33683
+ var _a;
33684
+ return ({
33685
+ Attachment: props.Attachment || Attachment,
33686
+ AttachmentPreviewList: props.AttachmentPreviewList,
33687
+ AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
33688
+ AutocompleteSuggestionItem: props.AutocompleteSuggestionItem,
33689
+ AutocompleteSuggestionList: props.AutocompleteSuggestionList,
33690
+ Avatar: props.Avatar,
33691
+ CooldownTimer: props.CooldownTimer,
33692
+ DateSeparator: props.DateSeparator,
33693
+ EditMessageInput: props.EditMessageInput,
33694
+ EmojiIcon: props.EmojiIcon,
33695
+ EmptyStateIndicator: props.EmptyStateIndicator,
33696
+ FileUploadIcon: props.FileUploadIcon,
33697
+ GiphyPreviewMessage: props.GiphyPreviewMessage,
33698
+ HeaderComponent: props.HeaderComponent,
33699
+ Input: props.Input,
33700
+ LinkPreviewList: props.LinkPreviewList,
33701
+ LoadingIndicator: props.LoadingIndicator,
33702
+ Message: props.Message || MessageSimple,
33703
+ MessageDeleted: props.MessageDeleted,
33704
+ MessageListNotifications: props.MessageListNotifications,
33705
+ MessageNotification: props.MessageNotification,
33706
+ MessageOptions: props.MessageOptions,
33707
+ MessageRepliesCountButton: props.MessageRepliesCountButton,
33708
+ MessageStatus: props.MessageStatus,
33709
+ MessageSystem: props.MessageSystem,
33710
+ MessageTimestamp: props.MessageTimestamp,
33711
+ ModalGallery: props.ModalGallery,
33712
+ PinIndicator: props.PinIndicator,
33713
+ QuotedMessage: props.QuotedMessage,
33714
+ QuotedMessagePreview: props.QuotedMessagePreview,
33715
+ reactionOptions: (_a = props.reactionOptions) !== null && _a !== void 0 ? _a : defaultReactionOptions,
33716
+ ReactionSelector: props.ReactionSelector,
33717
+ ReactionsList: props.ReactionsList,
33718
+ SendButton: props.SendButton,
33719
+ ThreadHead: props.ThreadHead,
33720
+ ThreadHeader: props.ThreadHeader,
33721
+ ThreadStart: props.ThreadStart,
33722
+ TriggerProvider: props.TriggerProvider,
33723
+ TypingIndicator: props.TypingIndicator,
33724
+ VirtualMessage: props.VirtualMessage,
33725
+ });
33726
+ }, [props.reactionOptions]);
33677
33727
  var emojiContextValue = React.useMemo(function () { return ({
33678
- Emoji: props.Emoji,
33679
33728
  emojiConfig: emojiConfig,
33680
33729
  EmojiIndex: props.EmojiIndex,
33681
33730
  EmojiPicker: props.EmojiPicker,
@@ -35003,7 +35052,7 @@ var UnMemoizedChannelList = function (props) {
35003
35052
  */
35004
35053
  var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
35005
35054
 
35006
- var version = '10.14.0';
35055
+ var version = '11.0.0-rc.1';
35007
35056
 
35008
35057
  var useChat = function (_a) {
35009
35058
  var _b, _c;
@@ -37048,13 +37097,6 @@ var Window = React__default["default"].memo(UnMemoizedWindow);
37048
37097
 
37049
37098
  // @ts-expect-error
37050
37099
 
37051
- var DefaultEmoji = /*#__PURE__*/Object.freeze({
37052
- __proto__: null,
37053
- 'default': nimbleEmoji__default["default"]
37054
- });
37055
-
37056
- // @ts-expect-error
37057
-
37058
37100
  var DefaultEmojiPicker = /*#__PURE__*/Object.freeze({
37059
37101
  __proto__: null,
37060
37102
  'default': nimblePicker__default["default"]
@@ -37183,6 +37225,8 @@ exports.SendButton = SendButton;
37183
37225
  exports.SendIconV1 = SendIconV1;
37184
37226
  exports.SendIconV2 = SendIconV2;
37185
37227
  exports.SimpleReactionsList = SimpleReactionsList;
37228
+ exports.SpriteImage = SpriteImage;
37229
+ exports.StreamEmoji = StreamEmoji;
37186
37230
  exports.Streami18n = Streami18n;
37187
37231
  exports.Thread = Thread;
37188
37232
  exports.ThreadHeader = ThreadHeader;
@@ -37209,6 +37253,7 @@ exports.darkModeTheme = darkModeTheme;
37209
37253
  exports.deTranslations = deTranslations;
37210
37254
  exports.defaultDateTimeParser = defaultDateTimeParser;
37211
37255
  exports.defaultPinPermissions = defaultPinPermissions;
37256
+ exports.defaultReactionOptions = defaultReactionOptions;
37212
37257
  exports.defaultScrollToItem = defaultScrollToItem;
37213
37258
  exports.defaultTimestampFormat = defaultTimestampFormat;
37214
37259
  exports.defaultTranslatorFunction = defaultTranslatorFunction;