@droppii-org/chat-mobile 0.2.81 → 0.2.83

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 (175) 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 +49 -92
  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/quotedMessage/index.js +79 -55
  12. package/lib/module/components/messages/quotedMessage/index.js.map +1 -1
  13. package/lib/module/components/messages/stickerMessage/index.js +38 -13
  14. package/lib/module/components/messages/stickerMessage/index.js.map +1 -1
  15. package/lib/module/components/messages/textMessage/index.js +126 -13
  16. package/lib/module/components/messages/textMessage/index.js.map +1 -1
  17. package/lib/module/components/messages/types.js.map +1 -1
  18. package/lib/module/core/useChatListener.js +1 -1
  19. package/lib/module/core/useChatListener.js.map +1 -1
  20. package/lib/module/hooks/message/useSendMessage.js +64 -3
  21. package/lib/module/hooks/message/useSendMessage.js.map +1 -1
  22. package/lib/module/hooks/query-keys.js +4 -0
  23. package/lib/module/hooks/query-keys.js.map +1 -1
  24. package/lib/module/hooks/useChatCompose.js +3 -2
  25. package/lib/module/hooks/useChatCompose.js.map +1 -1
  26. package/lib/module/screens/chat-detail/ChatComposer.js +170 -48
  27. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  28. package/lib/module/screens/chat-detail/ChatListLegend.js +16 -7
  29. package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
  30. package/lib/module/screens/chat-detail/components/ChatMessageInput.js +23 -2
  31. package/lib/module/screens/chat-detail/components/ChatMessageInput.js.map +1 -1
  32. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js +51 -0
  33. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js.map +1 -0
  34. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js +49 -0
  35. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js.map +1 -0
  36. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js +114 -0
  37. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js.map +1 -0
  38. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js +8 -0
  39. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js.map +1 -1
  40. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js +251 -0
  41. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js.map +1 -0
  42. package/lib/module/screens/chat-detail/legend/LegendChatDay.js +4 -9
  43. package/lib/module/screens/chat-detail/legend/LegendChatDay.js.map +1 -1
  44. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +14 -2
  45. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
  46. package/lib/module/services/mentionSearch.js +49 -0
  47. package/lib/module/services/mentionSearch.js.map +1 -0
  48. package/lib/module/services/message.js +6 -1
  49. package/lib/module/services/message.js.map +1 -1
  50. package/lib/module/translation/resources/i18n.js +5 -0
  51. package/lib/module/translation/resources/i18n.js.map +1 -1
  52. package/lib/module/types/chat.js.map +1 -1
  53. package/lib/module/types/mention.js +2 -0
  54. package/lib/module/types/mention.js.map +1 -0
  55. package/lib/module/utils/legendListMessage.js +9 -1
  56. package/lib/module/utils/legendListMessage.js.map +1 -1
  57. package/lib/module/utils/mentionSerializer.js +113 -0
  58. package/lib/module/utils/mentionSerializer.js.map +1 -0
  59. package/lib/module/utils/mentions/index.js +7 -0
  60. package/lib/module/utils/mentions/index.js.map +1 -0
  61. package/lib/module/utils/mentions/mentionDetector.js +49 -0
  62. package/lib/module/utils/mentions/mentionDetector.js.map +1 -0
  63. package/lib/module/utils/mentions/mentionDiff.js +66 -0
  64. package/lib/module/utils/mentions/mentionDiff.js.map +1 -0
  65. package/lib/module/utils/mentions/mentionRange.js +188 -0
  66. package/lib/module/utils/mentions/mentionRange.js.map +1 -0
  67. package/lib/module/utils/mentions/mentionTokenize.js +50 -0
  68. package/lib/module/utils/mentions/mentionTokenize.js.map +1 -0
  69. package/lib/module/utils/messageUtils.js +6 -1
  70. package/lib/module/utils/messageUtils.js.map +1 -1
  71. package/lib/module/utils/url.js +33 -0
  72. package/lib/module/utils/url.js.map +1 -1
  73. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts +7 -0
  74. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts.map +1 -0
  75. package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
  76. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts +16 -0
  77. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts.map +1 -0
  78. package/lib/typescript/src/components/messages/linkMessage/index.d.ts +2 -2
  79. package/lib/typescript/src/components/messages/linkMessage/index.d.ts.map +1 -1
  80. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts +13 -0
  81. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts.map +1 -0
  82. package/lib/typescript/src/components/messages/quotedMessage/index.d.ts.map +1 -1
  83. package/lib/typescript/src/components/messages/stickerMessage/index.d.ts +2 -2
  84. package/lib/typescript/src/components/messages/stickerMessage/index.d.ts.map +1 -1
  85. package/lib/typescript/src/components/messages/textMessage/index.d.ts +4 -2
  86. package/lib/typescript/src/components/messages/textMessage/index.d.ts.map +1 -1
  87. package/lib/typescript/src/components/messages/types.d.ts +1 -0
  88. package/lib/typescript/src/components/messages/types.d.ts.map +1 -1
  89. package/lib/typescript/src/hooks/message/useSendMessage.d.ts +5 -2
  90. package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
  91. package/lib/typescript/src/hooks/query-keys.d.ts +4 -0
  92. package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -1
  93. package/lib/typescript/src/hooks/useChatCompose.d.ts +2 -1
  94. package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -1
  95. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  96. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
  97. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts +10 -2
  98. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts.map +1 -1
  99. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts +29 -0
  100. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts.map +1 -0
  101. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts +8 -0
  102. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts.map +1 -0
  103. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts +12 -0
  104. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts.map +1 -0
  105. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts +1 -1
  106. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts.map +1 -1
  107. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts +48 -0
  108. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts.map +1 -0
  109. package/lib/typescript/src/screens/chat-detail/legend/LegendChatDay.d.ts.map +1 -1
  110. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts +2 -1
  111. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
  112. package/lib/typescript/src/services/mentionSearch.d.ts +15 -0
  113. package/lib/typescript/src/services/mentionSearch.d.ts.map +1 -0
  114. package/lib/typescript/src/services/message.d.ts +1 -1
  115. package/lib/typescript/src/services/message.d.ts.map +1 -1
  116. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  117. package/lib/typescript/src/types/chat.d.ts +23 -0
  118. package/lib/typescript/src/types/chat.d.ts.map +1 -1
  119. package/lib/typescript/src/types/mention.d.ts +65 -0
  120. package/lib/typescript/src/types/mention.d.ts.map +1 -0
  121. package/lib/typescript/src/utils/legendListMessage.d.ts +4 -3
  122. package/lib/typescript/src/utils/legendListMessage.d.ts.map +1 -1
  123. package/lib/typescript/src/utils/mentionSerializer.d.ts +78 -0
  124. package/lib/typescript/src/utils/mentionSerializer.d.ts.map +1 -0
  125. package/lib/typescript/src/utils/mentions/index.d.ts +5 -0
  126. package/lib/typescript/src/utils/mentions/index.d.ts.map +1 -0
  127. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts +18 -0
  128. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts.map +1 -0
  129. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts +20 -0
  130. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts.map +1 -0
  131. package/lib/typescript/src/utils/mentions/mentionRange.d.ts +86 -0
  132. package/lib/typescript/src/utils/mentions/mentionRange.d.ts.map +1 -0
  133. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts +29 -0
  134. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts.map +1 -0
  135. package/lib/typescript/src/utils/messageUtils.d.ts.map +1 -1
  136. package/lib/typescript/src/utils/url.d.ts +12 -0
  137. package/lib/typescript/src/utils/url.d.ts.map +1 -1
  138. package/package.json +1 -1
  139. package/src/components/ThreadCard/MentionBadge.tsx +28 -0
  140. package/src/components/ThreadCard/ThreadCard.tsx +3 -0
  141. package/src/components/messages/linkMessage/LinkPreviewCard.tsx +92 -0
  142. package/src/components/messages/linkMessage/index.tsx +64 -121
  143. package/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx +168 -0
  144. package/src/components/messages/quotedMessage/index.tsx +95 -64
  145. package/src/components/messages/stickerMessage/index.tsx +40 -11
  146. package/src/components/messages/textMessage/index.tsx +159 -17
  147. package/src/components/messages/types.ts +1 -0
  148. package/src/core/useChatListener.ts +1 -1
  149. package/src/hooks/message/useSendMessage.ts +60 -1
  150. package/src/hooks/query-keys.ts +6 -0
  151. package/src/hooks/useChatCompose.ts +115 -107
  152. package/src/screens/chat-detail/ChatComposer.tsx +201 -67
  153. package/src/screens/chat-detail/ChatListLegend.tsx +19 -4
  154. package/src/screens/chat-detail/components/ChatMessageInput.tsx +35 -2
  155. package/src/screens/chat-detail/components/MentionHighlightAdapter.tsx +57 -0
  156. package/src/screens/chat-detail/components/MentionSuggestionItem.tsx +53 -0
  157. package/src/screens/chat-detail/components/MentionSuggestionList.tsx +133 -0
  158. package/src/screens/chat-detail/hooks/useChatComposerState.ts +7 -1
  159. package/src/screens/chat-detail/hooks/useMentionComposer.ts +344 -0
  160. package/src/screens/chat-detail/legend/LegendChatDay.tsx +6 -9
  161. package/src/screens/chat-detail/legend/LegendChatMessage.tsx +25 -2
  162. package/src/services/mentionSearch.ts +57 -0
  163. package/src/services/message.ts +9 -1
  164. package/src/translation/resources/i18n.ts +6 -0
  165. package/src/types/chat.ts +22 -0
  166. package/src/types/mention.ts +70 -0
  167. package/src/utils/legendListMessage.ts +13 -4
  168. package/src/utils/mentionSerializer.ts +155 -0
  169. package/src/utils/mentions/index.ts +16 -0
  170. package/src/utils/mentions/mentionDetector.ts +58 -0
  171. package/src/utils/mentions/mentionDiff.ts +95 -0
  172. package/src/utils/mentions/mentionRange.ts +207 -0
  173. package/src/utils/mentions/mentionTokenize.ts +53 -0
  174. package/src/utils/messageUtils.ts +6 -1
  175. package/src/utils/url.ts +30 -0
