@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,188 @@
1
+ "use strict";
2
+
3
+ import { diffTextChange } from "./mentionDiff.js";
4
+ let mentionIdCounter = 0;
5
+ const nextMentionId = () => `mention-${Date.now()}-${mentionIdCounter++}`;
6
+
7
+ /**
8
+ * Replaces the active "@query" range with "@DisplayName " and commits a new
9
+ * Mention. The trailing space is deliberately excluded from the mention's
10
+ * [start,end) range — it's a plain separator, not part of the token. This
11
+ * keeps the data model simple (no "our space" vs "user-typed space"
12
+ * special-casing) at the cost of removing a mention immediately after
13
+ * insertion taking two backspaces (first eats the space, second — now
14
+ * touching the mention's actual range — triggers atomic removal). Matches
15
+ * the spec's own fixture: "Hello @Thinh" with NO trailing space, cursor at
16
+ * the end, backspace removes the whole mention in one step, since there's
17
+ * no space to consume first.
18
+ */
19
+ export function insertMention(text, mentions, activeMention, selected) {
20
+ const {
21
+ start,
22
+ end
23
+ } = activeMention;
24
+ const inserted = `@${selected.displayName} `;
25
+ const newText = text.slice(0, start) + inserted + text.slice(end);
26
+ const delta = inserted.length - (end - start);
27
+ const newMention = {
28
+ id: nextMentionId(),
29
+ userId: selected.userId,
30
+ displayName: selected.displayName,
31
+ start,
32
+ end: start + 1 + selected.displayName.length
33
+ };
34
+
35
+ // m.start >= end is safe: an existing committed mention can never overlap
36
+ // an activeMention's range — findActiveMention's '@'/boundary bail-out
37
+ // guarantees the active query never reaches back into a prior mention.
38
+ const shifted = mentions.map(m => m.start >= end ? {
39
+ ...m,
40
+ start: m.start + delta,
41
+ end: m.end + delta
42
+ } : m);
43
+ const nextMentions = [...shifted, newMention].sort((a, b) => a.start - b.start);
44
+ const cursor = newMention.end + 1; // after the trailing space
45
+
46
+ return {
47
+ text: newText,
48
+ mentions: nextMentions,
49
+ cursor
50
+ };
51
+ }
52
+ /**
53
+ * Re-derives mention ranges after an edit, given only the before/after full
54
+ * strings (RN's onChangeText carries no delta). Diffs the two strings to
55
+ * localize the changed region, then per mention: fully before the change ->
56
+ * kept as-is; fully after -> shifted by the length delta; any overlap at
57
+ * all -> invalidated (dropped, never left partially stale).
58
+ *
59
+ * Boundary semantics matter here: `m.end <= removedStart` (touching-but-
60
+ * before) is "kept", and `m.start >= removedEnd` (touching-but-after) is
61
+ * "shift" — so typing immediately after a mention, or deleting text
62
+ * strictly before one, never invalidates it. Anything else, even a
63
+ * 1-character overlap, does.
64
+ */
65
+ export function reconcileMentions({
66
+ previousText,
67
+ nextText,
68
+ mentions
69
+ }) {
70
+ if (nextText === previousText || mentions.length === 0) {
71
+ return {
72
+ mentions,
73
+ invalidated: []
74
+ };
75
+ }
76
+ const {
77
+ removedStart,
78
+ removedEnd
79
+ } = diffTextChange(previousText, nextText);
80
+ const delta = nextText.length - previousText.length;
81
+ const kept = [];
82
+ const invalidated = [];
83
+ for (const m of mentions) {
84
+ if (m.end <= removedStart) {
85
+ kept.push(m);
86
+ } else if (m.start >= removedEnd) {
87
+ kept.push({
88
+ ...m,
89
+ start: m.start + delta,
90
+ end: m.end + delta
91
+ });
92
+ } else {
93
+ invalidated.push(m);
94
+ }
95
+ }
96
+ return {
97
+ mentions: kept,
98
+ invalidated
99
+ };
100
+ }
101
+
102
+ /**
103
+ * Expands a delete/replace range so it fully swallows any mention it
104
+ * merely intersects — this is what makes "atomic delete" actually happen.
105
+ * RN's Old-Architecture TextInput can't intercept a keypress before the
106
+ * native buffer mutates, so this doesn't run as a true pre-mutation guard;
107
+ * it runs on the range diffTextChange computed from an already-applied
108
+ * edit, and the caller (useMentionComposer) uses the expanded range to
109
+ * rebuild the text from previousText before React re-renders — see that
110
+ * hook's doc comment for the full repair sequence.
111
+ *
112
+ * The fixed-point loop is needed for the adjacent-mentions case: expanding
113
+ * to cover one mention can newly overlap a neighbor with zero gap between
114
+ * them (e.g. loaded from server data with no separator).
115
+ */
116
+ export function normalizeDeleteRange(range, mentions) {
117
+ let start = Math.min(range.start, range.end);
118
+ let end = Math.max(range.start, range.end);
119
+ let changed = true;
120
+ while (changed) {
121
+ changed = false;
122
+ for (const m of mentions) {
123
+ const overlaps = m.start < end && m.end > start;
124
+ if (overlaps && (m.start < start || m.end > end)) {
125
+ start = Math.min(start, m.start);
126
+ end = Math.max(end, m.end);
127
+ changed = true;
128
+ }
129
+ }
130
+ }
131
+ return {
132
+ start,
133
+ end
134
+ };
135
+ }
136
+ /**
137
+ * The full "atomic delete" pipeline, extracted as a pure function so it's
138
+ * unit-testable without a live TextInput: diff previousText -> nextTextRaw,
139
+ * expand the removed range to cover any touched mention, and if it
140
+ * expanded, discard nextTextRaw for that span and rebuild atomically from
141
+ * previousText — otherwise just diff-and-shift normally.
142
+ *
143
+ * This is what `useMentionComposer` (Phase A2) calls from its
144
+ * ref-buffered onChangeText reconciliation step; it also imperatively
145
+ * calls the native `setSelection(cursor, cursor)` after, which is RN-only
146
+ * and stays out of this pure function.
147
+ */
148
+ export function applyTextChange(previousText, mentions, nextTextRaw) {
149
+ const {
150
+ removedStart,
151
+ removedEnd,
152
+ insertedEnd
153
+ } = diffTextChange(previousText, nextTextRaw);
154
+ const expanded = normalizeDeleteRange({
155
+ start: removedStart,
156
+ end: removedEnd
157
+ }, mentions);
158
+ if (expanded.start !== removedStart || expanded.end !== removedEnd) {
159
+ const finalText = previousText.slice(0, expanded.start) + previousText.slice(expanded.end);
160
+ const {
161
+ mentions: keptMentions
162
+ } = reconcileMentions({
163
+ previousText,
164
+ nextText: finalText,
165
+ mentions
166
+ });
167
+ return {
168
+ text: finalText,
169
+ mentions: keptMentions,
170
+ cursor: expanded.start,
171
+ mentionRemoved: true
172
+ };
173
+ }
174
+ const {
175
+ mentions: nextMentions
176
+ } = reconcileMentions({
177
+ previousText,
178
+ nextText: nextTextRaw,
179
+ mentions
180
+ });
181
+ return {
182
+ text: nextTextRaw,
183
+ mentions: nextMentions,
184
+ cursor: insertedEnd,
185
+ mentionRemoved: false
186
+ };
187
+ }
188
+ //# sourceMappingURL=mentionRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["diffTextChange","mentionIdCounter","nextMentionId","Date","now","insertMention","text","mentions","activeMention","selected","start","end","inserted","displayName","newText","slice","delta","length","newMention","id","userId","shifted","map","m","nextMentions","sort","a","b","cursor","reconcileMentions","previousText","nextText","invalidated","removedStart","removedEnd","kept","push","normalizeDeleteRange","range","Math","min","max","changed","overlaps","applyTextChange","nextTextRaw","insertedEnd","expanded","finalText","keptMentions","mentionRemoved"],"sourceRoot":"../../../../src","sources":["utils/mentions/mentionRange.ts"],"mappings":";;AACA,SAASA,cAAc,QAAQ,kBAAe;AAQ9C,IAAIC,gBAAgB,GAAG,CAAC;AACxB,MAAMC,aAAa,GAAGA,CAAA,KAAM,WAAWC,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIH,gBAAgB,EAAE,EAAE;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,aAAaA,CAC3BC,IAAY,EACZC,QAAmB,EACnBC,aAA4B,EAC5BC,QAAiD,EAC5B;EACrB,MAAM;IAAEC,KAAK;IAAEC;EAAI,CAAC,GAAGH,aAAa;EACpC,MAAMI,QAAQ,GAAG,IAAIH,QAAQ,CAACI,WAAW,GAAG;EAC5C,MAAMC,OAAO,GAAGR,IAAI,CAACS,KAAK,CAAC,CAAC,EAAEL,KAAK,CAAC,GAAGE,QAAQ,GAAGN,IAAI,CAACS,KAAK,CAACJ,GAAG,CAAC;EACjE,MAAMK,KAAK,GAAGJ,QAAQ,CAACK,MAAM,IAAIN,GAAG,GAAGD,KAAK,CAAC;EAE7C,MAAMQ,UAAmB,GAAG;IAC1BC,EAAE,EAAEjB,aAAa,CAAC,CAAC;IACnBkB,MAAM,EAAEX,QAAQ,CAACW,MAAM;IACvBP,WAAW,EAAEJ,QAAQ,CAACI,WAAW;IACjCH,KAAK;IACLC,GAAG,EAAED,KAAK,GAAG,CAAC,GAAGD,QAAQ,CAACI,WAAW,CAACI;EACxC,CAAC;;EAED;EACA;EACA;EACA,MAAMI,OAAO,GAAGd,QAAQ,CAACe,GAAG,CAAEC,CAAC,IAC7BA,CAAC,CAACb,KAAK,IAAIC,GAAG,GAAG;IAAE,GAAGY,CAAC;IAAEb,KAAK,EAAEa,CAAC,CAACb,KAAK,GAAGM,KAAK;IAAEL,GAAG,EAAEY,CAAC,CAACZ,GAAG,GAAGK;EAAM,CAAC,GAAGO,CAC1E,CAAC;EAED,MAAMC,YAAY,GAAG,CAAC,GAAGH,OAAO,EAAEH,UAAU,CAAC,CAACO,IAAI,CAChD,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAChB,KAAK,GAAGiB,CAAC,CAACjB,KACxB,CAAC;EACD,MAAMkB,MAAM,GAAGV,UAAU,CAACP,GAAG,GAAG,CAAC,CAAC,CAAC;;EAEnC,OAAO;IAAEL,IAAI,EAAEQ,OAAO;IAAEP,QAAQ,EAAEiB,YAAY;IAAEI;EAAO,CAAC;AAC1D;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAC;EAChCC,YAAY;EACZC,QAAQ;EACRxB;AAKF,CAAC,EAA2B;EAC1B,IAAIwB,QAAQ,KAAKD,YAAY,IAAIvB,QAAQ,CAACU,MAAM,KAAK,CAAC,EAAE;IACtD,OAAO;MAAEV,QAAQ;MAAEyB,WAAW,EAAE;IAAG,CAAC;EACtC;EAEA,MAAM;IAAEC,YAAY;IAAEC;EAAW,CAAC,GAAGlC,cAAc,CAAC8B,YAAY,EAAEC,QAAQ,CAAC;EAC3E,MAAMf,KAAK,GAAGe,QAAQ,CAACd,MAAM,GAAGa,YAAY,CAACb,MAAM;EAEnD,MAAMkB,IAAe,GAAG,EAAE;EAC1B,MAAMH,WAAsB,GAAG,EAAE;EAEjC,KAAK,MAAMT,CAAC,IAAIhB,QAAQ,EAAE;IACxB,IAAIgB,CAAC,CAACZ,GAAG,IAAIsB,YAAY,EAAE;MACzBE,IAAI,CAACC,IAAI,CAACb,CAAC,CAAC;IACd,CAAC,MAAM,IAAIA,CAAC,CAACb,KAAK,IAAIwB,UAAU,EAAE;MAChCC,IAAI,CAACC,IAAI,CAAC;QAAE,GAAGb,CAAC;QAAEb,KAAK,EAAEa,CAAC,CAACb,KAAK,GAAGM,KAAK;QAAEL,GAAG,EAAEY,CAAC,CAACZ,GAAG,GAAGK;MAAM,CAAC,CAAC;IACjE,CAAC,MAAM;MACLgB,WAAW,CAACI,IAAI,CAACb,CAAC,CAAC;IACrB;EACF;EAEA,OAAO;IAAEhB,QAAQ,EAAE4B,IAAI;IAAEH;EAAY,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,oBAAoBA,CAClCC,KAAqC,EACrC/B,QAAmB,EACa;EAChC,IAAIG,KAAK,GAAG6B,IAAI,CAACC,GAAG,CAACF,KAAK,CAAC5B,KAAK,EAAE4B,KAAK,CAAC3B,GAAG,CAAC;EAC5C,IAAIA,GAAG,GAAG4B,IAAI,CAACE,GAAG,CAACH,KAAK,CAAC5B,KAAK,EAAE4B,KAAK,CAAC3B,GAAG,CAAC;EAE1C,IAAI+B,OAAO,GAAG,IAAI;EAClB,OAAOA,OAAO,EAAE;IACdA,OAAO,GAAG,KAAK;IACf,KAAK,MAAMnB,CAAC,IAAIhB,QAAQ,EAAE;MACxB,MAAMoC,QAAQ,GAAGpB,CAAC,CAACb,KAAK,GAAGC,GAAG,IAAIY,CAAC,CAACZ,GAAG,GAAGD,KAAK;MAC/C,IAAIiC,QAAQ,KAAKpB,CAAC,CAACb,KAAK,GAAGA,KAAK,IAAIa,CAAC,CAACZ,GAAG,GAAGA,GAAG,CAAC,EAAE;QAChDD,KAAK,GAAG6B,IAAI,CAACC,GAAG,CAAC9B,KAAK,EAAEa,CAAC,CAACb,KAAK,CAAC;QAChCC,GAAG,GAAG4B,IAAI,CAACE,GAAG,CAAC9B,GAAG,EAAEY,CAAC,CAACZ,GAAG,CAAC;QAC1B+B,OAAO,GAAG,IAAI;MAChB;IACF;EACF;EAEA,OAAO;IAAEhC,KAAK;IAAEC;EAAI,CAAC;AACvB;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASiC,eAAeA,CAC7Bd,YAAoB,EACpBvB,QAAmB,EACnBsC,WAAmB,EACI;EACvB,MAAM;IAAEZ,YAAY;IAAEC,UAAU;IAAEY;EAAY,CAAC,GAAG9C,cAAc,CAC9D8B,YAAY,EACZe,WACF,CAAC;EACD,MAAME,QAAQ,GAAGV,oBAAoB,CACnC;IAAE3B,KAAK,EAAEuB,YAAY;IAAEtB,GAAG,EAAEuB;EAAW,CAAC,EACxC3B,QACF,CAAC;EAED,IAAIwC,QAAQ,CAACrC,KAAK,KAAKuB,YAAY,IAAIc,QAAQ,CAACpC,GAAG,KAAKuB,UAAU,EAAE;IAClE,MAAMc,SAAS,GACblB,YAAY,CAACf,KAAK,CAAC,CAAC,EAAEgC,QAAQ,CAACrC,KAAK,CAAC,GAAGoB,YAAY,CAACf,KAAK,CAACgC,QAAQ,CAACpC,GAAG,CAAC;IAC1E,MAAM;MAAEJ,QAAQ,EAAE0C;IAAa,CAAC,GAAGpB,iBAAiB,CAAC;MACnDC,YAAY;MACZC,QAAQ,EAAEiB,SAAS;MACnBzC;IACF,CAAC,CAAC;IACF,OAAO;MACLD,IAAI,EAAE0C,SAAS;MACfzC,QAAQ,EAAE0C,YAAY;MACtBrB,MAAM,EAAEmB,QAAQ,CAACrC,KAAK;MACtBwC,cAAc,EAAE;IAClB,CAAC;EACH;EAEA,MAAM;IAAE3C,QAAQ,EAAEiB;EAAa,CAAC,GAAGK,iBAAiB,CAAC;IACnDC,YAAY;IACZC,QAAQ,EAAEc,WAAW;IACrBtC;EACF,CAAC,CAAC;EACF,OAAO;IACLD,IAAI,EAAEuC,WAAW;IACjBtC,QAAQ,EAAEiB,YAAY;IACtBI,MAAM,EAAEkB,WAAW;IACnBI,cAAc,EAAE;EAClB,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Converts edit-time state (flat string + Mention[] ranges) into an
5
+ * ordered list of plain-text runs and mention tokens — the shape both the
6
+ * composer's highlight renderer (Phase A3) and the sent-message bubble
7
+ * renderer (Phase B3) need to produce their styled `<Text>` children.
8
+ * Shared by both so the segment-splitting logic exists exactly once.
9
+ *
10
+ * O(m log m) sort + O(n) slicing (m = mention count, n = text length) —
11
+ * trivial at the sizes this feature targets (≤50 mentions, ≤2000 chars).
12
+ *
13
+ * Precondition: `mentions` is non-overlapping, guaranteed by Phase A1's own
14
+ * pipeline (insertMention/reconcileMentions never produce overlaps). The
15
+ * `m.start < cursor` skip below is a defensive backstop for
16
+ * externally-sourced data (a message loaded for editing, or an `ex` blob
17
+ * serialized by an older app version) — not a correctness dependency for
18
+ * the live composer.
19
+ */
20
+ export function tokenize(text, mentions) {
21
+ const sorted = [...mentions].sort((a, b) => a.start - b.start);
22
+ const segments = [];
23
+ let cursor = 0;
24
+ for (const m of sorted) {
25
+ if (m.start < cursor) continue; // overlapping/malformed entry — skip rather than produce a negative-length slice
26
+ if (m.start > cursor) {
27
+ segments.push({
28
+ type: 'text',
29
+ text: text.slice(cursor, m.start),
30
+ start: cursor,
31
+ end: m.start
32
+ });
33
+ }
34
+ segments.push({
35
+ type: 'mention',
36
+ mention: m
37
+ });
38
+ cursor = m.end;
39
+ }
40
+ if (cursor < text.length) {
41
+ segments.push({
42
+ type: 'text',
43
+ text: text.slice(cursor),
44
+ start: cursor,
45
+ end: text.length
46
+ });
47
+ }
48
+ return segments;
49
+ }
50
+ //# sourceMappingURL=mentionTokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tokenize","text","mentions","sorted","sort","a","b","start","segments","cursor","m","push","type","slice","end","mention","length"],"sourceRoot":"../../../../src","sources":["utils/mentions/mentionTokenize.ts"],"mappings":";;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,QAAQA,CAACC,IAAY,EAAEC,QAAmB,EAAa;EACrE,MAAMC,MAAM,GAAG,CAAC,GAAGD,QAAQ,CAAC,CAACE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CAAC;EAC9D,MAAMC,QAAmB,GAAG,EAAE;EAC9B,IAAIC,MAAM,GAAG,CAAC;EAEd,KAAK,MAAMC,CAAC,IAAIP,MAAM,EAAE;IACtB,IAAIO,CAAC,CAACH,KAAK,GAAGE,MAAM,EAAE,SAAS,CAAC;IAChC,IAAIC,CAAC,CAACH,KAAK,GAAGE,MAAM,EAAE;MACpBD,QAAQ,CAACG,IAAI,CAAC;QACZC,IAAI,EAAE,MAAM;QACZX,IAAI,EAAEA,IAAI,CAACY,KAAK,CAACJ,MAAM,EAAEC,CAAC,CAACH,KAAK,CAAC;QACjCA,KAAK,EAAEE,MAAM;QACbK,GAAG,EAAEJ,CAAC,CAACH;MACT,CAAC,CAAC;IACJ;IACAC,QAAQ,CAACG,IAAI,CAAC;MAAEC,IAAI,EAAE,SAAS;MAAEG,OAAO,EAAEL;IAAE,CAAC,CAAC;IAC9CD,MAAM,GAAGC,CAAC,CAACI,GAAG;EAChB;EAEA,IAAIL,MAAM,GAAGR,IAAI,CAACe,MAAM,EAAE;IACxBR,QAAQ,CAACG,IAAI,CAAC;MACZC,IAAI,EAAE,MAAM;MACZX,IAAI,EAAEA,IAAI,CAACY,KAAK,CAACJ,MAAM,CAAC;MACxBF,KAAK,EAAEE,MAAM;MACbK,GAAG,EAAEb,IAAI,CAACe;IACZ,CAAC,CAAC;EACJ;EAEA,OAAOR,QAAQ;AACjB","ignoreList":[]}
@@ -236,7 +236,12 @@ export const getMessagePreview = message => {
236
236
  const urlText = message?.urlTextElem?.content || message?.urlTextElem?.urls?.[0] || extractTextContent(message) || '';
237
237
  return urlText ? urlText : '';
238
238
  case MessageType.AtTextMessage:
239
- return extractTextContent(message);
239
+ // Bug: was calling extractTextContent(message) directly, which only
240
+ // checks message.textElem?.content (wrong elem for this type — always
241
+ // undefined here) before falling back to JSON.parse(message.content).
242
+ // atTextElem.text is the actual plain text for this message type —
243
+ // read it first, matching the QuoteMessage case right below.
244
+ return message?.atTextElem?.text || extractTextContent(message) || '';
240
245
  case MessageType.QuoteMessage:
241
246
  return message?.quoteElem?.text || extractTextContent(message) || '';
242
247
  case MessageType.RevokeMessage:
@@ -370,8 +375,16 @@ export const getNotificationOpUserNickname = message => {
370
375
  }
371
376
  };
