stream-chat-react-native-core 4.0.0-beta.1 → 4.0.0-beta.2

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.
@@ -70,6 +70,17 @@ var parse = function parse(capture, _parse, state) {
70
70
  };
71
71
  };
72
72
 
73
+ var parseUrlsFromText = function parseUrlsFromText(text) {
74
+ try {
75
+ return (0, _anchorme["default"])(text, {
76
+ list: true
77
+ });
78
+ } catch (e) {
79
+ console.warn("failure at parseUrlsFromText: " + e);
80
+ return [];
81
+ }
82
+ };
83
+
73
84
  var renderText = function renderText(params) {
74
85
  var colors = params.colors,
75
86
  markdownRules = params.markdownRules,
@@ -86,9 +97,7 @@ var renderText = function renderText(params) {
86
97
  text = message.text;
87
98
  if (!text) return null;
88
99
  var newText = text.trim();
89
- var urls = (0, _anchorme["default"])(newText, {
90
- list: true
91
- });
100
+ var urls = parseUrlsFromText(newText);
92
101
 
93
102
  for (var _iterator = _createForOfIteratorHelperLoose(urls), _step; !(_step = _iterator()).done;) {
94
103
  var _urlInfo = _step.value;
@@ -160,7 +169,7 @@ var renderText = function renderText(params) {
160
169
  __self: _this,
161
170
  __source: {
162
171
  fileName: _jsxFileName,
163
- lineNumber: 196,
172
+ lineNumber: 207,
164
173
  columnNumber: 7
165
174
  }
166
175
  }, output(node.content, (0, _extends2["default"])({}, state, {
@@ -177,7 +186,7 @@ var renderText = function renderText(params) {
177
186
  __self: _this,
178
187
  __source: {
179
188
  fileName: _jsxFileName,
180
- lineNumber: 209,
189
+ lineNumber: 220,
181
190
  columnNumber: 5
182
191
  }
183
192
  }, output(node.content, state));
@@ -227,7 +236,7 @@ var renderText = function renderText(params) {
227
236
  __self: _this,
228
237
  __source: {
229
238
  fileName: _jsxFileName,
230
- lineNumber: 247,
239
+ lineNumber: 258,
231
240
  columnNumber: 7
232
241
  }
233
242
  }, Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state));
@@ -253,7 +262,7 @@ var renderText = function renderText(params) {
253
262
  __self: _this,
254
263
  __source: {
255
264
  fileName: _jsxFileName,
256
- lineNumber: 276,
265
+ lineNumber: 287,
257
266
  columnNumber: 11
258
267
  }
259
268
  }, _react["default"].createElement(_reactNative.Text, {
@@ -261,7 +270,7 @@ var renderText = function renderText(params) {
261
270
  __self: _this,
262
271
  __source: {
263
272
  fileName: _jsxFileName,
264
- lineNumber: 277,
273
+ lineNumber: 288,
265
274
  columnNumber: 13
266
275
  }
267
276
  }, node.ordered ? node.start + index + ". " : "\u2022"), _react["default"].createElement(_reactNative.Text, {
@@ -271,7 +280,7 @@ var renderText = function renderText(params) {
271
280
  __self: _this,
272
281
  __source: {
273
282
  fileName: _jsxFileName,
274
- lineNumber: 280,
283
+ lineNumber: 291,
275
284
  columnNumber: 13
276
285
  }
277
286
  }, content));
@@ -283,7 +292,7 @@ var renderText = function renderText(params) {
283
292
  __self: _this,
284
293
  __source: {
285
294
  fileName: _jsxFileName,
286
- lineNumber: 289,
295
+ lineNumber: 300,
287
296
  columnNumber: 9
288
297
  }
289
298
  }, items);
@@ -324,7 +333,7 @@ var renderText = function renderText(params) {
324
333
  __self: _this,
325
334
  __source: {
326
335
  fileName: _jsxFileName,
327
- lineNumber: 316,
336
+ lineNumber: 327,
328
337
  columnNumber: 5
329
338
  }
330
339
  }, newText);
@@ -1 +1 @@
1
- {"version":3,"sources":["renderText.tsx"],"names":["defaultMarkdownStyles","inlineCode","fontSize","padding","paddingHorizontal","list","marginBottom","marginTop","listItemNumber","fontWeight","listItemText","flex","listRow","flexDirection","mentions","paragraph","paragraphCenter","paragraphWithImage","parse","capture","state","content","renderText","params","colors","markdownRules","markdownStyles","message","messageOverlay","messageTextNumberOfLines","onLinkParams","onLink","onLongPressParam","onLongPress","onlyEmojis","onPressParam","onPress","preventPress","mentioned_users","text","newText","trim","urls","urlInfo","displayLink","encoded","replace","length","omission","markdown","protocol","raw","styles","autolink","color","accent_blue","backgroundColor","white_smoke","borderColor","grey_gainsboro","accent_red","black","url","Linking","canOpenURL","then","canOpenUrl","openURL","react","node","output","event","defaultHandler","target","emitter","key","withinLink","paragraphText","mentionedUsers","Array","isArray","reduce","acc","cur","userName","name","id","regEx","RegExp","match","source","exec","mentionsReact","listLevels","sub","top","customListAtLevel","level","items","map","item","index","withinList","type","isTopLevelText","includes","ordered","start","isSublist","sublist","customRules","link","reflink","order","defaultRules","JSON","stringify","undefined"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Linking, Text, View } from 'react-native';\nimport anchorme from 'anchorme';\nimport truncate from 'lodash/truncate';\n// @ts-expect-error\nimport Markdown from 'react-native-markdown-package';\nimport {\n DefaultRules,\n defaultRules,\n MatchFunction,\n ParseFunction,\n parseInline,\n ReactNodeOutput,\n SingleASTNode,\n} from 'simple-markdown';\n\nimport type { MessageType } from '../../../MessageList/hooks/useMessageList';\n\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../../types/types';\nimport type { MessageContextValue } from '../../../../contexts/messageContext/MessageContext';\nimport type { Colors, MarkdownStyle } from '../../../../contexts/themeContext/utils/theme';\n\nconst defaultMarkdownStyles: MarkdownStyle = {\n inlineCode: {\n fontSize: 13,\n padding: 3,\n paddingHorizontal: 5,\n },\n list: {\n marginBottom: 8,\n marginTop: 8,\n },\n listItemNumber: {\n fontWeight: 'bold',\n },\n listItemText: {\n flex: 0,\n },\n listRow: {\n flexDirection: 'row',\n },\n mentions: {\n fontWeight: '700',\n },\n // unfortunately marginVertical doesn't override the defaults for these within the 3rd party lib\n paragraph: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphCenter: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphWithImage: {\n marginBottom: 8,\n marginTop: 8,\n },\n};\n\nconst parse: ParseFunction = (capture, parse, state) => ({\n content: parseInline(parse, capture[0], state),\n});\n\nexport type MarkdownRules = Partial<DefaultRules>;\n\nexport type RenderTextParams<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<\n Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'onLongPress' | 'onPress' | 'preventPress'>\n> & {\n colors: typeof Colors;\n message: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n markdownRules?: MarkdownRules;\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n onLink?: (url: string) => Promise<void>;\n onlyEmojis?: boolean;\n};\n\nexport const renderText = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n params: RenderTextParams<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n colors,\n markdownRules,\n markdownStyles,\n message,\n messageOverlay,\n messageTextNumberOfLines,\n onLink: onLinkParams,\n onLongPress: onLongPressParam,\n onlyEmojis,\n onPress: onPressParam,\n preventPress,\n } = params;\n\n // take the @ mentions and turn them into markdown?\n // translate links\n const { mentioned_users, text } = message;\n\n if (!text) return null;\n\n let newText = text.trim();\n const urls = anchorme(newText, {\n list: true,\n });\n\n for (const urlInfo of urls) {\n const displayLink = truncate(urlInfo.encoded.replace(/^(www\\.)/, ''), {\n length: 200,\n omission: '...',\n });\n const markdown = `[${displayLink}](${urlInfo.protocol}${urlInfo.encoded})`;\n newText = newText.replace(urlInfo.raw, markdown);\n }\n\n newText = newText.replace(/[<&\"'>]/g, '\\\\$&');\n\n const styles: MarkdownStyle = {\n ...defaultMarkdownStyles,\n ...markdownStyles,\n autolink: {\n ...defaultMarkdownStyles.autolink,\n color: colors.accent_blue,\n ...markdownStyles?.autolink,\n },\n inlineCode: {\n ...defaultMarkdownStyles.inlineCode,\n backgroundColor: colors.white_smoke,\n borderColor: colors.grey_gainsboro,\n color: colors.accent_red,\n ...markdownStyles?.inlineCode,\n },\n mentions: {\n ...defaultMarkdownStyles.mentions,\n color: colors.accent_blue,\n ...markdownStyles?.mentions,\n },\n text: {\n ...defaultMarkdownStyles.text,\n color: colors.black,\n ...markdownStyles?.text,\n },\n };\n\n const onLink = (url: string) =>\n onLinkParams\n ? onLinkParams(url)\n : Linking.canOpenURL(url).then((canOpenUrl) => canOpenUrl && Linking.openURL(url));\n\n const react: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n defaultHandler: () => onLink(node.target),\n emitter: 'textLink',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textLink',\n event,\n });\n }\n };\n\n return (\n <Text\n key={state.key}\n onLongPress={onLongPress}\n onPress={onPress}\n style={styles.autolink}\n suppressHighlighting={true}\n >\n {output(node.content, { ...state, withinLink: true })}\n </Text>\n );\n };\n\n const paragraphText: ReactNodeOutput = (node, output, { ...state }) => (\n <Text key={state.key} numberOfLines={messageTextNumberOfLines} style={styles.paragraph}>\n {output(node.content, state)}\n </Text>\n );\n\n const mentionedUsers = Array.isArray(mentioned_users)\n ? mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n\n const regEx = new RegExp(`^\\\\B(${mentionedUsers})`, 'g');\n const match: MatchFunction = (source) => regEx.exec(source);\n\n const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n return (\n <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>\n {Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state)}\n </Text>\n );\n };\n\n const listLevels = {\n sub: 'sub',\n top: 'top',\n };\n\n /**\n * For lists and sublists, the default behavior of the markdown library we use is\n * to always renumber any list, so all ordered lists start from 1.\n *\n * This custom rule overrides this behavior both for top level lists and sublists,\n * in order to start the numbering from the number of the first list item provided.\n * */\n const customListAtLevel =\n (level: keyof typeof listLevels): ReactNodeOutput =>\n (node, output, { ...state }) => {\n const items = node.items.map((item: Array<SingleASTNode>, index: number) => {\n const withinList = item.length > 1 && item[1].type === 'list';\n const content = output(item, { ...state, withinList });\n\n const isTopLevelText =\n ['text', 'paragraph', 'strong'].includes(item[0].type) && withinList === false;\n\n return (\n <View key={index} style={styles.listRow}>\n <Text style={styles.listItemNumber}>\n {node.ordered ? `${node.start + index}. ` : `\\u2022`}\n </Text>\n <Text style={[styles.listItemText, isTopLevelText && { marginBottom: 0 }]}>\n {content}\n </Text>\n </View>\n );\n });\n\n const isSublist = level === 'sub';\n return (\n <View key={state.key} style={[isSublist ? styles.list : styles.sublist]}>\n {items}\n </View>\n );\n };\n\n const customRules = {\n link: { react },\n list: { react: customListAtLevel('top') },\n // Truncate long text content in the message overlay\n paragraph: messageTextNumberOfLines ? { react: paragraphText } : {},\n // we have no react rendering support for reflinks\n reflink: { match: () => null },\n sublist: { react: customListAtLevel('sub') },\n ...(mentionedUsers\n ? {\n mentions: {\n match,\n order: defaultRules.text.order - 0.5,\n parse,\n react: mentionsReact,\n },\n }\n : {}),\n };\n\n return (\n <Markdown\n key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${\n messageOverlay ? JSON.stringify(markdownStyles) : undefined\n }-${JSON.stringify(colors)}`}\n onLink={onLink}\n rules={{\n ...customRules,\n ...markdownRules,\n }}\n styles={styles}\n >\n {newText}\n </Markdown>\n );\n};\n"]}
1
+ {"version":3,"sources":["renderText.tsx"],"names":["defaultMarkdownStyles","inlineCode","fontSize","padding","paddingHorizontal","list","marginBottom","marginTop","listItemNumber","fontWeight","listItemText","flex","listRow","flexDirection","mentions","paragraph","paragraphCenter","paragraphWithImage","parse","capture","state","content","parseUrlsFromText","text","e","console","warn","renderText","params","colors","markdownRules","markdownStyles","message","messageOverlay","messageTextNumberOfLines","onLinkParams","onLink","onLongPressParam","onLongPress","onlyEmojis","onPressParam","onPress","preventPress","mentioned_users","newText","trim","urls","urlInfo","displayLink","encoded","replace","length","omission","markdown","protocol","raw","styles","autolink","color","accent_blue","backgroundColor","white_smoke","borderColor","grey_gainsboro","accent_red","black","url","Linking","canOpenURL","then","canOpenUrl","openURL","react","node","output","event","defaultHandler","target","emitter","key","withinLink","paragraphText","mentionedUsers","Array","isArray","reduce","acc","cur","userName","name","id","regEx","RegExp","match","source","exec","mentionsReact","listLevels","sub","top","customListAtLevel","level","items","map","item","index","withinList","type","isTopLevelText","includes","ordered","start","isSublist","sublist","customRules","link","reflink","order","defaultRules","JSON","stringify","undefined"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Linking, Text, View } from 'react-native';\nimport anchorme from 'anchorme';\nimport truncate from 'lodash/truncate';\n// @ts-expect-error\nimport Markdown from 'react-native-markdown-package';\nimport {\n DefaultRules,\n defaultRules,\n MatchFunction,\n ParseFunction,\n parseInline,\n ReactNodeOutput,\n SingleASTNode,\n} from 'simple-markdown';\n\nimport type { MessageType } from '../../../MessageList/hooks/useMessageList';\n\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../../types/types';\nimport type { MessageContextValue } from '../../../../contexts/messageContext/MessageContext';\nimport type { Colors, MarkdownStyle } from '../../../../contexts/themeContext/utils/theme';\n\nconst defaultMarkdownStyles: MarkdownStyle = {\n inlineCode: {\n fontSize: 13,\n padding: 3,\n paddingHorizontal: 5,\n },\n list: {\n marginBottom: 8,\n marginTop: 8,\n },\n listItemNumber: {\n fontWeight: 'bold',\n },\n listItemText: {\n flex: 0,\n },\n listRow: {\n flexDirection: 'row',\n },\n mentions: {\n fontWeight: '700',\n },\n // unfortunately marginVertical doesn't override the defaults for these within the 3rd party lib\n paragraph: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphCenter: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphWithImage: {\n marginBottom: 8,\n marginTop: 8,\n },\n};\n\nconst parse: ParseFunction = (capture, parse, state) => ({\n content: parseInline(parse, capture[0], state),\n});\n\nconst parseUrlsFromText = (text: string) => {\n try {\n return anchorme(text, {\n list: true,\n });\n } catch (e) {\n console.warn(`failure at parseUrlsFromText: ${e}`);\n // In case of failures its not worth crashing the app,\n // and instead simply to have un-parsed urls in message text.\n return [];\n }\n};\n\nexport type MarkdownRules = Partial<DefaultRules>;\n\nexport type RenderTextParams<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<\n Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'onLongPress' | 'onPress' | 'preventPress'>\n> & {\n colors: typeof Colors;\n message: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n markdownRules?: MarkdownRules;\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n onLink?: (url: string) => Promise<void>;\n onlyEmojis?: boolean;\n};\n\nexport const renderText = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n params: RenderTextParams<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n colors,\n markdownRules,\n markdownStyles,\n message,\n messageOverlay,\n messageTextNumberOfLines,\n onLink: onLinkParams,\n onLongPress: onLongPressParam,\n onlyEmojis,\n onPress: onPressParam,\n preventPress,\n } = params;\n\n // take the @ mentions and turn them into markdown?\n // translate links\n const { mentioned_users, text } = message;\n\n if (!text) return null;\n\n let newText = text.trim();\n const urls = parseUrlsFromText(newText);\n\n for (const urlInfo of urls) {\n const displayLink = truncate(urlInfo.encoded.replace(/^(www\\.)/, ''), {\n length: 200,\n omission: '...',\n });\n const markdown = `[${displayLink}](${urlInfo.protocol}${urlInfo.encoded})`;\n newText = newText.replace(urlInfo.raw, markdown);\n }\n\n newText = newText.replace(/[<&\"'>]/g, '\\\\$&');\n\n const styles: MarkdownStyle = {\n ...defaultMarkdownStyles,\n ...markdownStyles,\n autolink: {\n ...defaultMarkdownStyles.autolink,\n color: colors.accent_blue,\n ...markdownStyles?.autolink,\n },\n inlineCode: {\n ...defaultMarkdownStyles.inlineCode,\n backgroundColor: colors.white_smoke,\n borderColor: colors.grey_gainsboro,\n color: colors.accent_red,\n ...markdownStyles?.inlineCode,\n },\n mentions: {\n ...defaultMarkdownStyles.mentions,\n color: colors.accent_blue,\n ...markdownStyles?.mentions,\n },\n text: {\n ...defaultMarkdownStyles.text,\n color: colors.black,\n ...markdownStyles?.text,\n },\n };\n\n const onLink = (url: string) =>\n onLinkParams\n ? onLinkParams(url)\n : Linking.canOpenURL(url).then((canOpenUrl) => canOpenUrl && Linking.openURL(url));\n\n const react: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n defaultHandler: () => onLink(node.target),\n emitter: 'textLink',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textLink',\n event,\n });\n }\n };\n\n return (\n <Text\n key={state.key}\n onLongPress={onLongPress}\n onPress={onPress}\n style={styles.autolink}\n suppressHighlighting={true}\n >\n {output(node.content, { ...state, withinLink: true })}\n </Text>\n );\n };\n\n const paragraphText: ReactNodeOutput = (node, output, { ...state }) => (\n <Text key={state.key} numberOfLines={messageTextNumberOfLines} style={styles.paragraph}>\n {output(node.content, state)}\n </Text>\n );\n\n const mentionedUsers = Array.isArray(mentioned_users)\n ? mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n\n const regEx = new RegExp(`^\\\\B(${mentionedUsers})`, 'g');\n const match: MatchFunction = (source) => regEx.exec(source);\n\n const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n return (\n <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>\n {Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state)}\n </Text>\n );\n };\n\n const listLevels = {\n sub: 'sub',\n top: 'top',\n };\n\n /**\n * For lists and sublists, the default behavior of the markdown library we use is\n * to always renumber any list, so all ordered lists start from 1.\n *\n * This custom rule overrides this behavior both for top level lists and sublists,\n * in order to start the numbering from the number of the first list item provided.\n * */\n const customListAtLevel =\n (level: keyof typeof listLevels): ReactNodeOutput =>\n (node, output, { ...state }) => {\n const items = node.items.map((item: Array<SingleASTNode>, index: number) => {\n const withinList = item.length > 1 && item[1].type === 'list';\n const content = output(item, { ...state, withinList });\n\n const isTopLevelText =\n ['text', 'paragraph', 'strong'].includes(item[0].type) && withinList === false;\n\n return (\n <View key={index} style={styles.listRow}>\n <Text style={styles.listItemNumber}>\n {node.ordered ? `${node.start + index}. ` : `\\u2022`}\n </Text>\n <Text style={[styles.listItemText, isTopLevelText && { marginBottom: 0 }]}>\n {content}\n </Text>\n </View>\n );\n });\n\n const isSublist = level === 'sub';\n return (\n <View key={state.key} style={[isSublist ? styles.list : styles.sublist]}>\n {items}\n </View>\n );\n };\n\n const customRules = {\n link: { react },\n list: { react: customListAtLevel('top') },\n // Truncate long text content in the message overlay\n paragraph: messageTextNumberOfLines ? { react: paragraphText } : {},\n // we have no react rendering support for reflinks\n reflink: { match: () => null },\n sublist: { react: customListAtLevel('sub') },\n ...(mentionedUsers\n ? {\n mentions: {\n match,\n order: defaultRules.text.order - 0.5,\n parse,\n react: mentionsReact,\n },\n }\n : {}),\n };\n\n return (\n <Markdown\n key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${\n messageOverlay ? JSON.stringify(markdownStyles) : undefined\n }-${JSON.stringify(colors)}`}\n onLink={onLink}\n rules={{\n ...customRules,\n ...markdownRules,\n }}\n styles={styles}\n >\n {newText}\n </Markdown>\n );\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.0.0-beta.1"
2
+ "version": "4.0.0-beta.2"
3
3
  }
@@ -70,6 +70,17 @@ var parse = function parse(capture, _parse, state) {
70
70
  };
71
71
  };
72
72
 
73
+ var parseUrlsFromText = function parseUrlsFromText(text) {
74
+ try {
75
+ return (0, _anchorme["default"])(text, {
76
+ list: true
77
+ });
78
+ } catch (e) {
79
+ console.warn("failure at parseUrlsFromText: " + e);
80
+ return [];
81
+ }
82
+ };
83
+
73
84
  var renderText = function renderText(params) {
74
85
  var colors = params.colors,
75
86
  markdownRules = params.markdownRules,
@@ -86,9 +97,7 @@ var renderText = function renderText(params) {
86
97
  text = message.text;
87
98
  if (!text) return null;
88
99
  var newText = text.trim();
89
- var urls = (0, _anchorme["default"])(newText, {
90
- list: true
91
- });
100
+ var urls = parseUrlsFromText(newText);
92
101
 
93
102
  for (var _iterator = _createForOfIteratorHelperLoose(urls), _step; !(_step = _iterator()).done;) {
94
103
  var _urlInfo = _step.value;
@@ -160,7 +169,7 @@ var renderText = function renderText(params) {
160
169
  __self: _this,
161
170
  __source: {
162
171
  fileName: _jsxFileName,
163
- lineNumber: 196,
172
+ lineNumber: 207,
164
173
  columnNumber: 7
165
174
  }
166
175
  }, output(node.content, (0, _extends2["default"])({}, state, {
@@ -177,7 +186,7 @@ var renderText = function renderText(params) {
177
186
  __self: _this,
178
187
  __source: {
179
188
  fileName: _jsxFileName,
180
- lineNumber: 209,
189
+ lineNumber: 220,
181
190
  columnNumber: 5
182
191
  }
183
192
  }, output(node.content, state));
@@ -227,7 +236,7 @@ var renderText = function renderText(params) {
227
236
  __self: _this,
228
237
  __source: {
229
238
  fileName: _jsxFileName,
230
- lineNumber: 247,
239
+ lineNumber: 258,
231
240
  columnNumber: 7
232
241
  }
233
242
  }, Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state));
@@ -253,7 +262,7 @@ var renderText = function renderText(params) {
253
262
  __self: _this,
254
263
  __source: {
255
264
  fileName: _jsxFileName,
256
- lineNumber: 276,
265
+ lineNumber: 287,
257
266
  columnNumber: 11
258
267
  }
259
268
  }, _react["default"].createElement(_reactNative.Text, {
@@ -261,7 +270,7 @@ var renderText = function renderText(params) {
261
270
  __self: _this,
262
271
  __source: {
263
272
  fileName: _jsxFileName,
264
- lineNumber: 277,
273
+ lineNumber: 288,
265
274
  columnNumber: 13
266
275
  }
267
276
  }, node.ordered ? node.start + index + ". " : "\u2022"), _react["default"].createElement(_reactNative.Text, {
@@ -271,7 +280,7 @@ var renderText = function renderText(params) {
271
280
  __self: _this,
272
281
  __source: {
273
282
  fileName: _jsxFileName,
274
- lineNumber: 280,
283
+ lineNumber: 291,
275
284
  columnNumber: 13
276
285
  }
277
286
  }, content));
@@ -283,7 +292,7 @@ var renderText = function renderText(params) {
283
292
  __self: _this,
284
293
  __source: {
285
294
  fileName: _jsxFileName,
286
- lineNumber: 289,
295
+ lineNumber: 300,
287
296
  columnNumber: 9
288
297
  }
289
298
  }, items);
@@ -324,7 +333,7 @@ var renderText = function renderText(params) {
324
333
  __self: _this,
325
334
  __source: {
326
335
  fileName: _jsxFileName,
327
- lineNumber: 316,
336
+ lineNumber: 327,
328
337
  columnNumber: 5
329
338
  }
330
339
  }, newText);
@@ -1 +1 @@
1
- {"version":3,"sources":["renderText.tsx"],"names":["defaultMarkdownStyles","inlineCode","fontSize","padding","paddingHorizontal","list","marginBottom","marginTop","listItemNumber","fontWeight","listItemText","flex","listRow","flexDirection","mentions","paragraph","paragraphCenter","paragraphWithImage","parse","capture","state","content","renderText","params","colors","markdownRules","markdownStyles","message","messageOverlay","messageTextNumberOfLines","onLinkParams","onLink","onLongPressParam","onLongPress","onlyEmojis","onPressParam","onPress","preventPress","mentioned_users","text","newText","trim","urls","urlInfo","displayLink","encoded","replace","length","omission","markdown","protocol","raw","styles","autolink","color","accent_blue","backgroundColor","white_smoke","borderColor","grey_gainsboro","accent_red","black","url","Linking","canOpenURL","then","canOpenUrl","openURL","react","node","output","event","defaultHandler","target","emitter","key","withinLink","paragraphText","mentionedUsers","Array","isArray","reduce","acc","cur","userName","name","id","regEx","RegExp","match","source","exec","mentionsReact","listLevels","sub","top","customListAtLevel","level","items","map","item","index","withinList","type","isTopLevelText","includes","ordered","start","isSublist","sublist","customRules","link","reflink","order","defaultRules","JSON","stringify","undefined"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Linking, Text, View } from 'react-native';\nimport anchorme from 'anchorme';\nimport truncate from 'lodash/truncate';\n// @ts-expect-error\nimport Markdown from 'react-native-markdown-package';\nimport {\n DefaultRules,\n defaultRules,\n MatchFunction,\n ParseFunction,\n parseInline,\n ReactNodeOutput,\n SingleASTNode,\n} from 'simple-markdown';\n\nimport type { MessageType } from '../../../MessageList/hooks/useMessageList';\n\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../../types/types';\nimport type { MessageContextValue } from '../../../../contexts/messageContext/MessageContext';\nimport type { Colors, MarkdownStyle } from '../../../../contexts/themeContext/utils/theme';\n\nconst defaultMarkdownStyles: MarkdownStyle = {\n inlineCode: {\n fontSize: 13,\n padding: 3,\n paddingHorizontal: 5,\n },\n list: {\n marginBottom: 8,\n marginTop: 8,\n },\n listItemNumber: {\n fontWeight: 'bold',\n },\n listItemText: {\n flex: 0,\n },\n listRow: {\n flexDirection: 'row',\n },\n mentions: {\n fontWeight: '700',\n },\n // unfortunately marginVertical doesn't override the defaults for these within the 3rd party lib\n paragraph: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphCenter: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphWithImage: {\n marginBottom: 8,\n marginTop: 8,\n },\n};\n\nconst parse: ParseFunction = (capture, parse, state) => ({\n content: parseInline(parse, capture[0], state),\n});\n\nexport type MarkdownRules = Partial<DefaultRules>;\n\nexport type RenderTextParams<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<\n Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'onLongPress' | 'onPress' | 'preventPress'>\n> & {\n colors: typeof Colors;\n message: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n markdownRules?: MarkdownRules;\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n onLink?: (url: string) => Promise<void>;\n onlyEmojis?: boolean;\n};\n\nexport const renderText = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n params: RenderTextParams<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n colors,\n markdownRules,\n markdownStyles,\n message,\n messageOverlay,\n messageTextNumberOfLines,\n onLink: onLinkParams,\n onLongPress: onLongPressParam,\n onlyEmojis,\n onPress: onPressParam,\n preventPress,\n } = params;\n\n // take the @ mentions and turn them into markdown?\n // translate links\n const { mentioned_users, text } = message;\n\n if (!text) return null;\n\n let newText = text.trim();\n const urls = anchorme(newText, {\n list: true,\n });\n\n for (const urlInfo of urls) {\n const displayLink = truncate(urlInfo.encoded.replace(/^(www\\.)/, ''), {\n length: 200,\n omission: '...',\n });\n const markdown = `[${displayLink}](${urlInfo.protocol}${urlInfo.encoded})`;\n newText = newText.replace(urlInfo.raw, markdown);\n }\n\n newText = newText.replace(/[<&\"'>]/g, '\\\\$&');\n\n const styles: MarkdownStyle = {\n ...defaultMarkdownStyles,\n ...markdownStyles,\n autolink: {\n ...defaultMarkdownStyles.autolink,\n color: colors.accent_blue,\n ...markdownStyles?.autolink,\n },\n inlineCode: {\n ...defaultMarkdownStyles.inlineCode,\n backgroundColor: colors.white_smoke,\n borderColor: colors.grey_gainsboro,\n color: colors.accent_red,\n ...markdownStyles?.inlineCode,\n },\n mentions: {\n ...defaultMarkdownStyles.mentions,\n color: colors.accent_blue,\n ...markdownStyles?.mentions,\n },\n text: {\n ...defaultMarkdownStyles.text,\n color: colors.black,\n ...markdownStyles?.text,\n },\n };\n\n const onLink = (url: string) =>\n onLinkParams\n ? onLinkParams(url)\n : Linking.canOpenURL(url).then((canOpenUrl) => canOpenUrl && Linking.openURL(url));\n\n const react: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n defaultHandler: () => onLink(node.target),\n emitter: 'textLink',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textLink',\n event,\n });\n }\n };\n\n return (\n <Text\n key={state.key}\n onLongPress={onLongPress}\n onPress={onPress}\n style={styles.autolink}\n suppressHighlighting={true}\n >\n {output(node.content, { ...state, withinLink: true })}\n </Text>\n );\n };\n\n const paragraphText: ReactNodeOutput = (node, output, { ...state }) => (\n <Text key={state.key} numberOfLines={messageTextNumberOfLines} style={styles.paragraph}>\n {output(node.content, state)}\n </Text>\n );\n\n const mentionedUsers = Array.isArray(mentioned_users)\n ? mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n\n const regEx = new RegExp(`^\\\\B(${mentionedUsers})`, 'g');\n const match: MatchFunction = (source) => regEx.exec(source);\n\n const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n return (\n <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>\n {Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state)}\n </Text>\n );\n };\n\n const listLevels = {\n sub: 'sub',\n top: 'top',\n };\n\n /**\n * For lists and sublists, the default behavior of the markdown library we use is\n * to always renumber any list, so all ordered lists start from 1.\n *\n * This custom rule overrides this behavior both for top level lists and sublists,\n * in order to start the numbering from the number of the first list item provided.\n * */\n const customListAtLevel =\n (level: keyof typeof listLevels): ReactNodeOutput =>\n (node, output, { ...state }) => {\n const items = node.items.map((item: Array<SingleASTNode>, index: number) => {\n const withinList = item.length > 1 && item[1].type === 'list';\n const content = output(item, { ...state, withinList });\n\n const isTopLevelText =\n ['text', 'paragraph', 'strong'].includes(item[0].type) && withinList === false;\n\n return (\n <View key={index} style={styles.listRow}>\n <Text style={styles.listItemNumber}>\n {node.ordered ? `${node.start + index}. ` : `\\u2022`}\n </Text>\n <Text style={[styles.listItemText, isTopLevelText && { marginBottom: 0 }]}>\n {content}\n </Text>\n </View>\n );\n });\n\n const isSublist = level === 'sub';\n return (\n <View key={state.key} style={[isSublist ? styles.list : styles.sublist]}>\n {items}\n </View>\n );\n };\n\n const customRules = {\n link: { react },\n list: { react: customListAtLevel('top') },\n // Truncate long text content in the message overlay\n paragraph: messageTextNumberOfLines ? { react: paragraphText } : {},\n // we have no react rendering support for reflinks\n reflink: { match: () => null },\n sublist: { react: customListAtLevel('sub') },\n ...(mentionedUsers\n ? {\n mentions: {\n match,\n order: defaultRules.text.order - 0.5,\n parse,\n react: mentionsReact,\n },\n }\n : {}),\n };\n\n return (\n <Markdown\n key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${\n messageOverlay ? JSON.stringify(markdownStyles) : undefined\n }-${JSON.stringify(colors)}`}\n onLink={onLink}\n rules={{\n ...customRules,\n ...markdownRules,\n }}\n styles={styles}\n >\n {newText}\n </Markdown>\n );\n};\n"]}
1
+ {"version":3,"sources":["renderText.tsx"],"names":["defaultMarkdownStyles","inlineCode","fontSize","padding","paddingHorizontal","list","marginBottom","marginTop","listItemNumber","fontWeight","listItemText","flex","listRow","flexDirection","mentions","paragraph","paragraphCenter","paragraphWithImage","parse","capture","state","content","parseUrlsFromText","text","e","console","warn","renderText","params","colors","markdownRules","markdownStyles","message","messageOverlay","messageTextNumberOfLines","onLinkParams","onLink","onLongPressParam","onLongPress","onlyEmojis","onPressParam","onPress","preventPress","mentioned_users","newText","trim","urls","urlInfo","displayLink","encoded","replace","length","omission","markdown","protocol","raw","styles","autolink","color","accent_blue","backgroundColor","white_smoke","borderColor","grey_gainsboro","accent_red","black","url","Linking","canOpenURL","then","canOpenUrl","openURL","react","node","output","event","defaultHandler","target","emitter","key","withinLink","paragraphText","mentionedUsers","Array","isArray","reduce","acc","cur","userName","name","id","regEx","RegExp","match","source","exec","mentionsReact","listLevels","sub","top","customListAtLevel","level","items","map","item","index","withinList","type","isTopLevelText","includes","ordered","start","isSublist","sublist","customRules","link","reflink","order","defaultRules","JSON","stringify","undefined"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;;AAyBA,IAAMA,qBAAoC,GAAG;AAC3CC,EAAAA,UAAU,EAAE;AACVC,IAAAA,QAAQ,EAAE,EADA;AAEVC,IAAAA,OAAO,EAAE,CAFC;AAGVC,IAAAA,iBAAiB,EAAE;AAHT,GAD+B;AAM3CC,EAAAA,IAAI,EAAE;AACJC,IAAAA,YAAY,EAAE,CADV;AAEJC,IAAAA,SAAS,EAAE;AAFP,GANqC;AAU3CC,EAAAA,cAAc,EAAE;AACdC,IAAAA,UAAU,EAAE;AADE,GAV2B;AAa3CC,EAAAA,YAAY,EAAE;AACZC,IAAAA,IAAI,EAAE;AADM,GAb6B;AAgB3CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,aAAa,EAAE;AADR,GAhBkC;AAmB3CC,EAAAA,QAAQ,EAAE;AACRL,IAAAA,UAAU,EAAE;AADJ,GAnBiC;AAuB3CM,EAAAA,SAAS,EAAE;AACTT,IAAAA,YAAY,EAAE,CADL;AAETC,IAAAA,SAAS,EAAE;AAFF,GAvBgC;AA2B3CS,EAAAA,eAAe,EAAE;AACfV,IAAAA,YAAY,EAAE,CADC;AAEfC,IAAAA,SAAS,EAAE;AAFI,GA3B0B;AA+B3CU,EAAAA,kBAAkB,EAAE;AAClBX,IAAAA,YAAY,EAAE,CADI;AAElBC,IAAAA,SAAS,EAAE;AAFO;AA/BuB,CAA7C;;AAqCA,IAAMW,KAAoB,GAAG,eAACC,OAAD,EAAUD,MAAV,EAAiBE,KAAjB;AAAA,SAA4B;AACvDC,IAAAA,OAAO,EAAE,iCAAYH,MAAZ,EAAmBC,OAAO,CAAC,CAAD,CAA1B,EAA+BC,KAA/B;AAD8C,GAA5B;AAAA,CAA7B;;AAIA,IAAME,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,IAAD,EAAkB;AAC1C,MAAI;AACF,WAAO,0BAASA,IAAT,EAAe;AACpBlB,MAAAA,IAAI,EAAE;AADc,KAAf,CAAP;AAGD,GAJD,CAIE,OAAOmB,CAAP,EAAU;AACVC,IAAAA,OAAO,CAACC,IAAR,oCAA8CF,CAA9C;AAGA,WAAO,EAAP;AACD;AACF,CAXD;;AAoCO,IAAMG,UAAU,GAAG,SAAbA,UAAa,CASxBC,MATwB,EAUrB;AACH,MACEC,MADF,GAYID,MAZJ,CACEC,MADF;AAAA,MAEEC,aAFF,GAYIF,MAZJ,CAEEE,aAFF;AAAA,MAGEC,cAHF,GAYIH,MAZJ,CAGEG,cAHF;AAAA,MAIEC,OAJF,GAYIJ,MAZJ,CAIEI,OAJF;AAAA,MAKEC,cALF,GAYIL,MAZJ,CAKEK,cALF;AAAA,MAMEC,wBANF,GAYIN,MAZJ,CAMEM,wBANF;AAAA,MAOUC,YAPV,GAYIP,MAZJ,CAOEQ,MAPF;AAAA,MAQeC,gBARf,GAYIT,MAZJ,CAQEU,WARF;AAAA,MASEC,UATF,GAYIX,MAZJ,CASEW,UATF;AAAA,MAUWC,YAVX,GAYIZ,MAZJ,CAUEa,OAVF;AAAA,MAWEC,YAXF,GAYId,MAZJ,CAWEc,YAXF;AAgBA,MAAQC,eAAR,GAAkCX,OAAlC,CAAQW,eAAR;AAAA,MAAyBpB,IAAzB,GAAkCS,OAAlC,CAAyBT,IAAzB;AAEA,MAAI,CAACA,IAAL,EAAW,OAAO,IAAP;AAEX,MAAIqB,OAAO,GAAGrB,IAAI,CAACsB,IAAL,EAAd;AACA,MAAMC,IAAI,GAAGxB,iBAAiB,CAACsB,OAAD,CAA9B;;AAEA,uDAAsBE,IAAtB,wCAA4B;AAAA,QAAjBC,QAAiB;;AAC1B,QAAMC,YAAW,GAAG,0BAASD,QAAO,CAACE,OAAR,CAAgBC,OAAhB,CAAwB,UAAxB,EAAoC,EAApC,CAAT,EAAkD;AACpEC,MAAAA,MAAM,EAAE,GAD4D;AAEpEC,MAAAA,QAAQ,EAAE;AAF0D,KAAlD,CAApB;;AAIA,QAAMC,SAAQ,SAAOL,YAAP,UAAuBD,QAAO,CAACO,QAA/B,GAA0CP,QAAO,CAACE,OAAlD,MAAd;;AACAL,IAAAA,OAAO,GAAGA,OAAO,CAACM,OAAR,CAAgBH,QAAO,CAACQ,GAAxB,EAA6BF,SAA7B,CAAV;AACD;;AAEDT,EAAAA,OAAO,GAAGA,OAAO,CAACM,OAAR,CAAgB,UAAhB,EAA4B,MAA5B,CAAV;AAEA,MAAMM,MAAqB,iCACtBxD,qBADsB,EAEtB+B,cAFsB;AAGzB0B,IAAAA,QAAQ,gCACHzD,qBAAqB,CAACyD,QADnB;AAENC,MAAAA,KAAK,EAAE7B,MAAM,CAAC8B;AAFR,OAGH5B,cAHG,oBAGHA,cAAc,CAAE0B,QAHb,CAHiB;AAQzBxD,IAAAA,UAAU,gCACLD,qBAAqB,CAACC,UADjB;AAER2D,MAAAA,eAAe,EAAE/B,MAAM,CAACgC,WAFhB;AAGRC,MAAAA,WAAW,EAAEjC,MAAM,CAACkC,cAHZ;AAIRL,MAAAA,KAAK,EAAE7B,MAAM,CAACmC;AAJN,OAKLjC,cALK,oBAKLA,cAAc,CAAE9B,UALX,CARe;AAezBa,IAAAA,QAAQ,gCACHd,qBAAqB,CAACc,QADnB;AAEN4C,MAAAA,KAAK,EAAE7B,MAAM,CAAC8B;AAFR,OAGH5B,cAHG,oBAGHA,cAAc,CAAEjB,QAHb,CAfiB;AAoBzBS,IAAAA,IAAI,gCACCvB,qBAAqB,CAACuB,IADvB;AAEFmC,MAAAA,KAAK,EAAE7B,MAAM,CAACoC;AAFZ,OAGClC,cAHD,oBAGCA,cAAc,CAAER,IAHjB;AApBqB,IAA3B;;AA2BA,MAAMa,MAAM,GAAG,SAATA,MAAS,CAAC8B,GAAD;AAAA,WACb/B,YAAY,GACRA,YAAY,CAAC+B,GAAD,CADJ,GAERC,qBAAQC,UAAR,CAAmBF,GAAnB,EAAwBG,IAAxB,CAA6B,UAACC,UAAD;AAAA,aAAgBA,UAAU,IAAIH,qBAAQI,OAAR,CAAgBL,GAAhB,CAA9B;AAAA,KAA7B,CAHS;AAAA,GAAf;;AAKA,MAAMM,KAAsB,GAAG,SAAzBA,KAAyB,CAACC,IAAD,EAAOC,MAAP,QAAgC;AAAA,QAAZtD,KAAY;;AAC7D,QAAMqB,OAAO,GAAG,SAAVA,OAAU,CAACkC,KAAD,EAAkC;AAChD,UAAI,CAACjC,YAAD,IAAiBF,YAArB,EAAmC;AACjCA,QAAAA,YAAY,CAAC;AACXoC,UAAAA,cAAc,EAAE;AAAA,mBAAMxC,MAAM,CAACqC,IAAI,CAACI,MAAN,CAAZ;AAAA,WADL;AAEXC,UAAAA,OAAO,EAAE,UAFE;AAGXH,UAAAA,KAAK,EAALA;AAHW,SAAD,CAAZ;AAKD;AACF,KARD;;AAUA,QAAMrC,WAAW,GAAG,SAAdA,WAAc,CAACqC,KAAD,EAAkC;AACpD,UAAI,CAACjC,YAAD,IAAiBL,gBAArB,EAAuC;AACrCA,QAAAA,gBAAgB,CAAC;AACfyC,UAAAA,OAAO,EAAE,UADM;AAEfH,UAAAA,KAAK,EAALA;AAFe,SAAD,CAAhB;AAID;AACF,KAPD;;AASA,WACE,gCAAC,iBAAD;AACE,MAAA,GAAG,EAAEvD,KAAK,CAAC2D,GADb;AAEE,MAAA,WAAW,EAAEzC,WAFf;AAGE,MAAA,OAAO,EAAEG,OAHX;AAIE,MAAA,KAAK,EAAEe,MAAM,CAACC,QAJhB;AAKE,MAAA,oBAAoB,EAAE,IALxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOGiB,MAAM,CAACD,IAAI,CAACpD,OAAN,gCAAoBD,KAApB;AAA2B4D,MAAAA,UAAU,EAAE;AAAvC,OAPT,CADF;AAWD,GA/BD;;AAiCA,MAAMC,aAA8B,GAAG,SAAjCA,aAAiC,CAACR,IAAD,EAAOC,MAAP;AAAA,QAAoBtD,KAApB;AAAA,WACrC,gCAAC,iBAAD;AAAM,MAAA,GAAG,EAAEA,KAAK,CAAC2D,GAAjB;AAAsB,MAAA,aAAa,EAAE7C,wBAArC;AAA+D,MAAA,KAAK,EAAEsB,MAAM,CAACzC,SAA7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OACG2D,MAAM,CAACD,IAAI,CAACpD,OAAN,EAAeD,KAAf,CADT,CADqC;AAAA,GAAvC;;AAMA,MAAM8D,cAAc,GAAGC,KAAK,CAACC,OAAN,CAAczC,eAAd,IACnBA,eAAe,CAAC0C,MAAhB,CAAuB,UAACC,GAAD,EAAMC,GAAN,EAAc;AACnC,QAAMC,QAAQ,GAAGD,GAAG,CAACE,IAAJ,IAAYF,GAAG,CAACG,EAAhB,IAAsB,EAAvC;;AACA,QAAIF,QAAJ,EAAc;AACZF,MAAAA,GAAG,KAAOA,GAAG,CAACnC,MAAJ,GAAa,GAAb,GAAmB,EAA1B,UAAgCqC,QAAnC;AACD;;AACD,WAAOF,GAAP;AACD,GAND,EAMG,EANH,CADmB,GAQnB,EARJ;AAUA,MAAMK,KAAK,GAAG,IAAIC,MAAJ,WAAmBV,cAAnB,QAAsC,GAAtC,CAAd;;AACA,MAAMW,KAAoB,GAAG,SAAvBA,KAAuB,CAACC,MAAD;AAAA,WAAYH,KAAK,CAACI,IAAN,CAAWD,MAAX,CAAZ;AAAA,GAA7B;;AAEA,MAAME,aAA8B,GAAG,SAAjCA,aAAiC,CAACvB,IAAD,EAAOC,MAAP,SAAgC;AAAA,QAAZtD,KAAY;;AACrE,QAAMqB,OAAO,GAAG,SAAVA,OAAU,CAACkC,KAAD,EAAkC;AAChD,UAAI,CAACjC,YAAD,IAAiBF,YAArB,EAAmC;AACjCA,QAAAA,YAAY,CAAC;AACXsC,UAAAA,OAAO,EAAE,aADE;AAEXH,UAAAA,KAAK,EAALA;AAFW,SAAD,CAAZ;AAID;AACF,KAPD;;AASA,QAAMrC,WAAW,GAAG,SAAdA,WAAc,CAACqC,KAAD,EAAkC;AACpD,UAAI,CAACjC,YAAD,IAAiBL,gBAArB,EAAuC;AACrCA,QAAAA,gBAAgB,CAAC;AACfyC,UAAAA,OAAO,EAAE,aADM;AAEfH,UAAAA,KAAK,EAALA;AAFe,SAAD,CAAhB;AAID;AACF,KAPD;;AASA,WACE,gCAAC,iBAAD;AAAM,MAAA,GAAG,EAAEvD,KAAK,CAAC2D,GAAjB;AAAsB,MAAA,WAAW,EAAEzC,WAAnC;AAAgD,MAAA,OAAO,EAAEG,OAAzD;AAAkE,MAAA,KAAK,EAAEe,MAAM,CAAC1C,QAAhF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OACGqE,KAAK,CAACC,OAAN,CAAcX,IAAI,CAACpD,OAAnB,IAA8BoD,IAAI,CAACpD,OAAL,CAAa,CAAb,EAAgBA,OAAhB,IAA2B,EAAzD,GAA8DqD,MAAM,CAACD,IAAI,CAACpD,OAAN,EAAeD,KAAf,CADvE,CADF;AAKD,GAxBD;;AA0BA,MAAM6E,UAAU,GAAG;AACjBC,IAAAA,GAAG,EAAE,KADY;AAEjBC,IAAAA,GAAG,EAAE;AAFY,GAAnB;;AAYA,MAAMC,iBAAiB,GACrB,SADIA,iBACJ,CAACC,KAAD;AAAA,WACA,UAAC5B,IAAD,EAAOC,MAAP,SAAgC;AAAA,UAAZtD,KAAY;AAC9B,UAAMkF,KAAK,GAAG7B,IAAI,CAAC6B,KAAL,CAAWC,GAAX,CAAe,UAACC,IAAD,EAA6BC,KAA7B,EAA+C;AAC1E,YAAMC,UAAU,GAAGF,IAAI,CAACrD,MAAL,GAAc,CAAd,IAAmBqD,IAAI,CAAC,CAAD,CAAJ,CAAQG,IAAR,KAAiB,MAAvD;AACA,YAAMtF,OAAO,GAAGqD,MAAM,CAAC8B,IAAD,gCAAYpF,KAAZ;AAAmBsF,UAAAA,UAAU,EAAVA;AAAnB,WAAtB;AAEA,YAAME,cAAc,GAClB,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB,EAAgCC,QAAhC,CAAyCL,IAAI,CAAC,CAAD,CAAJ,CAAQG,IAAjD,KAA0DD,UAAU,KAAK,KAD3E;AAGA,eACE,gCAAC,iBAAD;AAAM,UAAA,GAAG,EAAED,KAAX;AAAkB,UAAA,KAAK,EAAEjD,MAAM,CAAC5C,OAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WACE,gCAAC,iBAAD;AAAM,UAAA,KAAK,EAAE4C,MAAM,CAAChD,cAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WACGiE,IAAI,CAACqC,OAAL,GAAkBrC,IAAI,CAACsC,KAAL,GAAaN,KAA/B,kBADH,CADF,EAIE,gCAAC,iBAAD;AAAM,UAAA,KAAK,EAAE,CAACjD,MAAM,CAAC9C,YAAR,EAAsBkG,cAAc,IAAI;AAAEtG,YAAAA,YAAY,EAAE;AAAhB,WAAxC,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WACGe,OADH,CAJF,CADF;AAUD,OAjBa,CAAd;AAmBA,UAAM2F,SAAS,GAAGX,KAAK,KAAK,KAA5B;AACA,aACE,gCAAC,iBAAD;AAAM,QAAA,GAAG,EAAEjF,KAAK,CAAC2D,GAAjB;AAAsB,QAAA,KAAK,EAAE,CAACiC,SAAS,GAAGxD,MAAM,CAACnD,IAAV,GAAiBmD,MAAM,CAACyD,OAAlC,CAA7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SACGX,KADH,CADF;AAKD,KA3BD;AAAA,GADF;;AA8BA,MAAMY,WAAW;AACfC,IAAAA,IAAI,EAAE;AAAE3C,MAAAA,KAAK,EAALA;AAAF,KADS;AAEfnE,IAAAA,IAAI,EAAE;AAAEmE,MAAAA,KAAK,EAAE4B,iBAAiB,CAAC,KAAD;AAA1B,KAFS;AAIfrF,IAAAA,SAAS,EAAEmB,wBAAwB,GAAG;AAAEsC,MAAAA,KAAK,EAAES;AAAT,KAAH,GAA8B,EAJlD;AAMfmC,IAAAA,OAAO,EAAE;AAAEvB,MAAAA,KAAK,EAAE;AAAA,eAAM,IAAN;AAAA;AAAT,KANM;AAOfoB,IAAAA,OAAO,EAAE;AAAEzC,MAAAA,KAAK,EAAE4B,iBAAiB,CAAC,KAAD;AAA1B;AAPM,KAQXlB,cAAc,GACd;AACEpE,IAAAA,QAAQ,EAAE;AACR+E,MAAAA,KAAK,EAALA,KADQ;AAERwB,MAAAA,KAAK,EAAEC,6BAAa/F,IAAb,CAAkB8F,KAAlB,GAA0B,GAFzB;AAGRnG,MAAAA,KAAK,EAALA,KAHQ;AAIRsD,MAAAA,KAAK,EAAEwB;AAJC;AADZ,GADc,GASd,EAjBW,CAAjB;AAoBA,SACE,gCAAC,sCAAD;AACE,IAAA,GAAG,EAAKuB,IAAI,CAACC,SAAL,CAAe7E,eAAf,CAAL,SAAwCJ,UAAxC,UACDN,cAAc,GAAGsF,IAAI,CAACC,SAAL,CAAezF,cAAf,CAAH,GAAoC0F,SADjD,UAECF,IAAI,CAACC,SAAL,CAAe3F,MAAf,CAHN;AAIE,IAAA,MAAM,EAAEO,MAJV;AAKE,IAAA,KAAK,gCACA8E,WADA,EAEApF,aAFA,CALP;AASE,IAAA,MAAM,EAAE0B,MATV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAWGZ,OAXH,CADF;AAeD,CAxOM","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Linking, Text, View } from 'react-native';\nimport anchorme from 'anchorme';\nimport truncate from 'lodash/truncate';\n// @ts-expect-error\nimport Markdown from 'react-native-markdown-package';\nimport {\n DefaultRules,\n defaultRules,\n MatchFunction,\n ParseFunction,\n parseInline,\n ReactNodeOutput,\n SingleASTNode,\n} from 'simple-markdown';\n\nimport type { MessageType } from '../../../MessageList/hooks/useMessageList';\n\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../../types/types';\nimport type { MessageContextValue } from '../../../../contexts/messageContext/MessageContext';\nimport type { Colors, MarkdownStyle } from '../../../../contexts/themeContext/utils/theme';\n\nconst defaultMarkdownStyles: MarkdownStyle = {\n inlineCode: {\n fontSize: 13,\n padding: 3,\n paddingHorizontal: 5,\n },\n list: {\n marginBottom: 8,\n marginTop: 8,\n },\n listItemNumber: {\n fontWeight: 'bold',\n },\n listItemText: {\n flex: 0,\n },\n listRow: {\n flexDirection: 'row',\n },\n mentions: {\n fontWeight: '700',\n },\n // unfortunately marginVertical doesn't override the defaults for these within the 3rd party lib\n paragraph: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphCenter: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphWithImage: {\n marginBottom: 8,\n marginTop: 8,\n },\n};\n\nconst parse: ParseFunction = (capture, parse, state) => ({\n content: parseInline(parse, capture[0], state),\n});\n\nconst parseUrlsFromText = (text: string) => {\n try {\n return anchorme(text, {\n list: true,\n });\n } catch (e) {\n console.warn(`failure at parseUrlsFromText: ${e}`);\n // In case of failures its not worth crashing the app,\n // and instead simply to have un-parsed urls in message text.\n return [];\n }\n};\n\nexport type MarkdownRules = Partial<DefaultRules>;\n\nexport type RenderTextParams<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<\n Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'onLongPress' | 'onPress' | 'preventPress'>\n> & {\n colors: typeof Colors;\n message: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n markdownRules?: MarkdownRules;\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n onLink?: (url: string) => Promise<void>;\n onlyEmojis?: boolean;\n};\n\nexport const renderText = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n params: RenderTextParams<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n colors,\n markdownRules,\n markdownStyles,\n message,\n messageOverlay,\n messageTextNumberOfLines,\n onLink: onLinkParams,\n onLongPress: onLongPressParam,\n onlyEmojis,\n onPress: onPressParam,\n preventPress,\n } = params;\n\n // take the @ mentions and turn them into markdown?\n // translate links\n const { mentioned_users, text } = message;\n\n if (!text) return null;\n\n let newText = text.trim();\n const urls = parseUrlsFromText(newText);\n\n for (const urlInfo of urls) {\n const displayLink = truncate(urlInfo.encoded.replace(/^(www\\.)/, ''), {\n length: 200,\n omission: '...',\n });\n const markdown = `[${displayLink}](${urlInfo.protocol}${urlInfo.encoded})`;\n newText = newText.replace(urlInfo.raw, markdown);\n }\n\n newText = newText.replace(/[<&\"'>]/g, '\\\\$&');\n\n const styles: MarkdownStyle = {\n ...defaultMarkdownStyles,\n ...markdownStyles,\n autolink: {\n ...defaultMarkdownStyles.autolink,\n color: colors.accent_blue,\n ...markdownStyles?.autolink,\n },\n inlineCode: {\n ...defaultMarkdownStyles.inlineCode,\n backgroundColor: colors.white_smoke,\n borderColor: colors.grey_gainsboro,\n color: colors.accent_red,\n ...markdownStyles?.inlineCode,\n },\n mentions: {\n ...defaultMarkdownStyles.mentions,\n color: colors.accent_blue,\n ...markdownStyles?.mentions,\n },\n text: {\n ...defaultMarkdownStyles.text,\n color: colors.black,\n ...markdownStyles?.text,\n },\n };\n\n const onLink = (url: string) =>\n onLinkParams\n ? onLinkParams(url)\n : Linking.canOpenURL(url).then((canOpenUrl) => canOpenUrl && Linking.openURL(url));\n\n const react: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n defaultHandler: () => onLink(node.target),\n emitter: 'textLink',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textLink',\n event,\n });\n }\n };\n\n return (\n <Text\n key={state.key}\n onLongPress={onLongPress}\n onPress={onPress}\n style={styles.autolink}\n suppressHighlighting={true}\n >\n {output(node.content, { ...state, withinLink: true })}\n </Text>\n );\n };\n\n const paragraphText: ReactNodeOutput = (node, output, { ...state }) => (\n <Text key={state.key} numberOfLines={messageTextNumberOfLines} style={styles.paragraph}>\n {output(node.content, state)}\n </Text>\n );\n\n const mentionedUsers = Array.isArray(mentioned_users)\n ? mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n\n const regEx = new RegExp(`^\\\\B(${mentionedUsers})`, 'g');\n const match: MatchFunction = (source) => regEx.exec(source);\n\n const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n return (\n <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>\n {Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state)}\n </Text>\n );\n };\n\n const listLevels = {\n sub: 'sub',\n top: 'top',\n };\n\n /**\n * For lists and sublists, the default behavior of the markdown library we use is\n * to always renumber any list, so all ordered lists start from 1.\n *\n * This custom rule overrides this behavior both for top level lists and sublists,\n * in order to start the numbering from the number of the first list item provided.\n * */\n const customListAtLevel =\n (level: keyof typeof listLevels): ReactNodeOutput =>\n (node, output, { ...state }) => {\n const items = node.items.map((item: Array<SingleASTNode>, index: number) => {\n const withinList = item.length > 1 && item[1].type === 'list';\n const content = output(item, { ...state, withinList });\n\n const isTopLevelText =\n ['text', 'paragraph', 'strong'].includes(item[0].type) && withinList === false;\n\n return (\n <View key={index} style={styles.listRow}>\n <Text style={styles.listItemNumber}>\n {node.ordered ? `${node.start + index}. ` : `\\u2022`}\n </Text>\n <Text style={[styles.listItemText, isTopLevelText && { marginBottom: 0 }]}>\n {content}\n </Text>\n </View>\n );\n });\n\n const isSublist = level === 'sub';\n return (\n <View key={state.key} style={[isSublist ? styles.list : styles.sublist]}>\n {items}\n </View>\n );\n };\n\n const customRules = {\n link: { react },\n list: { react: customListAtLevel('top') },\n // Truncate long text content in the message overlay\n paragraph: messageTextNumberOfLines ? { react: paragraphText } : {},\n // we have no react rendering support for reflinks\n reflink: { match: () => null },\n sublist: { react: customListAtLevel('sub') },\n ...(mentionedUsers\n ? {\n mentions: {\n match,\n order: defaultRules.text.order - 0.5,\n parse,\n react: mentionsReact,\n },\n }\n : {}),\n };\n\n return (\n <Markdown\n key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${\n messageOverlay ? JSON.stringify(markdownStyles) : undefined\n }-${JSON.stringify(colors)}`}\n onLink={onLink}\n rules={{\n ...customRules,\n ...markdownRules,\n }}\n styles={styles}\n >\n {newText}\n </Markdown>\n );\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.0.0-beta.1"
2
+ "version": "4.0.0-beta.2"
3
3
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "4.0.0-beta.1",
4
+ "version": "4.0.0-beta.2",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -70,6 +70,19 @@ const parse: ParseFunction = (capture, parse, state) => ({
70
70
  content: parseInline(parse, capture[0], state),
71
71
  });
72
72
 
73
+ const parseUrlsFromText = (text: string) => {
74
+ try {
75
+ return anchorme(text, {
76
+ list: true,
77
+ });
78
+ } catch (e) {
79
+ console.warn(`failure at parseUrlsFromText: ${e}`);
80
+ // In case of failures its not worth crashing the app,
81
+ // and instead simply to have un-parsed urls in message text.
82
+ return [];
83
+ }
84
+ };
85
+
73
86
  export type MarkdownRules = Partial<DefaultRules>;
74
87
 
75
88
  export type RenderTextParams<
@@ -125,9 +138,7 @@ export const renderText = <
125
138
  if (!text) return null;
126
139
 
127
140
  let newText = text.trim();
128
- const urls = anchorme(newText, {
129
- list: true,
130
- });
141
+ const urls = parseUrlsFromText(newText);
131
142
 
132
143
  for (const urlInfo of urls) {
133
144
  const displayLink = truncate(urlInfo.encoded.replace(/^(www\.)/, ''), {
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.0.0-beta.1"
2
+ "version": "4.0.0-beta.2"
3
3
  }