@droppii-org/chat-mobile 0.2.80 → 0.2.82

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 (228) hide show
  1. package/lib/module/components/ThreadCard/MentionBadge.js +24 -0
  2. package/lib/module/components/ThreadCard/MentionBadge.js.map +1 -0
  3. package/lib/module/components/ThreadCard/ThreadCard.js +5 -1
  4. package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -1
  5. package/lib/module/components/messages/linkMessage/LinkPreviewCard.js +67 -0
  6. package/lib/module/components/messages/linkMessage/LinkPreviewCard.js.map +1 -0
  7. package/lib/module/components/messages/linkMessage/index.js +21 -68
  8. package/lib/module/components/messages/linkMessage/index.js.map +1 -1
  9. package/lib/module/components/messages/quotedMessage/QuotedMessagePreviewStrip.js +152 -0
  10. package/lib/module/components/messages/quotedMessage/QuotedMessagePreviewStrip.js.map +1 -0
  11. package/lib/module/components/messages/textMessage/index.js +102 -8
  12. package/lib/module/components/messages/textMessage/index.js.map +1 -1
  13. package/lib/module/config/api-endpoints.js +2 -1
  14. package/lib/module/config/api-endpoints.js.map +1 -1
  15. package/lib/module/core/useChatListener.js +1 -1
  16. package/lib/module/core/useChatListener.js.map +1 -1
  17. package/lib/module/hooks/contacts/useSearchContacts.js +50 -0
  18. package/lib/module/hooks/contacts/useSearchContacts.js.map +1 -0
  19. package/lib/module/hooks/message/useSendMessage.js +64 -3
  20. package/lib/module/hooks/message/useSendMessage.js.map +1 -1
  21. package/lib/module/hooks/query-keys.js +8 -0
  22. package/lib/module/hooks/query-keys.js.map +1 -1
  23. package/lib/module/hooks/useChatCompose.js +3 -2
  24. package/lib/module/hooks/useChatCompose.js.map +1 -1
  25. package/lib/module/screens/SearchConversation/ContactResultItem.js +119 -0
  26. package/lib/module/screens/SearchConversation/ContactResultItem.js.map +1 -0
  27. package/lib/module/screens/SearchConversation/SearchAllResult.js +26 -20
  28. package/lib/module/screens/SearchConversation/SearchAllResult.js.map +1 -1
  29. package/lib/module/screens/SearchConversation/SearchCommunityResult.js +79 -0
  30. package/lib/module/screens/SearchConversation/SearchCommunityResult.js.map +1 -0
  31. package/lib/module/screens/SearchConversation/SearchContactsResult.js +117 -0
  32. package/lib/module/screens/SearchConversation/SearchContactsResult.js.map +1 -0
  33. package/lib/module/screens/SearchConversation/SearchEmpty.js +2 -0
  34. package/lib/module/screens/SearchConversation/SearchEmpty.js.map +1 -1
  35. package/lib/module/screens/SearchConversation/SearchMessagesResult.js +1 -8
  36. package/lib/module/screens/SearchConversation/SearchMessagesResult.js.map +1 -1
  37. package/lib/module/screens/SearchConversation/SearchResultItem.js +2 -0
  38. package/lib/module/screens/SearchConversation/SearchResultItem.js.map +1 -1
  39. package/lib/module/screens/SearchConversation/TabResult.js +24 -7
  40. package/lib/module/screens/SearchConversation/TabResult.js.map +1 -1
  41. package/lib/module/screens/SearchConversation/index.js +6 -2
  42. package/lib/module/screens/SearchConversation/index.js.map +1 -1
  43. package/lib/module/screens/SearchConversation/types.js +1 -0
  44. package/lib/module/screens/SearchConversation/types.js.map +1 -1
  45. package/lib/module/screens/chat-detail/ChatComposer.js +170 -48
  46. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  47. package/lib/module/screens/chat-detail/ChatListLegend.js +1 -0
  48. package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
  49. package/lib/module/screens/chat-detail/components/ChatMessageInput.js +23 -2
  50. package/lib/module/screens/chat-detail/components/ChatMessageInput.js.map +1 -1
  51. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js +51 -0
  52. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js.map +1 -0
  53. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js +49 -0
  54. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js.map +1 -0
  55. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js +114 -0
  56. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js.map +1 -0
  57. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js +8 -0
  58. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js.map +1 -1
  59. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js +251 -0
  60. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js.map +1 -0
  61. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +5 -1
  62. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
  63. package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxWrapper.js +11 -1
  64. package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxWrapper.js.map +1 -1
  65. package/lib/module/services/endpoints.js +2 -1
  66. package/lib/module/services/endpoints.js.map +1 -1
  67. package/lib/module/services/mentionSearch.js +49 -0
  68. package/lib/module/services/mentionSearch.js.map +1 -0
  69. package/lib/module/services/message.js +6 -1
  70. package/lib/module/services/message.js.map +1 -1
  71. package/lib/module/translation/resources/i18n.js +11 -0
  72. package/lib/module/translation/resources/i18n.js.map +1 -1
  73. package/lib/module/types/chat.js +8 -0
  74. package/lib/module/types/chat.js.map +1 -1
  75. package/lib/module/types/mention.js +2 -0
  76. package/lib/module/types/mention.js.map +1 -0
  77. package/lib/module/utils/dateTimeUtils.js +10 -0
  78. package/lib/module/utils/dateTimeUtils.js.map +1 -1
  79. package/lib/module/utils/highlightSearch.js +6 -2
  80. package/lib/module/utils/highlightSearch.js.map +1 -1
  81. package/lib/module/utils/mentionSerializer.js +113 -0
  82. package/lib/module/utils/mentionSerializer.js.map +1 -0
  83. package/lib/module/utils/mentions/index.js +7 -0
  84. package/lib/module/utils/mentions/index.js.map +1 -0
  85. package/lib/module/utils/mentions/mentionDetector.js +49 -0
  86. package/lib/module/utils/mentions/mentionDetector.js.map +1 -0
  87. package/lib/module/utils/mentions/mentionDiff.js +66 -0
  88. package/lib/module/utils/mentions/mentionDiff.js.map +1 -0
  89. package/lib/module/utils/mentions/mentionRange.js +188 -0
  90. package/lib/module/utils/mentions/mentionRange.js.map +1 -0
  91. package/lib/module/utils/mentions/mentionTokenize.js +50 -0
  92. package/lib/module/utils/mentions/mentionTokenize.js.map +1 -0
  93. package/lib/module/utils/messageUtils.js +16 -3
  94. package/lib/module/utils/messageUtils.js.map +1 -1
  95. package/lib/module/utils/url.js +33 -0
  96. package/lib/module/utils/url.js.map +1 -1
  97. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts +7 -0
  98. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts.map +1 -0
  99. package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
  100. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts +16 -0
  101. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts.map +1 -0
  102. package/lib/typescript/src/components/messages/linkMessage/index.d.ts.map +1 -1
  103. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts +13 -0
  104. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts.map +1 -0
  105. package/lib/typescript/src/components/messages/textMessage/index.d.ts +3 -1
  106. package/lib/typescript/src/components/messages/textMessage/index.d.ts.map +1 -1
  107. package/lib/typescript/src/config/api-endpoints.d.ts +1 -0
  108. package/lib/typescript/src/config/api-endpoints.d.ts.map +1 -1
  109. package/lib/typescript/src/hooks/contacts/useSearchContacts.d.ts +221 -0
  110. package/lib/typescript/src/hooks/contacts/useSearchContacts.d.ts.map +1 -0
  111. package/lib/typescript/src/hooks/message/useSendMessage.d.ts +5 -2
  112. package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
  113. package/lib/typescript/src/hooks/query-keys.d.ts +8 -0
  114. package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -1
  115. package/lib/typescript/src/hooks/useChatCompose.d.ts +2 -1
  116. package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -1
  117. package/lib/typescript/src/screens/SearchConversation/ContactResultItem.d.ts +9 -0
  118. package/lib/typescript/src/screens/SearchConversation/ContactResultItem.d.ts.map +1 -0
  119. package/lib/typescript/src/screens/SearchConversation/SearchAllResult.d.ts +3 -2
  120. package/lib/typescript/src/screens/SearchConversation/SearchAllResult.d.ts.map +1 -1
  121. package/lib/typescript/src/screens/SearchConversation/SearchCommunityResult.d.ts +7 -0
  122. package/lib/typescript/src/screens/SearchConversation/SearchCommunityResult.d.ts.map +1 -0
  123. package/lib/typescript/src/screens/SearchConversation/SearchContactsResult.d.ts +8 -0
  124. package/lib/typescript/src/screens/SearchConversation/SearchContactsResult.d.ts.map +1 -0
  125. package/lib/typescript/src/screens/SearchConversation/SearchEmpty.d.ts.map +1 -1
  126. package/lib/typescript/src/screens/SearchConversation/SearchMessagesResult.d.ts.map +1 -1
  127. package/lib/typescript/src/screens/SearchConversation/SearchResultItem.d.ts.map +1 -1
  128. package/lib/typescript/src/screens/SearchConversation/TabResult.d.ts +4 -2
  129. package/lib/typescript/src/screens/SearchConversation/TabResult.d.ts.map +1 -1
  130. package/lib/typescript/src/screens/SearchConversation/index.d.ts +4 -2
  131. package/lib/typescript/src/screens/SearchConversation/index.d.ts.map +1 -1
  132. package/lib/typescript/src/screens/SearchConversation/types.d.ts +2 -1
  133. package/lib/typescript/src/screens/SearchConversation/types.d.ts.map +1 -1
  134. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  135. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
  136. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts +10 -2
  137. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts.map +1 -1
  138. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts +29 -0
  139. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts.map +1 -0
  140. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts +8 -0
  141. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts.map +1 -0
  142. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts +12 -0
  143. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts.map +1 -0
  144. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts +1 -1
  145. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts.map +1 -1
  146. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts +48 -0
  147. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts.map +1 -0
  148. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
  149. package/lib/typescript/src/screens/chat-detail/messageToolbox/MessageToolboxWrapper.d.ts.map +1 -1
  150. package/lib/typescript/src/services/endpoints.d.ts +1 -0
  151. package/lib/typescript/src/services/endpoints.d.ts.map +1 -1
  152. package/lib/typescript/src/services/mentionSearch.d.ts +15 -0
  153. package/lib/typescript/src/services/mentionSearch.d.ts.map +1 -0
  154. package/lib/typescript/src/services/message.d.ts +1 -1
  155. package/lib/typescript/src/services/message.d.ts.map +1 -1
  156. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  157. package/lib/typescript/src/types/chat.d.ts +50 -0
  158. package/lib/typescript/src/types/chat.d.ts.map +1 -1
  159. package/lib/typescript/src/types/mention.d.ts +65 -0
  160. package/lib/typescript/src/types/mention.d.ts.map +1 -0
  161. package/lib/typescript/src/utils/dateTimeUtils.d.ts +2 -0
  162. package/lib/typescript/src/utils/dateTimeUtils.d.ts.map +1 -1
  163. package/lib/typescript/src/utils/highlightSearch.d.ts.map +1 -1
  164. package/lib/typescript/src/utils/mentionSerializer.d.ts +78 -0
  165. package/lib/typescript/src/utils/mentionSerializer.d.ts.map +1 -0
  166. package/lib/typescript/src/utils/mentions/index.d.ts +5 -0
  167. package/lib/typescript/src/utils/mentions/index.d.ts.map +1 -0
  168. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts +18 -0
  169. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts.map +1 -0
  170. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts +20 -0
  171. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts.map +1 -0
  172. package/lib/typescript/src/utils/mentions/mentionRange.d.ts +86 -0
  173. package/lib/typescript/src/utils/mentions/mentionRange.d.ts.map +1 -0
  174. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts +29 -0
  175. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts.map +1 -0
  176. package/lib/typescript/src/utils/messageUtils.d.ts.map +1 -1
  177. package/lib/typescript/src/utils/url.d.ts +12 -0
  178. package/lib/typescript/src/utils/url.d.ts.map +1 -1
  179. package/package.json +3 -1
  180. package/src/build-ignore.d.ts +2 -0
  181. package/src/components/ThreadCard/MentionBadge.tsx +28 -0
  182. package/src/components/ThreadCard/ThreadCard.tsx +3 -0
  183. package/src/components/messages/linkMessage/LinkPreviewCard.tsx +92 -0
  184. package/src/components/messages/linkMessage/index.tsx +25 -89
  185. package/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx +168 -0
  186. package/src/components/messages/textMessage/index.tsx +124 -4
  187. package/src/config/api-endpoints.ts +2 -0
  188. package/src/core/useChatListener.ts +1 -1
  189. package/src/hooks/contacts/useSearchContacts.ts +66 -0
  190. package/src/hooks/message/useSendMessage.ts +60 -1
  191. package/src/hooks/query-keys.ts +12 -0
  192. package/src/hooks/useChatCompose.ts +115 -107
  193. package/src/screens/SearchConversation/ContactResultItem.tsx +128 -0
  194. package/src/screens/SearchConversation/SearchAllResult.tsx +38 -24
  195. package/src/screens/SearchConversation/SearchCommunityResult.tsx +96 -0
  196. package/src/screens/SearchConversation/SearchContactsResult.tsx +155 -0
  197. package/src/screens/SearchConversation/SearchEmpty.tsx +2 -0
  198. package/src/screens/SearchConversation/SearchMessagesResult.tsx +1 -6
  199. package/src/screens/SearchConversation/SearchResultItem.tsx +6 -1
  200. package/src/screens/SearchConversation/TabResult.tsx +40 -5
  201. package/src/screens/SearchConversation/index.tsx +10 -2
  202. package/src/screens/SearchConversation/types.tsx +1 -0
  203. package/src/screens/chat-detail/ChatComposer.tsx +201 -67
  204. package/src/screens/chat-detail/ChatListLegend.tsx +1 -0
  205. package/src/screens/chat-detail/components/ChatMessageInput.tsx +35 -2
  206. package/src/screens/chat-detail/components/MentionHighlightAdapter.tsx +57 -0
  207. package/src/screens/chat-detail/components/MentionSuggestionItem.tsx +53 -0
  208. package/src/screens/chat-detail/components/MentionSuggestionList.tsx +133 -0
  209. package/src/screens/chat-detail/hooks/useChatComposerState.ts +7 -1
  210. package/src/screens/chat-detail/hooks/useMentionComposer.ts +344 -0
  211. package/src/screens/chat-detail/legend/LegendChatMessage.tsx +7 -1
  212. package/src/screens/chat-detail/messageToolbox/MessageToolboxWrapper.tsx +22 -4
  213. package/src/services/endpoints.ts +1 -0
  214. package/src/services/mentionSearch.ts +57 -0
  215. package/src/services/message.ts +9 -1
  216. package/src/translation/resources/i18n.ts +12 -0
  217. package/src/types/chat.ts +52 -0
  218. package/src/types/mention.ts +70 -0
  219. package/src/utils/dateTimeUtils.ts +15 -0
  220. package/src/utils/highlightSearch.ts +12 -2
  221. package/src/utils/mentionSerializer.ts +155 -0
  222. package/src/utils/mentions/index.ts +16 -0
  223. package/src/utils/mentions/mentionDetector.ts +58 -0
  224. package/src/utils/mentions/mentionDiff.ts +95 -0
  225. package/src/utils/mentions/mentionRange.ts +207 -0
  226. package/src/utils/mentions/mentionTokenize.ts +53 -0
  227. package/src/utils/messageUtils.ts +21 -10
  228. package/src/utils/url.ts +30 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { KLabel, KColors } from '@droppii/libs';
