@kesha-antonov/react-native-chat 6.0.1 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +36 -4
  2. package/lib/Actions.d.ts.map +1 -1
  3. package/lib/Actions.js +33 -27
  4. package/lib/Actions.js.map +1 -1
  5. package/lib/Chat/Chat.d.ts.map +1 -1
  6. package/lib/Chat/Chat.js +253 -203
  7. package/lib/Chat/Chat.js.map +1 -1
  8. package/lib/Chat/ChatMessageList.d.ts.map +1 -1
  9. package/lib/Chat/ChatMessageList.js +4 -0
  10. package/lib/Chat/ChatMessageList.js.map +1 -1
  11. package/lib/Chat/index.d.ts +9 -1
  12. package/lib/Chat/index.d.ts.map +1 -1
  13. package/lib/Chat/index.js +14 -1
  14. package/lib/Chat/index.js.map +1 -1
  15. package/lib/Chat/types.d.ts +29 -0
  16. package/lib/Chat/types.d.ts.map +1 -1
  17. package/lib/Chat/types.js.map +1 -1
  18. package/lib/Chat/useMessageActions.d.ts +1 -0
  19. package/lib/Chat/useMessageActions.d.ts.map +1 -1
  20. package/lib/Chat/useMessageActions.js +97 -89
  21. package/lib/Chat/useMessageActions.js.map +1 -1
  22. package/lib/ChatHeader.d.ts +50 -0
  23. package/lib/ChatHeader.d.ts.map +1 -0
  24. package/lib/ChatHeader.js +356 -0
  25. package/lib/ChatHeader.js.map +1 -0
  26. package/lib/ChatList/ChatListCell.d.ts +1 -1
  27. package/lib/ChatList/ChatListCell.d.ts.map +1 -1
  28. package/lib/ChatList/ChatListCell.js +42 -11
  29. package/lib/ChatList/ChatListCell.js.map +1 -1
  30. package/lib/ChatList/index.js +332 -323
  31. package/lib/ChatList/index.js.map +1 -1
  32. package/lib/ChatList/types.d.ts +17 -1
  33. package/lib/ChatList/types.d.ts.map +1 -1
  34. package/lib/ChatList/types.js.map +1 -1
  35. package/lib/ChatList/utils.d.ts +4 -1
  36. package/lib/ChatList/utils.d.ts.map +1 -1
  37. package/lib/ChatList/utils.js +3 -2
  38. package/lib/ChatList/utils.js.map +1 -1
  39. package/lib/Composer.js +5 -1
  40. package/lib/Composer.js.map +1 -1
  41. package/lib/InputToolbar/fragments.d.ts +1 -1
  42. package/lib/InputToolbar/fragments.d.ts.map +1 -1
  43. package/lib/InputToolbar/fragments.js +9 -7
  44. package/lib/InputToolbar/fragments.js.map +1 -1
  45. package/lib/InputToolbar/index.d.ts.map +1 -1
  46. package/lib/InputToolbar/index.js +3 -2
  47. package/lib/InputToolbar/index.js.map +1 -1
  48. package/lib/InputToolbar/types.d.ts +6 -0
  49. package/lib/InputToolbar/types.d.ts.map +1 -1
  50. package/lib/InputToolbar/types.js.map +1 -1
  51. package/lib/InputToolbar/useActionsFragment.d.ts.map +1 -1
  52. package/lib/InputToolbar/useActionsFragment.js +83 -59
  53. package/lib/InputToolbar/useActionsFragment.js.map +1 -1
  54. package/lib/InputToolbar/useKeyboardInset.d.ts +1 -1
  55. package/lib/InputToolbar/useKeyboardInset.d.ts.map +1 -1
  56. package/lib/InputToolbar/useKeyboardInset.js +2 -2
  57. package/lib/InputToolbar/useKeyboardInset.js.map +1 -1
  58. package/lib/MessageText.d.ts.map +1 -1
  59. package/lib/MessageText.js +39 -33
  60. package/lib/MessageText.js.map +1 -1
  61. package/lib/MessagesContainer/index.d.ts.map +1 -1
  62. package/lib/MessagesContainer/index.js +113 -94
  63. package/lib/MessagesContainer/index.js.map +1 -1
  64. package/lib/MessagesContainer/types.d.ts +5 -2
  65. package/lib/MessagesContainer/types.d.ts.map +1 -1
  66. package/lib/MessagesContainer/types.js.map +1 -1
  67. package/lib/MessagesContainer/useChained.d.ts +6 -0
  68. package/lib/MessagesContainer/useChained.d.ts.map +1 -0
  69. package/lib/MessagesContainer/useChained.js +38 -0
  70. package/lib/MessagesContainer/useChained.js.map +1 -0
  71. package/lib/MessagesContainer/useListChrome.d.ts.map +1 -1
  72. package/lib/MessagesContainer/useListChrome.js +1 -1
  73. package/lib/MessagesContainer/useListChrome.js.map +1 -1
  74. package/lib/Models.d.ts +2 -1
  75. package/lib/Models.d.ts.map +1 -1
  76. package/lib/Models.js.map +1 -1
  77. package/lib/Send.d.ts.map +1 -1
  78. package/lib/Send.js +18 -13
  79. package/lib/Send.js.map +1 -1
  80. package/lib/Theme.d.ts +11 -0
  81. package/lib/Theme.d.ts.map +1 -1
  82. package/lib/Theme.js +17 -1
  83. package/lib/Theme.js.map +1 -1
  84. package/lib/attachments/AttachmentButton.js +17 -15
  85. package/lib/attachments/AttachmentButton.js.map +1 -1
  86. package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts +3 -1
  87. package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts.map +1 -1
  88. package/lib/attachments/AttachmentMenu/GalleryGrid.js +69 -68
  89. package/lib/attachments/AttachmentMenu/GalleryGrid.js.map +1 -1
  90. package/lib/attachments/AttachmentMenu/TabPanel.d.ts +3 -1
  91. package/lib/attachments/AttachmentMenu/TabPanel.d.ts.map +1 -1
  92. package/lib/attachments/AttachmentMenu/TabPanel.js +23 -21
  93. package/lib/attachments/AttachmentMenu/TabPanel.js.map +1 -1
  94. package/lib/attachments/AttachmentMenu/index.d.ts +6 -2
  95. package/lib/attachments/AttachmentMenu/index.d.ts.map +1 -1
  96. package/lib/attachments/AttachmentMenu/index.js +259 -247
  97. package/lib/attachments/AttachmentMenu/index.js.map +1 -1
  98. package/lib/attachments/buildMessages.d.ts +4 -4
  99. package/lib/attachments/buildMessages.d.ts.map +1 -1
  100. package/lib/attachments/buildMessages.js +9 -8
  101. package/lib/attachments/buildMessages.js.map +1 -1
  102. package/lib/attachments/types.d.ts +19 -0
  103. package/lib/attachments/types.d.ts.map +1 -1
  104. package/lib/attachments/types.js.map +1 -1
  105. package/lib/components/TouchableOpacity.d.ts +5 -0
  106. package/lib/components/TouchableOpacity.d.ts.map +1 -1
  107. package/lib/components/TouchableOpacity.js +59 -54
  108. package/lib/components/TouchableOpacity.js.map +1 -1
  109. package/lib/components/defaultMessageActions.d.ts +3 -1
  110. package/lib/components/defaultMessageActions.d.ts.map +1 -1
  111. package/lib/components/defaultMessageActions.js +9 -1
  112. package/lib/components/defaultMessageActions.js.map +1 -1
  113. package/lib/components/textHighlight.d.ts +14 -0
  114. package/lib/components/textHighlight.d.ts.map +1 -0
  115. package/lib/components/textHighlight.js +39 -0
  116. package/lib/components/textHighlight.js.map +1 -0
  117. package/lib/hooks/useKeyboardVerticalOffset.d.ts +6 -0
  118. package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
  119. package/lib/hooks/useKeyboardVerticalOffset.js +35 -13
  120. package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
  121. package/lib/i18n.d.ts +2 -0
  122. package/lib/i18n.d.ts.map +1 -1
  123. package/lib/i18n.js +1 -0
  124. package/lib/i18n.js.map +1 -1
  125. package/lib/index.d.ts +3 -1
  126. package/lib/index.d.ts.map +1 -1
  127. package/lib/index.js +1 -0
  128. package/lib/index.js.map +1 -1
  129. package/lib/linkParser.d.ts +4 -1
  130. package/lib/linkParser.d.ts.map +1 -1
  131. package/lib/linkParser.js +115 -78
  132. package/lib/linkParser.js.map +1 -1
  133. package/lib/locales/ar.d.ts.map +1 -1
  134. package/lib/locales/ar.js +1 -0
  135. package/lib/locales/ar.js.map +1 -1
  136. package/lib/locales/de.d.ts.map +1 -1
  137. package/lib/locales/de.js +1 -0
  138. package/lib/locales/de.js.map +1 -1
  139. package/lib/locales/es.d.ts.map +1 -1
  140. package/lib/locales/es.js +1 -0
  141. package/lib/locales/es.js.map +1 -1
  142. package/lib/locales/fr.d.ts.map +1 -1
  143. package/lib/locales/fr.js +1 -0
  144. package/lib/locales/fr.js.map +1 -1
  145. package/lib/locales/hi.d.ts.map +1 -1
  146. package/lib/locales/hi.js +1 -0
  147. package/lib/locales/hi.js.map +1 -1
  148. package/lib/locales/id.d.ts.map +1 -1
  149. package/lib/locales/id.js +1 -0
  150. package/lib/locales/id.js.map +1 -1
  151. package/lib/locales/it.d.ts.map +1 -1
  152. package/lib/locales/it.js +1 -0
  153. package/lib/locales/it.js.map +1 -1
  154. package/lib/locales/ja.d.ts.map +1 -1
  155. package/lib/locales/ja.js +1 -0
  156. package/lib/locales/ja.js.map +1 -1
  157. package/lib/locales/ko.d.ts.map +1 -1
  158. package/lib/locales/ko.js +1 -0
  159. package/lib/locales/ko.js.map +1 -1
  160. package/lib/locales/nl.d.ts.map +1 -1
  161. package/lib/locales/nl.js +1 -0
  162. package/lib/locales/nl.js.map +1 -1
  163. package/lib/locales/pl.d.ts.map +1 -1
  164. package/lib/locales/pl.js +1 -0
  165. package/lib/locales/pl.js.map +1 -1
  166. package/lib/locales/pt.d.ts.map +1 -1
  167. package/lib/locales/pt.js +1 -0
  168. package/lib/locales/pt.js.map +1 -1
  169. package/lib/locales/ru.d.ts.map +1 -1
  170. package/lib/locales/ru.js +1 -0
  171. package/lib/locales/ru.js.map +1 -1
  172. package/lib/locales/tr.d.ts.map +1 -1
  173. package/lib/locales/tr.js +1 -0
  174. package/lib/locales/tr.js.map +1 -1
  175. package/lib/locales/zh.d.ts.map +1 -1
  176. package/lib/locales/zh.js +1 -0
  177. package/lib/locales/zh.js.map +1 -1
  178. package/llms.txt +1 -1
  179. package/package.json +1 -1
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["utils","isRTLLocale","mirrorPosition","Color","Actions","Avatar","Bubble","SystemMessage","MessageImage","MessageText","MessageLocation","MessageFile","formatFileSize","EmojiGrid","EMOJI_CATEGORY_KEYS","DEFAULT_RECENT_EMOJIS","AttachmentMenu","buildAttachmentMessages","getAttachmentTabs","MediaCard","AttachmentSheet","ContextMenu","MarkdownMessageText","isMarkdownAvailable","BasicMarkdown","WaveformPlayer","isWaveformAvailable","VoiceMessageInput","isVoiceRecordingAvailable","VideoRecordButton","isVideoRecordingAvailable","VideoNoteRecorder","isVisionCameraAvailable","Composer","Day","InputToolbar","LoadEarlierMessages","Message","MessagesContainer","Send","Time","ChatAvatar","MessageAudio","MessageVideo","MessageReply","ReplyPreview","StreamingCursor","useColorScheme","useTheme","useThemedStyles","useIcons","useLabels","useIsRTL","Icon","ChatWallpaper","useStreamingMessages","useChatMessages","getTypingText","TypingStatus","ChatList","ChatListAvatar","ChatListCell","ChatListShimmer","CHAT_LIST_ROW_HEIGHT","formatChatListDate","getChatPreview","matchesChatQuery","sortChats","useChatList","toggleReaction","getChatCapabilities","DEFAULT_MESSAGE_ACTION_KEYS","ChatEmpty","UnreadSeparator","LinkPreviewCard","findFirstUrl","countEmojiOnly"],"sources":["../src/index.ts"],"sourcesContent":["import * as utils from './utils'\n\nexport * from './Chat'\nexport * from './Constant'\nexport { utils }\nexport * from './ChatContext'\nexport * from './types'\nexport * from './linkParser'\nexport * from './Reply'\nexport * from './Reactions'\nexport * from './styles'\nexport * from './Theme'\nexport * from './Icons'\nexport * from './i18n'\nexport { isRTLLocale, mirrorPosition } from './rtl'\nexport { Color } from './Color'\nexport { Actions } from './Actions'\nexport { Avatar } from './Avatar'\nexport { Bubble } from './Bubble'\nexport { SystemMessage } from './SystemMessage'\nexport { MessageImage } from './MessageImage'\nexport { MessageText } from './MessageText'\nexport { MessageLocation } from './MessageLocation'\nexport { MessageFile, formatFileSize } from './MessageFile'\nexport { EmojiGrid } from './emoji/EmojiGrid'\nexport type { EmojiGridProps } from './emoji/EmojiGrid'\nexport type { EmojiKeyboardProps, EmojiKeyboardRenderProps } from './emoji/EmojiKeyboard'\nexport { EMOJI_CATEGORY_KEYS, DEFAULT_RECENT_EMOJIS } from './emoji/emojiStore'\nexport type { EmojiCategoryKey } from './emoji/emojiStore'\nexport { AttachmentMenu } from './attachments/AttachmentMenu'\nexport type { AttachmentMenuProps } from './attachments/AttachmentMenu'\nexport { buildAttachmentMessages, getAttachmentTabs } from './attachments/buildMessages'\nexport type {\n AttachmentTab,\n AttachmentsProps,\n AttachmentMenuRenderProps,\n AttachmentPickResult,\n PickedAttachment\n} from './attachments/types'\nexport { MediaCard } from './components/MediaCard'\nexport { AttachmentSheet } from './components/AttachmentSheet'\nexport { ContextMenu } from './components/ContextMenu'\nexport { MarkdownMessageText, isMarkdownAvailable } from './components/MarkdownMessageText'\nexport { BasicMarkdown } from './components/BasicMarkdown'\nexport { WaveformPlayer, isWaveformAvailable } from './components/WaveformPlayer'\nexport { VoiceMessageInput, isVoiceRecordingAvailable } from './components/VoiceMessageInput'\nexport { VideoRecordButton, isVideoRecordingAvailable } from './components/VideoRecordButton'\nexport { VideoNoteRecorder } from './components/VideoNoteRecorder'\nexport { isVisionCameraAvailable } from './components/visionCamera'\nexport { Composer } from './Composer'\nexport { Day } from './Day'\nexport { InputToolbar } from './InputToolbar'\nexport { LoadEarlierMessages } from './LoadEarlierMessages'\nexport { Message } from './Message'\nexport { MessagesContainer } from './MessagesContainer'\nexport { Send } from './Send'\nexport { Time } from './Time'\nexport { ChatAvatar } from './ChatAvatar'\nexport { MessageAudio } from './MessageAudio'\nexport { MessageVideo } from './MessageVideo'\nexport { MessageReply } from './components/MessageReply'\nexport { ReplyPreview } from './components/ReplyPreview'\nexport { StreamingCursor } from './components/StreamingCursor'\nexport { useColorScheme } from './hooks/useColorScheme'\nexport { useTheme, useThemedStyles } from './hooks/useTheme'\nexport { useIcons } from './hooks/useIcons'\nexport { useLabels } from './hooks/useLabels'\nexport { useIsRTL } from './hooks/useIsRTL'\nexport { Icon } from './components/Icon'\nexport { ChatWallpaper } from './components/ChatWallpaper'\nexport type { ChatWallpaperProps } from './components/ChatWallpaper'\nexport { useStreamingMessages } from './hooks/useStreamingMessages'\nexport type {\n UseStreamingMessagesOptions,\n UseStreamingMessagesResult,\n StreamHandle\n} from './hooks/useStreamingMessages'\nexport { useChatMessages } from './hooks/useChatMessages'\nexport { getTypingText, TypingStatus } from './components/TypingStatus'\nexport type { TypingAction, TypingStatusProps } from './components/TypingStatus'\nexport {\n ChatList,\n ChatListAvatar,\n ChatListCell,\n ChatListShimmer,\n CHAT_LIST_ROW_HEIGHT,\n formatChatListDate,\n getChatPreview,\n matchesChatQuery,\n sortChats,\n useChatList\n} from './ChatList'\nexport type {\n ChatListCellProps,\n ChatListItem,\n ChatListItemKind,\n ChatListProps\n} from './ChatList'\nexport type { UseChatMessagesOptions, UseChatMessagesResult } from './hooks/useChatMessages'\nexport { toggleReaction } from './messageUtils'\nexport type { ToggleReactionOptions } from './messageUtils'\nexport { getChatCapabilities } from './optional'\nexport type { ChatCapabilities } from './optional'\nexport { DEFAULT_MESSAGE_ACTION_KEYS } from './components/defaultMessageActions'\nexport { ChatEmpty } from './components/ChatEmpty'\nexport type { ChatEmptyProps } from './components/ChatEmpty'\nexport { UnreadSeparator } from './components/UnreadSeparator'\nexport { LinkPreviewCard, findFirstUrl } from './components/LinkPreviewCard'\nexport type { LinkPreviewProps, FetchLinkPreview } from './components/LinkPreviewCard'\nexport { countEmojiOnly } from './emojiOnly'\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["utils","isRTLLocale","mirrorPosition","Color","Actions","Avatar","Bubble","SystemMessage","MessageImage","MessageText","MessageLocation","MessageFile","formatFileSize","EmojiGrid","EMOJI_CATEGORY_KEYS","DEFAULT_RECENT_EMOJIS","AttachmentMenu","buildAttachmentMessages","getAttachmentTabs","MediaCard","AttachmentSheet","ContextMenu","MarkdownMessageText","isMarkdownAvailable","BasicMarkdown","WaveformPlayer","isWaveformAvailable","VoiceMessageInput","isVoiceRecordingAvailable","VideoRecordButton","isVideoRecordingAvailable","VideoNoteRecorder","isVisionCameraAvailable","Composer","Day","InputToolbar","LoadEarlierMessages","Message","MessagesContainer","Send","Time","ChatAvatar","ChatHeader","MessageAudio","MessageVideo","MessageReply","ReplyPreview","StreamingCursor","useColorScheme","useTheme","useThemedStyles","useIcons","useLabels","useIsRTL","Icon","ChatWallpaper","useStreamingMessages","useChatMessages","getTypingText","TypingStatus","ChatList","ChatListAvatar","ChatListCell","ChatListShimmer","CHAT_LIST_ROW_HEIGHT","formatChatListDate","getChatPreview","matchesChatQuery","sortChats","useChatList","toggleReaction","getChatCapabilities","DEFAULT_MESSAGE_ACTION_KEYS","ChatEmpty","UnreadSeparator","LinkPreviewCard","findFirstUrl","countEmojiOnly"],"sources":["../src/index.ts"],"sourcesContent":["import * as utils from './utils'\n\nexport * from './Chat'\nexport * from './Constant'\nexport { utils }\nexport * from './ChatContext'\nexport * from './types'\nexport * from './linkParser'\nexport * from './Reply'\nexport * from './Reactions'\nexport * from './styles'\nexport * from './Theme'\nexport * from './Icons'\nexport * from './i18n'\nexport { isRTLLocale, mirrorPosition } from './rtl'\nexport { Color } from './Color'\nexport { Actions } from './Actions'\nexport { Avatar } from './Avatar'\nexport { Bubble } from './Bubble'\nexport { SystemMessage } from './SystemMessage'\nexport { MessageImage } from './MessageImage'\nexport { MessageText } from './MessageText'\nexport { MessageLocation } from './MessageLocation'\nexport { MessageFile, formatFileSize } from './MessageFile'\nexport { EmojiGrid } from './emoji/EmojiGrid'\nexport type { EmojiGridProps } from './emoji/EmojiGrid'\nexport type { EmojiKeyboardProps, EmojiKeyboardRenderProps } from './emoji/EmojiKeyboard'\nexport { EMOJI_CATEGORY_KEYS, DEFAULT_RECENT_EMOJIS } from './emoji/emojiStore'\nexport type { EmojiCategoryKey } from './emoji/emojiStore'\nexport { AttachmentMenu } from './attachments/AttachmentMenu'\nexport type { AttachmentMenuProps } from './attachments/AttachmentMenu'\nexport { buildAttachmentMessages, getAttachmentTabs } from './attachments/buildMessages'\nexport type {\n AttachmentTab,\n AttachmentsProps,\n AttachmentMenuRenderProps,\n AttachmentPickers,\n AttachmentPickResult,\n PickedAttachment\n} from './attachments/types'\nexport { MediaCard } from './components/MediaCard'\nexport { AttachmentSheet } from './components/AttachmentSheet'\nexport { ContextMenu } from './components/ContextMenu'\nexport { MarkdownMessageText, isMarkdownAvailable } from './components/MarkdownMessageText'\nexport { BasicMarkdown } from './components/BasicMarkdown'\nexport { WaveformPlayer, isWaveformAvailable } from './components/WaveformPlayer'\nexport { VoiceMessageInput, isVoiceRecordingAvailable } from './components/VoiceMessageInput'\nexport { VideoRecordButton, isVideoRecordingAvailable } from './components/VideoRecordButton'\nexport { VideoNoteRecorder } from './components/VideoNoteRecorder'\nexport { isVisionCameraAvailable } from './components/visionCamera'\nexport { Composer } from './Composer'\nexport { Day } from './Day'\nexport { InputToolbar } from './InputToolbar'\nexport { LoadEarlierMessages } from './LoadEarlierMessages'\nexport { Message } from './Message'\nexport { MessagesContainer } from './MessagesContainer'\nexport { Send } from './Send'\nexport { Time } from './Time'\nexport { ChatAvatar } from './ChatAvatar'\nexport { ChatHeader } from './ChatHeader'\nexport type { ChatHeaderProps } from './ChatHeader'\nexport { MessageAudio } from './MessageAudio'\nexport { MessageVideo } from './MessageVideo'\nexport { MessageReply } from './components/MessageReply'\nexport { ReplyPreview } from './components/ReplyPreview'\nexport { StreamingCursor } from './components/StreamingCursor'\nexport { useColorScheme } from './hooks/useColorScheme'\nexport { useTheme, useThemedStyles } from './hooks/useTheme'\nexport { useIcons } from './hooks/useIcons'\nexport { useLabels } from './hooks/useLabels'\nexport { useIsRTL } from './hooks/useIsRTL'\nexport { Icon } from './components/Icon'\nexport { ChatWallpaper } from './components/ChatWallpaper'\nexport type { ChatWallpaperProps } from './components/ChatWallpaper'\nexport { useStreamingMessages } from './hooks/useStreamingMessages'\nexport type {\n UseStreamingMessagesOptions,\n UseStreamingMessagesResult,\n StreamHandle\n} from './hooks/useStreamingMessages'\nexport { useChatMessages } from './hooks/useChatMessages'\nexport { getTypingText, TypingStatus } from './components/TypingStatus'\nexport type { TypingAction, TypingStatusProps } from './components/TypingStatus'\nexport {\n ChatList,\n ChatListAvatar,\n ChatListCell,\n ChatListShimmer,\n CHAT_LIST_ROW_HEIGHT,\n formatChatListDate,\n getChatPreview,\n matchesChatQuery,\n sortChats,\n useChatList\n} from './ChatList'\nexport type {\n ChatListCellProps,\n ChatListItem,\n ChatListItemKind,\n ChatListProps\n} from './ChatList'\nexport type { UseChatMessagesOptions, UseChatMessagesResult } from './hooks/useChatMessages'\nexport { toggleReaction } from './messageUtils'\nexport type { ToggleReactionOptions } from './messageUtils'\nexport { getChatCapabilities } from './optional'\nexport type { ChatCapabilities } from './optional'\nexport { DEFAULT_MESSAGE_ACTION_KEYS } from './components/defaultMessageActions'\nexport { ChatEmpty } from './components/ChatEmpty'\nexport type { ChatEmptyProps } from './components/ChatEmpty'\nexport { UnreadSeparator } from './components/UnreadSeparator'\nexport { LinkPreviewCard, findFirstUrl } from './components/LinkPreviewCard'\nexport type { LinkPreviewProps, FetchLinkPreview } from './components/LinkPreviewCard'\nexport { countEmojiOnly } from './emojiOnly'\n"],"mappings":"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","ignoreList":[]}
@@ -47,8 +47,11 @@ interface LinkParserProps {
47
47
  stripPrefix?: boolean;
48
48
  textStyle?: StyleProp<TextStyle>;
49
49
  TextComponent?: React.ComponentType<any>;
50
+ /** Words to mark in the text, links included (case-insensitive) */
51
+ highlight?: string;
52
+ highlightStyle?: StyleProp<TextStyle>;
50
53
  }
51
- declare function LinkParserComponent({ text, matchers: customMatchers, email, phone, url, hashtag, mention, hashtagUrl, mentionUrl, linkStyle, onPress, stripPrefix, textStyle, TextComponent, }: LinkParserProps): React.ReactElement;
54
+ declare function LinkParserComponent({ text, matchers: customMatchers, email, phone, url, hashtag, mention, hashtagUrl, mentionUrl, linkStyle, onPress, stripPrefix, textStyle, TextComponent, highlight, highlightStyle, }: LinkParserProps): React.ReactElement;
52
55
  export declare const LinkParser: React.MemoExoticComponent<typeof LinkParserComponent>;
53
56
  export {};
54
57
  //# sourceMappingURL=linkParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"linkParser.d.ts","sourceRoot":"","sources":["../src/linkParser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AACtC,OAAO,EAAQ,SAAS,EAAE,SAAS,EAAW,MAAM,cAAc,CAAA;AAElE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAExE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAA;IAC1F,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;CAChD;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACzC;AA2KD,iBAAS,mBAAmB,CAAC,EAC3B,IAAI,EACJ,QAAQ,EAAE,cAAc,EACxB,KAAY,EACZ,KAAY,EACZ,GAAU,EACV,OAAe,EACf,OAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,WAAkB,EAClB,SAAS,EACT,aAAoB,GACrB,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAgHtC;AAMD,eAAO,MAAM,UAAU,uDAAkC,CAAA"}
1
+ {"version":3,"file":"linkParser.d.ts","sourceRoot":"","sources":["../src/linkParser.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AACtC,OAAO,EAAQ,SAAS,EAAE,SAAS,EAAW,MAAM,cAAc,CAAA;AAGlE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAExE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAA;IAC1F,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;CAChD;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACxC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CACtC;AA6KD,iBAAS,mBAAmB,CAAC,EAC3B,IAAI,EACJ,QAAQ,EAAE,cAAc,EACxB,KAAY,EACZ,KAAY,EACZ,GAAU,EACV,OAAe,EACf,OAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,WAAkB,EAClB,SAAS,EACT,aAAoB,EACpB,SAAS,EACT,cAAc,GACf,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CA4HtC;AAMD,eAAO,MAAM,UAAU,uDAAkC,CAAA"}
package/lib/linkParser.js CHANGED
@@ -1,6 +1,11 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
2
  import React, { useMemo } from 'react';
3
3
  import { Text, Linking } from 'react-native';
4
+ import { splitHighlights } from './components/textHighlight';
5
+ const HIGHLIGHT_STYLE = {
6
+ backgroundColor: 'rgba(255, 214, 10, 0.6)',
7
+ color: '#000000'
8
+ };
4
9
  const DEFAULT_MATCHERS = [{
5
10
  type: 'url',
6
11
  // The bare-domain alternative is captured so `notPrecededBy` applies to it
@@ -134,7 +139,7 @@ function removeOverlaps(links) {
134
139
  return filtered;
135
140
  }
136
141
  function LinkParserComponent(t0) {
137
- const $ = _c(35);
142
+ const $ = _c(43);
138
143
  const {
139
144
  text,
140
145
  matchers: customMatchers,
@@ -149,7 +154,9 @@ function LinkParserComponent(t0) {
149
154
  onPress,
150
155
  stripPrefix: t6,
151
156
  textStyle,
152
- TextComponent: t7
157
+ TextComponent: t7,
158
+ highlight,
159
+ highlightStyle
153
160
  } = t0;
154
161
  const email = t1 === undefined ? true : t1;
155
162
  const phone = t2 === undefined ? true : t2;
@@ -159,7 +166,27 @@ function LinkParserComponent(t0) {
159
166
  const stripPrefix = t6 === undefined ? true : t6;
160
167
  const TextComponent = t7 === undefined ? Text : t7;
161
168
  let t8;
162
- if ($[0] !== customMatchers || $[1] !== email || $[2] !== hashtag || $[3] !== hashtagUrl || $[4] !== mention || $[5] !== mentionUrl || $[6] !== phone || $[7] !== text || $[8] !== url) {
169
+ if ($[0] !== TextComponent || $[1] !== highlight || $[2] !== highlightStyle) {
170
+ t8 = (value, key) => {
171
+ if (!highlight) {
172
+ return value;
173
+ }
174
+ const parts = splitHighlights(value, highlight);
175
+ if (parts.length === 1 && !parts[0].isMatch) {
176
+ return value;
177
+ }
178
+ return parts.map((part, index) => part.isMatch ? <TextComponent key={`${key}-${index}`} style={[HIGHLIGHT_STYLE, highlightStyle]}>{part.text}</TextComponent> : part.text);
179
+ };
180
+ $[0] = TextComponent;
181
+ $[1] = highlight;
182
+ $[2] = highlightStyle;
183
+ $[3] = t8;
184
+ } else {
185
+ t8 = $[3];
186
+ }
187
+ const marked = t8;
188
+ let t9;
189
+ if ($[4] !== customMatchers || $[5] !== email || $[6] !== hashtag || $[7] !== hashtagUrl || $[8] !== mention || $[9] !== mentionUrl || $[10] !== phone || $[11] !== text || $[12] !== url) {
163
190
  const activeMatchers = [];
164
191
  if (customMatchers) {
165
192
  activeMatchers.push(...customMatchers);
@@ -179,24 +206,24 @@ function LinkParserComponent(t0) {
179
206
  };
180
207
  if (hashtagUrl) {
181
208
  hashtagMatcher.baseUrl = hashtagUrl;
182
- let t9;
183
- if ($[10] !== hashtagUrl) {
184
- t9 = hashtagUrl.endsWith("/") ? hashtagUrl : `${hashtagUrl}/`;
185
- $[10] = hashtagUrl;
186
- $[11] = t9;
209
+ let t10;
210
+ if ($[14] !== hashtagUrl) {
211
+ t10 = hashtagUrl.endsWith("/") ? hashtagUrl : `${hashtagUrl}/`;
212
+ $[14] = hashtagUrl;
213
+ $[15] = t10;
187
214
  } else {
188
- t9 = $[11];
215
+ t10 = $[15];
189
216
  }
190
- const baseUrl = t9;
191
- let t10;
192
- if ($[12] !== baseUrl) {
193
- t10 = text_0 => `${baseUrl}${text_0.substring(1)}`;
194
- $[12] = baseUrl;
195
- $[13] = t10;
217
+ const baseUrl = t10;
218
+ let t11;
219
+ if ($[16] !== baseUrl) {
220
+ t11 = text_0 => `${baseUrl}${text_0.substring(1)}`;
221
+ $[16] = baseUrl;
222
+ $[17] = t11;
196
223
  } else {
197
- t10 = $[13];
224
+ t11 = $[17];
198
225
  }
199
- hashtagMatcher.getLinkUrl = t10;
226
+ hashtagMatcher.getLinkUrl = t11;
200
227
  }
201
228
  activeMatchers.push(hashtagMatcher);
202
229
  }
@@ -206,72 +233,81 @@ function LinkParserComponent(t0) {
206
233
  };
207
234
  if (mentionUrl) {
208
235
  mentionMatcher.baseUrl = mentionUrl;
209
- let t9;
210
- if ($[14] !== mentionUrl) {
211
- t9 = mentionUrl.endsWith("/") ? mentionUrl : `${mentionUrl}/`;
212
- $[14] = mentionUrl;
213
- $[15] = t9;
236
+ let t10;
237
+ if ($[18] !== mentionUrl) {
238
+ t10 = mentionUrl.endsWith("/") ? mentionUrl : `${mentionUrl}/`;
239
+ $[18] = mentionUrl;
240
+ $[19] = t10;
214
241
  } else {
215
- t9 = $[15];
242
+ t10 = $[19];
216
243
  }
217
- const baseUrl_0 = t9;
218
- let t10;
219
- if ($[16] !== baseUrl_0) {
220
- t10 = text_1 => `${baseUrl_0}${text_1.substring(1)}`;
221
- $[16] = baseUrl_0;
222
- $[17] = t10;
244
+ const baseUrl_0 = t10;
245
+ let t11;
246
+ if ($[20] !== baseUrl_0) {
247
+ t11 = text_1 => `${baseUrl_0}${text_1.substring(1)}`;
248
+ $[20] = baseUrl_0;
249
+ $[21] = t11;
223
250
  } else {
224
- t10 = $[17];
251
+ t11 = $[21];
225
252
  }
226
- mentionMatcher.getLinkUrl = t10;
253
+ mentionMatcher.getLinkUrl = t11;
227
254
  }
228
255
  activeMatchers.push(mentionMatcher);
229
256
  }
230
- t8 = {
257
+ t9 = {
231
258
  activeMatchers,
232
259
  links: removeOverlaps(parseLinks(text, activeMatchers))
233
260
  };
234
- $[0] = customMatchers;
235
- $[1] = email;
236
- $[2] = hashtag;
237
- $[3] = hashtagUrl;
238
- $[4] = mention;
239
- $[5] = mentionUrl;
240
- $[6] = phone;
241
- $[7] = text;
242
- $[8] = url;
243
- $[9] = t8;
261
+ $[4] = customMatchers;
262
+ $[5] = email;
263
+ $[6] = hashtag;
264
+ $[7] = hashtagUrl;
265
+ $[8] = mention;
266
+ $[9] = mentionUrl;
267
+ $[10] = phone;
268
+ $[11] = text;
269
+ $[12] = url;
270
+ $[13] = t9;
244
271
  } else {
245
- t8 = $[9];
272
+ t9 = $[13];
246
273
  }
247
274
  const {
248
275
  links,
249
276
  activeMatchers: activeMatchers_0
250
- } = t8;
277
+ } = t9;
251
278
  if (links.length === 0) {
252
- let t9;
253
- if ($[18] !== TextComponent || $[19] !== text || $[20] !== textStyle) {
254
- t9 = <TextComponent style={textStyle}>{text}</TextComponent>;
255
- $[18] = TextComponent;
256
- $[19] = text;
257
- $[20] = textStyle;
258
- $[21] = t9;
279
+ let t10;
280
+ if ($[22] !== marked || $[23] !== text) {
281
+ t10 = marked(text, "text");
282
+ $[22] = marked;
283
+ $[23] = text;
284
+ $[24] = t10;
259
285
  } else {
260
- t9 = $[21];
286
+ t10 = $[24];
261
287
  }
262
- return t9;
288
+ let t11;
289
+ if ($[25] !== TextComponent || $[26] !== t10 || $[27] !== textStyle) {
290
+ t11 = <TextComponent style={textStyle}>{t10}</TextComponent>;
291
+ $[25] = TextComponent;
292
+ $[26] = t10;
293
+ $[27] = textStyle;
294
+ $[28] = t11;
295
+ } else {
296
+ t11 = $[28];
297
+ }
298
+ return t11;
263
299
  }
264
300
  let elements;
265
- if ($[22] !== TextComponent || $[23] !== activeMatchers_0 || $[24] !== linkStyle || $[25] !== links || $[26] !== onPress || $[27] !== stripPrefix || $[28] !== text || $[29] !== textStyle) {
301
+ if ($[29] !== TextComponent || $[30] !== activeMatchers_0 || $[31] !== linkStyle || $[32] !== links || $[33] !== marked || $[34] !== onPress || $[35] !== stripPrefix || $[36] !== text || $[37] !== textStyle) {
266
302
  elements = [];
267
303
  let lastIndex = 0;
268
- links.forEach((link, index) => {
304
+ links.forEach((link, index_0) => {
269
305
  if (link.index > lastIndex) {
270
- elements.push(<TextComponent key={`text-${index}`} style={textStyle}>{text.substring(lastIndex, link.index)}</TextComponent>);
306
+ elements.push(<TextComponent key={`text-${index_0}`} style={textStyle}>{marked(text.substring(lastIndex, link.index), `text-${index_0}`)}</TextComponent>);
271
307
  }
272
308
  const matcher = activeMatchers_0.find(m_9 => m_9.type === link.type);
273
309
  if (matcher?.renderLink) {
274
- elements.push(matcher.renderLink(link.text, link.url, index, link.type));
310
+ elements.push(matcher.renderLink(link.text, link.url, index_0, link.type));
275
311
  } else {
276
312
  const handlePress = () => {
277
313
  if (matcher?.onPress) {
@@ -288,36 +324,37 @@ function LinkParserComponent(t0) {
288
324
  if (stripPrefix && link.type === "url") {
289
325
  displayText = displayText.replace(/^https?:\/\//i, "");
290
326
  }
291
- elements.push(<TextComponent key={`link-${index}`} style={[linkStyle, matcher?.style]} onPress={handlePress}>{displayText}</TextComponent>);
327
+ elements.push(<TextComponent key={`link-${index_0}`} style={[linkStyle, matcher?.style]} onPress={handlePress}>{marked(displayText, `link-${index_0}`)}</TextComponent>);
292
328
  }
293
329
  lastIndex = link.index + link.length;
294
330
  });
295
331
  if (lastIndex < text.length) {
296
- elements.push(<TextComponent key="text-end" style={textStyle}>{text.substring(lastIndex)}</TextComponent>);
332
+ elements.push(<TextComponent key="text-end" style={textStyle}>{marked(text.substring(lastIndex), "text-end")}</TextComponent>);
297
333
  }
298
- $[22] = TextComponent;
299
- $[23] = activeMatchers_0;
300
- $[24] = linkStyle;
301
- $[25] = links;
302
- $[26] = onPress;
303
- $[27] = stripPrefix;
304
- $[28] = text;
305
- $[29] = textStyle;
306
- $[30] = elements;
334
+ $[29] = TextComponent;
335
+ $[30] = activeMatchers_0;
336
+ $[31] = linkStyle;
337
+ $[32] = links;
338
+ $[33] = marked;
339
+ $[34] = onPress;
340
+ $[35] = stripPrefix;
341
+ $[36] = text;
342
+ $[37] = textStyle;
343
+ $[38] = elements;
307
344
  } else {
308
- elements = $[30];
345
+ elements = $[38];
309
346
  }
310
- let t9;
311
- if ($[31] !== TextComponent || $[32] !== elements || $[33] !== textStyle) {
312
- t9 = <TextComponent style={textStyle}>{elements}</TextComponent>;
313
- $[31] = TextComponent;
314
- $[32] = elements;
315
- $[33] = textStyle;
316
- $[34] = t9;
347
+ let t10;
348
+ if ($[39] !== TextComponent || $[40] !== elements || $[41] !== textStyle) {
349
+ t10 = <TextComponent style={textStyle}>{elements}</TextComponent>;
350
+ $[39] = TextComponent;
351
+ $[40] = elements;
352
+ $[41] = textStyle;
353
+ $[42] = t10;
317
354
  } else {
318
- t9 = $[34];
355
+ t10 = $[42];
319
356
  }
320
- return t9;
357
+ return t10;
321
358
  }
322
359
 
323
360
  // Rendered once per message body, and rebuilding its element list is the second most expensive
@@ -1 +1 @@
1
- {"version":3,"file":"linkParser.js","names":["React","useMemo","Text","Linking","DEFAULT_MATCHERS","type","pattern","notPrecededBy","notPrecededByGroup","getLinkUrl","text","test","cleaned","replace","baseUrl","undefined","globalPatternCache","WeakMap","boundaryPatternCache","globalPattern","compiled","get","flags","includes","RegExp","source","set","lastIndex","boundaryPattern","execMatches","matcher","regex","boundary","matches","match","exec","guarded","index","push","length","parseLinks","matchers","links","forEach","matchText","url","linkText","getLinkText","sort","a","b","removeOverlaps","filtered","link","hasOverlap","some","existing","existingEnd","linkEnd","LinkParserComponent","t0","$","_c","customMatchers","email","t1","phone","t2","t3","hashtag","t4","mention","t5","hashtagUrl","mentionUrl","linkStyle","onPress","stripPrefix","t6","textStyle","TextComponent","t7","t8","activeMatchers","_temp","find","_temp2","_temp3","_temp4","_temp5","_temp6","_temp7","hashtagMatcher","_temp8","t9","endsWith","t10","text_0","substring","_temp9","mentionMatcher","_temp0","baseUrl_0","text_1","activeMatchers_0","elements","m_9","m","renderLink","handlePress","openURL","catch","_temp1","displayText","style","err","console","warn","m_7","m_8","m_5","m_6","m_3","m_4","m_1","m_2","m_0","LinkParser","memo"],"sources":["../src/linkParser.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { Text, TextStyle, StyleProp, Linking } from 'react-native'\n\nexport type LinkType = 'url' | 'email' | 'phone' | 'mention' | 'hashtag'\n\nexport interface ParsedLink {\n type: LinkType\n text: string\n url: string\n index: number\n length: number\n}\n\nexport interface LinkMatcher {\n type: LinkType\n pattern: RegExp\n /**\n * Character class the match must NOT be preceded by. Portable stand-in for a\n * lookbehind assertion `(?<!...)`, which JavaScriptCore on iOS/Safari < 16.4\n * rejects while parsing the file, taking the whole app down with\n * \"SyntaxError: Invalid regular expression: invalid group specifier name\".\n * A rejected match does not end the scan: it resumes one character further\n * along, exactly as a lookbehind would.\n */\n notPrecededBy?: RegExp\n /**\n * Limits `notPrecededBy` to matches in which this capture group took part, so\n * a pattern can guard a single one of its alternatives.\n */\n notPrecededByGroup?: number\n getLinkUrl?: (text: string) => string\n getLinkText?: (text: string) => string\n baseUrl?: string\n style?: StyleProp<TextStyle>\n renderLink?: (text: string, url: string, index: number, type: LinkType) => React.ReactNode\n onPress?: (url: string, type: LinkType) => void\n}\n\ninterface LinkParserProps {\n text: string\n matchers?: LinkMatcher[]\n email?: boolean\n phone?: boolean\n url?: boolean\n hashtag?: boolean\n mention?: boolean\n hashtagUrl?: string\n mentionUrl?: string\n linkStyle?: StyleProp<TextStyle>\n onPress?: (url: string, type: LinkType) => void\n stripPrefix?: boolean\n textStyle?: StyleProp<TextStyle>\n TextComponent?: React.ComponentType<any>\n}\n\nconst DEFAULT_MATCHERS: LinkMatcher[] = [\n {\n type: 'url',\n // The bare-domain alternative is captured so `notPrecededBy` applies to it\n // alone, leaving scheme/www links matchable anywhere.\n pattern: /(?:https?:\\/\\/(?:www\\.)?|www\\.)[^\\s]+|((?![A-Za-z0-9._%+-]*@)[a-zA-Z0-9][a-zA-Z0-9-]*\\.(?!@)[a-zA-Z]{2,}(?![A-Za-z0-9._%+-]*@)(?:\\/[^\\s]*)?)/gi,\n notPrecededBy: /[A-Za-z0-9_.@]/,\n notPrecededByGroup: 1,\n getLinkUrl: (text: string) => {\n if (!/^https?:\\/\\//i.test(text))\n return `http://${text}`\n\n return text\n },\n },\n {\n type: 'email',\n pattern: /([a-zA-Z0-9][a-zA-Z0-9._%+-]*@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})/gi,\n notPrecededBy: /[A-Za-z0-9]/,\n getLinkUrl: (text: string) => `mailto:${text}`,\n },\n {\n type: 'phone',\n pattern: /(?:\\+?\\d{1,3}[\\s.\\-]?)?\\(?\\d{1,4}\\)?[\\s.\\-]?\\d{1,4}[\\s.\\-]?\\d{1,9}(?![A-Za-z0-9_]|\\.[a-z]{2,4})/gi,\n notPrecededBy: /[A-Za-z0-9_]/,\n getLinkUrl: (text: string) => {\n const cleaned = text.replace(/[\\s.()\\-]/g, '')\n return `tel:${cleaned}`\n },\n },\n {\n type: 'hashtag',\n pattern: /#[\\w]+/g,\n getLinkUrl: (text: string) => text,\n baseUrl: undefined,\n },\n {\n type: 'mention',\n pattern: /@[\\w-]+/g,\n notPrecededBy: /[a-zA-Z0-9._%+-]/,\n getLinkUrl: (text: string) => text,\n baseUrl: undefined,\n },\n]\n\n/**\n * Runs `matcher.pattern` over `text`, honouring `matcher.notPrecededBy`.\n *\n * The pattern is cloned so a matcher shared between renders never carries\n * `lastIndex` state around, which is what `String.prototype.matchAll` does too.\n * When the preceding character is rejected the scan restarts at\n * `match.index + 1` rather than after the match, so a start position ruled out\n * here can still be part of a match found one character later - the same\n * behaviour a lookbehind assertion gives.\n */\n// Compiling a RegExp is the expensive half of parsing, and every pattern here is a\n// constant - only `lastIndex` varies per call, and that is reset on checkout. Without\n// this, each message re-compiled the whole matcher set on every render of its text.\n// Keyed on the source RegExp object so custom matchers benefit too, as long as the\n// consumer keeps their pattern stable.\nconst globalPatternCache = new WeakMap<RegExp, RegExp>()\nconst boundaryPatternCache = new WeakMap<RegExp, RegExp>()\n\nfunction globalPattern(pattern: RegExp): RegExp {\n let compiled = globalPatternCache.get(pattern)\n\n if (!compiled) {\n const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`\n compiled = new RegExp(pattern.source, flags)\n globalPatternCache.set(pattern, compiled)\n }\n\n // Reused across calls, so the cursor has to be rewound rather than assumed at 0.\n compiled.lastIndex = 0\n return compiled\n}\n\nfunction boundaryPattern(notPrecededBy: RegExp): RegExp {\n let compiled = boundaryPatternCache.get(notPrecededBy)\n\n if (!compiled) {\n // Dropped `g` here as well: `test` on a global regex advances lastIndex and\n // would skip every other rejection.\n compiled = new RegExp(notPrecededBy.source, notPrecededBy.flags.replace(/[gy]/g, ''))\n boundaryPatternCache.set(notPrecededBy, compiled)\n }\n\n return compiled\n}\n\nfunction execMatches(text: string, matcher: LinkMatcher): RegExpExecArray[] {\n const { pattern, notPrecededBy, notPrecededByGroup } = matcher\n const regex = globalPattern(pattern)\n const boundary = notPrecededBy ? boundaryPattern(notPrecededBy) : undefined\n const matches: RegExpExecArray[] = []\n\n let match: RegExpExecArray | null\n while ((match = regex.exec(text)) !== null) {\n const guarded = notPrecededByGroup === undefined || match[notPrecededByGroup] !== undefined\n\n if (boundary && guarded && match.index > 0 && boundary.test(text[match.index - 1])) {\n regex.lastIndex = match.index + 1\n continue\n }\n\n matches.push(match)\n\n // Zero-length matches would otherwise spin forever.\n if (match[0].length === 0)\n regex.lastIndex += 1\n\n }\n\n return matches\n}\n\nfunction parseLinks(text: string, matchers: LinkMatcher[]): ParsedLink[] {\n const links: ParsedLink[] = []\n\n matchers.forEach(matcher => {\n const matches = execMatches(text, matcher)\n for (const match of matches)\n if (match.index !== undefined) {\n const matchText = match[0]\n const url = matcher.getLinkUrl\n ? matcher.getLinkUrl(matchText)\n : matchText\n const linkText = matcher.getLinkText\n ? matcher.getLinkText(matchText)\n : matchText\n\n links.push({\n type: matcher.type,\n text: linkText,\n url,\n index: match.index,\n length: matchText.length,\n })\n }\n\n })\n\n // Sort by index to maintain order\n return links.sort((a, b) => a.index - b.index)\n}\n\nfunction removeOverlaps(links: ParsedLink[]): ParsedLink[] {\n const filtered: ParsedLink[] = []\n\n for (const link of links) {\n const hasOverlap = filtered.some(existing => {\n const existingEnd = existing.index + existing.length\n const linkEnd = link.index + link.length\n\n return (\n (link.index >= existing.index && link.index < existingEnd) ||\n (linkEnd > existing.index && linkEnd <= existingEnd) ||\n (link.index <= existing.index && linkEnd >= existingEnd)\n )\n })\n\n if (!hasOverlap)\n filtered.push(link)\n\n }\n\n return filtered\n}\n\nfunction LinkParserComponent({\n text,\n matchers: customMatchers,\n email = true,\n phone = true,\n url = true,\n hashtag = false,\n mention = false,\n hashtagUrl,\n mentionUrl,\n linkStyle,\n onPress,\n stripPrefix = true,\n textStyle,\n TextComponent = Text,\n}: LinkParserProps): React.ReactElement {\n // Parsing is the expensive part of rendering a message body - matcher assembly plus a\n // scan per matcher - and it depends only on the text and the matcher configuration.\n // Left in the render body it re-ran on every render of every message.\n const { links, activeMatchers } = useMemo(() => {\n const activeMatchers: LinkMatcher[] = []\n\n // Add custom matchers first (they take precedence)\n if (customMatchers)\n activeMatchers.push(...customMatchers)\n\n\n // Add default matchers based on flags\n if (url && !customMatchers?.some(m => m.type === 'url'))\n activeMatchers.push(DEFAULT_MATCHERS.find(m => m.type === 'url')!)\n\n if (email && !customMatchers?.some(m => m.type === 'email'))\n activeMatchers.push(DEFAULT_MATCHERS.find(m => m.type === 'email')!)\n\n if (phone && !customMatchers?.some(m => m.type === 'phone'))\n activeMatchers.push(DEFAULT_MATCHERS.find(m => m.type === 'phone')!)\n\n if (hashtag && !customMatchers?.some(m => m.type === 'hashtag')) {\n const hashtagMatcher = { ...DEFAULT_MATCHERS.find(m => m.type === 'hashtag')! }\n if (hashtagUrl) {\n hashtagMatcher.baseUrl = hashtagUrl\n const baseUrl = hashtagUrl.endsWith('/') ? hashtagUrl : `${hashtagUrl}/`\n hashtagMatcher.getLinkUrl = (text: string) => `${baseUrl}${text.substring(1)}`\n }\n activeMatchers.push(hashtagMatcher)\n }\n\n if (mention && !customMatchers?.some(m => m.type === 'mention')) {\n const mentionMatcher = { ...DEFAULT_MATCHERS.find(m => m.type === 'mention')! }\n if (mentionUrl) {\n mentionMatcher.baseUrl = mentionUrl\n const baseUrl = mentionUrl.endsWith('/') ? mentionUrl : `${mentionUrl}/`\n mentionMatcher.getLinkUrl = (text: string) => `${baseUrl}${text.substring(1)}`\n }\n activeMatchers.push(mentionMatcher)\n }\n\n\n return { activeMatchers, links: removeOverlaps(parseLinks(text, activeMatchers)) }\n }, [text, customMatchers, url, email, phone, hashtag, mention, hashtagUrl, mentionUrl])\n\n if (links.length === 0)\n return <TextComponent style={textStyle}>{text}</TextComponent>\n\n\n const elements: React.ReactNode[] = []\n let lastIndex = 0\n\n links.forEach((link, index) => {\n // Add text before link\n if (link.index > lastIndex)\n elements.push(\n <TextComponent key={`text-${index}`} style={textStyle}>\n {text.substring(lastIndex, link.index)}\n </TextComponent>\n )\n\n\n // Find the matcher for this link\n const matcher = activeMatchers.find(m => m.type === link.type)\n\n // Handle link rendering\n if (matcher?.renderLink) {\n elements.push(matcher.renderLink(link.text, link.url, index, link.type))\n } else {\n const handlePress = () => {\n if (matcher?.onPress)\n matcher.onPress(link.url, link.type)\n else if (onPress)\n onPress(link.url, link.type)\n else\n // Default behavior\n Linking.openURL(link.url).catch(err => {\n console.warn('Failed to open URL:', err)\n })\n\n }\n\n let displayText = link.text\n if (stripPrefix && link.type === 'url')\n displayText = displayText.replace(/^https?:\\/\\//i, '')\n\n\n elements.push(\n <TextComponent\n key={`link-${index}`}\n style={[linkStyle, matcher?.style]}\n onPress={handlePress}\n >\n {displayText}\n </TextComponent>\n )\n }\n\n lastIndex = link.index + link.length\n })\n\n // Add remaining text\n if (lastIndex < text.length)\n elements.push(\n <TextComponent key='text-end' style={textStyle}>\n {text.substring(lastIndex)}\n </TextComponent>\n )\n\n\n return <TextComponent style={textStyle}>{elements}</TextComponent>\n}\n\n// Rendered once per message body, and rebuilding its element list is the second most expensive\n// thing a message row does after the row itself. The parse is already memoised, but the component\n// still re-ran whenever its parent did - which, in a list, is on every commit that touches the\n// row. Memoising the component lets an unchanged body skip the work entirely.\nexport const LinkParser = React.memo(LinkParserComponent)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"linkParser.js","names":["React","useMemo","Text","Linking","splitHighlights","HIGHLIGHT_STYLE","backgroundColor","color","DEFAULT_MATCHERS","type","pattern","notPrecededBy","notPrecededByGroup","getLinkUrl","text","test","cleaned","replace","baseUrl","undefined","globalPatternCache","WeakMap","boundaryPatternCache","globalPattern","compiled","get","flags","includes","RegExp","source","set","lastIndex","boundaryPattern","execMatches","matcher","regex","boundary","matches","match","exec","guarded","index","push","length","parseLinks","matchers","links","forEach","matchText","url","linkText","getLinkText","sort","a","b","removeOverlaps","filtered","link","hasOverlap","some","existing","existingEnd","linkEnd","LinkParserComponent","t0","$","_c","customMatchers","email","t1","phone","t2","t3","hashtag","t4","mention","t5","hashtagUrl","mentionUrl","linkStyle","onPress","stripPrefix","t6","textStyle","TextComponent","t7","highlight","highlightStyle","t8","value","key","parts","isMatch","map","part","marked","t9","activeMatchers","_temp","find","_temp2","_temp3","_temp4","_temp5","_temp6","_temp7","hashtagMatcher","_temp8","t10","endsWith","t11","text_0","substring","_temp9","mentionMatcher","_temp0","baseUrl_0","text_1","activeMatchers_0","elements","index_0","m_9","m","renderLink","handlePress","openURL","catch","_temp1","displayText","style","err","console","warn","m_7","m_8","m_5","m_6","m_3","m_4","m_1","m_2","m_0","LinkParser","memo"],"sources":["../src/linkParser.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { Text, TextStyle, StyleProp, Linking } from 'react-native'\nimport { splitHighlights } from './components/textHighlight'\n\nexport type LinkType = 'url' | 'email' | 'phone' | 'mention' | 'hashtag'\n\nexport interface ParsedLink {\n type: LinkType\n text: string\n url: string\n index: number\n length: number\n}\n\nexport interface LinkMatcher {\n type: LinkType\n pattern: RegExp\n /**\n * Character class the match must NOT be preceded by. Portable stand-in for a\n * lookbehind assertion `(?<!...)`, which JavaScriptCore on iOS/Safari < 16.4\n * rejects while parsing the file, taking the whole app down with\n * \"SyntaxError: Invalid regular expression: invalid group specifier name\".\n * A rejected match does not end the scan: it resumes one character further\n * along, exactly as a lookbehind would.\n */\n notPrecededBy?: RegExp\n /**\n * Limits `notPrecededBy` to matches in which this capture group took part, so\n * a pattern can guard a single one of its alternatives.\n */\n notPrecededByGroup?: number\n getLinkUrl?: (text: string) => string\n getLinkText?: (text: string) => string\n baseUrl?: string\n style?: StyleProp<TextStyle>\n renderLink?: (text: string, url: string, index: number, type: LinkType) => React.ReactNode\n onPress?: (url: string, type: LinkType) => void\n}\n\ninterface LinkParserProps {\n text: string\n matchers?: LinkMatcher[]\n email?: boolean\n phone?: boolean\n url?: boolean\n hashtag?: boolean\n mention?: boolean\n hashtagUrl?: string\n mentionUrl?: string\n linkStyle?: StyleProp<TextStyle>\n onPress?: (url: string, type: LinkType) => void\n stripPrefix?: boolean\n textStyle?: StyleProp<TextStyle>\n TextComponent?: React.ComponentType<any>\n /** Words to mark in the text, links included (case-insensitive) */\n highlight?: string\n highlightStyle?: StyleProp<TextStyle>\n}\n\nconst HIGHLIGHT_STYLE: TextStyle = { backgroundColor: 'rgba(255, 214, 10, 0.6)', color: '#000000' }\n\nconst DEFAULT_MATCHERS: LinkMatcher[] = [\n {\n type: 'url',\n // The bare-domain alternative is captured so `notPrecededBy` applies to it\n // alone, leaving scheme/www links matchable anywhere.\n pattern: /(?:https?:\\/\\/(?:www\\.)?|www\\.)[^\\s]+|((?![A-Za-z0-9._%+-]*@)[a-zA-Z0-9][a-zA-Z0-9-]*\\.(?!@)[a-zA-Z]{2,}(?![A-Za-z0-9._%+-]*@)(?:\\/[^\\s]*)?)/gi,\n notPrecededBy: /[A-Za-z0-9_.@]/,\n notPrecededByGroup: 1,\n getLinkUrl: (text: string) => {\n if (!/^https?:\\/\\//i.test(text))\n return `http://${text}`\n\n return text\n },\n },\n {\n type: 'email',\n pattern: /([a-zA-Z0-9][a-zA-Z0-9._%+-]*@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})/gi,\n notPrecededBy: /[A-Za-z0-9]/,\n getLinkUrl: (text: string) => `mailto:${text}`,\n },\n {\n type: 'phone',\n pattern: /(?:\\+?\\d{1,3}[\\s.\\-]?)?\\(?\\d{1,4}\\)?[\\s.\\-]?\\d{1,4}[\\s.\\-]?\\d{1,9}(?![A-Za-z0-9_]|\\.[a-z]{2,4})/gi,\n notPrecededBy: /[A-Za-z0-9_]/,\n getLinkUrl: (text: string) => {\n const cleaned = text.replace(/[\\s.()\\-]/g, '')\n return `tel:${cleaned}`\n },\n },\n {\n type: 'hashtag',\n pattern: /#[\\w]+/g,\n getLinkUrl: (text: string) => text,\n baseUrl: undefined,\n },\n {\n type: 'mention',\n pattern: /@[\\w-]+/g,\n notPrecededBy: /[a-zA-Z0-9._%+-]/,\n getLinkUrl: (text: string) => text,\n baseUrl: undefined,\n },\n]\n\n/**\n * Runs `matcher.pattern` over `text`, honouring `matcher.notPrecededBy`.\n *\n * The pattern is cloned so a matcher shared between renders never carries\n * `lastIndex` state around, which is what `String.prototype.matchAll` does too.\n * When the preceding character is rejected the scan restarts at\n * `match.index + 1` rather than after the match, so a start position ruled out\n * here can still be part of a match found one character later - the same\n * behaviour a lookbehind assertion gives.\n */\n// Compiling a RegExp is the expensive half of parsing, and every pattern here is a\n// constant - only `lastIndex` varies per call, and that is reset on checkout. Without\n// this, each message re-compiled the whole matcher set on every render of its text.\n// Keyed on the source RegExp object so custom matchers benefit too, as long as the\n// consumer keeps their pattern stable.\nconst globalPatternCache = new WeakMap<RegExp, RegExp>()\nconst boundaryPatternCache = new WeakMap<RegExp, RegExp>()\n\nfunction globalPattern(pattern: RegExp): RegExp {\n let compiled = globalPatternCache.get(pattern)\n\n if (!compiled) {\n const flags = pattern.flags.includes('g') ? pattern.flags : `${pattern.flags}g`\n compiled = new RegExp(pattern.source, flags)\n globalPatternCache.set(pattern, compiled)\n }\n\n // Reused across calls, so the cursor has to be rewound rather than assumed at 0.\n compiled.lastIndex = 0\n return compiled\n}\n\nfunction boundaryPattern(notPrecededBy: RegExp): RegExp {\n let compiled = boundaryPatternCache.get(notPrecededBy)\n\n if (!compiled) {\n // Dropped `g` here as well: `test` on a global regex advances lastIndex and\n // would skip every other rejection.\n compiled = new RegExp(notPrecededBy.source, notPrecededBy.flags.replace(/[gy]/g, ''))\n boundaryPatternCache.set(notPrecededBy, compiled)\n }\n\n return compiled\n}\n\nfunction execMatches(text: string, matcher: LinkMatcher): RegExpExecArray[] {\n const { pattern, notPrecededBy, notPrecededByGroup } = matcher\n const regex = globalPattern(pattern)\n const boundary = notPrecededBy ? boundaryPattern(notPrecededBy) : undefined\n const matches: RegExpExecArray[] = []\n\n let match: RegExpExecArray | null\n while ((match = regex.exec(text)) !== null) {\n const guarded = notPrecededByGroup === undefined || match[notPrecededByGroup] !== undefined\n\n if (boundary && guarded && match.index > 0 && boundary.test(text[match.index - 1])) {\n regex.lastIndex = match.index + 1\n continue\n }\n\n matches.push(match)\n\n // Zero-length matches would otherwise spin forever.\n if (match[0].length === 0)\n regex.lastIndex += 1\n\n }\n\n return matches\n}\n\nfunction parseLinks(text: string, matchers: LinkMatcher[]): ParsedLink[] {\n const links: ParsedLink[] = []\n\n matchers.forEach(matcher => {\n const matches = execMatches(text, matcher)\n for (const match of matches)\n if (match.index !== undefined) {\n const matchText = match[0]\n const url = matcher.getLinkUrl\n ? matcher.getLinkUrl(matchText)\n : matchText\n const linkText = matcher.getLinkText\n ? matcher.getLinkText(matchText)\n : matchText\n\n links.push({\n type: matcher.type,\n text: linkText,\n url,\n index: match.index,\n length: matchText.length,\n })\n }\n\n })\n\n // Sort by index to maintain order\n return links.sort((a, b) => a.index - b.index)\n}\n\nfunction removeOverlaps(links: ParsedLink[]): ParsedLink[] {\n const filtered: ParsedLink[] = []\n\n for (const link of links) {\n const hasOverlap = filtered.some(existing => {\n const existingEnd = existing.index + existing.length\n const linkEnd = link.index + link.length\n\n return (\n (link.index >= existing.index && link.index < existingEnd) ||\n (linkEnd > existing.index && linkEnd <= existingEnd) ||\n (link.index <= existing.index && linkEnd >= existingEnd)\n )\n })\n\n if (!hasOverlap)\n filtered.push(link)\n\n }\n\n return filtered\n}\n\nfunction LinkParserComponent({\n text,\n matchers: customMatchers,\n email = true,\n phone = true,\n url = true,\n hashtag = false,\n mention = false,\n hashtagUrl,\n mentionUrl,\n linkStyle,\n onPress,\n stripPrefix = true,\n textStyle,\n TextComponent = Text,\n highlight,\n highlightStyle,\n}: LinkParserProps): React.ReactElement {\n // A piece of text with the highlighted words wrapped in a marked span.\n const marked = (value: string, key: string) => {\n if (!highlight)\n return value\n const parts = splitHighlights(value, highlight)\n if (parts.length === 1 && !parts[0].isMatch)\n return value\n return parts.map((part, index) => part.isMatch\n ? <TextComponent key={`${key}-${index}`} style={[HIGHLIGHT_STYLE, highlightStyle]}>{part.text}</TextComponent>\n : part.text)\n }\n\n // Parsing is the expensive part of rendering a message body - matcher assembly plus a\n // scan per matcher - and it depends only on the text and the matcher configuration.\n // Left in the render body it re-ran on every render of every message.\n const { links, activeMatchers } = useMemo(() => {\n const activeMatchers: LinkMatcher[] = []\n\n // Add custom matchers first (they take precedence)\n if (customMatchers)\n activeMatchers.push(...customMatchers)\n\n\n // Add default matchers based on flags\n if (url && !customMatchers?.some(m => m.type === 'url'))\n activeMatchers.push(DEFAULT_MATCHERS.find(m => m.type === 'url')!)\n\n if (email && !customMatchers?.some(m => m.type === 'email'))\n activeMatchers.push(DEFAULT_MATCHERS.find(m => m.type === 'email')!)\n\n if (phone && !customMatchers?.some(m => m.type === 'phone'))\n activeMatchers.push(DEFAULT_MATCHERS.find(m => m.type === 'phone')!)\n\n if (hashtag && !customMatchers?.some(m => m.type === 'hashtag')) {\n const hashtagMatcher = { ...DEFAULT_MATCHERS.find(m => m.type === 'hashtag')! }\n if (hashtagUrl) {\n hashtagMatcher.baseUrl = hashtagUrl\n const baseUrl = hashtagUrl.endsWith('/') ? hashtagUrl : `${hashtagUrl}/`\n hashtagMatcher.getLinkUrl = (text: string) => `${baseUrl}${text.substring(1)}`\n }\n activeMatchers.push(hashtagMatcher)\n }\n\n if (mention && !customMatchers?.some(m => m.type === 'mention')) {\n const mentionMatcher = { ...DEFAULT_MATCHERS.find(m => m.type === 'mention')! }\n if (mentionUrl) {\n mentionMatcher.baseUrl = mentionUrl\n const baseUrl = mentionUrl.endsWith('/') ? mentionUrl : `${mentionUrl}/`\n mentionMatcher.getLinkUrl = (text: string) => `${baseUrl}${text.substring(1)}`\n }\n activeMatchers.push(mentionMatcher)\n }\n\n\n return { activeMatchers, links: removeOverlaps(parseLinks(text, activeMatchers)) }\n }, [text, customMatchers, url, email, phone, hashtag, mention, hashtagUrl, mentionUrl])\n\n if (links.length === 0)\n return <TextComponent style={textStyle}>{marked(text, 'text')}</TextComponent>\n\n\n const elements: React.ReactNode[] = []\n let lastIndex = 0\n\n links.forEach((link, index) => {\n // Add text before link\n if (link.index > lastIndex)\n elements.push(\n <TextComponent key={`text-${index}`} style={textStyle}>\n {marked(text.substring(lastIndex, link.index), `text-${index}`)}\n </TextComponent>\n )\n\n\n // Find the matcher for this link\n const matcher = activeMatchers.find(m => m.type === link.type)\n\n // Handle link rendering\n if (matcher?.renderLink) {\n elements.push(matcher.renderLink(link.text, link.url, index, link.type))\n } else {\n const handlePress = () => {\n if (matcher?.onPress)\n matcher.onPress(link.url, link.type)\n else if (onPress)\n onPress(link.url, link.type)\n else\n // Default behavior\n Linking.openURL(link.url).catch(err => {\n console.warn('Failed to open URL:', err)\n })\n\n }\n\n let displayText = link.text\n if (stripPrefix && link.type === 'url')\n displayText = displayText.replace(/^https?:\\/\\//i, '')\n\n\n elements.push(\n <TextComponent\n key={`link-${index}`}\n style={[linkStyle, matcher?.style]}\n onPress={handlePress}\n >\n {marked(displayText, `link-${index}`)}\n </TextComponent>\n )\n }\n\n lastIndex = link.index + link.length\n })\n\n // Add remaining text\n if (lastIndex < text.length)\n elements.push(\n <TextComponent key='text-end' style={textStyle}>\n {marked(text.substring(lastIndex), 'text-end')}\n </TextComponent>\n )\n\n\n return <TextComponent style={textStyle}>{elements}</TextComponent>\n}\n\n// Rendered once per message body, and rebuilding its element list is the second most expensive\n// thing a message row does after the row itself. The parse is already memoised, but the component\n// still re-ran whenever its parent did - which, in a list, is on every commit that touches the\n// row. Memoising the component lets an unchanged body skip the work entirely.\nexport const LinkParser = React.memo(LinkParserComponent)\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../src/locales/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,OAAO,CAAC,UAAU,CA+GlC,CAAA"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../src/locales/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,OAAO,CAAC,UAAU,CAgHlC,CAAA"}
package/lib/locales/ar.js CHANGED
@@ -40,6 +40,7 @@ export const ar = {
40
40
  actionEdit: 'تعديل',
41
41
  actionForward: 'إعادة توجيه',
42
42
  actionDelete: 'حذف',
43
+ actionRetry: 'إعادة المحاولة',
43
44
  emojiSearch: 'البحث عن رمز تعبيري',
44
45
  emojiRecent: 'المستخدمة مؤخرًا',
45
46
  emojiSmileys: 'الوجوه والأشخاص',
@@ -1 +1 @@
1
- {"version":3,"file":"ar.js","names":["ar","placeholder","send","cancel","loadEarlier","today","video","voiceMessage","videoMessage","location","openLocationAccessibility","slideToCancel","replyingTo","editing","edited","cameraPermission","noCamera","stopAndSend","tapToRecord","releaseToSend","holdToRecord","slideUpToLock","holdToRecordAudioSwitch","holdToRecordVideoSwitch","holdToRecordAudioOnly","holdToRecordVideoOnly","pauseToTrimOrReplay","trimRecordingTitle","trimRecordingText","ok","viewOnceHint","viewOnceVoiceEnabledHint","viewOnceVideoEnabledHint","activateViewOnce","deactivateViewOnce","actionReply","actionCopy","actionPin","actionUnpin","actionEdit","actionForward","actionDelete","emojiSearch","emojiRecent","emojiSmileys","emojiAnimals","emojiFood","emojiActivities","emojiTravel","emojiObjects","emojiSymbols","emojiFlags","emojiNoResults","emojiButton","keyboardButton","backspace","attachButton","attachGallery","attachFile","attachLocation","attachCamera","attachCaption","attachSendLocation","attachLocating","attachLocationAccuracy","attachPhotosAccess","attachNoPhotos","attachChooseFromGallery","attachChooseFile","attachLocationDenied","emptyChatTitle","emptyChatText","unreadMessages","mediaViewerCounter","mediaViewerDate","actionSelect","cancelSelection","chatListTitle","chatListSearch","chatListArchived","chatListArchive","chatListUnarchive","chatListMute","chatListUnmute","chatListNewChat","chatListBack","chatListEmpty","chatListNoResults","chatListDraft","chatListYou","chatListPhoto","chatListFile","chatListDeleteTitle","chatListDeleteManyTitle","chatListDeleteMessage","typingStatus","typingStatusName","typingStatusTwo","typingStatusMany","typingRecordingVoice","typingRecordingVoiceName","typingRecordingVideo","typingRecordingVideoName","typingSendingPhoto","typingSendingPhotoName","typingSendingVideo","typingSendingVideoName","typingSendingFile","typingSendingFileName","typingChoosingSticker","typingChoosingStickerName"],"sources":["../../src/locales/ar.ts"],"sourcesContent":["import type { ChatLabels } from '../i18n'\n\nexport const ar: Partial<ChatLabels> = {\n placeholder: 'اكتب رسالة...',\n send: 'إرسال',\n cancel: 'إلغاء',\n loadEarlier: 'تحميل الرسائل السابقة',\n today: 'اليوم',\n video: 'فيديو',\n voiceMessage: 'رسالة صوتية',\n videoMessage: 'رسالة فيديو',\n location: 'الموقع',\n openLocationAccessibility: 'فتح الموقع في الخرائط',\n slideToCancel: 'اسحب لليمين للإلغاء...',\n replyingTo: 'الرد على {name}',\n editing: 'تعديل',\n edited: 'معدلة',\n cameraPermission: 'مطلوب إذن الكاميرا',\n noCamera: 'لا توجد كاميرا متاحة',\n stopAndSend: 'اضغط للإيقاف والإرسال',\n tapToRecord: 'اضغط للتسجيل',\n releaseToSend: 'اترك للإرسال، اسحب للأعلى للقفل',\n holdToRecord: 'اضغط مطولاً للتسجيل',\n slideUpToLock: 'اسحب لأعلى لقفل التسجيل',\n holdToRecordAudioSwitch: 'اضغط مطولًا لتسجيل صوت. انقر للتبديل إلى الفيديو.',\n holdToRecordVideoSwitch: 'اضغط مطولًا لتسجيل فيديو. انقر للتبديل إلى الصوت.',\n holdToRecordAudioOnly: 'اضغط مطولًا لتسجيل صوت.',\n holdToRecordVideoOnly: 'اضغط مطولًا لتسجيل فيديو.',\n pauseToTrimOrReplay: 'أوقف مؤقتًا للقص أو الإعادة',\n trimRecordingTitle: 'القص إلى النطاق المحدد؟',\n trimRecordingText: 'سيتم حذف الصوت خارج هذا النطاق، وسيبدأ التسجيل فورًا.',\n ok: 'موافق',\n viewOnceHint: 'اضغط لتعيين هذه الرسالة على **التشغيل مرة واحدة**.',\n viewOnceVoiceEnabledHint: 'سيتمكن المستلم من الاستماع إليها مرة واحدة فقط.',\n viewOnceVideoEnabledHint: 'سيتمكن المستلم من تشغيلها مرة واحدة فقط.',\n activateViewOnce: 'تفعيل التشغيل مرة واحدة',\n deactivateViewOnce: 'إلغاء التشغيل مرة واحدة',\n actionReply: 'رد',\n actionCopy: 'نسخ',\n actionPin: 'تثبيت',\n actionUnpin: 'إلغاء التثبيت',\n actionEdit: 'تعديل',\n actionForward: 'إعادة توجيه',\n actionDelete: 'حذف',\n emojiSearch: 'البحث عن رمز تعبيري',\n emojiRecent: 'المستخدمة مؤخرًا',\n emojiSmileys: 'الوجوه والأشخاص',\n emojiAnimals: 'الحيوانات والطبيعة',\n emojiFood: 'الطعام والشراب',\n emojiActivities: 'الأنشطة',\n emojiTravel: 'السفر والأماكن',\n emojiObjects: 'الأشياء',\n emojiSymbols: 'الرموز',\n emojiFlags: 'الأعلام',\n emojiNoResults: 'لم يتم العثور على رموز تعبيرية',\n emojiButton: 'رموز تعبيرية',\n keyboardButton: 'لوحة المفاتيح',\n backspace: 'حذف',\n attachButton: 'إرفاق',\n attachGallery: 'المعرض',\n attachFile: 'ملف',\n attachLocation: 'الموقع',\n attachCamera: 'الكاميرا',\n attachCaption: 'أضف تعليقًا...',\n attachSendLocation: 'إرسال موقعي الحالي',\n attachLocating: 'جارٍ تحديد الموقع...',\n attachLocationAccuracy: 'بدقة {meters} م',\n attachPhotosAccess: 'اسمح بالوصول إلى صورك لإرسالها',\n attachNoPhotos: 'لا توجد صور بعد',\n attachChooseFromGallery: 'اختيار من المعرض',\n attachChooseFile: 'اختيار ملف',\n attachLocationDenied: 'الوصول إلى الموقع متوقف. فعّله من الإعدادات لإرسال موقعك.',\n emptyChatTitle: 'لا توجد رسائل هنا بعد...',\n emptyChatText: 'أرسل رسالة أو انقر على التحية أدناه.',\n unreadMessages: 'رسائل غير مقروءة',\n mediaViewerCounter: '{index} من {count}',\n mediaViewerDate: '{date} في {time}',\n actionSelect: 'تحديد',\n cancelSelection: 'إلغاء التحديد',\n chatListTitle: 'الدردشات',\n chatListSearch: 'بحث',\n chatListArchived: 'الدردشات المؤرشفة',\n chatListArchive: 'أرشفة',\n chatListUnarchive: 'إلغاء الأرشفة',\n chatListMute: 'كتم',\n chatListUnmute: 'إلغاء الكتم',\n chatListNewChat: 'رسالة جديدة',\n chatListBack: 'رجوع',\n chatListEmpty: 'لا توجد دردشات هنا بعد',\n chatListNoResults: 'لم يتم العثور على دردشات',\n chatListDraft: 'مسودة:',\n chatListYou: 'أنت',\n chatListPhoto: 'صورة',\n chatListFile: 'ملف',\n chatListDeleteTitle: 'حذف الدردشة',\n chatListDeleteManyTitle: 'حذف الدردشات ({count})',\n chatListDeleteMessage: 'هل أنت متأكد من أنك تريد حذف الدردشات المحددة؟',\n typingStatus: 'يكتب',\n typingStatusName: '{name} يكتب',\n typingStatusTwo: '{name} و{other} يكتبان',\n typingStatusMany: '{name} و{count} آخرون يكتبون',\n typingRecordingVoice: 'يسجّل رسالة صوتية',\n typingRecordingVoiceName: '{name} يسجّل رسالة صوتية',\n typingRecordingVideo: 'يسجّل رسالة فيديو',\n typingRecordingVideoName: '{name} يسجّل رسالة فيديو',\n typingSendingPhoto: 'يرسل صورة',\n typingSendingPhotoName: '{name} يرسل صورة',\n typingSendingVideo: 'يرسل فيديو',\n typingSendingVideoName: '{name} يرسل فيديو',\n typingSendingFile: 'يرسل ملفًا',\n typingSendingFileName: '{name} يرسل ملفًا',\n typingChoosingSticker: 'يختار ملصقًا',\n typingChoosingStickerName: '{name} يختار ملصقًا',\n}\n"],"mappings":"AAEA,OAAO,MAAMA,EAAuB,GAAG;EACrCC,WAAW,EAAE,eAAe;EAC5BC,IAAI,EAAE,OAAO;EACbC,MAAM,EAAE,OAAO;EACfC,WAAW,EAAE,uBAAuB;EACpCC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE,OAAO;EACdC,YAAY,EAAE,aAAa;EAC3BC,YAAY,EAAE,aAAa;EAC3BC,QAAQ,EAAE,QAAQ;EAClBC,yBAAyB,EAAE,uBAAuB;EAClDC,aAAa,EAAE,wBAAwB;EACvCC,UAAU,EAAE,iBAAiB;EAC7BC,OAAO,EAAE,OAAO;EAChBC,MAAM,EAAE,OAAO;EACfC,gBAAgB,EAAE,oBAAoB;EACtCC,QAAQ,EAAE,sBAAsB;EAChCC,WAAW,EAAE,uBAAuB;EACpCC,WAAW,EAAE,cAAc;EAC3BC,aAAa,EAAE,iCAAiC;EAChDC,YAAY,EAAE,qBAAqB;EACnCC,aAAa,EAAE,yBAAyB;EACxCC,uBAAuB,EAAE,mDAAmD;EAC5EC,uBAAuB,EAAE,mDAAmD;EAC5EC,qBAAqB,EAAE,yBAAyB;EAChDC,qBAAqB,EAAE,2BAA2B;EAClDC,mBAAmB,EAAE,6BAA6B;EAClDC,kBAAkB,EAAE,yBAAyB;EAC7CC,iBAAiB,EAAE,uDAAuD;EAC1EC,EAAE,EAAE,OAAO;EACXC,YAAY,EAAE,oDAAoD;EAClEC,wBAAwB,EAAE,iDAAiD;EAC3EC,wBAAwB,EAAE,0CAA0C;EACpEC,gBAAgB,EAAE,yBAAyB;EAC3CC,kBAAkB,EAAE,yBAAyB;EAC7CC,WAAW,EAAE,IAAI;EACjBC,UAAU,EAAE,KAAK;EACjBC,SAAS,EAAE,OAAO;EAClBC,WAAW,EAAE,eAAe;EAC5BC,UAAU,EAAE,OAAO;EACnBC,aAAa,EAAE,aAAa;EAC5BC,YAAY,EAAE,KAAK;EACnBC,WAAW,EAAE,qBAAqB;EAClCC,WAAW,EAAE,kBAAkB;EAC/BC,YAAY,EAAE,iBAAiB;EAC/BC,YAAY,EAAE,oBAAoB;EAClCC,SAAS,EAAE,gBAAgB;EAC3BC,eAAe,EAAE,SAAS;EAC1BC,WAAW,EAAE,gBAAgB;EAC7BC,YAAY,EAAE,SAAS;EACvBC,YAAY,EAAE,QAAQ;EACtBC,UAAU,EAAE,SAAS;EACrBC,cAAc,EAAE,gCAAgC;EAChDC,WAAW,EAAE,cAAc;EAC3BC,cAAc,EAAE,eAAe;EAC/BC,SAAS,EAAE,KAAK;EAChBC,YAAY,EAAE,OAAO;EACrBC,aAAa,EAAE,QAAQ;EACvBC,UAAU,EAAE,KAAK;EACjBC,cAAc,EAAE,QAAQ;EACxBC,YAAY,EAAE,UAAU;EACxBC,aAAa,EAAE,gBAAgB;EAC/BC,kBAAkB,EAAE,oBAAoB;EACxCC,cAAc,EAAE,sBAAsB;EACtCC,sBAAsB,EAAE,iBAAiB;EACzCC,kBAAkB,EAAE,gCAAgC;EACpDC,cAAc,EAAE,iBAAiB;EACjCC,uBAAuB,EAAE,kBAAkB;EAC3CC,gBAAgB,EAAE,YAAY;EAC9BC,oBAAoB,EAAE,2DAA2D;EACjFC,cAAc,EAAE,0BAA0B;EAC1CC,aAAa,EAAE,sCAAsC;EACrDC,cAAc,EAAE,kBAAkB;EAClCC,kBAAkB,EAAE,oBAAoB;EACxCC,eAAe,EAAE,kBAAkB;EACnCC,YAAY,EAAE,OAAO;EACrBC,eAAe,EAAE,eAAe;EAChCC,aAAa,EAAE,UAAU;EACzBC,cAAc,EAAE,KAAK;EACrBC,gBAAgB,EAAE,mBAAmB;EACrCC,eAAe,EAAE,OAAO;EACxBC,iBAAiB,EAAE,eAAe;EAClCC,YAAY,EAAE,KAAK;EACnBC,cAAc,EAAE,aAAa;EAC7BC,eAAe,EAAE,aAAa;EAC9BC,YAAY,EAAE,MAAM;EACpBC,aAAa,EAAE,wBAAwB;EACvCC,iBAAiB,EAAE,0BAA0B;EAC7CC,aAAa,EAAE,QAAQ;EACvBC,WAAW,EAAE,KAAK;EAClBC,aAAa,EAAE,MAAM;EACrBC,YAAY,EAAE,KAAK;EACnBC,mBAAmB,EAAE,aAAa;EAClCC,uBAAuB,EAAE,wBAAwB;EACjDC,qBAAqB,EAAE,gDAAgD;EACvEC,YAAY,EAAE,MAAM;EACpBC,gBAAgB,EAAE,aAAa;EAC/BC,eAAe,EAAE,wBAAwB;EACzCC,gBAAgB,EAAE,8BAA8B;EAChDC,oBAAoB,EAAE,mBAAmB;EACzCC,wBAAwB,EAAE,0BAA0B;EACpDC,oBAAoB,EAAE,mBAAmB;EACzCC,wBAAwB,EAAE,0BAA0B;EACpDC,kBAAkB,EAAE,WAAW;EAC/BC,sBAAsB,EAAE,kBAAkB;EAC1CC,kBAAkB,EAAE,YAAY;EAChCC,sBAAsB,EAAE,mBAAmB;EAC3CC,iBAAiB,EAAE,YAAY;EAC/BC,qBAAqB,EAAE,mBAAmB;EAC1CC,qBAAqB,EAAE,cAAc;EACrCC,yBAAyB,EAAE;AAC7B,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ar.js","names":["ar","placeholder","send","cancel","loadEarlier","today","video","voiceMessage","videoMessage","location","openLocationAccessibility","slideToCancel","replyingTo","editing","edited","cameraPermission","noCamera","stopAndSend","tapToRecord","releaseToSend","holdToRecord","slideUpToLock","holdToRecordAudioSwitch","holdToRecordVideoSwitch","holdToRecordAudioOnly","holdToRecordVideoOnly","pauseToTrimOrReplay","trimRecordingTitle","trimRecordingText","ok","viewOnceHint","viewOnceVoiceEnabledHint","viewOnceVideoEnabledHint","activateViewOnce","deactivateViewOnce","actionReply","actionCopy","actionPin","actionUnpin","actionEdit","actionForward","actionDelete","actionRetry","emojiSearch","emojiRecent","emojiSmileys","emojiAnimals","emojiFood","emojiActivities","emojiTravel","emojiObjects","emojiSymbols","emojiFlags","emojiNoResults","emojiButton","keyboardButton","backspace","attachButton","attachGallery","attachFile","attachLocation","attachCamera","attachCaption","attachSendLocation","attachLocating","attachLocationAccuracy","attachPhotosAccess","attachNoPhotos","attachChooseFromGallery","attachChooseFile","attachLocationDenied","emptyChatTitle","emptyChatText","unreadMessages","mediaViewerCounter","mediaViewerDate","actionSelect","cancelSelection","chatListTitle","chatListSearch","chatListArchived","chatListArchive","chatListUnarchive","chatListMute","chatListUnmute","chatListNewChat","chatListBack","chatListEmpty","chatListNoResults","chatListDraft","chatListYou","chatListPhoto","chatListFile","chatListDeleteTitle","chatListDeleteManyTitle","chatListDeleteMessage","typingStatus","typingStatusName","typingStatusTwo","typingStatusMany","typingRecordingVoice","typingRecordingVoiceName","typingRecordingVideo","typingRecordingVideoName","typingSendingPhoto","typingSendingPhotoName","typingSendingVideo","typingSendingVideoName","typingSendingFile","typingSendingFileName","typingChoosingSticker","typingChoosingStickerName"],"sources":["../../src/locales/ar.ts"],"sourcesContent":["import type { ChatLabels } from '../i18n'\n\nexport const ar: Partial<ChatLabels> = {\n placeholder: 'اكتب رسالة...',\n send: 'إرسال',\n cancel: 'إلغاء',\n loadEarlier: 'تحميل الرسائل السابقة',\n today: 'اليوم',\n video: 'فيديو',\n voiceMessage: 'رسالة صوتية',\n videoMessage: 'رسالة فيديو',\n location: 'الموقع',\n openLocationAccessibility: 'فتح الموقع في الخرائط',\n slideToCancel: 'اسحب لليمين للإلغاء...',\n replyingTo: 'الرد على {name}',\n editing: 'تعديل',\n edited: 'معدلة',\n cameraPermission: 'مطلوب إذن الكاميرا',\n noCamera: 'لا توجد كاميرا متاحة',\n stopAndSend: 'اضغط للإيقاف والإرسال',\n tapToRecord: 'اضغط للتسجيل',\n releaseToSend: 'اترك للإرسال، اسحب للأعلى للقفل',\n holdToRecord: 'اضغط مطولاً للتسجيل',\n slideUpToLock: 'اسحب لأعلى لقفل التسجيل',\n holdToRecordAudioSwitch: 'اضغط مطولًا لتسجيل صوت. انقر للتبديل إلى الفيديو.',\n holdToRecordVideoSwitch: 'اضغط مطولًا لتسجيل فيديو. انقر للتبديل إلى الصوت.',\n holdToRecordAudioOnly: 'اضغط مطولًا لتسجيل صوت.',\n holdToRecordVideoOnly: 'اضغط مطولًا لتسجيل فيديو.',\n pauseToTrimOrReplay: 'أوقف مؤقتًا للقص أو الإعادة',\n trimRecordingTitle: 'القص إلى النطاق المحدد؟',\n trimRecordingText: 'سيتم حذف الصوت خارج هذا النطاق، وسيبدأ التسجيل فورًا.',\n ok: 'موافق',\n viewOnceHint: 'اضغط لتعيين هذه الرسالة على **التشغيل مرة واحدة**.',\n viewOnceVoiceEnabledHint: 'سيتمكن المستلم من الاستماع إليها مرة واحدة فقط.',\n viewOnceVideoEnabledHint: 'سيتمكن المستلم من تشغيلها مرة واحدة فقط.',\n activateViewOnce: 'تفعيل التشغيل مرة واحدة',\n deactivateViewOnce: 'إلغاء التشغيل مرة واحدة',\n actionReply: 'رد',\n actionCopy: 'نسخ',\n actionPin: 'تثبيت',\n actionUnpin: 'إلغاء التثبيت',\n actionEdit: 'تعديل',\n actionForward: 'إعادة توجيه',\n actionDelete: 'حذف',\n actionRetry: 'إعادة المحاولة',\n emojiSearch: 'البحث عن رمز تعبيري',\n emojiRecent: 'المستخدمة مؤخرًا',\n emojiSmileys: 'الوجوه والأشخاص',\n emojiAnimals: 'الحيوانات والطبيعة',\n emojiFood: 'الطعام والشراب',\n emojiActivities: 'الأنشطة',\n emojiTravel: 'السفر والأماكن',\n emojiObjects: 'الأشياء',\n emojiSymbols: 'الرموز',\n emojiFlags: 'الأعلام',\n emojiNoResults: 'لم يتم العثور على رموز تعبيرية',\n emojiButton: 'رموز تعبيرية',\n keyboardButton: 'لوحة المفاتيح',\n backspace: 'حذف',\n attachButton: 'إرفاق',\n attachGallery: 'المعرض',\n attachFile: 'ملف',\n attachLocation: 'الموقع',\n attachCamera: 'الكاميرا',\n attachCaption: 'أضف تعليقًا...',\n attachSendLocation: 'إرسال موقعي الحالي',\n attachLocating: 'جارٍ تحديد الموقع...',\n attachLocationAccuracy: 'بدقة {meters} م',\n attachPhotosAccess: 'اسمح بالوصول إلى صورك لإرسالها',\n attachNoPhotos: 'لا توجد صور بعد',\n attachChooseFromGallery: 'اختيار من المعرض',\n attachChooseFile: 'اختيار ملف',\n attachLocationDenied: 'الوصول إلى الموقع متوقف. فعّله من الإعدادات لإرسال موقعك.',\n emptyChatTitle: 'لا توجد رسائل هنا بعد...',\n emptyChatText: 'أرسل رسالة أو انقر على التحية أدناه.',\n unreadMessages: 'رسائل غير مقروءة',\n mediaViewerCounter: '{index} من {count}',\n mediaViewerDate: '{date} في {time}',\n actionSelect: 'تحديد',\n cancelSelection: 'إلغاء التحديد',\n chatListTitle: 'الدردشات',\n chatListSearch: 'بحث',\n chatListArchived: 'الدردشات المؤرشفة',\n chatListArchive: 'أرشفة',\n chatListUnarchive: 'إلغاء الأرشفة',\n chatListMute: 'كتم',\n chatListUnmute: 'إلغاء الكتم',\n chatListNewChat: 'رسالة جديدة',\n chatListBack: 'رجوع',\n chatListEmpty: 'لا توجد دردشات هنا بعد',\n chatListNoResults: 'لم يتم العثور على دردشات',\n chatListDraft: 'مسودة:',\n chatListYou: 'أنت',\n chatListPhoto: 'صورة',\n chatListFile: 'ملف',\n chatListDeleteTitle: 'حذف الدردشة',\n chatListDeleteManyTitle: 'حذف الدردشات ({count})',\n chatListDeleteMessage: 'هل أنت متأكد من أنك تريد حذف الدردشات المحددة؟',\n typingStatus: 'يكتب',\n typingStatusName: '{name} يكتب',\n typingStatusTwo: '{name} و{other} يكتبان',\n typingStatusMany: '{name} و{count} آخرون يكتبون',\n typingRecordingVoice: 'يسجّل رسالة صوتية',\n typingRecordingVoiceName: '{name} يسجّل رسالة صوتية',\n typingRecordingVideo: 'يسجّل رسالة فيديو',\n typingRecordingVideoName: '{name} يسجّل رسالة فيديو',\n typingSendingPhoto: 'يرسل صورة',\n typingSendingPhotoName: '{name} يرسل صورة',\n typingSendingVideo: 'يرسل فيديو',\n typingSendingVideoName: '{name} يرسل فيديو',\n typingSendingFile: 'يرسل ملفًا',\n typingSendingFileName: '{name} يرسل ملفًا',\n typingChoosingSticker: 'يختار ملصقًا',\n typingChoosingStickerName: '{name} يختار ملصقًا',\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/locales/de.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,OAAO,CAAC,UAAU,CA+GlC,CAAA"}
1
+ {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/locales/de.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,OAAO,CAAC,UAAU,CAgHlC,CAAA"}
package/lib/locales/de.js CHANGED
@@ -40,6 +40,7 @@ export const de = {
40
40
  actionEdit: 'Bearbeiten',
41
41
  actionForward: 'Weiterleiten',
42
42
  actionDelete: 'Löschen',
43
+ actionRetry: 'Erneut senden',
43
44
  emojiSearch: 'Emoji suchen',
44
45
  emojiRecent: 'Zuletzt verwendet',
45
46
  emojiSmileys: 'Smileys & Personen',