372
377
  export const getSenderName = (message, currentUserId, conversation) => {
373
- const sender = currentUserId && message.sendID === currentUserId ? 'Bạn' : message?.senderNickname || getNotificationOpUserNickname(message) || (conversation?.peerType === PeerType.Bot ? conversation?.showName || '' : undefined);
374
- return sender || '';
378
+ const isCurrentUser = currentUserId && message.sendID === currentUserId;
379
+ if (isCurrentUser) return 'Bạn';
380
+ switch (conversation?.peerType) {
381
+ case PeerType.Bot:
382
+ case PeerType.Customer:
383
+ case PeerType.User:
384
+ return '';
385
+ default:
386
+ return message?.senderNickname || getNotificationOpUserNickname(message) || '';
387
+ }
375
388
  };
376
389
  export const getLastMessageText = ({
377
390
  message,
@@ -1 +1 @@
1
- {"version":3,"names":["MessageType","PeerType","formatDuration","getFileIcon","getMimeType","trans","isMessageRevoked","message","contentType","RevokeMessage","GROUP_NOTIFICATION_TEXT","GroupCreated","previewKey","bySenderKey","GroupInfoUpdated","MemberQuit","GroupOwnerTransferred","MemberKicked","MemberInvited","MemberEnter","GroupDismissed","GroupMemberMuted","GroupMemberCancelMuted","GroupMuted","GroupCancelMuted","GroupAnnouncementUpdated","GroupNameUpdated","GroupMemberSetToAdmin","PinMsg","GROUP_NOTIFICATION_TYPES","Object","keys","map","Number","parseNotificationDetail","notificationElem","detail","undefined","JSON","parse","formatMemberNames","members","names","member","nickname","filter","length","join","resolveNotificationText","base","params","newGroupName","group","groupName","invitedUserList","kickedUserList","memberName","newGroupOwner","changedUser","isPinned","extractTextContent","textElem","content","parsed","text","description","getMessagePreview","TextMessage","PictureMessage","VideoMessage","videoData","videoElem","duration","durationStr","FileMessage","fileName","fileElem","truncateMiddle","MergeMessage","mergeData","mergeElem","multiMessage","imageCount","msg","UrlTextMessage","urlText","urlTextElem","urls","AtTextMessage","QuoteMessage","quoteElem","CustomMessage","customElem","StickerMessage","FriendAdded","OANotification","BurnMessageChange","resolved","getMessagePreviewTextProps","ellipsizeMode","getMessagePreviewParts","textProps","getImageUrl","pictureElem","snapshotPicture","url","bigPicture","sourcePicture","getUrlMetadata","ex","urlMetadata","getPinnedMessagePreview","thumbnailUrl","mediaType","subtitleKey","snapshotUrl","fileIcon","image","firstImage","find","getNotificationOpUserNickname","opUser","quitUser","getSenderName","currentUserId","conversation","sender","sendID","senderNickname","peerType","Bot","showName","getLastMessageText","hideSenderPrefixForDirectChat","preview","resolvedNotification","hideSenderPrefix","User","getReplySenderName","isSent","parseUrlMetadata","name","maxLength","dotIndex","lastIndexOf","baseName","slice","ext","headLen","Math","ceil","tailLen","floor"],"sourceRoot":"../../../src","sources":["utils/messageUtils.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MessageType","PeerType","formatDuration","getFileIcon","getMimeType","trans","isMessageRevoked","message","contentType","RevokeMessage","GROUP_NOTIFICATION_TEXT","GroupCreated","previewKey","bySenderKey","GroupInfoUpdated","MemberQuit","GroupOwnerTransferred","MemberKicked","MemberInvited","MemberEnter","GroupDismissed","GroupMemberMuted","GroupMemberCancelMuted","GroupMuted","GroupCancelMuted","GroupAnnouncementUpdated","GroupNameUpdated","GroupMemberSetToAdmin","PinMsg","GROUP_NOTIFICATION_TYPES","Object","keys","map","Number","parseNotificationDetail","notificationElem","detail","undefined","JSON","parse","formatMemberNames","members","names","member","nickname","filter","length","join","resolveNotificationText","base","params","newGroupName","group","groupName","invitedUserList","kickedUserList","memberName","newGroupOwner","changedUser","isPinned","extractTextContent","textElem","content","parsed","text","description","getMessagePreview","TextMessage","PictureMessage","VideoMessage","videoData","videoElem","duration","durationStr","FileMessage","fileName","fileElem","truncateMiddle","MergeMessage","mergeData","mergeElem","multiMessage","imageCount","msg","UrlTextMessage","urlText","urlTextElem","urls","AtTextMessage","atTextElem","QuoteMessage","quoteElem","CustomMessage","customElem","StickerMessage","FriendAdded","OANotification","BurnMessageChange","resolved","getMessagePreviewTextProps","ellipsizeMode","getMessagePreviewParts","textProps","getImageUrl","pictureElem","snapshotPicture","url","bigPicture","sourcePicture","getUrlMetadata","ex","urlMetadata","getPinnedMessagePreview","thumbnailUrl","mediaType","subtitleKey","snapshotUrl","fileIcon","image","firstImage","find","getNotificationOpUserNickname","opUser","quitUser","getSenderName","currentUserId","conversation","isCurrentUser","sendID","peerType","Bot","Customer","User","senderNickname","getLastMessageText","hideSenderPrefixForDirectChat","preview","sender","resolvedNotification","hideSenderPrefix","getReplySenderName","isSent","showName","parseUrlMetadata","name","maxLength","dotIndex","lastIndexOf","baseName","slice","ext","headLen","Math","ceil","tailLen","floor"],"sourceRoot":"../../../src","sources":["utils/messageUtils.ts"],"mappings":"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","ignoreList":[]}
@@ -15,6 +15,39 @@ const URL_REGEX = new RegExp(`\\b(?:https?:\\/\\/|www\\.)[^\\s<>"']*[^\\s<>"',.!
15
15
  export function extractUrls(text) {
16
16
  return text.match(URL_REGEX) ?? [];
17
17
  }
18
+ /**
19
+ * Splits `text` into an ordered run of plain/URL parts — pure data, no
20
+ * JSX, so both LinkMessage (a whole message that's just text+URLs) and
21
+ * TextMessage (a mention message whose plain-text *segments* may also
22
+ * contain a URL) can render URL styling from the same source instead of
23
+ * two divergent implementations.
24
+ */
25
+ export function splitTextByUrls(text, urls) {
26
+ if (!urls.length) return [{
27
+ text,
28
+ isUrl: false
29
+ }];
30
+ const parts = [];
31
+ let remaining = text;
32
+ for (const url of urls) {
33
+ const idx = remaining.indexOf(url);
34
+ if (idx === -1) continue;
35
+ if (idx > 0) parts.push({
36
+ text: remaining.slice(0, idx),
37
+ isUrl: false
38
+ });
39
+ parts.push({
40
+ text: url,
41
+ isUrl: true
42
+ });
43
+ remaining = remaining.slice(idx + url.length);
44
+ }
45
+ if (remaining) parts.push({
46
+ text: remaining,
47
+ isUrl: false
48
+ });
49
+ return parts;
50
+ }
18
51
  export function normalizeUrl(url) {
19
52
  if (!/^https?:\/\//i.test(url)) {
20
53
  return `https://${url}`;
@@ -1 +1 @@
1
- {"version":3,"names":["GENERIC_TLDS","NEW_TLDS","CC_TLDS","TLD_LIST","URL_REGEX","RegExp","extractUrls","text","match","normalizeUrl","url","test","extractDomain"],"sourceRoot":"../../../src","sources":["utils/url.ts"],"mappings":";;AAAA;AACA,MAAMA,YAAY,GAChB,iFAAiF;;AAEnF;AACA,MAAMC,QAAQ,GACZ,0EAA0E,GAC1E,qEAAqE,GACrE,sEAAsE;;AAExE;AACA,MAAMC,OAAO,GACX,mCAAmC,GACnC,sCAAsC,GACtC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,iDAAiD;AAEnD,MAAMC,QAAQ,GAAG,GAAGH,YAAY,IAAIC,QAAQ,IAAIC,OAAO,EAAE;;AAEzD;AACA,MAAME,SAAS,GAAG,IAAIC,MAAM,CAC1B,8DAA8D,GAC5D,yDAAyDF,QAAQ,yEAAyE,EAC5I,GACF,CAAC;AAED,OAAO,SAASG,WAAWA,CAACC,IAAY,EAAY;EAClD,OAAOA,IAAI,CAACC,KAAK,CAACJ,SAAS,CAAC,IAAI,EAAE;AACpC;AAEA,OAAO,SAASK,YAAYA,CAACC,GAAW,EAAE;EACxC,IAAI,CAAC,eAAe,CAACC,IAAI,CAACD,GAAG,CAAC,EAAE;IAC9B,OAAO,WAAWA,GAAG,EAAE;EACzB;EACA,OAAOA,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,aAAaA,CAACF,GAAW,EAAU;EACjD,MAAMF,KAAK,GAAGE,GAAG,CAACF,KAAK,CAAC,uCAAuC,CAAC;EAChE,OAAOA,KAAK,GAAG,CAAC,CAAC,IAAIE,GAAG;AAC1B","ignoreList":[]}
1
+ {"version":3,"names":["GENERIC_TLDS","NEW_TLDS","CC_TLDS","TLD_LIST","URL_REGEX","RegExp","extractUrls","text","match","splitTextByUrls","urls","length","isUrl","parts","remaining","url","idx","indexOf","push","slice","normalizeUrl","test","extractDomain"],"sourceRoot":"../../../src","sources":["utils/url.ts"],"mappings":";;AAAA;AACA,MAAMA,YAAY,GAChB,iFAAiF;;AAEnF;AACA,MAAMC,QAAQ,GACZ,0EAA0E,GAC1E,qEAAqE,GACrE,sEAAsE;;AAExE;AACA,MAAMC,OAAO,GACX,mCAAmC,GACnC,sCAAsC,GACtC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,yCAAyC,GACzC,iDAAiD;AAEnD,MAAMC,QAAQ,GAAG,GAAGH,YAAY,IAAIC,QAAQ,IAAIC,OAAO,EAAE;;AAEzD;AACA,MAAME,SAAS,GAAG,IAAIC,MAAM,CAC1B,8DAA8D,GAC5D,yDAAyDF,QAAQ,yEAAyE,EAC5I,GACF,CAAC;AAED,OAAO,SAASG,WAAWA,CAACC,IAAY,EAAY;EAClD,OAAOA,IAAI,CAACC,KAAK,CAACJ,SAAS,CAAC,IAAI,EAAE;AACpC;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,eAAeA,CAACF,IAAY,EAAEG,IAAc,EAAiB;EAC3E,IAAI,CAACA,IAAI,CAACC,MAAM,EAAE,OAAO,CAAC;IAAEJ,IAAI;IAAEK,KAAK,EAAE;EAAM,CAAC,CAAC;EAEjD,MAAMC,KAAoB,GAAG,EAAE;EAC/B,IAAIC,SAAS,GAAGP,IAAI;EAEpB,KAAK,MAAMQ,GAAG,IAAIL,IAAI,EAAE;IACtB,MAAMM,GAAG,GAAGF,SAAS,CAACG,OAAO,CAACF,GAAG,CAAC;IAClC,IAAIC,GAAG,KAAK,CAAC,CAAC,EAAE;IAChB,IAAIA,GAAG,GAAG,CAAC,EAAEH,KAAK,CAACK,IAAI,CAAC;MAAEX,IAAI,EAAEO,SAAS,CAACK,KAAK,CAAC,CAAC,EAAEH,GAAG,CAAC;MAAEJ,KAAK,EAAE;IAAM,CAAC,CAAC;IACxEC,KAAK,CAACK,IAAI,CAAC;MAAEX,IAAI,EAAEQ,GAAG;MAAEH,KAAK,EAAE;IAAK,CAAC,CAAC;IACtCE,SAAS,GAAGA,SAAS,CAACK,KAAK,CAACH,GAAG,GAAGD,GAAG,CAACJ,MAAM,CAAC;EAC/C;EAEA,IAAIG,SAAS,EAAED,KAAK,CAACK,IAAI,CAAC;IAAEX,IAAI,EAAEO,SAAS;IAAEF,KAAK,EAAE;EAAM,CAAC,CAAC;EAC5D,OAAOC,KAAK;AACd;AAEA,OAAO,SAASO,YAAYA,CAACL,GAAW,EAAE;EACxC,IAAI,CAAC,eAAe,CAACM,IAAI,CAACN,GAAG,CAAC,EAAE;IAC9B,OAAO,WAAWA,GAAG,EAAE;EACzB;EACA,OAAOA,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,aAAaA,CAACP,GAAW,EAAU;EACjD,MAAMP,KAAK,GAAGO,GAAG,CAACP,KAAK,CAAC,uCAAuC,CAAC;EAChE,OAAOA,KAAK,GAAG,CAAC,CAAC,IAAIO,GAAG;AAC1B","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { GroupAtType } from '@droppii/openim-rn-client-sdk';
2
+ interface MentionBadgeProps {
3
+ groupAtType?: GroupAtType;
4
+ }
5
+ export declare const MentionBadge: import("react").MemoExoticComponent<({ groupAtType }: MentionBadgeProps) => import("react").JSX.Element>;
6
+ export {};
7
+ //# sourceMappingURL=MentionBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MentionBadge.d.ts","sourceRoot":"","sources":["../../../../../src/components/ThreadCard/MentionBadge.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAKD,eAAO,MAAM,YAAY,wDAA0B,iBAAiB,iCAclE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadCard.d.ts","sourceRoot":"","sources":["../../../../../src/components/ThreadCard/ThreadCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAa1D,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,+BAA+B,CAAC;AAMvC,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QACjB,IAAI,CAAC,EAAE,gBAAgB,CAAC;QACxB,KAAK,EAAE,qBAAqB,CAAC;KAC9B,KAAK,IAAI,CAAC;CACZ;AAED,QAAA,MAAM,UAAU,0DAA4B,eAAe,iCA+JzD,CAAC;AAIH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ThreadCard.d.ts","sourceRoot":"","sources":["../../../../../src/components/ThreadCard/ThreadCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAc1D,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,+BAA+B,CAAC;AAMvC,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE;QACjB,IAAI,CAAC,EAAE,gBAAgB,CAAC;QACxB,KAAK,EAAE,qBAAqB,CAAC;KAC9B,KAAK,IAAI,CAAC;CACZ;AAED,QAAA,MAAM,UAAU,0DAA4B,eAAe,iCAiKzD,CAAC;AAIH,eAAe,UAAU,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { IUrlMetadata } from '../../../types/common';
2
+ interface LinkPreviewCardProps {
3
+ metadata: IUrlMetadata;
4
+ onPressUrl?: (url: string) => void;
5
+ }
6
+ /**
7
+ * The rich link-preview card (thumbnail/title/url/description) — shared by
8
+ * LinkMessage (message.urlTextElem, a plain URL message) and TextMessage
9
+ * (mention+URL combo: message.ex.urlMetadata attached to an AtTextMessage,
10
+ * since OpenIM's AtTextMessage/UrlTextMessage content types are mutually
11
+ * exclusive — see useSendMessage.ts's doc comment for why the mention wins
12
+ * the content type and the URL card rides along in `ex` instead).
13
+ */
14
+ export declare const LinkPreviewCard: import("react").MemoExoticComponent<({ metadata, onPressUrl }: LinkPreviewCardProps) => import("react").JSX.Element>;
15
+ export {};
16
+ //# sourceMappingURL=LinkPreviewCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkPreviewCard.d.ts","sourceRoot":"","sources":["../../../../../../src/components/messages/linkMessage/LinkPreviewCard.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,iEACC,oBAAoB,iCA6ChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/messages/linkMessage/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAmDvD,eAAO,MAAM,WAAW,2GAOnB,sBAAsB,GAAG;IAAE,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,iCAsEnE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/messages/linkMessage/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAkCvD,eAAO,MAAM,WAAW,2GAOnB,sBAAsB,GAAG;IAAE,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,iCA4BnE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type MessageItem } from '@droppii/openim-rn-client-sdk';
2
+ interface QuotedMessagePreviewStripProps {
3
+ quotedMessage?: MessageItem;
4
+ }
5
+ /**
6
+ * The "replying to ..." strip — shared by QuotedMessage (message.quoteElem)
7
+ * and TextMessage (message.atTextElem?.quoteMessage, for the mention+quote
8
+ * combo). Extracted so both content types render the exact same preview
9
+ * instead of two copies drifting apart.
10
+ */
11
+ export declare const QuotedMessagePreviewStrip: import("react").MemoExoticComponent<({ quotedMessage }: QuotedMessagePreviewStripProps) => import("react").JSX.Element>;
12
+ export {};
13
+ //# sourceMappingURL=QuotedMessagePreviewStrip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuotedMessagePreviewStrip.d.ts","sourceRoot":"","sources":["../../../../../../src/components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAW9E,UAAU,8BAA8B;IACtC,aAAa,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,0DAChB,8BAA8B,iCAoFnD,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import type { BaseLegendMessageProps } from '../types';
2
- export declare const TextMessage: import("react").MemoExoticComponent<({ message, isOutgoing, isHighlighted, groupPosition, }: BaseLegendMessageProps) => import("react").JSX.Element>;
2
+ export declare const TextMessage: import("react").MemoExoticComponent<({ message, isOutgoing, isHighlighted, onPressUrl, groupPosition, }: BaseLegendMessageProps & {
3
+ onPressUrl?: (url: string) => void;
4
+ }) => import("react").JSX.Element>;
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/messages/textMessage/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,eAAO,MAAM,WAAW,+FAMnB,sBAAsB,iCA0B1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/messages/textMessage/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAkBvD,eAAO,MAAM,WAAW,2GAOnB,sBAAsB,GAAG;IAAE,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,iCA6GnE,CAAC"}
@@ -19,6 +19,7 @@ export interface ApiEndpoints {
19
19
  stickerHistory: string;
20
20
  messagesResources: string;
21
21
  messages: string;
22
+ contacts: string;
22
23
  }
23
24
  /**
24
25
  * Get a specific API endpoint
@@ -1 +1 @@
1
- {"version":3,"file":"api-endpoints.d.ts","sourceRoot":"","sources":["../../../../src/config/api-endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAE3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,YAAY,EACzD,KAAK,CAAC,KACL,YAAY,CAAC,CAAC,CAEhB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,YAAY,EACzD,KAAK,CAAC,EACN,OAAO,YAAY,CAAC,CAAC,CAAC,SAGvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,OAAO,CAAC,YAAY,CAAC,SAKrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,YAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAO,YAEpC,CAAC"}
1
+ {"version":3,"file":"api-endpoints.d.ts","sourceRoot":"","sources":["../../../../src/config/api-endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAE3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,YAAY,EACzD,KAAK,CAAC,KACL,YAAY,CAAC,CAAC,CAEhB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,YAAY,EACzD,KAAK,CAAC,EACN,OAAO,YAAY,CAAC,CAAC,CAAC,SAGvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,OAAO,CAAC,YAAY,CAAC,SAKrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,YAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAO,YAEpC,CAAC"}