koishi-plugin-kkk 1.0.0

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 (702) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/LICENSE +674 -0
  3. package/README.md +98 -0
  4. package/assets/web/assets/CronEditor-CYgFpX-g.js +1 -0
  5. package/assets/web/assets/DesktopLayout-iI43ij11.js +1 -0
  6. package/assets/web/assets/MobileLayout-CziU8MCR.js +1 -0
  7. package/assets/web/assets/ThemeSwitch-DFohhwd9.js +1 -0
  8. package/assets/web/assets/index-BRROK0vh.js +47 -0
  9. package/assets/web/assets/index-Dj-StEiS.css +2 -0
  10. package/assets/web/assets/separator-CxcFlCzz.js +1 -0
  11. package/assets/web/favicon.svg +1 -0
  12. package/assets/web/icons.svg +24 -0
  13. package/assets/web/index.html +15 -0
  14. package/assets/webui.html +115 -0
  15. package/client/index.ts +63 -0
  16. package/config/default_config/app.yaml +64 -0
  17. package/config/default_config/bilibili.yaml +116 -0
  18. package/config/default_config/config.json +157 -0
  19. package/config/default_config/cookies.yaml +11 -0
  20. package/config/default_config/douyin.yaml +99 -0
  21. package/config/default_config/kuaishou.yaml +8 -0
  22. package/config/default_config/pushlist.yaml +37 -0
  23. package/config/default_config/request.yaml +22 -0
  24. package/config/default_config/upload.yaml +50 -0
  25. package/config/default_config/xiaohongshu.yaml +23 -0
  26. package/dist/index.js +1 -0
  27. package/lib/compat/axios.js +23 -0
  28. package/lib/compat/cron.js +77 -0
  29. package/lib/compat/esm.js +15 -0
  30. package/lib/compat/express.js +23 -0
  31. package/lib/compat/heroui.js +12 -0
  32. package/lib/compat/lodash.js +33 -0
  33. package/lib/compat/logger.js +118 -0
  34. package/lib/compat/node-karin.js +1053 -0
  35. package/lib/compat/phosphor-icons.js +27 -0
  36. package/lib/compat/qqcard.js +256 -0
  37. package/lib/compat/root.js +44 -0
  38. package/lib/compat/runtime.js +87 -0
  39. package/lib/compat/segment.js +167 -0
  40. package/lib/compat/sqlite3.js +117 -0
  41. package/lib/compat/start.js +7 -0
  42. package/lib/compat/syncConfig.js +65 -0
  43. package/lib/compat/template-react.js +30 -0
  44. package/lib/compat/text.js +65 -0
  45. package/lib/compat/yaml.js +13 -0
  46. package/lib/configBridge.js +91 -0
  47. package/lib/index.js +775 -0
  48. package/lib/karin/app.js +34 -0
  49. package/lib/karin/apps/__ready.js +9 -0
  50. package/lib/karin/apps/admin.js +136 -0
  51. package/lib/karin/apps/help.js +233 -0
  52. package/lib/karin/apps/push.js +291 -0
  53. package/lib/karin/apps/qrlogin.js +176 -0
  54. package/lib/karin/apps/statistics.js +209 -0
  55. package/lib/karin/apps/testPush.js +247 -0
  56. package/lib/karin/apps/tools.js +473 -0
  57. package/lib/karin/apps/update.js +252 -0
  58. package/lib/karin/index.js +37 -0
  59. package/lib/karin/module/db/bilibili.js +831 -0
  60. package/lib/karin/module/db/douyin.js +918 -0
  61. package/lib/karin/module/db/index.js +165 -0
  62. package/lib/karin/module/db/migration.js +199 -0
  63. package/lib/karin/module/db/statistics.js +559 -0
  64. package/lib/karin/module/index.js +94 -0
  65. package/lib/karin/module/server/constants/routes.js +48 -0
  66. package/lib/karin/module/server/controllers/bots.js +230 -0
  67. package/lib/karin/module/server/controllers/config.js +75 -0
  68. package/lib/karin/module/server/controllers/video.js +208 -0
  69. package/lib/karin/module/server/index.js +26 -0
  70. package/lib/karin/module/server/middlewares/auth.js +133 -0
  71. package/lib/karin/module/server/routes/amagi.js +57 -0
  72. package/lib/karin/module/server/routes/api.js +40 -0
  73. package/lib/karin/module/server/routes/index.js +97 -0
  74. package/lib/karin/module/server/routes/ssr.js +16 -0
  75. package/lib/karin/module/server/routes/static.js +43 -0
  76. package/lib/karin/module/utils/Base.js +403 -0
  77. package/lib/karin/module/utils/CardParser.js +487 -0
  78. package/lib/karin/module/utils/Common.js +418 -0
  79. package/lib/karin/module/utils/Config.js +434 -0
  80. package/lib/karin/module/utils/EmojiReaction.js +242 -0
  81. package/lib/karin/module/utils/ErrorHandler/handler.js +114 -0
  82. package/lib/karin/module/utils/ErrorHandler/index.js +55 -0
  83. package/lib/karin/module/utils/ErrorHandler/render.js +182 -0
  84. package/lib/karin/module/utils/ErrorHandler/sender.js +206 -0
  85. package/lib/karin/module/utils/ErrorHandler/strategy.js +41 -0
  86. package/lib/karin/module/utils/ErrorHandler/types.js +2 -0
  87. package/lib/karin/module/utils/ErrorHandler/utils.js +108 -0
  88. package/lib/karin/module/utils/FFmpeg.js +298 -0
  89. package/lib/karin/module/utils/ImageHelper.js +91 -0
  90. package/lib/karin/module/utils/ImageSlice.js +429 -0
  91. package/lib/karin/module/utils/MotionPhoto.js +250 -0
  92. package/lib/karin/module/utils/Network/Downloader.js +413 -0
  93. package/lib/karin/module/utils/Network/ImageDownloader.js +250 -0
  94. package/lib/karin/module/utils/Network/Network.js +332 -0
  95. package/lib/karin/module/utils/Network/ThrottleStream.js +71 -0
  96. package/lib/karin/module/utils/Network/constants.js +129 -0
  97. package/lib/karin/module/utils/Network/helpers.js +174 -0
  98. package/lib/karin/module/utils/Network/index.js +34 -0
  99. package/lib/karin/module/utils/Network/types.js +12 -0
  100. package/lib/karin/module/utils/Networks.js +17 -0
  101. package/lib/karin/module/utils/ParseLock.js +34 -0
  102. package/lib/karin/module/utils/ParseOverride.js +88 -0
  103. package/lib/karin/module/utils/QqCardResolve.js +114 -0
  104. package/lib/karin/module/utils/QqPanel.js +879 -0
  105. package/lib/karin/module/utils/Render/coverTheme.js +256 -0
  106. package/lib/karin/module/utils/Render/index.js +582 -0
  107. package/lib/karin/module/utils/amagiClient.js +338 -0
  108. package/lib/karin/module/utils/avatar.js +201 -0
  109. package/lib/karin/module/utils/bot.js +141 -0
  110. package/lib/karin/module/utils/build-metadata.js +50 -0
  111. package/lib/karin/module/utils/changelog.js +166 -0
  112. package/lib/karin/module/utils/index.js +26 -0
  113. package/lib/karin/module/utils/loginSession.js +259 -0
  114. package/lib/karin/module/utils/parseTip.js +93 -0
  115. package/lib/karin/module/utils/runtime-report.js +140 -0
  116. package/lib/karin/module/utils/semver.js +72 -0
  117. package/lib/karin/module/utils/statisticsAggregate.js +415 -0
  118. package/lib/karin/platform/bilibili/bilibili.js +1805 -0
  119. package/lib/karin/platform/bilibili/comments.js +294 -0
  120. package/lib/karin/platform/bilibili/danmaku.js +555 -0
  121. package/lib/karin/platform/bilibili/dynamic-text.js +827 -0
  122. package/lib/karin/platform/bilibili/genParams.js +37 -0
  123. package/lib/karin/platform/bilibili/getID.js +159 -0
  124. package/lib/karin/platform/bilibili/index.js +24 -0
  125. package/lib/karin/platform/bilibili/live-status.js +40 -0
  126. package/lib/karin/platform/bilibili/login.js +132 -0
  127. package/lib/karin/platform/bilibili/push.js +1397 -0
  128. package/lib/karin/platform/bilibili/riskControl.js +133 -0
  129. package/lib/karin/platform/bilibili/search.js +299 -0
  130. package/lib/karin/platform/common/danmaku-types.js +12 -0
  131. package/lib/karin/platform/douyin/comments.js +310 -0
  132. package/lib/karin/platform/douyin/danmaku.js +893 -0
  133. package/lib/karin/platform/douyin/douyin.js +1145 -0
  134. package/lib/karin/platform/douyin/getID.js +94 -0
  135. package/lib/karin/platform/douyin/index.js +24 -0
  136. package/lib/karin/platform/douyin/login.js +230 -0
  137. package/lib/karin/platform/douyin/push/favorite.js +75 -0
  138. package/lib/karin/platform/douyin/push/index.js +21 -0
  139. package/lib/karin/platform/douyin/push/live.js +69 -0
  140. package/lib/karin/platform/douyin/push/post.js +60 -0
  141. package/lib/karin/platform/douyin/push/recommend.js +74 -0
  142. package/lib/karin/platform/douyin/push/render.js +621 -0
  143. package/lib/karin/platform/douyin/push/types.js +2 -0
  144. package/lib/karin/platform/douyin/push.js +1128 -0
  145. package/lib/karin/platform/douyin/types.js +13 -0
  146. package/lib/karin/platform/douyin/videoQuality.js +222 -0
  147. package/lib/karin/platform/douyin/workType.js +182 -0
  148. package/lib/karin/platform/index.js +20 -0
  149. package/lib/karin/platform/kuaishou/comments.js +91 -0
  150. package/lib/karin/platform/kuaishou/getID.js +43 -0
  151. package/lib/karin/platform/kuaishou/getdata.js +41 -0
  152. package/lib/karin/platform/kuaishou/index.js +20 -0
  153. package/lib/karin/platform/kuaishou/kuaishou.js +122 -0
  154. package/lib/karin/platform/xiaohongshu/comments.js +162 -0
  155. package/lib/karin/platform/xiaohongshu/getID.js +129 -0
  156. package/lib/karin/platform/xiaohongshu/index.js +18 -0
  157. package/lib/karin/platform/xiaohongshu/xiaohongshu.js +643 -0
  158. package/lib/karin/root.js +73 -0
  159. package/lib/karin/setup.js +99 -0
  160. package/lib/karin/types/config/amagi.js +2 -0
  161. package/lib/karin/types/config/app.js +2 -0
  162. package/lib/karin/types/config/bilibili.js +2 -0
  163. package/lib/karin/types/config/cookies.js +2 -0
  164. package/lib/karin/types/config/douyin.js +2 -0
  165. package/lib/karin/types/config/index.js +2 -0
  166. package/lib/karin/types/config/kuaishou.js +2 -0
  167. package/lib/karin/types/config/pushlist.js +2 -0
  168. package/lib/karin/types/config/request.js +2 -0
  169. package/lib/karin/types/config/upload.js +2 -0
  170. package/lib/karin/types/config/xiaohongshu.js +2 -0
  171. package/lib/karin/types/datatypes.js +2 -0
  172. package/lib/karin/types/index.js +18 -0
  173. package/lib/karin/types/netrorks/NetworksConfigType.js +2 -0
  174. package/lib/karin/types/netrorks/index.js +17 -0
  175. package/lib/karin/web.config.js +49 -0
  176. package/lib/ktr/registry.js +82 -0
  177. package/lib/ktr/template/_preview/components/PreviewInfoCard.js +10 -0
  178. package/lib/ktr/template/_preview/components/PreviewLayout.js +10 -0
  179. package/lib/ktr/template/_preview/components/PreviewVideoCard.js +8 -0
  180. package/lib/ktr/template/_preview/render.js +142 -0
  181. package/lib/ktr/template/_preview/types.js +2 -0
  182. package/lib/ktr/template/_preview/utils/status.js +31 -0
  183. package/lib/ktr/template/_preview/utils/time.js +12 -0
  184. package/lib/ktr/template/bilibili/bangumi/components/bangumi.js +127 -0
  185. package/lib/ktr/template/bilibili/bangumi/components/types.js +2 -0
  186. package/lib/ktr/template/bilibili/bangumi/index.js +12 -0
  187. package/lib/ktr/template/bilibili/comment/components/Comment.js +193 -0
  188. package/lib/ktr/template/bilibili/comment/components/types.js +2 -0
  189. package/lib/ktr/template/bilibili/comment/index.js +10 -0
  190. package/lib/ktr/template/bilibili/components/Icons.js +66 -0
  191. package/lib/ktr/template/bilibili/components/shared.js +93 -0
  192. package/lib/ktr/template/bilibili/components/types.js +2 -0
  193. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_ARTICLE/components/DYNAMIC_TYPE_ARTICLE.js +66 -0
  194. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_ARTICLE/components/types.js +2 -0
  195. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_ARTICLE/index.js +10 -0
  196. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_AV/components/DYNAMIC_TYPE_AV.js +87 -0
  197. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_AV/components/types.js +2 -0
  198. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_AV/index.js +10 -0
  199. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_DRAW/components/DYNAMIC_TYPE_DRAW.js +93 -0
  200. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_DRAW/components/types.js +2 -0
  201. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_DRAW/index.js +10 -0
  202. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_FORWARD/components/DYNAMIC_TYPE_FORWARD.js +132 -0
  203. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_FORWARD/components/types.js +2 -0
  204. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_FORWARD/index.js +10 -0
  205. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_LIVE_RCMD/components/DYNAMIC_TYPE_LIVE_RCMD.js +84 -0
  206. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_LIVE_RCMD/components/types.js +2 -0
  207. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_LIVE_RCMD/index.js +10 -0
  208. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_WORD/components/DYNAMIC_TYPE_WORD.js +38 -0
  209. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_WORD/components/types.js +2 -0
  210. package/lib/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_WORD/index.js +10 -0
  211. package/lib/ktr/template/bilibili/dynamic/components/AdditionalCard.js +59 -0
  212. package/lib/ktr/template/bilibili/dynamic/components/CommonComponents.js +30 -0
  213. package/lib/ktr/template/bilibili/dynamic/types.js +2 -0
  214. package/lib/ktr/template/bilibili/qrcodeImg/components/qrcodeImg.js +48 -0
  215. package/lib/ktr/template/bilibili/qrcodeImg/components/types.js +3 -0
  216. package/lib/ktr/template/bilibili/qrcodeImg/index.js +10 -0
  217. package/lib/ktr/template/bilibili/userlist/components/UserList.js +53 -0
  218. package/lib/ktr/template/bilibili/userlist/components/types.js +3 -0
  219. package/lib/ktr/template/bilibili/userlist/index.js +13 -0
  220. package/lib/ktr/template/bilibili/videoInfo/components/types.js +2 -0
  221. package/lib/ktr/template/bilibili/videoInfo/components/videoInfo.js +62 -0
  222. package/lib/ktr/template/bilibili/videoInfo/index.js +10 -0
  223. package/lib/ktr/template/components/AmbientCover.js +36 -0
  224. package/lib/ktr/template/components/DefaultLayout.js +33 -0
  225. package/lib/ktr/template/components/GlowImage.js +276 -0
  226. package/lib/ktr/template/components/QRCodeWithAvatar.js +34 -0
  227. package/lib/ktr/template/components/RolldownLogo.js +6 -0
  228. package/lib/ktr/template/components/ViteLogo.js +6 -0
  229. package/lib/ktr/template/components/iconRegistry.js +173 -0
  230. package/lib/ktr/template/douyin/article-work/components/ArticleWork.js +99 -0
  231. package/lib/ktr/template/douyin/article-work/components/types.js +3 -0
  232. package/lib/ktr/template/douyin/article-work/index.js +10 -0
  233. package/lib/ktr/template/douyin/comment/components/Comment.js +189 -0
  234. package/lib/ktr/template/douyin/comment/components/types.js +2 -0
  235. package/lib/ktr/template/douyin/comment/index.js +10 -0
  236. package/lib/ktr/template/douyin/components/Icons.js +29 -0
  237. package/lib/ktr/template/douyin/components/types.js +3 -0
  238. package/lib/ktr/template/douyin/dynamic/components/Dynamic.js +90 -0
  239. package/lib/ktr/template/douyin/dynamic/components/types.js +3 -0
  240. package/lib/ktr/template/douyin/dynamic/index.js +10 -0
  241. package/lib/ktr/template/douyin/favorite-list/components/FavoriteList.js +30 -0
  242. package/lib/ktr/template/douyin/favorite-list/components/types.js +3 -0
  243. package/lib/ktr/template/douyin/favorite-list/index.js +10 -0
  244. package/lib/ktr/template/douyin/image-work/components/ImageWork.js +136 -0
  245. package/lib/ktr/template/douyin/image-work/components/types.js +2 -0
  246. package/lib/ktr/template/douyin/image-work/index.js +10 -0
  247. package/lib/ktr/template/douyin/live/components/Live.js +51 -0
  248. package/lib/ktr/template/douyin/live/components/types.js +3 -0
  249. package/lib/ktr/template/douyin/live/index.js +10 -0
  250. package/lib/ktr/template/douyin/musicinfo/components/MusicInfo.js +60 -0
  251. package/lib/ktr/template/douyin/musicinfo/components/types.js +3 -0
  252. package/lib/ktr/template/douyin/musicinfo/index.js +10 -0
  253. package/lib/ktr/template/douyin/qrcodeImg/components/qrcodeImg.js +39 -0
  254. package/lib/ktr/template/douyin/qrcodeImg/components/types.js +3 -0
  255. package/lib/ktr/template/douyin/qrcodeImg/index.js +9 -0
  256. package/lib/ktr/template/douyin/recommend-list/components/RecommendList.js +30 -0
  257. package/lib/ktr/template/douyin/recommend-list/components/types.js +3 -0
  258. package/lib/ktr/template/douyin/recommend-list/index.js +10 -0
  259. package/lib/ktr/template/douyin/user_profile/components/UserVideoList.js +54 -0
  260. package/lib/ktr/template/douyin/user_profile/components/types.js +3 -0
  261. package/lib/ktr/template/douyin/user_profile/index.js +9 -0
  262. package/lib/ktr/template/douyin/userlist/components/UserList.js +50 -0
  263. package/lib/ktr/template/douyin/userlist/components/types.js +3 -0
  264. package/lib/ktr/template/douyin/userlist/index.js +13 -0
  265. package/lib/ktr/template/douyin/video-work/components/VideoWork.js +127 -0
  266. package/lib/ktr/template/douyin/video-work/components/types.js +2 -0
  267. package/lib/ktr/template/douyin/video-work/index.js +10 -0
  268. package/lib/ktr/template/kuaishou/comment/components/Comment.js +88 -0
  269. package/lib/ktr/template/kuaishou/comment/components/types.js +2 -0
  270. package/lib/ktr/template/kuaishou/comment/index.js +10 -0
  271. package/lib/ktr/template/other/changelog/components/changelog.js +117 -0
  272. package/lib/ktr/template/other/changelog/components/types.js +3 -0
  273. package/lib/ktr/template/other/changelog/index.js +9 -0
  274. package/lib/ktr/template/other/handlerError/components/errorTitles.js +227 -0
  275. package/lib/ktr/template/other/handlerError/components/handlerError.js +392 -0
  276. package/lib/ktr/template/other/handlerError/components/stackHighlight.js +109 -0
  277. package/lib/ktr/template/other/handlerError/components/types.js +2 -0
  278. package/lib/ktr/template/other/handlerError/index.js +9 -0
  279. package/lib/ktr/template/other/help/components/Help.js +79 -0
  280. package/lib/ktr/template/other/help/components/types.js +3 -0
  281. package/lib/ktr/template/other/help/index.js +12 -0
  282. package/lib/ktr/template/other/live-photo-tip/components/LivePhotoTip.js +80 -0
  283. package/lib/ktr/template/other/live-photo-tip/components/types.js +3 -0
  284. package/lib/ktr/template/other/live-photo-tip/index.js +9 -0
  285. package/lib/ktr/template/other/qrlogin/components/qrlogin.js +58 -0
  286. package/lib/ktr/template/other/qrlogin/components/types.js +3 -0
  287. package/lib/ktr/template/other/qrlogin/index.js +9 -0
  288. package/lib/ktr/template/other/runtime/components/runtime.js +101 -0
  289. package/lib/ktr/template/other/runtime/components/types.js +3 -0
  290. package/lib/ktr/template/other/runtime/index.js +9 -0
  291. package/lib/ktr/template/other/version_warning/components/VersionWarning.js +38 -0
  292. package/lib/ktr/template/other/version_warning/components/types.js +3 -0
  293. package/lib/ktr/template/other/version_warning/index.js +9 -0
  294. package/lib/ktr/template/statistics/components/BoxplotGuide.js +17 -0
  295. package/lib/ktr/template/statistics/components/ChartCard.js +15 -0
  296. package/lib/ktr/template/statistics/components/KpiCard.js +14 -0
  297. package/lib/ktr/template/statistics/components/PlatformTable.js +20 -0
  298. package/lib/ktr/template/statistics/components/RankList.js +61 -0
  299. package/lib/ktr/template/statistics/components/SSRChart.js +22 -0
  300. package/lib/ktr/template/statistics/components/chartPresets.js +630 -0
  301. package/lib/ktr/template/statistics/components/chartTheme.js +226 -0
  302. package/lib/ktr/template/statistics/components/format.js +38 -0
  303. package/lib/ktr/template/statistics/components/types.js +9 -0
  304. package/lib/ktr/template/statistics/global/components/GlobalStatistics.js +246 -0
  305. package/lib/ktr/template/statistics/global/components/types.js +3 -0
  306. package/lib/ktr/template/statistics/global/index.js +9 -0
  307. package/lib/ktr/template/statistics/group/components/GroupStatistics.js +181 -0
  308. package/lib/ktr/template/statistics/group/components/types.js +3 -0
  309. package/lib/ktr/template/statistics/group/index.js +9 -0
  310. package/lib/ktr/template/types/ctx.js +2 -0
  311. package/lib/ktr/template/xiaohongshu/comment/components/Comment.js +99 -0
  312. package/lib/ktr/template/xiaohongshu/comment/components/types.js +3 -0
  313. package/lib/ktr/template/xiaohongshu/comment/index.js +9 -0
  314. package/lib/ktr/template/xiaohongshu/noteInfo/components/noteInfo.js +93 -0
  315. package/lib/ktr/template/xiaohongshu/noteInfo/components/types.js +2 -0
  316. package/lib/ktr/template/xiaohongshu/noteInfo/index.js +9 -0
  317. package/lib/ktr/utils/QRCodeAvatar.js +99 -0
  318. package/lib/ktr/utils/QRcode.js +56 -0
  319. package/lib/ktr/utils/avatarProxy.js +45 -0
  320. package/lib/ktr/utils/cn.js +11 -0
  321. package/lib/ktr/utils/theme.js +12 -0
  322. package/lib/qqFields.json +75 -0
  323. package/lib/qqOptions.js +44 -0
  324. package/lib/richtext/index.js +25 -0
  325. package/lib/richtext/parse/index.js +232 -0
  326. package/lib/richtext/react/cn.js +11 -0
  327. package/lib/richtext/react/index.js +221 -0
  328. package/lib/richtext/types.js +2 -0
  329. package/lib/schema.js +352 -0
  330. package/lib/webui.js +341 -0
  331. package/package.json +88 -0
  332. package/resources/image/bilibili/RICH_TEXT_NODE_TYPE/RICH_TEXT_NODE_TYPE_BV.svg +1 -0
  333. package/resources/image/bilibili/RICH_TEXT_NODE_TYPE/RICH_TEXT_NODE_TYPE_GOODS.svg +1 -0
  334. package/resources/image/bilibili/RICH_TEXT_NODE_TYPE/RICH_TEXT_NODE_TYPE_LOTTERY.svg +1 -0
  335. package/resources/image/bilibili/RICH_TEXT_NODE_TYPE/RICH_TEXT_NODE_TYPE_VIEW_PICTURE.svg +1 -0
  336. package/resources/image/bilibili/RICH_TEXT_NODE_TYPE/RICH_TEXT_NODE_TYPE_VOTE.svg +1 -0
  337. package/resources/image/bilibili/RICH_TEXT_NODE_TYPE/RICH_TEXT_NODE_TYPE_WEB.svg +1 -0
  338. package/resources/image/bilibili/bilibili-dark.png +0 -0
  339. package/resources/image/bilibili/bilibili-light.png +0 -0
  340. package/resources/image/bilibili/bilibili.png +0 -0
  341. package/resources/image/bilibili/id-dark.svg +1 -0
  342. package/resources/image/bilibili/id-light.svg +1 -0
  343. package/resources/image/bilibili/level/lv0.svg +1 -0
  344. package/resources/image/bilibili/level/lv1.svg +1 -0
  345. package/resources/image/bilibili/level/lv2.svg +1 -0
  346. package/resources/image/bilibili/level/lv3.svg +1 -0
  347. package/resources/image/bilibili/level/lv4.svg +1 -0
  348. package/resources/image/bilibili/level/lv5.svg +1 -0
  349. package/resources/image/bilibili/level/lv6.svg +1 -0
  350. package/resources/image/bilibili/level/lv7.svg +1 -0
  351. package/resources/image/bilibili/like-dark.svg +6 -0
  352. package/resources/image/bilibili/like-light.svg +6 -0
  353. package/resources/image/bilibili/play.svg +28 -0
  354. package/resources/image/bilibili/res-local1.png +0 -0
  355. package/resources/image/bilibili/up_pb.svg +1 -0
  356. package/resources/image/bilibili//347/233/264/346/222/255/344/270/255.png +0 -0
  357. package/resources/image/douyin/douyin.png +0 -0
  358. package/resources/image/douyin/dylogo-dark.svg +23 -0
  359. package/resources/image/douyin/dylogo-light.svg +38 -0
  360. package/resources/image/douyin/search-dark.svg +1 -0
  361. package/resources/image/douyin/search-light.svg +3 -0
  362. package/resources/image/douyin//346/212/226/351/237/263-/347/233/264/346/222/255/344/270/255.png +0 -0
  363. package/resources/image/frame-logo.png +0 -0
  364. package/resources/image/kuaishou/logo.png +0 -0
  365. package/resources/image/other/handlerError/Milky.png +0 -0
  366. package/resources/image/other/handlerError/chronocat.svg +43 -0
  367. package/resources/image/other/handlerError/conwechat.webp +0 -0
  368. package/resources/image/other/handlerError/gocq-http.webp +0 -0
  369. package/resources/image/other/handlerError/lagrange.webp +0 -0
  370. package/resources/image/other/handlerError/llonebot.webp +0 -0
  371. package/resources/image/other/handlerError/napcat.webp +0 -0
  372. package/resources/image/other/handlerError/onebot.png +0 -0
  373. package/resources/image/other/handlerError/satori.png +0 -0
  374. package/resources/image/xiaohongshu/logo.png +0 -0
  375. package/resources/template/style.css +23708 -0
  376. package/resources/vite.svg +130 -0
  377. package/scripts/build.mjs +129 -0
  378. package/scripts/check-schema.cjs +55 -0
  379. package/scripts/deploy.mjs +78 -0
  380. package/scripts/make-demo-placeholders.mjs +112 -0
  381. package/scripts/patch-deps.mjs +46 -0
  382. package/scripts/patch-webui.mjs +112 -0
  383. package/scripts/smoke-commands.cjs +39 -0
  384. package/scripts/smoke-config.cjs +122 -0
  385. package/scripts/smoke-douyin.cjs +170 -0
  386. package/scripts/smoke-koishi-commands.cjs +210 -0
  387. package/scripts/smoke-login.cjs +110 -0
  388. package/scripts/smoke-parse.cjs +54 -0
  389. package/scripts/smoke-push-mock.cjs +114 -0
  390. package/scripts/smoke-push.cjs +104 -0
  391. package/scripts/smoke-qq.cjs +147 -0
  392. package/scripts/smoke-qqcard.cjs +108 -0
  393. package/scripts/smoke-qqpanel.cjs +205 -0
  394. package/scripts/smoke-render.cjs +106 -0
  395. package/scripts/smoke-server.cjs +94 -0
  396. package/src/compat/axios.ts +5 -0
  397. package/src/compat/cron.ts +86 -0
  398. package/src/compat/esm.ts +13 -0
  399. package/src/compat/express.ts +5 -0
  400. package/src/compat/heroui.tsx +53 -0
  401. package/src/compat/lodash.ts +32 -0
  402. package/src/compat/logger.ts +121 -0
  403. package/src/compat/node-karin.ts +1064 -0
  404. package/src/compat/phosphor-icons.tsx +25 -0
  405. package/src/compat/qqcard.ts +251 -0
  406. package/src/compat/root.ts +44 -0
  407. package/src/compat/runtime.ts +120 -0
  408. package/src/compat/segment.ts +161 -0
  409. package/src/compat/sqlite3.ts +123 -0
  410. package/src/compat/start.ts +3 -0
  411. package/src/compat/syncConfig.ts +64 -0
  412. package/src/compat/template-react.ts +54 -0
  413. package/src/compat/text.ts +58 -0
  414. package/src/compat/yaml.ts +6 -0
  415. package/src/configBridge.ts +94 -0
  416. package/src/index.ts +769 -0
  417. package/src/karin/app.ts +1 -0
  418. package/src/karin/apps/__ready.ts +14 -0
  419. package/src/karin/apps/admin.ts +127 -0
  420. package/src/karin/apps/help.ts +228 -0
  421. package/src/karin/apps/push.ts +327 -0
  422. package/src/karin/apps/qrlogin.ts +160 -0
  423. package/src/karin/apps/statistics.ts +203 -0
  424. package/src/karin/apps/testPush.ts +226 -0
  425. package/src/karin/apps/tools.ts +510 -0
  426. package/src/karin/apps/update.ts +239 -0
  427. package/src/karin/index.ts +9 -0
  428. package/src/karin/module/db/bilibili.ts +1089 -0
  429. package/src/karin/module/db/douyin.ts +1218 -0
  430. package/src/karin/module/db/index.ts +159 -0
  431. package/src/karin/module/db/migration.ts +249 -0
  432. package/src/karin/module/db/statistics.ts +817 -0
  433. package/src/karin/module/index.ts +37 -0
  434. package/src/karin/module/server/constants/routes.ts +53 -0
  435. package/src/karin/module/server/controllers/bots.ts +289 -0
  436. package/src/karin/module/server/controllers/config.ts +85 -0
  437. package/src/karin/module/server/controllers/video.ts +212 -0
  438. package/src/karin/module/server/index.ts +11 -0
  439. package/src/karin/module/server/middlewares/auth.ts +147 -0
  440. package/src/karin/module/server/routes/amagi.ts +57 -0
  441. package/src/karin/module/server/routes/api.ts +42 -0
  442. package/src/karin/module/server/routes/index.ts +68 -0
  443. package/src/karin/module/server/routes/ssr.ts +14 -0
  444. package/src/karin/module/server/routes/static.ts +43 -0
  445. package/src/karin/module/utils/Base.ts +497 -0
  446. package/src/karin/module/utils/CardParser.ts +503 -0
  447. package/src/karin/module/utils/Common.ts +448 -0
  448. package/src/karin/module/utils/Config.ts +443 -0
  449. package/src/karin/module/utils/EmojiReaction.ts +268 -0
  450. package/src/karin/module/utils/ErrorHandler/handler.ts +124 -0
  451. package/src/karin/module/utils/ErrorHandler/index.ts +48 -0
  452. package/src/karin/module/utils/ErrorHandler/render.ts +180 -0
  453. package/src/karin/module/utils/ErrorHandler/sender.ts +192 -0
  454. package/src/karin/module/utils/ErrorHandler/strategy.ts +41 -0
  455. package/src/karin/module/utils/ErrorHandler/types.ts +122 -0
  456. package/src/karin/module/utils/ErrorHandler/utils.ts +108 -0
  457. package/src/karin/module/utils/FFmpeg.ts +357 -0
  458. package/src/karin/module/utils/ImageHelper.ts +90 -0
  459. package/src/karin/module/utils/ImageSlice.ts +383 -0
  460. package/src/karin/module/utils/MotionPhoto.ts +297 -0
  461. package/src/karin/module/utils/Network/Downloader.ts +481 -0
  462. package/src/karin/module/utils/Network/ImageDownloader.ts +291 -0
  463. package/src/karin/module/utils/Network/Network.ts +344 -0
  464. package/src/karin/module/utils/Network/ThrottleStream.ts +76 -0
  465. package/src/karin/module/utils/Network/constants.ts +135 -0
  466. package/src/karin/module/utils/Network/helpers.ts +183 -0
  467. package/src/karin/module/utils/Network/index.ts +28 -0
  468. package/src/karin/module/utils/Network/types.ts +46 -0
  469. package/src/karin/module/utils/Networks.ts +20 -0
  470. package/src/karin/module/utils/ParseLock.ts +33 -0
  471. package/src/karin/module/utils/ParseOverride.ts +128 -0
  472. package/src/karin/module/utils/QqCardResolve.ts +116 -0
  473. package/src/karin/module/utils/QqPanel.ts +880 -0
  474. package/src/karin/module/utils/Render/coverTheme.ts +294 -0
  475. package/src/karin/module/utils/Render/index.ts +574 -0
  476. package/src/karin/module/utils/amagiClient.ts +368 -0
  477. package/src/karin/module/utils/avatar.ts +220 -0
  478. package/src/karin/module/utils/bot.ts +115 -0
  479. package/src/karin/module/utils/build-metadata.ts +60 -0
  480. package/src/karin/module/utils/changelog.ts +175 -0
  481. package/src/karin/module/utils/index.ts +10 -0
  482. package/src/karin/module/utils/loginSession.ts +291 -0
  483. package/src/karin/module/utils/parseTip.ts +59 -0
  484. package/src/karin/module/utils/runtime-report.ts +142 -0
  485. package/src/karin/module/utils/semver.ts +60 -0
  486. package/src/karin/module/utils/statisticsAggregate.ts +507 -0
  487. package/src/karin/platform/bilibili/bilibili.ts +2004 -0
  488. package/src/karin/platform/bilibili/comments.ts +397 -0
  489. package/src/karin/platform/bilibili/danmaku.ts +653 -0
  490. package/src/karin/platform/bilibili/dynamic-text.ts +926 -0
  491. package/src/karin/platform/bilibili/genParams.ts +30 -0
  492. package/src/karin/platform/bilibili/getID.ts +163 -0
  493. package/src/karin/platform/bilibili/index.ts +8 -0
  494. package/src/karin/platform/bilibili/live-status.ts +36 -0
  495. package/src/karin/platform/bilibili/login.ts +130 -0
  496. package/src/karin/platform/bilibili/push.ts +1615 -0
  497. package/src/karin/platform/bilibili/riskControl.ts +114 -0
  498. package/src/karin/platform/bilibili/search.ts +305 -0
  499. package/src/karin/platform/common/danmaku-types.ts +18 -0
  500. package/src/karin/platform/douyin/comments.ts +404 -0
  501. package/src/karin/platform/douyin/danmaku.ts +1187 -0
  502. package/src/karin/platform/douyin/douyin.ts +1244 -0
  503. package/src/karin/platform/douyin/getID.ts +101 -0
  504. package/src/karin/platform/douyin/index.ts +8 -0
  505. package/src/karin/platform/douyin/login.ts +251 -0
  506. package/src/karin/platform/douyin/push/favorite.ts +97 -0
  507. package/src/karin/platform/douyin/push/index.ts +5 -0
  508. package/src/karin/platform/douyin/push/live.ts +86 -0
  509. package/src/karin/platform/douyin/push/post.ts +75 -0
  510. package/src/karin/platform/douyin/push/recommend.ts +96 -0
  511. package/src/karin/platform/douyin/push/render.ts +768 -0
  512. package/src/karin/platform/douyin/push/types.ts +41 -0
  513. package/src/karin/platform/douyin/push.ts +1241 -0
  514. package/src/karin/platform/douyin/types.ts +151 -0
  515. package/src/karin/platform/douyin/videoQuality.ts +234 -0
  516. package/src/karin/platform/douyin/workType.ts +238 -0
  517. package/src/karin/platform/index.ts +4 -0
  518. package/src/karin/platform/kuaishou/comments.ts +114 -0
  519. package/src/karin/platform/kuaishou/getID.ts +48 -0
  520. package/src/karin/platform/kuaishou/getdata.ts +78 -0
  521. package/src/karin/platform/kuaishou/index.ts +4 -0
  522. package/src/karin/platform/kuaishou/kuaishou.ts +130 -0
  523. package/src/karin/platform/xiaohongshu/comments.ts +227 -0
  524. package/src/karin/platform/xiaohongshu/getID.ts +127 -0
  525. package/src/karin/platform/xiaohongshu/index.ts +2 -0
  526. package/src/karin/platform/xiaohongshu/xiaohongshu.ts +733 -0
  527. package/src/karin/root.ts +78 -0
  528. package/src/karin/setup.ts +77 -0
  529. package/src/karin/types/config/amagi.ts +46 -0
  530. package/src/karin/types/config/app.ts +129 -0
  531. package/src/karin/types/config/bilibili.ts +121 -0
  532. package/src/karin/types/config/cookies.ts +11 -0
  533. package/src/karin/types/config/douyin.ts +93 -0
  534. package/src/karin/types/config/index.ts +41 -0
  535. package/src/karin/types/config/kuaishou.ts +10 -0
  536. package/src/karin/types/config/pushlist.ts +55 -0
  537. package/src/karin/types/config/request.ts +27 -0
  538. package/src/karin/types/config/upload.ts +49 -0
  539. package/src/karin/types/config/xiaohongshu.ts +24 -0
  540. package/src/karin/types/datatypes.ts +42 -0
  541. package/src/karin/types/index.ts +4 -0
  542. package/src/karin/types/netrorks/NetworksConfigType.ts +61 -0
  543. package/src/karin/types/netrorks/index.ts +1 -0
  544. package/src/karin/web.config.ts +48 -0
  545. package/src/ktr/registry.ts +55 -0
  546. package/src/ktr/template/_preview/components/PreviewInfoCard.tsx +33 -0
  547. package/src/ktr/template/_preview/components/PreviewLayout.tsx +65 -0
  548. package/src/ktr/template/_preview/components/PreviewVideoCard.tsx +22 -0
  549. package/src/ktr/template/_preview/render.ts +158 -0
  550. package/src/ktr/template/_preview/types.ts +15 -0
  551. package/src/ktr/template/_preview/utils/status.ts +29 -0
  552. package/src/ktr/template/_preview/utils/time.ts +8 -0
  553. package/src/ktr/template/bilibili/bangumi/components/bangumi.tsx +462 -0
  554. package/src/ktr/template/bilibili/bangumi/components/types.ts +36 -0
  555. package/src/ktr/template/bilibili/bangumi/index.tsx +9 -0
  556. package/src/ktr/template/bilibili/comment/components/Comment.tsx +657 -0
  557. package/src/ktr/template/bilibili/comment/components/types.ts +26 -0
  558. package/src/ktr/template/bilibili/comment/index.tsx +11 -0
  559. package/src/ktr/template/bilibili/components/Icons.tsx +209 -0
  560. package/src/ktr/template/bilibili/components/shared.tsx +162 -0
  561. package/src/ktr/template/bilibili/components/types.ts +388 -0
  562. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_ARTICLE/components/DYNAMIC_TYPE_ARTICLE.tsx +251 -0
  563. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_ARTICLE/components/types.ts +67 -0
  564. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_ARTICLE/index.tsx +12 -0
  565. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_AV/components/DYNAMIC_TYPE_AV.tsx +238 -0
  566. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_AV/components/types.ts +39 -0
  567. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_AV/index.tsx +12 -0
  568. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_DRAW/components/DYNAMIC_TYPE_DRAW.tsx +205 -0
  569. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_DRAW/components/types.ts +20 -0
  570. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_DRAW/index.tsx +11 -0
  571. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_FORWARD/components/DYNAMIC_TYPE_FORWARD.tsx +348 -0
  572. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_FORWARD/components/types.ts +16 -0
  573. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_FORWARD/index.tsx +12 -0
  574. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_LIVE_RCMD/components/DYNAMIC_TYPE_LIVE_RCMD.tsx +264 -0
  575. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_LIVE_RCMD/components/types.ts +32 -0
  576. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_LIVE_RCMD/index.tsx +12 -0
  577. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_WORD/components/DYNAMIC_TYPE_WORD.tsx +68 -0
  578. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_WORD/components/types.ts +14 -0
  579. package/src/ktr/template/bilibili/dynamic/DYNAMIC_TYPE_WORD/index.tsx +12 -0
  580. package/src/ktr/template/bilibili/dynamic/components/AdditionalCard.tsx +165 -0
  581. package/src/ktr/template/bilibili/dynamic/components/CommonComponents.tsx +142 -0
  582. package/src/ktr/template/bilibili/dynamic/types.ts +382 -0
  583. package/src/ktr/template/bilibili/qrcodeImg/components/qrcodeImg.tsx +179 -0
  584. package/src/ktr/template/bilibili/qrcodeImg/components/types.ts +9 -0
  585. package/src/ktr/template/bilibili/qrcodeImg/index.tsx +12 -0
  586. package/src/ktr/template/bilibili/userlist/components/UserList.tsx +246 -0
  587. package/src/ktr/template/bilibili/userlist/components/types.ts +35 -0
  588. package/src/ktr/template/bilibili/userlist/index.tsx +11 -0
  589. package/src/ktr/template/bilibili/videoInfo/components/types.ts +28 -0
  590. package/src/ktr/template/bilibili/videoInfo/components/videoInfo.tsx +217 -0
  591. package/src/ktr/template/bilibili/videoInfo/index.tsx +12 -0
  592. package/src/ktr/template/components/AmbientCover.tsx +50 -0
  593. package/src/ktr/template/components/DefaultLayout.tsx +166 -0
  594. package/src/ktr/template/components/GlowImage.tsx +572 -0
  595. package/src/ktr/template/components/QRCodeWithAvatar.tsx +52 -0
  596. package/src/ktr/template/components/RolldownLogo.tsx +110 -0
  597. package/src/ktr/template/components/ViteLogo.tsx +134 -0
  598. package/src/ktr/template/components/iconRegistry.ts +294 -0
  599. package/src/ktr/template/douyin/article-work/components/ArticleWork.tsx +301 -0
  600. package/src/ktr/template/douyin/article-work/components/types.ts +53 -0
  601. package/src/ktr/template/douyin/article-work/index.tsx +12 -0
  602. package/src/ktr/template/douyin/comment/components/Comment.tsx +612 -0
  603. package/src/ktr/template/douyin/comment/components/types.ts +85 -0
  604. package/src/ktr/template/douyin/comment/index.tsx +11 -0
  605. package/src/ktr/template/douyin/components/Icons.tsx +75 -0
  606. package/src/ktr/template/douyin/components/types.ts +83 -0
  607. package/src/ktr/template/douyin/dynamic/components/Dynamic.tsx +283 -0
  608. package/src/ktr/template/douyin/dynamic/components/types.ts +46 -0
  609. package/src/ktr/template/douyin/dynamic/index.tsx +11 -0
  610. package/src/ktr/template/douyin/favorite-list/components/FavoriteList.tsx +201 -0
  611. package/src/ktr/template/douyin/favorite-list/components/types.ts +38 -0
  612. package/src/ktr/template/douyin/favorite-list/index.tsx +12 -0
  613. package/src/ktr/template/douyin/image-work/components/ImageWork.tsx +437 -0
  614. package/src/ktr/template/douyin/image-work/components/types.ts +78 -0
  615. package/src/ktr/template/douyin/image-work/index.tsx +11 -0
  616. package/src/ktr/template/douyin/live/components/Live.tsx +229 -0
  617. package/src/ktr/template/douyin/live/components/types.ts +47 -0
  618. package/src/ktr/template/douyin/live/index.tsx +11 -0
  619. package/src/ktr/template/douyin/musicinfo/components/MusicInfo.tsx +187 -0
  620. package/src/ktr/template/douyin/musicinfo/components/types.ts +31 -0
  621. package/src/ktr/template/douyin/musicinfo/index.tsx +11 -0
  622. package/src/ktr/template/douyin/qrcodeImg/components/qrcodeImg.tsx +170 -0
  623. package/src/ktr/template/douyin/qrcodeImg/components/types.ts +9 -0
  624. package/src/ktr/template/douyin/qrcodeImg/index.tsx +9 -0
  625. package/src/ktr/template/douyin/recommend-list/components/RecommendList.tsx +201 -0
  626. package/src/ktr/template/douyin/recommend-list/components/types.ts +37 -0
  627. package/src/ktr/template/douyin/recommend-list/index.tsx +12 -0
  628. package/src/ktr/template/douyin/user_profile/components/UserVideoList.tsx +225 -0
  629. package/src/ktr/template/douyin/user_profile/components/types.ts +71 -0
  630. package/src/ktr/template/douyin/user_profile/index.tsx +9 -0
  631. package/src/ktr/template/douyin/userlist/components/UserList.tsx +229 -0
  632. package/src/ktr/template/douyin/userlist/components/types.ts +35 -0
  633. package/src/ktr/template/douyin/userlist/index.tsx +11 -0
  634. package/src/ktr/template/douyin/video-work/components/VideoWork.tsx +398 -0
  635. package/src/ktr/template/douyin/video-work/components/types.ts +80 -0
  636. package/src/ktr/template/douyin/video-work/index.tsx +11 -0
  637. package/src/ktr/template/font.css +6071 -0
  638. package/src/ktr/template/global.d.ts +69 -0
  639. package/src/ktr/template/kuaishou/comment/components/Comment.tsx +207 -0
  640. package/src/ktr/template/kuaishou/comment/components/types.ts +47 -0
  641. package/src/ktr/template/kuaishou/comment/index.tsx +11 -0
  642. package/src/ktr/template/other/changelog/components/changelog.tsx +411 -0
  643. package/src/ktr/template/other/changelog/components/types.ts +21 -0
  644. package/src/ktr/template/other/changelog/index.tsx +9 -0
  645. package/src/ktr/template/other/handlerError/components/errorTitles.ts +224 -0
  646. package/src/ktr/template/other/handlerError/components/handlerError.tsx +1076 -0
  647. package/src/ktr/template/other/handlerError/components/stackHighlight.ts +127 -0
  648. package/src/ktr/template/other/handlerError/components/types.ts +124 -0
  649. package/src/ktr/template/other/handlerError/index.tsx +9 -0
  650. package/src/ktr/template/other/help/components/Help.tsx +249 -0
  651. package/src/ktr/template/other/help/components/types.ts +47 -0
  652. package/src/ktr/template/other/help/index.tsx +9 -0
  653. package/src/ktr/template/other/live-photo-tip/components/LivePhotoTip.tsx +295 -0
  654. package/src/ktr/template/other/live-photo-tip/components/types.ts +8 -0
  655. package/src/ktr/template/other/live-photo-tip/index.tsx +9 -0
  656. package/src/ktr/template/other/qrlogin/components/qrlogin.tsx +295 -0
  657. package/src/ktr/template/other/qrlogin/components/types.ts +11 -0
  658. package/src/ktr/template/other/qrlogin/index.tsx +9 -0
  659. package/src/ktr/template/other/runtime/components/runtime.tsx +347 -0
  660. package/src/ktr/template/other/runtime/components/types.ts +75 -0
  661. package/src/ktr/template/other/runtime/index.tsx +9 -0
  662. package/src/ktr/template/other/version_warning/components/VersionWarning.tsx +392 -0
  663. package/src/ktr/template/other/version_warning/components/types.ts +8 -0
  664. package/src/ktr/template/other/version_warning/index.tsx +9 -0
  665. package/src/ktr/template/statistics/components/BoxplotGuide.tsx +57 -0
  666. package/src/ktr/template/statistics/components/ChartCard.tsx +40 -0
  667. package/src/ktr/template/statistics/components/KpiCard.tsx +39 -0
  668. package/src/ktr/template/statistics/components/PlatformTable.tsx +83 -0
  669. package/src/ktr/template/statistics/components/RankList.tsx +127 -0
  670. package/src/ktr/template/statistics/components/SSRChart.tsx +41 -0
  671. package/src/ktr/template/statistics/components/chartPresets.ts +700 -0
  672. package/src/ktr/template/statistics/components/chartTheme.ts +234 -0
  673. package/src/ktr/template/statistics/components/format.ts +33 -0
  674. package/src/ktr/template/statistics/components/types.ts +92 -0
  675. package/src/ktr/template/statistics/global/components/GlobalStatistics.tsx +597 -0
  676. package/src/ktr/template/statistics/global/components/types.ts +138 -0
  677. package/src/ktr/template/statistics/global/index.tsx +9 -0
  678. package/src/ktr/template/statistics/group/components/GroupStatistics.tsx +468 -0
  679. package/src/ktr/template/statistics/group/components/types.ts +113 -0
  680. package/src/ktr/template/statistics/group/index.tsx +9 -0
  681. package/src/ktr/template/style.css +65 -0
  682. package/src/ktr/template/types/ctx.ts +42 -0
  683. package/src/ktr/template/xiaohongshu/comment/components/Comment.tsx +264 -0
  684. package/src/ktr/template/xiaohongshu/comment/components/types.ts +119 -0
  685. package/src/ktr/template/xiaohongshu/comment/index.tsx +9 -0
  686. package/src/ktr/template/xiaohongshu/noteInfo/components/noteInfo.tsx +271 -0
  687. package/src/ktr/template/xiaohongshu/noteInfo/components/types.ts +66 -0
  688. package/src/ktr/template/xiaohongshu/noteInfo/index.tsx +9 -0
  689. package/src/ktr/utils/QRCodeAvatar.ts +102 -0
  690. package/src/ktr/utils/QRcode.ts +65 -0
  691. package/src/ktr/utils/avatarProxy.ts +42 -0
  692. package/src/ktr/utils/cn.ts +6 -0
  693. package/src/ktr/utils/theme.ts +10 -0
  694. package/src/qqFields.json +75 -0
  695. package/src/qqOptions.ts +64 -0
  696. package/src/richtext/index.ts +9 -0
  697. package/src/richtext/parse/index.ts +271 -0
  698. package/src/richtext/react/cn.ts +6 -0
  699. package/src/richtext/react/index.tsx +582 -0
  700. package/src/richtext/types.ts +320 -0
  701. package/src/schema.ts +372 -0
  702. package/src/webui.ts +352 -0
