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
package/dist/index.cjs.js
CHANGED
|
@@ -34,10 +34,7 @@ var linkify = require('linkifyjs');
|
|
|
34
34
|
var _defineProperty$2 = require('@babel/runtime/helpers/defineProperty');
|
|
35
35
|
var _slicedToArray$2 = require('@babel/runtime/helpers/slicedToArray');
|
|
36
36
|
var emojiRegex = require('emoji-regex');
|
|
37
|
-
var crypto = require('crypto');
|
|
38
37
|
var uniqBy = require('lodash.uniqby');
|
|
39
|
-
var ReactIs = require('react-is');
|
|
40
|
-
var path$1 = require('path');
|
|
41
38
|
var _objectWithoutProperties$1 = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
42
39
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
43
40
|
var _typeof = require('@babel/runtime/helpers/typeof');
|
|
@@ -49,11 +46,14 @@ var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstru
|
|
|
49
46
|
var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
|
|
50
47
|
var Textarea = require('react-textarea-autosize');
|
|
51
48
|
var getCaretCoordinates = require('textarea-caret');
|
|
49
|
+
var ReactIs = require('react-is');
|
|
52
50
|
var debounce$1 = require('lodash.debounce');
|
|
53
51
|
var throttle = require('lodash.throttle');
|
|
54
52
|
var streamChat = require('stream-chat');
|
|
53
|
+
var crypto = require('crypto');
|
|
55
54
|
var deepequal = require('react-fast-compare');
|
|
56
55
|
var ReactDOM = require('react-dom');
|
|
56
|
+
var path$1 = require('path');
|
|
57
57
|
var reactVirtuoso = require('react-virtuoso');
|
|
58
58
|
var nimbleEmoji = require('emoji-mart/dist/components/emoji/nimble-emoji');
|
|
59
59
|
var nimblePicker = require('emoji-mart/dist/components/picker/nimble-picker');
|
|
@@ -98,10 +98,7 @@ var linkify__namespace = /*#__PURE__*/_interopNamespace(linkify);
|
|
|
98
98
|
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty$2);
|
|
99
99
|
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray$2);
|
|
100
100
|
var emojiRegex__default = /*#__PURE__*/_interopDefaultLegacy(emojiRegex);
|
|
101
|
-
var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
|
|
102
101
|
var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
|
|
103
|
-
var ReactIs__default = /*#__PURE__*/_interopDefaultLegacy(ReactIs);
|
|
104
|
-
var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
|
|
105
102
|
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties$1);
|
|
106
103
|
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
107
104
|
var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
|
|
@@ -113,10 +110,13 @@ var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_po
|
|
|
113
110
|
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
|
|
114
111
|
var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
|
|
115
112
|
var getCaretCoordinates__default = /*#__PURE__*/_interopDefaultLegacy(getCaretCoordinates);
|
|
113
|
+
var ReactIs__default = /*#__PURE__*/_interopDefaultLegacy(ReactIs);
|
|
116
114
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce$1);
|
|
117
115
|
var throttle__default = /*#__PURE__*/_interopDefaultLegacy(throttle);
|
|
116
|
+
var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
|
|
118
117
|
var deepequal__default = /*#__PURE__*/_interopDefaultLegacy(deepequal);
|
|
119
118
|
var ReactDOM__namespace = /*#__PURE__*/_interopNamespace(ReactDOM);
|
|
119
|
+
var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
|
|
120
120
|
var nimbleEmoji__default = /*#__PURE__*/_interopDefaultLegacy(nimbleEmoji);
|
|
121
121
|
var nimblePicker__default = /*#__PURE__*/_interopDefaultLegacy(nimblePicker);
|
|
122
122
|
|
|
@@ -4331,7 +4331,7 @@ var getAttachmentType = function (attachment) {
|
|
|
4331
4331
|
return 'unsupported';
|
|
4332
4332
|
};
|
|
4333
4333
|
|
|
4334
|
-
var Item = /*#__PURE__*/React__default["default"].forwardRef(function Item(props, innerRef) {
|
|
4334
|
+
var Item$1 = /*#__PURE__*/React__default["default"].forwardRef(function Item(props, innerRef) {
|
|
4335
4335
|
var className = props.className,
|
|
4336
4336
|
Component = props.component,
|
|
4337
4337
|
item = props.item,
|
|
@@ -4378,29 +4378,29 @@ var Item = /*#__PURE__*/React__default["default"].forwardRef(function Item(props
|
|
|
4378
4378
|
}))));
|
|
4379
4379
|
});
|
|
4380
4380
|
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
}
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4381
|
+
var DefaultSuggestionListHeader = function (props) {
|
|
4382
|
+
var currentTrigger = props.currentTrigger, value = props.value;
|
|
4383
|
+
var t = useTranslationContext('DefaultSuggestionListHeader').t;
|
|
4384
|
+
var triggerIndex = value.lastIndexOf(currentTrigger);
|
|
4385
|
+
if (currentTrigger === '/') {
|
|
4386
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4387
|
+
t('Commands matching'),
|
|
4388
|
+
" ",
|
|
4389
|
+
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
4390
|
+
}
|
|
4391
|
+
if (currentTrigger === ':') {
|
|
4392
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4393
|
+
t('Emoji matching'),
|
|
4394
|
+
" ",
|
|
4395
|
+
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
4396
|
+
}
|
|
4397
|
+
if (currentTrigger === '@') {
|
|
4398
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4399
|
+
t('People matching'),
|
|
4400
|
+
" ",
|
|
4401
|
+
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
4402
|
+
}
|
|
4403
|
+
return null;
|
|
4404
4404
|
};
|
|
4405
4405
|
|
|
4406
4406
|
/**
|
|
@@ -5079,6 +5079,351 @@ function toFunction$1(replace) {
|
|
|
5079
5079
|
return typeof replace === 'function' ? replace : () => replace
|
|
5080
5080
|
}
|
|
5081
5081
|
|
|
5082
|
+
/**
|
|
5083
|
+
* @typedef {import('unist').Node} Node
|
|
5084
|
+
* @typedef {import('unist').Parent} Parent
|
|
5085
|
+
* @typedef {import('unist').Literal} Literal
|
|
5086
|
+
* @typedef {Object.<string, unknown>} Props
|
|
5087
|
+
* @typedef {Array.<Node>|string} ChildrenOrValue
|
|
5088
|
+
*
|
|
5089
|
+
* @typedef {(<T extends string, P extends Record<string, unknown>, C extends Node[]>(type: T, props: P, children: C) => {type: T, children: C} & P)} BuildParentWithProps
|
|
5090
|
+
* @typedef {(<T extends string, P extends Record<string, unknown>>(type: T, props: P, value: string) => {type: T, value: string} & P)} BuildLiteralWithProps
|
|
5091
|
+
* @typedef {(<T extends string, P extends Record<string, unknown>>(type: T, props: P) => {type: T} & P)} BuildVoidWithProps
|
|
5092
|
+
* @typedef {(<T extends string, C extends Node[]>(type: T, children: C) => {type: T, children: C})} BuildParent
|
|
5093
|
+
* @typedef {(<T extends string>(type: T, value: string) => {type: T, value: string})} BuildLiteral
|
|
5094
|
+
* @typedef {(<T extends string>(type: T) => {type: T})} BuildVoid
|
|
5095
|
+
*/
|
|
5096
|
+
|
|
5097
|
+
var u = /**
|
|
5098
|
+
* @type {BuildVoid & BuildVoidWithProps & BuildLiteral & BuildLiteralWithProps & BuildParent & BuildParentWithProps}
|
|
5099
|
+
*/ (
|
|
5100
|
+
/**
|
|
5101
|
+
* @param {string} type Type of node
|
|
5102
|
+
* @param {Props|ChildrenOrValue} [props] Additional properties for node (or `children` or `value`)
|
|
5103
|
+
* @param {ChildrenOrValue} [value] `children` or `value` of node
|
|
5104
|
+
* @returns {Node}
|
|
5105
|
+
*/
|
|
5106
|
+
function (type, props, value) {
|
|
5107
|
+
/** @type {Node} */
|
|
5108
|
+
var node = {type: String(type)};
|
|
5109
|
+
|
|
5110
|
+
if (
|
|
5111
|
+
(value === undefined || value === null) &&
|
|
5112
|
+
(typeof props === 'string' || Array.isArray(props))
|
|
5113
|
+
) {
|
|
5114
|
+
value = props;
|
|
5115
|
+
} else {
|
|
5116
|
+
Object.assign(node, props);
|
|
5117
|
+
}
|
|
5118
|
+
|
|
5119
|
+
if (Array.isArray(value)) {
|
|
5120
|
+
node.children = value;
|
|
5121
|
+
} else if (value !== undefined && value !== null) {
|
|
5122
|
+
node.value = String(value);
|
|
5123
|
+
}
|
|
5124
|
+
|
|
5125
|
+
return node
|
|
5126
|
+
}
|
|
5127
|
+
);
|
|
5128
|
+
|
|
5129
|
+
/**
|
|
5130
|
+
* @param {string} d
|
|
5131
|
+
* @returns {string}
|
|
5132
|
+
*/
|
|
5133
|
+
function color(d) {
|
|
5134
|
+
return '\u001B[33m' + d + '\u001B[39m'
|
|
5135
|
+
}
|
|
5136
|
+
|
|
5137
|
+
/**
|
|
5138
|
+
* @typedef {import('unist').Node} Node
|
|
5139
|
+
* @typedef {import('unist').Parent} Parent
|
|
5140
|
+
* @typedef {import('unist-util-is').Test} Test
|
|
5141
|
+
* @typedef {import('./complex-types.js').Action} Action
|
|
5142
|
+
* @typedef {import('./complex-types.js').Index} Index
|
|
5143
|
+
* @typedef {import('./complex-types.js').ActionTuple} ActionTuple
|
|
5144
|
+
* @typedef {import('./complex-types.js').VisitorResult} VisitorResult
|
|
5145
|
+
* @typedef {import('./complex-types.js').Visitor} Visitor
|
|
5146
|
+
*/
|
|
5147
|
+
|
|
5148
|
+
/**
|
|
5149
|
+
* Continue traversing as normal
|
|
5150
|
+
*/
|
|
5151
|
+
const CONTINUE = true;
|
|
5152
|
+
/**
|
|
5153
|
+
* Do not traverse this node’s children
|
|
5154
|
+
*/
|
|
5155
|
+
const SKIP = 'skip';
|
|
5156
|
+
/**
|
|
5157
|
+
* Stop traversing immediately
|
|
5158
|
+
*/
|
|
5159
|
+
const EXIT = false;
|
|
5160
|
+
|
|
5161
|
+
/**
|
|
5162
|
+
* Visit children of tree which pass test.
|
|
5163
|
+
*
|
|
5164
|
+
* @param tree
|
|
5165
|
+
* Tree to walk
|
|
5166
|
+
* @param [test]
|
|
5167
|
+
* `unist-util-is`-compatible test
|
|
5168
|
+
* @param visitor
|
|
5169
|
+
* Function called for nodes that pass `test`.
|
|
5170
|
+
* @param [reverse=false]
|
|
5171
|
+
* Traverse in reverse preorder (NRL) instead of preorder (NLR) (default).
|
|
5172
|
+
*/
|
|
5173
|
+
const visitParents =
|
|
5174
|
+
/**
|
|
5175
|
+
* @type {(
|
|
5176
|
+
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: import('./complex-types.js').BuildVisitor<Tree, Check>, reverse?: boolean) => void) &
|
|
5177
|
+
* (<Tree extends Node>(tree: Tree, visitor: import('./complex-types.js').BuildVisitor<Tree>, reverse?: boolean) => void)
|
|
5178
|
+
* )}
|
|
5179
|
+
*/
|
|
5180
|
+
(
|
|
5181
|
+
/**
|
|
5182
|
+
* @param {Node} tree
|
|
5183
|
+
* @param {Test} test
|
|
5184
|
+
* @param {import('./complex-types.js').Visitor<Node>} visitor
|
|
5185
|
+
* @param {boolean} [reverse=false]
|
|
5186
|
+
*/
|
|
5187
|
+
function (tree, test, visitor, reverse) {
|
|
5188
|
+
if (typeof test === 'function' && typeof visitor !== 'function') {
|
|
5189
|
+
reverse = visitor;
|
|
5190
|
+
// @ts-expect-error no visitor given, so `visitor` is test.
|
|
5191
|
+
visitor = test;
|
|
5192
|
+
test = null;
|
|
5193
|
+
}
|
|
5194
|
+
|
|
5195
|
+
const is = convert(test);
|
|
5196
|
+
const step = reverse ? -1 : 1;
|
|
5197
|
+
|
|
5198
|
+
factory(tree, null, [])();
|
|
5199
|
+
|
|
5200
|
+
/**
|
|
5201
|
+
* @param {Node} node
|
|
5202
|
+
* @param {number?} index
|
|
5203
|
+
* @param {Array<Parent>} parents
|
|
5204
|
+
*/
|
|
5205
|
+
function factory(node, index, parents) {
|
|
5206
|
+
/** @type {Record<string, unknown>} */
|
|
5207
|
+
// @ts-expect-error: hush
|
|
5208
|
+
const value = typeof node === 'object' && node !== null ? node : {};
|
|
5209
|
+
/** @type {string|undefined} */
|
|
5210
|
+
let name;
|
|
5211
|
+
|
|
5212
|
+
if (typeof value.type === 'string') {
|
|
5213
|
+
name =
|
|
5214
|
+
typeof value.tagName === 'string'
|
|
5215
|
+
? value.tagName
|
|
5216
|
+
: typeof value.name === 'string'
|
|
5217
|
+
? value.name
|
|
5218
|
+
: undefined;
|
|
5219
|
+
|
|
5220
|
+
Object.defineProperty(visit, 'name', {
|
|
5221
|
+
value:
|
|
5222
|
+
'node (' +
|
|
5223
|
+
color(value.type + (name ? '<' + name + '>' : '')) +
|
|
5224
|
+
')'
|
|
5225
|
+
});
|
|
5226
|
+
}
|
|
5227
|
+
|
|
5228
|
+
return visit
|
|
5229
|
+
|
|
5230
|
+
function visit() {
|
|
5231
|
+
/** @type {ActionTuple} */
|
|
5232
|
+
let result = [];
|
|
5233
|
+
/** @type {ActionTuple} */
|
|
5234
|
+
let subresult;
|
|
5235
|
+
/** @type {number} */
|
|
5236
|
+
let offset;
|
|
5237
|
+
/** @type {Array<Parent>} */
|
|
5238
|
+
let grandparents;
|
|
5239
|
+
|
|
5240
|
+
if (!test || is(node, index, parents[parents.length - 1] || null)) {
|
|
5241
|
+
result = toResult(visitor(node, parents));
|
|
5242
|
+
|
|
5243
|
+
if (result[0] === EXIT) {
|
|
5244
|
+
return result
|
|
5245
|
+
}
|
|
5246
|
+
}
|
|
5247
|
+
|
|
5248
|
+
// @ts-expect-error looks like a parent.
|
|
5249
|
+
if (node.children && result[0] !== SKIP) {
|
|
5250
|
+
// @ts-expect-error looks like a parent.
|
|
5251
|
+
offset = (reverse ? node.children.length : -1) + step;
|
|
5252
|
+
// @ts-expect-error looks like a parent.
|
|
5253
|
+
grandparents = parents.concat(node);
|
|
5254
|
+
|
|
5255
|
+
// @ts-expect-error looks like a parent.
|
|
5256
|
+
while (offset > -1 && offset < node.children.length) {
|
|
5257
|
+
// @ts-expect-error looks like a parent.
|
|
5258
|
+
subresult = factory(node.children[offset], offset, grandparents)();
|
|
5259
|
+
|
|
5260
|
+
if (subresult[0] === EXIT) {
|
|
5261
|
+
return subresult
|
|
5262
|
+
}
|
|
5263
|
+
|
|
5264
|
+
offset =
|
|
5265
|
+
typeof subresult[1] === 'number' ? subresult[1] : offset + step;
|
|
5266
|
+
}
|
|
5267
|
+
}
|
|
5268
|
+
|
|
5269
|
+
return result
|
|
5270
|
+
}
|
|
5271
|
+
}
|
|
5272
|
+
}
|
|
5273
|
+
);
|
|
5274
|
+
|
|
5275
|
+
/**
|
|
5276
|
+
* @param {VisitorResult} value
|
|
5277
|
+
* @returns {ActionTuple}
|
|
5278
|
+
*/
|
|
5279
|
+
function toResult(value) {
|
|
5280
|
+
if (Array.isArray(value)) {
|
|
5281
|
+
return value
|
|
5282
|
+
}
|
|
5283
|
+
|
|
5284
|
+
if (typeof value === 'number') {
|
|
5285
|
+
return [CONTINUE, value]
|
|
5286
|
+
}
|
|
5287
|
+
|
|
5288
|
+
return [value]
|
|
5289
|
+
}
|
|
5290
|
+
|
|
5291
|
+
/**
|
|
5292
|
+
* @typedef {import('unist').Node} Node
|
|
5293
|
+
* @typedef {import('unist').Parent} Parent
|
|
5294
|
+
* @typedef {import('unist-util-is').Test} Test
|
|
5295
|
+
* @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult
|
|
5296
|
+
* @typedef {import('./complex-types.js').Visitor} Visitor
|
|
5297
|
+
*/
|
|
5298
|
+
|
|
5299
|
+
/**
|
|
5300
|
+
* Visit children of tree which pass test.
|
|
5301
|
+
*
|
|
5302
|
+
* @param tree
|
|
5303
|
+
* Tree to walk
|
|
5304
|
+
* @param [test]
|
|
5305
|
+
* `unist-util-is`-compatible test
|
|
5306
|
+
* @param visitor
|
|
5307
|
+
* Function called for nodes that pass `test`.
|
|
5308
|
+
* @param reverse
|
|
5309
|
+
* Traverse in reverse preorder (NRL) instead of preorder (NLR) (default).
|
|
5310
|
+
*/
|
|
5311
|
+
const visit =
|
|
5312
|
+
/**
|
|
5313
|
+
* @type {(
|
|
5314
|
+
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: import('./complex-types.js').BuildVisitor<Tree, Check>, reverse?: boolean) => void) &
|
|
5315
|
+
* (<Tree extends Node>(tree: Tree, visitor: import('./complex-types.js').BuildVisitor<Tree>, reverse?: boolean) => void)
|
|
5316
|
+
* )}
|
|
5317
|
+
*/
|
|
5318
|
+
(
|
|
5319
|
+
/**
|
|
5320
|
+
* @param {Node} tree
|
|
5321
|
+
* @param {Test} test
|
|
5322
|
+
* @param {import('./complex-types.js').Visitor} visitor
|
|
5323
|
+
* @param {boolean} [reverse]
|
|
5324
|
+
*/
|
|
5325
|
+
function (tree, test, visitor, reverse) {
|
|
5326
|
+
if (typeof test === 'function' && typeof visitor !== 'function') {
|
|
5327
|
+
reverse = visitor;
|
|
5328
|
+
visitor = test;
|
|
5329
|
+
test = null;
|
|
5330
|
+
}
|
|
5331
|
+
|
|
5332
|
+
visitParents(tree, test, overload, reverse);
|
|
5333
|
+
|
|
5334
|
+
/**
|
|
5335
|
+
* @param {Node} node
|
|
5336
|
+
* @param {Array<Parent>} parents
|
|
5337
|
+
*/
|
|
5338
|
+
function overload(node, parents) {
|
|
5339
|
+
const parent = parents[parents.length - 1];
|
|
5340
|
+
return visitor(
|
|
5341
|
+
node,
|
|
5342
|
+
parent ? parent.children.indexOf(node) : null,
|
|
5343
|
+
parent
|
|
5344
|
+
)
|
|
5345
|
+
}
|
|
5346
|
+
}
|
|
5347
|
+
);
|
|
5348
|
+
|
|
5349
|
+
function escapeRegExp(text) {
|
|
5350
|
+
return text.replace(/[-[\]{}()*+?.,/\\^$|#]/g, '\\$&');
|
|
5351
|
+
}
|
|
5352
|
+
var detectHttp = /(http(s?):\/\/)?(www\.)?/;
|
|
5353
|
+
var messageCodeBlocks = function (message) {
|
|
5354
|
+
var codeRegex = /```[a-z]*\n[\s\S]*?\n```|`[a-z]*[\s\S]*?`/gm;
|
|
5355
|
+
var matches = message.match(codeRegex);
|
|
5356
|
+
return matches || [];
|
|
5357
|
+
};
|
|
5358
|
+
var matchMarkdownLinks = function (message) {
|
|
5359
|
+
var regexMdLinks = /\[([^[]+)\](\(.*\))/gm;
|
|
5360
|
+
var matches = message.match(regexMdLinks);
|
|
5361
|
+
var singleMatch = /\[([^[]+)\]\((.*)\)/;
|
|
5362
|
+
var links = matches
|
|
5363
|
+
? matches.map(function (match) {
|
|
5364
|
+
var i = singleMatch.exec(match);
|
|
5365
|
+
return i && [i[1], i[2]];
|
|
5366
|
+
})
|
|
5367
|
+
: [];
|
|
5368
|
+
return links.flat();
|
|
5369
|
+
};
|
|
5370
|
+
|
|
5371
|
+
var mentionsMarkdownPlugin = function (mentioned_users) { return function () {
|
|
5372
|
+
var mentioned_usernames = mentioned_users
|
|
5373
|
+
.map(function (user) { return user.name || user.id; })
|
|
5374
|
+
.filter(Boolean)
|
|
5375
|
+
.map(escapeRegExp);
|
|
5376
|
+
var mentionedUsersRegex = new RegExp(mentioned_usernames.map(function (username) { return "@".concat(username); }).join('|'), 'g');
|
|
5377
|
+
var replace = function (match) {
|
|
5378
|
+
var usernameOrId = match.replace('@', '');
|
|
5379
|
+
var user = mentioned_users.find(function (_a) {
|
|
5380
|
+
var id = _a.id, name = _a.name;
|
|
5381
|
+
return name === usernameOrId || id === usernameOrId;
|
|
5382
|
+
});
|
|
5383
|
+
return u('element', { mentionedUser: user, tagName: 'mention' }, [u('text', match)]);
|
|
5384
|
+
};
|
|
5385
|
+
var transform = function (tree) {
|
|
5386
|
+
if (!mentioned_usernames.length)
|
|
5387
|
+
return tree;
|
|
5388
|
+
// handles special cases of mentions where user.name is an e-mail
|
|
5389
|
+
// Remark GFM translates all e-mail-like text nodes to links creating
|
|
5390
|
+
// two separate child nodes "@" and "your.name@as.email" instead of
|
|
5391
|
+
// keeping it as one text node with value "@your.name@as.email"
|
|
5392
|
+
// this piece finds these two separated nodes and merges them together
|
|
5393
|
+
// before "replace" function takes over
|
|
5394
|
+
visit(tree, function (node, index, parent) {
|
|
5395
|
+
var _a;
|
|
5396
|
+
if (index === null)
|
|
5397
|
+
return;
|
|
5398
|
+
if (!parent)
|
|
5399
|
+
return;
|
|
5400
|
+
var nextChild = parent.children.at(index + 1);
|
|
5401
|
+
var nextChildHref = (_a = nextChild === null || nextChild === void 0 ? void 0 : nextChild.properties) === null || _a === void 0 ? void 0 : _a.href;
|
|
5402
|
+
if (node.type === 'text' &&
|
|
5403
|
+
// text value has to have @ sign at the end of the string
|
|
5404
|
+
// and no other characters except whitespace can precede it
|
|
5405
|
+
// valid cases: "text @", "@", " @"
|
|
5406
|
+
// invalid cases: "text@", "@text",
|
|
5407
|
+
/.?\s?@$|^@$/.test(node.value) &&
|
|
5408
|
+
(nextChildHref === null || nextChildHref === void 0 ? void 0 : nextChildHref.startsWith('mailto:'))) {
|
|
5409
|
+
var newTextValue = node.value.replace(/@$/, '');
|
|
5410
|
+
var username = nextChildHref.replace('mailto:', '');
|
|
5411
|
+
parent.children[index] = u('text', newTextValue);
|
|
5412
|
+
parent.children[index + 1] = u('text', "@".concat(username));
|
|
5413
|
+
}
|
|
5414
|
+
});
|
|
5415
|
+
return findAndReplace$1(tree, mentionedUsersRegex, replace);
|
|
5416
|
+
};
|
|
5417
|
+
return transform;
|
|
5418
|
+
}; };
|
|
5419
|
+
var emojiMarkdownPlugin = function () {
|
|
5420
|
+
var replace = function (match) {
|
|
5421
|
+
return u('element', { tagName: 'emoji' }, [u('text', match)]);
|
|
5422
|
+
};
|
|
5423
|
+
var transform = function (node) { return findAndReplace$1(node, emojiRegex__default["default"](), replace); };
|
|
5424
|
+
return transform;
|
|
5425
|
+
};
|
|
5426
|
+
|
|
5082
5427
|
const protocols = ['http', 'https', 'mailto', 'tel'];
|
|
5083
5428
|
|
|
5084
5429
|
/**
|
|
@@ -17874,53 +18219,6 @@ function remarkParse(options) {
|
|
|
17874
18219
|
Object.assign(this, {Parser: parser});
|
|
17875
18220
|
}
|
|
17876
18221
|
|
|
17877
|
-
/**
|
|
17878
|
-
* @typedef {import('unist').Node} Node
|
|
17879
|
-
* @typedef {import('unist').Parent} Parent
|
|
17880
|
-
* @typedef {import('unist').Literal} Literal
|
|
17881
|
-
* @typedef {Object.<string, unknown>} Props
|
|
17882
|
-
* @typedef {Array.<Node>|string} ChildrenOrValue
|
|
17883
|
-
*
|
|
17884
|
-
* @typedef {(<T extends string, P extends Record<string, unknown>, C extends Node[]>(type: T, props: P, children: C) => {type: T, children: C} & P)} BuildParentWithProps
|
|
17885
|
-
* @typedef {(<T extends string, P extends Record<string, unknown>>(type: T, props: P, value: string) => {type: T, value: string} & P)} BuildLiteralWithProps
|
|
17886
|
-
* @typedef {(<T extends string, P extends Record<string, unknown>>(type: T, props: P) => {type: T} & P)} BuildVoidWithProps
|
|
17887
|
-
* @typedef {(<T extends string, C extends Node[]>(type: T, children: C) => {type: T, children: C})} BuildParent
|
|
17888
|
-
* @typedef {(<T extends string>(type: T, value: string) => {type: T, value: string})} BuildLiteral
|
|
17889
|
-
* @typedef {(<T extends string>(type: T) => {type: T})} BuildVoid
|
|
17890
|
-
*/
|
|
17891
|
-
|
|
17892
|
-
var u = /**
|
|
17893
|
-
* @type {BuildVoid & BuildVoidWithProps & BuildLiteral & BuildLiteralWithProps & BuildParent & BuildParentWithProps}
|
|
17894
|
-
*/ (
|
|
17895
|
-
/**
|
|
17896
|
-
* @param {string} type Type of node
|
|
17897
|
-
* @param {Props|ChildrenOrValue} [props] Additional properties for node (or `children` or `value`)
|
|
17898
|
-
* @param {ChildrenOrValue} [value] `children` or `value` of node
|
|
17899
|
-
* @returns {Node}
|
|
17900
|
-
*/
|
|
17901
|
-
function (type, props, value) {
|
|
17902
|
-
/** @type {Node} */
|
|
17903
|
-
var node = {type: String(type)};
|
|
17904
|
-
|
|
17905
|
-
if (
|
|
17906
|
-
(value === undefined || value === null) &&
|
|
17907
|
-
(typeof props === 'string' || Array.isArray(props))
|
|
17908
|
-
) {
|
|
17909
|
-
value = props;
|
|
17910
|
-
} else {
|
|
17911
|
-
Object.assign(node, props);
|
|
17912
|
-
}
|
|
17913
|
-
|
|
17914
|
-
if (Array.isArray(value)) {
|
|
17915
|
-
node.children = value;
|
|
17916
|
-
} else if (value !== undefined && value !== null) {
|
|
17917
|
-
node.value = String(value);
|
|
17918
|
-
}
|
|
17919
|
-
|
|
17920
|
-
return node
|
|
17921
|
-
}
|
|
17922
|
-
);
|
|
17923
|
-
|
|
17924
18222
|
/**
|
|
17925
18223
|
* @typedef {import('mdast').Root|import('mdast').Parent['children'][number]} MdastNode
|
|
17926
18224
|
* @typedef {import('./index.js').H} H
|
|
@@ -18028,226 +18326,6 @@ function all(h, parent) {
|
|
|
18028
18326
|
return values
|
|
18029
18327
|
}
|
|
18030
18328
|
|
|
18031
|
-
/**
|
|
18032
|
-
* @param {string} d
|
|
18033
|
-
* @returns {string}
|
|
18034
|
-
*/
|
|
18035
|
-
function color(d) {
|
|
18036
|
-
return '\u001B[33m' + d + '\u001B[39m'
|
|
18037
|
-
}
|
|
18038
|
-
|
|
18039
|
-
/**
|
|
18040
|
-
* @typedef {import('unist').Node} Node
|
|
18041
|
-
* @typedef {import('unist').Parent} Parent
|
|
18042
|
-
* @typedef {import('unist-util-is').Test} Test
|
|
18043
|
-
* @typedef {import('./complex-types.js').Action} Action
|
|
18044
|
-
* @typedef {import('./complex-types.js').Index} Index
|
|
18045
|
-
* @typedef {import('./complex-types.js').ActionTuple} ActionTuple
|
|
18046
|
-
* @typedef {import('./complex-types.js').VisitorResult} VisitorResult
|
|
18047
|
-
* @typedef {import('./complex-types.js').Visitor} Visitor
|
|
18048
|
-
*/
|
|
18049
|
-
|
|
18050
|
-
/**
|
|
18051
|
-
* Continue traversing as normal
|
|
18052
|
-
*/
|
|
18053
|
-
const CONTINUE = true;
|
|
18054
|
-
/**
|
|
18055
|
-
* Do not traverse this node’s children
|
|
18056
|
-
*/
|
|
18057
|
-
const SKIP = 'skip';
|
|
18058
|
-
/**
|
|
18059
|
-
* Stop traversing immediately
|
|
18060
|
-
*/
|
|
18061
|
-
const EXIT = false;
|
|
18062
|
-
|
|
18063
|
-
/**
|
|
18064
|
-
* Visit children of tree which pass test.
|
|
18065
|
-
*
|
|
18066
|
-
* @param tree
|
|
18067
|
-
* Tree to walk
|
|
18068
|
-
* @param [test]
|
|
18069
|
-
* `unist-util-is`-compatible test
|
|
18070
|
-
* @param visitor
|
|
18071
|
-
* Function called for nodes that pass `test`.
|
|
18072
|
-
* @param [reverse=false]
|
|
18073
|
-
* Traverse in reverse preorder (NRL) instead of preorder (NLR) (default).
|
|
18074
|
-
*/
|
|
18075
|
-
const visitParents =
|
|
18076
|
-
/**
|
|
18077
|
-
* @type {(
|
|
18078
|
-
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: import('./complex-types.js').BuildVisitor<Tree, Check>, reverse?: boolean) => void) &
|
|
18079
|
-
* (<Tree extends Node>(tree: Tree, visitor: import('./complex-types.js').BuildVisitor<Tree>, reverse?: boolean) => void)
|
|
18080
|
-
* )}
|
|
18081
|
-
*/
|
|
18082
|
-
(
|
|
18083
|
-
/**
|
|
18084
|
-
* @param {Node} tree
|
|
18085
|
-
* @param {Test} test
|
|
18086
|
-
* @param {import('./complex-types.js').Visitor<Node>} visitor
|
|
18087
|
-
* @param {boolean} [reverse=false]
|
|
18088
|
-
*/
|
|
18089
|
-
function (tree, test, visitor, reverse) {
|
|
18090
|
-
if (typeof test === 'function' && typeof visitor !== 'function') {
|
|
18091
|
-
reverse = visitor;
|
|
18092
|
-
// @ts-expect-error no visitor given, so `visitor` is test.
|
|
18093
|
-
visitor = test;
|
|
18094
|
-
test = null;
|
|
18095
|
-
}
|
|
18096
|
-
|
|
18097
|
-
const is = convert(test);
|
|
18098
|
-
const step = reverse ? -1 : 1;
|
|
18099
|
-
|
|
18100
|
-
factory(tree, null, [])();
|
|
18101
|
-
|
|
18102
|
-
/**
|
|
18103
|
-
* @param {Node} node
|
|
18104
|
-
* @param {number?} index
|
|
18105
|
-
* @param {Array<Parent>} parents
|
|
18106
|
-
*/
|
|
18107
|
-
function factory(node, index, parents) {
|
|
18108
|
-
/** @type {Record<string, unknown>} */
|
|
18109
|
-
// @ts-expect-error: hush
|
|
18110
|
-
const value = typeof node === 'object' && node !== null ? node : {};
|
|
18111
|
-
/** @type {string|undefined} */
|
|
18112
|
-
let name;
|
|
18113
|
-
|
|
18114
|
-
if (typeof value.type === 'string') {
|
|
18115
|
-
name =
|
|
18116
|
-
typeof value.tagName === 'string'
|
|
18117
|
-
? value.tagName
|
|
18118
|
-
: typeof value.name === 'string'
|
|
18119
|
-
? value.name
|
|
18120
|
-
: undefined;
|
|
18121
|
-
|
|
18122
|
-
Object.defineProperty(visit, 'name', {
|
|
18123
|
-
value:
|
|
18124
|
-
'node (' +
|
|
18125
|
-
color(value.type + (name ? '<' + name + '>' : '')) +
|
|
18126
|
-
')'
|
|
18127
|
-
});
|
|
18128
|
-
}
|
|
18129
|
-
|
|
18130
|
-
return visit
|
|
18131
|
-
|
|
18132
|
-
function visit() {
|
|
18133
|
-
/** @type {ActionTuple} */
|
|
18134
|
-
let result = [];
|
|
18135
|
-
/** @type {ActionTuple} */
|
|
18136
|
-
let subresult;
|
|
18137
|
-
/** @type {number} */
|
|
18138
|
-
let offset;
|
|
18139
|
-
/** @type {Array<Parent>} */
|
|
18140
|
-
let grandparents;
|
|
18141
|
-
|
|
18142
|
-
if (!test || is(node, index, parents[parents.length - 1] || null)) {
|
|
18143
|
-
result = toResult(visitor(node, parents));
|
|
18144
|
-
|
|
18145
|
-
if (result[0] === EXIT) {
|
|
18146
|
-
return result
|
|
18147
|
-
}
|
|
18148
|
-
}
|
|
18149
|
-
|
|
18150
|
-
// @ts-expect-error looks like a parent.
|
|
18151
|
-
if (node.children && result[0] !== SKIP) {
|
|
18152
|
-
// @ts-expect-error looks like a parent.
|
|
18153
|
-
offset = (reverse ? node.children.length : -1) + step;
|
|
18154
|
-
// @ts-expect-error looks like a parent.
|
|
18155
|
-
grandparents = parents.concat(node);
|
|
18156
|
-
|
|
18157
|
-
// @ts-expect-error looks like a parent.
|
|
18158
|
-
while (offset > -1 && offset < node.children.length) {
|
|
18159
|
-
// @ts-expect-error looks like a parent.
|
|
18160
|
-
subresult = factory(node.children[offset], offset, grandparents)();
|
|
18161
|
-
|
|
18162
|
-
if (subresult[0] === EXIT) {
|
|
18163
|
-
return subresult
|
|
18164
|
-
}
|
|
18165
|
-
|
|
18166
|
-
offset =
|
|
18167
|
-
typeof subresult[1] === 'number' ? subresult[1] : offset + step;
|
|
18168
|
-
}
|
|
18169
|
-
}
|
|
18170
|
-
|
|
18171
|
-
return result
|
|
18172
|
-
}
|
|
18173
|
-
}
|
|
18174
|
-
}
|
|
18175
|
-
);
|
|
18176
|
-
|
|
18177
|
-
/**
|
|
18178
|
-
* @param {VisitorResult} value
|
|
18179
|
-
* @returns {ActionTuple}
|
|
18180
|
-
*/
|
|
18181
|
-
function toResult(value) {
|
|
18182
|
-
if (Array.isArray(value)) {
|
|
18183
|
-
return value
|
|
18184
|
-
}
|
|
18185
|
-
|
|
18186
|
-
if (typeof value === 'number') {
|
|
18187
|
-
return [CONTINUE, value]
|
|
18188
|
-
}
|
|
18189
|
-
|
|
18190
|
-
return [value]
|
|
18191
|
-
}
|
|
18192
|
-
|
|
18193
|
-
/**
|
|
18194
|
-
* @typedef {import('unist').Node} Node
|
|
18195
|
-
* @typedef {import('unist').Parent} Parent
|
|
18196
|
-
* @typedef {import('unist-util-is').Test} Test
|
|
18197
|
-
* @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult
|
|
18198
|
-
* @typedef {import('./complex-types.js').Visitor} Visitor
|
|
18199
|
-
*/
|
|
18200
|
-
|
|
18201
|
-
/**
|
|
18202
|
-
* Visit children of tree which pass test.
|
|
18203
|
-
*
|
|
18204
|
-
* @param tree
|
|
18205
|
-
* Tree to walk
|
|
18206
|
-
* @param [test]
|
|
18207
|
-
* `unist-util-is`-compatible test
|
|
18208
|
-
* @param visitor
|
|
18209
|
-
* Function called for nodes that pass `test`.
|
|
18210
|
-
* @param reverse
|
|
18211
|
-
* Traverse in reverse preorder (NRL) instead of preorder (NLR) (default).
|
|
18212
|
-
*/
|
|
18213
|
-
const visit =
|
|
18214
|
-
/**
|
|
18215
|
-
* @type {(
|
|
18216
|
-
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: import('./complex-types.js').BuildVisitor<Tree, Check>, reverse?: boolean) => void) &
|
|
18217
|
-
* (<Tree extends Node>(tree: Tree, visitor: import('./complex-types.js').BuildVisitor<Tree>, reverse?: boolean) => void)
|
|
18218
|
-
* )}
|
|
18219
|
-
*/
|
|
18220
|
-
(
|
|
18221
|
-
/**
|
|
18222
|
-
* @param {Node} tree
|
|
18223
|
-
* @param {Test} test
|
|
18224
|
-
* @param {import('./complex-types.js').Visitor} visitor
|
|
18225
|
-
* @param {boolean} [reverse]
|
|
18226
|
-
*/
|
|
18227
|
-
function (tree, test, visitor, reverse) {
|
|
18228
|
-
if (typeof test === 'function' && typeof visitor !== 'function') {
|
|
18229
|
-
reverse = visitor;
|
|
18230
|
-
visitor = test;
|
|
18231
|
-
test = null;
|
|
18232
|
-
}
|
|
18233
|
-
|
|
18234
|
-
visitParents(tree, test, overload, reverse);
|
|
18235
|
-
|
|
18236
|
-
/**
|
|
18237
|
-
* @param {Node} node
|
|
18238
|
-
* @param {Array<Parent>} parents
|
|
18239
|
-
*/
|
|
18240
|
-
function overload(node, parents) {
|
|
18241
|
-
const parent = parents[parents.length - 1];
|
|
18242
|
-
return visitor(
|
|
18243
|
-
node,
|
|
18244
|
-
parent ? parent.children.indexOf(node) : null,
|
|
18245
|
-
parent
|
|
18246
|
-
)
|
|
18247
|
-
}
|
|
18248
|
-
}
|
|
18249
|
-
);
|
|
18250
|
-
|
|
18251
18329
|
/**
|
|
18252
18330
|
* @typedef {import('unist').Position} Position
|
|
18253
18331
|
* @typedef {import('unist').Node} Node
|
|
@@ -26097,14 +26175,26 @@ function remarkGfm(options = {}) {
|
|
|
26097
26175
|
}
|
|
26098
26176
|
}
|
|
26099
26177
|
|
|
26100
|
-
var
|
|
26101
|
-
|
|
26102
|
-
|
|
26103
|
-
|
|
26104
|
-
|
|
26105
|
-
|
|
26178
|
+
var Emoji = function (_a) {
|
|
26179
|
+
var children = _a.children;
|
|
26180
|
+
return (React__default["default"].createElement("span", { className: 'inline-text-emoji', "data-testid": 'inline-text-emoji' }, children));
|
|
26181
|
+
};
|
|
26182
|
+
|
|
26183
|
+
var Anchor = function (_a) {
|
|
26184
|
+
var children = _a.children, href = _a.href;
|
|
26185
|
+
var isEmail = href === null || href === void 0 ? void 0 : href.startsWith('mailto:');
|
|
26186
|
+
var isUrl = href === null || href === void 0 ? void 0 : href.startsWith('http');
|
|
26187
|
+
if (!href || (!isEmail && !isUrl))
|
|
26188
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
26189
|
+
return (React__default["default"].createElement("a", { className: clsx({ 'str-chat__message-url-link': isUrl }), href: href, rel: 'nofollow noreferrer noopener', target: '_blank' }, children));
|
|
26190
|
+
};
|
|
26191
|
+
|
|
26192
|
+
var Mention = function (_a) {
|
|
26193
|
+
var children = _a.children, mentionedUser = _a.node.mentionedUser;
|
|
26194
|
+
return (React__default["default"].createElement("span", { className: 'str-chat__message-mention', "data-user-id": mentionedUser.id }, children));
|
|
26106
26195
|
};
|
|
26107
|
-
|
|
26196
|
+
|
|
26197
|
+
var defaultAllowedTagNames = [
|
|
26108
26198
|
'html',
|
|
26109
26199
|
'text',
|
|
26110
26200
|
'br',
|
|
@@ -26123,24 +26213,6 @@ var allowedMarkups = [
|
|
|
26123
26213
|
'emoji',
|
|
26124
26214
|
'mention',
|
|
26125
26215
|
];
|
|
26126
|
-
var matchMarkdownLinks = function (message) {
|
|
26127
|
-
var regexMdLinks = /\[([^[]+)\](\(.*\))/gm;
|
|
26128
|
-
var matches = message.match(regexMdLinks);
|
|
26129
|
-
var singleMatch = /\[([^[]+)\]\((.*)\)/;
|
|
26130
|
-
var links = matches
|
|
26131
|
-
? matches.map(function (match) {
|
|
26132
|
-
var i = singleMatch.exec(match);
|
|
26133
|
-
return i && [i[1], i[2]];
|
|
26134
|
-
})
|
|
26135
|
-
: [];
|
|
26136
|
-
return links.flat();
|
|
26137
|
-
};
|
|
26138
|
-
var messageCodeBlocks = function (message) {
|
|
26139
|
-
var codeRegex = /```[a-z]*\n[\s\S]*?\n```|`[a-z]*[\s\S]*?`/gm;
|
|
26140
|
-
var matches = message.match(codeRegex);
|
|
26141
|
-
return matches || [];
|
|
26142
|
-
};
|
|
26143
|
-
var detectHttp = /(http(s?):\/\/)?(www\.)?/;
|
|
26144
26216
|
function formatUrlForDisplay(url) {
|
|
26145
26217
|
try {
|
|
26146
26218
|
return decodeURIComponent(url).replace(detectHttp, '');
|
|
@@ -26157,84 +26229,15 @@ function encodeDecode(url) {
|
|
|
26157
26229
|
return url;
|
|
26158
26230
|
}
|
|
26159
26231
|
}
|
|
26160
|
-
var
|
|
26161
|
-
|
|
26162
|
-
var isEmail = href === null || href === void 0 ? void 0 : href.startsWith('mailto:');
|
|
26163
|
-
var isUrl = href === null || href === void 0 ? void 0 : href.startsWith('http');
|
|
26164
|
-
if (!href || (!isEmail && !isUrl))
|
|
26165
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
26166
|
-
return (React__default["default"].createElement("a", { className: clsx({ 'str-chat__message-url-link': isUrl }), href: href, rel: 'nofollow noreferrer noopener', target: '_blank' }, children));
|
|
26167
|
-
};
|
|
26168
|
-
var Emoji = function (_a) {
|
|
26169
|
-
var children = _a.children;
|
|
26170
|
-
return (React__default["default"].createElement("span", { className: 'inline-text-emoji', "data-testid": 'inline-text-emoji' }, children));
|
|
26171
|
-
};
|
|
26172
|
-
var Mention = function (_a) {
|
|
26173
|
-
var children = _a.children, mentionedUser = _a.node.mentionedUser;
|
|
26174
|
-
return (React__default["default"].createElement("span", { className: 'str-chat__message-mention', "data-user-id": mentionedUser.id }, children));
|
|
26175
|
-
};
|
|
26232
|
+
var transformLinkUri = function (uri) { return (uri.startsWith('app://') ? uri : uriTransformer(uri)); };
|
|
26233
|
+
var getPluginsForward = function (plugins) { return plugins; };
|
|
26176
26234
|
var markDownRenderers = {
|
|
26177
26235
|
a: Anchor,
|
|
26178
26236
|
emoji: Emoji,
|
|
26179
26237
|
mention: Mention,
|
|
26180
26238
|
};
|
|
26181
|
-
var emojiMarkdownPlugin = function () {
|
|
26182
|
-
var replace = function (match) {
|
|
26183
|
-
return u('element', { tagName: 'emoji' }, [u('text', match)]);
|
|
26184
|
-
};
|
|
26185
|
-
var transform = function (node) { return findAndReplace$1(node, emojiRegex__default["default"](), replace); };
|
|
26186
|
-
return transform;
|
|
26187
|
-
};
|
|
26188
|
-
var mentionsMarkdownPlugin = function (mentioned_users) { return function () {
|
|
26189
|
-
var mentioned_usernames = mentioned_users
|
|
26190
|
-
.map(function (user) { return user.name || user.id; })
|
|
26191
|
-
.filter(Boolean)
|
|
26192
|
-
.map(escapeRegExp);
|
|
26193
|
-
var mentionedUsersRegex = new RegExp(mentioned_usernames.map(function (username) { return "@".concat(username); }).join('|'), 'g');
|
|
26194
|
-
var replace = function (match) {
|
|
26195
|
-
var usernameOrId = match.replace('@', '');
|
|
26196
|
-
var user = mentioned_users.find(function (_a) {
|
|
26197
|
-
var id = _a.id, name = _a.name;
|
|
26198
|
-
return name === usernameOrId || id === usernameOrId;
|
|
26199
|
-
});
|
|
26200
|
-
return u('element', { mentionedUser: user, tagName: 'mention' }, [u('text', match)]);
|
|
26201
|
-
};
|
|
26202
|
-
var transform = function (tree) {
|
|
26203
|
-
if (!mentioned_usernames.length)
|
|
26204
|
-
return tree;
|
|
26205
|
-
// handles special cases of mentions where user.name is an e-mail
|
|
26206
|
-
// Remark GFM translates all e-mail-like text nodes to links creating
|
|
26207
|
-
// two separate child nodes "@" and "your.name@as.email" instead of
|
|
26208
|
-
// keeping it as one text node with value "@your.name@as.email"
|
|
26209
|
-
// this piece finds these two separated nodes and merges them together
|
|
26210
|
-
// before "replace" function takes over
|
|
26211
|
-
visit(tree, function (node, index, parent) {
|
|
26212
|
-
var _a;
|
|
26213
|
-
if (index === null)
|
|
26214
|
-
return;
|
|
26215
|
-
if (!parent)
|
|
26216
|
-
return;
|
|
26217
|
-
var nextChild = parent.children.at(index + 1);
|
|
26218
|
-
var nextChildHref = (_a = nextChild === null || nextChild === void 0 ? void 0 : nextChild.properties) === null || _a === void 0 ? void 0 : _a.href;
|
|
26219
|
-
if (node.type === 'text' &&
|
|
26220
|
-
// text value has to have @ sign at the end of the string
|
|
26221
|
-
// and no other characters except whitespace can precede it
|
|
26222
|
-
// valid cases: "text @", "@", " @"
|
|
26223
|
-
// invalid cases: "text@", "@text",
|
|
26224
|
-
/.?\s?@$|^@$/.test(node.value) &&
|
|
26225
|
-
(nextChildHref === null || nextChildHref === void 0 ? void 0 : nextChildHref.startsWith('mailto:'))) {
|
|
26226
|
-
var newTextValue = node.value.replace(/@$/, '');
|
|
26227
|
-
var username = nextChildHref.replace('mailto:', '');
|
|
26228
|
-
parent.children[index] = u('text', newTextValue);
|
|
26229
|
-
parent.children[index + 1] = u('text', "@".concat(username));
|
|
26230
|
-
}
|
|
26231
|
-
});
|
|
26232
|
-
return findAndReplace$1(tree, mentionedUsersRegex, replace);
|
|
26233
|
-
};
|
|
26234
|
-
return transform;
|
|
26235
|
-
}; };
|
|
26236
26239
|
var renderText = function (text, mentionedUsers, _a) {
|
|
26237
|
-
var _b = _a === void 0 ? {} : _a, customMarkDownRenderers = _b.customMarkDownRenderers;
|
|
26240
|
+
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;
|
|
26238
26241
|
// take the @ mentions and turn them into markdown?
|
|
26239
26242
|
// translate links
|
|
26240
26243
|
if (!text)
|
|
@@ -26282,6 +26285,7 @@ var renderText = function (text, mentionedUsers, _a) {
|
|
|
26282
26285
|
catch (e) {
|
|
26283
26286
|
}
|
|
26284
26287
|
});
|
|
26288
|
+
var remarkPlugins = [[remarkGfm, { singleTilde: false }]];
|
|
26285
26289
|
var rehypePlugins = [emojiMarkdownPlugin];
|
|
26286
26290
|
if (mentionedUsers === null || mentionedUsers === void 0 ? void 0 : mentionedUsers.length) {
|
|
26287
26291
|
rehypePlugins.push(mentionsMarkdownPlugin(mentionedUsers));
|
|
@@ -26302,65 +26306,7 @@ var renderText = function (text, mentionedUsers, _a) {
|
|
|
26302
26306
|
};
|
|
26303
26307
|
}
|
|
26304
26308
|
var rehypeComponents = __assign(__assign({}, markDownRenderers), customMarkDownRenderers);
|
|
26305
|
-
return (React__default["default"].createElement(ReactMarkdown, { allowedElements:
|
|
26306
|
-
};
|
|
26307
|
-
function escapeRegExp(text) {
|
|
26308
|
-
return text.replace(/[-[\]{}()*+?.,/\\^$|#]/g, '\\$&');
|
|
26309
|
-
}
|
|
26310
|
-
/**
|
|
26311
|
-
* @deprecated will be removed in the next major release
|
|
26312
|
-
*/
|
|
26313
|
-
var generateRandomId = nanoid;
|
|
26314
|
-
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt#getting_whole_characters
|
|
26315
|
-
var getWholeChar = function (str, i) {
|
|
26316
|
-
var code = str.charCodeAt(i);
|
|
26317
|
-
if (Number.isNaN(code))
|
|
26318
|
-
return '';
|
|
26319
|
-
if (code < 0xd800 || code > 0xdfff)
|
|
26320
|
-
return str.charAt(i);
|
|
26321
|
-
if (0xd800 <= code && code <= 0xdbff) {
|
|
26322
|
-
if (str.length <= i + 1) {
|
|
26323
|
-
throw 'High surrogate without following low surrogate';
|
|
26324
|
-
}
|
|
26325
|
-
var next = str.charCodeAt(i + 1);
|
|
26326
|
-
if (0xdc00 > next || next > 0xdfff) {
|
|
26327
|
-
throw 'High surrogate without following low surrogate';
|
|
26328
|
-
}
|
|
26329
|
-
return str.charAt(i) + str.charAt(i + 1);
|
|
26330
|
-
}
|
|
26331
|
-
if (i === 0) {
|
|
26332
|
-
throw 'Low surrogate without preceding high surrogate';
|
|
26333
|
-
}
|
|
26334
|
-
var prev = str.charCodeAt(i - 1);
|
|
26335
|
-
if (0xd800 > prev || prev > 0xdbff) {
|
|
26336
|
-
throw 'Low surrogate without preceding high surrogate';
|
|
26337
|
-
}
|
|
26338
|
-
return '';
|
|
26339
|
-
};
|
|
26340
|
-
|
|
26341
|
-
var DefaultSuggestionListHeader = function (props) {
|
|
26342
|
-
var currentTrigger = props.currentTrigger, value = props.value;
|
|
26343
|
-
var t = useTranslationContext('DefaultSuggestionListHeader').t;
|
|
26344
|
-
var triggerIndex = value.lastIndexOf(currentTrigger);
|
|
26345
|
-
if (currentTrigger === '/') {
|
|
26346
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
26347
|
-
t('Commands matching'),
|
|
26348
|
-
" ",
|
|
26349
|
-
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
26350
|
-
}
|
|
26351
|
-
if (currentTrigger === ':') {
|
|
26352
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
26353
|
-
t('Emoji matching'),
|
|
26354
|
-
" ",
|
|
26355
|
-
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
26356
|
-
}
|
|
26357
|
-
if (currentTrigger === '@') {
|
|
26358
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
26359
|
-
t('People matching'),
|
|
26360
|
-
" ",
|
|
26361
|
-
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
26362
|
-
}
|
|
26363
|
-
return null;
|
|
26309
|
+
return (React__default["default"].createElement(ReactMarkdown, { allowedElements: allowedTagNames, components: rehypeComponents, rehypePlugins: getRehypePlugins(rehypePlugins), remarkPlugins: getRemarkPlugins(remarkPlugins), skipHtml: true, transformLinkUri: transformLinkUri, unwrapDisallowed: true }, newText));
|
|
26364
26310
|
};
|
|
26365
26311
|
|
|
26366
26312
|
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -26386,7 +26332,7 @@ var List = function List(_ref) {
|
|
|
26386
26332
|
AutocompleteSuggestionItem = _useComponentContext.AutocompleteSuggestionItem;
|
|
26387
26333
|
var _useChatContext = useChatContext('SuggestionList'),
|
|
26388
26334
|
themeVersion = _useChatContext.themeVersion;
|
|
26389
|
-
var SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item;
|
|
26335
|
+
var SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item$1;
|
|
26390
26336
|
var SuggestionHeader = PropHeader || AutocompleteSuggestionHeader || DefaultSuggestionListHeader;
|
|
26391
26337
|
var _useState = React.useState(undefined),
|
|
26392
26338
|
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
@@ -26563,6 +26509,33 @@ var UnMemoizedCommandItem = function (props) {
|
|
|
26563
26509
|
};
|
|
26564
26510
|
var CommandItem = React__default["default"].memo(UnMemoizedCommandItem);
|
|
26565
26511
|
|
|
26512
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt#getting_whole_characters
|
|
26513
|
+
var getWholeChar = function (str, i) {
|
|
26514
|
+
var code = str.charCodeAt(i);
|
|
26515
|
+
if (Number.isNaN(code))
|
|
26516
|
+
return '';
|
|
26517
|
+
if (code < 0xd800 || code > 0xdfff)
|
|
26518
|
+
return str.charAt(i);
|
|
26519
|
+
if (0xd800 <= code && code <= 0xdbff) {
|
|
26520
|
+
if (str.length <= i + 1) {
|
|
26521
|
+
throw 'High surrogate without following low surrogate';
|
|
26522
|
+
}
|
|
26523
|
+
var next = str.charCodeAt(i + 1);
|
|
26524
|
+
if (0xdc00 > next || next > 0xdfff) {
|
|
26525
|
+
throw 'High surrogate without following low surrogate';
|
|
26526
|
+
}
|
|
26527
|
+
return str.charAt(i) + str.charAt(i + 1);
|
|
26528
|
+
}
|
|
26529
|
+
if (i === 0) {
|
|
26530
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
26531
|
+
}
|
|
26532
|
+
var prev = str.charCodeAt(i - 1);
|
|
26533
|
+
if (0xd800 > prev || prev > 0xdbff) {
|
|
26534
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
26535
|
+
}
|
|
26536
|
+
return '';
|
|
26537
|
+
};
|
|
26538
|
+
|
|
26566
26539
|
/**
|
|
26567
26540
|
* A round avatar image with fallback to username's first letter
|
|
26568
26541
|
*/
|
|
@@ -27265,6 +27238,31 @@ ReactTextareaAutocomplete.propTypes = {
|
|
|
27265
27238
|
value: PropTypes__default["default"].string
|
|
27266
27239
|
};
|
|
27267
27240
|
|
|
27241
|
+
let urlAlphabet =
|
|
27242
|
+
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';
|
|
27243
|
+
|
|
27244
|
+
const POOL_SIZE_MULTIPLIER = 128;
|
|
27245
|
+
let pool, poolOffset;
|
|
27246
|
+
let fillPool = bytes => {
|
|
27247
|
+
if (!pool || pool.length < bytes) {
|
|
27248
|
+
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
|
|
27249
|
+
crypto__default["default"].randomFillSync(pool);
|
|
27250
|
+
poolOffset = 0;
|
|
27251
|
+
} else if (poolOffset + bytes > pool.length) {
|
|
27252
|
+
crypto__default["default"].randomFillSync(pool);
|
|
27253
|
+
poolOffset = 0;
|
|
27254
|
+
}
|
|
27255
|
+
poolOffset += bytes;
|
|
27256
|
+
};
|
|
27257
|
+
let nanoid = (size = 21) => {
|
|
27258
|
+
fillPool((size -= 0));
|
|
27259
|
+
let id = '';
|
|
27260
|
+
for (let i = poolOffset - size; i < poolOffset; i++) {
|
|
27261
|
+
id += urlAlphabet[pool[i] & 63];
|
|
27262
|
+
}
|
|
27263
|
+
return id
|
|
27264
|
+
};
|
|
27265
|
+
|
|
27268
27266
|
var channelReducer = function (state, action) {
|
|
27269
27267
|
var _a;
|
|
27270
27268
|
switch (action.type) {
|
|
@@ -28003,6 +28001,13 @@ var getReadByTooltipText = function (users, t, client, tooltipUserNameMapper) {
|
|
|
28003
28001
|
}
|
|
28004
28002
|
return outStr;
|
|
28005
28003
|
};
|
|
28004
|
+
var isOnlyEmojis = function (text) {
|
|
28005
|
+
if (!text)
|
|
28006
|
+
return false;
|
|
28007
|
+
var noEmojis = text.replace(emojiRegex__default["default"](), '');
|
|
28008
|
+
var noSpace = noEmojis.replace(/[\s\n]/gm, '');
|
|
28009
|
+
return !noSpace;
|
|
28010
|
+
};
|
|
28006
28011
|
|
|
28007
28012
|
var CustomMessageActionsList = function (props) {
|
|
28008
28013
|
var customMessageActions = props.customMessageActions, message = props.message;
|
|
@@ -35003,7 +35008,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
35003
35008
|
*/
|
|
35004
35009
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
35005
35010
|
|
|
35006
|
-
var version = '10.
|
|
35011
|
+
var version = '10.15.0';
|
|
35007
35012
|
|
|
35008
35013
|
var useChat = function (_a) {
|
|
35009
35014
|
var _b, _c;
|
|
@@ -35227,7 +35232,7 @@ var UnMemoizedDateSeparator = function (props) {
|
|
|
35227
35232
|
messageCreatedAt: messageCreatedAt,
|
|
35228
35233
|
tDateTimeParser: tDateTimeParser,
|
|
35229
35234
|
});
|
|
35230
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__date-separator' },
|
|
35235
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__date-separator', "data-testid": 'date-separator' },
|
|
35231
35236
|
(position === 'right' || position === 'center') && (React__default["default"].createElement("hr", { className: 'str-chat__date-separator-line' })),
|
|
35232
35237
|
React__default["default"].createElement("div", { className: 'str-chat__date-separator-date' }, unread ? "".concat(t('New'), " - ").concat(formattedDate) : formattedDate),
|
|
35233
35238
|
(position === 'left' || position === 'center') && (React__default["default"].createElement("hr", { className: 'str-chat__date-separator-line' }))));
|
|
@@ -35247,7 +35252,7 @@ var UnMemoizedEventComponent = function (props) {
|
|
|
35247
35252
|
var _e = message.created_at, created_at = _e === void 0 ? '' : _e, event = message.event, text = message.text, type = message.type;
|
|
35248
35253
|
var getDateOptions = { messageCreatedAt: created_at.toString(), tDateTimeParser: tDateTimeParser };
|
|
35249
35254
|
if (type === 'system')
|
|
35250
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__message--system' },
|
|
35255
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__message--system', "data-testid": 'message-system' },
|
|
35251
35256
|
React__default["default"].createElement("div", { className: 'str-chat__message--system__text' },
|
|
35252
35257
|
React__default["default"].createElement("div", { className: 'str-chat__message--system__line' }),
|
|
35253
35258
|
React__default["default"].createElement("p", null, text),
|
|
@@ -36529,23 +36534,6 @@ var UnMemoizedScrollToBottomButton = function (props) {
|
|
|
36529
36534
|
};
|
|
36530
36535
|
var ScrollToBottomButton = React__default["default"].memo(UnMemoizedScrollToBottomButton);
|
|
36531
36536
|
|
|
36532
|
-
var useGiphyPreview = function (separateGiphyPreview) {
|
|
36533
|
-
var _a = React.useState(), giphyPreviewMessage = _a[0], setGiphyPreviewMessage = _a[1];
|
|
36534
|
-
var client = useChatContext('useGiphyPreview').client;
|
|
36535
|
-
React.useEffect(function () {
|
|
36536
|
-
var handleEvent = function (event) {
|
|
36537
|
-
var message = event.message, user = event.user;
|
|
36538
|
-
if ((message === null || message === void 0 ? void 0 : message.command) === 'giphy' && (user === null || user === void 0 ? void 0 : user.id) === client.userID) {
|
|
36539
|
-
setGiphyPreviewMessage(undefined);
|
|
36540
|
-
}
|
|
36541
|
-
};
|
|
36542
|
-
if (separateGiphyPreview)
|
|
36543
|
-
client.on('message.new', handleEvent);
|
|
36544
|
-
return function () { return client.off('message.new', handleEvent); };
|
|
36545
|
-
}, [separateGiphyPreview]);
|
|
36546
|
-
return { giphyPreviewMessage: giphyPreviewMessage, setGiphyPreviewMessage: setGiphyPreviewMessage };
|
|
36547
|
-
};
|
|
36548
|
-
|
|
36549
36537
|
function useNewMessageNotification(messages, currentUserId, hasMoreNewer) {
|
|
36550
36538
|
var _a = React.useState(false), newMessagesNotification = _a[0], setNewMessagesNotification = _a[1];
|
|
36551
36539
|
var _b = React.useState(true), isMessageListScrolledToBottom = _b[0], setIsMessageListScrolledToBottom = _b[1];
|
|
@@ -36669,7 +36657,134 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
36669
36657
|
return recheckForNewOwnMessage;
|
|
36670
36658
|
}
|
|
36671
36659
|
|
|
36660
|
+
var useGiphyPreview = function (separateGiphyPreview) {
|
|
36661
|
+
var _a = React.useState(), giphyPreviewMessage = _a[0], setGiphyPreviewMessage = _a[1];
|
|
36662
|
+
var client = useChatContext('useGiphyPreview').client;
|
|
36663
|
+
React.useEffect(function () {
|
|
36664
|
+
var handleEvent = function (event) {
|
|
36665
|
+
var message = event.message, user = event.user;
|
|
36666
|
+
if ((message === null || message === void 0 ? void 0 : message.command) === 'giphy' && (user === null || user === void 0 ? void 0 : user.id) === client.userID) {
|
|
36667
|
+
setGiphyPreviewMessage(undefined);
|
|
36668
|
+
}
|
|
36669
|
+
};
|
|
36670
|
+
if (separateGiphyPreview)
|
|
36671
|
+
client.on('message.new', handleEvent);
|
|
36672
|
+
return function () { return client.off('message.new', handleEvent); };
|
|
36673
|
+
}, [separateGiphyPreview]);
|
|
36674
|
+
return { giphyPreviewMessage: giphyPreviewMessage, setGiphyPreviewMessage: setGiphyPreviewMessage };
|
|
36675
|
+
};
|
|
36676
|
+
|
|
36677
|
+
var useMessageSetKey = function (_a) {
|
|
36678
|
+
var messages = _a.messages;
|
|
36679
|
+
/**
|
|
36680
|
+
* Logic to update the key of the virtuoso component when the list jumps to a new location.
|
|
36681
|
+
*/
|
|
36682
|
+
var _b = React.useState(+new Date()), messageSetKey = _b[0], setMessageSetKey = _b[1];
|
|
36683
|
+
var firstMessageId = React.useRef();
|
|
36684
|
+
React.useEffect(function () {
|
|
36685
|
+
var _a;
|
|
36686
|
+
var continuousSet = messages === null || messages === void 0 ? void 0 : messages.find(function (message) { return message.id === firstMessageId.current; });
|
|
36687
|
+
if (!continuousSet) {
|
|
36688
|
+
setMessageSetKey(+new Date());
|
|
36689
|
+
}
|
|
36690
|
+
firstMessageId.current = (_a = messages === null || messages === void 0 ? void 0 : messages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
36691
|
+
}, [messages]);
|
|
36692
|
+
return {
|
|
36693
|
+
messageSetKey: messageSetKey,
|
|
36694
|
+
};
|
|
36695
|
+
};
|
|
36696
|
+
|
|
36697
|
+
var useScrollToBottomOnNewMessage = function (_a) {
|
|
36698
|
+
var messages = _a.messages, scrollToBottom = _a.scrollToBottom, scrollToLatestMessageOnFocus = _a.scrollToLatestMessageOnFocus;
|
|
36699
|
+
var _b = React__default["default"].useState(false), newMessagesReceivedInBackground = _b[0], setNewMessagesReceivedInBackground = _b[1];
|
|
36700
|
+
var resetNewMessagesReceivedInBackground = React.useCallback(function () {
|
|
36701
|
+
setNewMessagesReceivedInBackground(false);
|
|
36702
|
+
}, []);
|
|
36703
|
+
React.useEffect(function () {
|
|
36704
|
+
setNewMessagesReceivedInBackground(true);
|
|
36705
|
+
}, [messages]);
|
|
36706
|
+
var scrollToBottomIfConfigured = React.useCallback(function (event) {
|
|
36707
|
+
if (!scrollToLatestMessageOnFocus ||
|
|
36708
|
+
!newMessagesReceivedInBackground ||
|
|
36709
|
+
event.target !== window)
|
|
36710
|
+
return;
|
|
36711
|
+
setTimeout(scrollToBottom, 100);
|
|
36712
|
+
}, [scrollToLatestMessageOnFocus, scrollToBottom, newMessagesReceivedInBackground]);
|
|
36713
|
+
React.useEffect(function () {
|
|
36714
|
+
if (typeof window !== 'undefined') {
|
|
36715
|
+
window.addEventListener('focus', scrollToBottomIfConfigured);
|
|
36716
|
+
window.addEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
36717
|
+
}
|
|
36718
|
+
return function () {
|
|
36719
|
+
window.removeEventListener('focus', scrollToBottomIfConfigured);
|
|
36720
|
+
window.removeEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
36721
|
+
};
|
|
36722
|
+
}, [scrollToBottomIfConfigured]);
|
|
36723
|
+
};
|
|
36724
|
+
|
|
36672
36725
|
var PREPEND_OFFSET = Math.pow(10, 7);
|
|
36726
|
+
function calculateItemIndex(virtuosoIndex, numItemsPrepended) {
|
|
36727
|
+
return virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
|
|
36728
|
+
}
|
|
36729
|
+
function calculateFirstItemIndex(numItemsPrepended) {
|
|
36730
|
+
return PREPEND_OFFSET - numItemsPrepended;
|
|
36731
|
+
}
|
|
36732
|
+
// using 'display: inline-block'
|
|
36733
|
+
// traps CSS margins of the item elements, preventing incorrect item measurements
|
|
36734
|
+
var Item = function (_a) {
|
|
36735
|
+
var _b;
|
|
36736
|
+
var _c;
|
|
36737
|
+
var context = _a.context, props = __rest(_a, ["context"]);
|
|
36738
|
+
if (!context)
|
|
36739
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
36740
|
+
var message = context.processedMessages[calculateItemIndex(props['data-item-index'], context.numItemsPrepended)];
|
|
36741
|
+
var groupStyles = context.messageGroupStyles[message.id];
|
|
36742
|
+
return (React__default["default"].createElement("div", __assign({}, props, { className: ((_c = context === null || context === void 0 ? void 0 : context.customClasses) === null || _c === void 0 ? void 0 : _c.virtualMessage) ||
|
|
36743
|
+
clsx('str-chat__virtual-list-message-wrapper str-chat__li', (_b = {},
|
|
36744
|
+
_b["str-chat__li--".concat(groupStyles)] = groupStyles,
|
|
36745
|
+
_b)) })));
|
|
36746
|
+
};
|
|
36747
|
+
var Header = function (_a) {
|
|
36748
|
+
var context = _a.context;
|
|
36749
|
+
var _b = useComponentContext('VirtualizedMessageListHeader').LoadingIndicator, LoadingIndicator$1 = _b === void 0 ? LoadingIndicator : _b;
|
|
36750
|
+
if (!(context === null || context === void 0 ? void 0 : context.loadingMore))
|
|
36751
|
+
return null;
|
|
36752
|
+
return LoadingIndicator$1 ? (React__default["default"].createElement("div", { className: 'str-chat__virtual-list__loading' },
|
|
36753
|
+
React__default["default"].createElement(LoadingIndicator$1, { size: 20 }))) : ((context === null || context === void 0 ? void 0 : context.head) || null);
|
|
36754
|
+
};
|
|
36755
|
+
var EmptyPlaceholder = function (_a) {
|
|
36756
|
+
var context = _a.context;
|
|
36757
|
+
var _b = useComponentContext('VirtualizedMessageList').EmptyStateIndicator, EmptyStateIndicator$1 = _b === void 0 ? EmptyStateIndicator : _b;
|
|
36758
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, EmptyStateIndicator$1 && (React__default["default"].createElement(EmptyStateIndicator$1, { listType: (context === null || context === void 0 ? void 0 : context.threadList) ? 'thread' : 'message' }))));
|
|
36759
|
+
};
|
|
36760
|
+
var Footer = function () {
|
|
36761
|
+
var TypingIndicator = useComponentContext('VirtualizedMessageList').TypingIndicator;
|
|
36762
|
+
return TypingIndicator ? React__default["default"].createElement(TypingIndicator, { avatarSize: 24 }) : null;
|
|
36763
|
+
};
|
|
36764
|
+
var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
|
|
36765
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
36766
|
+
var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, virtuosoRef = virtuosoContext.virtuosoRef;
|
|
36767
|
+
var streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);
|
|
36768
|
+
if (customMessageRenderer) {
|
|
36769
|
+
return customMessageRenderer(messageList, streamMessageIndex);
|
|
36770
|
+
}
|
|
36771
|
+
var message = messageList[streamMessageIndex];
|
|
36772
|
+
if (!message)
|
|
36773
|
+
return React__default["default"].createElement("div", { style: { height: '1px' } }); // returning null or zero height breaks the virtuoso
|
|
36774
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date && message.date && isDate(message.date)) {
|
|
36775
|
+
return DateSeparator ? React__default["default"].createElement(DateSeparator, { date: message.date, unread: message.unread }) : null;
|
|
36776
|
+
}
|
|
36777
|
+
if (message.type === 'system') {
|
|
36778
|
+
return MessageSystem ? React__default["default"].createElement(MessageSystem, { message: message }) : null;
|
|
36779
|
+
}
|
|
36780
|
+
var groupedByUser = shouldGroupByUser &&
|
|
36781
|
+
streamMessageIndex > 0 &&
|
|
36782
|
+
((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
|
|
36783
|
+
var firstOfGroup = shouldGroupByUser && ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
|
|
36784
|
+
var endOfGroup = shouldGroupByUser && ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
|
|
36785
|
+
return (React__default["default"].createElement(Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: (_j = virtuosoRef.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, readBy: ownMessagesReadByOthers[message.id] || [] }));
|
|
36786
|
+
};
|
|
36787
|
+
|
|
36673
36788
|
function captureResizeObserverExceededError(e) {
|
|
36674
36789
|
if (e.message === 'ResizeObserver loop completed with undelivered notifications.' ||
|
|
36675
36790
|
e.message === 'ResizeObserver loop limit exceeded') {
|
|
@@ -36700,19 +36815,21 @@ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
|
|
|
36700
36815
|
return messages.length - 1;
|
|
36701
36816
|
}
|
|
36702
36817
|
var VirtualizedMessageListWithContext = function (props) {
|
|
36703
|
-
var
|
|
36818
|
+
var additionalMessageInputProps = props.additionalMessageInputProps, _a = props.additionalVirtuosoProps, additionalVirtuosoProps = _a === void 0 ? {} : _a, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageActions = props.customMessageActions, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _b = props.disableDateSeparator, disableDateSeparator = _b === void 0 ? true : _b, groupStyles = props.groupStyles, hasMore = props.hasMore, hasMoreNewer = props.hasMoreNewer, head = props.head, _c = props.hideDeletedMessages, hideDeletedMessages = _c === void 0 ? false : _c, _d = props.hideNewMessageSeparator, hideNewMessageSeparator = _d === void 0 ? false : _d, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, MessageUIComponentFromProps = props.Message, messageActions = props.messageActions, _e = props.messageLimit, messageLimit = _e === void 0 ? 100 : _e, messages = props.messages, notifications = props.notifications,
|
|
36704
36819
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
36705
|
-
|
|
36820
|
+
_f = props.overscan,
|
|
36706
36821
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
36707
|
-
overscan =
|
|
36822
|
+
overscan = _f === void 0 ? 0 : _f, read = props.read, _g = props.returnAllReadData, returnAllReadData = _g === void 0 ? false : _g, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _h = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _h === void 0 ? false : _h, _j = props.separateGiphyPreview, separateGiphyPreview = _j === void 0 ? false : _j, _k = props.shouldGroupByUser, shouldGroupByUser = _k === void 0 ? false : _k, _l = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _l === void 0 ? 'smooth' : _l, suppressAutoscroll = props.suppressAutoscroll, threadList = props.threadList;
|
|
36823
|
+
var virtuosoComponentsFromProps = additionalVirtuosoProps.components, overridingVirtuosoProps = __rest(additionalVirtuosoProps, ["components"]);
|
|
36708
36824
|
// Stops errors generated from react-virtuoso to bubble up
|
|
36709
36825
|
// to Sentry or other tracking tools.
|
|
36710
36826
|
useCaptureResizeObserverExceededError();
|
|
36711
|
-
var
|
|
36712
|
-
var
|
|
36827
|
+
var _m = useComponentContext('VirtualizedMessageList'), _o = _m.DateSeparator, DateSeparator$1 = _o === void 0 ? DateSeparator : _o, _p = _m.GiphyPreviewMessage, GiphyPreviewMessage$1 = _p === void 0 ? GiphyPreviewMessage : _p, _q = _m.MessageListNotifications, MessageListNotifications$1 = _q === void 0 ? MessageListNotifications : _q, _r = _m.MessageNotification, MessageNotification$1 = _r === void 0 ? MessageNotification : _r, _s = _m.MessageSystem, MessageSystem = _s === void 0 ? EventComponent : _s, _t = _m.VirtualMessage, MessageUIComponentFromContext = _t === void 0 ? MessageSimple : _t;
|
|
36828
|
+
var MessageUIComponent = MessageUIComponentFromProps || MessageUIComponentFromContext;
|
|
36829
|
+
var _u = useChatContext('VirtualizedMessageList'), client = _u.client, customClasses = _u.customClasses;
|
|
36830
|
+
var virtuoso = React.useRef(null);
|
|
36713
36831
|
var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
|
|
36714
|
-
var
|
|
36715
|
-
var _x = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _x.giphyPreviewMessage, setGiphyPreviewMessage = _x.setGiphyPreviewMessage;
|
|
36832
|
+
var _v = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _v.giphyPreviewMessage, setGiphyPreviewMessage = _v.setGiphyPreviewMessage;
|
|
36716
36833
|
var processedMessages = React.useMemo(function () {
|
|
36717
36834
|
if (typeof messages === 'undefined') {
|
|
36718
36835
|
return [];
|
|
@@ -36761,9 +36878,8 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36761
36878
|
}, {});
|
|
36762
36879
|
},
|
|
36763
36880
|
// processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage
|
|
36764
|
-
[processedMessages.length, shouldGroupByUser]);
|
|
36765
|
-
var
|
|
36766
|
-
var _y = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer), atBottom = _y.atBottom, isMessageListScrolledToBottom = _y.isMessageListScrolledToBottom, newMessagesNotification = _y.newMessagesNotification, setIsMessageListScrolledToBottom = _y.setIsMessageListScrolledToBottom, setNewMessagesNotification = _y.setNewMessagesNotification;
|
|
36881
|
+
[processedMessages.length, shouldGroupByUser, groupStylesFn]);
|
|
36882
|
+
var _w = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer), atBottom = _w.atBottom, isMessageListScrolledToBottom = _w.isMessageListScrolledToBottom, newMessagesNotification = _w.newMessagesNotification, setIsMessageListScrolledToBottom = _w.setIsMessageListScrolledToBottom, setNewMessagesNotification = _w.setNewMessagesNotification;
|
|
36767
36883
|
var scrollToBottom = React.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
36768
36884
|
return __generator(this, function (_a) {
|
|
36769
36885
|
switch (_a.label) {
|
|
@@ -36790,44 +36906,9 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36790
36906
|
hasMoreNewer,
|
|
36791
36907
|
jumpToLatestMessage,
|
|
36792
36908
|
]);
|
|
36793
|
-
|
|
36794
|
-
var resetNewMessagesReceivedInBackground = React.useCallback(function () {
|
|
36795
|
-
setNewMessagesReceivedInBackground(false);
|
|
36796
|
-
}, []);
|
|
36797
|
-
React.useEffect(function () {
|
|
36798
|
-
setNewMessagesReceivedInBackground(true);
|
|
36799
|
-
}, [messages]);
|
|
36800
|
-
var scrollToBottomIfConfigured = React.useCallback(function (event) {
|
|
36801
|
-
if (scrollToLatestMessageOnFocus && event.target === window) {
|
|
36802
|
-
if (newMessagesReceivedInBackground) {
|
|
36803
|
-
setTimeout(scrollToBottom, 100);
|
|
36804
|
-
}
|
|
36805
|
-
}
|
|
36806
|
-
}, [scrollToLatestMessageOnFocus, scrollToBottom, newMessagesReceivedInBackground]);
|
|
36807
|
-
React.useEffect(function () {
|
|
36808
|
-
if (typeof window !== 'undefined') {
|
|
36809
|
-
window.addEventListener('focus', scrollToBottomIfConfigured);
|
|
36810
|
-
window.addEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
36811
|
-
}
|
|
36812
|
-
return function () {
|
|
36813
|
-
window.removeEventListener('focus', scrollToBottomIfConfigured);
|
|
36814
|
-
window.removeEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
36815
|
-
};
|
|
36816
|
-
}, [scrollToBottomIfConfigured]);
|
|
36909
|
+
useScrollToBottomOnNewMessage({ messages: messages, scrollToBottom: scrollToBottom, scrollToLatestMessageOnFocus: scrollToLatestMessageOnFocus });
|
|
36817
36910
|
var numItemsPrepended = usePrependedMessagesCount(processedMessages, !disableDateSeparator);
|
|
36818
|
-
|
|
36819
|
-
* Logic to update the key of the virtuoso component when the list jumps to a new location.
|
|
36820
|
-
*/
|
|
36821
|
-
var _0 = React.useState(+new Date()), messageSetKey = _0[0], setMessageSetKey = _0[1];
|
|
36822
|
-
var firstMessageId = React.useRef();
|
|
36823
|
-
React.useEffect(function () {
|
|
36824
|
-
var _a;
|
|
36825
|
-
var continuousSet = messages === null || messages === void 0 ? void 0 : messages.find(function (message) { return message.id === firstMessageId.current; });
|
|
36826
|
-
if (!continuousSet) {
|
|
36827
|
-
setMessageSetKey(+new Date());
|
|
36828
|
-
}
|
|
36829
|
-
firstMessageId.current = (_a = messages === null || messages === void 0 ? void 0 : messages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
36830
|
-
}, [messages]);
|
|
36911
|
+
var messageSetKey = useMessageSetKey({ messages: messages }).messageSetKey;
|
|
36831
36912
|
var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages, client.userID);
|
|
36832
36913
|
var followOutput = function (isAtBottom) {
|
|
36833
36914
|
if (hasMoreNewer || suppressAutoscroll) {
|
|
@@ -36839,63 +36920,10 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36839
36920
|
// a message from another user has been received - don't scroll to bottom unless already there
|
|
36840
36921
|
return isAtBottom ? stickToBottomScrollBehavior : false;
|
|
36841
36922
|
};
|
|
36842
|
-
var
|
|
36843
|
-
var
|
|
36844
|
-
|
|
36845
|
-
var streamMessageIndex = virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
|
|
36846
|
-
// use custom renderer supplied by client if present and skip the rest
|
|
36847
|
-
if (customMessageRenderer) {
|
|
36848
|
-
return customMessageRenderer(messageList, streamMessageIndex);
|
|
36849
|
-
}
|
|
36850
|
-
var message = messageList[streamMessageIndex];
|
|
36851
|
-
if (message.customType === CUSTOM_MESSAGE_TYPE.date && message.date && isDate(message.date)) {
|
|
36852
|
-
return React__default["default"].createElement(DateSeparator$1, { date: message.date, unread: message.unread });
|
|
36853
|
-
}
|
|
36854
|
-
if (!message)
|
|
36855
|
-
return React__default["default"].createElement("div", { style: { height: '1px' } }); // returning null or zero height breaks the virtuoso
|
|
36856
|
-
if (message.type === 'system') {
|
|
36857
|
-
return React__default["default"].createElement(MessageSystem, { message: message });
|
|
36858
|
-
}
|
|
36859
|
-
var groupedByUser = shouldGroupByUser &&
|
|
36860
|
-
streamMessageIndex > 0 &&
|
|
36861
|
-
((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
|
|
36862
|
-
var firstOfGroup = shouldGroupByUser && ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
|
|
36863
|
-
var endOfGroup = shouldGroupByUser && ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
|
|
36864
|
-
return (React__default["default"].createElement(Message, { additionalMessageInputProps: props.additionalMessageInputProps, autoscrollToBottom: (_j = virtuoso.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: props.customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: props.messageActions, readBy: ownMessagesReadByOthers[message.id] || [] }));
|
|
36865
|
-
}, [customMessageRenderer, shouldGroupByUser, numItemsPrepended]);
|
|
36866
|
-
var Item = React.useMemo(function () {
|
|
36867
|
-
// using 'display: inline-block'
|
|
36868
|
-
// traps CSS margins of the item elements, preventing incorrect item measurements
|
|
36869
|
-
var Item = function (props) {
|
|
36870
|
-
var _a;
|
|
36871
|
-
var _b;
|
|
36872
|
-
var context = props.context;
|
|
36873
|
-
var streamMessageIndex = props['data-item-index'] + context.numItemsPrepended - PREPEND_OFFSET;
|
|
36874
|
-
var message = context.processedMessages[streamMessageIndex];
|
|
36875
|
-
var groupStyles = context.messageGroupStyles[message.id] || '';
|
|
36876
|
-
return (React__default["default"].createElement("div", __assign({}, props, { className: ((_b = context === null || context === void 0 ? void 0 : context.customClasses) === null || _b === void 0 ? void 0 : _b.virtualMessage) ||
|
|
36877
|
-
clsx('str-chat__virtual-list-message-wrapper str-chat__li', (_a = {},
|
|
36878
|
-
_a["str-chat__li--".concat(groupStyles)] = groupStyles,
|
|
36879
|
-
_a)) })));
|
|
36880
|
-
};
|
|
36881
|
-
return Item;
|
|
36923
|
+
var computeItemKey = React.useCallback(function (index, _, _a) {
|
|
36924
|
+
var numItemsPrepended = _a.numItemsPrepended, processedMessages = _a.processedMessages;
|
|
36925
|
+
return processedMessages[calculateItemIndex(index, numItemsPrepended)].id;
|
|
36882
36926
|
}, []);
|
|
36883
|
-
var virtuosoComponents = React.useMemo(function () {
|
|
36884
|
-
var EmptyPlaceholder = function () { return (React__default["default"].createElement(React__default["default"].Fragment, null, EmptyStateIndicator$1 && (React__default["default"].createElement(EmptyStateIndicator$1, { listType: threadList ? 'thread' : 'message' })))); };
|
|
36885
|
-
var Header = function () {
|
|
36886
|
-
return loadingMore ? (React__default["default"].createElement("div", { className: 'str-chat__virtual-list__loading' },
|
|
36887
|
-
React__default["default"].createElement(LoadingIndicator$1, { size: 20 }))) : (head || null);
|
|
36888
|
-
};
|
|
36889
|
-
var Footer = function () {
|
|
36890
|
-
return TypingIndicator ? React__default["default"].createElement(TypingIndicator, { avatarSize: 24 }) : React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
36891
|
-
};
|
|
36892
|
-
return {
|
|
36893
|
-
EmptyPlaceholder: EmptyPlaceholder,
|
|
36894
|
-
Footer: Footer,
|
|
36895
|
-
Header: Header,
|
|
36896
|
-
Item: Item,
|
|
36897
|
-
};
|
|
36898
|
-
}, [loadingMore, head, Item]);
|
|
36899
36927
|
var atBottomStateChange = function (isAtBottom) {
|
|
36900
36928
|
atBottom.current = isAtBottom;
|
|
36901
36929
|
setIsMessageListScrolledToBottom(isAtBottom);
|
|
@@ -36927,18 +36955,27 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36927
36955
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
36928
36956
|
React__default["default"].createElement(MessageListMainPanel, null,
|
|
36929
36957
|
React__default["default"].createElement("div", { className: (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list' },
|
|
36930
|
-
React__default["default"].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, atBottomThreshold: 200, className: 'str-chat__message-list-scroll', components:
|
|
36931
|
-
|
|
36932
|
-
|
|
36958
|
+
React__default["default"].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, atBottomThreshold: 200, className: 'str-chat__message-list-scroll', components: __assign({ EmptyPlaceholder: EmptyPlaceholder, Footer: Footer, Header: Header, Item: Item }, virtuosoComponentsFromProps), computeItemKey: computeItemKey, context: {
|
|
36959
|
+
additionalMessageInputProps: additionalMessageInputProps,
|
|
36960
|
+
closeReactionSelectorOnClick: closeReactionSelectorOnClick,
|
|
36933
36961
|
customClasses: customClasses,
|
|
36962
|
+
customMessageActions: customMessageActions,
|
|
36963
|
+
customMessageRenderer: customMessageRenderer,
|
|
36964
|
+
DateSeparator: DateSeparator$1,
|
|
36965
|
+
head: head,
|
|
36934
36966
|
lastReceivedMessageId: lastReceivedMessageId,
|
|
36967
|
+
loadingMore: loadingMore,
|
|
36968
|
+
Message: MessageUIComponent,
|
|
36969
|
+
messageActions: messageActions,
|
|
36935
36970
|
messageGroupStyles: messageGroupStyles,
|
|
36971
|
+
MessageSystem: MessageSystem,
|
|
36936
36972
|
numItemsPrepended: numItemsPrepended,
|
|
36937
36973
|
ownMessagesReadByOthers: ownMessagesReadByOthers,
|
|
36938
36974
|
processedMessages: processedMessages,
|
|
36939
|
-
|
|
36940
|
-
|
|
36941
|
-
|
|
36975
|
+
shouldGroupByUser: shouldGroupByUser,
|
|
36976
|
+
threadList: threadList,
|
|
36977
|
+
virtuosoRef: virtuoso,
|
|
36978
|
+
}, endReached: endReached, firstItemIndex: calculateFirstItemIndex(numItemsPrepended), followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: messageRenderer, itemSize: fractionalItemSize, key: messageSetKey, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, overridingVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {}))))),
|
|
36942
36979
|
React__default["default"].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, isMessageListScrolledToBottom: isMessageListScrolledToBottom, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom, threadList: threadList }),
|
|
36943
36980
|
giphyPreviewMessage && React__default["default"].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
|
|
36944
36981
|
};
|
|
@@ -37046,6 +37083,11 @@ var UnMemoizedWindow = function (props) {
|
|
|
37046
37083
|
*/
|
|
37047
37084
|
var Window = React__default["default"].memo(UnMemoizedWindow);
|
|
37048
37085
|
|
|
37086
|
+
/**
|
|
37087
|
+
* @deprecated will be removed in the next major release
|
|
37088
|
+
*/
|
|
37089
|
+
var generateRandomId = nanoid;
|
|
37090
|
+
|
|
37049
37091
|
// @ts-expect-error
|
|
37050
37092
|
|
|
37051
37093
|
var DefaultEmoji = /*#__PURE__*/Object.freeze({
|
|
@@ -37099,7 +37141,7 @@ exports.CooldownTimer = CooldownTimer;
|
|
|
37099
37141
|
exports.DateSeparator = DateSeparator;
|
|
37100
37142
|
exports.DefaultSuggestionList = List;
|
|
37101
37143
|
exports.DefaultSuggestionListHeader = DefaultSuggestionListHeader;
|
|
37102
|
-
exports.DefaultSuggestionListItem = Item;
|
|
37144
|
+
exports.DefaultSuggestionListItem = Item$1;
|
|
37103
37145
|
exports.DefaultTriggerProvider = DefaultTriggerProvider;
|
|
37104
37146
|
exports.DeliveredCheckIcon = DeliveredCheckIcon;
|
|
37105
37147
|
exports.DownloadIcon = DownloadIcon;
|
|
@@ -37207,6 +37249,7 @@ exports.areMessagePropsEqual = areMessagePropsEqual;
|
|
|
37207
37249
|
exports.areMessageUIPropsEqual = areMessageUIPropsEqual;
|
|
37208
37250
|
exports.darkModeTheme = darkModeTheme;
|
|
37209
37251
|
exports.deTranslations = deTranslations;
|
|
37252
|
+
exports.defaultAllowedTagNames = defaultAllowedTagNames;
|
|
37210
37253
|
exports.defaultDateTimeParser = defaultDateTimeParser;
|
|
37211
37254
|
exports.defaultPinPermissions = defaultPinPermissions;
|
|
37212
37255
|
exports.defaultScrollToItem = defaultScrollToItem;
|