@tencentcloud/sdk-mcp 1.4.7 → 1.6.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/index.js +0 -1
  2. package/knowledge/bm25-cache.js +73 -0
  3. package/knowledge/bm25.js +147 -0
  4. package/knowledge/build-index.js +65 -0
  5. package/knowledge/chunker.js +167 -0
  6. package/knowledge/content-loader.js +44 -0
  7. package/knowledge/extractors.js +25 -0
  8. package/knowledge/path-meta.js +175 -0
  9. package/knowledge/search/exact-lookup.js +330 -0
  10. package/knowledge/search/filter-pool.js +86 -0
  11. package/knowledge/search/requires-framework.js +72 -0
  12. package/knowledge/search/search-knowledge.js +226 -0
  13. package/package.json +9 -9
  14. package/resource/_schema/feature-aliases.yaml +10 -0
  15. package/resource/_schema/goal-tags.yaml +72 -0
  16. package/resource/_schema/products.yaml +16 -0
  17. package/resource/_schema/trtc-intents.yaml +27 -0
  18. package/resource/_schema/types.yaml +44 -0
  19. package/resource/index/component-slugs.json +1 -0
  20. package/resource/index/manifest.json +1 -0
  21. package/resource/{doc → integration}/callkit/preset/android/integration.md +32 -28
  22. package/resource/{doc → integration}/callkit/preset/flutter/integration.md +109 -54
  23. package/resource/integration/callkit/preset/ios/integration.md +411 -0
  24. package/resource/integration/callkit/preset/react/integration.md +499 -0
  25. package/resource/integration/callkit/preset/vue/integration.md +768 -0
  26. package/resource/{doc/chatkit → integration/chat/preset}/android/integration.md +11 -11
  27. package/resource/{doc/chatkit → integration/chat/preset}/flutter/integration.md +59 -37
  28. package/resource/integration/chat/preset/ios/integration.md +568 -0
  29. package/resource/{doc/chatkit → integration/chat/preset}/react/integration.md +127 -95
  30. package/resource/integration/chat/preset/uni-app/integration.md +494 -0
  31. package/resource/{doc/chatkit → integration/chat/preset}/vue/integration.md +163 -143
  32. package/resource/{doc → integration}/livekit/preset/live/vue/live-list-integration.md +15 -15
  33. package/resource/{doc → integration}/livekit/preset/live/vue/live-player-desk-integration.md +25 -13
  34. package/resource/{doc → integration}/livekit/preset/live/vue/live-player-h5-integration.md +15 -9
  35. package/resource/{doc → integration}/livekit/preset/live/vue/live-pusher-integration.md +31 -26
  36. package/resource/integration/roomkit/preset/vue/integration.md +571 -0
  37. package/resource/knowledge/callkit/core-sdk/android/answer-call.md +852 -0
  38. package/resource/knowledge/callkit/core-sdk/android/make-call.md +929 -0
  39. package/resource/knowledge/callkit/core-sdk/android/offline-push.md +364 -0
  40. package/resource/knowledge/callkit/core-sdk/flutter/answer-call.md +1150 -0
  41. package/resource/knowledge/callkit/core-sdk/flutter/make-call.md +1216 -0
  42. package/resource/knowledge/callkit/core-sdk/flutter/offline-push.md +412 -0
  43. package/resource/knowledge/callkit/core-sdk/ios/answer-call.md +1191 -0
  44. package/resource/knowledge/callkit/core-sdk/ios/make-call.md +1292 -0
  45. package/resource/knowledge/callkit/core-sdk/ios/offline-push.md +537 -0
  46. package/resource/knowledge/callkit/core-sdk/uni-app/answer-call.md +953 -0
  47. package/resource/knowledge/callkit/core-sdk/uni-app/make-call.md +1061 -0
  48. package/resource/knowledge/callkit/faq/android.md +168 -0
  49. package/resource/knowledge/callkit/faq/common.md +180 -0
  50. package/resource/knowledge/callkit/faq/flutter.md +52 -0
  51. package/resource/knowledge/callkit/faq/ios.md +116 -0
  52. package/resource/knowledge/callkit/faq/uniapp-app.md +89 -0
  53. package/resource/knowledge/callkit/faq/uniapp-miniprogram.md +217 -0
  54. package/resource/knowledge/callkit/faq/web.md +363 -0
  55. package/resource/knowledge/callkit/preset/android/api.md +413 -0
  56. package/resource/knowledge/callkit/preset/flutter/api.md +22 -0
  57. package/resource/knowledge/callkit/preset/ios/api.md +256 -0
  58. package/resource/knowledge/callkit/preset/web/api.md +79 -0
  59. package/resource/knowledge/chat/preset/android/features/chat-setting.md +72 -0
  60. package/resource/knowledge/chat/preset/android/features/contact-list.md +41 -0
  61. package/resource/knowledge/chat/preset/android/features/conversation-list.md +123 -0
  62. package/resource/knowledge/chat/preset/android/features/language.md +142 -0
  63. package/resource/knowledge/chat/preset/android/features/message-input.md +57 -0
  64. package/resource/knowledge/chat/preset/android/features/message-list.md +142 -0
  65. package/resource/knowledge/chat/preset/android/features/search.md +64 -0
  66. package/resource/{doc/chatkit → knowledge/chat/preset}/android/features/theme.md +21 -18
  67. package/resource/knowledge/chat/preset/android-view/integration.md +448 -0
  68. package/resource/knowledge/chat/preset/flutter/features/chat-setting.md +62 -0
  69. package/resource/knowledge/chat/preset/flutter/features/contact-list.md +40 -0
  70. package/resource/knowledge/chat/preset/flutter/features/conversation-list.md +129 -0
  71. package/resource/knowledge/chat/preset/flutter/features/language.md +104 -0
  72. package/resource/knowledge/chat/preset/flutter/features/message-input.md +54 -0
  73. package/resource/knowledge/chat/preset/flutter/features/message-list.md +163 -0
  74. package/resource/knowledge/chat/preset/flutter/features/search.md +59 -0
  75. package/resource/{doc/chatkit → knowledge/chat/preset}/flutter/features/theme.md +47 -19
  76. package/resource/knowledge/chat/preset/ios/features/chat-setting.md +92 -0
  77. package/resource/knowledge/chat/preset/ios/features/contact-list.md +119 -0
  78. package/resource/knowledge/chat/preset/ios/features/conversation-list.md +134 -0
  79. package/resource/knowledge/chat/preset/ios/features/language.md +105 -0
  80. package/resource/knowledge/chat/preset/ios/features/message-input.md +69 -0
  81. package/resource/knowledge/chat/preset/ios/features/message-list.md +164 -0
  82. package/resource/knowledge/chat/preset/ios/features/search.md +94 -0
  83. package/resource/{doc/chatkit → knowledge/chat/preset}/ios/features/theme.md +54 -51
  84. package/resource/{doc/chatkit/ios → knowledge/chat/preset/ios-uikit}/integration.md +157 -94
  85. package/resource/knowledge/chat/preset/react/features/chat-setting.md +123 -0
  86. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/contact-list.md +256 -104
  87. package/resource/knowledge/chat/preset/react/features/conversation-actions.md +217 -0
  88. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/conversation-list.md +86 -79
  89. package/resource/knowledge/chat/preset/react/features/conversation-preview.md +99 -0
  90. package/resource/knowledge/chat/preset/react/features/conversation-search.md +58 -0
  91. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-input.md +30 -83
  92. package/resource/{doc/chatkit/react/components → knowledge/chat/preset/react/features}/message-list.md +22 -25
  93. package/resource/knowledge/chat/preset/react/features/search.md +531 -0
  94. package/resource/knowledge/chat/preset/react/features/theme.md +16 -0
  95. package/resource/knowledge/chat/preset/vue/features/chat-header.md +331 -0
  96. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/chat-setting.md +0 -4
  97. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/contact-list.md +59 -53
  98. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-actions.md +49 -43
  99. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-list.md +61 -49
  100. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-preview.md +43 -40
  101. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/conversation-search.md +1 -1
  102. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/message-input.md +128 -105
  103. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/message-list.md +108 -195
  104. package/resource/{doc/chatkit/vue/components → knowledge/chat/preset/vue/features}/search.md +74 -68
  105. package/resource/knowledge/chat/preset/vue/features/theme.md +136 -0
  106. package/resource/knowledge/chat/urls/error-code.md +16 -0
  107. package/resource/knowledge/chat/urls/product.md +61 -0
  108. package/resource/knowledge/chat/urls/restapi.md +226 -0
  109. package/resource/knowledge/chat/urls/sdk/android.md +84 -0
  110. package/resource/knowledge/chat/urls/sdk/flutter.md +73 -0
  111. package/resource/knowledge/chat/urls/sdk/ios.md +84 -0
  112. package/resource/knowledge/chat/urls/sdk/web.md +88 -0
  113. package/resource/knowledge/chat/urls/webhook.md +73 -0
  114. package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/AudioEffectStore.md +79 -76
  115. package/resource/knowledge/livekit/core-sdk/api-reference/android/BarrageStore.md +174 -0
  116. package/resource/knowledge/livekit/core-sdk/api-reference/android/BattleStore.md +329 -0
  117. package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/CameraView.md +7 -6
  118. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoGuestStore.md +434 -0
  119. package/resource/knowledge/livekit/core-sdk/api-reference/android/CoHostStore.md +362 -0
  120. package/resource/knowledge/livekit/core-sdk/api-reference/android/DeviceStore.md +466 -0
  121. package/resource/knowledge/livekit/core-sdk/api-reference/android/GiftStore.md +173 -0
  122. package/resource/{doc/livekit/core-sdk/live/android/api-reference → knowledge/livekit/core-sdk/api-reference/android}/LikeStore.md +12 -10
  123. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveAudienceStore.md +291 -0
  124. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveCoreView.md +78 -0
  125. package/resource/knowledge/livekit/core-sdk/api-reference/android/LiveSeatStore.md +439 -0
  126. package/resource/knowledge/livekit/core-sdk/api-reference/android/LoginStore.md +221 -0
  127. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/AudioEffectStore.md +79 -76
  128. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BarrageStore.md +212 -0
  129. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/BaseBeautyStore.md +43 -45
  130. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/BattleStore.md +312 -0
  131. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoGuestStore.md +404 -0
  132. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/CoHostStore.md +334 -0
  133. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/DeviceStore.md +420 -0
  134. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/GiftStore.md +166 -0
  135. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/LikeStore.md +12 -11
  136. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveAudienceStore.md +281 -0
  137. package/resource/{doc/livekit/core-sdk/live/flutter/api-reference → knowledge/livekit/core-sdk/api-reference/flutter}/LiveCoreView.md +49 -42
  138. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LiveSeatStore.md +397 -0
  139. package/resource/knowledge/livekit/core-sdk/api-reference/flutter/LoginStore.md +183 -0
  140. package/resource/{doc/livekit/core-sdk/live/ios/api-reference → knowledge/livekit/core-sdk/api-reference/ios}/AudioEffectStore.md +79 -75
  141. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BarrageStore.md +192 -0
  142. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BaseBeautyStore.md +146 -0
  143. package/resource/knowledge/livekit/core-sdk/api-reference/ios/BattleStore.md +309 -0
  144. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoGuestStore.md +370 -0
  145. package/resource/knowledge/livekit/core-sdk/api-reference/ios/CoHostStore.md +339 -0
  146. package/resource/knowledge/livekit/core-sdk/api-reference/ios/DeviceStore.md +503 -0
  147. package/resource/knowledge/livekit/core-sdk/api-reference/ios/GiftStore.md +188 -0
  148. package/resource/{doc/livekit/core-sdk/live/ios/api-reference → knowledge/livekit/core-sdk/api-reference/ios}/LikeStore.md +12 -10
  149. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveAudienceStore.md +289 -0
  150. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveCoreView.md +78 -0
  151. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LiveSeatStore.md +434 -0
  152. package/resource/knowledge/livekit/core-sdk/api-reference/ios/LoginStore.md +187 -0
  153. package/resource/knowledge/livekit/core-sdk/api-reference/web/index.md +780 -0
  154. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audience-list.md +59 -51
  155. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-audio-effect.md +37 -34
  156. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-barrage.md +68 -38
  157. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-base-beauty.md +18 -15
  158. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-co-guest-interaction.md +17 -17
  159. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-gift.md +86 -80
  160. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-host-interaction.md +53 -49
  161. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-integration.md +47 -45
  162. package/resource/{doc → knowledge}/livekit/core-sdk/live/android/live-live-list.md +26 -22
  163. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audience-list.md +16 -13
  164. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-audio-effect.md +28 -24
  165. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-barrage.md +33 -21
  166. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-base-beauty.md +29 -25
  167. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-co-guest-interaction.md +21 -20
  168. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-gift.md +78 -69
  169. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-host-interaction.md +47 -43
  170. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-integration.md +48 -45
  171. package/resource/{doc → knowledge}/livekit/core-sdk/live/flutter/live-live-list.md +27 -23
  172. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audience-list.md +15 -12
  173. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-audio-effect.md +39 -36
  174. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-barrage.md +42 -29
  175. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-base-beauty.md +19 -16
  176. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-co-guest-interaction.md +20 -19
  177. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-gift.md +55 -49
  178. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-host-interaction.md +50 -46
  179. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-integration.md +48 -46
  180. package/resource/{doc → knowledge}/livekit/core-sdk/live/ios/live-live-list.md +26 -22
  181. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audience-list.md +59 -51
  182. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-audio-effect.md +41 -38
  183. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-barrage.md +67 -37
  184. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +53 -46
  185. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-gift.md +86 -80
  186. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-host-interaction.md +45 -40
  187. package/resource/{doc → knowledge}/livekit/core-sdk/voice/android/voice-integration.md +43 -42
  188. package/resource/knowledge/livekit/core-sdk/voice/android/voice-room-list.md +523 -0
  189. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-audience-list.md +16 -13
  190. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-audio-effect.md +54 -50
  191. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-barrage.md +33 -21
  192. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +34 -28
  193. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-gift.md +73 -64
  194. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-integration.md +46 -43
  195. package/resource/{doc → knowledge}/livekit/core-sdk/voice/flutter/voice-room-list.md +165 -148
  196. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audience-list.md +19 -16
  197. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-audio-effect.md +40 -37
  198. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-barrage.md +41 -28
  199. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +54 -47
  200. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-gift.md +52 -46
  201. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-host-interaction.md +55 -50
  202. package/resource/{doc → knowledge}/livekit/core-sdk/voice/ios/voice-integration.md +47 -45
  203. package/resource/knowledge/livekit/core-sdk/voice/ios/voice-room-list.md +404 -0
  204. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-audience-list.md +40 -57
  205. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-audio-effect.md +38 -49
  206. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-barrage.md +53 -53
  207. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-co-guest-interaction.md +106 -116
  208. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-gift.md +49 -59
  209. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-integration.md +52 -45
  210. package/resource/{doc → knowledge}/livekit/core-sdk/voice/uni-app/voice-room-list.md +38 -46
  211. package/resource/knowledge/livekit/preset/live/vue/features/barrage.md +915 -0
  212. package/resource/knowledge/livekit/preset/live/vue/features/live-audience-list.md +179 -0
  213. package/resource/knowledge/livekit/preset/live/vue/features/live-view.md +419 -0
  214. package/resource/knowledge/push/config/android/fcm.md +133 -0
  215. package/resource/knowledge/push/config/android/honor.md +111 -0
  216. package/resource/knowledge/push/config/android/huawei.md +106 -0
  217. package/resource/knowledge/push/config/android/meizu.md +121 -0
  218. package/resource/knowledge/push/config/android/oppo.md +108 -0
  219. package/resource/knowledge/push/config/android/vivo.md +101 -0
  220. package/resource/knowledge/push/config/android/xiaomi.md +99 -0
  221. package/resource/knowledge/push/integration/android.md +1028 -0
  222. package/resource/knowledge/push/integration/donut.md +271 -0
  223. package/resource/knowledge/push/integration/flutter.md +363 -0
  224. package/resource/knowledge/push/integration/harmonyos.md +72 -0
  225. package/resource/knowledge/push/integration/ios.md +705 -0
  226. package/resource/knowledge/push/integration/react-native.md +337 -0
  227. package/resource/knowledge/push/integration/uni-app.md +461 -0
  228. package/resource/knowledge/push/integration/unity.md +357 -0
  229. package/resource/knowledge/push/integration/unreal-engine.md +353 -0
  230. package/resource/knowledge/push/overview/prepare.md +30 -0
  231. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/call-user-to-room.md +22 -20
  232. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/room-participant-state.md +22 -193
  233. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/room-state.md +33 -32
  234. package/resource/{doc/roomkit/android/features → knowledge/roomkit/core-sdk/android}/schedule-room.md +30 -29
  235. package/resource/knowledge/roomkit/core-sdk/flutter/call-user-to-room.md +230 -0
  236. package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/room-participant-state.md +22 -21
  237. package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/room-state.md +29 -28
  238. package/resource/{doc/roomkit/flutter/features → knowledge/roomkit/core-sdk/flutter}/schedule-room.md +17 -16
  239. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/call-user-to-room.md +22 -20
  240. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/room-participant-state.md +49 -218
  241. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/room-state.md +37 -37
  242. package/resource/{doc/roomkit/ios/features → knowledge/roomkit/core-sdk/ios}/schedule-room.md +28 -28
  243. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/call-user-to-room.md +122 -7
  244. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/device-detection.md +318 -3
  245. package/resource/knowledge/roomkit/core-sdk/vue/device-state.md +1504 -0
  246. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/free-beauty-panel.md +4 -3
  247. package/resource/knowledge/roomkit/core-sdk/vue/room-chat.md +709 -0
  248. package/resource/knowledge/roomkit/core-sdk/vue/room-participant-state.md +1105 -0
  249. package/resource/knowledge/roomkit/core-sdk/vue/room-state.md +635 -0
  250. package/resource/knowledge/roomkit/core-sdk/vue/room-view.md +529 -0
  251. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/schedule-room.md +256 -13
  252. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/screen-share.md +218 -25
  253. package/resource/{doc/roomkit/vue/features → knowledge/roomkit/core-sdk/vue}/virtual-background.md +4 -3
  254. package/resource/{doc/roomkit → knowledge/roomkit/preset}/android/integration.md +50 -64
  255. package/resource/{doc/roomkit → knowledge/roomkit/preset}/flutter/integration.md +34 -31
  256. package/resource/{doc/roomkit → knowledge/roomkit/preset}/ios/integration.md +45 -53
  257. package/resource/knowledge/roomkit/preset/react/integration.md +571 -0
  258. package/resource/{doc → knowledge}/rtcengine/web/how_to_run_web_sdk_demo.md +31 -15
  259. package/resource/{doc → knowledge}/rtcengine/web/plugin/21-advanced-auto-play-policy.md +9 -3
  260. package/resource/{doc → knowledge}/rtcengine/web/plugin/22-advanced-audio-mixer.md +1 -1
  261. package/resource/{doc → knowledge}/rtcengine/web/plugin/23-advanced-support-detection.md +1 -1
  262. package/resource/{doc → knowledge}/rtcengine/web/plugin/24-advanced-network-quality.md +6 -6
  263. package/resource/{doc → knowledge}/rtcengine/web/plugin/25-advanced-device-change.md +1 -1
  264. package/resource/{doc → knowledge}/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +4 -4
  265. package/resource/{doc → knowledge}/rtcengine/web/plugin/27-advanced-small-stream.md +4 -4
  266. package/resource/{doc → knowledge}/rtcengine/web/plugin/31-advanced-plugins-overview.md +1 -1
  267. package/resource/{doc → knowledge}/trtc/android/TRTCCloud.md +547 -495
  268. package/resource/{doc → knowledge}/trtc/android/TRTCCloudDef.md +434 -403
  269. package/resource/{doc → knowledge}/trtc/android/TRTCCloudListener.md +394 -348
  270. package/resource/{doc → knowledge}/trtc/android/TRTCStatistics.md +17 -15
  271. package/resource/{doc → knowledge}/trtc/android/TXAudioEffectManager.md +227 -197
  272. package/resource/knowledge/trtc/android/TXBeautyManager.md +415 -0
  273. package/resource/{doc → knowledge}/trtc/android/TXDeviceManager.md +70 -63
  274. package/resource/{doc → knowledge}/trtc/android/TXLiteAVCode.md +19 -17
  275. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/ITRTCCloud.md +599 -544
  276. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/ITRTCStatistics.md +17 -15
  277. package/resource/knowledge/trtc/c++/ITXAudioEffectManager.md +502 -0
  278. package/resource/knowledge/trtc/c++/ITXDeviceManager.md +403 -0
  279. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TRTCCloudCallback.md +439 -387
  280. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TRTCTypeDef.md +417 -387
  281. package/resource/{doc/trtc/C++ → knowledge/trtc/c++}/TXLiteAVCode.md +19 -17
  282. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCCloud.md +619 -559
  283. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCCloudDelegate.md +409 -360
  284. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TRTCStatistics.md +17 -15
  285. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXAudioEffectManager.md +187 -164
  286. package/resource/knowledge/trtc/ios/TXBeautyManager.md +416 -0
  287. package/resource/knowledge/trtc/ios/TXDeviceManager.md +399 -0
  288. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXLiteAVCode.md +19 -17
  289. package/resource/{doc/trtc/iOS → knowledge/trtc/ios}/TXLiveSDKTypeDef.md +422 -396
  290. package/server-config.js +0 -1
  291. package/server.js +22 -12
  292. package/streamable-http.js +0 -1
  293. package/tools/call/get_native_call_uikit_integration.js +2 -4
  294. package/tools/call/get_native_callkit_core_integration.js +2 -6
  295. package/tools/call/get_web_call_uikit_integration.js +2 -4
  296. package/tools/chat/get_native_chat_uikit_integration.js +2 -4
  297. package/tools/chat/get_web_chat_uikit_integration.js +2 -4
  298. package/tools/common/get_usersig.js +0 -1
  299. package/tools/common/present_framework_choice.js +9 -4
  300. package/tools/common/record_answer.js +19 -26
  301. package/tools/common/record_feedback.js +17 -31
  302. package/tools/common/search_trtc_knowledge.js +44 -0
  303. package/tools/definitions/get_native_call_uikit_integration_def.js +2 -1
  304. package/tools/definitions/get_native_callkit_core_integration_def.js +2 -1
  305. package/tools/definitions/get_native_chat_uikit_integration_def.js +3 -2
  306. package/tools/definitions/get_native_livekit_core_integration_def.js +2 -1
  307. package/tools/definitions/get_usersig_def.js +0 -1
  308. package/tools/definitions/get_web_call_uikit_integration_def.js +2 -1
  309. package/tools/definitions/get_web_chat_uikit_integration_def.js +2 -1
  310. package/tools/definitions/get_web_live_uikit_integration_def.js +4 -3
  311. package/tools/definitions/get_web_room_core_integration_def.js +46 -0
  312. package/tools/definitions/get_web_room_uikit_integration_def.js +3 -1
  313. package/tools/definitions/integration-boundary.js +5 -0
  314. package/tools/definitions/present_framework_choice_def.js +11 -10
  315. package/tools/definitions/record_answer_def.js +6 -5
  316. package/tools/definitions/record_feedback_def.js +4 -3
  317. package/tools/definitions/search_trtc_knowledge_def.js +69 -0
  318. package/tools/index.js +5 -37
  319. package/tools/live/get_native_livekit_core_integration.js +1 -4
  320. package/tools/live/get_web_live_uikit_integration.js +2 -5
  321. package/tools/room/get_web_room_core_integration.js +47 -0
  322. package/tools/room/get_web_room_uikit_integration.js +2 -4
  323. package/utils/generate-structured-result.js +4 -11
  324. package/utils/generate-usersig.js +0 -1
  325. package/utils/get-device-identifier.js +0 -1
  326. package/utils/get-doc-content.js +14 -9
  327. package/utils/http-get.js +0 -1
  328. package/utils/http-post.js +0 -1
  329. package/utils/report-cls-client.js +22 -21
  330. package/utils/report-es-client.js +1 -2
  331. package/utils/report-runtime-error-cls-client.js +0 -1
  332. package/index.js.map +0 -1
  333. package/resource/doc/callkit/core-sdk/.gitkeep +0 -0
  334. package/resource/doc/callkit/core-sdk/android/answer-call.md +0 -942
  335. package/resource/doc/callkit/core-sdk/android/make-call.md +0 -876
  336. package/resource/doc/callkit/core-sdk/android/offline-push.md +0 -368
  337. package/resource/doc/callkit/core-sdk/flutter/answer-call.md +0 -1132
  338. package/resource/doc/callkit/core-sdk/flutter/make-call.md +0 -1206
  339. package/resource/doc/callkit/core-sdk/flutter/offline-push.md +0 -357
  340. package/resource/doc/callkit/core-sdk/ios/answer-call.md +0 -1009
  341. package/resource/doc/callkit/core-sdk/ios/make-call.md +0 -1154
  342. package/resource/doc/callkit/core-sdk/ios/offline-push.md +0 -470
  343. package/resource/doc/callkit/core-sdk/uni-app/answer-call.md +0 -1146
  344. package/resource/doc/callkit/core-sdk/uni-app/make-call.md +0 -1267
  345. package/resource/doc/callkit/faq/android-faq.md +0 -767
  346. package/resource/doc/callkit/faq/flutter-faq.md +0 -749
  347. package/resource/doc/callkit/faq/ios-faq.md +0 -759
  348. package/resource/doc/callkit/faq/web-faq.md +0 -753
  349. package/resource/doc/callkit/preset/android/api.md +0 -330
  350. package/resource/doc/callkit/preset/flutter/api.md +0 -401
  351. package/resource/doc/callkit/preset/ios/api.md +0 -282
  352. package/resource/doc/callkit/preset/ios/integration.md +0 -188
  353. package/resource/doc/callkit/preset/react/api.md +0 -600
  354. package/resource/doc/callkit/preset/react/integration.md +0 -86
  355. package/resource/doc/callkit/preset/vue/api.md +0 -600
  356. package/resource/doc/callkit/preset/vue/integration.md +0 -83
  357. package/resource/doc/chatkit/android/faq.md +0 -109
  358. package/resource/doc/chatkit/faq/android_sdk/client-api.md +0 -280
  359. package/resource/doc/chatkit/faq/common/product.md +0 -82
  360. package/resource/doc/chatkit/faq/common/server.md +0 -53
  361. package/resource/doc/chatkit/faq/common/server_error_code.md +0 -74
  362. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +0 -183
  363. package/resource/doc/chatkit/faq/flutter_sdk/faq.md +0 -54
  364. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +0 -279
  365. package/resource/doc/chatkit/faq/web_sdk/error_code.md +0 -47
  366. package/resource/doc/chatkit/faq/web_sdk/faq.md +0 -292
  367. package/resource/doc/chatkit/flutter/faq.md +0 -22
  368. package/resource/doc/chatkit/ios/faq.md +0 -109
  369. package/resource/doc/chatkit/react/components/avatar.md +0 -104
  370. package/resource/doc/chatkit/react/components/chat-header.md +0 -148
  371. package/resource/doc/chatkit/react/components/chat-setting.md +0 -117
  372. package/resource/doc/chatkit/react/components/chat.md +0 -38
  373. package/resource/doc/chatkit/react/components/component-list.md +0 -35
  374. package/resource/doc/chatkit/react/components/conversation-actions.md +0 -174
  375. package/resource/doc/chatkit/react/components/conversation-preview.md +0 -116
  376. package/resource/doc/chatkit/react/components/conversation-search.md +0 -57
  377. package/resource/doc/chatkit/react/components/search.md +0 -282
  378. package/resource/doc/chatkit/react/components/tuikit.md +0 -43
  379. package/resource/doc/chatkit/react/faq.md +0 -26
  380. package/resource/doc/chatkit/vue/components/avatar.md +0 -104
  381. package/resource/doc/chatkit/vue/components/chat-header.md +0 -149
  382. package/resource/doc/chatkit/vue/components/chat.md +0 -42
  383. package/resource/doc/chatkit/vue/components/component-list.md +0 -89
  384. package/resource/doc/chatkit/vue/components/tuikit.md +0 -45
  385. package/resource/doc/chatkit/vue/components/userpicker.md +0 -256
  386. package/resource/doc/chatkit/vue/faq.md +0 -35
  387. package/resource/doc/livekit/core-sdk/live/android/api-reference/BarrageStore.md +0 -148
  388. package/resource/doc/livekit/core-sdk/live/android/api-reference/BattleStore.md +0 -316
  389. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoGuestStore.md +0 -419
  390. package/resource/doc/livekit/core-sdk/live/android/api-reference/CoHostStore.md +0 -325
  391. package/resource/doc/livekit/core-sdk/live/android/api-reference/DeviceStore.md +0 -436
  392. package/resource/doc/livekit/core-sdk/live/android/api-reference/GiftStore.md +0 -165
  393. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveAudienceStore.md +0 -239
  394. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveCoreView.md +0 -74
  395. package/resource/doc/livekit/core-sdk/live/android/api-reference/LiveSeatStore.md +0 -417
  396. package/resource/doc/livekit/core-sdk/live/android/api-reference/LoginStore.md +0 -207
  397. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BarrageStore.md +0 -158
  398. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/BattleStore.md +0 -304
  399. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoGuestStore.md +0 -394
  400. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/CoHostStore.md +0 -303
  401. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/DeviceStore.md +0 -410
  402. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/GiftStore.md +0 -160
  403. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveAudienceStore.md +0 -231
  404. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LiveSeatStore.md +0 -375
  405. package/resource/doc/livekit/core-sdk/live/flutter/api-reference/LoginStore.md +0 -170
  406. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BarrageStore.md +0 -165
  407. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BaseBeautyStore.md +0 -143
  408. package/resource/doc/livekit/core-sdk/live/ios/api-reference/BattleStore.md +0 -298
  409. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoGuestStore.md +0 -349
  410. package/resource/doc/livekit/core-sdk/live/ios/api-reference/CoHostStore.md +0 -297
  411. package/resource/doc/livekit/core-sdk/live/ios/api-reference/DeviceStore.md +0 -471
  412. package/resource/doc/livekit/core-sdk/live/ios/api-reference/GiftStore.md +0 -179
  413. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveAudienceStore.md +0 -238
  414. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveCoreView.md +0 -74
  415. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LiveSeatStore.md +0 -412
  416. package/resource/doc/livekit/core-sdk/live/ios/api-reference/LoginStore.md +0 -173
  417. package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +0 -365
  418. package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +0 -336
  419. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +0 -780
  420. package/resource/doc/livekit/preset/live/vue/components/barrage.md +0 -291
  421. package/resource/doc/livekit/preset/live/vue/components/co-guest-panel.md +0 -88
  422. package/resource/doc/livekit/preset/live/vue/components/live-audience-list.md +0 -164
  423. package/resource/doc/livekit/preset/live/vue/components/live-scene-panel.md +0 -130
  424. package/resource/doc/livekit/preset/live/vue/components/live-view.md +0 -203
  425. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +0 -211
  426. package/resource/doc/livekit/preset/live/vue/faq.md +0 -1
  427. package/resource/doc/roomkit/faq/common/error-code.md +0 -67
  428. package/resource/doc/roomkit/flutter/features/call-user-to-room.md +0 -228
  429. package/resource/doc/roomkit/vue/faq.md +0 -1
  430. package/resource/doc/roomkit/vue/features/device-state.md +0 -460
  431. package/resource/doc/roomkit/vue/features/room-chat.md +0 -369
  432. package/resource/doc/roomkit/vue/features/room-participant-state.md +0 -385
  433. package/resource/doc/roomkit/vue/features/room-state.md +0 -280
  434. package/resource/doc/roomkit/vue/features/room-view.md +0 -241
  435. package/resource/doc/roomkit/vue/integration.md +0 -315
  436. package/resource/doc/rtcengine/faq/web_sdk/.gitkeep +0 -0
  437. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +0 -472
  438. package/resource/doc/trtc/C++/ITXDeviceManager.md +0 -388
  439. package/resource/doc/trtc/android/TXBeautyManager.md +0 -403
  440. package/resource/doc/trtc/iOS/TXBeautyManager.md +0 -404
  441. package/resource/doc/trtc/iOS/TXDeviceManager.md +0 -382
  442. package/server-config.js.map +0 -1
  443. package/server.js.map +0 -1
  444. package/streamable-http.js.map +0 -1
  445. package/tools/call/get_callkit_api.js +0 -33
  446. package/tools/call/get_callkit_api.js.map +0 -1
  447. package/tools/call/get_native_call_uikit_integration.js.map +0 -1
  448. package/tools/call/get_native_callkit_core_integration.js.map +0 -1
  449. package/tools/call/get_web_call_uikit_integration.js.map +0 -1
  450. package/tools/chat/get_native_chat_uikit_feature_detail.js +0 -35
  451. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +0 -1
  452. package/tools/chat/get_native_chat_uikit_integration.js.map +0 -1
  453. package/tools/chat/get_web_chat_uikit_component_detail.js +0 -35
  454. package/tools/chat/get_web_chat_uikit_component_detail.js.map +0 -1
  455. package/tools/chat/get_web_chat_uikit_integration.js.map +0 -1
  456. package/tools/common/get_faq.js +0 -266
  457. package/tools/common/get_faq.js.map +0 -1
  458. package/tools/common/get_usersig.js.map +0 -1
  459. package/tools/common/present_framework_choice.js.map +0 -1
  460. package/tools/common/record_answer.js.map +0 -1
  461. package/tools/common/record_feedback.js.map +0 -1
  462. package/tools/common/record_skill_session.js +0 -69
  463. package/tools/common/record_skill_session.js.map +0 -1
  464. package/tools/definitions/get_callkit_api_def.js +0 -28
  465. package/tools/definitions/get_callkit_api_def.js.map +0 -1
  466. package/tools/definitions/get_faq_def.js +0 -40
  467. package/tools/definitions/get_faq_def.js.map +0 -1
  468. package/tools/definitions/get_native_call_uikit_integration_def.js.map +0 -1
  469. package/tools/definitions/get_native_callkit_core_integration_def.js.map +0 -1
  470. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +0 -31
  471. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +0 -1
  472. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +0 -1
  473. package/tools/definitions/get_native_livekit_core_features_def.js +0 -33
  474. package/tools/definitions/get_native_livekit_core_features_def.js.map +0 -1
  475. package/tools/definitions/get_native_livekit_core_integration_def.js.map +0 -1
  476. package/tools/definitions/get_native_trtc_sdk_docs_def.js +0 -32
  477. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +0 -1
  478. package/tools/definitions/get_usersig_def.js.map +0 -1
  479. package/tools/definitions/get_web_call_uikit_integration_def.js.map +0 -1
  480. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +0 -31
  481. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +0 -1
  482. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +0 -1
  483. package/tools/definitions/get_web_live_uikit_integration_def.js.map +0 -1
  484. package/tools/definitions/get_web_livekit_api_def.js +0 -27
  485. package/tools/definitions/get_web_livekit_api_def.js.map +0 -1
  486. package/tools/definitions/get_web_livekit_component_detail_def.js +0 -29
  487. package/tools/definitions/get_web_livekit_component_detail_def.js.map +0 -1
  488. package/tools/definitions/get_web_room_uikit_integration_def.js.map +0 -1
  489. package/tools/definitions/get_web_roomkit_feature_detail_def.js +0 -30
  490. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +0 -1
  491. package/tools/definitions/get_web_trtc_sdk_api_def.js +0 -25
  492. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +0 -1
  493. package/tools/definitions/get_web_trtc_sdk_integration_def.js +0 -25
  494. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +0 -1
  495. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +0 -25
  496. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +0 -1
  497. package/tools/definitions/present_framework_choice_def.js.map +0 -1
  498. package/tools/definitions/record_answer_def.js.map +0 -1
  499. package/tools/definitions/record_feedback_def.js.map +0 -1
  500. package/tools/definitions/record_skill_session_def.js +0 -31
  501. package/tools/definitions/record_skill_session_def.js.map +0 -1
  502. package/tools/index.js.map +0 -1
  503. package/tools/live/get_native_livekit_core_features.js +0 -68
  504. package/tools/live/get_native_livekit_core_features.js.map +0 -1
  505. package/tools/live/get_native_livekit_core_integration.js.map +0 -1
  506. package/tools/live/get_web_live_uikit_integration.js.map +0 -1
  507. package/tools/live/get_web_livekit_api.js +0 -33
  508. package/tools/live/get_web_livekit_api.js.map +0 -1
  509. package/tools/live/get_web_livekit_component_detail.js +0 -35
  510. package/tools/live/get_web_livekit_component_detail.js.map +0 -1
  511. package/tools/room/get_web_room_uikit_integration.js.map +0 -1
  512. package/tools/room/get_web_roomkit_feature_detail.js +0 -69
  513. package/tools/room/get_web_roomkit_feature_detail.js.map +0 -1
  514. package/tools/rtcengine/get_web_trtc_sdk_api.js +0 -32
  515. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +0 -1
  516. package/tools/rtcengine/get_web_trtc_sdk_integration.js +0 -32
  517. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +0 -1
  518. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +0 -32
  519. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +0 -1
  520. package/tools/trtc/get_native_trtc_sdk_docs.js +0 -74
  521. package/tools/trtc/get_native_trtc_sdk_docs.js.map +0 -1
  522. package/utils/build-session-directives.js +0 -122
  523. package/utils/build-session-directives.js.map +0 -1
  524. package/utils/generate-structured-result.js.map +0 -1
  525. package/utils/generate-usersig.js.map +0 -1
  526. package/utils/get-device-identifier.js.map +0 -1
  527. package/utils/get-doc-content.js.map +0 -1
  528. package/utils/handle-framework.js +0 -9
  529. package/utils/handle-framework.js.map +0 -1
  530. package/utils/handle-state-name.js +0 -29
  531. package/utils/handle-state-name.js.map +0 -1
  532. package/utils/http-get.js.map +0 -1
  533. package/utils/http-post.js.map +0 -1
  534. package/utils/report-cls-client.js.map +0 -1
  535. package/utils/report-es-client.js.map +0 -1
  536. package/utils/report-runtime-error-cls-client.js.map +0 -1
  537. /package/resource/{doc/callkit/faq/common → knowledge/callkit/faq}/error-code.md +0 -0
  538. /package/resource/{doc/livekit/faq/common → knowledge/livekit/faq}/error-code.md +0 -0
  539. /package/resource/{doc → knowledge}/rtcengine/web/api.md +0 -0
  540. /package/resource/{doc/rtcengine/faq/web/web.md → knowledge/rtcengine/web/faq.md} +0 -0
  541. /package/resource/{doc → knowledge}/rtcengine/web/how_to_integrated_web_sdk.md +0 -0
  542. /package/resource/{doc → knowledge}/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +0 -0
  543. /package/resource/{doc → knowledge}/rtcengine/web/plugin/28-advanced-beauty.md +0 -0
  544. /package/resource/{doc → knowledge}/rtcengine/web/plugin/29-advanced-water-mark.md +0 -0
  545. /package/resource/{doc → knowledge}/rtcengine/web/plugin/30-advanced-cross-room-link.md +0 -0
  546. /package/resource/{doc → knowledge}/rtcengine/web/plugin/34-advanced-proxy.md +0 -0
  547. /package/resource/{doc → knowledge}/rtcengine/web/plugin/35-advanced-ai-denoiser.md +0 -0
  548. /package/resource/{doc → knowledge}/rtcengine/web/plugin/36-advanced-virtual-background.md +0 -0
  549. /package/resource/{doc → knowledge}/rtcengine/web/plugin/37-advanced-voice-changer.md +0 -0
  550. /package/resource/{doc → knowledge}/rtcengine/web/plugin/38-advanced-basic-beauty.md +0 -0
  551. /package/resource/{doc → knowledge}/rtcengine/web/plugin/39-advanced-video-decoder.md +0 -0
  552. /package/resource/{doc → knowledge}/rtcengine/web/plugin/40-advanced-video-mixer.md +0 -0
  553. /package/resource/{doc → knowledge}/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +0 -0
  554. /package/resource/{doc → knowledge}/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +0 -0
  555. /package/resource/{doc → knowledge}/rtcengine/web/plugin/43-advanced-face-detection.md +0 -0
  556. /package/resource/{doc/rtcengine/faq/common → knowledge/share}/userSig.md +0 -0
