stream-chat-react 10.14.0 → 10.15.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.
- package/dist/browser.full-bundle.js +6528 -6421
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +5 -5
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/AutoCompleteTextarea/List.js +1 -1
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.js +1 -1
- package/dist/components/DateSeparator/DateSeparator.js +1 -1
- package/dist/components/EventComponent/EventComponent.js +1 -1
- package/dist/components/Message/FixedHeightMessage.js +1 -1
- package/dist/components/Message/MessageText.js +2 -2
- package/dist/components/Message/index.d.ts +1 -0
- package/dist/components/Message/index.d.ts.map +1 -1
- package/dist/components/Message/index.js +1 -0
- package/dist/components/Message/renderText/Anchor.d.ts +4 -0
- package/dist/components/Message/renderText/Anchor.d.ts.map +1 -0
- package/dist/components/Message/renderText/Anchor.js +10 -0
- package/dist/components/Message/renderText/Emoji.d.ts +3 -0
- package/dist/components/Message/renderText/Emoji.d.ts.map +1 -0
- package/dist/components/Message/renderText/Emoji.js +5 -0
- package/dist/components/Message/renderText/Mention.d.ts +18 -0
- package/dist/components/Message/renderText/Mention.d.ts.map +1 -0
- package/dist/components/Message/renderText/Mention.js +5 -0
- package/dist/components/Message/renderText/index.d.ts +5 -0
- package/dist/components/Message/renderText/index.d.ts.map +1 -0
- package/dist/components/Message/renderText/index.js +3 -0
- package/dist/components/Message/renderText/regex.d.ts +5 -0
- package/dist/components/Message/renderText/regex.d.ts.map +1 -0
- package/dist/components/Message/renderText/regex.js +21 -0
- package/dist/components/Message/renderText/rehypePlugins.d.ts +7 -0
- package/dist/components/Message/renderText/rehypePlugins.d.ts.map +1 -0
- package/dist/components/Message/renderText/rehypePlugins.js +60 -0
- package/dist/components/Message/renderText/renderText.d.ts +21 -0
- package/dist/components/Message/renderText/renderText.d.ts.map +1 -0
- package/dist/components/Message/renderText/renderText.js +126 -0
- package/dist/components/Message/types.d.ts +1 -1
- package/dist/components/Message/types.d.ts.map +1 -1
- package/dist/components/Message/utils.d.ts +1 -0
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/Message/utils.js +8 -0
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +1 -3
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +36 -6
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +39 -122
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +23 -0
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -0
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +70 -0
- package/dist/components/MessageList/hooks/MessageList/index.d.ts +5 -0
- package/dist/components/MessageList/hooks/MessageList/index.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/MessageList/index.js +4 -0
- package/dist/components/MessageList/hooks/{useEnrichedMessages.d.ts → MessageList/useEnrichedMessages.d.ts} +3 -3
- package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/{useEnrichedMessages.js → MessageList/useEnrichedMessages.js} +3 -3
- package/dist/components/MessageList/hooks/{useMessageListElements.d.ts → MessageList/useMessageListElements.d.ts} +4 -4
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/{useMessageListElements.js → MessageList/useMessageListElements.js} +9 -9
- package/dist/components/MessageList/hooks/{useMessageListScrollManager.d.ts → MessageList/useMessageListScrollManager.d.ts} +2 -2
- package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/{useMessageListScrollManager.js → MessageList/useMessageListScrollManager.js} +1 -1
- package/dist/components/MessageList/hooks/{useScrollLocationLogic.d.ts → MessageList/useScrollLocationLogic.d.ts} +2 -2
- package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts +7 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/index.js +6 -0
- package/dist/components/MessageList/hooks/{useGiphyPreview.d.ts → VirtualizedMessageList/useGiphyPreview.d.ts} +2 -2
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/{useGiphyPreview.js → VirtualizedMessageList/useGiphyPreview.js} +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts +10 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.js +20 -0
- package/dist/components/MessageList/hooks/{useNewMessageNotification.d.ts → VirtualizedMessageList/useNewMessageNotification.d.ts} +2 -2
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/{usePrependMessagesCount.d.ts → VirtualizedMessageList/usePrependMessagesCount.d.ts} +2 -2
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts +12 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.js +28 -0
- package/dist/components/MessageList/hooks/{useShouldForceScrollToBottom.d.ts → VirtualizedMessageList/useShouldForceScrollToBottom.d.ts} +2 -2
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/index.d.ts +7 -7
- package/dist/components/MessageList/hooks/index.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/index.js +7 -7
- package/dist/context/MessageContext.d.ts +1 -1
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/index.cjs.js +627 -584
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/utils/generateRandomId.d.ts +6 -0
- package/dist/utils/generateRandomId.d.ts.map +1 -0
- package/dist/utils/generateRandomId.js +5 -0
- package/dist/utils/getWholeChar.d.ts +2 -0
- package/dist/utils/getWholeChar.d.ts.map +1 -0
- package/dist/utils/getWholeChar.js +26 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useGiphyPreview.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useMessageListScrollManager.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useNewMessageNotification.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/usePrependMessagesCount.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +0 -1
- package/dist/components/MessageList/hooks/useShouldForceScrollToBottom.d.ts.map +0 -1
- package/dist/utils.d.ts +0 -42
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -253
- /package/dist/components/MessageList/hooks/{useScrollLocationLogic.js → MessageList/useScrollLocationLogic.js} +0 -0
- /package/dist/components/MessageList/hooks/{useNewMessageNotification.js → VirtualizedMessageList/useNewMessageNotification.js} +0 -0
- /package/dist/components/MessageList/hooks/{usePrependMessagesCount.js → VirtualizedMessageList/usePrependMessagesCount.js} +0 -0
- /package/dist/components/MessageList/hooks/{useShouldForceScrollToBottom.js → VirtualizedMessageList/useShouldForceScrollToBottom.js} +0 -0
|
@@ -3,9 +3,9 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
5
5
|
import { useChatContext } from '../../context/ChatContext';
|
|
6
|
-
import { escapeRegExp } from '../../utils';
|
|
7
6
|
import { Item } from './Item';
|
|
8
7
|
import { DefaultSuggestionListHeader } from './Header';
|
|
8
|
+
import { escapeRegExp } from '../Message/renderText';
|
|
9
9
|
export var List = function (_a) {
|
|
10
10
|
var className = _a.className, component = _a.component, currentTrigger = _a.currentTrigger, dropdownScroll = _a.dropdownScroll, getSelectedItem = _a.getSelectedItem, getTextToReplace = _a.getTextToReplace, PropHeader = _a.Header, itemClassName = _a.itemClassName, itemStyle = _a.itemStyle, onSelect = _a.onSelect, selectionEnd = _a.selectionEnd, style = _a.style, PropSuggestionItem = _a.SuggestionItem, propValue = _a.value, values = _a.values;
|
|
11
11
|
var _b = useComponentContext('SuggestionList'), AutocompleteSuggestionHeader = _b.AutocompleteSuggestionHeader, AutocompleteSuggestionItem = _b.AutocompleteSuggestionItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,WAAW,CACrB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;IACpD,8BAA8B;IAC9B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;IACxD;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,2IA8DlB,CAAC"}
|
|
@@ -10,7 +10,7 @@ var UnMemoizedDateSeparator = function (props) {
|
|
|
10
10
|
messageCreatedAt: messageCreatedAt,
|
|
11
11
|
tDateTimeParser: tDateTimeParser,
|
|
12
12
|
});
|
|
13
|
-
return (React.createElement("div", { className: 'str-chat__date-separator' },
|
|
13
|
+
return (React.createElement("div", { className: 'str-chat__date-separator', "data-testid": 'date-separator' },
|
|
14
14
|
(position === 'right' || position === 'center') && (React.createElement("hr", { className: 'str-chat__date-separator-line' })),
|
|
15
15
|
React.createElement("div", { className: 'str-chat__date-separator-date' }, unread ? "".concat(t('New'), " - ").concat(formattedDate) : formattedDate),
|
|
16
16
|
(position === 'left' || position === 'center') && (React.createElement("hr", { className: 'str-chat__date-separator-line' }))));
|
|
@@ -13,7 +13,7 @@ var UnMemoizedEventComponent = function (props) {
|
|
|
13
13
|
var _e = message.created_at, created_at = _e === void 0 ? '' : _e, event = message.event, text = message.text, type = message.type;
|
|
14
14
|
var getDateOptions = { messageCreatedAt: created_at.toString(), tDateTimeParser: tDateTimeParser };
|
|
15
15
|
if (type === 'system')
|
|
16
|
-
return (React.createElement("div", { className: 'str-chat__message--system' },
|
|
16
|
+
return (React.createElement("div", { className: 'str-chat__message--system', "data-testid": 'message-system' },
|
|
17
17
|
React.createElement("div", { className: 'str-chat__message--system__text' },
|
|
18
18
|
React.createElement("div", { className: 'str-chat__message--system__line' }),
|
|
19
19
|
React.createElement("p", null, text),
|
|
@@ -11,7 +11,7 @@ import { useChatContext } from '../../context/ChatContext';
|
|
|
11
11
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
12
12
|
import { useMessageContext } from '../../context/MessageContext';
|
|
13
13
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
14
|
-
import { renderText } from '
|
|
14
|
+
import { renderText } from './renderText';
|
|
15
15
|
var selectColor = function (number, dark) {
|
|
16
16
|
var hue = number * 137.508; // use golden angle approximation
|
|
17
17
|
return "hsl(".concat(hue, ",").concat(dark ? '50%' : '85%', ", ").concat(dark ? '75%' : '55%', ")");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
2
|
import { QuotedMessage as DefaultQuotedMessage } from './QuotedMessage';
|
|
3
|
-
import { messageHasAttachments } from './utils';
|
|
3
|
+
import { isOnlyEmojis, messageHasAttachments } from './utils';
|
|
4
4
|
import { useComponentContext, useMessageContext, useTranslationContext } from '../../context';
|
|
5
|
-
import { renderText as defaultRenderText
|
|
5
|
+
import { renderText as defaultRenderText } from './renderText';
|
|
6
6
|
var UnMemoizedMessageTextComponent = function (props) {
|
|
7
7
|
var _a, _b;
|
|
8
8
|
var customInnerClass = props.customInnerClass, _c = props.customWrapperClass, customWrapperClass = _c === void 0 ? '' : _c, propMessage = props.message, propsRenderText = props.renderText, _d = props.theme, theme = _d === void 0 ? 'simple' : _d;
|
|
@@ -10,6 +10,7 @@ export * from './MessageStatus';
|
|
|
10
10
|
export * from './MessageText';
|
|
11
11
|
export * from './MessageTimestamp';
|
|
12
12
|
export * from './QuotedMessage';
|
|
13
|
+
export * from './renderText';
|
|
13
14
|
export * from './types';
|
|
14
15
|
export * from './utils';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Message/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Message/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Anchor.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/Anchor.tsx"],"names":[],"mappings":"AACA,OAAc,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,eAAO,MAAM,MAAM,uBAAwB,eAAe,GAAG,CAAC,GAAG,kBAAkB,gBAgBlF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import clsx from 'clsx';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export var Anchor = function (_a) {
|
|
4
|
+
var children = _a.children, href = _a.href;
|
|
5
|
+
var isEmail = href === null || href === void 0 ? void 0 : href.startsWith('mailto:');
|
|
6
|
+
var isUrl = href === null || href === void 0 ? void 0 : href.startsWith('http');
|
|
7
|
+
if (!href || (!isEmail && !isUrl))
|
|
8
|
+
return React.createElement(React.Fragment, null, children);
|
|
9
|
+
return (React.createElement("a", { className: clsx({ 'str-chat__message-url-link': isUrl }), href: href, rel: 'nofollow noreferrer noopener', target: '_blank' }, children));
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Emoji.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/Emoji.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,eAAO,MAAM,KAAK,iBAAkB,kBAAkB,gBAIrD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ReactMarkdownProps } from 'react-markdown/lib/complex-types';
|
|
2
|
+
import type { UserResponse } from 'stream-chat';
|
|
3
|
+
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
4
|
+
export declare type MentionProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = ReactMarkdownProps & {
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated will be removed in the next major release, transition to using `node.mentionedUser` instead
|
|
7
|
+
*/
|
|
8
|
+
mentioned_user: UserResponse<StreamChatGenerics>;
|
|
9
|
+
node: {
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated will be removed in the next major release, transition to using `node.mentionedUser` instead
|
|
12
|
+
*/
|
|
13
|
+
mentioned_user: UserResponse<StreamChatGenerics>;
|
|
14
|
+
mentionedUser: UserResponse<StreamChatGenerics>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare const Mention: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ children, node: { mentionedUser }, }: MentionProps<StreamChatGenerics>) => JSX.Element;
|
|
18
|
+
//# sourceMappingURL=Mention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mention.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/Mention.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,YAAY,CACtB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,kBAAkB,GAAG;IACvB;;OAEG;IACH,cAAc,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACjD,IAAI,EAAE;QACJ;;WAEG;QACH,cAAc,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACjD,aAAa,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC;KACjD,CAAC;CACH,CAAC;AACF,eAAO,MAAM,OAAO,6KASnB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MentionProps } from './Mention';
|
|
2
|
+
export { emojiMarkdownPlugin, mentionsMarkdownPlugin } from './rehypePlugins';
|
|
3
|
+
export { escapeRegExp, matchMarkdownLinks, messageCodeBlocks } from './regex';
|
|
4
|
+
export * from './renderText';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9E,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function escapeRegExp(text: string): string;
|
|
2
|
+
export declare const detectHttp: RegExp;
|
|
3
|
+
export declare const messageCodeBlocks: (message: string) => RegExpMatchArray;
|
|
4
|
+
export declare const matchMarkdownLinks: (message: string) => (string | null)[];
|
|
5
|
+
//# sourceMappingURL=regex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/regex.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAExC;AAED,eAAO,MAAM,UAAU,QAA6B,CAAC;AAErD,eAAO,MAAM,iBAAiB,YAAa,MAAM,qBAIhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAa,MAAM,sBAajD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function escapeRegExp(text) {
|
|
2
|
+
return text.replace(/[-[\]{}()*+?.,/\\^$|#]/g, '\\$&');
|
|
3
|
+
}
|
|
4
|
+
export var detectHttp = /(http(s?):\/\/)?(www\.)?/;
|
|
5
|
+
export var messageCodeBlocks = function (message) {
|
|
6
|
+
var codeRegex = /```[a-z]*\n[\s\S]*?\n```|`[a-z]*[\s\S]*?`/gm;
|
|
7
|
+
var matches = message.match(codeRegex);
|
|
8
|
+
return matches || [];
|
|
9
|
+
};
|
|
10
|
+
export var matchMarkdownLinks = function (message) {
|
|
11
|
+
var regexMdLinks = /\[([^[]+)\](\(.*\))/gm;
|
|
12
|
+
var matches = message.match(regexMdLinks);
|
|
13
|
+
var singleMatch = /\[([^[]+)\]\((.*)\)/;
|
|
14
|
+
var links = matches
|
|
15
|
+
? matches.map(function (match) {
|
|
16
|
+
var i = singleMatch.exec(match);
|
|
17
|
+
return i && [i[1], i[2]];
|
|
18
|
+
})
|
|
19
|
+
: [];
|
|
20
|
+
return links.flat();
|
|
21
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Content, Root } from 'hast';
|
|
2
|
+
import type { UserResponse } from 'stream-chat';
|
|
3
|
+
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
4
|
+
export declare type HNode = Content | Root;
|
|
5
|
+
export declare const mentionsMarkdownPlugin: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(mentioned_users: UserResponse<StreamChatGenerics>[]) => () => (tree: HNode) => HNode;
|
|
6
|
+
export declare const emojiMarkdownPlugin: () => (node: HNode) => import("hast-util-find-and-replace/lib").Node;
|
|
7
|
+
//# sourceMappingURL=rehypePlugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rehypePlugins.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/rehypePlugins.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;AACnC,eAAO,MAAM,sBAAsB,0JAuBR,KAAK,KAAG,KAoClC,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAIL,KAAK,kDAG/B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { findAndReplace } from 'hast-util-find-and-replace';
|
|
2
|
+
import { u } from 'unist-builder';
|
|
3
|
+
import { visit } from 'unist-util-visit';
|
|
4
|
+
import emojiRegex from 'emoji-regex';
|
|
5
|
+
import { escapeRegExp } from './regex';
|
|
6
|
+
export var mentionsMarkdownPlugin = function (mentioned_users) { return function () {
|
|
7
|
+
var mentioned_usernames = mentioned_users
|
|
8
|
+
.map(function (user) { return user.name || user.id; })
|
|
9
|
+
.filter(Boolean)
|
|
10
|
+
.map(escapeRegExp);
|
|
11
|
+
var mentionedUsersRegex = new RegExp(mentioned_usernames.map(function (username) { return "@".concat(username); }).join('|'), 'g');
|
|
12
|
+
var replace = function (match) {
|
|
13
|
+
var usernameOrId = match.replace('@', '');
|
|
14
|
+
var user = mentioned_users.find(function (_a) {
|
|
15
|
+
var id = _a.id, name = _a.name;
|
|
16
|
+
return name === usernameOrId || id === usernameOrId;
|
|
17
|
+
});
|
|
18
|
+
return u('element', { mentionedUser: user, tagName: 'mention' }, [u('text', match)]);
|
|
19
|
+
};
|
|
20
|
+
var transform = function (tree) {
|
|
21
|
+
if (!mentioned_usernames.length)
|
|
22
|
+
return tree;
|
|
23
|
+
// handles special cases of mentions where user.name is an e-mail
|
|
24
|
+
// Remark GFM translates all e-mail-like text nodes to links creating
|
|
25
|
+
// two separate child nodes "@" and "your.name@as.email" instead of
|
|
26
|
+
// keeping it as one text node with value "@your.name@as.email"
|
|
27
|
+
// this piece finds these two separated nodes and merges them together
|
|
28
|
+
// before "replace" function takes over
|
|
29
|
+
visit(tree, function (node, index, parent) {
|
|
30
|
+
var _a;
|
|
31
|
+
if (index === null)
|
|
32
|
+
return;
|
|
33
|
+
if (!parent)
|
|
34
|
+
return;
|
|
35
|
+
var nextChild = parent.children.at(index + 1);
|
|
36
|
+
var nextChildHref = (_a = nextChild === null || nextChild === void 0 ? void 0 : nextChild.properties) === null || _a === void 0 ? void 0 : _a.href;
|
|
37
|
+
if (node.type === 'text' &&
|
|
38
|
+
// text value has to have @ sign at the end of the string
|
|
39
|
+
// and no other characters except whitespace can precede it
|
|
40
|
+
// valid cases: "text @", "@", " @"
|
|
41
|
+
// invalid cases: "text@", "@text",
|
|
42
|
+
/.?\s?@$|^@$/.test(node.value) &&
|
|
43
|
+
(nextChildHref === null || nextChildHref === void 0 ? void 0 : nextChildHref.startsWith('mailto:'))) {
|
|
44
|
+
var newTextValue = node.value.replace(/@$/, '');
|
|
45
|
+
var username = nextChildHref.replace('mailto:', '');
|
|
46
|
+
parent.children[index] = u('text', newTextValue);
|
|
47
|
+
parent.children[index + 1] = u('text', "@".concat(username));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return findAndReplace(tree, mentionedUsersRegex, replace);
|
|
51
|
+
};
|
|
52
|
+
return transform;
|
|
53
|
+
}; };
|
|
54
|
+
export var emojiMarkdownPlugin = function () {
|
|
55
|
+
var replace = function (match) {
|
|
56
|
+
return u('element', { tagName: 'emoji' }, [u('text', match)]);
|
|
57
|
+
};
|
|
58
|
+
var transform = function (node) { return findAndReplace(node, emojiRegex(), replace); };
|
|
59
|
+
return transform;
|
|
60
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import { Options } from 'react-markdown';
|
|
3
|
+
import { MentionProps } from './Mention';
|
|
4
|
+
import type { ReactMarkdownProps } from 'react-markdown/lib/complex-types';
|
|
5
|
+
import type { PluggableList } from 'react-markdown/lib/react-markdown';
|
|
6
|
+
import type { UserResponse } from 'stream-chat';
|
|
7
|
+
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
8
|
+
export declare type RenderTextPluginConfigurator = (defaultPlugins: PluggableList) => PluggableList;
|
|
9
|
+
export declare const defaultAllowedTagNames: Array<keyof JSX.IntrinsicElements | 'emoji' | 'mention'>;
|
|
10
|
+
export declare const markDownRenderers: RenderTextOptions['customMarkDownRenderers'];
|
|
11
|
+
export declare type RenderTextOptions<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
|
|
12
|
+
allowedTagNames?: Array<keyof JSX.IntrinsicElements | 'emoji' | 'mention' | (string & {})>;
|
|
13
|
+
customMarkDownRenderers?: Options['components'] & Partial<{
|
|
14
|
+
emoji: ComponentType<ReactMarkdownProps>;
|
|
15
|
+
mention: ComponentType<MentionProps<StreamChatGenerics>>;
|
|
16
|
+
}>;
|
|
17
|
+
getRehypePlugins?: RenderTextPluginConfigurator;
|
|
18
|
+
getRemarkPlugins?: RenderTextPluginConfigurator;
|
|
19
|
+
};
|
|
20
|
+
export declare const renderText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(text?: string, mentionedUsers?: UserResponse<StreamChatGenerics>[] | undefined, { allowedTagNames, customMarkDownRenderers, getRehypePlugins, getRemarkPlugins, }?: RenderTextOptions) => JSX.Element | null;
|
|
21
|
+
//# sourceMappingURL=renderText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderText.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/renderText/renderText.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAsB,EAAE,OAAO,EAAkB,MAAM,gBAAgB,CAAC;AAOxE,OAAO,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AAIlD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,4BAA4B,GAAG,CAAC,cAAc,EAAE,aAAa,KAAK,aAAa,CAAC;AAE5F,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAkB3F,CAAC;AAsBF,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,CAAC,yBAAyB,CAI1E,CAAC;AAEF,oBAAY,iBAAiB,CAC3B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IAEF,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3F,uBAAuB,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7C,OAAO,CAAC;QACN,KAAK,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;QACzC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC;KAC1D,CAAC,CAAC;IACL,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,UAAU,4FAGd,MAAM,uJAOV,iBAAiB,uBAsGrB,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { __assign, __rest, __spreadArray } from "tslib";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import ReactMarkdown, { uriTransformer } from 'react-markdown';
|
|
4
|
+
import { find } from 'linkifyjs';
|
|
5
|
+
import uniqBy from 'lodash.uniqby';
|
|
6
|
+
import remarkGfm from 'remark-gfm';
|
|
7
|
+
import { Emoji } from './Emoji';
|
|
8
|
+
import { Anchor } from './Anchor';
|
|
9
|
+
import { Mention } from './Mention';
|
|
10
|
+
import { detectHttp, escapeRegExp, matchMarkdownLinks, messageCodeBlocks } from './regex';
|
|
11
|
+
import { emojiMarkdownPlugin, mentionsMarkdownPlugin } from './rehypePlugins';
|
|
12
|
+
export var defaultAllowedTagNames = [
|
|
13
|
+
'html',
|
|
14
|
+
'text',
|
|
15
|
+
'br',
|
|
16
|
+
'p',
|
|
17
|
+
'em',
|
|
18
|
+
'strong',
|
|
19
|
+
'a',
|
|
20
|
+
'ol',
|
|
21
|
+
'ul',
|
|
22
|
+
'li',
|
|
23
|
+
'code',
|
|
24
|
+
'pre',
|
|
25
|
+
'blockquote',
|
|
26
|
+
'del',
|
|
27
|
+
// custom types (tagNames)
|
|
28
|
+
'emoji',
|
|
29
|
+
'mention',
|
|
30
|
+
];
|
|
31
|
+
function formatUrlForDisplay(url) {
|
|
32
|
+
try {
|
|
33
|
+
return decodeURIComponent(url).replace(detectHttp, '');
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
return url;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function encodeDecode(url) {
|
|
40
|
+
try {
|
|
41
|
+
return encodeURI(decodeURIComponent(url));
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return url;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
var transformLinkUri = function (uri) { return (uri.startsWith('app://') ? uri : uriTransformer(uri)); };
|
|
48
|
+
var getPluginsForward = function (plugins) { return plugins; };
|
|
49
|
+
export var markDownRenderers = {
|
|
50
|
+
a: Anchor,
|
|
51
|
+
emoji: Emoji,
|
|
52
|
+
mention: Mention,
|
|
53
|
+
};
|
|
54
|
+
export var renderText = function (text, mentionedUsers, _a) {
|
|
55
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.allowedTagNames, allowedTagNames = _c === void 0 ? defaultAllowedTagNames : _c, customMarkDownRenderers = _b.customMarkDownRenderers, _d = _b.getRehypePlugins, getRehypePlugins = _d === void 0 ? getPluginsForward : _d, _e = _b.getRemarkPlugins, getRemarkPlugins = _e === void 0 ? getPluginsForward : _e;
|
|
56
|
+
// take the @ mentions and turn them into markdown?
|
|
57
|
+
// translate links
|
|
58
|
+
if (!text)
|
|
59
|
+
return null;
|
|
60
|
+
if (text.trim().length === 1)
|
|
61
|
+
return React.createElement(React.Fragment, null, text);
|
|
62
|
+
var newText = text;
|
|
63
|
+
var markdownLinks = matchMarkdownLinks(newText);
|
|
64
|
+
var codeBlocks = messageCodeBlocks(newText);
|
|
65
|
+
// extract all valid links/emails within text and replace it with proper markup
|
|
66
|
+
uniqBy(__spreadArray(__spreadArray([], find(newText, 'email'), true), find(newText, 'url'), true), 'value').forEach(function (_a) {
|
|
67
|
+
var href = _a.href, type = _a.type, value = _a.value;
|
|
68
|
+
var linkIsInBlock = codeBlocks.some(function (block) { return block === null || block === void 0 ? void 0 : block.includes(value); });
|
|
69
|
+
// check if message is already markdown
|
|
70
|
+
var noParsingNeeded = markdownLinks &&
|
|
71
|
+
markdownLinks.filter(function (text) {
|
|
72
|
+
var strippedHref = href === null || href === void 0 ? void 0 : href.replace(detectHttp, '');
|
|
73
|
+
var strippedText = text === null || text === void 0 ? void 0 : text.replace(detectHttp, '');
|
|
74
|
+
if (!strippedHref || !strippedText)
|
|
75
|
+
return false;
|
|
76
|
+
return strippedHref.includes(strippedText) || strippedText.includes(strippedHref);
|
|
77
|
+
});
|
|
78
|
+
if (noParsingNeeded.length > 0 || linkIsInBlock)
|
|
79
|
+
return;
|
|
80
|
+
try {
|
|
81
|
+
// special case for mentions:
|
|
82
|
+
// it could happen that a user's name matches with an e-mail format pattern.
|
|
83
|
+
// in that case, we check whether the found e-mail is actually a mention
|
|
84
|
+
// by naively checking for an existence of @ sign in front of it.
|
|
85
|
+
if (type === 'email' && mentionedUsers) {
|
|
86
|
+
var emailMatchesWithName = mentionedUsers.some(function (u) { return u.name === value; });
|
|
87
|
+
if (emailMatchesWithName) {
|
|
88
|
+
newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), function (match, position) {
|
|
89
|
+
var isMention = newText.charAt(position - 1) === '@';
|
|
90
|
+
// in case of mention, we leave the match in its original form,
|
|
91
|
+
// and we let `mentionsMarkdownPlugin` to do its job
|
|
92
|
+
return isMention ? match : "[".concat(match, "](").concat(encodeDecode(href), ")");
|
|
93
|
+
});
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
var displayLink = type === 'email' ? value : formatUrlForDisplay(href);
|
|
98
|
+
newText = newText.replace(new RegExp(escapeRegExp(value), 'g'), "[".concat(displayLink, "](").concat(encodeDecode(href), ")"));
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
void e;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
var remarkPlugins = [[remarkGfm, { singleTilde: false }]];
|
|
105
|
+
var rehypePlugins = [emojiMarkdownPlugin];
|
|
106
|
+
if (mentionedUsers === null || mentionedUsers === void 0 ? void 0 : mentionedUsers.length) {
|
|
107
|
+
rehypePlugins.push(mentionsMarkdownPlugin(mentionedUsers));
|
|
108
|
+
}
|
|
109
|
+
// TODO: remove in the next major release
|
|
110
|
+
if (customMarkDownRenderers === null || customMarkDownRenderers === void 0 ? void 0 : customMarkDownRenderers.mention) {
|
|
111
|
+
var MentionComponent_1 = customMarkDownRenderers['mention'];
|
|
112
|
+
// eslint-disable-next-line react/display-name
|
|
113
|
+
customMarkDownRenderers['mention'] = function (_a) {
|
|
114
|
+
var node = _a.node, rest = __rest(_a, ["node"]);
|
|
115
|
+
return (React.createElement(MentionComponent_1
|
|
116
|
+
// @ts-ignore
|
|
117
|
+
, __assign({
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
mentioned_user: node.mentionedUser,
|
|
120
|
+
// @ts-ignore
|
|
121
|
+
node: __assign({ mentioned_user: node.mentionedUser }, node) }, rest)));
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
var rehypeComponents = __assign(__assign({}, markDownRenderers), customMarkDownRenderers);
|
|
125
|
+
return (React.createElement(ReactMarkdown, { allowedElements: allowedTagNames, components: rehypeComponents, rehypePlugins: getRehypePlugins(rehypePlugins), remarkPlugins: getRemarkPlugins(remarkPlugins), skipHtml: true, transformLinkUri: transformLinkUri, unwrapDisallowed: true }, newText));
|
|
126
|
+
};
|
|
@@ -9,7 +9,7 @@ import type { ChannelActionContextValue } from '../../context/ChannelActionConte
|
|
|
9
9
|
import type { StreamMessage } from '../../context/ChannelStateContext';
|
|
10
10
|
import type { ComponentContextValue } from '../../context/ComponentContext';
|
|
11
11
|
import type { MessageContextValue } from '../../context/MessageContext';
|
|
12
|
-
import type { RenderTextOptions } from '
|
|
12
|
+
import type { RenderTextOptions } from './renderText';
|
|
13
13
|
import type { CustomTrigger, DefaultStreamChatGenerics } from '../../types/types';
|
|
14
14
|
export declare type ReactEventHandler = (event: React.BaseSyntheticEvent) => Promise<void> | void;
|
|
15
15
|
export declare type MessageProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Message/types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Message/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,4 +63,5 @@ export interface TooltipUsernameMapper {
|
|
|
63
63
|
*/
|
|
64
64
|
export declare const mapToUserNameOrId: TooltipUsernameMapper;
|
|
65
65
|
export declare const getReadByTooltipText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(users: UserResponse<StreamChatGenerics>[], t: TFunction, client: StreamChat<StreamChatGenerics>, tooltipUserNameMapper: TooltipUsernameMapper) => string;
|
|
66
|
+
export declare const isOnlyEmojis: (text?: string) => boolean;
|
|
66
67
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Message/utils.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Message/utils.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,8CACV,OAAO,2BAiB9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,2LAUvB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;CAS3B,CAAC;AAEF,oBAAY,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAChE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,CAC9E,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,cAwDnC,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,YACnB,mBAAmB,GAAG,OAAO,kFAC0C,YAAY,gCA+C7F,CAAC;AAIF,eAAO,MAAM,qBAAqB,oDAErB,OAAO,GAAG,SAAS,YAsB/B,CAAC;AAmBF,eAAO,MAAM,oBAAoB;;;;;;aAsChC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;aA+BlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,wJAIqC,CAAC;AAEtE,eAAO,MAAM,qBAAqB,wJAIyB,CAAC;AAE5D,eAAO,MAAM,SAAS,yMASrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,yMASlC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,CAAC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAC/E,IAAI,EAAE,YAAY,CAAC,kBAAkB,CAAC,GACrC,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,qBAAsD,CAAC;AAEvF,eAAO,MAAM,oBAAoB,mIAI5B,SAAS,iEAEW,qBAAqB,WAiD7C,CAAC;AAEF,eAAO,MAAM,YAAY,UAAW,MAAM,YAOzC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __spreadArray } from "tslib";
|
|
2
2
|
import deepequal from 'react-fast-compare';
|
|
3
|
+
import emojiRegex from 'emoji-regex';
|
|
3
4
|
/**
|
|
4
5
|
* Following function validates a function which returns notification message.
|
|
5
6
|
* It validates if the first parameter is function and also if return value of function is string or no.
|
|
@@ -277,3 +278,10 @@ export var getReadByTooltipText = function (users, t, client, tooltipUserNameMap
|
|
|
277
278
|
}
|
|
278
279
|
return outStr;
|
|
279
280
|
};
|
|
281
|
+
export var isOnlyEmojis = function (text) {
|
|
282
|
+
if (!text)
|
|
283
|
+
return false;
|
|
284
|
+
var noEmojis = text.replace(emojiRegex(), '');
|
|
285
|
+
var noSpace = noEmojis.replace(/[\s\n]/gm, '');
|
|
286
|
+
return !noSpace;
|
|
287
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,EACL,yBAAyB,EAE1B,MAAM,oCAAoC,CAAC;AAQ5C,OAAO,EAAkB,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAMhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AA0MnE,aAAK,qBAAqB,GACtB,6BAA6B,GAC7B,8BAA8B,GAC9B,sBAAsB,GACtB,uBAAuB,GACvB,YAAY,GACZ,mCAAmC,GACnC,iCAAiC,GACjC,mCAAmC,GACnC,8BAA8B,GAC9B,gCAAgC,GAChC,gCAAgC,GAChC,SAAS,GACT,gBAAgB,GAChB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,YAAY,CAAC;AAEjB,oBAAY,gBAAgB,CAC1B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,CAAC,GAAG;IAC3E,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,eAAe,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAClD,WAAW,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC9C,aAAa,EAAE,OAAO,KACnB,UAAU,CAAC;IAChB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iIAAiI;IACjI,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qIAAqI;IACrI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mLAAmL;IACnL,2BAA2B,CAAC,EAAE,mBAAmB,CAAC;IAClD,iHAAiH;IACjH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4LAA4L;IAC5L,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,6LAA6L;IAC7L,aAAa,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yKAAyK;IACzK,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qHAAqH;IACrH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,gJA2BvB,CAAC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator, __rest } from "tslib";
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { useEnrichedMessages } from './hooks/
|
|
4
|
-
import { useMessageListElements } from './hooks/useMessageListElements';
|
|
5
|
-
import { useScrollLocationLogic } from './hooks/useScrollLocationLogic';
|
|
3
|
+
import { useEnrichedMessages, useMessageListElements, useScrollLocationLogic, } from './hooks/MessageList';
|
|
6
4
|
import { MessageNotification as DefaultMessageNotification } from './MessageNotification';
|
|
7
5
|
import { MessageListNotifications as DefaultMessageListNotifications } from './MessageListNotifications';
|
|
8
6
|
import { useChannelActionContext, } from '../../context/ChannelActionContext';
|
|
@@ -1,19 +1,42 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ScrollSeekConfiguration, ScrollSeekPlaceholderProps, VirtuosoProps } from 'react-virtuoso';
|
|
1
|
+
import React, { RefObject } from 'react';
|
|
2
|
+
import { ScrollSeekConfiguration, ScrollSeekPlaceholderProps, VirtuosoHandle, VirtuosoProps } from 'react-virtuoso';
|
|
3
3
|
import { GroupStyle } from './utils';
|
|
4
4
|
import { MessageProps, MessageUIComponentProps } from '../Message';
|
|
5
5
|
import { ChannelActionContextValue } from '../../context/ChannelActionContext';
|
|
6
6
|
import { StreamMessage } from '../../context/ChannelStateContext';
|
|
7
|
+
import { ChatContextValue } from '../../context/ChatContext';
|
|
8
|
+
import { ComponentContextValue } from '../../context/ComponentContext';
|
|
9
|
+
import type { UserResponse } from 'stream-chat';
|
|
7
10
|
import type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';
|
|
11
|
+
declare type VirtualizedMessageListPropsForContext = 'additionalMessageInputProps' | 'closeReactionSelectorOnClick' | 'customMessageActions' | 'customMessageRenderer' | 'head' | 'loadingMore' | 'Message' | 'messageActions' | 'shouldGroupByUser' | 'threadList';
|
|
12
|
+
/**
|
|
13
|
+
* Context object provided to some Virtuoso props that are functions (components rendered by Virtuoso and other functions)
|
|
14
|
+
*/
|
|
15
|
+
export declare type VirtuosoContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Required<Pick<ComponentContextValue<StreamChatGenerics>, 'DateSeparator' | 'MessageSystem'>> & Pick<VirtualizedMessageListProps<StreamChatGenerics>, VirtualizedMessageListPropsForContext> & Pick<ChatContextValue<StreamChatGenerics>, 'customClasses'> & {
|
|
16
|
+
/** Latest received message id in the current channel */
|
|
17
|
+
lastReceivedMessageId: string | null | undefined;
|
|
18
|
+
/** Object mapping between the message ID and a string representing the position in the group of a sequence of messages posted by the same user. */
|
|
19
|
+
messageGroupStyles: Record<string, GroupStyle>;
|
|
20
|
+
/** Number of messages prepended before the first page of messages. This is needed to calculate the virtual position in the virtual list. */
|
|
21
|
+
numItemsPrepended: number;
|
|
22
|
+
/** Mapping of message ID of own messages to the array of users, who read the given message */
|
|
23
|
+
ownMessagesReadByOthers: Record<string, UserResponse<StreamChatGenerics>[]>;
|
|
24
|
+
/** The original message list enriched with date separators, omitted deleted messages or giphy previews. */
|
|
25
|
+
processedMessages: StreamMessage<StreamChatGenerics>[];
|
|
26
|
+
/** Instance of VirtuosoHandle object providing the API to navigate in the virtualized list by various scroll actions. */
|
|
27
|
+
virtuosoRef: RefObject<VirtuosoHandle>;
|
|
28
|
+
};
|
|
8
29
|
declare type PropsDrilledToMessage = 'additionalMessageInputProps' | 'customMessageActions' | 'messageActions';
|
|
9
30
|
export declare type VirtualizedMessageListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<Pick<MessageProps<StreamChatGenerics>, PropsDrilledToMessage>> & {
|
|
10
31
|
/** Additional props to be passed the underlying [`react-virtuoso` virtualized list dependency](https://virtuoso.dev/virtuoso-api-reference/) */
|
|
11
|
-
additionalVirtuosoProps?: VirtuosoProps<UnknownType,
|
|
32
|
+
additionalVirtuosoProps?: VirtuosoProps<UnknownType, VirtuosoContext<StreamChatGenerics>>;
|
|
12
33
|
/** If true, picking a reaction from the `ReactionSelector` component will close the selector */
|
|
13
34
|
closeReactionSelectorOnClick?: boolean;
|
|
14
35
|
/** Custom render function, if passed, certain UI props are ignored */
|
|
15
36
|
customMessageRenderer?: (messageList: StreamMessage<StreamChatGenerics>[], index: number) => React.ReactElement;
|
|
16
|
-
/**
|
|
37
|
+
/** @deprecated Use additionalVirtuosoProps.defaultItemHeight instead. Will be removed with next major release - `v11.0.0`.
|
|
38
|
+
* If set, the default item height is used for the calculation of the total list height. Use if you expect messages with a lot of height variance
|
|
39
|
+
* */
|
|
17
40
|
defaultItemHeight?: number;
|
|
18
41
|
/** Disables the injection of date separator components in MessageList, defaults to `true` */
|
|
19
42
|
disableDateSeparator?: boolean;
|
|
@@ -23,7 +46,10 @@ export declare type VirtualizedMessageListProps<StreamChatGenerics extends Defau
|
|
|
23
46
|
hasMore?: boolean;
|
|
24
47
|
/** Whether or not the list has newer items to load */
|
|
25
48
|
hasMoreNewer?: boolean;
|
|
26
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated Use additionalVirtuosoProps.components.Header to override default component rendered above the list ove messages.
|
|
51
|
+
* Element to be rendered at the top of the thread message list. By default, these are the Message and ThreadStart components
|
|
52
|
+
*/
|
|
27
53
|
head?: React.ReactElement;
|
|
28
54
|
/** Hides the `MessageDeleted` components from the list, defaults to `false` */
|
|
29
55
|
hideDeletedMessages?: boolean;
|
|
@@ -45,11 +71,15 @@ export declare type VirtualizedMessageListProps<StreamChatGenerics extends Defau
|
|
|
45
71
|
messageLimit?: number;
|
|
46
72
|
/** Optional prop to override the messages available from [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/) */
|
|
47
73
|
messages?: StreamMessage<StreamChatGenerics>[];
|
|
48
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* @deprecated Use additionalVirtuosoProps.overscan instead. Will be removed with next major release - `v11.0.0`.
|
|
76
|
+
* The amount of extra content the list should render in addition to what's necessary to fill in the viewport
|
|
77
|
+
*/
|
|
49
78
|
overscan?: number;
|
|
50
79
|
/** Keep track of read receipts for each message sent by the user. When disabled, only the last own message delivery / read status is rendered. */
|
|
51
80
|
returnAllReadData?: boolean;
|
|
52
81
|
/**
|
|
82
|
+
* @deprecated Pass additionalVirtuosoProps.scrollSeekConfiguration and specify the placeholder in additionalVirtuosoProps.components.ScrollSeekPlaceholder instead. Will be removed with next major release - `v11.0.0`.
|
|
53
83
|
* Performance improvement by showing placeholders if user scrolls fast through list.
|
|
54
84
|
* it can be used like this:
|
|
55
85
|
* ```
|