5
+ import { GroupAtType } from '@droppii/openim-rn-client-sdk';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ // Figma (node 15177-302069): "@" renders as a standalone bold glyph, no
8
+ // background — same color token as the composer/bubble mention highlight
9
+ // (KColors.palette.primary.w400), not a new one-off value.
10
+ export const MentionBadge = /*#__PURE__*/memo(({
11
+ groupAtType
12
+ }) => {
13
+ if (groupAtType === undefined || groupAtType === GroupAtType.AtNormal) {
14
+ return null;
15
+ }
16
+ return /*#__PURE__*/_jsx(KLabel.Text, {
17
+ typo: "TextNmBold",
18
+ color: KColors.palette.primary.w400,
19
+ marginL: "0.5rem",
20
+ children: "@"
21
+ });
22
+ });
23
+ MentionBadge.displayName = 'MentionBadge';
24
+ //# sourceMappingURL=MentionBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","KLabel","KColors","GroupAtType","jsx","_jsx","MentionBadge","groupAtType","undefined","AtNormal","Text","typo","color","palette","primary","w400","marginL","children","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/MentionBadge.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,MAAM,EAAEC,OAAO,QAAQ,eAAe;AAC/C,SAASC,WAAW,QAAQ,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAM5D;AACA;AACA;AACA,OAAO,MAAMC,YAAY,gBAAGN,IAAI,CAAC,CAAC;EAAEO;AAA+B,CAAC,KAAK;EACvE,IAAIA,WAAW,KAAKC,SAAS,IAAID,WAAW,KAAKJ,WAAW,CAACM,QAAQ,EAAE;IACrE,OAAO,IAAI;EACb;EAEA,oBACEJ,IAAA,CAACJ,MAAM,CAACS,IAAI;IACVC,IAAI,EAAC,YAAY;IACjBC,KAAK,EAAEV,OAAO,CAACW,OAAO,CAACC,OAAO,CAACC,IAAK;IACpCC,OAAO,EAAC,QAAQ;IAAAC,QAAA,EACjB;EAED,CAAa,CAAC;AAElB,CAAC,CAAC;AAEFX,YAAY,CAACY,WAAW,GAAG,cAAc","ignoreList":[]}
@@ -6,6 +6,7 @@ import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
6
6
  import { AvatarSection } from "./AvatarSection.js";