@@ -1 +1 @@
1
- {"version":3,"names":["MessageType","GROUP_NOTIFICATION_TYPES","getMessageRenderId","getMessageTime","getMessageText","message","contentType","TextMessage","textElem","content","AtTextMessage","atTextElem","text","QuoteMessage","quoteElem","PictureMessage","VoiceMessage","soundElem","sourceUrl","VideoMessage","videoElem","videoUrl","FileMessage","fileElem","fileName","CardMessage","cardElem","nickname","LocationMessage","locationElem","description","CustomMessage","customElem","FaceMessage","notificationElem","detail","GROUP_TIME_GAP","BOT_GROUP_KEY","startOfDay","timestamp","date","Date","setHours","getTime","isSystemMessage","includes","sendID","getGroupKey","isBotConversation","currentUserId","isOutgoing","precomputeLegendListData","messages","dataMap","Map","dayStarts","ids","timestamps","lastDay","forEach","index","messageId","rawCreatedAt","createdAt","day","prevTimestamp","set","dayStart","timeBreak","undefined","groupPosition","entry","get","key","prev","next","joinsPrev","joinsNext","computeDayStarts","dayStartMap","clientMsgID","serverMsgID"],"sourceRoot":"../../../src","sources":["utils/legendListMessage.ts"],"mappings":";;AAAA,SAASA,WAAW,QAA0B,+BAA+B;AAC7E,SAASC,wBAAwB,QAAQ,mBAAgB;AACzD,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,cAAW;;AAE9D;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAIC,OAAoB,IAAa;EAC9D,QAAQA,OAAO,CAACC,WAAW;IACzB,KAAKN,WAAW,CAACO,WAAW;MAC1B,OAAOF,OAAO,CAACG,QAAQ,EAAEC,OAAO,IAAIJ,OAAO,CAACI,OAAO;IACrD,KAAKT,WAAW,CAACU,aAAa;MAC5B,OAAOL,OAAO,CAACM,UAAU,EAAEC,IAAI,IAAIP,OAAO,CAACI,OAAO;IACpD,KAAKT,WAAW,CAACa,YAAY;MAC3B,OAAOR,OAAO,CAACS,SAAS,EAAEF,IAAI,IAAIP,OAAO,CAACI,OAAO;IACnD,KAAKT,WAAW,CAACe,cAAc;MAC7B,OAAO,EAAE;IACX,KAAKf,WAAW,CAACgB,YAAY;MAC3B,OAAOX,OAAO,CAACY,SAAS,EAAEC,SAAS,GAAG,EAAE,GAAG,kBAAkB;IAC/D,KAAKlB,WAAW,CAACmB,YAAY;MAC3B,OAAOd,OAAO,CAACe,SAAS,EAAEC,QAAQ,GAAG,EAAE,GAAG,SAAS;IACrD,KAAKrB,WAAW,CAACsB,WAAW;MAC1B,OAAOjB,OAAO,CAACkB,QAAQ,EAAEC,QAAQ,IAAInB,OAAO,CAACI,OAAO;IACtD,KAAKT,WAAW,CAACyB,WAAW;MAC1B,OAAOpB,OAAO,CAACqB,QAAQ,EAAEC,QAAQ,IAAItB,OAAO,CAACI,OAAO;IACtD,KAAKT,WAAW,CAAC4B,eAAe;MAC9B,OAAOvB,OAAO,CAACwB,YAAY,EAAEC,WAAW,IAAIzB,OAAO,CAACI,OAAO;IAC7D,KAAKT,WAAW,CAAC+B,aAAa;MAC5B,OAAO1B,OAAO,CAAC2B,UAAU,EAAEF,WAAW,IAAIzB,OAAO,CAACI,OAAO;IAC3D,KAAKT,WAAW,CAACiC,WAAW;MAC1B,OAAO,WAAW;IACpB;MACE;MACA;MACA;MACA;MACA,IAAI5B,OAAO,CAAC6B,gBAAgB,EAAEC,MAAM,EAAE;QACpC,OAAO,EAAE;MACX;MACA,OAAO9B,OAAO,CAACI,OAAO,IAAI,EAAE;EAChC;AACF,CAAC;;AAED;;AAgBA;AACA,MAAM2B,cAAc,GAAG,OAAO,CAAC,CAAC;;AAEhC;AACA,MAAMC,aAAa,GAAG,SAAS;AAE/B,MAAMC,UAAU,GAAIC,SAAiB,IAAa;EAChD,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACF,SAAS,CAAC;EAChCC,IAAI,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACzB,OAAOF,IAAI,CAACG,OAAO,CAAC,CAAC;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAIvC,OAAoB,IAC3CJ,wBAAwB,CAAC4C,QAAQ,CAACxC,OAAO,CAACC,WAAW,CAAC,IAAI,CAACD,OAAO,CAACyC,MAAM;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,GAAGA,CAClB1C,OAAoB,EACpB2C,iBAA0B,EAC1BC,aAAsB,KACX;EACX,MAAMC,UAAU,GAAG7C,OAAO,CAACyC,MAAM,KAAKG,aAAa;EACnD,IAAID,iBAAiB,IAAI,CAACE,UAAU,EAAE,OAAOb,aAAa;EAC1D,OAAOhC,OAAO,CAACyC,MAAM;AACvB,CAAC;AAOD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,wBAAwB,GAAGA,CACtCC,QAAuB,EACvB;EAAEJ,iBAAiB,GAAG,KAAK;EAAEC;AAAiC,CAAC,GAAG,CAAC,CAAC,KAC5B;EACxC,MAAMI,OAAO,GAAG,IAAIC,GAAG,CAAiC,CAAC;;EAEzD;EACA,MAAMC,SAAoB,GAAG,EAAE;EAC/B,MAAMC,GAAa,GAAG,EAAE;EACxB;EACA;EACA,MAAMC,UAAoB,GAAG,EAAE;EAC/B,IAAIC,OAAsB,GAAG,IAAI;EAEjCN,QAAQ,CAACO,OAAO,CAAC,CAACtD,OAAO,EAAEuD,KAAK,KAAK;IACnC,MAAMC,SAAS,GAAG3D,kBAAkB,CAACG,OAAO,EAAEuD,KAAK,CAAC;;IAEpD;IACA;IACA;IACA;IACA;IACA,MAAME,YAAY,GAAG3D,cAAc,CAACE,OAAO,CAAC;IAC5C,MAAM0D,SAAS,GACbD,YAAY,GAAG,CAAC,GAAGA,YAAY,GAAIL,UAAU,CAACG,KAAK,GAAG,CAAC,CAAC,IAAIE,YAAa;IAC3E,MAAME,GAAG,GAAG1B,UAAU,CAACyB,SAAS,CAAC;IAEjC,MAAME,aAAa,GAAGR,UAAU,CAACG,KAAK,GAAG,CAAC,CAAC;IAE3CJ,GAAG,CAACI,KAAK,CAAC,GAAGC,SAAS;IACtBJ,UAAU,CAACG,KAAK,CAAC,GAAGG,SAAS;IAC7BR,SAAS,CAACK,KAAK,CAAC,GAAGF,OAAO,KAAKM,GAAG;IAClCN,OAAO,GAAGM,GAAG;IAEbX,OAAO,CAACa,GAAG,CAACL,SAAS,EAAE;MACrBA,SAAS;MACTM,QAAQ,EAAEZ,SAAS,CAACK,KAAK,CAAE;MAC3BQ,SAAS,EACPH,aAAa,KAAKI,SAAS,IAC3BN,SAAS,GAAGE,aAAa,GAAG7B,cAAc;MAC5C2B,SAAS;MACTO,aAAa,EAAE;IACjB,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACAlB,QAAQ,CAACO,OAAO,CAAC,CAACtD,OAAO,EAAEuD,KAAK,KAAK;IACnC,MAAMW,KAAK,GAAGlB,OAAO,CAACmB,GAAG,CAAChB,GAAG,CAACI,KAAK,CAAE,CAAC;IACtC,IAAI,CAACW,KAAK,EAAE;IACZ,IAAI3B,eAAe,CAACvC,OAAO,CAAC,EAAE,OAAO,CAAC;;IAEtC,MAAMoE,GAAG,GAAG1B,WAAW,CAAC1C,OAAO,EAAE2C,iBAAiB,EAAEC,aAAa,CAAC;IAClE,MAAMyB,IAAI,GAAGtB,QAAQ,CAACQ,KAAK,GAAG,CAAC,CAAC;IAChC,MAAMe,IAAI,GAAGvB,QAAQ,CAACQ,KAAK,GAAG,CAAC,CAAC;IAEhC,MAAMgB,SAAS,GACb,CAAC,CAACF,IAAI,IACN,CAAC9B,eAAe,CAAC8B,IAAI,CAAC,IACtB3B,WAAW,CAAC2B,IAAI,EAAE1B,iBAAiB,EAAEC,aAAa,CAAC,KAAKwB,GAAG,IAC3DhB,UAAU,CAACG,KAAK,CAAC,GAAIH,UAAU,CAACG,KAAK,GAAG,CAAC,CAAE,IAAIxB,cAAc;IAC7D;IACA,CAACmB,SAAS,CAACK,KAAK,CAAC;IAEnB,MAAMiB,SAAS,GACb,CAAC,CAACF,IAAI,IACN,CAAC/B,eAAe,CAAC+B,IAAI,CAAC,IACtB5B,WAAW,CAAC4B,IAAI,EAAE3B,iBAAiB,EAAEC,aAAa,CAAC,KAAKwB,GAAG,IAC3DhB,UAAU,CAACG,KAAK,GAAG,CAAC,CAAC,GAAIH,UAAU,CAACG,KAAK,CAAE,IAAIxB,cAAc,IAC7D,CAACmB,SAAS,CAACK,KAAK,GAAG,CAAC,CAAC;IAEvBW,KAAK,CAACD,aAAa,GAAGM,SAAS,GAC3BC,SAAS,GACP,QAAQ,GACR,MAAM,GACRA,SAAS,GACP,OAAO,GACP,MAAM;EACd,CAAC,CAAC;EAEF,OAAOxB,OAAO;AAChB,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMyB,gBAAgB,GAC3B1B,QAAuB,IACE;EACzB,MAAM2B,WAAW,GAAG,IAAIzB,GAAG,CAAkB,CAAC;EAC9C,IAAII,OAAsB,GAAG,IAAI;EAEjCN,QAAQ,CAACO,OAAO,CAAEtD,OAAO,IAAK;IAC5B,MAAM2D,GAAG,GAAG1B,UAAU,CAACnC,cAAc,CAACE,OAAO,CAAC,CAAC;IAC/C,MAAMwD,SAAS,GAAGxD,OAAO,CAAC2E,WAAW,IAAI3E,OAAO,CAAC4E,WAAW,IAAI,EAAE;IAClEF,WAAW,CAACb,GAAG,CAACL,SAAS,EAAEH,OAAO,KAAKM,GAAG,CAAC;IAC3CN,OAAO,GAAGM,GAAG;EACf,CAAC,CAAC;EAEF,OAAOe,WAAW;AACpB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["MessageType","GROUP_NOTIFICATION_TYPES","getMessageRenderId","getMessageTime","getMessageText","message","contentType","TextMessage","textElem","content","AtTextMessage","atTextElem","text","QuoteMessage","quoteElem","PictureMessage","VoiceMessage","soundElem","sourceUrl","VideoMessage","videoElem","videoUrl","FileMessage","fileElem","fileName","CardMessage","cardElem","nickname","LocationMessage","locationElem","description","CustomMessage","customElem","FaceMessage","notificationElem","detail","GROUP_TIME_GAP","DIVIDER_TIME_GAP","BOT_GROUP_KEY","startOfDay","timestamp","date","Date","setHours","getTime","isSystemMessage","includes","sendID","getGroupKey","isBotConversation","currentUserId","isOutgoing","precomputeLegendListData","messages","dataMap","Map","dayStarts","ids","timestamps","lastDay","forEach","index","messageId","rawCreatedAt","createdAt","day","prevTimestamp","set","dayStart","timeBreak","undefined","groupPosition","entry","get","key","prev","next","joinsPrev","joinsNext","computeDayStarts","dayStartMap","clientMsgID","serverMsgID"],"sourceRoot":"../../../src","sources":["utils/legendListMessage.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ /** Composer-internal marker for the "Tất cả" suggestion row / a committed
4
+ * "tag everyone" Mention — never sent on the wire, see AT_ALL_TAG below. */
5
+ export const ALL_MEMBERS_USER_ID = 'ALL';
6
+
7
+ /**
8
+ * OpenIM's own protocol sentinel for "everyone in the group", used inside
9
+ * atUserIDList in place of enumerating every member. Confirmed against
10
+ * openimsdk-core (pkg/constant/constant.go:242 — `AtAllString = "AtAllTag"`,
11
+ * exposed client-side as `GetAtAllTag()`) and openim-server's group-message
12
+ * send path (internal/rpc/msg/send.go's `setConversationAtInfo`), which
13
+ * special-cases exactly this string and does the "who is everyone right
14
+ * now" resolution itself, server-side.
15
+ *
16
+ * This is why "Tất cả" must serialize to this one token instead of
17
+ * expanding to every resolved member's userID client-side (the previous
18
+ * approach): the Go core's CreateTextAtMessage hard-rejects any
19
+ * atUserIDList longer than 10 entries regardless of group size
20
+ * (openimsdk-core/internal/conversation_msg/create_message.go:80-82) — a
21
+ * >10-member group's "Tất cả" silently failed to send at all. Sending just
22
+ * `[AT_ALL_TAG]` keeps atUserIDList small no matter the group size, and is
23
+ * also the behavior the protocol actually expects.
24
+ */
25
+ export const AT_ALL_TAG = 'AtAllTag';
26
+
27
+ /**
28
+ * OpenIM's Go core hard-rejects any AtMsgParams.atUserIDList longer than
29
+ * this (openimsdk-core/internal/conversation_msg/create_message.go:80-82,
30
+ * `if len(userIDList) > 10 { return nil, sdkerrs.ErrArgs }`) — not
31
+ * adjustable client-side. "Tất cả" no longer risks this (see AT_ALL_TAG),
32
+ * but tagging more than 10 *individual* members in one message still
33
+ * would, so serializeMentionsForSend caps atUserIDList/atUsersInfo at this
34
+ * count (keeping the first MAX_AT_USER_COUNT, in mention order) rather
35
+ * than letting the send fail outright the way "Tất cả" used to.
36
+ */
37
+ export const MAX_AT_USER_COUNT = 10;
38
+ /**
39
+ * Translates the composer's Mention[] (client-side ranges) into OpenIM's
40
+ * wire shapes for createTextAtMessage, plus our own ex.mentions channel. No
41
+ * group-member resolution needed here (or by the caller) any more — see
42
+ * AT_ALL_TAG's doc comment for why a "Tất cả" mention maps to that single
43
+ * sentinel rather than a per-member list.
44
+ */
45
+ export function serializeMentionsForSend(mentions) {
46
+ const wireUserId = m => m.userId === ALL_MEMBERS_USER_ID ? AT_ALL_TAG : m.userId;
47
+ const exMentions = mentions.map(m => ({
48
+ userID: wireUserId(m),
49
+ offset: m.start,
50
+ length: m.end - m.start
51
+ }));
52
+
53
+ // Map dedupes by userID — e.g. "Tất cả" and an individually-tagged member
54
+ // both present in the same message only produce one atUserIDList entry
55
+ // each, not duplicates. Insertion order == mention order, which is what
56
+ // makes "keep the first MAX_AT_USER_COUNT" below well-defined.
57
+ const nicknameByUserId = new Map();
58
+ for (const m of mentions) {
59
+ nicknameByUserId.set(wireUserId(m), m.displayName);
60
+ }
61
+ const allEntries = [...nicknameByUserId.entries()];
62
+ const truncated = allEntries.length > MAX_AT_USER_COUNT;
63
+ const cappedEntries = truncated ? allEntries.slice(0, MAX_AT_USER_COUNT) : allEntries;
64
+ return {
65
+ atUserIDList: cappedEntries.map(([atUserID]) => atUserID),
66
+ atUsersInfo: cappedEntries.map(([atUserID, groupNickname]) => ({
67
+ atUserID,
68
+ groupNickname
69
+ })),
70
+ exMentions,
71
+ truncated
72
+ };
73
+ }
74
+ /**
75
+ * Reverse of serializeMentionsForSend, for rendering a received/sent
76
+ * AtTextMessage (Phase B3). Prefers `exMentions` (exact, our own channel);
77
+ * falls back to searching `atTextElem.text` for "@{groupNickname}" per
78
+ * atUsersInfo entry when ex is absent — an interop safety net, not the
79
+ * primary path. The fallback is inherently ambiguous if a member's
80
+ * nickname coincidentally appears elsewhere in the message as plain text;
81
+ * accepted as a known, documented limitation (see the mention plan's
82
+ * finding #3) rather than something client code can fully resolve without
83
+ * position data from the protocol.
84
+ */
85
+ export function deserializeMentionRanges(atTextElem, exMentions) {
86
+ if (exMentions && exMentions.length > 0) {
87
+ return exMentions.map((e, index) => ({
88
+ id: `${e.userID}-${e.offset}-${index}`,
89
+ userId: e.userID,
90
+ displayName: atTextElem.text.slice(e.offset, e.offset + e.length).replace(/^@/, ''),
91
+ start: e.offset,
92
+ end: e.offset + e.length
93
+ }));
94
+ }
95
+ const nicknameByUserId = new Map((atTextElem.atUsersInfo ?? []).map(i => [i.atUserID, i.groupNickname]));
96
+ const mentions = [];
97
+ for (const userId of atTextElem.atUserList) {
98
+ const nickname = nicknameByUserId.get(userId);
99
+ if (!nickname) continue;
100
+ const needle = `@${nickname}`;
101
+ const start = atTextElem.text.indexOf(needle);
102
+ if (start === -1) continue;
103
+ mentions.push({
104
+ id: `${userId}-${start}`,
105
+ userId,
106
+ displayName: nickname,
107
+ start,
108
+ end: start + needle.length
109
+ });
110
+ }
111
+ return mentions;
112
+ }
113
+ //# sourceMappingURL=mentionSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ALL_MEMBERS_USER_ID","AT_ALL_TAG","MAX_AT_USER_COUNT","serializeMentionsForSend","mentions","wireUserId","m","userId","exMentions","map","userID","offset","start","length","end","nicknameByUserId","Map","set","displayName","allEntries","entries","truncated","cappedEntries","slice","atUserIDList","atUserID","atUsersInfo","groupNickname","deserializeMentionRanges","atTextElem","e","index","id","text","replace","i","atUserList","nickname","get","needle","indexOf","push"],"sourceRoot":"../../../src","sources":["utils/mentionSerializer.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export { findActiveMention } from "./mentionDetector.js";
4
+ export { diffTextChange, snapBoundary } from "./mentionDiff.js";
5
+ export { insertMention, reconcileMentions, normalizeDeleteRange, applyTextChange } from "./mentionRange.js";
6
+ export { tokenize } from "./mentionTokenize.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["findActiveMention","diffTextChange","snapBoundary","insertMention","reconcileMentions","normalizeDeleteRange","applyTextChange","tokenize"],"sourceRoot":"../../../../src","sources":["utils/mentions/index.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,sBAAmB;AACrD,SACEC,cAAc,EACdC,YAAY,QAEP,kBAAe;AACtB,SACEC,aAAa,EACbC,iBAAiB,EACjBC,oBAAoB,EACpBC,eAAe,QAIV,mBAAgB;AACvB,SAASC,QAAQ,QAAsB,sBAAmB","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ // No realistic @query is longer than this — caps the backward scan so the
4
+ // common case (cursor nowhere near an '@') bails in O(word length), not
5
+ // O(text length).
6
+ const MAX_ACTIVE_MENTION_SCAN = 64;
7
+ const isBoundaryChar = ch => /\s/.test(ch);
8
+
9
+ /**
10
+ * Scans backward from `cursor` for an unclosed "@query" — the in-progress
11
+ * trigger that drives the suggestion list, not a committed mention.
12
+ *
13
+ * Only called for a collapsed cursor (selection.start === selection.end);
14
+ * the caller must resolve a range selection to `null` before calling this —
15
+ * a live "@query" only makes sense at a single insertion point.
16
+ *
17
+ * "@" itself counts as a boundary: the scan stops there whether or not it's
18
+ * a valid trigger, which is what prevents re-scanning back through an
19
+ * already-committed mention's "@Name " when the user starts typing a second
20
+ * "@" right after it (insertMention always appends a trailing space, a
21
+ * boundary char, so the previous mention's "@" is never reachable from the
22
+ * new query).
23
+ */
24
+ export function findActiveMention(text, cursor) {
25
+ if (cursor <= 0 || cursor > text.length) return null;
26
+ let i = cursor;
27
+ let scanned = 0;
28
+ while (i > 0 && scanned < MAX_ACTIVE_MENTION_SCAN) {
29
+ const ch = text[i - 1];
30
+ if (ch === '@') {
31
+ const before = i - 2 >= 0 ? text[i - 2] : undefined;
32
+ if (before === undefined || isBoundaryChar(before)) {
33
+ return {
34
+ trigger: '@',
35
+ start: i - 1,
36
+ end: cursor,
37
+ keyword: text.slice(i, cursor)
38
+ };
39
+ }
40
+ // '@' present but not at a valid boundary (e.g. "user@domain") — not a trigger.
41
+ return null;
42
+ }
43
+ if (isBoundaryChar(ch)) return null;
44
+ i--;
45
+ scanned++;
46
+ }
47
+ return null;
48
+ }
49
+ //# sourceMappingURL=mentionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MAX_ACTIVE_MENTION_SCAN","isBoundaryChar","ch","test","findActiveMention","text","cursor","length","i","scanned","before","undefined","trigger","start","end","keyword","slice"],"sourceRoot":"../../../../src","sources":["utils/mentions/mentionDetector.ts"],"mappings":";;AAEA;AACA;AACA;AACA,MAAMA,uBAAuB,GAAG,EAAE;AAElC,MAAMC,cAAc,GAAIC,EAAU,IAAK,IAAI,CAACC,IAAI,CAACD,EAAE,CAAC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,iBAAiBA,CAC/BC,IAAY,EACZC,MAAc,EACQ;EACtB,IAAIA,MAAM,IAAI,CAAC,IAAIA,MAAM,GAAGD,IAAI,CAACE,MAAM,EAAE,OAAO,IAAI;EAEpD,IAAIC,CAAC,GAAGF,MAAM;EACd,IAAIG,OAAO,GAAG,CAAC;EAEf,OAAOD,CAAC,GAAG,CAAC,IAAIC,OAAO,GAAGT,uBAAuB,EAAE;IACjD,MAAME,EAAE,GAAGG,IAAI,CAACG,CAAC,GAAG,CAAC,CAAW;IAEhC,IAAIN,EAAE,KAAK,GAAG,EAAE;MACd,MAAMQ,MAAM,GAAGF,CAAC,GAAG,CAAC,IAAI,CAAC,GAAGH,IAAI,CAACG,CAAC,GAAG,CAAC,CAAC,GAAGG,SAAS;MACnD,IAAID,MAAM,KAAKC,SAAS,IAAIV,cAAc,CAACS,MAAM,CAAC,EAAE;QAClD,OAAO;UACLE,OAAO,EAAE,GAAG;UACZC,KAAK,EAAEL,CAAC,GAAG,CAAC;UACZM,GAAG,EAAER,MAAM;UACXS,OAAO,EAAEV,IAAI,CAACW,KAAK,CAACR,CAAC,EAAEF,MAAM;QAC/B,CAAC;MACH;MACA;MACA,OAAO,IAAI;IACb;IAEA,IAAIL,cAAc,CAACC,EAAE,CAAC,EAAE,OAAO,IAAI;IAEnCM,CAAC,EAAE;IACHC,OAAO,EAAE;EACX;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ // RN's onChangeText hands over only the new full string — no delta, no
4
+ // info about what was inserted/deleted/replaced. A common-prefix +
5
+ // common-suffix scan is the only viable way to localize the changed region,
6
+ // and it's IME-safe for free: a Vietnamese diacritic recomposition (e.g.
7
+ // "tie" + accent key -> "tiế") is just "two different strings" to this
8
+ // algorithm, not a keystroke sequence it has to track.
9
+ //
10
+ // Assumes exactly one contiguous edit happened between the two strings —
11
+ // true for every realistic single-field mutation (typing, backspace,
12
+ // paste, autocorrect, IME composition). If that assumption is ever wrong
13
+ // (some exotic keyboard rewriting two disjoint spans in one event), the
14
+ // failure mode is safe-by-default: the computed region is a superset of
15
+ // the true edits, so callers may over-invalidate mention ranges but never
16
+ // corrupt them.
17
+
18
+ const isHighSurrogate = code => code >= 0xd800 && code <= 0xdbff;
19
+ const isLowSurrogate = code => code >= 0xdc00 && code <= 0xdfff;
20
+
21
+ /**
22
+ * Snaps `index` so it never sits between a surrogate pair in `str` —
23
+ * without this, diffing e.g. "😀" vs "😁" (which differ only in their low
24
+ * surrogate) would compute a boundary that bisects the emoji. Snapping
25
+ * always shrinks the "common" region (treats one more code point as
26
+ * "changed"), which is always safe: being more conservative about what
27
+ * counts as touched only ever produces more mention-invalidation upstream,
28
+ * never corruption.
29
+ */
30
+ export function snapBoundary(str, index, direction) {
31
+ if (index > 0 && index < str.length && isHighSurrogate(str.charCodeAt(index - 1)) && isLowSurrogate(str.charCodeAt(index))) {
32
+ return index + direction;
33
+ }
34
+ return index;
35
+ }
36
+ export function diffTextChange(previousText, nextText) {
37
+ const prevLen = previousText.length;
38
+ const nextLen = nextText.length;
39
+ const maxCommon = Math.min(prevLen, nextLen);
40
+ let prefixLen = 0;
41
+ while (prefixLen < maxCommon && previousText.charCodeAt(prefixLen) === nextText.charCodeAt(prefixLen)) {
42
+ prefixLen++;
43
+ }
44
+ prefixLen = snapBoundary(previousText, prefixLen, -1);
45
+
46
+ // Clamp the suffix scan budget against what's left after the prefix —
47
+ // without this, a naive independent prefix+suffix scan can overlap on
48
+ // repeated-character edits (e.g. "aaa" -> "aaaa") and produce a
49
+ // negative-length "changed" region.
50
+ const maxSuffix = maxCommon - prefixLen;
51
+ let suffixLen = 0;
52
+ while (suffixLen < maxSuffix && previousText.charCodeAt(prevLen - 1 - suffixLen) === nextText.charCodeAt(nextLen - 1 - suffixLen)) {
53
+ suffixLen++;
54
+ }
55
+ let removedEnd = prevLen - suffixLen;
56
+ let insertedEnd = nextLen - suffixLen;
57
+ removedEnd = snapBoundary(previousText, removedEnd, 1);
58
+ insertedEnd = snapBoundary(nextText, insertedEnd, 1);
59
+ return {
60
+ removedStart: prefixLen,
61
+ removedEnd,
62
+ insertedStart: prefixLen,
63
+ insertedEnd
64
+ };
65
+ }
66
+ //# sourceMappingURL=mentionDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isHighSurrogate","code","isLowSurrogate","snapBoundary","str","index","direction","length","charCodeAt","diffTextChange","previousText","nextText","prevLen","nextLen","maxCommon","Math","min","prefixLen","maxSuffix","suffixLen","removedEnd","insertedEnd","removedStart","insertedStart"],"sourceRoot":"../../../../src","sources":["utils/mentions/mentionDiff.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,eAAe,GAAIC,IAAY,IAAKA,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAI,MAAM;AAC1E,MAAMC,cAAc,GAAID,IAAY,IAAKA,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAI,MAAM;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,YAAYA,CAC1BC,GAAW,EACXC,KAAa,EACbC,SAAiB,EACT;EACR,IACED,KAAK,GAAG,CAAC,IACTA,KAAK,GAAGD,GAAG,CAACG,MAAM,IAClBP,eAAe,CAACI,GAAG,CAACI,UAAU,CAACH,KAAK,GAAG,CAAC,CAAC,CAAC,IAC1CH,cAAc,CAACE,GAAG,CAACI,UAAU,CAACH,KAAK,CAAC,CAAC,EACrC;IACA,OAAOA,KAAK,GAAGC,SAAS;EAC1B;EACA,OAAOD,KAAK;AACd;AAWA,OAAO,SAASI,cAAcA,CAC5BC,YAAoB,EACpBC,QAAgB,EACA;EAChB,MAAMC,OAAO,GAAGF,YAAY,CAACH,MAAM;EACnC,MAAMM,OAAO,GAAGF,QAAQ,CAACJ,MAAM;EAC/B,MAAMO,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACJ,OAAO,EAAEC,OAAO,CAAC;EAE5C,IAAII,SAAS,GAAG,CAAC;EACjB,OACEA,SAAS,GAAGH,SAAS,IACrBJ,YAAY,CAACF,UAAU,CAACS,SAAS,CAAC,KAAKN,QAAQ,CAACH,UAAU,CAACS,SAAS,CAAC,EACrE;IACAA,SAAS,EAAE;EACb;EACAA,SAAS,GAAGd,YAAY,CAACO,YAAY,EAAEO,SAAS,EAAE,CAAC,CAAC,CAAC;;EAErD;EACA;EACA;EACA;EACA,MAAMC,SAAS,GAAGJ,SAAS,GAAGG,SAAS;EACvC,IAAIE,SAAS,GAAG,CAAC;EACjB,OACEA,SAAS,GAAGD,SAAS,IACrBR,YAAY,CAACF,UAAU,CAACI,OAAO,GAAG,CAAC,GAAGO,SAAS,CAAC,KAC9CR,QAAQ,CAACH,UAAU,CAACK,OAAO,GAAG,CAAC,GAAGM,SAAS,CAAC,EAC9C;IACAA,SAAS,EAAE;EACb;EAEA,IAAIC,UAAU,GAAGR,OAAO,GAAGO,SAAS;EACpC,IAAIE,WAAW,GAAGR,OAAO,GAAGM,SAAS;EACrCC,UAAU,GAAGjB,YAAY,CAACO,YAAY,EAAEU,UAAU,EAAE,CAAC,CAAC;EACtDC,WAAW,GAAGlB,YAAY,CAACQ,QAAQ,EAAEU,WAAW,EAAE,CAAC,CAAC;EAEpD,OAAO;IACLC,YAAY,EAAEL,SAAS;IACvBG,UAAU;IACVG,aAAa,EAAEN,SAAS;IACxBI;EACF,CAAC;AACH","ignoreList":[]}
@@ -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
- 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:
@@ -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","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":[]}
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":[]}