stream-chat-react 10.14.1 → 10.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.full-bundle.js +6587 -6455
- 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/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +2 -1
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +3 -3
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts.map +1 -1
- package/dist/components/Chat/hooks/useChannelsQueryState.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/MessageInput/hooks/useCommandTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCommandTrigger.js +21 -2
- 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/i18n/Streami18n.d.ts +4 -3
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/Streami18n.js +3 -4
- package/dist/index.cjs.js +653 -592
- 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 +1 -1
- 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
|
|
|
@@ -1064,11 +1064,10 @@ var Streami18n = /** @class */ (function () {
|
|
|
1064
1064
|
keySeparator: false,
|
|
1065
1065
|
lng: this.currentLanguage,
|
|
1066
1066
|
nsSeparator: false,
|
|
1067
|
-
parseMissingKeyHandler: function (key) {
|
|
1068
|
-
_this.logger("Streami18n: Missing translation for key: ".concat(key));
|
|
1069
|
-
return key;
|
|
1070
|
-
},
|
|
1071
1067
|
};
|
|
1068
|
+
if (finalOptions.parseMissingKeyHandler) {
|
|
1069
|
+
this.i18nextConfig.parseMissingKeyHandler = finalOptions.parseMissingKeyHandler;
|
|
1070
|
+
}
|
|
1072
1071
|
this.validateCurrentLanguage();
|
|
1073
1072
|
var dayjsLocaleConfigForLanguage = finalOptions.dayjsLocaleConfigForLanguage;
|
|
1074
1073
|
if (dayjsLocaleConfigForLanguage) {
|
|
@@ -4331,7 +4330,7 @@ var getAttachmentType = function (attachment) {
|
|
|
4331
4330
|
return 'unsupported';
|
|
4332
4331
|
};
|
|
4333
4332
|
|
|
4334
|
-
var Item = /*#__PURE__*/React__default["default"].forwardRef(function Item(props, innerRef) {
|
|
4333
|
+
var Item$1 = /*#__PURE__*/React__default["default"].forwardRef(function Item(props, innerRef) {
|
|
4335
4334
|
var className = props.className,
|
|
4336
4335
|
Component = props.component,
|
|
4337
4336
|
item = props.item,
|
|
@@ -4378,29 +4377,29 @@ var Item = /*#__PURE__*/React__default["default"].forwardRef(function Item(props
|
|
|
4378
4377
|
}))));
|
|
4379
4378
|
});
|
|
4380
4379
|
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
}
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4380
|
+
var DefaultSuggestionListHeader = function (props) {
|
|
4381
|
+
var currentTrigger = props.currentTrigger, value = props.value;
|
|
4382
|
+
var t = useTranslationContext('DefaultSuggestionListHeader').t;
|
|
4383
|
+
var triggerIndex = value.lastIndexOf(currentTrigger);
|
|
4384
|
+
if (currentTrigger === '/') {
|
|
4385
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4386
|
+
t('Commands matching'),
|
|
4387
|
+
" ",
|
|
4388
|
+
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
4389
|
+
}
|
|
4390
|
+
if (currentTrigger === ':') {
|
|
4391
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4392
|
+
t('Emoji matching'),
|
|
4393
|
+
" ",
|
|
4394
|
+
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
4395
|
+
}
|
|
4396
|
+
if (currentTrigger === '@') {
|
|
4397
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
4398
|
+
t('People matching'),
|
|
4399
|
+
" ",
|
|
4400
|
+
React__default["default"].createElement("strong", null, value.slice(triggerIndex + 1))));
|
|
4401
|
+
}
|
|
4402
|
+
return null;
|
|
4404
4403
|
};
|
|
4405
4404
|
|
|
4406
4405
|
/**
|
|
@@ -5079,6 +5078,351 @@ function toFunction$1(replace) {
|
|
|
5079
5078
|
return typeof replace === 'function' ? replace : () => replace
|
|
5080
5079
|
}
|
|
5081
5080
|
|
|
5081
|
+
/**
|
|
5082
|
+
* @typedef {import('unist').Node} Node
|
|
5083
|
+
* @typedef {import('unist').Parent} Parent
|
|
5084
|
+
* @typedef {import('unist').Literal} Literal
|
|
5085
|
+
* @typedef {Object.<string, unknown>} Props
|
|
5086
|
+
* @typedef {Array.<Node>|string} ChildrenOrValue
|
|
5087
|
+
*
|
|
5088
|
+
* @typedef {(<T extends string, P extends Record<string, unknown>, C extends Node[]>(type: T, props: P, children: C) => {type: T, children: C} & P)} BuildParentWithProps
|
|
5089
|
+
* @typedef {(<T extends string, P extends Record<string, unknown>>(type: T, props: P, value: string) => {type: T, value: string} & P)} BuildLiteralWithProps
|
|
5090
|
+
* @typedef {(<T extends string, P extends Record<string, unknown>>(type: T, props: P) => {type: T} & P)} BuildVoidWithProps
|
|
5091
|
+
* @typedef {(<T extends string, C extends Node[]>(type: T, children: C) => {type: T, children: C})} BuildParent
|
|
5092
|
+
* @typedef {(<T extends string>(type: T, value: string) => {type: T, value: string})} BuildLiteral
|
|
5093
|
+
* @typedef {(<T extends string>(type: T) => {type: T})} BuildVoid
|
|
5094
|
+
*/
|
|
5095
|
+
|
|
5096
|
+
var u = /**
|
|
5097
|
+
* @type {BuildVoid & BuildVoidWithProps & BuildLiteral & BuildLiteralWithProps & BuildParent & BuildParentWithProps}
|
|
5098
|
+
*/ (
|
|
5099
|
+
/**
|
|
5100
|
+
* @param {string} type Type of node
|
|
5101
|
+
* @param {Props|ChildrenOrValue} [props] Additional properties for node (or `children` or `value`)
|
|
5102
|
+
* @param {ChildrenOrValue} [value] `children` or `value` of node
|
|
5103
|
+
* @returns {Node}
|
|
5104
|
+
*/
|
|
5105
|
+
function (type, props, value) {
|
|
5106
|
+
/** @type {Node} */
|
|
5107
|
+
var node = {type: String(type)};
|
|
5108
|
+
|
|
5109
|
+
if (
|
|
5110
|
+
(value === undefined || value === null) &&
|
|
5111
|
+
(typeof props === 'string' || Array.isArray(props))
|
|
5112
|
+
) {
|
|
5113
|
+
value = props;
|
|
5114
|
+
} else {
|
|
5115
|
+
Object.assign(node, props);
|
|
5116
|
+
}
|
|
5117
|
+
|
|
5118
|
+
if (Array.isArray(value)) {
|
|
5119
|
+
node.children = value;
|
|
5120
|
+
} else if (value !== undefined && value !== null) {
|
|
5121
|
+
node.value = String(value);
|
|
5122
|
+
}
|
|
5123
|
+
|
|
5124
|
+
return node
|
|
5125
|
+
}
|
|
5126
|
+
);
|
|
5127
|
+
|
|
5128
|
+
/**
|
|
5129
|
+
* @param {string} d
|
|
5130
|
+
* @returns {string}
|
|
5131
|
+
*/
|
|
5132
|
+
function color(d) {
|
|
5133
|
+
return '\u001B[33m' + d + '\u001B[39m'
|
|
5134
|
+
}
|
|
5135
|
+
|
|
5136
|
+
/**
|
|
5137
|
+
* @typedef {import('unist').Node} Node
|
|
5138
|
+
* @typedef {import('unist').Parent} Parent
|
|
5139
|
+
* @typedef {import('unist-util-is').Test} Test
|
|
5140
|
+
* @typedef {import('./complex-types.js').Action} Action
|
|
5141
|
+
* @typedef {import('./complex-types.js').Index} Index
|
|
5142
|
+
* @typedef {import('./complex-types.js').ActionTuple} ActionTuple
|
|
5143
|
+
* @typedef {import('./complex-types.js').VisitorResult} VisitorResult
|
|
5144
|
+
* @typedef {import('./complex-types.js').Visitor} Visitor
|
|
5145
|
+
*/
|
|
5146
|
+
|
|
5147
|
+
/**
|
|
5148
|
+
* Continue traversing as normal
|
|
5149
|
+
*/
|
|
5150
|
+
const CONTINUE = true;
|
|
5151
|
+
/**
|
|
5152
|
+
* Do not traverse this node’s children
|
|
5153
|
+
*/
|
|
5154
|
+
const SKIP = 'skip';
|
|
5155
|
+
/**
|
|
5156
|
+
* Stop traversing immediately
|
|
5157
|
+
*/
|
|
5158
|
+
const EXIT = false;
|
|
5159
|
+
|
|
5160
|
+
/**
|
|
5161
|
+
* Visit children of tree which pass test.
|
|
5162
|
+
*
|
|
5163
|
+
* @param tree
|
|
5164
|
+
* Tree to walk
|
|
5165
|
+
* @param [test]
|
|
5166
|
+
* `unist-util-is`-compatible test
|
|
5167
|
+
* @param visitor
|
|
5168
|
+
* Function called for nodes that pass `test`.
|
|
5169
|
+
* @param [reverse=false]
|
|
5170
|
+
* Traverse in reverse preorder (NRL) instead of preorder (NLR) (default).
|
|
5171
|
+
*/
|
|
5172
|
+
const visitParents =
|
|
5173
|
+
/**
|
|
5174
|
+
* @type {(
|
|
5175
|
+
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: import('./complex-types.js').BuildVisitor<Tree, Check>, reverse?: boolean) => void) &
|
|
5176
|
+
* (<Tree extends Node>(tree: Tree, visitor: import('./complex-types.js').BuildVisitor<Tree>, reverse?: boolean) => void)
|
|
5177
|
+
* )}
|
|
5178
|
+
*/
|
|
5179
|
+
(
|
|
5180
|
+
/**
|
|
5181
|
+
* @param {Node} tree
|
|
5182
|
+
* @param {Test} test
|
|
5183
|
+
* @param {import('./complex-types.js').Visitor<Node>} visitor
|
|
5184
|
+
* @param {boolean} [reverse=false]
|
|
5185
|
+
*/
|
|
5186
|
+
function (tree, test, visitor, reverse) {
|
|
5187
|
+
if (typeof test === 'function' && typeof visitor !== 'function') {
|
|
5188
|
+
reverse = visitor;
|
|
5189
|
+
// @ts-expect-error no visitor given, so `visitor` is test.
|
|
5190
|
+
visitor = test;
|
|
5191
|
+
test = null;
|
|
5192
|
+
}
|
|
5193
|
+
|
|
5194
|
+
const is = convert(test);
|
|
5195
|
+
const step = reverse ? -1 : 1;
|
|
5196
|
+
|
|
5197
|
+
factory(tree, null, [])();
|
|
5198
|
+
|
|
5199
|
+
/**
|
|
5200
|
+
* @param {Node} node
|
|
5201
|
+
* @param {number?} index
|
|
5202
|
+
* @param {Array<Parent>} parents
|
|
5203
|
+
*/
|
|
5204
|
+
function factory(node, index, parents) {
|
|
5205
|
+
/** @type {Record<string, unknown>} */
|
|
5206
|
+
// @ts-expect-error: hush
|
|
5207
|
+
const value = typeof node === 'object' && node !== null ? node : {};
|
|
5208
|
+
/** @type {string|undefined} */
|
|
5209
|
+
let name;
|
|
5210
|
+
|
|
5211
|
+
if (typeof value.type === 'string') {
|
|
5212
|
+
name =
|
|
5213
|
+
typeof value.tagName === 'string'
|
|
5214
|
+
? value.tagName
|
|
5215
|
+
: typeof value.name === 'string'
|
|
5216
|
+
? value.name
|
|
5217
|
+
: undefined;
|
|
5218
|
+
|
|
5219
|
+
Object.defineProperty(visit, 'name', {
|
|
5220
|
+
value:
|
|
5221
|
+
'node (' +
|
|
5222
|
+
color(value.type + (name ? '<' + name + '>' : '')) +
|
|
5223
|
+
')'
|
|
5224
|
+
});
|
|
5225
|
+
}
|
|
5226
|
+
|
|
5227
|
+
return visit
|
|
5228
|
+
|
|
5229
|
+
function visit() {
|
|
5230
|
+
/** @type {ActionTuple} */
|
|
5231
|
+
let result = [];
|
|
5232
|
+
/** @type {ActionTuple} */
|
|
5233
|
+
let subresult;
|
|
5234
|
+
/** @type {number} */
|
|
5235
|
+
let offset;
|
|
5236
|
+
/** @type {Array<Parent>} */
|
|
5237
|
+
let grandparents;
|
|
5238
|
+
|
|
5239
|
+
if (!test || is(node, index, parents[parents.length - 1] || null)) {
|
|
5240
|
+
result = toResult(visitor(node, parents));
|
|
5241
|
+
|
|
5242
|
+
if (result[0] === EXIT) {
|
|
5243
|
+
return result
|
|
5244
|
+
}
|
|
5245
|
+
}
|
|
5246
|
+
|
|
5247
|
+
// @ts-expect-error looks like a parent.
|
|
5248
|
+
if (node.children && result[0] !== SKIP) {
|
|
5249
|
+
// @ts-expect-error looks like a parent.
|
|
5250
|
+
offset = (reverse ? node.children.length : -1) + step;
|
|
5251
|
+
// @ts-expect-error looks like a parent.
|
|
5252
|
+
grandparents = parents.concat(node);
|
|
5253
|
+
|
|
5254
|
+
// @ts-expect-error looks like a parent.
|
|
5255
|
+
while (offset > -1 && offset < node.children.length) {
|
|
5256
|
+
// @ts-expect-error looks like a parent.
|
|
5257
|
+
subresult = factory(node.children[offset], offset, grandparents)();
|
|
5258
|
+
|
|
5259
|
+
if (subresult[0] === EXIT) {
|
|
5260
|
+
return subresult
|
|
5261
|
+
}
|
|
5262
|
+
|
|
5263
|
+
offset =
|
|
5264
|
+
typeof subresult[1] === 'number' ? subresult[1] : offset + step;
|
|
5265
|
+
}
|
|
5266
|
+
}
|
|
5267
|
+
|
|
5268
|
+
return result
|
|
5269
|
+
}
|
|
5270
|
+
}
|
|
5271
|
+
}
|
|
5272
|
+
);
|
|
5273
|
+
|
|
5274
|
+
/**
|
|
5275
|
+
* @param {VisitorResult} value
|
|
5276
|
+
* @returns {ActionTuple}
|
|
5277
|
+
*/
|
|
5278
|
+
function toResult(value) {
|
|
5279
|
+
if (Array.isArray(value)) {
|
|
5280
|
+
return value
|
|
5281
|
+
}
|
|
5282
|
+
|
|
5283
|
+
if (typeof value === 'number') {
|
|
5284
|
+
return [CONTINUE, value]
|
|
5285
|
+
}
|
|
5286
|
+
|
|
5287
|
+
return [value]
|
|
5288
|
+
}
|
|
5289
|
+
|
|
5290
|
+
/**
|
|
5291
|
+
* @typedef {import('unist').Node} Node
|
|
5292
|
+
* @typedef {import('unist').Parent} Parent
|
|
5293
|
+
* @typedef {import('unist-util-is').Test} Test
|
|
5294
|
+
* @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult
|
|
5295
|
+
* @typedef {import('./complex-types.js').Visitor} Visitor
|
|
5296
|
+
*/
|
|
5297
|
+
|
|
5298
|
+
/**
|
|
5299
|
+
* Visit children of tree which pass test.
|
|
5300
|
+
*
|
|
5301
|
+
* @param tree
|
|
5302
|
+
* Tree to walk
|
|
5303
|
+
* @param [test]
|
|
5304
|
+
* `unist-util-is`-compatible test
|
|
5305
|
+
* @param visitor
|
|
5306
|
+
* Function called for nodes that pass `test`.
|
|
5307
|
+
* @param reverse
|
|
5308
|
+
* Traverse in reverse preorder (NRL) instead of preorder (NLR) (default).
|
|
5309
|
+
*/
|
|
5310
|
+
const visit =
|
|
5311
|
+
/**
|
|
5312
|
+
* @type {(
|
|
5313
|
+
* (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: import('./complex-types.js').BuildVisitor<Tree, Check>, reverse?: boolean) => void) &
|
|
5314
|
+
* (<Tree extends Node>(tree: Tree, visitor: import('./complex-types.js').BuildVisitor<Tree>, reverse?: boolean) => void)
|
|
5315
|
+
* )}
|
|
5316
|
+
*/
|
|
5317
|
+
(
|
|
5318
|
+
/**
|
|
5319
|
+
* @param {Node} tree
|
|
5320
|
+
* @param {Test} test
|
|
5321
|
+
* @param {import('./complex-types.js').Visitor} visitor
|
|
5322
|
+
* @param {boolean} [reverse]
|
|
5323
|
+
*/
|
|
5324
|
+
function (tree, test, visitor, reverse) {
|
|
5325
|
+
if (typeof test === 'function' && typeof visitor !== 'function') {
|
|
5326
|
+
reverse = visitor;
|
|
5327
|
+
visitor = test;
|
|
5328
|
+
test = null;
|
|
5329
|
+
}
|
|
5330
|
+
|
|
5331
|
+
visitParents(tree, test, overload, reverse);
|
|
5332
|
+
|
|
5333
|
+
/**
|
|
5334
|
+
* @param {Node} node
|
|
5335
|
+
* @param {Array<Parent>} parents
|
|
5336
|
+
*/
|
|
5337
|
+
function overload(node, parents) {
|
|
5338
|
+
const parent = parents[parents.length - 1];
|
|
5339
|
+
return visitor(
|
|
5340
|
+
node,
|
|
5341
|
+
parent ? parent.children.indexOf(node) : null,
|
|
5342
|
+
parent
|
|
5343
|
+
)
|
|
5344
|
+
}
|
|
5345
|
+
}
|
|
5346
|
+
);
|
|
5347
|
+
|
|
5348
|
+
function escapeRegExp(text) {
|
|
5349
|
+
return text.replace(/[-[\]{}()*+?.,/\\^$|#]/g, '\\$&');
|
|
5350
|
+
}
|
|
5351
|
+
var detectHttp = /(http(s?):\/\/)?(www\.)?/;
|
|
5352
|
+
var messageCodeBlocks = function (message) {
|
|
5353
|
+
var codeRegex = /```[a-z]*\n[\s\S]*?\n```|`[a-z]*[\s\S]*?`/gm;
|
|
5354
|
+
var matches = message.match(codeRegex);
|
|
5355
|
+
return matches || [];
|
|
5356
|
+
};
|
|
5357
|
+
var matchMarkdownLinks = function (message) {
|
|
5358
|
+
var regexMdLinks = /\[([^[]+)\](\(.*\))/gm;
|
|
5359
|
+
var matches = message.match(regexMdLinks);
|
|
5360
|
+
var singleMatch = /\[([^[]+)\]\((.*)\)/;
|
|
5361
|
+
var links = matches
|
|
5362
|
+
? matches.map(function (match) {
|
|
5363
|
+
var i = singleMatch.exec(match);
|
|
5364
|
+
return i && [i[1], i[2]];
|
|
5365
|
+
})
|
|
5366
|
+
: [];
|
|
5367
|
+
return links.flat();
|
|
5368
|
+
};
|
|
5369
|
+
|
|
5370
|
+
var mentionsMarkdownPlugin = function (mentioned_users) { return function () {
|
|
5371
|
+
var mentioned_usernames = mentioned_users
|
|
5372
|
+
.map(function (user) { return user.name || user.id; })
|
|
5373
|
+
.filter(Boolean)
|
|
5374
|
+
.map(escapeRegExp);
|
|
5375
|
+
var mentionedUsersRegex = new RegExp(mentioned_usernames.map(function (username) { return "@".concat(username); }).join('|'), 'g');
|
|
5376
|
+
var replace = function (match) {
|
|
5377
|
+
var usernameOrId = match.replace('@', '');
|
|
5378
|
+
var user = mentioned_users.find(function (_a) {
|
|
5379
|
+
var id = _a.id, name = _a.name;
|
|
5380
|
+
return name === usernameOrId || id === usernameOrId;
|
|
5381
|
+
});
|
|
5382
|
+
return u('element', { mentionedUser: user, tagName: 'mention' }, [u('text', match)]);
|
|
5383
|
+
};
|
|
5384
|
+
var transform = function (tree) {
|
|
5385
|
+
if (!mentioned_usernames.length)
|
|
5386
|
+
return tree;
|
|
5387
|
+
// handles special cases of mentions where user.name is an e-mail
|
|
5388
|
+
// Remark GFM translates all e-mail-like text nodes to links creating
|
|
5389
|
+
// two separate child nodes "@" and "your.name@as.email" instead of
|
|
5390
|
+
// keeping it as one text node with value "@your.name@as.email"
|
|
5391
|
+
// this piece finds these two separated nodes and merges them together
|
|
5392
|
+
// before "replace" function takes over
|
|
5393
|
+
visit(tree, function (node, index, parent) {
|
|
5394
|
+
var _a;
|
|
5395
|
+
if (index === null)
|
|
5396
|
+
return;
|
|
5397
|
+
if (!parent)
|
|
5398
|
+
return;
|
|
5399
|
+
var nextChild = parent.children.at(index + 1);
|
|
5400
|
+
var nextChildHref = (_a = nextChild === null || nextChild === void 0 ? void 0 : nextChild.properties) === null || _a === void 0 ? void 0 : _a.href;
|
|
5401
|
+
if (node.type === 'text' &&
|
|
5402
|
+
// text value has to have @ sign at the end of the string
|
|
5403
|
+
// and no other characters except whitespace can precede it
|
|
5404
|
+
// valid cases: "text @", "@", " @"
|
|
5405
|
+
// invalid cases: "text@", "@text",
|
|
5406
|
+
/.?\s?@$|^@$/.test(node.value) &&
|
|
5407
|
+
(nextChildHref === null || nextChildHref === void 0 ? void 0 : nextChildHref.startsWith('mailto:'))) {
|
|
5408
|
+
var newTextValue = node.value.replace(/@$/, '');
|
|
5409
|
+
var username = nextChildHref.replace('mailto:', '');
|
|
5410
|
+
parent.children[index] = u('text', newTextValue);
|
|
5411
|
+
parent.children[index + 1] = u('text', "@".concat(username));
|
|
5412
|
+
}
|
|
5413
|
+
});
|
|
5414
|
+
return findAndReplace$1(tree, mentionedUsersRegex, replace);
|
|
5415
|
+
};
|
|
5416
|
+
return transform;
|
|
5417
|
+
}; };
|
|
5418
|
+
var emojiMarkdownPlugin = function () {
|
|
5419
|
+
var replace = function (match) {
|
|
5420
|
+
return u('element', { tagName: 'emoji' }, [u('text', match)]);
|
|
5421
|
+
};
|
|
5422
|
+
var transform = function (node) { return findAndReplace$1(node, emojiRegex__default["default"](), replace); };
|
|
5423
|
+
return transform;
|
|
5424
|
+
};
|
|
5425
|
+
|
|
5082
5426
|
const protocols = ['http', 'https', 'mailto', 'tel'];
|
|
5083
5427
|
|
|
5084
5428
|
/**
|
|
@@ -17874,53 +18218,6 @@ function remarkParse(options) {
|
|
|
17874
18218
|
Object.assign(this, {Parser: parser});
|
|
17875
18219
|
}
|
|
17876
18220
|
|
|
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
18221
|
/**
|
|
17925
18222
|
* @typedef {import('mdast').Root|import('mdast').Parent['children'][number]} MdastNode
|
|
17926
18223
|
* @typedef {import('./index.js').H} H
|
|
@@ -18028,226 +18325,6 @@ function all(h, parent) {
|
|
|
18028
18325
|
return values
|
|
18029
18326
|
}
|
|
18030
18327
|
|
|
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
18328
|
/**
|
|
18252
18329
|
* @typedef {import('unist').Position} Position
|
|
18253
18330
|
* @typedef {import('unist').Node} Node
|
|
@@ -26097,14 +26174,26 @@ function remarkGfm(options = {}) {
|
|
|
26097
26174
|
}
|
|
26098
26175
|
}
|
|
26099
26176
|
|
|
26100
|
-
var
|
|
26101
|
-
|
|
26102
|
-
|
|
26103
|
-
|
|
26104
|
-
|
|
26105
|
-
|
|
26177
|
+
var Emoji = function (_a) {
|
|
26178
|
+
var children = _a.children;
|
|
26179
|
+
return (React__default["default"].createElement("span", { className: 'inline-text-emoji', "data-testid": 'inline-text-emoji' }, children));
|
|
26180
|
+
};
|
|
26181
|
+
|
|
26182
|
+
var Anchor = function (_a) {
|
|
26183
|
+
var children = _a.children, href = _a.href;
|
|
26184
|
+
var isEmail = href === null || href === void 0 ? void 0 : href.startsWith('mailto:');
|
|
26185
|
+
var isUrl = href === null || href === void 0 ? void 0 : href.startsWith('http');
|
|
26186
|
+
if (!href || (!isEmail && !isUrl))
|
|
26187
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
26188
|
+
return (React__default["default"].createElement("a", { className: clsx({ 'str-chat__message-url-link': isUrl }), href: href, rel: 'nofollow noreferrer noopener', target: '_blank' }, children));
|
|
26189
|
+
};
|
|
26190
|
+
|
|
26191
|
+
var Mention = function (_a) {
|
|
26192
|
+
var children = _a.children, mentionedUser = _a.node.mentionedUser;
|
|
26193
|
+
return (React__default["default"].createElement("span", { className: 'str-chat__message-mention', "data-user-id": mentionedUser.id }, children));
|
|
26106
26194
|
};
|
|
26107
|
-
|
|
26195
|
+
|
|
26196
|
+
var defaultAllowedTagNames = [
|
|
26108
26197
|
'html',
|
|
26109
26198
|
'text',
|
|
26110
26199
|
'br',
|
|
@@ -26123,24 +26212,6 @@ var allowedMarkups = [
|
|
|
26123
26212
|
'emoji',
|
|
26124
26213
|
'mention',
|
|
26125
26214
|
];
|
|
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
26215
|
function formatUrlForDisplay(url) {
|
|
26145
26216
|
try {
|
|
26146
26217
|
return decodeURIComponent(url).replace(detectHttp, '');
|
|
@@ -26157,84 +26228,15 @@ function encodeDecode(url) {
|
|
|
26157
26228
|
return url;
|
|
26158
26229
|
}
|
|
26159
26230
|
}
|
|
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
|
-
};
|
|
26231
|
+
var transformLinkUri = function (uri) { return (uri.startsWith('app://') ? uri : uriTransformer(uri)); };
|
|
26232
|
+
var getPluginsForward = function (plugins) { return plugins; };
|
|
26176
26233
|
var markDownRenderers = {
|
|
26177
26234
|
a: Anchor,
|
|
26178
26235
|
emoji: Emoji,
|
|
26179
26236
|
mention: Mention,
|
|
26180
26237
|
};
|
|
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
26238
|
var renderText = function (text, mentionedUsers, _a) {
|
|
26237
|
-
var _b = _a === void 0 ? {} : _a, customMarkDownRenderers = _b.customMarkDownRenderers;
|
|
26239
|
+
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
26240
|
// take the @ mentions and turn them into markdown?
|
|
26239
26241
|
// translate links
|
|
26240
26242
|
if (!text)
|
|
@@ -26282,6 +26284,7 @@ var renderText = function (text, mentionedUsers, _a) {
|
|
|
26282
26284
|
catch (e) {
|
|
26283
26285
|
}
|
|
26284
26286
|
});
|
|
26287
|
+
var remarkPlugins = [[remarkGfm, { singleTilde: false }]];
|
|
26285
26288
|
var rehypePlugins = [emojiMarkdownPlugin];
|
|
26286
26289
|
if (mentionedUsers === null || mentionedUsers === void 0 ? void 0 : mentionedUsers.length) {
|
|
26287
26290
|
rehypePlugins.push(mentionsMarkdownPlugin(mentionedUsers));
|
|
@@ -26302,65 +26305,7 @@ var renderText = function (text, mentionedUsers, _a) {
|
|
|
26302
26305
|
};
|
|
26303
26306
|
}
|
|
26304
26307
|
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;
|
|
26308
|
+
return (React__default["default"].createElement(ReactMarkdown, { allowedElements: allowedTagNames, components: rehypeComponents, rehypePlugins: getRehypePlugins(rehypePlugins), remarkPlugins: getRemarkPlugins(remarkPlugins), skipHtml: true, transformLinkUri: transformLinkUri, unwrapDisallowed: true }, newText));
|
|
26364
26309
|
};
|
|
26365
26310
|
|
|
26366
26311
|
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 +26331,7 @@ var List = function List(_ref) {
|
|
|
26386
26331
|
AutocompleteSuggestionItem = _useComponentContext.AutocompleteSuggestionItem;
|
|
26387
26332
|
var _useChatContext = useChatContext('SuggestionList'),
|
|
26388
26333
|
themeVersion = _useChatContext.themeVersion;
|
|
26389
|
-
var SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item;
|
|
26334
|
+
var SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item$1;
|
|
26390
26335
|
var SuggestionHeader = PropHeader || AutocompleteSuggestionHeader || DefaultSuggestionListHeader;
|
|
26391
26336
|
var _useState = React.useState(undefined),
|
|
26392
26337
|
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
@@ -26563,6 +26508,33 @@ var UnMemoizedCommandItem = function (props) {
|
|
|
26563
26508
|
};
|
|
26564
26509
|
var CommandItem = React__default["default"].memo(UnMemoizedCommandItem);
|
|
26565
26510
|
|
|
26511
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt#getting_whole_characters
|
|
26512
|
+
var getWholeChar = function (str, i) {
|
|
26513
|
+
var code = str.charCodeAt(i);
|
|
26514
|
+
if (Number.isNaN(code))
|
|
26515
|
+
return '';
|
|
26516
|
+
if (code < 0xd800 || code > 0xdfff)
|
|
26517
|
+
return str.charAt(i);
|
|
26518
|
+
if (0xd800 <= code && code <= 0xdbff) {
|
|
26519
|
+
if (str.length <= i + 1) {
|
|
26520
|
+
throw 'High surrogate without following low surrogate';
|
|
26521
|
+
}
|
|
26522
|
+
var next = str.charCodeAt(i + 1);
|
|
26523
|
+
if (0xdc00 > next || next > 0xdfff) {
|
|
26524
|
+
throw 'High surrogate without following low surrogate';
|
|
26525
|
+
}
|
|
26526
|
+
return str.charAt(i) + str.charAt(i + 1);
|
|
26527
|
+
}
|
|
26528
|
+
if (i === 0) {
|
|
26529
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
26530
|
+
}
|
|
26531
|
+
var prev = str.charCodeAt(i - 1);
|
|
26532
|
+
if (0xd800 > prev || prev > 0xdbff) {
|
|
26533
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
26534
|
+
}
|
|
26535
|
+
return '';
|
|
26536
|
+
};
|
|
26537
|
+
|
|
26566
26538
|
/**
|
|
26567
26539
|
* A round avatar image with fallback to username's first letter
|
|
26568
26540
|
*/
|
|
@@ -27265,6 +27237,31 @@ ReactTextareaAutocomplete.propTypes = {
|
|
|
27265
27237
|
value: PropTypes__default["default"].string
|
|
27266
27238
|
};
|
|
27267
27239
|
|
|
27240
|
+
let urlAlphabet =
|
|
27241
|
+
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';
|
|
27242
|
+
|
|
27243
|
+
const POOL_SIZE_MULTIPLIER = 128;
|
|
27244
|
+
let pool, poolOffset;
|
|
27245
|
+
let fillPool = bytes => {
|
|
27246
|
+
if (!pool || pool.length < bytes) {
|
|
27247
|
+
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
|
|
27248
|
+
crypto__default["default"].randomFillSync(pool);
|
|
27249
|
+
poolOffset = 0;
|
|
27250
|
+
} else if (poolOffset + bytes > pool.length) {
|
|
27251
|
+
crypto__default["default"].randomFillSync(pool);
|
|
27252
|
+
poolOffset = 0;
|
|
27253
|
+
}
|
|
27254
|
+
poolOffset += bytes;
|
|
27255
|
+
};
|
|
27256
|
+
let nanoid = (size = 21) => {
|
|
27257
|
+
fillPool((size -= 0));
|
|
27258
|
+
let id = '';
|
|
27259
|
+
for (let i = poolOffset - size; i < poolOffset; i++) {
|
|
27260
|
+
id += urlAlphabet[pool[i] & 63];
|
|
27261
|
+
}
|
|
27262
|
+
return id
|
|
27263
|
+
};
|
|
27264
|
+
|
|
27268
27265
|
var channelReducer = function (state, action) {
|
|
27269
27266
|
var _a;
|
|
27270
27267
|
switch (action.type) {
|
|
@@ -28003,6 +28000,13 @@ var getReadByTooltipText = function (users, t, client, tooltipUserNameMapper) {
|
|
|
28003
28000
|
}
|
|
28004
28001
|
return outStr;
|
|
28005
28002
|
};
|
|
28003
|
+
var isOnlyEmojis = function (text) {
|
|
28004
|
+
if (!text)
|
|
28005
|
+
return false;
|
|
28006
|
+
var noEmojis = text.replace(emojiRegex__default["default"](), '');
|
|
28007
|
+
var noSpace = noEmojis.replace(/[\s\n]/gm, '');
|
|
28008
|
+
return !noSpace;
|
|
28009
|
+
};
|
|
28006
28010
|
|
|
28007
28011
|
var CustomMessageActionsList = function (props) {
|
|
28008
28012
|
var customMessageActions = props.customMessageActions, message = props.message;
|
|
@@ -30438,6 +30442,7 @@ var CooldownTimer = function (_a) {
|
|
|
30438
30442
|
var useCommandTrigger = function () {
|
|
30439
30443
|
var themeVersion = useChatContext('useCommandTrigger').themeVersion;
|
|
30440
30444
|
var channelConfig = useChannelStateContext('useCommandTrigger').channelConfig;
|
|
30445
|
+
var t = useTranslationContext('useCommandTrigger').t;
|
|
30441
30446
|
var commands = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.commands;
|
|
30442
30447
|
return {
|
|
30443
30448
|
component: CommandItem,
|
|
@@ -30446,7 +30451,7 @@ var useCommandTrigger = function () {
|
|
|
30446
30451
|
return [];
|
|
30447
30452
|
}
|
|
30448
30453
|
var selectedCommands = commands.filter(function (command) { var _a; return ((_a = command.name) === null || _a === void 0 ? void 0 : _a.indexOf(query)) !== -1; });
|
|
30449
|
-
// sort alphabetically unless
|
|
30454
|
+
// sort alphabetically unless you're matching the first char
|
|
30450
30455
|
selectedCommands.sort(function (a, b) {
|
|
30451
30456
|
var _a, _b;
|
|
30452
30457
|
var nameA = (_a = a.name) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
@@ -30470,8 +30475,25 @@ var useCommandTrigger = function () {
|
|
|
30470
30475
|
});
|
|
30471
30476
|
var result = selectedCommands.slice(0, themeVersion === '2' ? 5 : 10);
|
|
30472
30477
|
if (onReady)
|
|
30473
|
-
onReady(result
|
|
30478
|
+
onReady(result
|
|
30479
|
+
.filter(function (result) {
|
|
30474
30480
|
return result.name !== undefined;
|
|
30481
|
+
})
|
|
30482
|
+
.map(function (commandData) {
|
|
30483
|
+
var translatedCommandData = {
|
|
30484
|
+
name: t("".concat(commandData.name, "-command-name"), {
|
|
30485
|
+
defaultValue: commandData.name,
|
|
30486
|
+
}),
|
|
30487
|
+
};
|
|
30488
|
+
if (commandData.args)
|
|
30489
|
+
translatedCommandData.args = t("".concat(commandData.name, "-command-args"), {
|
|
30490
|
+
defaultValue: commandData.args,
|
|
30491
|
+
});
|
|
30492
|
+
if (commandData.description)
|
|
30493
|
+
translatedCommandData.description = t("".concat(commandData.name, "-command-description"), {
|
|
30494
|
+
defaultValue: commandData.description,
|
|
30495
|
+
});
|
|
30496
|
+
return translatedCommandData;
|
|
30475
30497
|
}), query);
|
|
30476
30498
|
return result;
|
|
30477
30499
|
},
|
|
@@ -34994,7 +35016,8 @@ var UnMemoizedChannelList = function (props) {
|
|
|
34994
35016
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
34995
35017
|
React__default["default"].createElement("div", { className: className, ref: channelListRef },
|
|
34996
35018
|
showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, __assign({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
|
|
34997
|
-
showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress
|
|
35019
|
+
showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: !!channelsQueryState.queryInProgress &&
|
|
35020
|
+
['reload', 'uninitialized'].includes(channelsQueryState.queryInProgress), LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, isLoading: channelsQueryState.queryInProgress === 'load-more', loadNextPage: loadNextPage }, renderChannels
|
|
34998
35021
|
? renderChannels(loadedChannels, renderChannel)
|
|
34999
35022
|
: loadedChannels.map(function (channel) { return renderChannel(channel); }))))))));
|
|
35000
35023
|
};
|
|
@@ -35003,7 +35026,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
35003
35026
|
*/
|
|
35004
35027
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
35005
35028
|
|
|
35006
|
-
var version = '10.
|
|
35029
|
+
var version = '10.16.0';
|
|
35007
35030
|
|
|
35008
35031
|
var useChat = function (_a) {
|
|
35009
35032
|
var _b, _c;
|
|
@@ -35135,7 +35158,7 @@ var useCreateChatContext = function (value) {
|
|
|
35135
35158
|
|
|
35136
35159
|
var useChannelsQueryState = function () {
|
|
35137
35160
|
var _a = React.useState(null), error = _a[0], setError = _a[1];
|
|
35138
|
-
var _b = React.useState(
|
|
35161
|
+
var _b = React.useState('uninitialized'), queryInProgress = _b[0], setQueryInProgress = _b[1];
|
|
35139
35162
|
return {
|
|
35140
35163
|
error: error,
|
|
35141
35164
|
queryInProgress: queryInProgress,
|
|
@@ -35227,7 +35250,7 @@ var UnMemoizedDateSeparator = function (props) {
|
|
|
35227
35250
|
messageCreatedAt: messageCreatedAt,
|
|
35228
35251
|
tDateTimeParser: tDateTimeParser,
|
|
35229
35252
|
});
|
|
35230
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__date-separator' },
|
|
35253
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__date-separator', "data-testid": 'date-separator' },
|
|
35231
35254
|
(position === 'right' || position === 'center') && (React__default["default"].createElement("hr", { className: 'str-chat__date-separator-line' })),
|
|
35232
35255
|
React__default["default"].createElement("div", { className: 'str-chat__date-separator-date' }, unread ? "".concat(t('New'), " - ").concat(formattedDate) : formattedDate),
|
|
35233
35256
|
(position === 'left' || position === 'center') && (React__default["default"].createElement("hr", { className: 'str-chat__date-separator-line' }))));
|
|
@@ -35247,7 +35270,7 @@ var UnMemoizedEventComponent = function (props) {
|
|
|
35247
35270
|
var _e = message.created_at, created_at = _e === void 0 ? '' : _e, event = message.event, text = message.text, type = message.type;
|
|
35248
35271
|
var getDateOptions = { messageCreatedAt: created_at.toString(), tDateTimeParser: tDateTimeParser };
|
|
35249
35272
|
if (type === 'system')
|
|
35250
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__message--system' },
|
|
35273
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__message--system', "data-testid": 'message-system' },
|
|
35251
35274
|
React__default["default"].createElement("div", { className: 'str-chat__message--system__text' },
|
|
35252
35275
|
React__default["default"].createElement("div", { className: 'str-chat__message--system__line' }),
|
|
35253
35276
|
React__default["default"].createElement("p", null, text),
|
|
@@ -36529,23 +36552,6 @@ var UnMemoizedScrollToBottomButton = function (props) {
|
|
|
36529
36552
|
};
|
|
36530
36553
|
var ScrollToBottomButton = React__default["default"].memo(UnMemoizedScrollToBottomButton);
|
|
36531
36554
|
|
|
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
36555
|
function useNewMessageNotification(messages, currentUserId, hasMoreNewer) {
|
|
36550
36556
|
var _a = React.useState(false), newMessagesNotification = _a[0], setNewMessagesNotification = _a[1];
|
|
36551
36557
|
var _b = React.useState(true), isMessageListScrolledToBottom = _b[0], setIsMessageListScrolledToBottom = _b[1];
|
|
@@ -36669,7 +36675,134 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
36669
36675
|
return recheckForNewOwnMessage;
|
|
36670
36676
|
}
|
|
36671
36677
|
|
|
36678
|
+
var useGiphyPreview = function (separateGiphyPreview) {
|
|
36679
|
+
var _a = React.useState(), giphyPreviewMessage = _a[0], setGiphyPreviewMessage = _a[1];
|
|
36680
|
+
var client = useChatContext('useGiphyPreview').client;
|
|
36681
|
+
React.useEffect(function () {
|
|
36682
|
+
var handleEvent = function (event) {
|
|
36683
|
+
var message = event.message, user = event.user;
|
|
36684
|
+
if ((message === null || message === void 0 ? void 0 : message.command) === 'giphy' && (user === null || user === void 0 ? void 0 : user.id) === client.userID) {
|
|
36685
|
+
setGiphyPreviewMessage(undefined);
|
|
36686
|
+
}
|
|
36687
|
+
};
|
|
36688
|
+
if (separateGiphyPreview)
|
|
36689
|
+
client.on('message.new', handleEvent);
|
|
36690
|
+
return function () { return client.off('message.new', handleEvent); };
|
|
36691
|
+
}, [separateGiphyPreview]);
|
|
36692
|
+
return { giphyPreviewMessage: giphyPreviewMessage, setGiphyPreviewMessage: setGiphyPreviewMessage };
|
|
36693
|
+
};
|
|
36694
|
+
|
|
36695
|
+
var useMessageSetKey = function (_a) {
|
|
36696
|
+
var messages = _a.messages;
|
|
36697
|
+
/**
|
|
36698
|
+
* Logic to update the key of the virtuoso component when the list jumps to a new location.
|
|
36699
|
+
*/
|
|
36700
|
+
var _b = React.useState(+new Date()), messageSetKey = _b[0], setMessageSetKey = _b[1];
|
|
36701
|
+
var firstMessageId = React.useRef();
|
|
36702
|
+
React.useEffect(function () {
|
|
36703
|
+
var _a;
|
|
36704
|
+
var continuousSet = messages === null || messages === void 0 ? void 0 : messages.find(function (message) { return message.id === firstMessageId.current; });
|
|
36705
|
+
if (!continuousSet) {
|
|
36706
|
+
setMessageSetKey(+new Date());
|
|
36707
|
+
}
|
|
36708
|
+
firstMessageId.current = (_a = messages === null || messages === void 0 ? void 0 : messages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
36709
|
+
}, [messages]);
|
|
36710
|
+
return {
|
|
36711
|
+
messageSetKey: messageSetKey,
|
|
36712
|
+
};
|
|
36713
|
+
};
|
|
36714
|
+
|
|
36715
|
+
var useScrollToBottomOnNewMessage = function (_a) {
|
|
36716
|
+
var messages = _a.messages, scrollToBottom = _a.scrollToBottom, scrollToLatestMessageOnFocus = _a.scrollToLatestMessageOnFocus;
|
|
36717
|
+
var _b = React__default["default"].useState(false), newMessagesReceivedInBackground = _b[0], setNewMessagesReceivedInBackground = _b[1];
|
|
36718
|
+
var resetNewMessagesReceivedInBackground = React.useCallback(function () {
|
|
36719
|
+
setNewMessagesReceivedInBackground(false);
|
|
36720
|
+
}, []);
|
|
36721
|
+
React.useEffect(function () {
|
|
36722
|
+
setNewMessagesReceivedInBackground(true);
|
|
36723
|
+
}, [messages]);
|
|
36724
|
+
var scrollToBottomIfConfigured = React.useCallback(function (event) {
|
|
36725
|
+
if (!scrollToLatestMessageOnFocus ||
|
|
36726
|
+
!newMessagesReceivedInBackground ||
|
|
36727
|
+
event.target !== window)
|
|
36728
|
+
return;
|
|
36729
|
+
setTimeout(scrollToBottom, 100);
|
|
36730
|
+
}, [scrollToLatestMessageOnFocus, scrollToBottom, newMessagesReceivedInBackground]);
|
|
36731
|
+
React.useEffect(function () {
|
|
36732
|
+
if (typeof window !== 'undefined') {
|
|
36733
|
+
window.addEventListener('focus', scrollToBottomIfConfigured);
|
|
36734
|
+
window.addEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
36735
|
+
}
|
|
36736
|
+
return function () {
|
|
36737
|
+
window.removeEventListener('focus', scrollToBottomIfConfigured);
|
|
36738
|
+
window.removeEventListener('blur', resetNewMessagesReceivedInBackground);
|
|
36739
|
+
};
|
|
36740
|
+
}, [scrollToBottomIfConfigured]);
|
|
36741
|
+
};
|
|
36742
|
+
|
|
36672
36743
|
var PREPEND_OFFSET = Math.pow(10, 7);
|
|
36744
|
+
function calculateItemIndex(virtuosoIndex, numItemsPrepended) {
|
|
36745
|
+
return virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
|
|
36746
|
+
}
|
|
36747
|
+
function calculateFirstItemIndex(numItemsPrepended) {
|
|
36748
|
+
return PREPEND_OFFSET - numItemsPrepended;
|
|
36749
|
+
}
|
|
36750
|
+
// using 'display: inline-block'
|
|
36751
|
+
// traps CSS margins of the item elements, preventing incorrect item measurements
|
|
36752
|
+
var Item = function (_a) {
|
|
36753
|
+
var _b;
|
|
36754
|
+
var _c;
|
|
36755
|
+
var context = _a.context, props = __rest(_a, ["context"]);
|
|
36756
|
+
if (!context)
|
|
36757
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
36758
|
+
var message = context.processedMessages[calculateItemIndex(props['data-item-index'], context.numItemsPrepended)];
|
|
36759
|
+
var groupStyles = context.messageGroupStyles[message.id];
|
|
36760
|
+
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) ||
|
|
36761
|
+
clsx('str-chat__virtual-list-message-wrapper str-chat__li', (_b = {},
|
|
36762
|
+
_b["str-chat__li--".concat(groupStyles)] = groupStyles,
|
|
36763
|
+
_b)) })));
|
|
36764
|
+
};
|
|
36765
|
+
var Header = function (_a) {
|
|
36766
|
+
var context = _a.context;
|
|
36767
|
+
var _b = useComponentContext('VirtualizedMessageListHeader').LoadingIndicator, LoadingIndicator$1 = _b === void 0 ? LoadingIndicator : _b;
|
|
36768
|
+
if (!(context === null || context === void 0 ? void 0 : context.loadingMore))
|
|
36769
|
+
return null;
|
|
36770
|
+
return LoadingIndicator$1 ? (React__default["default"].createElement("div", { className: 'str-chat__virtual-list__loading' },
|
|
36771
|
+
React__default["default"].createElement(LoadingIndicator$1, { size: 20 }))) : ((context === null || context === void 0 ? void 0 : context.head) || null);
|
|
36772
|
+
};
|
|
36773
|
+
var EmptyPlaceholder = function (_a) {
|
|
36774
|
+
var context = _a.context;
|
|
36775
|
+
var _b = useComponentContext('VirtualizedMessageList').EmptyStateIndicator, EmptyStateIndicator$1 = _b === void 0 ? EmptyStateIndicator : _b;
|
|
36776
|
+
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' }))));
|
|
36777
|
+
};
|
|
36778
|
+
var Footer = function () {
|
|
36779
|
+
var TypingIndicator = useComponentContext('VirtualizedMessageList').TypingIndicator;
|
|
36780
|
+
return TypingIndicator ? React__default["default"].createElement(TypingIndicator, { avatarSize: 24 }) : null;
|
|
36781
|
+
};
|
|
36782
|
+
var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
|
|
36783
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
36784
|
+
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;
|
|
36785
|
+
var streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);
|
|
36786
|
+
if (customMessageRenderer) {
|
|
36787
|
+
return customMessageRenderer(messageList, streamMessageIndex);
|
|
36788
|
+
}
|
|
36789
|
+
var message = messageList[streamMessageIndex];
|
|
36790
|
+
if (!message)
|
|
36791
|
+
return React__default["default"].createElement("div", { style: { height: '1px' } }); // returning null or zero height breaks the virtuoso
|
|
36792
|
+
if (message.customType === CUSTOM_MESSAGE_TYPE.date && message.date && isDate(message.date)) {
|
|
36793
|
+
return DateSeparator ? React__default["default"].createElement(DateSeparator, { date: message.date, unread: message.unread }) : null;
|
|
36794
|
+
}
|
|
36795
|
+
if (message.type === 'system') {
|
|
36796
|
+
return MessageSystem ? React__default["default"].createElement(MessageSystem, { message: message }) : null;
|
|
36797
|
+
}
|
|
36798
|
+
var groupedByUser = shouldGroupByUser &&
|
|
36799
|
+
streamMessageIndex > 0 &&
|
|
36800
|
+
((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
|
|
36801
|
+
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);
|
|
36802
|
+
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);
|
|
36803
|
+
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] || [] }));
|
|
36804
|
+
};
|
|
36805
|
+
|
|
36673
36806
|
function captureResizeObserverExceededError(e) {
|
|
36674
36807
|
if (e.message === 'ResizeObserver loop completed with undelivered notifications.' ||
|
|
36675
36808
|
e.message === 'ResizeObserver loop limit exceeded') {
|
|
@@ -36700,19 +36833,21 @@ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
|
|
|
36700
36833
|
return messages.length - 1;
|
|
36701
36834
|
}
|
|
36702
36835
|
var VirtualizedMessageListWithContext = function (props) {
|
|
36703
|
-
var
|
|
36836
|
+
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
36837
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
36705
|
-
|
|
36838
|
+
_f = props.overscan,
|
|
36706
36839
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
36707
|
-
overscan =
|
|
36840
|
+
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;
|
|
36841
|
+
var virtuosoComponentsFromProps = additionalVirtuosoProps.components, overridingVirtuosoProps = __rest(additionalVirtuosoProps, ["components"]);
|
|
36708
36842
|
// Stops errors generated from react-virtuoso to bubble up
|
|
36709
36843
|
// to Sentry or other tracking tools.
|
|
36710
36844
|
useCaptureResizeObserverExceededError();
|
|
36711
|
-
var
|
|
36712
|
-
var
|
|
36845
|
+
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;
|
|
36846
|
+
var MessageUIComponent = MessageUIComponentFromProps || MessageUIComponentFromContext;
|
|
36847
|
+
var _u = useChatContext('VirtualizedMessageList'), client = _u.client, customClasses = _u.customClasses;
|
|
36848
|
+
var virtuoso = React.useRef(null);
|
|
36713
36849
|
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;
|
|
36850
|
+
var _v = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _v.giphyPreviewMessage, setGiphyPreviewMessage = _v.setGiphyPreviewMessage;
|
|
36716
36851
|
var processedMessages = React.useMemo(function () {
|
|
36717
36852
|
if (typeof messages === 'undefined') {
|
|
36718
36853
|
return [];
|
|
@@ -36761,9 +36896,8 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36761
36896
|
}, {});
|
|
36762
36897
|
},
|
|
36763
36898
|
// 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;
|
|
36899
|
+
[processedMessages.length, shouldGroupByUser, groupStylesFn]);
|
|
36900
|
+
var _w = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer), atBottom = _w.atBottom, isMessageListScrolledToBottom = _w.isMessageListScrolledToBottom, newMessagesNotification = _w.newMessagesNotification, setIsMessageListScrolledToBottom = _w.setIsMessageListScrolledToBottom, setNewMessagesNotification = _w.setNewMessagesNotification;
|
|
36767
36901
|
var scrollToBottom = React.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
36768
36902
|
return __generator(this, function (_a) {
|
|
36769
36903
|
switch (_a.label) {
|
|
@@ -36790,44 +36924,9 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36790
36924
|
hasMoreNewer,
|
|
36791
36925
|
jumpToLatestMessage,
|
|
36792
36926
|
]);
|
|
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]);
|
|
36927
|
+
useScrollToBottomOnNewMessage({ messages: messages, scrollToBottom: scrollToBottom, scrollToLatestMessageOnFocus: scrollToLatestMessageOnFocus });
|
|
36817
36928
|
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]);
|
|
36929
|
+
var messageSetKey = useMessageSetKey({ messages: messages }).messageSetKey;
|
|
36831
36930
|
var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages, client.userID);
|
|
36832
36931
|
var followOutput = function (isAtBottom) {
|
|
36833
36932
|
if (hasMoreNewer || suppressAutoscroll) {
|
|
@@ -36839,63 +36938,10 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36839
36938
|
// a message from another user has been received - don't scroll to bottom unless already there
|
|
36840
36939
|
return isAtBottom ? stickToBottomScrollBehavior : false;
|
|
36841
36940
|
};
|
|
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;
|
|
36941
|
+
var computeItemKey = React.useCallback(function (index, _, _a) {
|
|
36942
|
+
var numItemsPrepended = _a.numItemsPrepended, processedMessages = _a.processedMessages;
|
|
36943
|
+
return processedMessages[calculateItemIndex(index, numItemsPrepended)].id;
|
|
36882
36944
|
}, []);
|
|
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
36945
|
var atBottomStateChange = function (isAtBottom) {
|
|
36900
36946
|
atBottom.current = isAtBottom;
|
|
36901
36947
|
setIsMessageListScrolledToBottom(isAtBottom);
|
|
@@ -36927,18 +36973,27 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
36927
36973
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
36928
36974
|
React__default["default"].createElement(MessageListMainPanel, null,
|
|
36929
36975
|
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
|
-
|
|
36976
|
+
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: {
|
|
36977
|
+
additionalMessageInputProps: additionalMessageInputProps,
|
|
36978
|
+
closeReactionSelectorOnClick: closeReactionSelectorOnClick,
|
|
36933
36979
|
customClasses: customClasses,
|
|
36980
|
+
customMessageActions: customMessageActions,
|
|
36981
|
+
customMessageRenderer: customMessageRenderer,
|
|
36982
|
+
DateSeparator: DateSeparator$1,
|
|
36983
|
+
head: head,
|
|
36934
36984
|
lastReceivedMessageId: lastReceivedMessageId,
|
|
36985
|
+
loadingMore: loadingMore,
|
|
36986
|
+
Message: MessageUIComponent,
|
|
36987
|
+
messageActions: messageActions,
|
|
36935
36988
|
messageGroupStyles: messageGroupStyles,
|
|
36989
|
+
MessageSystem: MessageSystem,
|
|
36936
36990
|
numItemsPrepended: numItemsPrepended,
|
|
36937
36991
|
ownMessagesReadByOthers: ownMessagesReadByOthers,
|
|
36938
36992
|
processedMessages: processedMessages,
|
|
36939
|
-
|
|
36940
|
-
|
|
36941
|
-
|
|
36993
|
+
shouldGroupByUser: shouldGroupByUser,
|
|
36994
|
+
threadList: threadList,
|
|
36995
|
+
virtuosoRef: virtuoso,
|
|
36996
|
+
}, 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
36997
|
React__default["default"].createElement(MessageListNotifications$1, { hasNewMessages: newMessagesNotification, isMessageListScrolledToBottom: isMessageListScrolledToBottom, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification$1, notifications: notifications, scrollToBottom: scrollToBottom, threadList: threadList }),
|
|
36943
36998
|
giphyPreviewMessage && React__default["default"].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
|
|
36944
36999
|
};
|
|
@@ -37046,6 +37101,11 @@ var UnMemoizedWindow = function (props) {
|
|
|
37046
37101
|
*/
|
|
37047
37102
|
var Window = React__default["default"].memo(UnMemoizedWindow);
|
|
37048
37103
|
|
|
37104
|
+
/**
|
|
37105
|
+
* @deprecated will be removed in the next major release
|
|
37106
|
+
*/
|
|
37107
|
+
var generateRandomId = nanoid;
|
|
37108
|
+
|
|
37049
37109
|
// @ts-expect-error
|
|
37050
37110
|
|
|
37051
37111
|
var DefaultEmoji = /*#__PURE__*/Object.freeze({
|
|
@@ -37099,7 +37159,7 @@ exports.CooldownTimer = CooldownTimer;
|
|
|
37099
37159
|
exports.DateSeparator = DateSeparator;
|
|
37100
37160
|
exports.DefaultSuggestionList = List;
|
|
37101
37161
|
exports.DefaultSuggestionListHeader = DefaultSuggestionListHeader;
|
|
37102
|
-
exports.DefaultSuggestionListItem = Item;
|
|
37162
|
+
exports.DefaultSuggestionListItem = Item$1;
|
|
37103
37163
|
exports.DefaultTriggerProvider = DefaultTriggerProvider;
|
|
37104
37164
|
exports.DeliveredCheckIcon = DeliveredCheckIcon;
|
|
37105
37165
|
exports.DownloadIcon = DownloadIcon;
|
|
@@ -37207,6 +37267,7 @@ exports.areMessagePropsEqual = areMessagePropsEqual;
|
|
|
37207
37267
|
exports.areMessageUIPropsEqual = areMessageUIPropsEqual;
|
|
37208
37268
|
exports.darkModeTheme = darkModeTheme;
|
|
37209
37269
|
exports.deTranslations = deTranslations;
|
|
37270
|
+
exports.defaultAllowedTagNames = defaultAllowedTagNames;
|
|
37210
37271
|
exports.defaultDateTimeParser = defaultDateTimeParser;
|
|
37211
37272
|
exports.defaultPinPermissions = defaultPinPermissions;
|
|
37212
37273
|
exports.defaultScrollToItem = defaultScrollToItem;
|