7
7
  import { NamePrefixIcon } from "./NamePrefixIcon.js";
8
8
  import { UnreadBadge } from "./UnreadBadge.js";
9
+ import { MentionBadge } from "./MentionBadge.js";
9
10
  import { formatTimestamp } from "../../utils/dateTimeUtils.js";
10
11
  import { getLastMessageText, getMessagePreviewTextProps } from "../../utils/messageUtils.js";
11
12
  import { useConversation, useUserStore } from "../../store/index.js";
@@ -30,7 +31,8 @@ const ThreadCard = /*#__PURE__*/memo(({
30
31
  isPinned,
31
32
  latestMsgSendTime,
32
33
  latestMsg,
33
- groupID
34
+ groupID,
35
+ groupAtType
34
36
  } = conversation || {};
35
37
  const {
36
38
  data: isJoinedGroup
@@ -151,6 +153,8 @@ const ThreadCard = /*#__PURE__*/memo(({
151
153
  color: KColors.primary.normal
152
154
  })
153
155
  })
156
+ }), /*#__PURE__*/_jsx(MentionBadge, {
157
+ groupAtType: groupAtType
154
158
  }), /*#__PURE__*/_jsx(UnreadBadge, {
155
159
  count: unreadCount
156
160
  })]
@@ -1 +1 @@
1
- {"version":3,"names":["memo","useCallback","useMemo","ReanimatedSwipeable","KContainer","KImage","KLabel","KColors","AvatarSection","NamePrefixIcon","UnreadBadge","formatTimestamp","getLastMessageText","getMessagePreviewTextProps","useConversation","useUserStore","MessageReceiveOptType","MuteThread","PinThread","useIsJoinedGroup","isEmpty","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ThreadCard","item","onPress","conversation","peerType","showName","faceURL","members","unreadCount","recvMsgOpt","Normal","isPinned","latestMsgSendTime","latestMsg","groupID","data","isJoinedGroup","isNotInGroup","latestMsgData","result","JSON","parse","error","console","fullName","hasUnread","isMuted","timestamp","sendTime","currentUserId","s","user","userID","lastMessageText","message","handlePress","event","renderRightActions","_progress","_translation","swipeableMethods","children","VisibleView","visible","Boolean","friction","rightThreshold","Touchable","row","alignItems","paddingH","paddingV","activeOpacity","background","white","avatar","View","flex","marginL","paddingB","Text","typo","numberOfLines","color","black","VectorIcons","name","provider","size","palette","gray","w500","w400","normal","primary","count","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/ThreadCard.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["memo","useCallback","useMemo","ReanimatedSwipeable","KContainer","KImage","KLabel","KColors","AvatarSection","NamePrefixIcon","UnreadBadge","MentionBadge","formatTimestamp","getLastMessageText","getMessagePreviewTextProps","useConversation","useUserStore","MessageReceiveOptType","MuteThread","PinThread","useIsJoinedGroup","isEmpty","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ThreadCard","item","onPress","conversation","peerType","showName","faceURL","members","unreadCount","recvMsgOpt","Normal","isPinned","latestMsgSendTime","latestMsg","groupID","groupAtType","data","isJoinedGroup","isNotInGroup","latestMsgData","result","JSON","parse","error","console","fullName","hasUnread","isMuted","timestamp","sendTime","currentUserId","s","user","userID","lastMessageText","message","handlePress","event","renderRightActions","_progress","_translation","swipeableMethods","children","VisibleView","visible","Boolean","friction","rightThreshold","Touchable","row","alignItems","paddingH","paddingV","activeOpacity","background","white","avatar","View","flex","marginL","paddingB","Text","typo","numberOfLines","color","black","VectorIcons","name","provider","size","palette","gray","w500","w400","normal","primary","count","displayName"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/ThreadCard.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { StyleSheet } from 'react-native';
5
+ import { KContainer, KImage, KLabel, KColors, KSpacingValue } from '@droppii/libs';
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ /**
8
+ * The rich link-preview card (thumbnail/title/url/description) — shared by
9
+ * LinkMessage (message.urlTextElem, a plain URL message) and TextMessage
10
+ * (mention+URL combo: message.ex.urlMetadata attached to an AtTextMessage,
11
+ * since OpenIM's AtTextMessage/UrlTextMessage content types are mutually
12
+ * exclusive — see useSendMessage.ts's doc comment for why the mention wins
13
+ * the content type and the URL card rides along in `ex` instead).
14
+ */
15
+ export const LinkPreviewCard = /*#__PURE__*/memo(({
16
+ metadata,
17
+ onPressUrl
18
+ }) => /*#__PURE__*/_jsxs(KContainer.Touchable, {
19
+ style: styles.card,
20
+ onPress: () => metadata.url && onPressUrl?.(metadata.url),
21
+ children: [!!metadata.image && /*#__PURE__*/_jsx(KContainer.View, {
22
+ style: styles.cardThumb,
23
+ children: /*#__PURE__*/_jsx(KImage.Base, {
24
+ uri: metadata.image,
25
+ style: StyleSheet.absoluteFill,
26
+ resizeMode: "cover"
27
+ })
28
+ }), /*#__PURE__*/_jsxs(KContainer.View, {
29
+ style: styles.cardBody,
30
+ children: [!!metadata.title && /*#__PURE__*/_jsx(KLabel.Text, {
31
+ typo: "TextNmMedium",
32
+ color: KColors.palette.gray.w900,
33
+ numberOfLines: 1,
34
+ children: metadata.title
35
+ }), !!metadata.url && /*#__PURE__*/_jsx(KLabel.Text, {
36
+ typo: "TextXsMedium",
37
+ color: KColors.palette.primary.w400,
38
+ numberOfLines: 1,
39
+ children: metadata.url
40
+ }), !!metadata.description && /*#__PURE__*/_jsx(KLabel.Text, {
41
+ typo: "TextXsNormal",
42
+ color: KColors.gray.normal,
43
+ numberOfLines: 2,
44
+ children: metadata.description
45
+ })]
46
+ })]
47
+ }));
48
+ LinkPreviewCard.displayName = 'LinkPreviewCard';
49
+ const styles = StyleSheet.create({
50
+ card: {
51
+ borderRadius: KSpacingValue['0.75rem'],
52
+ borderWidth: 1,
53
+ borderColor: 'rgba(57,62,64,0.1)',
54
+ backgroundColor: KColors.white,
55
+ overflow: 'hidden'
56
+ },
57
+ cardThumb: {
58
+ width: '100%',
59
+ aspectRatio: 16 / 9
60
+ },
61
+ cardBody: {
62
+ paddingHorizontal: KSpacingValue['0.75rem'],
63
+ paddingVertical: KSpacingValue['0.5rem'],
64
+ gap: 2
65
+ }
66
+ });
67
+ //# sourceMappingURL=LinkPreviewCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","StyleSheet","KContainer","KImage","KLabel","KColors","KSpacingValue","jsx","_jsx","jsxs","_jsxs","LinkPreviewCard","metadata","onPressUrl","Touchable","style","styles","card","onPress","url","children","image","View","cardThumb","Base","uri","absoluteFill","resizeMode","cardBody","title","Text","typo","color","palette","gray","w900","numberOfLines","primary","w400","description","normal","displayName","create","borderRadius","borderWidth","borderColor","backgroundColor","white","overflow","width","aspectRatio","paddingHorizontal","paddingVertical","gap"],"sourceRoot":"../../../../../src","sources":["components/messages/linkMessage/LinkPreviewCard.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,UAAU,QAAQ,cAAc;AACzC,SACEC,UAAU,EACVC,MAAM,EACNC,MAAM,EACNC,OAAO,EACPC,aAAa,QACR,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAQvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,gBAAGX,IAAI,CACjC,CAAC;EAAEY,QAAQ;EAAEC;AAAiC,CAAC,kBAC7CH,KAAA,CAACR,UAAU,CAACY,SAAS;EACnBC,KAAK,EAAEC,MAAM,CAACC,IAAK;EACnBC,OAAO,EAAEA,CAAA,KAAMN,QAAQ,CAACO,GAAG,IAAIN,UAAU,GAAGD,QAAQ,CAACO,GAAG,CAAE;EAAAC,QAAA,GAEzD,CAAC,CAACR,QAAQ,CAACS,KAAK,iBACfb,IAAA,CAACN,UAAU,CAACoB,IAAI;IAACP,KAAK,EAAEC,MAAM,CAACO,SAAU;IAAAH,QAAA,eACvCZ,IAAA,CAACL,MAAM,CAACqB,IAAI;MACVC,GAAG,EAAEb,QAAQ,CAACS,KAAM;MACpBN,KAAK,EAAEd,UAAU,CAACyB,YAAa;MAC/BC,UAAU,EAAC;IAAO,CACnB;EAAC,CACa,CAClB,eACDjB,KAAA,CAACR,UAAU,CAACoB,IAAI;IAACP,KAAK,EAAEC,MAAM,CAACY,QAAS;IAAAR,QAAA,GACrC,CAAC,CAACR,QAAQ,CAACiB,KAAK,iBACfrB,IAAA,CAACJ,MAAM,CAAC0B,IAAI;MACVC,IAAI,EAAC,cAAc;MACnBC,KAAK,EAAE3B,OAAO,CAAC4B,OAAO,CAACC,IAAI,CAACC,IAAK;MACjCC,aAAa,EAAE,CAAE;MAAAhB,QAAA,EAEhBR,QAAQ,CAACiB;IAAK,CACJ,CACd,EACA,CAAC,CAACjB,QAAQ,CAACO,GAAG,iBACbX,IAAA,CAACJ,MAAM,CAAC0B,IAAI;MACVC,IAAI,EAAC,cAAc;MACnBC,KAAK,EAAE3B,OAAO,CAAC4B,OAAO,CAACI,OAAO,CAACC,IAAK;MACpCF,aAAa,EAAE,CAAE;MAAAhB,QAAA,EAEhBR,QAAQ,CAACO;IAAG,CACF,CACd,EACA,CAAC,CAACP,QAAQ,CAAC2B,WAAW,iBACrB/B,IAAA,CAACJ,MAAM,CAAC0B,IAAI;MACVC,IAAI,EAAC,cAAc;MACnBC,KAAK,EAAE3B,OAAO,CAAC6B,IAAI,CAACM,MAAO;MAC3BJ,aAAa,EAAE,CAAE;MAAAhB,QAAA,EAEhBR,QAAQ,CAAC2B;IAAW,CACV,CACd;EAAA,CACc,CAAC;AAAA,CACE,CAE1B,CAAC;AAED5B,eAAe,CAAC8B,WAAW,GAAG,iBAAiB;AAE/C,MAAMzB,MAAM,GAAGf,UAAU,CAACyC,MAAM,CAAC;EAC/BzB,IAAI,EAAE;IACJ0B,YAAY,EAAErC,aAAa,CAAC,SAAS,CAAC;IACtCsC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,oBAAoB;IACjCC,eAAe,EAAEzC,OAAO,CAAC0C,KAAK;IAC9BC,QAAQ,EAAE;EACZ,CAAC;EACDzB,SAAS,EAAE;IACT0B,KAAK,EAAE,MAAM;IACbC,WAAW,EAAE,EAAE,GAAG;EACpB,CAAC;EACDtB,QAAQ,EAAE;IACRuB,iBAAiB,EAAE7C,aAAa,CAAC,SAAS,CAAC;IAC3C8C,eAAe,EAAE9C,aAAa,CAAC,QAAQ,CAAC;IACxC+C,GAAG,EAAE;EACP;AACF,CAAC,CAAC","ignoreList":[]}
@@ -2,52 +2,27 @@
2
2
 
3
3
  import { memo } from 'react';
4
4
  import { StyleSheet } from 'react-native';
5
- import { KContainer, KImage, KLabel, KColors, KSpacingValue } from '@droppii/libs';
5
+ import { KContainer, KLabel, KColors, KSpacingValue } from '@droppii/libs';
6
6
  import { CHAT_BUBBLE_COLORS } from "../../../screens/chat-detail/constants.js";
7
7
  import { parseUrlMetadata } from "../../../utils/messageUtils.js";
8
+ import { splitTextByUrls } from "../../../utils/url.js";
8
9
  import { messageStyles } from "../styles.js";
10
+ import { LinkPreviewCard } from "./LinkPreviewCard.js";
9
11
  import { getTailCornerStyle } from "../bubbleTail.utils.js";
10
12
  import { BubbleTailRow } from "../BubbleTailRow.js";
11
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
- const renderTextWithLinks = (content, urls, onPressUrl) => {
13
- if (!urls.length) {
14
- return /*#__PURE__*/_jsx(KLabel.Text, {
15
- typo: "TextMdNormal",
16
- children: content
17
- });
18
- }
19
- const parts = [];
20
- let remaining = content;
21
- for (const url of urls) {
22
- const idx = remaining.indexOf(url);
23
- if (idx === -1) continue;
24
- if (idx > 0) parts.push({
25
- text: remaining.slice(0, idx),
26
- isUrl: false
27
- });
28
- parts.push({
29
- text: url,
30
- isUrl: true
31
- });
32
- remaining = remaining.slice(idx + url.length);
33
- }
34
- if (remaining) parts.push({
35
- text: remaining,
36
- isUrl: false
37
- });
38
- return /*#__PURE__*/_jsx(KLabel.Text, {
14
+ const renderTextWithLinks = (content, urls, onPressUrl) => /*#__PURE__*/_jsx(KLabel.Text, {
15
+ typo: "TextMdNormal",
16
+ children: splitTextByUrls(content, urls).map((part, i) => part.isUrl ? /*#__PURE__*/_jsx(KLabel.Text, {
17
+ onPress: () => onPressUrl?.(part.text),
18
+ color: KColors.primary.normal,
19
+ typo: "TextMdMedium",
20
+ children: part.text
21
+ }, i) : /*#__PURE__*/_jsx(KLabel.Text, {
39
22
  typo: "TextMdNormal",
40
- children: parts.map((part, i) => part.isUrl ? /*#__PURE__*/_jsx(KLabel.Text, {
41
- onPress: () => onPressUrl?.(part.text),
42
- color: KColors.primary.normal,
43
- typo: "TextMdMedium",
44
- children: part.text
45
- }, i) : /*#__PURE__*/_jsx(KLabel.Text, {
46
- typo: "TextMdNormal",
47
- children: part.text
48
- }, i))
49
- });
50
- };
23
+ children: part.text
24
+ }, i))
25
+ });
51
26
  export const LinkMessage = /*#__PURE__*/memo(({
52
27
  message,
53
28
  isOutgoing,
@@ -66,35 +41,9 @@ export const LinkMessage = /*#__PURE__*/memo(({
66
41
  children: [!!content?.trim() && /*#__PURE__*/_jsx(KContainer.View, {
67
42
  style: styles.textRow,
68
43
  children: renderTextWithLinks(content, urls, onPressUrl)
69
- }), !!metadata && /*#__PURE__*/_jsxs(KContainer.Touchable, {
70
- style: styles.card,
71
- onPress: () => metadata.url && onPressUrl?.(metadata.url),
72
- children: [!!metadata.image && /*#__PURE__*/_jsx(KContainer.View, {
73
- style: styles.cardThumb,
74
- children: /*#__PURE__*/_jsx(KImage.Base, {
75
- uri: metadata.image,
76
- style: StyleSheet.absoluteFill,
77
- resizeMode: "cover"
78
- })
79
- }), /*#__PURE__*/_jsxs(KContainer.View, {
80
- style: styles.cardBody,
81
- children: [!!metadata.title && /*#__PURE__*/_jsx(KLabel.Text, {
82
- typo: "TextNmMedium",
83
- color: KColors.palette.gray.w900,
84
- numberOfLines: 1,
85
- children: metadata.title
86
- }), !!metadata.url && /*#__PURE__*/_jsx(KLabel.Text, {
87
- typo: "TextXsMedium",
88
- color: KColors.palette.primary.w400,
89
- numberOfLines: 1,
90
- children: metadata.url
91
- }), !!metadata.description && /*#__PURE__*/_jsx(KLabel.Text, {
92
- typo: "TextXsNormal",
93
- color: KColors.gray.normal,
94
- numberOfLines: 2,
95
- children: metadata.description
96
- })]
97
- })]
44
+ }), !!metadata && /*#__PURE__*/_jsx(LinkPreviewCard, {
45
+ metadata: metadata,
46
+ onPressUrl: onPressUrl
98
47
  })]
99
48
  })
100
49
  });
@@ -118,6 +67,10 @@ const styles = StyleSheet.create({
118
67
  textRow: {
119
68
  paddingHorizontal: KSpacingValue['0.25rem']
120
69
  },
70
+ timeLabel: {
71
+ gap: 4,
72
+ marginTop: 2
73
+ },
121
74
  card: {
122
75
  borderRadius: KSpacingValue['0.75rem'],
123
76
  borderWidth: 1,
@@ -1 +1 @@
1
- {"version":3,"names":["memo","StyleSheet","KContainer","KImage","KLabel","KColors","KSpacingValue","CHAT_BUBBLE_COLORS","parseUrlMetadata","messageStyles","getTailCornerStyle","BubbleTailRow","jsx","_jsx","jsxs","_jsxs","renderTextWithLinks","content","urls","onPressUrl","length","Text","typo","children","parts","remaining","url","idx","indexOf","push","text","slice","isUrl","map","part","i","onPress","color","primary","normal","LinkMessage","message","isOutgoing","isHighlighted","groupPosition","urlTextElem","metadata","ex","View","style","styles","bubble","bubbleSent","bubbleReceived","bubbleHighlighted","trim","textRow","Touchable","card","image","cardThumb","Base","uri","absoluteFill","resizeMode","cardBody","title","palette","gray","w900","numberOfLines","w400","description","displayName","create","wrapper","maxWidth","paddingHorizontal","paddingVertical","borderRadius","backgroundColor","received","sent","borderWidth","borderColor","white","overflow","width","aspectRatio","gap"],"sourceRoot":"../../../../../src","sources":["components/messages/linkMessage/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["memo","StyleSheet","KContainer","KLabel","KColors","KSpacingValue","CHAT_BUBBLE_COLORS","parseUrlMetadata","splitTextByUrls","messageStyles","LinkPreviewCard","getTailCornerStyle","BubbleTailRow","jsx","_jsx","jsxs","_jsxs","renderTextWithLinks","content","urls","onPressUrl","Text","typo","children","map","part","i","isUrl","onPress","text","color","primary","normal","LinkMessage","message","isOutgoing","isHighlighted","groupPosition","urlTextElem","metadata","ex","View","style","styles","bubble","bubbleSent","bubbleReceived","bubbleHighlighted","trim","textRow","displayName","create","wrapper","maxWidth","paddingHorizontal","paddingVertical","borderRadius","backgroundColor","received","sent","timeLabel","gap","marginTop","card","borderWidth","borderColor","white","overflow","cardThumb","width","aspectRatio","cardBody"],"sourceRoot":"../../../../../src","sources":["components/messages/linkMessage/index.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,UAAU,EAAEC,MAAM,EAAEC,OAAO,EAAEC,aAAa,QAAQ,eAAe;AAE1E,SAASC,kBAAkB,QAAQ,2CAAwC;AAC3E,SAASC,gBAAgB,QAAQ,gCAA6B;AAC9D,SAASC,eAAe,QAAQ,uBAAoB;AACpD,SAASC,aAAa,QAAQ,cAAW;AACzC,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,kBAAkB,QAAQ,wBAAqB;AACxD,SAASC,aAAa,QAAQ,qBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEjD,MAAMC,mBAAmB,GAAGA,CAC1BC,OAAe,EACfC,IAAc,EACdC,UAAkC,kBAElCN,IAAA,CAACX,MAAM,CAACkB,IAAI;EAACC,IAAI,EAAC,cAAc;EAAAC,QAAA,EAC7Bf,eAAe,CAACU,OAAO,EAAEC,IAAI,CAAC,CAACK,GAAG,CAAC,CAACC,IAAI,EAAEC,CAAC,KAC1CD,IAAI,CAACE,KAAK,gBACRb,IAAA,CAACX,MAAM,CAACkB,IAAI;IAEVO,OAAO,EAAEA,CAAA,KAAMR,UAAU,GAAGK,IAAI,CAACI,IAAI,CAAE;IACvCC,KAAK,EAAE1B,OAAO,CAAC2B,OAAO,CAACC,MAAO;IAC9BV,IAAI,EAAC,cAAc;IAAAC,QAAA,EAElBE,IAAI,CAACI;EAAI,GALLH,CAMM,CAAC,gBAEdZ,IAAA,CAACX,MAAM,CAACkB,IAAI;IAACC,IAAI,EAAC,cAAc;IAAAC,QAAA,EAC7BE,IAAI,CAACI;EAAI,GAD0BH,CAEzB,CAEjB;AAAC,CACU,CACd;AAED,OAAO,MAAMO,WAAW,gBAAGjC,IAAI,CAC7B,CAAC;EACCkC,OAAO;EACPC,UAAU;EACVf,UAAU;EACVgB,aAAa;EACbC;AAC+D,CAAC,KAAK;EACrE,MAAMnB,OAAO,GAAGgB,OAAO,EAAEI,WAAW,EAAEpB,OAAO;EAC7C,MAAMC,IAAI,GAAGe,OAAO,EAAEI,WAAW,EAAEnB,IAAI,IAAI,EAAE;EAC7C,MAAMoB,QAAQ,GAAGhC,gBAAgB,CAAC2B,OAAO,CAACM,EAAE,CAAC;EAE7C,oBACE1B,IAAA,CAACF,aAAa;IAACuB,UAAU,EAAEA,UAAW;IAACE,aAAa,EAAEA,aAAc;IAAAd,QAAA,eAClEP,KAAA,CAACd,UAAU,CAACuC,IAAI;MACdC,KAAK,EAAE,CACLC,MAAM,CAACC,MAAM,EACbT,UAAU,GAAGQ,MAAM,CAACE,UAAU,GAAGF,MAAM,CAACG,cAAc,EACtDV,aAAa,IAAI3B,aAAa,CAACsC,iBAAiB,EAChDpC,kBAAkB,CAACwB,UAAU,EAAEE,aAAa,CAAC,CAC7C;MAAAd,QAAA,GAED,CAAC,CAACL,OAAO,EAAE8B,IAAI,CAAC,CAAC,iBAChBlC,IAAA,CAACZ,UAAU,CAACuC,IAAI;QAACC,KAAK,EAAEC,MAAM,CAACM,OAAQ;QAAA1B,QAAA,EACpCN,mBAAmB,CAACC,OAAO,EAAEC,IAAI,EAAEC,UAAU;MAAC,CAChC,CAClB,EAEA,CAAC,CAACmB,QAAQ,iBACTzB,IAAA,CAACJ,eAAe;QAAC6B,QAAQ,EAAEA,QAAS;QAACnB,UAAU,EAAEA;MAAW,CAAE,CAC/D;IAAA,CACc;EAAC,CACL,CAAC;AAEpB,CACF,CAAC;AAEDa,WAAW,CAACiB,WAAW,GAAG,aAAa;AAEvC,MAAMP,MAAM,GAAG1C,UAAU,CAACkD,MAAM,CAAC;EAC/BC,OAAO,EAAE;IACPC,QAAQ,EAAE;EACZ,CAAC;EACDT,MAAM,EAAE;IACNU,iBAAiB,EAAEjD,aAAa,CAAC,SAAS,CAAC;IAC3CkD,eAAe,EAAElD,aAAa,CAAC,QAAQ,CAAC;IACxCmD,YAAY,EAAEnD,aAAa,CAAC,SAAS;EACvC,CAAC;EACDyC,cAAc,EAAE;IACdW,eAAe,EAAEnD,kBAAkB,CAACoD;EACtC,CAAC;EACDb,UAAU,EAAE;IACVY,eAAe,EAAEnD,kBAAkB,CAACqD;EACtC,CAAC;EACDV,OAAO,EAAE;IACPK,iBAAiB,EAAEjD,aAAa,CAAC,SAAS;EAC5C,CAAC;EACDuD,SAAS,EAAE;IAAEC,GAAG,EAAE,CAAC;IAAEC,SAAS,EAAE;EAAE,CAAC;EACnCC,IAAI,EAAE;IACJP,YAAY,EAAEnD,aAAa,CAAC,SAAS,CAAC;IACtC2D,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,oBAAoB;IACjCR,eAAe,EAAErD,OAAO,CAAC8D,KAAK;IAC9BC,QAAQ,EAAE;EACZ,CAAC;EACDC,SAAS,EAAE;IACTC,KAAK,EAAE,MAAM;IACbC,WAAW,EAAE,EAAE,GAAG;EACpB,CAAC;EACDC,QAAQ,EAAE;IACRjB,iBAAiB,EAAEjD,aAAa,CAAC,SAAS,CAAC;IAC3CkD,eAAe,EAAElD,aAAa,CAAC,QAAQ,CAAC;IACxCwD,GAAG,EAAE;EACP;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback, useMemo } from 'react';
4
+ import { DeviceEventEmitter, StyleSheet } from 'react-native';
5
+ import { KColors, KContainer, KImage, KLabel, KRadiusValue, KSpacingValue } from '@droppii/libs';
6
+ import { MessageType } from '@droppii/openim-rn-client-sdk';
7
+ import { getMessagePreviewParts, getReplySenderName, parseUrlMetadata } from "../../../utils/messageUtils.js";
8
+ import { getFileIcon, getMimeType } from "../../../utils/imageUtils.js";
9
+ import { useUserStore } from "../../../store/index.js";
10
+ import { useChatDetailContext } from "../../../context/index.js";
11
+ import { ChatEvent } from "../../../types/events.js";
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ /**
14
+ * The "replying to ..." strip — shared by QuotedMessage (message.quoteElem)
15
+ * and TextMessage (message.atTextElem?.quoteMessage, for the mention+quote
16
+ * combo). Extracted so both content types render the exact same preview
17
+ * instead of two copies drifting apart.
18
+ */
19
+ export const QuotedMessagePreviewStrip = /*#__PURE__*/memo(({
20
+ quotedMessage
21
+ }) => {
22
+ const {
23
+ conversation
24
+ } = useChatDetailContext();
25
+ const currentUserId = useUserStore(s => s.user?.userID);
26
+ const messagePreview = getMessagePreviewParts(quotedMessage);
27
+ const imageUrl = useMemo(() => {
28
+ switch (quotedMessage?.contentType) {
29
+ case MessageType.PictureMessage:
30
+ return quotedMessage?.pictureElem?.snapshotPicture?.url || '';
31
+ case MessageType.VideoMessage:
32
+ return quotedMessage?.videoElem?.snapshotUrl || '';
33
+ case MessageType.UrlTextMessage:
34
+ {
35
+ const metadata = parseUrlMetadata(quotedMessage?.ex);
36
+ return metadata?.image || '';
37
+ }
38
+ default:
39
+ return '';
40
+ }
41
+ }, [quotedMessage]);
42
+ const iconSource = useMemo(() => {
43
+ if (quotedMessage?.contentType !== MessageType.FileMessage) return '';
44
+ const mimeType = getMimeType(quotedMessage?.fileElem?.fileName || '');
45
+ return getFileIcon(mimeType);
46
+ }, [quotedMessage]);
47
+ const handlePress = useCallback(() => {
48
+ DeviceEventEmitter.emit(ChatEvent.ScrollToMessage, {
49
+ clientMessageId: quotedMessage?.clientMsgID || ''
50
+ });
51
+ }, [quotedMessage]);
52
+ return /*#__PURE__*/_jsxs(KContainer.Touchable, {
53
+ style: styles.quotedContainer,
54
+ onPress: handlePress,
55
+ children: [/*#__PURE__*/_jsx(KContainer.View, {
56
+ style: styles.dot
57
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
58
+ visible: !!imageUrl,
59
+ children: /*#__PURE__*/_jsxs(KContainer.View, {
60
+ style: styles.imageContainer,
61
+ children: [/*#__PURE__*/_jsx(KImage.Base, {
62
+ uri: imageUrl,
63
+ style: styles.imageContainer
64
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
65
+ visible: quotedMessage?.contentType === MessageType.VideoMessage,
66
+ children: /*#__PURE__*/_jsx(KContainer.View, {
67
+ style: styles.playIconContainer,
68
+ children: /*#__PURE__*/_jsx(KContainer.View, {
69
+ style: styles.playIcon,
70
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
71
+ name: "play-b",
72
+ size: 12,
73
+ color: KColors.white
74
+ })
75
+ })
76
+ })
77
+ })]
78
+ })
79
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
80
+ visible: !!iconSource,
81
+ children: /*#__PURE__*/_jsx(KImage.Base, {
82
+ uri: iconSource,
83
+ style: styles.icon,
84
+ resizeMode: "contain"
85
+ })
86
+ }), /*#__PURE__*/_jsxs(KContainer.View, {
87
+ flexS: 1,
88
+ style: styles.content,
89
+ children: [/*#__PURE__*/_jsx(KLabel.Text, {
90
+ typo: "TextNmMedium",
91
+ numberOfLines: 1,
92
+ children: getReplySenderName(quotedMessage, currentUserId, conversation, true)
93
+ }), /*#__PURE__*/_jsx(KLabel.Text, {
94
+ typo: "TextSmNormal",
95
+ color: KColors.gray.light,
96
+ numberOfLines: 1,
97
+ ...messagePreview.textProps,
98
+ children: messagePreview.text
99
+ })]
100
+ })]
101
+ });
102
+ });
103
+ QuotedMessagePreviewStrip.displayName = 'QuotedMessagePreviewStrip';
104
+ const styles = StyleSheet.create({
105
+ quotedContainer: {
106
+ backgroundColor: KColors.white,
107
+ flexDirection: 'row',
108
+ alignItems: 'center',
109
+ gap: KSpacingValue['0.5rem'],
110
+ borderTopRightRadius: KRadiusValue['3x'],
111
+ borderBottomRightRadius: KRadiusValue['3x'],
112
+ paddingRight: KSpacingValue['0.5rem'],
113
+ maxWidth: '100%'
114
+ },
115
+ dot: {
116
+ width: 3,
117
+ height: '100%',
118
+ backgroundColor: KColors.palette.grayCool.w200,
119
+ borderRadius: KRadiusValue.x,
120
+ marginRight: -2
121
+ },
122
+ content: {
123
+ paddingHorizontal: KSpacingValue['0.25rem'],
124
+ paddingVertical: KSpacingValue['0.25rem']
125
+ },
126
+ icon: {
127
+ width: 24,
128
+ height: 24
129
+ },
130
+ imageContainer: {
131
+ width: 42,
132
+ height: 42,
133
+ borderRadius: KRadiusValue['2x']
134
+ },
135
+ playIconContainer: {
136
+ position: 'absolute',
137
+ top: 0,
138
+ left: 0,
139
+ right: 0,
140
+ bottom: 0,
141
+ justifyContent: 'center',
142
+ alignItems: 'center'
143
+ },
144
+ playIcon: {
145
+ borderRadius: 8,
146
+ padding: KSpacingValue['0.25rem'],
147
+ backgroundColor: KColors.hexToRgba(KColors.black, 0.6),
148
+ justifyContent: 'center',
149
+ alignItems: 'center'
150
+ }
151
+ });
152
+ //# sourceMappingURL=QuotedMessagePreviewStrip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","useMemo","DeviceEventEmitter","StyleSheet","KColors","KContainer","KImage","KLabel","KRadiusValue","KSpacingValue","MessageType","getMessagePreviewParts","getReplySenderName","parseUrlMetadata","getFileIcon","getMimeType","useUserStore","useChatDetailContext","ChatEvent","jsx","_jsx","jsxs","_jsxs","QuotedMessagePreviewStrip","quotedMessage","conversation","currentUserId","s","user","userID","messagePreview","imageUrl","contentType","PictureMessage","pictureElem","snapshotPicture","url","VideoMessage","videoElem","snapshotUrl","UrlTextMessage","metadata","ex","image","iconSource","FileMessage","mimeType","fileElem","fileName","handlePress","emit","ScrollToMessage","clientMessageId","clientMsgID","Touchable","style","styles","quotedContainer","onPress","children","View","dot","VisibleView","visible","imageContainer","Base","uri","playIconContainer","playIcon","VectorIcons","name","size","color","white","icon","resizeMode","flexS","content","Text","typo","numberOfLines","gray","light","textProps","text","displayName","create","backgroundColor","flexDirection","alignItems","gap","borderTopRightRadius","borderBottomRightRadius","paddingRight","maxWidth","width","height","palette","grayCool","w200","borderRadius","x","marginRight","paddingHorizontal","paddingVertical","position","top","left","right","bottom","justifyContent","padding","hexToRgba","black"],"sourceRoot":"../../../../../src","sources":["components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,35 +1,129 @@
1
1
  "use strict";
2
2
 
3
- import { memo } from 'react';
4
- import { KContainer, KLabel } from '@droppii/libs';
3
+ import { memo, useMemo } from 'react';
4
+ import { Text } from 'react-native';
5
+ import { MessageType } from '@droppii/openim-rn-client-sdk';
6
+ import { KContainer, KLabel, KColors } from '@droppii/libs';
5
7
  import { getMessageText } from "../../../utils/legendListMessage.js";
6
8
  import { CHAT_BUBBLE_COLORS } from "../../../screens/chat-detail/constants.js";
7
9
  import { messageStyles } from "../styles.js";
8
10
  import { getTailCornerStyle } from "../bubbleTail.utils.js";
9
11
  import { BubbleTailRow } from "../BubbleTailRow.js";
10
- import { jsx as _jsx } from "react/jsx-runtime";
12
+ import { StyleSheet } from 'react-native';
13
+ import { tokenize } from "../../../utils/mentions/index.js";
14
+ import { deserializeMentionRanges } from "../../../utils/mentionSerializer.js";
15
+ import { QuotedMessagePreviewStrip } from "../quotedMessage/QuotedMessagePreviewStrip.js";
16
+ import { LinkPreviewCard } from "../linkMessage/LinkPreviewCard.js";
17
+ import { extractUrls, splitTextByUrls } from "../../../utils/url.js";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ const parseMessageEx = ex => {
20
+ if (!ex) return undefined;
21
+ try {
22
+ return JSON.parse(ex);
23
+ } catch {
24
+ return undefined;
25
+ }
26
+ };
11
27
  export const TextMessage = /*#__PURE__*/memo(({
12
28
  message,
13
29
  isOutgoing,
14
30
  isHighlighted,
31
+ onPressUrl,
15
32
  groupPosition
16
33
  }) => {
17
34
  const messageText = getMessageText(message);
35
+ const isAtTextMessage = message.contentType === MessageType.AtTextMessage;
36
+
37
+ // Both the reply-preview strip and the link-preview card below piggyback
38
+ // on an AtTextMessage instead of getting their own content type — OpenIM
39
+ // content types are mutually exclusive (AtText vs Quote vs UrlText), so
40
+ // once mention picks AtText (to keep native tag/notify semantics — see
41
+ // useSendMessage.ts), quote rides along via the native
42
+ // AtTextElem.quoteMessage field and the URL card rides along via our own
43
+ // ex.urlMetadata channel (already attached unconditionally on send).
44
+ const quotedMessage = isAtTextMessage ? message.atTextElem?.quoteMessage : undefined;
45
+ const parsedEx = useMemo(() => isAtTextMessage ? parseMessageEx(message.ex) : undefined, [isAtTextMessage, message.ex]);
46
+ const urlMetadata = parsedEx?.urlMetadata;
47
+ const mentions = useMemo(() => {
48
+ if (!isAtTextMessage || !message.atTextElem) return [];
49
+ // Wrapped under `offsets` — matches the wire shape other Droppii
50
+ // clients (e.g. the web/CRM app) already send (see
51
+ // IMessageItemEx.mentions doc comment for how this was confirmed).
52
+ return deserializeMentionRanges(message.atTextElem, parsedEx?.mentions?.offsets);
53
+ }, [isAtTextMessage, message.atTextElem, parsedEx]);
54
+ const segments = useMemo(() => mentions.length > 0 ? tokenize(messageText, mentions) : null, [mentions, messageText]);
55
+
56
+ // Scoped to the mention+URL combo only (`segments` implies mentions are
57
+ // present) — a plain TextMessage with no mention falls through to
58
+ // `messageText` unchanged below, same as before this feature existed.
59
+ // Widening this to auto-linkify every TextMessage is a separate,
60
+ // deliberate product decision, not a side effect of this fix.
61
+ const urls = useMemo(() => segments ? extractUrls(messageText) : [], [segments, messageText]);
18
62
  if (!messageText?.trim()) {
19
63
  return null;
20
64
  }
65
+
66
+ // A plain-text run (the space between two mentions) may itself contain
67
+ // a URL — split further so it gets the same tappable/colored treatment
68
+ // LinkMessage gives a pure URL message, instead of sitting there as
69
+ // unstyled black text next to a colored mention.
70
+ const renderTextRun = (text, keyPrefix) => {
71
+ if (!urls.length) return /*#__PURE__*/_jsx(Text, {
72
+ children: text
73
+ }, keyPrefix);
74
+ return splitTextByUrls(text, urls).map((part, i) => part.isUrl ? /*#__PURE__*/_jsx(Text, {
75
+ style: urlTextStyle,
76
+ onPress: () => onPressUrl?.(part.text),
77
+ children: part.text
78
+ }, `${keyPrefix}-url-${i}`) : /*#__PURE__*/_jsx(Text, {
79
+ children: part.text
80
+ }, `${keyPrefix}-text-${i}`));
81
+ };
21
82
  return /*#__PURE__*/_jsx(BubbleTailRow, {
22
83
  isOutgoing: isOutgoing,
23
84
  groupPosition: groupPosition,
24
- children: /*#__PURE__*/_jsx(KContainer.View, {
25
- style: [messageStyles.bubble, isOutgoing ? messageStyles.bubbleSent : messageStyles.bubbleReceived, isHighlighted && messageStyles.bubbleHighlighted, getTailCornerStyle(isOutgoing, groupPosition)],
26
- children: /*#__PURE__*/_jsx(KLabel.Text, {
85
+ children: /*#__PURE__*/_jsxs(KContainer.View, {
86
+ style: [messageStyles.bubble, styles.bubbleContent, isOutgoing ? messageStyles.bubbleSent : messageStyles.bubbleReceived, isHighlighted && messageStyles.bubbleHighlighted, getTailCornerStyle(isOutgoing, groupPosition)],
87
+ children: [quotedMessage && /*#__PURE__*/_jsx(QuotedMessagePreviewStrip, {
88
+ quotedMessage: quotedMessage
89
+ }), /*#__PURE__*/_jsx(KLabel.Text, {
27
90
  typo: "TextMdNormal",
28
91
  color: CHAT_BUBBLE_COLORS.text,
29
- children: messageText
30
- })
92
+ children: segments ? segments.map((segment, index) => segment.type === 'mention' ? /*#__PURE__*/_jsx(Text, {
93
+ style: mentionTextStyle,
94
+ children: `@${segment.mention.displayName}`
95
+ }, segment.mention.id) : renderTextRun(segment.text, `seg-${index}`)) : messageText
96
+ }), !!urlMetadata && /*#__PURE__*/_jsx(LinkPreviewCard, {
97
+ metadata: urlMetadata,
98
+ onPressUrl: onPressUrl
99
+ })]
31
100
  })
32
101
  });
33
102
  });
34
103
  TextMessage.displayName = 'TextMessage';
104
+ const styles = StyleSheet.create({
105
+ bubbleContent: {
106
+ gap: 4
107
+ },
108
+ timeLabel: {
109
+ gap: 4,
110
+ marginTop: 2
111
+ }
112
+ });
113
+
114
+ // Same highlight color as the composer (MentionHighlightAdapter) and the
115
+ // Figma screenshots. This is a read-only <Text>, not an editable
116
+ // TextInput, so none of the nested-Text-in-TextInput bug class applies —
117
+ // nesting styled Text here is unconditionally safe.
118
+ const mentionTextStyle = {
119
+ color: KColors.palette.primary.w400
120
+ };
121
+
122
+ // Same color LinkMessage uses for a URL substring — a mention message's
123
+ // plain-text run can contain a URL too (mention+URL combo, see
124
+ // useSendMessage.ts's doc comment), and it should look tappable/colored
125
+ // the same way there as it does in a pure UrlTextMessage.
126
+ const urlTextStyle = {
127
+ color: KColors.primary.normal
128
+ };
35
129
  //# sourceMappingURL=index.js.map