@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.
- package/lib/module/components/ThreadCard/MentionBadge.js +24 -0
- package/lib/module/components/ThreadCard/MentionBadge.js.map +1 -0
- package/lib/module/components/ThreadCard/ThreadCard.js +5 -1
- package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -1
- package/lib/module/components/messages/linkMessage/LinkPreviewCard.js +67 -0
- package/lib/module/components/messages/linkMessage/LinkPreviewCard.js.map +1 -0
- package/lib/module/components/messages/linkMessage/index.js +21 -68
- package/lib/module/components/messages/linkMessage/index.js.map +1 -1
- package/lib/module/components/messages/quotedMessage/QuotedMessagePreviewStrip.js +152 -0
- package/lib/module/components/messages/quotedMessage/QuotedMessagePreviewStrip.js.map +1 -0
- package/lib/module/components/messages/textMessage/index.js +102 -8
- package/lib/module/components/messages/textMessage/index.js.map +1 -1
- package/lib/module/config/api-endpoints.js +2 -1
- package/lib/module/config/api-endpoints.js.map +1 -1
- package/lib/module/core/useChatListener.js +1 -1
- package/lib/module/core/useChatListener.js.map +1 -1
- package/lib/module/hooks/contacts/useSearchContacts.js +50 -0
- package/lib/module/hooks/contacts/useSearchContacts.js.map +1 -0
- package/lib/module/hooks/message/useSendMessage.js +64 -3
- package/lib/module/hooks/message/useSendMessage.js.map +1 -1
- package/lib/module/hooks/query-keys.js +8 -0
- package/lib/module/hooks/query-keys.js.map +1 -1
- package/lib/module/hooks/useChatCompose.js +3 -2
- package/lib/module/hooks/useChatCompose.js.map +1 -1
- package/lib/module/screens/SearchConversation/ContactResultItem.js +119 -0
- package/lib/module/screens/SearchConversation/ContactResultItem.js.map +1 -0
- package/lib/module/screens/SearchConversation/SearchAllResult.js +26 -20
- package/lib/module/screens/SearchConversation/SearchAllResult.js.map +1 -1
- package/lib/module/screens/SearchConversation/SearchCommunityResult.js +79 -0
- package/lib/module/screens/SearchConversation/SearchCommunityResult.js.map +1 -0
- package/lib/module/screens/SearchConversation/SearchContactsResult.js +117 -0
- package/lib/module/screens/SearchConversation/SearchContactsResult.js.map +1 -0
- package/lib/module/screens/SearchConversation/SearchEmpty.js +2 -0
- package/lib/module/screens/SearchConversation/SearchEmpty.js.map +1 -1
- package/lib/module/screens/SearchConversation/SearchMessagesResult.js +1 -8
- package/lib/module/screens/SearchConversation/SearchMessagesResult.js.map +1 -1
- package/lib/module/screens/SearchConversation/SearchResultItem.js +2 -0
- package/lib/module/screens/SearchConversation/SearchResultItem.js.map +1 -1
- package/lib/module/screens/SearchConversation/TabResult.js +24 -7
- package/lib/module/screens/SearchConversation/TabResult.js.map +1 -1
- package/lib/module/screens/SearchConversation/index.js +6 -2
- package/lib/module/screens/SearchConversation/index.js.map +1 -1
- package/lib/module/screens/SearchConversation/types.js +1 -0
- package/lib/module/screens/SearchConversation/types.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatComposer.js +170 -48
- package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatListLegend.js +1 -0
- package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
- package/lib/module/screens/chat-detail/components/ChatMessageInput.js +23 -2
- package/lib/module/screens/chat-detail/components/ChatMessageInput.js.map +1 -1
- package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js +51 -0
- package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js.map +1 -0
- package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js +49 -0
- package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js.map +1 -0
- package/lib/module/screens/chat-detail/components/MentionSuggestionList.js +114 -0
- package/lib/module/screens/chat-detail/components/MentionSuggestionList.js.map +1 -0
- package/lib/module/screens/chat-detail/hooks/useChatComposerState.js +8 -0
- package/lib/module/screens/chat-detail/hooks/useChatComposerState.js.map +1 -1
- package/lib/module/screens/chat-detail/hooks/useMentionComposer.js +251 -0
- package/lib/module/screens/chat-detail/hooks/useMentionComposer.js.map +1 -0
- package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +5 -1
- package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
- package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxWrapper.js +11 -1
- package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxWrapper.js.map +1 -1
- package/lib/module/services/endpoints.js +2 -1
- package/lib/module/services/endpoints.js.map +1 -1
- package/lib/module/services/mentionSearch.js +49 -0
- package/lib/module/services/mentionSearch.js.map +1 -0
- package/lib/module/services/message.js +6 -1
- package/lib/module/services/message.js.map +1 -1
- package/lib/module/translation/resources/i18n.js +11 -0
- package/lib/module/translation/resources/i18n.js.map +1 -1
- package/lib/module/types/chat.js +8 -0
- package/lib/module/types/chat.js.map +1 -1
- package/lib/module/types/mention.js +2 -0
- package/lib/module/types/mention.js.map +1 -0
- package/lib/module/utils/dateTimeUtils.js +10 -0
- package/lib/module/utils/dateTimeUtils.js.map +1 -1
- package/lib/module/utils/highlightSearch.js +6 -2
- package/lib/module/utils/highlightSearch.js.map +1 -1
- package/lib/module/utils/mentionSerializer.js +113 -0
- package/lib/module/utils/mentionSerializer.js.map +1 -0
- package/lib/module/utils/mentions/index.js +7 -0
- package/lib/module/utils/mentions/index.js.map +1 -0
- package/lib/module/utils/mentions/mentionDetector.js +49 -0
- package/lib/module/utils/mentions/mentionDetector.js.map +1 -0
- package/lib/module/utils/mentions/mentionDiff.js +66 -0
- package/lib/module/utils/mentions/mentionDiff.js.map +1 -0
- package/lib/module/utils/mentions/mentionRange.js +188 -0
- package/lib/module/utils/mentions/mentionRange.js.map +1 -0
- package/lib/module/utils/mentions/mentionTokenize.js +50 -0
- package/lib/module/utils/mentions/mentionTokenize.js.map +1 -0
- package/lib/module/utils/messageUtils.js +16 -3
- package/lib/module/utils/messageUtils.js.map +1 -1
- package/lib/module/utils/url.js +33 -0
- package/lib/module/utils/url.js.map +1 -1
- package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts +7 -0
- package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
- package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts +16 -0
- package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts.map +1 -0
- package/lib/typescript/src/components/messages/linkMessage/index.d.ts.map +1 -1
- package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts +13 -0
- package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts.map +1 -0
- package/lib/typescript/src/components/messages/textMessage/index.d.ts +3 -1
- package/lib/typescript/src/components/messages/textMessage/index.d.ts.map +1 -1
- package/lib/typescript/src/config/api-endpoints.d.ts +1 -0
- package/lib/typescript/src/config/api-endpoints.d.ts.map +1 -1
- package/lib/typescript/src/hooks/contacts/useSearchContacts.d.ts +221 -0
- package/lib/typescript/src/hooks/contacts/useSearchContacts.d.ts.map +1 -0
- package/lib/typescript/src/hooks/message/useSendMessage.d.ts +5 -2
- package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/src/hooks/query-keys.d.ts +8 -0
- package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useChatCompose.d.ts +2 -1
- package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/ContactResultItem.d.ts +9 -0
- package/lib/typescript/src/screens/SearchConversation/ContactResultItem.d.ts.map +1 -0
- package/lib/typescript/src/screens/SearchConversation/SearchAllResult.d.ts +3 -2
- package/lib/typescript/src/screens/SearchConversation/SearchAllResult.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/SearchCommunityResult.d.ts +7 -0
- package/lib/typescript/src/screens/SearchConversation/SearchCommunityResult.d.ts.map +1 -0
- package/lib/typescript/src/screens/SearchConversation/SearchContactsResult.d.ts +8 -0
- package/lib/typescript/src/screens/SearchConversation/SearchContactsResult.d.ts.map +1 -0
- package/lib/typescript/src/screens/SearchConversation/SearchEmpty.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/SearchMessagesResult.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/SearchResultItem.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/TabResult.d.ts +4 -2
- package/lib/typescript/src/screens/SearchConversation/TabResult.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/index.d.ts +4 -2
- package/lib/typescript/src/screens/SearchConversation/index.d.ts.map +1 -1
- package/lib/typescript/src/screens/SearchConversation/types.d.ts +2 -1
- package/lib/typescript/src/screens/SearchConversation/types.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts +10 -2
- package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts +29 -0
- package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts +8 -0
- package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts +12 -0
- package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts +48 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/messageToolbox/MessageToolboxWrapper.d.ts.map +1 -1
- package/lib/typescript/src/services/endpoints.d.ts +1 -0
- package/lib/typescript/src/services/endpoints.d.ts.map +1 -1
- package/lib/typescript/src/services/mentionSearch.d.ts +15 -0
- package/lib/typescript/src/services/mentionSearch.d.ts.map +1 -0
- package/lib/typescript/src/services/message.d.ts +1 -1
- package/lib/typescript/src/services/message.d.ts.map +1 -1
- package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
- package/lib/typescript/src/types/chat.d.ts +50 -0
- package/lib/typescript/src/types/chat.d.ts.map +1 -1
- package/lib/typescript/src/types/mention.d.ts +65 -0
- package/lib/typescript/src/types/mention.d.ts.map +1 -0
- package/lib/typescript/src/utils/dateTimeUtils.d.ts +2 -0
- package/lib/typescript/src/utils/dateTimeUtils.d.ts.map +1 -1
- package/lib/typescript/src/utils/highlightSearch.d.ts.map +1 -1
- package/lib/typescript/src/utils/mentionSerializer.d.ts +78 -0
- package/lib/typescript/src/utils/mentionSerializer.d.ts.map +1 -0
- package/lib/typescript/src/utils/mentions/index.d.ts +5 -0
- package/lib/typescript/src/utils/mentions/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/mentions/mentionDetector.d.ts +18 -0
- package/lib/typescript/src/utils/mentions/mentionDetector.d.ts.map +1 -0
- package/lib/typescript/src/utils/mentions/mentionDiff.d.ts +20 -0
- package/lib/typescript/src/utils/mentions/mentionDiff.d.ts.map +1 -0
- package/lib/typescript/src/utils/mentions/mentionRange.d.ts +86 -0
- package/lib/typescript/src/utils/mentions/mentionRange.d.ts.map +1 -0
- package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts +29 -0
- package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts.map +1 -0
- package/lib/typescript/src/utils/messageUtils.d.ts.map +1 -1
- package/lib/typescript/src/utils/url.d.ts +12 -0
- package/lib/typescript/src/utils/url.d.ts.map +1 -1
- package/package.json +3 -1
- package/src/build-ignore.d.ts +2 -0
- package/src/components/ThreadCard/MentionBadge.tsx +28 -0
- package/src/components/ThreadCard/ThreadCard.tsx +3 -0
- package/src/components/messages/linkMessage/LinkPreviewCard.tsx +92 -0
- package/src/components/messages/linkMessage/index.tsx +25 -89
- package/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx +168 -0
- package/src/components/messages/textMessage/index.tsx +124 -4
- package/src/config/api-endpoints.ts +2 -0
- package/src/core/useChatListener.ts +1 -1
- package/src/hooks/contacts/useSearchContacts.ts +66 -0
- package/src/hooks/message/useSendMessage.ts +60 -1
- package/src/hooks/query-keys.ts +12 -0
- package/src/hooks/useChatCompose.ts +115 -107
- package/src/screens/SearchConversation/ContactResultItem.tsx +128 -0
- package/src/screens/SearchConversation/SearchAllResult.tsx +38 -24
- package/src/screens/SearchConversation/SearchCommunityResult.tsx +96 -0
- package/src/screens/SearchConversation/SearchContactsResult.tsx +155 -0
- package/src/screens/SearchConversation/SearchEmpty.tsx +2 -0
- package/src/screens/SearchConversation/SearchMessagesResult.tsx +1 -6
- package/src/screens/SearchConversation/SearchResultItem.tsx +6 -1
- package/src/screens/SearchConversation/TabResult.tsx +40 -5
- package/src/screens/SearchConversation/index.tsx +10 -2
- package/src/screens/SearchConversation/types.tsx +1 -0
- package/src/screens/chat-detail/ChatComposer.tsx +201 -67
- package/src/screens/chat-detail/ChatListLegend.tsx +1 -0
- package/src/screens/chat-detail/components/ChatMessageInput.tsx +35 -2
- package/src/screens/chat-detail/components/MentionHighlightAdapter.tsx +57 -0
- package/src/screens/chat-detail/components/MentionSuggestionItem.tsx +53 -0
- package/src/screens/chat-detail/components/MentionSuggestionList.tsx +133 -0
- package/src/screens/chat-detail/hooks/useChatComposerState.ts +7 -1
- package/src/screens/chat-detail/hooks/useMentionComposer.ts +344 -0
- package/src/screens/chat-detail/legend/LegendChatMessage.tsx +7 -1
- package/src/screens/chat-detail/messageToolbox/MessageToolboxWrapper.tsx +22 -4
- package/src/services/endpoints.ts +1 -0
- package/src/services/mentionSearch.ts +57 -0
- package/src/services/message.ts +9 -1
- package/src/translation/resources/i18n.ts +12 -0
- package/src/types/chat.ts +52 -0
- package/src/types/mention.ts +70 -0
- package/src/utils/dateTimeUtils.ts +15 -0
- package/src/utils/highlightSearch.ts +12 -2
- package/src/utils/mentionSerializer.ts +155 -0
- package/src/utils/mentions/index.ts +16 -0
- package/src/utils/mentions/mentionDetector.ts +58 -0
- package/src/utils/mentions/mentionDiff.ts +95 -0
- package/src/utils/mentions/mentionRange.ts +207 -0
- package/src/utils/mentions/mentionTokenize.ts +53 -0
- package/src/utils/messageUtils.ts +21 -10
- 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":"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","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
|
-
|
|
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
|
|
374
|
-
|
|
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":";;AAAA;AACA;AACA;;AAEA,SACEA,WAAW,EACXC,QAAQ,QAGH,+BAA+B;AACtC,SAASC,cAAc,QAAQ,oBAAiB;AAChD,SAASC,WAAW,EAAEC,WAAW,QAAQ,iBAAc;AACvD,SAASC,KAAK,QAAQ,yBAAgB;AAItC,OAAO,MAAMC,gBAAgB,GAAIC,OAAoB,IACnDA,OAAO,CAACC,WAAW,KAAKR,WAAW,CAACS,aAAa;;AAEnD;AACA;AACA;AACA,OAAO,MAAMC,uBAEZ,GAAG;EACF,CAACV,WAAW,CAACW,YAAY,GAAG;IAC1BC,UAAU,EAAE,wBAAwB;IACpCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACc,gBAAgB,GAAG;IAC9BF,UAAU,EAAE,6BAA6B;IACzCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACe,UAAU,GAAG;IACxBH,UAAU,EAAE,sBAAsB;IAClCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACgB,qBAAqB,GAAG;IACnCJ,UAAU,EAAE,kCAAkC;IAC9CC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACiB,YAAY,GAAG;IAC1BL,UAAU,EAAE,wBAAwB;IACpCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACkB,aAAa,GAAG;IAC3BN,UAAU,EAAE,yBAAyB;IACrCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACmB,WAAW,GAAG;IACzBP,UAAU,EAAE,uBAAuB;IACnCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACoB,cAAc,GAAG;IAC5BR,UAAU,EAAE,0BAA0B;IACtCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACqB,gBAAgB,GAAG;IAC9BT,UAAU,EAAE,6BAA6B;IACzCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACsB,sBAAsB,GAAG;IACpCV,UAAU,EAAE,oCAAoC;IAChDC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACuB,UAAU,GAAG;IACxBX,UAAU,EAAE,sBAAsB;IAClCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACwB,gBAAgB,GAAG;IAC9BZ,UAAU,EAAE,6BAA6B;IACzCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAACyB,wBAAwB,GAAG;IACtCb,UAAU,EAAE,qCAAqC;IACjDC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAAC0B,gBAAgB,GAAG;IAC9Bd,UAAU,EAAE,6BAA6B;IACzCC,WAAW,EAAE;EACf,CAAC;EACD,CAACb,WAAW,CAAC2B,qBAAqB,GAAG;IACnCf,UAAU,EAAE,iCAAiC;IAC7CC,WAAW,EAAE;EACf,CAAC;EACD;EACA;EACA;EACA,CAACb,WAAW,CAAC4B,MAAM,GAAG;IACpBhB,UAAU,EAAE,2BAA2B;IACvCC,WAAW,EAAE;EACf;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMgB,wBAAwB,GAAGC,MAAM,CAACC,IAAI,CACjDrB,uBACF,CAAC,CAACsB,GAAG,CAACC,MAAM,CAAkB;AAE9B,MAAMC,uBAAuB,GAAI3B,OAAoB,IAAU;EAC7D,IAAI,CAACA,OAAO,CAAC4B,gBAAgB,EAAEC,MAAM,EAAE,OAAOC,SAAS;EACvD,IAAI;IACF,OAAOC,IAAI,CAACC,KAAK,CAAChC,OAAO,CAAC4B,gBAAgB,CAACC,MAAM,CAAC;EACpD,CAAC,CAAC,MAAM;IACN,OAAOC,SAAS;EAClB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMG,iBAAiB,GACrBC,OAAiD,IAC1B;EACvB,MAAMC,KAAK,GAAG,CAACD,OAAO,IAAI,EAAE,EACzBT,GAAG,CAAEW,MAAM,IAAKA,MAAM,EAAEC,QAAQ,CAAC,CACjCC,MAAM,CAAED,QAAQ,IAAyB,CAAC,CAACA,QAAQ,CAAC;EAEvD,IAAIF,KAAK,CAACI,MAAM,KAAK,CAAC,EAAE,OAAOT,SAAS;EACxC,IAAIK,KAAK,CAACI,MAAM,IAAI,CAAC,EAAE,OAAOJ,KAAK,CAACK,IAAI,CAAC,IAAI,CAAC;EAC9C,OAAO,GAAGL,KAAK,CAAC,CAAC,CAAC,KAAKA,KAAK,CAAC,CAAC,CAAC,OAAOA,KAAK,CAACI,MAAM,GAAG,CAAC,aAAa;AACrE,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,uBAAuB,GAClCzC,OAAoB,IACqB;EACzC,MAAM0C,IAAI,GAAGvC,uBAAuB,CAACH,OAAO,CAACC,WAAW,CAAC;EACzD,IAAI,CAACyC,IAAI,EAAE,OAAOZ,SAAS;EAE3B,IAAIzB,UAAU,GAAGqC,IAAI,CAACrC,UAAU;EAChC,IAAIC,WAAW,GAAGoC,IAAI,CAACpC,WAAW;EAClC,MAAMqC,MAA8B,GAAG,CAAC,CAAC;EACzC,MAAMd,MAAM,GAAGF,uBAAuB,CAAC3B,OAAO,CAAC;EAE/C,QAAQA,OAAO,CAACC,WAAW;IACzB,KAAKR,WAAW,CAAC0B,gBAAgB;MAAE;QACjC,MAAMyB,YAAY,GAAGf,MAAM,EAAEgB,KAAK,EAAEC,SAAS;QAC7C,IAAIF,YAAY,EAAE;UAChBD,MAAM,CAACC,YAAY,GAAGA,YAAY;UAClCtC,WAAW,GAAG,kCAAkC;QAClD;QACA;MACF;IACA,KAAKb,WAAW,CAACkB,aAAa;MAAE;QAC9B,MAAMwB,KAAK,GAAGF,iBAAiB,CAACJ,MAAM,EAAEkB,eAAe,CAAC;QACxD,IAAIZ,KAAK,EAAE;UACTQ,MAAM,CAACR,KAAK,GAAGA,KAAK;UACpB7B,WAAW,GAAG,8BAA8B;QAC9C;QACA;MACF;IACA,KAAKb,WAAW,CAACiB,YAAY;MAAE;QAC7B,MAAMyB,KAAK,GAAGF,iBAAiB,CAACJ,MAAM,EAAEmB,cAAc,CAAC;QACvD,IAAIb,KAAK,EAAE;UACTQ,MAAM,CAACR,KAAK,GAAGA,KAAK;UACpB7B,WAAW,GAAG,6BAA6B;QAC7C;QACA;MACF;IACA,KAAKb,WAAW,CAACgB,qBAAqB;MAAE;QACtC,MAAMwC,UAAU,GAAGpB,MAAM,EAAEqB,aAAa,EAAEb,QAAQ;QAClD,IAAIY,UAAU,EAAE;UACdN,MAAM,CAACM,UAAU,GAAGA,UAAU;UAC9B3C,WAAW,GAAG,uCAAuC;QACvD;QACA;MACF;IACA,KAAKb,WAAW,CAAC2B,qBAAqB;MAAE;QACtC,MAAM6B,UAAU,GAAGpB,MAAM,EAAEsB,WAAW,EAAEd,QAAQ;QAChD,IAAIY,UAAU,EAAE;UACdN,MAAM,CAACM,UAAU,GAAGA,UAAU;UAC9B3C,WAAW,GAAG,gCAAgC;QAChD;QACA;MACF;IACA,KAAKb,WAAW,CAAC4B,MAAM;MAAE;QACvB,IAAIQ,MAAM,EAAEuB,QAAQ,KAAK,IAAI,EAAE;UAC7B/C,UAAU,GAAG,yBAAyB;UACtCC,WAAW,GAAG,8BAA8B;QAC9C;QACA;MACF;IACA;MACE;EACJ;EAEA,OAAO;IAAED,UAAU;IAAEC,WAAW;IAAEqC;EAAO,CAAC;AAC5C,CAAC;AAED,OAAO,MAAMU,kBAAkB,GAAIrD,OAAoB,IAAa;EAClE,IAAIA,OAAO,CAACsD,QAAQ,EAAEC,OAAO,EAAE,OAAOvD,OAAO,CAACsD,QAAQ,CAACC,OAAO;EAC9D,IAAI;IACF,MAAMC,MAAM,GAAGzB,IAAI,CAACC,KAAK,CAAChC,OAAO,CAACuD,OAAO,CAIxC;IACD,OAAOC,MAAM,EAAED,OAAO,IAAIC,MAAM,EAAEC,IAAI,IAAID,MAAM,EAAEE,WAAW,IAAI,EAAE;EACrE,CAAC,CAAC,MAAM;IACN,OAAO1D,OAAO,CAACuD,OAAO,IAAI,EAAE;EAC9B;AACF,CAAC;AAED,OAAO,MAAMI,iBAAiB,GAAI3D,OAAqB,IAAa;EAClE,IAAI,CAACA,OAAO,EAAE,OAAO,EAAE;EACvB;EACA,QAAQA,OAAO,CAACC,WAAW;IACzB,KAAKR,WAAW,CAACmE,WAAW;MAC1B,OAAOP,kBAAkB,CAACrD,OAAO,CAAC;IAEpC,KAAKP,WAAW,CAACoE,cAAc;MAC7B,OAAO,YAAY;IAErB,KAAKpE,WAAW,CAACqE,YAAY;MAC3B,IAAI;QACF,MAAMC,SAAS,GAAG/D,OAAO,EAAEgE,SAAS;QACpC,MAAMC,QAAQ,GAAGF,SAAS,EAAEE,QAAQ,IAAI,CAAC;QACzC,MAAMC,WAAW,GAAGD,QAAQ,GAAG,CAAC,GAAG,IAAItE,cAAc,CAACsE,QAAQ,CAAC,EAAE,GAAG,EAAE;QACtE,OAAO,UAAUC,WAAW,EAAE;MAChC,CAAC,CAAC,MAAM;QACN,OAAO,SAAS;MAClB;IAEF,KAAKzE,WAAW,CAAC0E,WAAW;MAAE;QAC5B,MAAMC,QAAQ,GAAGpE,OAAO,EAAEqE,QAAQ,EAAED,QAAQ;QAC5C,IAAIA,QAAQ,EAAE;UACZ,OAAO,UAAUE,cAAc,CAACF,QAAQ,EAAE,EAAE,CAAC,EAAE;QACjD;QACA,OAAO,QAAQ;MACjB;IAEA,KAAK3E,WAAW,CAAC8E,YAAY;MAC3B;MACA,IAAI;QACF,MAAMC,SAAS,GAAGxE,OAAO,CAACyE,SAAS;QACnC,IAAID,SAAS,EAAEE,YAAY,EAAE;UAC3B,MAAMC,UAAU,GAAGH,SAAS,CAACE,YAAY,CAACpC,MAAM,CAC7CsC,GAAQ,IAAKA,GAAG,CAAC3E,WAAW,KAAKR,WAAW,CAACoE,cAChD,CAAC,CAACtB,MAAM;UACR,IAAIoC,UAAU,GAAG,CAAC,EAAE;YAClB,OAAO,YAAY;UACrB;QACF;MACF,CAAC,CAAC,MAAM;QACN;MAAA;MAEF,OAAO,EAAE;IAEX,KAAKlF,WAAW,CAACoF,cAAc;MAC7B;MACA,MAAMC,OAAO,GACX9E,OAAO,EAAE+E,WAAW,EAAExB,OAAO,IAC7BvD,OAAO,EAAE+E,WAAW,EAAEC,IAAI,GAAG,CAAC,CAAC,IAC/B3B,kBAAkB,CAACrD,OAAO,CAAC,IAC3B,EAAE;MACJ,OAAO8E,OAAO,GAAGA,OAAO,GAAG,EAAE;IAE/B,KAAKrF,WAAW,CAACwF,aAAa;MAC5B;MACA;MACA;MACA;MACA;MACA,OAAOjF,OAAO,EAAEkF,UAAU,EAAEzB,IAAI,IAAIJ,kBAAkB,CAACrD,OAAO,CAAC,IAAI,EAAE;IAEvE,KAAKP,WAAW,CAAC0F,YAAY;MAC3B,OAAOnF,OAAO,EAAEoF,SAAS,EAAE3B,IAAI,IAAIJ,kBAAkB,CAACrD,OAAO,CAAC,IAAI,EAAE;IAEtE,KAAKP,WAAW,CAACS,aAAa;MAC5B,OAAOJ,KAAK,CAAC,iBAAiB,CAAC;IAEjC,KAAKL,WAAW,CAAC4F,aAAa;MAC5B,IAAIrF,OAAO,EAAEsF,UAAU,EAAE5B,WAAW,EAAE;QACpC,OAAO1D,OAAO,EAAEsF,UAAU,EAAE5B,WAAW;MACzC;MACA,OAAOL,kBAAkB,CAACrD,OAAO,CAAC,IAAI,EAAE;IAE1C,KAAKP,WAAW,CAAC8F,cAAc;MAC7B,OAAO,WAAW;IAEpB,KAAK9F,WAAW,CAAC+F,WAAW;MAC1B,OAAO1F,KAAK,CAAC,uBAAuB,CAAC;IAEvC,KAAKL,WAAW,CAACgG,cAAc;MAC7B,OAAO3F,KAAK,CAAC,0BAA0B,CAAC;IAE1C,KAAKL,WAAW,CAACiG,iBAAiB;MAChC,OAAO5F,KAAK,CAAC,8BAA8B,CAAC;IAE9C;MAAS;QACP,MAAM6F,QAAQ,GAAGlD,uBAAuB,CAACzC,OAAO,CAAC;QACjD,IAAI2F,QAAQ,EAAE;UACZ,OAAO7F,KAAK,CAAC6F,QAAQ,CAACtF,UAAU,EAAEsF,QAAQ,CAAChD,MAAM,CAAC;QACpD;QACA,OAAO,8BAA8B;MACvC;EACF;AACF,CAAC;AAED,OAAO,MAAMiD,0BAA0B,GACrC5F,OAAqB,IACP;EACd,IAAI,CAACA,OAAO,EAAE,OAAO,CAAC,CAAC;EACvB,QAAQA,OAAO,CAACC,WAAW;IACzB,KAAKR,WAAW,CAAC0E,WAAW;MAC1B,OAAO;QACL0B,aAAa,EAAE;MACjB,CAAC;IACH;MACE,OAAO,CAAC,CAAC;EACb;AACF,CAAC;AAED,OAAO,MAAMC,sBAAsB,GACjC9F,OAAqB,KACuB;EAC5CyD,IAAI,EAAEE,iBAAiB,CAAC3D,OAAO,CAAC;EAChC+F,SAAS,EAAEH,0BAA0B,CAAC5F,OAAO;AAC/C,CAAC,CAAC;AAWF,MAAMgG,WAAW,GAAIC,WAAgB,IACnCA,WAAW,EAAEC,eAAe,EAAEC,GAAG,IACjCF,WAAW,EAAEG,UAAU,EAAED,GAAG,IAC5BF,WAAW,EAAEI,aAAa,EAAEF,GAAG;;AAEjC;AACA;AACA,MAAMG,cAAc,GAAItG,OAAoB,IAA+B;EACzE,IAAI,CAACA,OAAO,CAACuG,EAAE,EAAE,OAAOzE,SAAS;EACjC,IAAI;IACF,MAAM0B,MAAM,GAAGzB,IAAI,CAACC,KAAK,CAAChC,OAAO,CAACuG,EAAE,CAAmC;IACvE,OAAO/C,MAAM,CAACgD,WAAW;EAC3B,CAAC,CAAC,MAAM;IACN,OAAO1E,SAAS;EAClB;AACF,CAAC;AAED,OAAO,MAAM2E,uBAAuB,GAClCzG,OAAoB,IACK;EACzB,QAAQA,OAAO,CAACC,WAAW;IACzB,KAAKR,WAAW,CAACoE,cAAc;MAAE;QAC/B,MAAM6C,YAAY,GAAGV,WAAW,CAAEhG,OAAO,CAASiG,WAAW,CAAC;QAC9D,OAAO;UACLU,SAAS,EAAE,OAAO;UAClBC,WAAW,EAAE,4BAA4B;UACzCF;QACF,CAAC;MACH;IAEA,KAAKjH,WAAW,CAACqE,YAAY;MAC3B,OAAO;QACL6C,SAAS,EAAE,OAAO;QAClBC,WAAW,EAAE,4BAA4B;QACzCF,YAAY,EAAE1G,OAAO,CAACgE,SAAS,EAAE6C;MACnC,CAAC;IAEH,KAAKpH,WAAW,CAAC0E,WAAW;MAAE;QAC5B,MAAMC,QAAQ,GAAGpE,OAAO,CAACqE,QAAQ,EAAED,QAAQ,IAAI,EAAE;QACjD,OAAO;UACLuC,SAAS,EAAE,MAAM;UACjBC,WAAW,EAAE,2BAA2B;UACxCE,QAAQ,EAAElH,WAAW,CAACC,WAAW,CAACuE,QAAQ,CAAC;QAC7C,CAAC;MACH;IAEA,KAAK3E,WAAW,CAACoF,cAAc;MAAE;QAC/B,MAAM6B,YAAY,GAAGJ,cAAc,CAACtG,OAAO,CAAC,EAAE+G,KAAK;QACnD,OAAO;UACLJ,SAAS,EAAED,YAAY,GAAG,OAAO,GAAG,MAAM;UAC1CE,WAAW,EAAE,2BAA2B;UACxCF;QACF,CAAC;MACH;IAEA,KAAKjH,WAAW,CAAC8E,YAAY;MAAE;QAC7B,IAAI;UACF,MAAMyC,UAAU,GAAGhH,OAAO,CAACyE,SAAS,EAAEC,YAAY,EAAEuC,IAAI,CACrDrC,GAAQ,IAAKA,GAAG,CAAC3E,WAAW,KAAKR,WAAW,CAACoE,cAChD,CAAC;UACD,MAAM6C,YAAY,GAAGV,WAAW,CAACgB,UAAU,EAAEf,WAAW,CAAC;UACzD,IAAIS,YAAY,EAAE;YAChB,OAAO;cACLC,SAAS,EAAE,OAAO;cAClBC,WAAW,EAAE,4BAA4B;cACzCF;YACF,CAAC;UACH;QACF,CAAC,CAAC,MAAM;UACN;QAAA;QAEF,OAAO;UAAEC,SAAS,EAAE,MAAM;UAAEC,WAAW,EAAE;QAA+B,CAAC;MAC3E;IAEA;MACE,OAAO;QAAED,SAAS,EAAE,MAAM;QAAEC,WAAW,EAAE;MAA+B,CAAC;EAC7E;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMM,6BAA6B,GACxClH,OAAoB,IACG;EACvB,IAAI,CAACA,OAAO,CAAC4B,gBAAgB,EAAEC,MAAM,EAAE,OAAOC,SAAS;EACvD,IAAI;IACF,MAAM0B,MAAM,GAAGzB,IAAI,CAACC,KAAK,CAAChC,OAAO,CAAC4B,gBAAgB,CAACC,MAAM,CAGxD;IACD;IACA;IACA,OAAO2B,MAAM,EAAE2D,MAAM,EAAE9E,QAAQ,IAAImB,MAAM,EAAE4D,QAAQ,EAAE/E,QAAQ;EAC/D,CAAC,CAAC,MAAM;IACN,OAAOP,SAAS;EAClB;AACF,CAAC;AAED,OAAO,MAAMuF,aAAa,GAAGA,CAC3BrH,OAAoB,EACpBsH,aAAsB,EACtBC,YAA+B,KACpB;EACX,MAAMC,aAAa,GAAGF,aAAa,IAAItH,OAAO,CAACyH,MAAM,KAAKH,aAAa;EAEvE,IAAIE,aAAa,EAAE,OAAO,KAAK;EAE/B,QAAQD,YAAY,EAAEG,QAAQ;IAC5B,KAAKhI,QAAQ,CAACiI,GAAG;IACjB,KAAKjI,QAAQ,CAACkI,QAAQ;IACtB,KAAKlI,QAAQ,CAACmI,IAAI;MAChB,OAAO,EAAE;IAEX;MACE,OACE7H,OAAO,EAAE8H,cAAc,IAAIZ,6BAA6B,CAAClH,OAAO,CAAC,IAAI,EAAE;EAE7E;AACF,CAAC;AASD,OAAO,MAAM+H,kBAAkB,GAAGA,CAAC;EACjC/H,OAAO;EACPsH,aAAa;EACbC,YAAY;EACZS,6BAA6B,GAAG;AACR,CAAC,KAAa;EACtC,IAAI,CAAChI,OAAO,EAAE,OAAO,EAAE;EACvB,MAAMiI,OAAO,GAAGtE,iBAAiB,CAAC3D,OAAO,CAAC;EAC1C,IAAI,CAACiI,OAAO,EAAE,OAAO,EAAE;EAEvB,MAAMC,MAAM,GAAGb,aAAa,CAACrH,OAAO,EAAEsH,aAAa,EAAEC,YAAY,CAAC;EAElE,IAAI,CAACW,MAAM,EAAE,OAAOD,OAAO;EAE3B,IAAIlI,gBAAgB,CAACC,OAAO,CAAC,EAAE;IAC7B,OAAOF,KAAK,CAAC,wBAAwB,EAAE;MAAEoI;IAAO,CAAC,CAAC;EACpD;EAEA,MAAMC,oBAAoB,GAAG1F,uBAAuB,CAACzC,OAAO,CAAC;EAC7D,IAAImI,oBAAoB,EAAE;IACxB,OAAOrI,KAAK,CAACqI,oBAAoB,CAAC7H,WAAW,EAAE;MAC7C4H,MAAM;MACN,GAAGC,oBAAoB,CAACxF;IAC1B,CAAC,CAAC;EACJ;EAEA,MAAMyF,gBAAgB,GACpBJ,6BAA6B,IAAIT,YAAY,EAAEG,QAAQ,KAAKhI,QAAQ,CAACmI,IAAI;EAE3E,OAAOO,gBAAgB,GAAGH,OAAO,GAAG,GAAGC,MAAM,KAAKD,OAAO,EAAE;AAC7D,CAAC;AAED,OAAO,MAAMI,kBAAkB,GAAGA,CAChCrI,OAAqB,EACrBsH,aAAsB,EACtBC,YAA+B,EAC/Be,MAAgB,KACL;EACX,IAAI,CAACtI,OAAO,EAAE,OAAO,EAAE;EACvB,IAAIsH,aAAa,IAAItH,OAAO,CAACyH,MAAM,KAAKH,aAAa,EACnD,OAAOxH,KAAK,CAACwI,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;EAC3C,OAAOf,YAAY,EAAEG,QAAQ,KAAKhI,QAAQ,CAACiI,GAAG,GAC1CJ,YAAY,EAAEgB,QAAQ,IAAI,EAAE,GAC5BvI,OAAO,EAAE8H,cAAc,IAAI,EAAE;AACnC,CAAC;AAED,OAAO,MAAMU,gBAAgB,GAAIjC,EAAW,IAA+B;EACzE,IAAI,CAACA,EAAE,EAAE,OAAOzE,SAAS;EACzB,IAAI;IACF,MAAM0B,MAAM,GAAGzB,IAAI,CAACC,KAAK,CAACuE,EAAE,CAAQ;IACpC;IACA,OAAO/C,MAAM,EAAEgD,WAAW,IAAI1E,SAAS;EACzC,CAAC,CAAC,MAAM;IACN,OAAOA,SAAS;EAClB;AACF,CAAC;AAED,OAAO,MAAMwC,cAAc,GAAGA,CAACmE,IAAY,EAAEC,SAAiB,KAAa;EACzE,MAAMC,QAAQ,GAAGF,IAAI,CAACG,WAAW,CAAC,GAAG,CAAC;EACtC,MAAMC,QAAQ,GAAGF,QAAQ,KAAK,CAAC,CAAC,GAAGF,IAAI,CAACK,KAAK,CAAC,CAAC,EAAEH,QAAQ,CAAC,GAAGF,IAAI;EACjE,MAAMM,GAAG,GAAGJ,QAAQ,KAAK,CAAC,CAAC,GAAGF,IAAI,CAACK,KAAK,CAACH,QAAQ,CAAC,GAAG,EAAE;EAEvD,IAAIE,QAAQ,CAACtG,MAAM,IAAImG,SAAS,EAAE,OAAOD,IAAI;EAE7C,MAAMO,OAAO,GAAGC,IAAI,CAACC,IAAI,CAAC,CAACR,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;EAC9C,MAAMS,OAAO,GAAGF,IAAI,CAACG,KAAK,CAAC,CAACV,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;EAC/C,OAAO,GAAGG,QAAQ,CAACC,KAAK,CAAC,CAAC,EAAEE,OAAO,CAAC,MAAMG,OAAO,GAAG,CAAC,GAAGN,QAAQ,CAACC,KAAK,CAAC,CAACK,OAAO,CAAC,GAAG,EAAE,GAAGJ,GAAG,EAAE;AAC/F,CAAC","ignoreList":[]}
|
package/lib/module/utils/url.js
CHANGED
|
@@ -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","
|
|
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;
|
|
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":"
|
|
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
|
package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts.map
ADDED
|
@@ -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
|
|
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":"
|
|
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"}
|
|
@@ -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;
|
|
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"}
|