@@ -0,0 +1,915 @@
1
+ `TUILiveKit` 弹幕系统为直播场景提供完整互动解决方案,能够增强直播的互动性和趣味性。通过本文档,您可快速实现直播间弹幕互动功能,并支持深度定制以满足业务需求。
2
+
3
+ |**PC 浏览器**|**移动端 H5**|
4
+ |---------|---------|
5
+ |||
6
+
7
+ ## 组件构成
8
+
9
+ |**组件名称**|**具体内容**|
10
+ |---------|---------|
11
+ |**弹幕消息组件(BarrageList)**|负责实时展示和管理弹幕消息流的组件,提供**消息列表渲染、时间聚合、用户交互和响应式适配**等完整的消息展示解决方案。|
12
+ |**消息发送组件(BarrageInput)**|提供富文本编辑和消息发送功能的输入组件,集成**表情选择器、字符限制、状态管理和跨平台适配**,为用户提供流畅的消息输入体验。|
13
+
14
+ ## 组件接入
15
+
16
+ ### 步骤1:配置环境并开通服务
17
+
18
+ 在进行快速接入之前,请参考 [准备工作](https://cloud.tencent.com/document/product/647/123049),完成相关环境配置及开通对应服务。
19
+
20
+ ### 步骤2:安装依赖
21
+
22
+ 【npm】
23
+ ``` bash
24
+ npm install tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3 --save
25
+ ```
26
+
27
+ 【pnpm】
28
+ ``` bash
29
+ pnpm add tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3
30
+ ```
31
+
32
+ 【yarn】
33
+ ``` bash
34
+ yarn add tuikit-atomicx-vue3 @tencentcloud/uikit-base-component-vue3
35
+ ```
36
+
37
+ ### 步骤3:接入弹幕消息和发送组件
38
+
39
+ 在您的项目中引入并使用弹幕组件,可直接复制如下示例至您的项目中展示**完整的直播间弹幕消息组件以及消息发送组件**。
40
+ ``` typescript
41
+ <template>
42
+ <UIKitProvider theme="dark">
43
+ <div class="app">
44
+ <div class="chat-container">
45
+ <div class="chat-content">
46
+ <BarrageList class="barrage-list" />
47
+ </div>
48
+ <div class="chat-input">
49
+ <BarrageInput class="barrage-input" />
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </UIKitProvider>
54
+ </template>
55
+
56
+ <script setup lang="ts">
57
+ import { onMounted, ref } from 'vue';
58
+ import { UIKitProvider } from '@tencentcloud/uikit-base-component-vue3';
59
+ import { BarrageList, BarrageInput, useLoginState, useLiveListState } from 'tuikit-atomicx-vue3';
60
+
61
+ const { login } = useLoginState();
62
+ const { joinLive } = useLiveListState();
63
+
64
+ async function initLogin() {
65
+ try {
66
+ await login({
67
+ sdkAppId: 0, // SDKAppID, 可以参考步骤 1 获取
68
+ userId: '', // UserID, 可以参考步骤 1 获取
69
+ userSig: '', // userSig, 可以参考步骤 1 获取
70
+ });
71
+ } catch (error) {
72
+ console.error('登录失败:', error);
73
+ }
74
+ }
75
+
76
+ onMounted(async () => {
77
+ await initLogin();
78
+ await joinLive({
79
+ liveId: '输入对应直播间 LiveId', // 输入对应 liveId 进入直播间
80
+ });
81
+ });
82
+ </script>
83
+
84
+ <style scoped>.app{width:100vw;height:100vh;display:flex;justify-content:center;align-items:center;padding:20px;box-sizing:border-box}.chat-container{width:100%;max-width:500px;height:600px;border-radius:16px;display:flex;flex-direction:column;overflow:hidden}.chat-content{flex:1;overflow:hidden}.barrage-list{width:100%;height:100%}.chat-input{background-color:var(--bg-color-dialog);padding:16px}.barrage-input{width:100%}</style>
85
+ ```
86
+
87
+ ## 自定义组件
88
+
89
+ **弹幕系统**的两个核心组件均支持灵活的自定义能力,您可以根据业务需求选择不同的定制方式。
90
+
91
+ ### 弹幕消息组件(BarrageList)自定义
92
+
93
+ 弹幕消息组件提供了三个层次的自定义能力,您可以根据定制深度选择合适的方式:
94
+
95
+ |**定制场景**|**推荐方式**|**说明**|
96
+ |---------|---------|---------|
97
+ |仅调整容器/消息项的颜色、间距等样式|<br>Props: `containerStyle` / `itemStyle`|最简单,几行样式代码即可实现。|
98
+ |替换整个消息渲染组件,但保留组件内部的消息分类逻辑|<br>Props: `Message`|传入自定义 Vue 组件,控制单条消息的渲染方式。(**礼物消息的渲染无法控制**)|
99
+ |完全接管消息渲染,需要按消息类型差异化展示(例如区分礼物消息)|<br>Slot: `message-item`|最灵活,所有消息(含礼物)都通过插槽传递。|
100
+
101
+ | <strong>修改前</strong> | <strong>修改后</strong> | | |
102
+ | --- | --- | --- | --- |
103
+ | <strong>containerStyle + itemStyle</strong> | <strong>替换消息组件(Message Props)</strong> | <strong>完全接管消息渲染(Slot 插槽)</strong> | |
104
+ | | | | |
105
+
106
+ > **注意:**
107
+ >
108
+
109
+ > 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 `Message Props` 或 `message-item` Slot 接管自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您参考 如何处理自定义弹幕消息时的表情渲染 处理。
110
+ >
111
+
112
+ #### **containerStyle + itemStyle **调整样式
113
+
114
+ 通过 `containerStyle`、`itemStyle`、`style`、`height` 等 Props,您可以快速调整弹幕消息组件的外观,无需编写额外组件。
115
+ ``` typescript
116
+ <BarrageList
117
+ :containerStyle="{
118
+ padding: '10px',
119
+ overflow: 'hidden',
120
+ }"
121
+ :itemStyle="{
122
+ background: 'rgba(99, 102, 241, 0.12)',
123
+ borderRadius: '12px',
124
+ padding: '8px 12px',
125
+ border: '1px solid rgba(139, 92, 246, 0.2)',
126
+ boxShadow: '0 1px 4px rgba(0, 0, 0, 0.15)',
127
+ marginRight: '6px',
128
+ boxSizing: 'border-box',
129
+ }"
130
+ />
131
+ ```
132
+
133
+ #### **替换消息组件(Message Props)**
134
+
135
+ 如果样式调整无法满足需求,您可以编写一个自定义 Vue 组件,然后通过 BarrageList 的 `Message` Props 传入,从而完全替换默认的消息渲染逻辑。BarrageList 在渲染每条消息时,会将当前弹幕消息对象作为 `message` Props 传递给您的自定义组件。
136
+
137
+ 因此,您的自定义组件需要声明接收一个 `message` Props:
138
+
139
+ |**Props**|**类型**|**说明**|
140
+ |---------|---------|---------|
141
+ |message|[Barrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Barrage)|当前弹幕消息对象,包含 `textContent`(文本内容)、`sender`(发送者信息)、`timestampInSecond`(发送时间戳)、`data`(自定义数据 JSON 字符串)等字段。|
142
+
143
+ **步骤 1:创建自定义消息组件**
144
+ ``` typescript
145
+ // MyCustomMessage.vue
146
+ <template>
147
+ <div class="custom-message">
148
+ <div class="message-header">
149
+ <span class="user-name">{{ getSenderName(message) }}</span>
150
+ <span class="message-time">{{ formatTime(message.timestampInSecond) }}</span>
151
+ </div>
152
+ <div class="message-content">
153
+ {{ getMessageText(message) }}
154
+ </div>
155
+ </div>
156
+ </template>
157
+
158
+ <script setup lang="ts">
159
+ import type { Barrage } from 'tuikit-atomicx-vue3';
160
+
161
+ const props = defineProps<{
162
+ message: Barrage;
163
+ }>();
164
+
165
+ const formatTime = (timestampInSecond: number) => {
166
+ return new Date(timestampInSecond * 1000).toLocaleTimeString('zh-CN', {
167
+ hour: '2-digit',
168
+ minute: '2-digit'
169
+ });
170
+ };
171
+
172
+ const getSenderName = (message: Barrage) => {
173
+ const sender = message.sender;
174
+ return sender.nameCard || sender.userName || sender.userId || '匿名用户';
175
+ };
176
+
177
+ const getMessageText = (message: Barrage) => {
178
+ if (message.textContent) {
179
+ return message.textContent;
180
+ }
181
+ return '';
182
+ };
183
+ </script>
184
+
185
+ <style scoped>.custom-message{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:white;padding:12px;border-radius:12px;margin:4px 0;box-shadow:0 2px 8px rgba(0,0,0,0.1);transition:transform 0.2s ease}.custom-message:hover{transform:translateY(-2px)}.message-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;opacity:0.9}.user-name{font-weight:500;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.message-time{font-size:11px;opacity:0.7}.message-content{font-size:14px;line-height:1.4;word-break:break-word}</style>
186
+ ```
187
+
188
+ **步骤 2:在 BarrageList 中使用自定义组件**
189
+ ``` typescript
190
+ <template>
191
+ <BarrageList :Message="MyCustomMessage" />
192
+ </template>
193
+
194
+ <script setup lang="ts">
195
+ import MyCustomMessage from "./MyCustomMessage.vue";
196
+ </script>
197
+ ```
198
+
199
+ #### 完全接管消息渲染(Slot 插槽)
200
+
201
+ 当您需要按消息类型进行差异化渲染(例如区分普通消息和礼物消息),可以使用 [message-item](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageListComponent) 插槽完全接管消息渲染,需要注意的是:
202
+ 1. message-item 插槽的优先级高于 Message Props,两者同时使用时以插槽为准。
203
+
204
+ 2. PC 和 H5 两端的插槽行为一致,所有消息(包括礼物消息)都会传递给插槽。
205
+
206
+ 3. 不使用插槽时,H5 端默认不渲染礼物消息(礼物消息在独立的礼物区域展示)。
207
+
208
+ ##### 插槽参数
209
+ | 插槽名 | 参数名 | 参数类型 | 说明 |
210
+ | --- | --- | --- | --- |
211
+ | message-item | message | <a href="https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Barrage">Barrage</a> | 当前弹幕消息对象,包含 <code>textContent</code>(文本内容)、<code>sender</code>(发送者)、<code>messageType</code>(消息类型)、<code>data</code>(自定义数据 JSON 字符串)等字段。 |
212
+ | sender | <a href="https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-BarrageSender">BarrageSender</a> | 发送者信息,包含 <code>userId</code>、<code>userName</code>、<code>avatarUrl</code> 等字段。 | |
213
+
214
+ ``` typescript
215
+ <template>
216
+ <BarrageList>
217
+ <template #message-item="{ message, sender }">
218
+ <!-- 礼物消息 -->
219
+ <div v-if="isGiftMessage(message)" class="slot-gift-item">
220
+
221
+ <div class="slot-gift-info">
222
+ <span class="slot-gift-sender">{{ sender.nameCard || sender.userName || sender.userId }}</span>
223
+ <span class="slot-gift-detail">
224
+ 送出 <span class="slot-gift-name">{{ getGiftName(message) }}</span>
225
+ <span class="slot-gift-count"> x{{ getGiftCount(message) }}</span>
226
+ </span>
227
+ </div>
228
+ </div>
229
+ <!-- 普通文本消息 -->
230
+ <div v-else class="slot-text-item">
231
+ <span v-if="sender.userId === currentLive?.liveOwner?.userId" class="slot-owner-badge">主播</span>
232
+ <span class="slot-sender-name">{{ sender.nameCard || sender.userName || sender.userId }}:</span>
233
+ <span class="slot-message-text">{{ message.textContent }}</span>
234
+ </div>
235
+ </template>
236
+ </BarrageList>
237
+ </template>
238
+
239
+ <script setup lang="ts">
240
+ import { BarrageList, useLiveListState } from 'tuikit-atomicx-vue3';
241
+
242
+ const { currentLive } = useLiveListState();
243
+
244
+ function safelyParseJSON(str: string): any {
245
+ try {
246
+ return JSON.parse(str);
247
+ } catch {
248
+ return null;
249
+ }
250
+ }
251
+
252
+ function isGiftMessage(message: { data?: string }): boolean {
253
+ if (!message.data) return false;
254
+ const data = safelyParseJSON(message.data);
255
+ return data?.type === 'gift';
256
+ }
257
+
258
+ function getGiftData(message: { data?: string }) {
259
+ if (!message.data) return null;
260
+ const data = safelyParseJSON(message.data);
261
+ return data?.type === 'gift' ? data : null;
262
+ }
263
+
264
+ function getGiftName(message: { data?: string }): string {
265
+ return getGiftData(message)?.giftInfo?.name || '礼物';
266
+ }
267
+
268
+ function getGiftIcon(message: { data?: string }): string {
269
+ return getGiftData(message)?.giftInfo?.iconUrl || '';
270
+ }
271
+
272
+ function getGiftCount(message: { data?: string }): number {
273
+ return getGiftData(message)?.count || 1;
274
+ }
275
+ </script>
276
+
277
+ <style scoped>.slot-text-item{font-size:12px;line-height:1.6;padding:6px 12px;border-radius:10px;background:rgba(255,255,255,0.05);word-break:break-word}.slot-owner-badge{display:inline-block;background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;font-size:10px;font-weight:600;padding:1px 8px;border-radius:10px;margin-right:6px;vertical-align:middle;line-height:1.6}.slot-sender-name{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}.slot-message-text{color:rgba(255,255,255,0.85)}.slot-gift-item{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:14px;background:linear-gradient(135deg,rgba(255,0,128,0.15),rgba(255,140,0,0.12) 50%,rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.25);box-shadow:0 0 12px rgba(255,0,128,0.1),inset 0 0 12px rgba(255,140,0,0.05)}.slot-gift-img{width:40px;height:40px;flex-shrink:0;object-fit:contain;filter:drop-shadow(0 0 6px rgba(255,140,0,0.5))}.slot-gift-info{display:flex;flex-direction:column;gap:2px;min-width:0}.slot-gift-sender{font-size:12px;color:rgba(255,255,255,0.8);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-gift-detail{font-size:12px;color:rgba(255,255,255,0.5)}.slot-gift-name{color:#ffaa00;font-weight:700;text-shadow:0 0 8px rgba(255,170,0,0.4)}.slot-gift-count{color:#ff4081;font-weight:800;font-size:13px;margin-left:2px;text-shadow:0 0 8px rgba(255,64,129,0.4)}</style>
278
+ ```
279
+
280
+ #### Props 速查表
281
+
282
+ |**参数名**|**参数类型**|**默认值**|**说明**|
283
+ |---------|---------|---------|---------|
284
+ |Message|Component|[Message](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageListComponent)|自定义消息组件。|
285
+ |containerStyle|CSSProperties|-|自定义消息列表容器样式。|
286
+ |itemStyle|CSSProperties|-|自定义单条消息项样式。|
287
+ |height|String|-|组件高度,支持 CSS 单位。|
288
+ |style|CSSProperties|-|指定根元素自定义样式。|
289
+
290
+ ### 消息发送组件(BarrageInput)自定义配置
291
+
292
+ 消息发送组件提供了样式、尺寸、输入行为和发送流程等多个维度的自定义能力,以下按使用场景逐一说明。
293
+ | <strong>修改前</strong> | <strong>修改后</strong> | | |
294
+ | --- | --- | --- | --- |
295
+ | <strong>containerStyle 调整样式</strong> | <code>containerClass 自定义样式</code> | <strong>调整尺寸</strong> | |
296
+ | | | | |
297
+
298
+ #### 调整样式
299
+
300
+ 消息发送组件提供了 `containerStyle`、`containerClass` 属性用于自定义外观。
301
+
302
+ ##### 通过内联样式自定义
303
+
304
+ 给 `containerStyle` 属性传递一个样式对象,可调整输入框容器的样式。
305
+ ``` typescript
306
+ <BarrageInput
307
+ :containerStyle="{
308
+ background: 'linear-gradient(135deg, rgba(255, 0, 128, 0.1) 0%, rgba(99, 102, 241, 0.15) 50%, rgba(168, 85, 247, 0.1) 100%)',
309
+ border: '1.5px solid rgba(168, 85, 247, 0.35)',
310
+ borderRadius: '24px',
311
+ padding: '8px 18px',
312
+ boxShadow: '0 0 20px rgba(139, 92, 246, 0.15), 0 0 40px rgba(255, 0, 128, 0.05), inset 0 0 12px rgba(99, 102, 241, 0.08)',
313
+ }"
314
+ />
315
+ ```
316
+
317
+ ##### 通过 CSS 类名自定义
318
+
319
+ 给 `containerClass` 属性传递一个类名字符串,可使用自定义 CSS 类控制样式。
320
+ ``` typescript
321
+ <template>
322
+ <BarrageInput containerClass="cyberpunk-input" />
323
+ </template>
324
+
325
+ <style>.cyberpunk-input{background:linear-gradient(135deg,rgba(15,10,40,0.9),rgba(30,15,60,0.85))!important;border:1.5px solid transparent!important;border-radius:16px!important;padding:8px 18px!important;box-shadow:0 0 15px rgba(139,92,246,0.2),0 0 30px rgba(255,0,128,0.08),inset 0 1px 0 rgba(255,255,255,0.05)!important;transition:box-shadow .3s ease!important;border-image:linear-gradient(135deg,#ff0080,#7c3aed,#06b6d4) 1!important;border-image-slice:1!important}.cyberpunk-input:focus-within{box-shadow:0 0 24px rgba(139,92,246,0.35),0 0 48px rgba(255,0,128,0.12),inset 0 1px 0 rgba(255,255,255,0.08)!important}</style>
326
+ ```
327
+
328
+ #### 调整尺寸
329
+
330
+ 通过 `width`、`height`、`minHeight`、`maxHeight` 参数,您可以灵活地控制 [BarrageInput](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageInputComponent) 的尺寸。
331
+ ``` typescript
332
+ <BarrageInput
333
+ width="70%"
334
+ height="60px"
335
+ minHeight="60px"
336
+ maxHeight="60px"
337
+ :containerStyle="{
338
+ margin: '0 auto',
339
+ background: 'linear-gradient(135deg, rgba(99, 102, 241, 0.12) 0%, rgba(168, 85, 247, 0.08) 100%)',
340
+ border: '1.5px solid rgba(139, 92, 246, 0.3)',
341
+ borderRadius: '16px',
342
+ padding: '10px 18px',
343
+ boxShadow: '0 0 16px rgba(139, 92, 246, 0.12)',
344
+ }"
345
+ />
346
+ ```
347
+
348
+ #### 介入发送流程
349
+
350
+ 消息发送组件提供了两个钩子,允许您在弹幕发送前后介入处理流程:
351
+ - [onWillSendBarrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageInputComponent):发送前触发,返回 `false` 可拦截发送(支持异步),适用于内容审核、敏感词过滤。
352
+
353
+ - [onDidSendBarrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageInputComponent):发送成功后触发,适用于埋点统计、发送成功提示。
354
+
355
+ |参数名|类型|说明|
356
+ |---------|---------|---------|
357
+ |onWillSendBarrage|(message: [Barrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Barrage)) => void \| boolean \| Promise<boolean>;|弹幕发送前的回调钩子。返回 `false` 可拦截本次发送,返回 `true` 或 `void` 则允许发送。|
358
+ |onDidSendBarrage|(message: [Barrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Barrage)) => void;|弹幕发送成功后的回调钩子,适用于埋点统计、发送成功提示等场景。|
359
+
360
+ ``` typescript
361
+ <template>
362
+ <BarrageInput
363
+ :onWillSendBarrage="handleWillSend"
364
+ :onDidSendBarrage="handleDidSend"
365
+ />
366
+ </template>
367
+
368
+ <script setup lang="ts">
369
+ import { BarrageInput } from 'tuikit-atomicx-vue3';
370
+ import type { Barrage } from 'tuikit-atomicx-vue3';
371
+
372
+ // 发送前内容过滤 — 返回 false 可拦截发送
373
+ function handleWillSend(message: Barrage): boolean {
374
+ const sensitiveWords = ['spam', 'abuse'];
375
+ const hasSensitive = sensitiveWords.some(word => (message.textContent || '').includes(word));
376
+ if (hasSensitive) {
377
+ alert('消息包含敏感内容,已拦截发送');
378
+ return false;
379
+ }
380
+ return true;
381
+ }
382
+
383
+ // 发送成功后的埋点统计
384
+ function handleDidSend(message: Barrage) {
385
+ console.log('已发送:', message.textContent);
386
+ }
387
+ </script>
388
+ ```
389
+
390
+ #### 监听事件
391
+
392
+ 消息发送组件支持以下事件:
393
+
394
+ |**事件名**|**参数**|**说明**|
395
+ |---------|---------|---------|
396
+ |focus|-|输入框获得焦点时触发。|
397
+ |blur|-|输入框失去焦点时触发。|
398
+
399
+ #### Props 速查表
400
+
401
+ |**参数名**|**类型**|**默认值**|**说明**|
402
+ |---------|---------|---------|---------|
403
+ |containerClass|String|''|自定义容器的 CSS 类名。|
404
+ |containerStyle|Record<string, any><br>|{}|自定义容器的内联样式。|
405
+ |width|String|-|组件宽度,支持 CSS 单位。|
406
+ |height|String|-|组件高度,支持 CSS 单位。|
407
+ |minHeight|String|'40px'|组件最小高度,支持 CSS 单位。|
408
+ |maxHeight|String|'140px'|组件最大高度,支持 CSS 单位。|
409
+ |placeholder|String|-|输入框占位符文本。|
410
+ |disabled|Boolean|false|是否禁用输入框。|
411
+ |autoFocus|Boolean|true|是否自动聚焦到输入框。|
412
+ |maxLength|Number|80|输入内容的最大字符数限制。|
413
+ |onWillSendBarrage|(message: [Barrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Barrage)) => void \| boolean \| Promise<boolean>;|-|弹幕发送前的回调钩子。接收即将发送的 `Barrage` 消息对象作为参数,返回 `false` 可拦截本次发送,返回 `true` 或 `void` 则允许发送。支持异步回调(`Promise<boolean>`),适用于内容审核、敏感词过滤等场景。|
414
+ |onDidSendBarrage|(message: [Barrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-Barrage)) => void;|-|弹幕发送成功后的回调钩子。接收已成功发送的 `Barrage` 消息对象作为参数,适用于埋点统计、发送成功提示等场景。|
415
+
416
+ ### 进阶场景:如何快速实现“弹幕抽奖”
417
+
418
+ 弹幕抽奖是直播互动的核心玩法。通过 `tuikit-atomicx-vue3 `提供的自定义消息能力,您可以轻松实现从“参与抽奖”到“中奖公示”的全流程。
419
+ | <strong>主播端</strong> | <strong>观众端</strong> | | | | |
420
+ | --- | --- | --- | --- | --- | --- |
421
+ | <strong>发起抽奖</strong> | <strong>准备开奖</strong> | <strong>开奖结算页面</strong> | <strong>参与抽奖页面</strong> | <code>参与抽奖成功</code> | <strong>开奖结算页面</strong> |
422
+ | | | | | | |
423
+
424
+ #### 1. 主播端:发起抽奖与开奖
425
+
426
+ 主播点击"发起抽奖"后,通过 [sendCustomMessage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#sendCustomMessage) 向直播间所有人广播一条抽奖开始的消息。之后通过 [subscribeEvent](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#subscribeEvent) 实时监听观众的参与请求,记录参与名单。主播点击"开奖"时随机抽取中奖者,并再次通过自定义消息将中奖结果广播给所有人。
427
+ ``` typescript
428
+ <template>
429
+ <!-- Lottery control panel for host -->
430
+ <div v-if="isInLive" class="lottery-panel">
431
+ <div v-if="!lotteryActive && !lotteryWinner">
432
+ <button @click="startLottery">🎯 发起抽奖</button>
433
+ </div>
434
+ <div v-else-if="lotteryActive">
435
+ <span>抽奖进行中 · {{ lotteryParticipants.length }} 人参与</span>
436
+ <button :disabled="lotteryParticipants.length === 0" @click="drawLottery">🎲 开奖</button>
437
+ </div>
438
+ <div v-else-if="lotteryWinner">
439
+ <span>🏆 中奖:{{ lotteryWinner.userName }}</span>
440
+ <button @click="startLottery">再来一轮</button>
441
+ </div>
442
+ </div>
443
+ </template>
444
+
445
+ <script setup lang="ts">
446
+ import { ref, computed } from 'vue';
447
+ import {
448
+ useBarrageState,
449
+ useLoginState,
450
+ useLiveListState,
451
+ BarrageType,
452
+ BarrageEvent,
453
+ } from 'tuikit-atomicx-vue3';
454
+
455
+ const { sendCustomMessage, subscribeEvent, unsubscribeEvent } = useBarrageState();
456
+ const { loginUserInfo } = useLoginState();
457
+ const { currentLive } = useLiveListState();
458
+ const isInLive = computed(() => !!currentLive.value?.liveId);
459
+
460
+ const lotteryActive = ref(false);
461
+ const lotteryParticipants = ref<{ userId: string; userName: string }[]>([]);
462
+ const lotteryWinner = ref<{ userId: string; userName: string } | null>(null);
463
+
464
+ // Step 1: 主播发送 LOTTERY_START 类型的消息给所有观众
465
+ const startLottery = async () => {
466
+ lotteryActive.value = true;
467
+ lotteryParticipants.value = [];
468
+ lotteryWinner.value = null;
469
+ await sendCustomMessage({
470
+ businessId: 'LOTTERY_START',
471
+ data: JSON.stringify({
472
+ lotteryId: `LOTTERY_${Date.now()}`,
473
+ hostName: loginUserInfo.value?.userName || loginUserInfo.value?.userId || '',
474
+ }),
475
+ });
476
+ };
477
+
478
+ // Step 2: 监听来自观众 LOTTERY_JOIN 类型的消息
479
+ const handleLotteryBarrage = (barrage: any) => {
480
+ if (barrage.messageType === BarrageType.custom && barrage.businessId === 'LOTTERY_JOIN') {
481
+ try {
482
+ const data = JSON.parse(barrage.data);
483
+ const already = lotteryParticipants.value.some(p => p.userId === barrage.sender?.userId);
484
+ if (!already) {
485
+ lotteryParticipants.value.push({
486
+ userId: barrage.sender?.userId,
487
+ userName: data.userName || barrage.sender?.userName || '',
488
+ });
489
+ }
490
+ } catch {
491
+ // ignore
492
+ }
493
+ }
494
+ };
495
+
496
+ // Step 3: 主播随机选择一个「中奖者」并发送 LOTTERY_RESULT 类型的消息
497
+ const drawLottery = async () => {
498
+ if (lotteryParticipants.value.length === 0) return;
499
+ const winnerIndex = Math.floor(Math.random() * lotteryParticipants.value.length);
500
+ const winner = lotteryParticipants.value[winnerIndex];
501
+ lotteryWinner.value = winner;
502
+ await sendCustomMessage({
503
+ businessId: 'LOTTERY_RESULT',
504
+ data: JSON.stringify({
505
+ winnerId: winner.userId,
506
+ winnerName: winner.userName,
507
+ }),
508
+ });
509
+ lotteryActive.value = false;
510
+ };
511
+
512
+ subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
513
+ </script>
514
+
515
+ <style scoped>.lottery-panel{padding:8px 0;border-top:1px solid rgba(255,255,255,0.1);display:flex;justify-content:center;gap:10px;align-items:center}.lottery-panel button{padding:6px 20px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-panel button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-panel button:disabled{opacity:.5;cursor:not-allowed}.lottery-panel span{font-size:12px;color:rgba(255,255,255,0.7)}</style>
516
+ ```
517
+
518
+ #### 2. 观众端:参与抽奖
519
+
520
+ 观众通过 [subscribeEvent](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#subscribeEvent) 监听直播间消息。当收到主播发起的抽奖消息时,显示"参与抽奖"按钮;观众点击参与后,向直播间广播一条参与请求;当收到主播公布的中奖结果时,展示中奖横幅。
521
+ ``` typescript
522
+ <template>
523
+ <!-- Show join button when lottery is active -->
524
+ <div v-if="lotteryActive" class="lottery-bar">
525
+ <button :disabled="hasJoinedLottery" @click="joinLottery">
526
+ {{ hasJoinedLottery ? '✅ 已参与' : '🎯 参与抽奖' }}
527
+ </button>
528
+ <span>{{ lotteryParticipants.length }} 人已参与</span>
529
+ </div>
530
+ <!-- Show winner banner -->
531
+ <div v-if="lotteryWinnerName" class="lottery-winner-banner">
532
+ 🏆 恭喜 {{ lotteryWinnerName }} 中奖!
533
+ </div>
534
+ </template>
535
+
536
+ <script setup lang="ts">
537
+ import { ref } from 'vue';
538
+ import {
539
+ useBarrageState,
540
+ useLoginState,
541
+ BarrageType,
542
+ BarrageEvent,
543
+ } from 'tuikit-atomicx-vue3';
544
+
545
+ const { sendCustomMessage, subscribeEvent, unsubscribeEvent } = useBarrageState();
546
+ const { loginUserInfo } = useLoginState();
547
+
548
+ const lotteryActive = ref(false);
549
+ const hasJoinedLottery = ref(false);
550
+ const lotteryParticipants = ref<string[]>([]);
551
+ const lotteryWinnerName = ref('');
552
+
553
+ // 当观众点击 "参与抽奖" 时发送 LOTTERY_JOIN 类型的消息
554
+ const joinLottery = async () => {
555
+ await sendCustomMessage({
556
+ businessId: 'LOTTERY_JOIN',
557
+ data: JSON.stringify({
558
+ lotteryId: 'ACT_2026_001',
559
+ userName: loginUserInfo.value?.userName || loginUserInfo.value?.userId || '',
560
+ timestamp: Date.now(),
561
+ }),
562
+ });
563
+ hasJoinedLottery.value = true;
564
+ };
565
+
566
+ // 监听所有 LOTTERY_START 类型的消息
567
+ const handleLotteryBarrage = (barrage: any) => {
568
+ if (barrage.messageType !== BarrageType.custom) return;
569
+
570
+ if (barrage.businessId === 'LOTTERY_START') {
571
+ // 主播开始了新的抽奖
572
+ lotteryActive.value = true;
573
+ hasJoinedLottery.value = false;
574
+ lotteryParticipants.value = [];
575
+ lotteryWinnerName.value = '';
576
+ } else if (barrage.businessId === 'LOTTERY_JOIN') {
577
+ // 有人参与了抽奖
578
+ try {
579
+ const data = JSON.parse(barrage.data);
580
+ if (!lotteryParticipants.value.includes(data.userName)) {
581
+ lotteryParticipants.value.push(data.userName);
582
+ }
583
+ } catch {
584
+ // ignore
585
+ }
586
+ } else if (barrage.businessId === 'LOTTERY_RESULT') {
587
+ // 主播宣布「中奖者」
588
+ lotteryActive.value = false;
589
+ try {
590
+ const data = JSON.parse(barrage.data);
591
+ lotteryWinnerName.value = data.winnerName || '';
592
+ setTimeout(() => { lotteryWinnerName.value = ''; }, 5000);
593
+ } catch {
594
+ // ignore
595
+ }
596
+ }
597
+ };
598
+
599
+ subscribeEvent(BarrageEvent.onBarrageReceived, handleLotteryBarrage);
600
+ </script>
601
+
602
+ <style scoped>.lottery-bar{display:flex;align-items:center;gap:10px;padding:8px 16px;border-top:1px solid rgba(255,255,255,0.1)}.lottery-bar button{padding:6px 16px;border:none;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;color:#fff;background:linear-gradient(135deg,#ff0080,#7c3aed);box-shadow:0 0 12px rgba(255,0,128,0.2);transition:all .2s ease}.lottery-bar button:hover:not(:disabled){box-shadow:0 0 20px rgba(255,0,128,0.35);transform:translateY(-1px)}.lottery-bar button:disabled{opacity:.6;cursor:not-allowed;background:rgba(139,92,246,0.3);box-shadow:none}.lottery-bar span{font-size:12px;color:rgba(255,255,255,0.5)}.lottery-winner-banner{padding:10px 14px;text-align:center;font-size:13px;font-weight:500;color:#fff;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);border-radius:12px;margin:4px 0;animation:banner-pop .4s ease}.lottery-winner-banner .winner-name{color:#fbbf24;font-weight:700}@keyframes banner-pop{0%{opacity:0;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}</style>
603
+ ```
604
+
605
+ 通过 [BarrageList](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageListComponent) 的 `message-item` 插槽对不同类型的抽奖消息进行差异化渲染。
606
+ ``` typescript
607
+ <template>
608
+ <BarrageList>
609
+ <template #message-item="{ message, sender }">
610
+ <!-- 主播发起抽奖 -->
611
+ <div v-if="message.businessId === 'LOTTERY_START'" class="lottery-sys-msg">
612
+ 🎯 主播发起了抽奖,快来参与!
613
+ </div>
614
+ <!-- 观众参与抽奖 -->
615
+ <div v-else-if="message.businessId === 'LOTTERY_JOIN'" class="lottery-join-msg">
616
+ 🎊 {{ sender.nameCard || sender.userName || sender.userId }} 参加了抽奖
617
+ </div>
618
+ <!-- 中奖结果 -->
619
+ <div v-else-if="message.businessId === 'LOTTERY_RESULT'" class="lottery-result-msg">
620
+ 🏆 恭喜 <span class="winner-name">{{ getWinnerName(message) }}</span> 中奖!
621
+ </div>
622
+ <!-- 普通文本消息 -->
623
+ <div v-else-if="message.textContent" class="normal-msg">
624
+ <span class="msg-sender">{{ sender.nameCard || sender.userName || sender.userId }}:</span>
625
+ <span>{{ message.textContent }}</span>
626
+ </div>
627
+ </template>
628
+ </BarrageList>
629
+ </template>
630
+
631
+ <script setup lang="ts">
632
+ import { BarrageList } from 'tuikit-atomicx-vue3';
633
+
634
+ function getWinnerName(message: { data?: string }): string {
635
+ if (!message.data) return '';
636
+ try {
637
+ const data = JSON.parse(message.data);
638
+ return data.winnerName || '';
639
+ } catch {
640
+ return '';
641
+ }
642
+ }
643
+ </script>
644
+
645
+ <style scoped>.lottery-sys-msg{font-size:12px;padding:8px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(255,0,128,0.12),rgba(168,85,247,0.1));border:1px solid rgba(255,0,128,0.2);color:rgba(255,200,50,0.95);font-weight:500;text-align:center}.lottery-join-msg{font-size:12px;padding:6px 12px;border-radius:10px;background:rgba(139,92,246,0.08);color:rgba(167,139,250,0.85)}.lottery-result-msg{font-size:13px;padding:10px 14px;border-radius:12px;background:linear-gradient(135deg,rgba(245,158,11,0.15),rgba(239,68,68,0.1));border:1px solid rgba(245,158,11,0.25);color:#fff;font-weight:500;text-align:center}.winner-name{color:#fbbf24;font-weight:700}.normal-msg{font-size:12px;line-height:1.6;padding:4px 0;word-break:break-word}.msg-sender{color:rgba(167,139,250,0.85);font-weight:500;margin-right:4px}</style>
646
+ ```
647
+
648
+ ## 常见问题
649
+
650
+ ### 如何在自定义弹幕消息中区分房主和观众?
651
+
652
+ 您可以根据 `Barrage` 消息中的 [sender.userId](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#type-BarrageSender) 和直播间 [ownerId](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#interface-TUIRoomInfo) 对比来判断是否为房主,并显示您想要的特定效果。
653
+ ``` typescript
654
+ import { useLiveListState } from 'tuikit-atomicx-vue3';
655
+
656
+ const { currentLive } = useLiveListState();
657
+
658
+ function isLiveOwner(userId: string): boolean {
659
+ return userId === currentLive.value?.liveOwner.userId;
660
+ }
661
+ ```
662
+
663
+ ### 如何拦截用户发送的违规弹幕?
664
+
665
+ 您可以利用 `BarrageInput` 的 [onWillSendBarrage](https://web.sdk.qcloud.com/trtc/live/web/doc/zh/index.html#module-BarrageInputComponent) 发送前钩子:
666
+ - 同步/异步拦截:该钩子支持返回 `Promise<boolean>`。您可以调用后台的敏感词过滤接口,若返回 false,弹幕将不会发出。
667
+
668
+ - 示例:
669
+
670
+ ``` typescript
671
+ async function handleWillSend(message) {
672
+ const isLegal = await checkMessageWithAI(message.textContent);
673
+ return isLegal; // 若为 false,组件内部会自动停止发送流程
674
+ }
675
+ ```
676
+
677
+ ### 如何处理自定义弹幕消息时的表情渲染?
678
+
679
+ 使用 BarrageList 的默认消息组件时,表情消息会自动渲染为图片。但当您通过 Message Props 或 message-item Slot 自定义消息渲染时,message.textContent 中的表情编码(例如 [TUIEmoji_Flower])不会自动解析,需要您自行处理。
680
+
681
+ 处理自定义弹幕消息时的表情渲染
682
+
683
+ **表情编码格式**
684
+
685
+ 弹幕消息中的表情以 [TUIEmoji_xxx] 格式嵌入在 textContent 中。例如:
686
+ ``` plaintext
687
+ 大家好[TUIEmoji_Flower][TUIEmoji_Flower][TUIEmoji_Flower]
688
+ ```
689
+
690
+ 每个表情编码对应一张托管在 CDN 上的图片,基础 URL 为:
691
+ ``` plaintext
692
+ https://web.sdk.qcloud.com/im/assets/emoji-plugin/
693
+ ```
694
+
695
+ **解决方案**
696
+
697
+ **步骤1: 创建表情解析工具**
698
+
699
+ 创建一个 emojiParser.ts 工具文件,将 [TUIEmoji_xxx] 编码解析为可渲染的片段数组:
700
+ ``` typescript
701
+ // utils/emojiParser.ts
702
+
703
+ const EMOJI_BASE_URL = 'https://web.sdk.qcloud.com/im/assets/emoji-plugin/';
704
+
705
+ const EMOJI_URL_MAP: Record<string, string> = {
706
+ '[TUIEmoji_Expect]': 'emoji_0@2x.png',
707
+ '[TUIEmoji_Blink]': 'emoji_1@2x.png',
708
+ '[TUIEmoji_Guffaw]': 'emoji_2@2x.png',
709
+ '[TUIEmoji_KindSmile]': 'emoji_3@2x.png',
710
+ '[TUIEmoji_Haha]': 'emoji_4@2x.png',
711
+ '[TUIEmoji_Cheerful]': 'emoji_5@2x.png',
712
+ '[TUIEmoji_Smile]': 'emoji_6@2x.png',
713
+ '[TUIEmoji_Sorrow]': 'emoji_7@2x.png',
714
+ '[TUIEmoji_Speechless]': 'emoji_8@2x.png',
715
+ '[TUIEmoji_Amazed]': 'emoji_9@2x.png',
716
+ '[TUIEmoji_Complacent]': 'emoji_10@2x.png',
717
+ '[TUIEmoji_Lustful]': 'emoji_11@2x.png',
718
+ '[TUIEmoji_Stareyes]': 'emoji_12@2x.png',
719
+ '[TUIEmoji_Giggle]': 'emoji_13@2x.png',
720
+ '[TUIEmoji_Daemon]': 'emoji_14@2x.png',
721
+ '[TUIEmoji_Rage]': 'emoji_15@2x.png',
722
+ '[TUIEmoji_Yawn]': 'emoji_16@2x.png',
723
+ '[TUIEmoji_TearsLaugh]': 'emoji_17@2x.png',
724
+ '[TUIEmoji_Silly]': 'emoji_18@2x.png',
725
+ '[TUIEmoji_Wail]': 'emoji_19@2x.png',
726
+ '[TUIEmoji_Kiss]': 'emoji_20@2x.png',
727
+ '[TUIEmoji_Trapped]': 'emoji_21@2x.png',
728
+ '[TUIEmoji_Fear]': 'emoji_22@2x.png',
729
+ '[TUIEmoji_BareTeeth]': 'emoji_23@2x.png',
730
+ '[TUIEmoji_FlareUp]': 'emoji_24@2x.png',
731
+ '[TUIEmoji_Tact]': 'emoji_25@2x.png',
732
+ '[TUIEmoji_Shit]': 'emoji_26@2x.png',
733
+ '[TUIEmoji_ShutUp]': 'emoji_27@2x.png',
734
+ '[TUIEmoji_Sigh]': 'emoji_28@2x.png',
735
+ '[TUIEmoji_Hehe]': 'emoji_29@2x.png',
736
+ '[TUIEmoji_Silent]': 'emoji_30@2x.png',
737
+ '[TUIEmoji_Skull]': 'emoji_31@2x.png',
738
+ '[TUIEmoji_Mask]': 'emoji_32@2x.png',
739
+ '[TUIEmoji_Beer]': 'emoji_33@2x.png',
740
+ '[TUIEmoji_Cake]': 'emoji_34@2x.png',
741
+ '[TUIEmoji_RedPacket]': 'emoji_35@2x.png',
742
+ '[TUIEmoji_Bombs]': 'emoji_36@2x.png',
743
+ '[TUIEmoji_Ai]': 'emoji_37@2x.png',
744
+ '[TUIEmoji_Celebrate]': 'emoji_38@2x.png',
745
+ '[TUIEmoji_Bless]': 'emoji_39@2x.png',
746
+ '[TUIEmoji_Flower]': 'emoji_40@2x.png',
747
+ '[TUIEmoji_Watermelon]': 'emoji_41@2x.png',
748
+ '[TUIEmoji_Cow]': 'emoji_42@2x.png',
749
+ '[TUIEmoji_Fool]': 'emoji_43@2x.png',
750
+ '[TUIEmoji_Surprised]': 'emoji_44@2x.png',
751
+ '[TUIEmoji_Askance]': 'emoji_45@2x.png',
752
+ '[TUIEmoji_Monster]': 'emoji_46@2x.png',
753
+ '[TUIEmoji_Pig]': 'emoji_47@2x.png',
754
+ '[TUIEmoji_Coffee]': 'emoji_48@2x.png',
755
+ '[TUIEmoji_Ok]': 'emoji_49@2x.png',
756
+ '[TUIEmoji_Heart]': 'emoji_50@2x.png',
757
+ '[TUIEmoji_Sun]': 'emoji_51@2x.png',
758
+ '[TUIEmoji_Moon]': 'emoji_52@2x.png',
759
+ '[TUIEmoji_Star]': 'emoji_53@2x.png',
760
+ '[TUIEmoji_Rich]': 'emoji_54@2x.png',
761
+ '[TUIEmoji_Fortune]': 'emoji_55@2x.png',
762
+ '[TUIEmoji_857]': 'emoji_56@2x.png',
763
+ '[TUIEmoji_666]': 'emoji_57@2x.png',
764
+ '[TUIEmoji_Prohibit]': 'emoji_58@2x.png',
765
+ '[TUIEmoji_Convinced]': 'emoji_59@2x.png',
766
+ '[TUIEmoji_Knife]': 'emoji_60@2x.png',
767
+ '[TUIEmoji_Like]': 'emoji_61@2x.png',
768
+ };
769
+
770
+ export type EmojiSegment =
771
+ | { type: 'text'; text: string }
772
+ | { type: 'emoji'; src: string; key: string }
773
+ | { type: 'custom'; key: string };
774
+
775
+ /**
776
+ * Parse textContent containing [TUIEmoji_xxx] codes into renderable segments.
777
+ * Also supports custom emoji with [@custom_xxx] format.
778
+ *
779
+ * @example
780
+ * parseEmoji('Hello[TUIEmoji_Flower]!')
781
+ * // Returns:
782
+ * // [
783
+ * // { type: 'text', text: 'Hello' },
784
+ * // { type: 'emoji', src: 'https://...emoji_40@2x.png', key: '[TUIEmoji_Flower]' },
785
+ * // { type: 'text', text: '!' },
786
+ * // ]
787
+ */
788
+ export function parseEmoji(text: string): EmojiSegment[] {
789
+ const segments: EmojiSegment[] = [];
790
+ let temp = text;
791
+ while (temp !== '') {
792
+ const left = temp.indexOf('[');
793
+ const right = temp.indexOf(']');
794
+ if (left === 0) {
795
+ if (right === -1) {
796
+ segments.push({ type: 'text', text: temp });
797
+ temp = '';
798
+ } else {
799
+ const emojiKey = temp.slice(0, right + 1);
800
+ if (emojiKey.indexOf('@custom') > -1) {
801
+ // Custom emoji: [@custom_xxx] format, render with your own image source
802
+ segments.push({ type: 'custom', key: emojiKey });
803
+ temp = temp.substring(right + 1);
804
+ } else if (EMOJI_URL_MAP[emojiKey]) {
805
+ segments.push({
806
+ type: 'emoji',
807
+ src: EMOJI_BASE_URL + EMOJI_URL_MAP[emojiKey],
808
+ key: emojiKey,
809
+ });
810
+ temp = temp.substring(right + 1);
811
+ } else {
812
+ segments.push({ type: 'text', text: '[' });
813
+ temp = temp.slice(1);
814
+ }
815
+ }
816
+ } else if (left === -1) {
817
+ segments.push({ type: 'text', text: temp });
818
+ temp = '';
819
+ } else {
820
+ segments.push({ type: 'text', text: temp.slice(0, left) });
821
+ temp = temp.substring(left);
822
+ }
823
+ }
824
+ return segments;
825
+ }
826
+ ```
827
+
828
+ **步骤 2:在自定义组件中使用**
829
+
830
+ **在 Message Props 自定义组件中使用**
831
+ ``` typescript
832
+ // CustomBarrageMessage.vue
833
+ <template>
834
+ <div class="custom-message">
835
+ <span class="sender">{{ message.sender.userName }}:</span>
836
+ <span class="content">
837
+ <template v-for="(seg, i) in parseEmoji(message.textContent || '')" :key="i">
838
+
839
+ <span v-else-if="seg.type === 'custom'" class="custom-emoji">{{ seg.key }}</span>
840
+ <span v-else>{{ seg.text }}</span>
841
+ </template>
842
+ </span>
843
+ </div>
844
+ </template>
845
+
846
+ <script setup lang="ts">
847
+ import type { Barrage } from 'tuikit-atomicx-vue3';
848
+ import { parseEmoji } from './utils/emojiParser';
849
+
850
+ defineProps<{ message: Barrage }>();
851
+ </script>
852
+
853
+ <style scoped>
854
+ .emoji {
855
+ width: 20px;
856
+ height: 20px;
857
+ vertical-align: middle;
858
+ margin: 0 1px;
859
+ }
860
+ </style>
861
+ ```
862
+
863
+ **在 Slot 插槽中使用**
864
+ ``` typescript
865
+ <template>
866
+ <BarrageList>
867
+ <template #message-item="{ message, sender }">
868
+ <div class="barrage-item">
869
+ <span class="sender">{{ sender.userName }}:</span>
870
+ <span class="content">
871
+ <template v-for="(seg, i) in parseEmoji(message.textContent || '')" :key="i">
872
+
873
+ <span v-else-if="seg.type === 'custom'" class="custom-emoji">{{ seg.key }}</span>
874
+ <span v-else>{{ seg.text }}</span>
875
+ </template>
876
+ </span>
877
+ </div>
878
+ </template>
879
+ </BarrageList>
880
+ </template>
881
+
882
+ <script setup lang="ts">
883
+ import { BarrageList } from 'tuikit-atomicx-vue3';
884
+ import { parseEmoji } from './utils/emojiParser';
885
+ </script>
886
+
887
+ <style scoped>
888
+ .emoji {
889
+ width: 20px;
890
+ height: 20px;
891
+ vertical-align: middle;
892
+ margin: 0 1px;
893
+ }
894
+ </style>
895
+ ```
896
+
897
+ **解析原理**
898
+
899
+ parseEmoji 函数从左到右扫描文本,遇到 [ 时尝试匹配表情编码:
900
+ 1. 自定义表情([@custom_xxx]):生成一个 custom 类型片段,您需要根据 key 自行加载对应的图片资源。
901
+
902
+ 2. 内置表情([TUIEmoji_xxx]):匹配成功则生成 emoji 类型片段,包含对应的 CDN 图片地址。
903
+
904
+ 3. 匹配失败(例如 [普通文本]):将 [ 作为普通文本处理,继续扫描。
905
+
906
+ 4. 无 [ 符号:整段作为纯文本输出。
907
+
908
+ **说明:**
909
+ - 默认的 BarrageList 内置消息组件已包含表情解析能力,仅在自定义渲染时需要手动处理。
910
+
911
+ - 表情图片托管在腾讯云 CDN(https://web.sdk.qcloud.com/im/assets/emoji-plugin/),请确保您的网络环境可以访问该地址。
912
+
913
+ - 自定义表情使用 [@custom_xxx] 格式,parseEmoji 会将其识别为 custom 类型片段并保留 key,您需要根据业务自行映射图片地址进行渲染。
914
+
915
+ - 如需扩展内置表情,可在 EMOJI_URL_MAP 中添加对应的 key-value 映射。