@@ -0,0 +1,388 @@
1
+ /** bilibili板块共享类型(跨模板复用 / core 引用)。 */
2
+ import type { RichTextDocument } from '@kkk/richtext'
3
+
4
+ import type { UsernameMetadata } from '../dynamic/types'
5
+
6
+ /**
7
+ * 粉丝卡片信息接口
8
+ */
9
+ export interface FanCardInfo {
10
+ /** 卡片背景图片 */
11
+ image: string | null
12
+ /** 序号前缀 */
13
+ numPrefix: string
14
+ /** 序号描述 */
15
+ numDesc: string
16
+ /** 渐变色样式 */
17
+ gradientStyle: string
18
+ }
19
+
20
+ /**
21
+ * B站二级评论项数据接口
22
+ */
23
+ export interface SubCommentItem {
24
+ /** 用户头像URL */
25
+ avatar: string
26
+ /** 用户昵称 */
27
+ uname: string
28
+ /** 用户昵称颜色 */
29
+ unameColor?: string | null
30
+ /** 用户等级 */
31
+ level: number
32
+ /** 头像框 */
33
+ frame?: string
34
+ /** 评论内容 */
35
+ message: RichTextDocument
36
+ /** 评论所有图片 */
37
+ pictures: string[]
38
+ /** 创建时间戳(秒) */
39
+ ctime: number
40
+ /** IP标签/地理位置 */
41
+ location: string
42
+ /** 点赞数 */
43
+ like: number
44
+ /** 是否为UP主评论 */
45
+ isUP: boolean
46
+ /** VIP状态 */
47
+ vipstatus?: number
48
+ /** 粉丝卡片信息 */
49
+ fanCard?: FanCardInfo | null
50
+ /** 粉丝勋章详情 */
51
+ fansDetail?: FansDetail | null
52
+ }
53
+
54
+ /**
55
+ * 粉丝勋章详情
56
+ */
57
+ export interface FansDetail {
58
+ /** 用户ID */
59
+ uid: number
60
+ /** 勋章ID */
61
+ medal_id: number
62
+ /** 勋章名称 */
63
+ medal_name: string
64
+ /** 分数 */
65
+ score: number
66
+ /** 等级 */
67
+ level: number
68
+ /** 亲密度 */
69
+ intimacy: number
70
+ /** 主播状态 */
71
+ master_status: number
72
+ /** 是否领取 */
73
+ is_receive: number
74
+ /** 勋章颜色(起始) */
75
+ medal_color: number
76
+ /** 勋章颜色(结束) */
77
+ medal_color_end: number
78
+ /** 边框颜色 */
79
+ medal_color_border: number
80
+ /** 名称颜色 */
81
+ medal_color_name: number
82
+ /** 等级颜色 */
83
+ medal_color_level: number
84
+ /** 守护等级 */
85
+ guard_level: number
86
+ /** 守护图标 */
87
+ guard_icon: string
88
+ /** 荣誉图标 */
89
+ honor_icon: string
90
+ /** 首图标(可选) */
91
+ first_icon?: string
92
+ /** 等级背景色 */
93
+ medal_level_bg_color: number
94
+ }
95
+
96
+ /**
97
+ * B站评论项数据接口
98
+ */
99
+ export interface CommentItem {
100
+ /** 用户头像URL */
101
+ avatar: string
102
+ /** 用户昵称 */
103
+ uname: string
104
+ /** 用户昵称颜色 */
105
+ unameColor?: string | null
106
+ /** 用户等级 */
107
+ level: number
108
+ /** 头像框 */
109
+ frame?: string
110
+ /** 标签类型 (1=作者) */
111
+ label_type?: number
112
+ /** 状态标签 */
113
+ status_label?: string | null
114
+ /** 评论内容 */
115
+ message: RichTextDocument
116
+ /** 评论所有图片 */
117
+ pictures: string[]
118
+ /** VIP状态 */
119
+ vipstatus?: number
120
+ /** 贴纸 */
121
+ sticker?: string
122
+ /** 创建时间戳(秒) */
123
+ ctime: number
124
+ /** IP标签/地理位置 */
125
+ location: string
126
+ /** 回复数量 */
127
+ replylength: number
128
+ /** 点赞数 */
129
+ like: number
130
+ /** 是否置顶评论 */
131
+ isTop: boolean
132
+ /** 是否为UP主评论 */
133
+ isUP: boolean
134
+ /** 二级评论列表 */
135
+ replies?: SubCommentItem[]
136
+ /** 粉丝卡片信息 */
137
+ fanCard?: FanCardInfo | null
138
+ /** 粉丝勋章详情 */
139
+ fansDetail?: FansDetail | null
140
+ }
141
+
142
+ /**
143
+ * B站视频统计数据接口
144
+ */
145
+ export interface BilibiliVideoStat {
146
+ /** 视频AV号 */
147
+ aid: number
148
+ /** 播放量 */
149
+ view: number
150
+ /** 弹幕数 */
151
+ danmaku: number
152
+ /** 评论数 */
153
+ reply: number
154
+ /** 收藏数 */
155
+ favorite: number
156
+ /** 投币数 */
157
+ coin: number
158
+ /** 分享数 */
159
+ share: number
160
+ /** 当前排名 */
161
+ now_rank: number
162
+ /** 历史最高排名 */
163
+ his_rank: number
164
+ /** 点赞数 */
165
+ like: number
166
+ /** 点踩数 */
167
+ dislike: number
168
+ /** 评价 */
169
+ evaluation: string
170
+ /** VT标识 */
171
+ vt: number
172
+ }
173
+
174
+ /**
175
+ * B站视频UP主信息接口
176
+ */
177
+ export interface BilibiliVideoOwner {
178
+ /** UP主用户ID */
179
+ mid: number
180
+ /** UP主昵称 */
181
+ name: string
182
+ /** UP主头像URL */
183
+ face: string
184
+ /** 用户名元数据(VIP颜色等) */
185
+ usernameMeta?: UsernameMetadata
186
+ /** 头像框图片URL */
187
+ frame?: string
188
+ }
189
+
190
+ /**
191
+ * 热门弹幕项接口(相同内容的弹幕聚合)
192
+ */
193
+ export interface BilibiliHotDanmaku {
194
+ /** 弹幕内容 */
195
+ content: string
196
+ /** 出现次数 */
197
+ count: number
198
+ }
199
+
200
+ /**
201
+ * 视频统计项组件属性接口
202
+ */
203
+ export interface VideoStatItemProps {
204
+ /** 图标组件 */
205
+ icon: React.ReactNode
206
+ /** 标签文本 */
207
+ label: string
208
+ /** 数值 */
209
+ value: number | string
210
+ }
211
+
212
+ /**
213
+ * 视频头部信息组件属性接口
214
+ */
215
+ export interface VideoHeaderProps {
216
+ /** 视频标题 */
217
+ title: string
218
+ /** UP主信息 */
219
+ owner: BilibiliVideoOwner
220
+ /** 创建时间戳 */
221
+ ctime: number
222
+ }
223
+
224
+ /**
225
+ * 二维码区域组件属性接口
226
+ */
227
+ export interface QRCodeSectionProps {
228
+ /** 分享链接 */
229
+ share_url: string
230
+ }
231
+
232
+ /**
233
+ * 徽章信息接口
234
+ */
235
+ export interface BangumiBilibiliEpisodeBadgeInfo {
236
+ /** 背景颜色 */
237
+ bg_color: string
238
+ /** 夜间模式背景颜色 */
239
+ bg_color_night: string
240
+ /** 徽章文本 */
241
+ text: string
242
+ }
243
+
244
+ /**
245
+ * 番剧剧集信息接口
246
+ */
247
+ export interface BangumiBilibiliEpisode {
248
+ /** 剧集封面图片URL */
249
+ cover: string
250
+ /** 视频BV号 */
251
+ bvid: string
252
+ /** 剧集链接 */
253
+ link: string
254
+ /** 剧集完整标题 */
255
+ long_title: string
256
+ /** 发布时间戳 */
257
+ pub_time: number
258
+ /** 徽章标识(如:限免、会员) */
259
+ badge: string
260
+ /** 徽章详细信息 */
261
+ badge_info: BangumiBilibiliEpisodeBadgeInfo
262
+ }
263
+
264
+ /**
265
+ * 番剧最新剧集信息接口
266
+ */
267
+ export interface BangumiBilibiliNewEP {
268
+ /** 剧集描述 */
269
+ desc: string
270
+ /** 剧集ID */
271
+ id: number
272
+ /** 是否为新剧集 */
273
+ is_new: number
274
+ /** 剧集标题 */
275
+ title: string
276
+ }
277
+
278
+ /**
279
+ * 番剧统计数据接口
280
+ */
281
+ export interface BangumiBilibiliStat {
282
+ /** 硬币数 */
283
+ coins: number
284
+ /** 弹幕数 */
285
+ danmakus: number
286
+ /** 收藏数 */
287
+ favorite: number
288
+ /** 总收藏数 */
289
+ favorites: number
290
+ /** 追番文本 */
291
+ follow_text: string
292
+ /** 点赞数 */
293
+ likes: number
294
+ /** 评论数 */
295
+ reply: number
296
+ /** 分享数 */
297
+ share: number
298
+ /** 播放量 */
299
+ views: number
300
+ /** VT标识 */
301
+ vt: number
302
+ }
303
+
304
+ /**
305
+ * UP主挂件信息接口
306
+ */
307
+ export interface BangumiBilibiliPendant {
308
+ /** 挂件图片URL */
309
+ image: string
310
+ /** 挂件名称 */
311
+ name: string
312
+ /** 挂件ID */
313
+ pid: number
314
+ }
315
+
316
+ /**
317
+ * UP主VIP标签信息接口
318
+ */
319
+ export interface BangumiBilibiliVipLabel {
320
+ /** 背景颜色 */
321
+ bg_color: string
322
+ /** 背景样式 */
323
+ bg_style: number
324
+ /** 边框颜色 */
325
+ border_color: string
326
+ /** 标签文本 */
327
+ text: string
328
+ /** 文本颜色 */
329
+ text_color: string
330
+ }
331
+
332
+ /**
333
+ * UP主信息接口
334
+ */
335
+ export interface BangumiBilibiliUPInfo {
336
+ /** 头像URL */
337
+ avatar: string
338
+ /** 头像角标URL */
339
+ avatar_subscript_url: string
340
+ /** 粉丝数 */
341
+ follower: number
342
+ /** 是否已关注 */
343
+ is_follow: number
344
+ /** 用户ID */
345
+ mid: number
346
+ /** 昵称颜色 */
347
+ nickname_color: string
348
+ /** 挂件信息 */
349
+ pendant: BangumiBilibiliPendant
350
+ /** 主题类型 */
351
+ theme_type: number
352
+ /** 用户名 */
353
+ uname: string
354
+ /** 认证类型 */
355
+ verify_type: number
356
+ /** VIP标签信息 */
357
+ vip_label: BangumiBilibiliVipLabel
358
+ /** VIP状态 */
359
+ vip_status: number
360
+ /** VIP类型 */
361
+ vip_type: number
362
+ }
363
+
364
+ /**
365
+ * 番剧头部组件属性接口
366
+ */
367
+ export interface BangumiBilibiliHeaderProps {
368
+ /** 番剧标题 */
369
+ title: string
370
+ /** 主封面图片URL */
371
+ mainCover: string
372
+ /** 番剧评价描述 */
373
+ evaluate: string
374
+ /** 演员信息 */
375
+ actors: string
376
+ /** 番剧风格标签 */
377
+ styles: string[]
378
+ /** 副标题信息 */
379
+ subtitle: string
380
+ /** UP主信息 */
381
+ upInfo?: BangumiBilibiliUPInfo
382
+ /** 统计数据 */
383
+ stat: BangumiBilibiliStat
384
+ /** 版权信息 */
385
+ copyright: string
386
+ /** 季度ID */
387
+ seasonID: number
388
+ }
@@ -0,0 +1,251 @@
1
+ import { renderRichTextToReact } from '@kkk/richtext'
2
+ import { Bookmark, Clock, Eye, Hash, UsersRound } from 'lucide-react'
3
+ import React from 'react'
4
+
5
+ import { isDark } from '../../../../../utils/theme'
6
+ import { DefaultLayout } from '../../../../components/DefaultLayout'
7
+ import { QRCodeWithAvatar } from '../../../../components/QRCodeWithAvatar'
8
+ import type { PosterProps } from '../../../../types/ctx'
9
+ import { CommentIcon, ShareIcon, ThumbUpIcon } from '../../../components/Icons'
10
+ import { CommentText, DecorationCard, EnhancedImage, UsernameDisplay } from '../../../components/shared'
11
+ import type { BilibiliArticleDynamicData } from './types'
12
+
13
+ /**
14
+ * B站专栏动态用户信息组件
15
+ */
16
+ const BilibiliArticleUserInfo: React.FC<PosterProps<BilibiliArticleDynamicData>> = React.memo((props) => {
17
+ return (
18
+ <div className="flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10">
19
+ <div className="flex gap-10 items-center">
20
+ <div className="relative">
21
+ <EnhancedImage src={props.data.avatar_url} alt="用户头像" className="w-32 h-32 rounded-full shadow-medium" isCircular />
22
+ {props.data.frame && <EnhancedImage src={props.data.frame} alt="头像框" className="absolute inset-0 transform scale-180" />}
23
+ </div>
24
+ <div className="flex flex-col gap-8 text-7xl">
25
+ <div className="text-6xl font-bold select-text text-foreground">
26
+ <UsernameDisplay metadata={props.data.usernameMeta} />
27
+ </div>
28
+ <div className="flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted">
29
+ <Clock size={36} />
30
+ {props.data.create_time}
31
+ </div>
32
+ </div>
33
+ </div>
34
+ {props.data.decoration_card && (
35
+ <div className="shrink-0">
36
+ <DecorationCard data={props.data.decoration_card} />
37
+ </div>
38
+ )}
39
+ </div>
40
+ )
41
+ })
42
+
43
+ /**
44
+ * B站专栏动态内容组件
45
+ */
46
+ const BilibiliArticleContent: React.FC<PosterProps<BilibiliArticleDynamicData>> = React.memo((props) => {
47
+ return (
48
+ <div className="flex flex-col px-20 w-full leading-relaxed">
49
+ {/* 专栏标题 */}
50
+ <div className="mb-8">
51
+ <h1 className="text-[60px] font-bold leading-[1.4] tracking-[0.5px] text-foreground select-text">
52
+ <CommentText content={props.data.title} />
53
+ </h1>
54
+ </div>
55
+
56
+ {/* 专栏封面 */}
57
+ {props.data.banner_url && (
58
+ <div className="mb-8">
59
+ <EnhancedImage src={props.data.banner_url} alt="专栏封面" className="w-full rounded-2xl shadow-medium" />
60
+ </div>
61
+ )}
62
+
63
+ {/* 专栏摘要 */}
64
+ {props.data.summary && (
65
+ <div className="mb-8">
66
+ <CommentText content={props.data.summary} className="text-[48px] leading-[1.6] text-foreground/70 select-text" />
67
+ </div>
68
+ )}
69
+
70
+ {/* 专栏正文内容 */}
71
+ {props.data.body && (
72
+ <div className="text-5xl leading-relaxed flex-col items-center mb-8 select-text">
73
+ {renderRichTextToReact(props.data.body, {
74
+ at: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
75
+ topic: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
76
+ webLink: { className: 'text-[#006A9E] dark:text-[#58B0D5] underline' },
77
+ opusLink: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
78
+ mention: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
79
+ lottery: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
80
+ vote: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
81
+ viewPicture: { className: 'text-[#006A9E] dark:text-[#58B0D5]' },
82
+ searchKeyword: {
83
+ className: 'text-[#006A9E] dark:text-[#58B0D5]',
84
+ iconClassName: 'text-[#006A9E] dark:text-[#58B0D5]'
85
+ },
86
+ codeBlock: {
87
+ className: 'font-mono'
88
+ },
89
+ linkCard: {
90
+ className: 'block bg-default rounded-4xl p-16 my-8 text-[#006A9E] dark:text-[#58B0D5] underline border border-scrollbar'
91
+ }
92
+ })}
93
+ </div>
94
+ )}
95
+ </div>
96
+ )
97
+ })
98
+
99
+ /**
100
+ * B站专栏动态状态组件
101
+ */
102
+ const BilibiliArticleStatus: React.FC<PosterProps<BilibiliArticleDynamicData>> = React.memo((props) => {
103
+ return (
104
+ <div className="flex flex-col gap-12 px-20 py-16">
105
+ {/* 互动数据 */}
106
+ <div className="flex gap-24 items-center">
107
+ <div className="flex gap-3 items-center text-[42px]">
108
+ <ThumbUpIcon size={32} />
109
+ <span className="font-medium">{props.data.stats.like || 0}</span>
110
+ <span className="text-[36px] text-foreground/70">点赞</span>
111
+ </div>
112
+ <div className="flex gap-3 items-center text-[42px]">
113
+ <CommentIcon size={32} />
114
+ <span className="font-medium">{props.data.stats.reply || 0}</span>
115
+ <span className="text-[36px] text-foreground/70">评论</span>
116
+ </div>
117
+ <div className="flex gap-3 items-center text-[42px]">
118
+ <ShareIcon size={32} />
119
+ <span className="font-medium">{props.data.stats.dynamic || 0}</span>
120
+ <span className="text-[36px] text-foreground/70">分享</span>
121
+ </div>
122
+ </div>
123
+
124
+ {/* 专栏统计信息 */}
125
+ <div className="flex gap-20 items-center text-[36px] text-foreground/80">
126
+ <div className="flex gap-2 items-center">
127
+ <Eye size={28} />
128
+ <span className="font-medium">阅读量</span>
129
+ <span className="font-bold text-foreground">{props.data.stats.view || 0}</span>
130
+ </div>
131
+ <div className="flex gap-2 items-center">
132
+ <Bookmark size={28} />
133
+ <span className="font-medium">收藏</span>
134
+ <span className="font-bold text-foreground">{props.data.stats.favorite || 0}</span>
135
+ </div>
136
+ <div className="flex gap-2 items-center">
137
+ <ThumbUpIcon size={28} />
138
+ <span className="font-medium">获赞</span>
139
+ <span className="font-bold text-foreground">{props.data.stats.like || 0}</span>
140
+ </div>
141
+ </div>
142
+ </div>
143
+ )
144
+ })
145
+
146
+ /**
147
+ * B站专栏动态底部信息组件
148
+ */
149
+ const BilibiliArticleFooter: React.FC<PosterProps<BilibiliArticleDynamicData>> = React.memo((props) => {
150
+ return (
151
+ <div className="flex justify-between items-start px-20 pb-20">
152
+ {/* 左侧:用户信息 */}
153
+ <div className="flex flex-col gap-12">
154
+ {/* 头像和用户名/UID */}
155
+ <div className="flex gap-12 items-start">
156
+ {/* 头像 */}
157
+ <div className="relative shrink-0">
158
+ <EnhancedImage src={props.data.avatar_url} alt="头像" className="rounded-full shadow-medium w-35 h-auto" isCircular />
159
+ {props.data.frame && <EnhancedImage src={props.data.frame} alt="头像框" className="absolute inset-0 transform scale-175" />}
160
+ </div>
161
+
162
+ {/* 用户名和UID - 纵向排列 */}
163
+ <div className="flex flex-col gap-5">
164
+ <div className="text-7xl font-bold select-text text-foreground">
165
+ <UsernameDisplay metadata={props.data.usernameMeta} />
166
+ </div>
167
+ <div className="flex gap-2 items-center text-4xl text-muted">
168
+ <Hash size={32} />
169
+ <span className="select-text">UID: {props.data.user_shortid}</span>
170
+ </div>
171
+ </div>
172
+ </div>
173
+
174
+ {/* 用户统计信息 */}
175
+ <div className="text-3xl flex gap-6 items-center text-foreground/70">
176
+ <div className="flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface">
177
+ <div className="flex gap-1 items-center">
178
+ <ThumbUpIcon size={28} />
179
+ <span className="text-muted">获赞</span>
180
+ </div>
181
+ <div className="w-full h-px bg-border" />
182
+ <span className="select-text font-medium text-4xl">{props.data.total_favorited}</span>
183
+ </div>
184
+ <div className="flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface">
185
+ <div className="flex gap-1 items-center">
186
+ <Eye size={28} />
187
+ <span className="text-muted">关注</span>
188
+ </div>
189
+ <div className="w-full h-px bg-border" />
190
+ <span className="select-text font-medium text-4xl">{props.data.following_count}</span>
191
+ </div>
192
+ <div className="flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface">
193
+ <div className="flex gap-1 items-center">
194
+ <UsersRound size={28} />
195
+ <span className="text-muted">粉丝</span>
196
+ </div>
197
+ <div className="w-full h-px bg-border" />
198
+ <span className="select-text font-medium text-4xl">{props.data.fans}</span>
199
+ </div>
200
+ </div>
201
+ </div>
202
+
203
+ {/* 右侧:二维码 */}
204
+ <div className="flex flex-col items-center gap-4">
205
+ <QRCodeWithAvatar
206
+ value={props.data.share_url}
207
+ avatarUrl={props.data.avatar_url}
208
+ useDarkTheme={isDark(props.ctx)}
209
+ alt="二维码"
210
+ className="h-auto w-75 rounded-2xl"
211
+ />
212
+ </div>
213
+ </div>
214
+ )
215
+ })
216
+
217
+ /**
218
+ * B站专栏动态主组件
219
+ */
220
+ export const BilibiliArticleDynamic: React.FC<PosterProps<BilibiliArticleDynamicData>> = React.memo((props) => {
221
+ return (
222
+ <DefaultLayout ctx={props.ctx}>
223
+ <div className="p-4">
224
+ {/* 间距 */}
225
+ <div className="h-25" />
226
+
227
+ {/* 用户信息 */}
228
+ <BilibiliArticleUserInfo {...props} />
229
+
230
+ {/* 间距 */}
231
+ <div className="h-15" />
232
+
233
+ {/* 专栏内容 */}
234
+ <BilibiliArticleContent {...props} />
235
+
236
+ {/* 互动状态 */}
237
+ <BilibiliArticleStatus {...props} />
238
+
239
+ {/* 间距 */}
240
+ <div className="h-23" />
241
+
242
+ {/* 底部信息 */}
243
+ <BilibiliArticleFooter {...props} />
244
+ </div>
245
+ </DefaultLayout>
246
+ )
247
+ })
248
+
249
+ BilibiliArticleDynamic.displayName = 'BilibiliArticleDynamic'
250
+
251
+ export default BilibiliArticleDynamic
@@ -0,0 +1,67 @@
1
+ /** 本模板的数据类型(路由 index.tsx 与 components/ 实现共用)。 */
2
+ import type { RichTextDocument } from '@kkk/richtext'
3
+
4
+ import type { DecorationCardData, UsernameMetadata } from '../../types'
5
+
6
+ /**
7
+ * B站专栏动态组件属性接口
8
+ */
9
+ export interface BilibiliArticleDynamicData {
10
+ /** 用户头像URL */
11
+ avatar_url: string
12
+ /** 头像框 */
13
+ frame?: string
14
+ /** 用户名元数据 */
15
+ usernameMeta: UsernameMetadata
16
+ /** 动态创建时间 */
17
+ create_time: string
18
+ /** 装饰卡片 */
19
+ decoration_card?: DecorationCardData
20
+ /** 专栏标题 */
21
+ title: string
22
+ /** 专栏摘要 */
23
+ summary: string
24
+ /** 专栏封面图片URL */
25
+ banner_url?: string
26
+ /** 专栏分类 */
27
+ categories: Array<{
28
+ id: number
29
+ name: string
30
+ parent_id: number
31
+ }>
32
+ /** 专栏字数 */
33
+ words: number
34
+ /** 专栏统计数据 */
35
+ stats: {
36
+ /** 阅读数 */
37
+ view: number
38
+ /** 点赞数 */
39
+ like: number
40
+ /** 收藏数 */
41
+ favorite: number
42
+ /** 评论数 */
43
+ reply: number
44
+ /** 分享数 */
45
+ share: number
46
+ /** 投币数 */
47
+ coin: number
48
+ /** 转发动态 */
49
+ dynamic: number
50
+ }
51
+ /** 专栏正文(richtext 格式) */
52
+ body: RichTextDocument
53
+ /** 渲染时间 */
54
+ render_time: string
55
+ /** 动态类型 */
56
+ dynamicTYPE: string
57
+ /** 分享链接 */
58
+ share_url: string
59
+ /** 用户短ID */
60
+ user_shortid: string | number
61
+ /** 获赞总数 */
62
+ total_favorited: string | number
63
+ /** 关注数 */
64
+ following_count: string | number
65
+ /** 粉丝数 */
66
+ fans: string | number
67
+ }