karin-plugin-kkk 2.27.3 → 2.27.5

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 (90) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/lib/apps/__ready.js +1 -1
  3. package/lib/apps/admin.js +1 -1
  4. package/lib/apps/help.js +1 -1
  5. package/lib/apps/push.js +1 -1
  6. package/lib/apps/qrlogin.js +1 -1
  7. package/lib/apps/statistics.js +1 -1
  8. package/lib/apps/tools.js +1 -1
  9. package/lib/apps/update.js +1 -1
  10. package/lib/build-metadata.json +5 -5
  11. package/lib/core_chunk/ArticleWork-DAUu405n.js +2 -0
  12. package/lib/core_chunk/Comment-C4O4BGki.js +2 -0
  13. package/lib/core_chunk/{Comment-B1-QWo31.js → Comment-CvirQFYw.js} +1 -1
  14. package/lib/core_chunk/Comment-DRZJbKCo.js +2 -0
  15. package/lib/core_chunk/Comment-OVXVG_tK.js +2 -0
  16. package/lib/core_chunk/{DYNAMIC_TYPE_ARTICLE-DhI4wyiD.js → DYNAMIC_TYPE_ARTICLE-BWmq2izT.js} +1 -1
  17. package/lib/core_chunk/{DYNAMIC_TYPE_AV-6dOhp5Vb.js → DYNAMIC_TYPE_AV-DEXvSz0s.js} +1 -1
  18. package/lib/core_chunk/{DYNAMIC_TYPE_DRAW-CyEKe3mQ.js → DYNAMIC_TYPE_DRAW-BAoyJ_xj.js} +1 -1
  19. package/lib/core_chunk/{DYNAMIC_TYPE_FORWARD-DgwU5r0h.js → DYNAMIC_TYPE_FORWARD-BI22-GqJ.js} +1 -1
  20. package/lib/core_chunk/{DYNAMIC_TYPE_LIVE_RCMD-v8wYPTDs.js → DYNAMIC_TYPE_LIVE_RCMD-6e6Nxtk5.js} +1 -1
  21. package/lib/core_chunk/{DYNAMIC_TYPE_WORD-BhB1tElH.js → DYNAMIC_TYPE_WORD-BTU9phya.js} +1 -1
  22. package/lib/core_chunk/Dynamic-hjZ0BWR-.js +2 -0
  23. package/lib/core_chunk/FavoriteList-DUfIRclT.js +2 -0
  24. package/lib/core_chunk/GlobalStatistics-B3CAQ44M.js +2 -0
  25. package/lib/core_chunk/GroupStatistics-D4gbZHi3.js +2 -0
  26. package/lib/core_chunk/Help-Dsw5G3Do.js +2 -0
  27. package/lib/core_chunk/ImageWork-B9FSN_iw.js +2 -0
  28. package/lib/core_chunk/Live-KEnoE0UO.js +2 -0
  29. package/lib/core_chunk/MusicInfo-Ddrg14eN.js +2 -0
  30. package/lib/core_chunk/RecommendList-D1l_s0TC.js +2 -0
  31. package/lib/core_chunk/UserList-BApDU1lF.js +2 -0
  32. package/lib/core_chunk/UserList-H1AY3_uj.js +2 -0
  33. package/lib/core_chunk/UserVideoList-CMMgbIYt.js +2 -0
  34. package/lib/core_chunk/VersionWarning-BW24eFU4.js +2 -0
  35. package/lib/core_chunk/VideoWork-BiIIbFeI.js +2 -0
  36. package/lib/core_chunk/amagiClient-ZfZHbiuk.js +2 -0
  37. package/lib/core_chunk/bangumi-Dp7MOjzD.js +2 -0
  38. package/lib/core_chunk/changelog-C8dAS9l4.js +2 -0
  39. package/lib/core_chunk/{db-CPobc711.js → db-BejzAO0s.js} +1 -1
  40. package/lib/core_chunk/dist-BAaLyQpB.js +2 -0
  41. package/lib/core_chunk/handlerError-BOPnE0Gh.js +2 -0
  42. package/lib/core_chunk/{main-DpV125vG.js → main-DmN-B2b6.js} +683 -406
  43. package/lib/core_chunk/{noteInfo-BRi4E8ui.js → noteInfo-srWUKzIA.js} +1 -1
  44. package/lib/core_chunk/qrcodeImg-DSrE-i8P.js +2 -0
  45. package/lib/core_chunk/qrcodeImg-p3e0i2PO.js +2 -0
  46. package/lib/core_chunk/qrlogin-B_Yo4Job.js +2 -0
  47. package/lib/core_chunk/setup-B-ut9uDP.js +2 -0
  48. package/lib/core_chunk/template.d.mts +351 -15
  49. package/lib/core_chunk/template.js +1 -1
  50. package/lib/core_chunk/{vendor-CPNFNbMs.js → vendor-BVonRw7I.js} +11092 -4828
  51. package/lib/core_chunk/videoInfo-Bhn9Z9tk.js +2 -0
  52. package/lib/core_chunk/videoInfo-DQEHVJxc.js +2 -0
  53. package/lib/index.js +1 -1
  54. package/lib/karin-plugin-kkk.css +41 -2
  55. package/lib/root.js +1 -1
  56. package/lib/web.config.js +1 -1
  57. package/package.json +2 -2
  58. package/resources/image/other/handlerError/Milky.png +0 -0
  59. package/resources/image/other/handlerError/onebot.png +0 -0
  60. package/resources/image/other/handlerError/satori.png +0 -0
  61. package/lib/core_chunk/ArticleWork-B9VlEbFM.js +0 -2
  62. package/lib/core_chunk/Comment-CsjhEqQE.js +0 -2
  63. package/lib/core_chunk/Comment-DqdTSc8A.js +0 -2
  64. package/lib/core_chunk/Comment-vfsv9BWV.js +0 -2
  65. package/lib/core_chunk/Dynamic-k3p7RKuw.js +0 -2
  66. package/lib/core_chunk/FavoriteList-VfKULbNA.js +0 -2
  67. package/lib/core_chunk/GlobalStatistics-Bc7svC23.js +0 -2
  68. package/lib/core_chunk/GroupStatistics-BIMjUQ01.js +0 -2
  69. package/lib/core_chunk/Help-vD_prhrv.js +0 -2
  70. package/lib/core_chunk/ImageWork-DGp6mxVH.js +0 -2
  71. package/lib/core_chunk/Live-DqlY-h7D.js +0 -2
  72. package/lib/core_chunk/MusicInfo-Ba4wnEpW.js +0 -2
  73. package/lib/core_chunk/RecommendList-Cng4vsUq.js +0 -2
  74. package/lib/core_chunk/UserList-BHq909y3.js +0 -2
  75. package/lib/core_chunk/UserList-Cc-KSITl.js +0 -2
  76. package/lib/core_chunk/UserVideoList-BoX9UYyz.js +0 -2
  77. package/lib/core_chunk/VersionWarning-CIL9fLZa.js +0 -2
  78. package/lib/core_chunk/VideoWork-yO5B3pBL.js +0 -2
  79. package/lib/core_chunk/amagiClient-ekHY-PXh.js +0 -2
  80. package/lib/core_chunk/bangumi-DKQ6q6pC.js +0 -2
  81. package/lib/core_chunk/changelog-CqYNfGVJ.js +0 -2
  82. package/lib/core_chunk/dist-uCFspDJu.js +0 -2
  83. package/lib/core_chunk/handlerError-D0W7_FuK.js +0 -2
  84. package/lib/core_chunk/qrcodeImg-B01ESZUL.js +0 -2
  85. package/lib/core_chunk/qrcodeImg-Cy0np3Sk.js +0 -2
  86. package/lib/core_chunk/qrlogin-DcHpe2_c.js +0 -2
  87. package/lib/core_chunk/setup-DPzunDIj.js +0 -2
  88. package/lib/core_chunk/videoInfo-ByNoR3t4.js +0 -2
  89. package/lib/core_chunk/videoInfo-DONA7eyd.js +0 -2
  90. package/resources/image/other/handlerError/cxk.png +0 -0
@@ -1,11 +1,11 @@
1
1
  import { o as __toESM } from "./rolldown-runtime-8i3BgXHp.js";
2
- import { $ as RiTrophyFill, $t as differenceInSeconds, A as RiBellFill, At as Eye, B as RiLoginCircleFill, Bt as ChartColumn, C as AiOutlineVideoCamera, Ct as MapPin, D as LuFullscreen, Dt as Gift, E as SiBilibili, Et as Hash, F as RiHeart3Line, Ft as Clock, G as RiRobot2Fill, Gt as purify, H as RiPieChart2Fill, Ht as Bookmark, I as RiLineChartFill, It as CircleFadingArrowUp, J as RiSparkling2Fill, K as RiSendPlaneFill, Kt as require_dist, L as RiLinkM, Lt as CircleEllipsis, M as RiHashtag, Mt as Crown, N as RiHeart2Line, Nt as CornerDownLeft, O as RiArrowRightFill, Ot as Gamepad2, P as RiHeart3Fill, Pt as Coins, Q as RiTiktokFill, Qt as format, R as RiListCheck2, Rt as CircleCheckBig, S as AiFillStar, St as MessageCircle, T as Markdown, Tt as Heart, U as RiQuestionFill, Ut as BookOpen, V as RiMessage3Fill, Vt as Calendar, W as RiRefreshLine, Wt as Bell, X as RiStarLine, Xt as fromUnixTime, Y as RiStarFill, Yt as zhCN, Z as RiThumbUpFill, Zt as formatDistanceToNow, _ as FaTiktok, _n as AxiosError$1, _t as Quote, a as VictoryChart, an as button_default, at as User, b as AiFillHeart, bn as zod_default, bt as Play, c as VictoryTheme, cn as clsx, ct as ThumbsUp, d as MdAccessTime, dn as require_jsQR, dt as Smartphone, en as require_qr_code_styling, et as RiUserFollowLine, f as MdLocationOn, fn as require_jpeg_js, ft as Shield, g as FaMusic, gn as Chalk, gt as Radio, h as FaCommentDots, hn as require_protobufjs, ht as ScanLine, i as VictoryLine, in as chip_default, it as Users, j as RiGroupLine, jt as ExternalLink, k as RiBarChartFill, kt as FileText, l as TbScan, ln as require_react, lt as Terminal, m as FaCodeBranch, mn as require_express, mt as Share2, n as VictoryScatter, nn as require_server_node, nt as RiVideoLine, o as VictoryAxis, on as HeroUIProvider, ot as UserPlus, p as MdOutlineLightbulb, pn as require_heic_decode, pt as ShieldCheck, q as RiShareForwardFill, qt as require_lib, r as VictoryPie, rn as code_default, rt as Zap, s as VictoryLabel, sn as require_jsx_runtime, st as TriangleAlert, t as rehypeHighlight, tn as Window, tt as RiVerifiedBadgeFill, u as HiOutlineMenuAlt2, un as require_png, ut as Star, v as FaUserGroup, vn as axios$1, vt as QrCode, w as IoSearch, wt as Info, x as AiFillPushpin, xt as Music, y as BsImage, yn as Xhshow, yt as Plug2, z as RiLiveLine, zt as CircleAlert } from "./vendor-CPNFNbMs.js";
2
+ import { $ as RiThumbUpFill, $t as format, A as RiArrowRightFill, At as FileText, B as RiListCheck2, Bt as CircleAlert, C as AiFillStar, Ct as MessageCircle, D as Markdown, Dt as Hash, E as IoSearch, Et as Heart, F as RiHeart2Line, Ft as Coins, G as RiQuestionFill, Gt as Bell, H as RiLoginCircleFill, Ht as Calendar, I as RiHeart3Fill, It as Clock, J as RiSendPlaneFill, K as RiRefreshLine, Kt as require_dist, L as RiHeart3Line, Lt as CircleFadingArrowUp, M as RiBellFill, Mt as ExternalLink, N as RiGroupLine, Nt as Crown, O as SiBilibili, Ot as Gift, P as RiHashtag, Pt as CornerDownLeft, Q as RiStarLine, Qt as formatDistanceToNow, R as RiLineChartFill, Rt as CircleEllipsis, S as AiFillPushpin, Sn as zod_default, St as Music, T as IoExtensionPuzzleOutline, Tt as Info, U as RiMessage3Fill, Ut as Bookmark, V as RiLiveLine, Vt as ChartColumn, W as RiPieChart2Fill, Wt as BookOpen, X as RiSparkling2Fill, Xt as parse, Y as RiShareForwardFill, Yt as zhCN, Z as RiStarFill, Zt as fromUnixTime, _ as FaMusic, _n as require_protobufjs, _t as ScanLine, a as VictoryLine, an as code_default, at as Zap, b as BsImage, bn as axios$1, bt as QrCode, c as VictoryLabel, cn as HeroUIProvider, ct as UserPlus, d as HiOutlineMenuAlt2, dn as require_react, dt as Terminal, en as differenceInSeconds, et as RiTiktokFill, f as MdAccessTime, fn as require_png, ft as Star, g as FaCommentDots, gn as require_express, gt as Share2, h as FaCodeBranch, hn as require_heic_decode, ht as ShieldCheck, i as VictoryPie, in as require_server_node, it as RiVideoLine, j as RiBarChartFill, jt as Eye, k as LuFullscreen, kt as Gamepad2, l as VictoryTheme, ln as require_jsx_runtime, lt as TriangleAlert, m as MdOutlineLightbulb, mn as require_jpeg_js, mt as Shield, n as rehypeHighlight, nn as Window, nt as RiUserFollowLine, o as VictoryChart, on as chip_default, ot as Users, p as MdLocationOn, pn as require_jsQR, pt as Smartphone, q as RiRobot2Fill, qt as require_lib, r as VictoryScatter, rn as purify, rt as RiVerifiedBadgeFill, s as VictoryAxis, sn as button_default, st as User, t as require_lodash, tn as require_qr_code_styling, tt as RiTrophyFill, u as TbScan, un as clsx, ut as ThumbsUp, v as FaTiktok, vn as Chalk, vt as Radio, w as AiOutlineVideoCamera, wt as MapPin, x as AiFillHeart, xn as Xhshow, xt as Play, y as FaUserGroup, yn as AxiosError$1, yt as Quote, z as RiLinkM, zt as CircleCheckBig } from "./vendor-BVonRw7I.js";
3
3
  import "node:module";
4
4
  import fs from "node:fs";
5
5
  import path, { resolve } from "node:path";
6
6
  import URL$1, { fileURLToPath } from "node:url";
7
7
  import os, { platform } from "node:os";
8
- import karin$1, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, components, config, copyConfigSync, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, filesByExt, getBot, hooks, karin, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, range, render, requireFileSync, restart, segment, updatePkg, watch } from "node-karin";
8
+ import karin$1, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, components, config, copyConfigSync, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, filesByExt, getBot, hooks, karin, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, parseChangelog, range, render, requireFileSync, restart, segment, updatePkg, watch } from "node-karin";
9
9
  import _ from "node-karin/lodash";
10
10
  import { EventEmitter } from "node:events";
11
11
  import crypto from "node:crypto";
@@ -21,7 +21,7 @@ import { snapka } from "@snapka/puppeteer";
21
21
  import { newInjectedPage } from "fingerprint-injector";
22
22
  import express from "node-karin/express";
23
23
  globalThis.__kkkLoadStart ??= process.hrtime.bigint();
24
- import("./setup-DPzunDIj.js");
24
+ import("./setup-B-ut9uDP.js");
25
25
  var resolvePluginRoot = (startUrl) => {
26
26
  let dir = path.dirname(startUrl);
27
27
  for (let i = 0; i < 8; i++) {
@@ -5213,7 +5213,7 @@ var Cfg = class {
5213
5213
  const fileName = path.basename(file, ".yaml");
5214
5214
  if (fileName === "cookies" || fileName === "request") {
5215
5215
  logger.debug(`[Config] 检测到 ${fileName} 配置变化,正在重载 Amagi Client...`);
5216
- import("./amagiClient-ekHY-PXh.js").then(({ reloadAmagiConfig }) => {
5216
+ import("./amagiClient-ZfZHbiuk.js").then(({ reloadAmagiConfig }) => {
5217
5217
  reloadAmagiConfig();
5218
5218
  }).catch((error) => {
5219
5219
  logger.error(`[Config] 重载 Amagi Client 失败: ${error}`);
@@ -5232,7 +5232,7 @@ var Cfg = class {
5232
5232
  };
5233
5233
  }
5234
5234
  async All() {
5235
- const { getDouyinDB, getBilibiliDB } = await import("./db-CPobc711.js");
5235
+ const { getDouyinDB, getBilibiliDB } = await import("./db-BejzAO0s.js");
5236
5236
  const douyinDB = await getDouyinDB();
5237
5237
  const bilibiliDB = await getBilibiliDB();
5238
5238
  const allConfig = {};
@@ -5274,7 +5274,7 @@ var Cfg = class {
5274
5274
  fs.writeFileSync(path, yamlData.toString({ lineWidth: -1 }), "utf8");
5275
5275
  }
5276
5276
  async ModifyPro(name, config, type = "config") {
5277
- const { getDouyinDB, getBilibiliDB } = await import("./db-CPobc711.js");
5277
+ const { getDouyinDB, getBilibiliDB } = await import("./db-BejzAO0s.js");
5278
5278
  const douyinDB = await getDouyinDB();
5279
5279
  const bilibiliDB = await getBilibiliDB();
5280
5280
  const filePath = type === "config" ? `${this.dirCfgPath}/${name}.yaml` : `${this.defCfgPath}/${name}.yaml`;
@@ -5379,7 +5379,7 @@ var Cfg = class {
5379
5379
  }
5380
5380
  async syncConfigToDatabase() {
5381
5381
  try {
5382
- const { getDouyinDB, getBilibiliDB } = await import("./db-CPobc711.js");
5382
+ const { getDouyinDB, getBilibiliDB } = await import("./db-BejzAO0s.js");
5383
5383
  const douyinDB = await getDouyinDB();
5384
5384
  const bilibiliDB = await getBilibiliDB();
5385
5385
  const pushCfg = this.getYaml("config", "pushlist");
@@ -8030,47 +8030,47 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8030
8030
  switch (baseComponent.id) {
8031
8031
  case "comment": return createComponentConfig(baseComponent, {
8032
8032
  validateData: (data) => data && typeof data.share_url === "string",
8033
- lazyComponent: () => import("./Comment-vfsv9BWV.js").then((module) => ({ default: module.DouyinComment }))
8033
+ lazyComponent: () => import("./Comment-C4O4BGki.js").then((module) => ({ default: module.DouyinComment }))
8034
8034
  });
8035
8035
  case "dynamic": return createComponentConfig(baseComponent, {
8036
8036
  validateData: (data) => data && typeof data.share_url === "string",
8037
- lazyComponent: () => import("./Dynamic-k3p7RKuw.js").then((module) => ({ default: module.DouyinDynamic }))
8037
+ lazyComponent: () => import("./Dynamic-hjZ0BWR-.js").then((module) => ({ default: module.DouyinDynamic }))
8038
8038
  });
8039
8039
  case "video-work": return createComponentConfig(baseComponent, {
8040
8040
  validateData: (data) => data && typeof data.share_url === "string",
8041
- lazyComponent: () => import("./VideoWork-yO5B3pBL.js").then((module) => ({ default: module.DouyinVideoWork }))
8041
+ lazyComponent: () => import("./VideoWork-BiIIbFeI.js").then((module) => ({ default: module.DouyinVideoWork }))
8042
8042
  });
8043
8043
  case "image-work": return createComponentConfig(baseComponent, {
8044
8044
  validateData: (data) => data && typeof data.share_url === "string",
8045
- lazyComponent: () => import("./ImageWork-DGp6mxVH.js").then((module) => ({ default: module.DouyinImageWork }))
8045
+ lazyComponent: () => import("./ImageWork-B9FSN_iw.js").then((module) => ({ default: module.DouyinImageWork }))
8046
8046
  });
8047
8047
  case "article-work": return createComponentConfig(baseComponent, {
8048
8048
  validateData: (data) => data && typeof data.share_url === "string",
8049
- lazyComponent: () => import("./ArticleWork-B9VlEbFM.js").then((module) => ({ default: module.DouyinArticleWork }))
8049
+ lazyComponent: () => import("./ArticleWork-DAUu405n.js").then((module) => ({ default: module.DouyinArticleWork }))
8050
8050
  });
8051
8051
  case "favorite-list": return createComponentConfig(baseComponent, {
8052
8052
  validateData: (data) => data && typeof data.share_url === "string",
8053
- lazyComponent: () => import("./FavoriteList-VfKULbNA.js").then((module) => ({ default: module.DouyinFavoriteList }))
8053
+ lazyComponent: () => import("./FavoriteList-DUfIRclT.js").then((module) => ({ default: module.DouyinFavoriteList }))
8054
8054
  });
8055
8055
  case "recommend-list": return createComponentConfig(baseComponent, {
8056
8056
  validateData: (data) => data && typeof data.share_url === "string",
8057
- lazyComponent: () => import("./RecommendList-Cng4vsUq.js").then((module) => ({ default: module.DouyinRecommendList }))
8057
+ lazyComponent: () => import("./RecommendList-D1l_s0TC.js").then((module) => ({ default: module.DouyinRecommendList }))
8058
8058
  });
8059
8059
  case "live": return createComponentConfig(baseComponent, {
8060
8060
  validateData: (data) => data && typeof data.share_url === "string",
8061
- lazyComponent: () => import("./Live-DqlY-h7D.js").then((module) => ({ default: module.DouyinLive }))
8061
+ lazyComponent: () => import("./Live-KEnoE0UO.js").then((module) => ({ default: module.DouyinLive }))
8062
8062
  });
8063
8063
  case "musicinfo": return createComponentConfig(baseComponent, {
8064
8064
  validateData: (data) => data && typeof data.share_url === "string",
8065
- lazyComponent: () => import("./MusicInfo-Ba4wnEpW.js").then((module) => ({ default: module.DouyinMusicInfo }))
8065
+ lazyComponent: () => import("./MusicInfo-Ddrg14eN.js").then((module) => ({ default: module.DouyinMusicInfo }))
8066
8066
  });
8067
- case "user_profile": return createComponentConfig(baseComponent, { lazyComponent: () => import("./UserVideoList-BoX9UYyz.js").then((module) => ({ default: module.DouyinUserVideoList })) });
8067
+ case "user_profile": return createComponentConfig(baseComponent, { lazyComponent: () => import("./UserVideoList-CMMgbIYt.js").then((module) => ({ default: module.DouyinUserVideoList })) });
8068
8068
  case "userlist": return createComponentConfig(baseComponent, {
8069
8069
  validateData: (data) => data && Array.isArray(data.renderOpt),
8070
- lazyComponent: () => import("./UserList-Cc-KSITl.js").then((module) => ({ default: module.default }))
8070
+ lazyComponent: () => import("./UserList-BApDU1lF.js").then((module) => ({ default: module.default }))
8071
8071
  });
8072
- case "videoInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./videoInfo-ByNoR3t4.js").then((module) => ({ default: module.DouyinVideoInfo })) });
8073
- case "qrcodeImg": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrcodeImg-B01ESZUL.js").then((module) => ({ default: module.DouyinQrcodeImg })) });
8072
+ case "videoInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./videoInfo-Bhn9Z9tk.js").then((module) => ({ default: module.DouyinVideoInfo })) });
8073
+ case "qrcodeImg": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrcodeImg-p3e0i2PO.js").then((module) => ({ default: module.DouyinQrcodeImg })) });
8074
8074
  default: return createComponentConfig(baseComponent);
8075
8075
  }
8076
8076
  });
@@ -8080,42 +8080,42 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8080
8080
  switch (baseComponent.id) {
8081
8081
  case "comment": return createComponentConfig(baseComponent, {
8082
8082
  validateData: (data) => data && typeof data.share_url === "string",
8083
- lazyComponent: () => import("./Comment-CsjhEqQE.js").then((module) => ({ default: module.BilibiliComment }))
8083
+ lazyComponent: () => import("./Comment-OVXVG_tK.js").then((module) => ({ default: module.BilibiliComment }))
8084
8084
  });
8085
8085
  case "userlist": return createComponentConfig(baseComponent, {
8086
8086
  validateData: (data) => data && Array.isArray(data.renderOpt),
8087
- lazyComponent: () => import("./UserList-BHq909y3.js").then((module) => ({ default: module.default }))
8087
+ lazyComponent: () => import("./UserList-H1AY3_uj.js").then((module) => ({ default: module.default }))
8088
8088
  });
8089
- case "bangumi": return createComponentConfig(baseComponent, { lazyComponent: () => import("./bangumi-DKQ6q6pC.js").then((module) => ({ default: module.default })) });
8089
+ case "bangumi": return createComponentConfig(baseComponent, { lazyComponent: () => import("./bangumi-Dp7MOjzD.js").then((module) => ({ default: module.default })) });
8090
8090
  case "dynamic/DYNAMIC_TYPE_DRAW": return createComponentConfig(baseComponent, {
8091
8091
  validateData: (data) => data && typeof data.share_url === "string",
8092
- lazyComponent: () => import("./DYNAMIC_TYPE_DRAW-CyEKe3mQ.js").then((module) => ({ default: module.BilibiliDrawDynamic }))
8092
+ lazyComponent: () => import("./DYNAMIC_TYPE_DRAW-BAoyJ_xj.js").then((module) => ({ default: module.BilibiliDrawDynamic }))
8093
8093
  });
8094
8094
  case "dynamic/DYNAMIC_TYPE_WORD": return createComponentConfig(baseComponent, {
8095
8095
  validateData: (data) => data && typeof data.share_url === "string",
8096
- lazyComponent: () => import("./DYNAMIC_TYPE_WORD-BhB1tElH.js").then((module) => ({ default: module.BilibiliWordDynamic }))
8096
+ lazyComponent: () => import("./DYNAMIC_TYPE_WORD-BTU9phya.js").then((module) => ({ default: module.BilibiliWordDynamic }))
8097
8097
  });
8098
8098
  case "dynamic/DYNAMIC_TYPE_AV": return createComponentConfig(baseComponent, {
8099
8099
  validateData: (data) => data && typeof data.share_url === "string",
8100
- lazyComponent: () => import("./DYNAMIC_TYPE_AV-6dOhp5Vb.js").then((module) => ({ default: module.BilibiliVideoDynamic }))
8100
+ lazyComponent: () => import("./DYNAMIC_TYPE_AV-DEXvSz0s.js").then((module) => ({ default: module.BilibiliVideoDynamic }))
8101
8101
  });
8102
8102
  case "dynamic/DYNAMIC_TYPE_FORWARD": return createComponentConfig(baseComponent, {
8103
8103
  validateData: (data) => data && typeof data.share_url === "string",
8104
- lazyComponent: () => import("./DYNAMIC_TYPE_FORWARD-DgwU5r0h.js").then((module) => ({ default: module.BilibiliForwardDynamic }))
8104
+ lazyComponent: () => import("./DYNAMIC_TYPE_FORWARD-BI22-GqJ.js").then((module) => ({ default: module.BilibiliForwardDynamic }))
8105
8105
  });
8106
8106
  case "dynamic/DYNAMIC_TYPE_LIVE_RCMD": return createComponentConfig(baseComponent, {
8107
8107
  validateData: (data) => data && typeof data.share_url === "string",
8108
- lazyComponent: () => import("./DYNAMIC_TYPE_LIVE_RCMD-v8wYPTDs.js").then((module) => ({ default: module.BilibiliLiveDynamic }))
8108
+ lazyComponent: () => import("./DYNAMIC_TYPE_LIVE_RCMD-6e6Nxtk5.js").then((module) => ({ default: module.BilibiliLiveDynamic }))
8109
8109
  });
8110
8110
  case "dynamic/DYNAMIC_TYPE_WORD": return createComponentConfig(baseComponent, { validateData: (data) => data && typeof data.share_url === "string" });
8111
- case "dynamic/DYNAMIC_TYPE_ARTICLE": return createComponentConfig(baseComponent, { lazyComponent: () => import("./DYNAMIC_TYPE_ARTICLE-DhI4wyiD.js").then((module) => ({ default: module.BilibiliArticleDynamic })) });
8111
+ case "dynamic/DYNAMIC_TYPE_ARTICLE": return createComponentConfig(baseComponent, { lazyComponent: () => import("./DYNAMIC_TYPE_ARTICLE-BWmq2izT.js").then((module) => ({ default: module.BilibiliArticleDynamic })) });
8112
8112
  case "videoInfo": return createComponentConfig(baseComponent, {
8113
8113
  validateData: (data) => data && typeof data.share_url === "string",
8114
- lazyComponent: () => import("./videoInfo-DONA7eyd.js").then((module) => ({ default: module.BilibiliVideoInfo }))
8114
+ lazyComponent: () => import("./videoInfo-DQEHVJxc.js").then((module) => ({ default: module.BilibiliVideoInfo }))
8115
8115
  });
8116
8116
  case "qrcodeImg": return createComponentConfig(baseComponent, {
8117
8117
  validateData: (data) => data && typeof data.share_url === "string",
8118
- lazyComponent: () => import("./qrcodeImg-Cy0np3Sk.js").then((module) => ({ default: module.BilibiliQrcodeImg }))
8118
+ lazyComponent: () => import("./qrcodeImg-DSrE-i8P.js").then((module) => ({ default: module.BilibiliQrcodeImg }))
8119
8119
  });
8120
8120
  default: return createComponentConfig(baseComponent);
8121
8121
  }
@@ -8126,7 +8126,7 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8126
8126
  switch (baseComponent.id) {
8127
8127
  case "comment": return createComponentConfig(baseComponent, {
8128
8128
  validateData: (data) => data && typeof data.share_url === "string",
8129
- lazyComponent: () => import("./Comment-DqdTSc8A.js").then((module) => ({ default: module.KuaishouComment }))
8129
+ lazyComponent: () => import("./Comment-DRZJbKCo.js").then((module) => ({ default: module.KuaishouComment }))
8130
8130
  });
8131
8131
  default: return createComponentConfig(baseComponent);
8132
8132
  }
@@ -8135,8 +8135,8 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8135
8135
  case PlatformType.XIAOHONGSHU:
8136
8136
  platform.components = basePlatform.components.map((baseComponent) => {
8137
8137
  switch (baseComponent.id) {
8138
- case "noteInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./noteInfo-BRi4E8ui.js").then((module) => ({ default: module.XiaohongshuNoteInfo })) });
8139
- case "comment": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Comment-B1-QWo31.js").then((module) => ({ default: module.XiaohongshuComment })) });
8138
+ case "noteInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./noteInfo-srWUKzIA.js").then((module) => ({ default: module.XiaohongshuNoteInfo })) });
8139
+ case "comment": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Comment-CvirQFYw.js").then((module) => ({ default: module.XiaohongshuComment })) });
8140
8140
  default: return createComponentConfig(baseComponent);
8141
8141
  }
8142
8142
  });
@@ -8144,11 +8144,11 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8144
8144
  case PlatformType.OTHER:
8145
8145
  platform.components = basePlatform.components.map((baseComponent) => {
8146
8146
  switch (baseComponent.id) {
8147
- case "help": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Help-vD_prhrv.js").then((module) => ({ default: module.default })) });
8148
- case "handlerError": return createComponentConfig(baseComponent, { lazyComponent: () => import("./handlerError-D0W7_FuK.js").then((module) => ({ default: module.handlerError })) });
8149
- case "changelog": return createComponentConfig(baseComponent, { lazyComponent: () => import("./changelog-CqYNfGVJ.js").then((module) => ({ default: module.Changelog })) });
8150
- case "version_warning": return createComponentConfig(baseComponent, { lazyComponent: () => import("./VersionWarning-CIL9fLZa.js").then((module) => ({ default: module.VersionWarning })) });
8151
- case "qrlogin": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrlogin-DcHpe2_c.js").then((module) => ({ default: module.QrLogin })) });
8147
+ case "help": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Help-Dsw5G3Do.js").then((module) => ({ default: module.default })) });
8148
+ case "handlerError": return createComponentConfig(baseComponent, { lazyComponent: () => import("./handlerError-BOPnE0Gh.js").then((module) => ({ default: module.handlerError })) });
8149
+ case "changelog": return createComponentConfig(baseComponent, { lazyComponent: () => import("./changelog-C8dAS9l4.js").then((module) => ({ default: module.Changelog })) });
8150
+ case "version_warning": return createComponentConfig(baseComponent, { lazyComponent: () => import("./VersionWarning-BW24eFU4.js").then((module) => ({ default: module.VersionWarning })) });
8151
+ case "qrlogin": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrlogin-B_Yo4Job.js").then((module) => ({ default: module.QrLogin })) });
8152
8152
  default: return createComponentConfig(baseComponent);
8153
8153
  }
8154
8154
  });
@@ -8156,8 +8156,8 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8156
8156
  case PlatformType.STATISTICS:
8157
8157
  platform.components = basePlatform.components.map((baseComponent) => {
8158
8158
  switch (baseComponent.id) {
8159
- case "group": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GroupStatistics-BIMjUQ01.js").then((module) => ({ default: module.GroupStatistics })) });
8160
- case "global": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GlobalStatistics-Bc7svC23.js").then((module) => ({ default: module.GlobalStatistics })) });
8159
+ case "group": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GroupStatistics-D4gbZHi3.js").then((module) => ({ default: module.GroupStatistics })) });
8160
+ case "global": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GlobalStatistics-B3CAQ44M.js").then((module) => ({ default: module.GlobalStatistics })) });
8161
8161
  default: return createComponentConfig(baseComponent);
8162
8162
  }
8163
8163
  });
@@ -8796,8 +8796,28 @@ var isSemverGreater = (remote, local) => {
8796
8796
  return false;
8797
8797
  };
8798
8798
  var import_qr_code_styling = __toESM(require_qr_code_styling(), 1);
8799
+ var createDomPurify = () => purify(new Window());
8800
+ var sanitizeValue = (value) => {
8801
+ const domPurify = createDomPurify();
8802
+ if (typeof value === "string") return domPurify.sanitize(value);
8803
+ if (Array.isArray(value)) return value.map((item) => sanitizeValue(item));
8804
+ if (value && typeof value === "object") {
8805
+ const output = {};
8806
+ for (const [key, item] of Object.entries(value)) output[key] = sanitizeValue(item);
8807
+ return output;
8808
+ }
8809
+ return value;
8810
+ };
8811
+ var createSanitizeContentPlugin = () => ({
8812
+ name: "数据消毒",
8813
+ enforce: "pre",
8814
+ beforeRender(ctx) {
8815
+ ctx.request.data = sanitizeValue(ctx.request.data);
8816
+ ctx.state.props = sanitizeValue(ctx.state.props);
8817
+ }
8818
+ });
8799
8819
  var createQrCodePlugin = () => ({
8800
- name: "qr-code",
8820
+ name: "生成二维码",
8801
8821
  enforce: "pre",
8802
8822
  async beforeRender(ctx) {
8803
8823
  const data = ctx.request.data || {};
@@ -8893,7 +8913,7 @@ var Render = async (event, path$1, data) => {
8893
8913
  }
8894
8914
  },
8895
8915
  outputDir,
8896
- plugins: [createQrCodePlugin()]
8916
+ plugins: [createQrCodePlugin(), createSanitizeContentPlugin()]
8897
8917
  }).then((res) => {
8898
8918
  if (!res.success || !res.htmlPath) throw new Error(res.error);
8899
8919
  return res;
@@ -12401,7 +12421,6 @@ var renderErrorImage = async (ctx, opts = {}) => {
12401
12421
  buildTime: buildMetadata?.buildTime ? formatBuildTime(buildMetadata.buildTime) : void 0,
12402
12422
  commitHash: buildMetadata?.commitHash,
12403
12423
  adapterInfo,
12404
- amagiVersion: Client.version,
12405
12424
  isVerification: opts.isVerification,
12406
12425
  verificationUrl: opts.verificationUrl,
12407
12426
  share_url: opts.share_url
@@ -12581,13 +12600,7 @@ var handleBusinessError = async (error, options, logs, event) => {
12581
12600
  logs,
12582
12601
  event,
12583
12602
  buildMetadata: getBuildMetadata(),
12584
- adapterInfo: event.bot?.adapter ? {
12585
- name: event.bot.adapter.name,
12586
- version: event.bot.adapter.version,
12587
- platform: event.bot.adapter.platform,
12588
- protocol: event.bot.adapter.protocol,
12589
- standard: event.bot.adapter.standard
12590
- } : void 0
12603
+ adapterInfo: event.bot?.adapter ? event.bot.adapter : void 0
12591
12604
  };
12592
12605
  for (const strategy of getStrategies()) if (strategy.match(ctx)) {
12593
12606
  logger.debug(`[ErrorHandler] 匹配策略: ${strategy.name}`);
@@ -15503,6 +15516,7 @@ registerErrorStrategy({
15503
15516
  await sendErrorToMaster(ctx, img);
15504
15517
  await sendErrorToAllMasters(ctx, img);
15505
15518
  const resultCtx = await karin$1.ctx(event);
15519
+ if (!resultCtx) return "continue";
15506
15520
  const params = new URLSearchParams(resultCtx.msg);
15507
15521
  const validate = params.get("validate");
15508
15522
  const seccode = params.get("seccode");
@@ -19738,6 +19752,17 @@ var versionCore = (v) => {
19738
19752
  const [core] = preBuild.split("-", 2);
19739
19753
  return core;
19740
19754
  };
19755
+ var getLagVersionCount = (changelog, localVersion, remoteVersion) => {
19756
+ const local = versionCore(localVersion);
19757
+ const remote = versionCore(remoteVersion);
19758
+ if (!local || !remote || !isSemverGreater(remote, local)) return 0;
19759
+ const versions = Object.keys(parseChangelog(changelog)).map(versionCore).filter(Boolean);
19760
+ return [...new Set(versions)].filter((version) => {
19761
+ const afterLocal = isSemverGreater(version, local);
19762
+ const notAfterRemote = !isSemverGreater(version, remote);
19763
+ return afterLocal && notAfterRemote;
19764
+ }).length;
19765
+ };
19741
19766
  var getRemoteBuildMetadata = async (version) => {
19742
19767
  const requests = [
19743
19768
  `https://jsd.onmicrosoft.cn/npm/${Root.pluginName}@${version}/lib/build-metadata.json`,
@@ -19761,6 +19786,7 @@ var getRemoteBuildMetadata = async (version) => {
19761
19786
  var getChangelogImage = async (ctx, props) => {
19762
19787
  let changelog = "";
19763
19788
  let buildTime;
19789
+ let lagVersionCount = 0;
19764
19790
  const event = "bot" in ctx ? ctx : { bot: ctx };
19765
19791
  if (props.Tip || props.isRemote) {
19766
19792
  const requests = [
@@ -19794,6 +19820,7 @@ var getChangelogImage = async (ctx, props) => {
19794
19820
  return null;
19795
19821
  }
19796
19822
  if (!changelog) return null;
19823
+ lagVersionCount = getLagVersionCount(changelog, props.localVersion, props.remoteVersion);
19797
19824
  const remoteMeta = await getRemoteBuildMetadata(props.remoteVersion);
19798
19825
  if (remoteMeta?.buildTime) buildTime = formatBuildTime(remoteMeta.buildTime);
19799
19826
  changelog = range({
@@ -19805,6 +19832,7 @@ var getChangelogImage = async (ctx, props) => {
19805
19832
  } else {
19806
19833
  try {
19807
19834
  changelog = fs.readFileSync(Root.pluginPath + "/CHANGELOG.md", "utf8");
19835
+ lagVersionCount = getLagVersionCount(changelog, props.localVersion, props.remoteVersion);
19808
19836
  changelog = range({
19809
19837
  data: changelog,
19810
19838
  startVersion: props.localVersion,
@@ -19822,6 +19850,7 @@ var getChangelogImage = async (ctx, props) => {
19822
19850
  Tip: props.Tip,
19823
19851
  localVersion: props.localVersion,
19824
19852
  remoteVersion: props.remoteVersion,
19853
+ lagVersionCount,
19825
19854
  buildTime
19826
19855
  }) || null;
19827
19856
  };
@@ -24479,7 +24508,7 @@ var CommentItemComponent$2 = ({ isLast = false, ...props }) => (0, import_jsx_ru
24479
24508
  children: [
24480
24509
  (0, import_jsx_runtime.jsx)("div", {
24481
24510
  className: "[&>span]:inline-block [&>span]:leading-[1.2] [&>svg]:inline-block [&>svg]:w-25 [&>svg]:h-25 [&>svg]:align-middle [&>svg]:shrink-0",
24482
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.uname) }
24511
+ dangerouslySetInnerHTML: { __html: props.uname }
24483
24512
  }),
24484
24513
  props.level !== void 0 && props.level >= 0 && props.level <= 7 && (0, import_jsx_runtime.jsx)("img", {
24485
24514
  src: `/image/bilibili/level/lv${props.level}.svg`,
@@ -24543,7 +24572,7 @@ var CommentItemComponent$2 = ({ isLast = false, ...props }) => (0, import_jsx_ru
24543
24572
  wordBreak: "break-word",
24544
24573
  overflowWrap: "break-word"
24545
24574
  },
24546
- children: [props.isTop && (0, import_jsx_runtime.jsx)(TopBadge, {}), (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(processCommentHTML$1(props.message)) } })]
24575
+ children: [props.isTop && (0, import_jsx_runtime.jsx)(TopBadge, {}), (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: processCommentHTML$1(props.message) } })]
24547
24576
  }),
24548
24577
  props.pictures && props.pictures.length > 0 && (0, import_jsx_runtime.jsx)("div", {
24549
24578
  className: "flex gap-5 my-5 w-[95%]",
@@ -24643,7 +24672,7 @@ var CommentItemComponent$2 = ({ isLast = false, ...props }) => (0, import_jsx_ru
24643
24672
  children: [
24644
24673
  (0, import_jsx_runtime.jsx)("div", {
24645
24674
  className: "[&>span]:inline-block [&>span]:leading-[1.2]",
24646
- dangerouslySetInnerHTML: { __html: purify.sanitize(subReply.uname) }
24675
+ dangerouslySetInnerHTML: { __html: subReply.uname }
24647
24676
  }),
24648
24677
  subReply.level !== void 0 && subReply.level >= 0 && subReply.level <= 7 && (0, import_jsx_runtime.jsx)("img", {
24649
24678
  src: `/image/bilibili/level/lv${subReply.level}.svg`,
@@ -24697,7 +24726,7 @@ var CommentItemComponent$2 = ({ isLast = false, ...props }) => (0, import_jsx_ru
24697
24726
  wordBreak: "break-word",
24698
24727
  overflowWrap: "break-word"
24699
24728
  },
24700
- dangerouslySetInnerHTML: { __html: purify.sanitize(processCommentHTML$1(subReply.message)) }
24729
+ dangerouslySetInnerHTML: { __html: processCommentHTML$1(subReply.message) }
24701
24730
  }),
24702
24731
  subReply.pictures && subReply.pictures.length > 0 && (0, import_jsx_runtime.jsx)("div", {
24703
24732
  className: "flex gap-5 my-5 w-[95%]",
@@ -24823,14 +24852,11 @@ var processCommentHTML = (htmlContent) => {
24823
24852
  processed = processed.replace(/¨/g, "•");
24824
24853
  return processed;
24825
24854
  };
24826
- var CommentText = ({ content, className, style }) => {
24827
- const processedContent = processCommentHTML(content);
24828
- return (0, import_jsx_runtime.jsx)("div", {
24829
- className,
24830
- style,
24831
- dangerouslySetInnerHTML: { __html: purify.sanitize(processedContent) }
24832
- });
24833
- };
24855
+ var CommentText = ({ content, className, style }) => (0, import_jsx_runtime.jsx)("div", {
24856
+ className,
24857
+ style,
24858
+ dangerouslySetInnerHTML: { __html: processCommentHTML(content) }
24859
+ });
24834
24860
  var EnhancedImage = ({ src, alt, className = "", placeholder, isCircular = false }) => {
24835
24861
  const [hasError, setHasError] = (0, import_react.useState)(false);
24836
24862
  const handleError = () => {
@@ -24862,13 +24888,10 @@ var processHtmlImages = (html) => {
24862
24888
  processed = processed.replace(/<img([^>]*?)src=['"]?(https?:\/\/[^'">\s]+)['"]?([^>]*?)>/gi, (match, before, url, after) => `<img${before}src="${proxyImageUrl(url)}"${after} referrerpolicy="no-referrer" crossorigin="anonymous">`);
24863
24889
  return processed;
24864
24890
  };
24865
- var DecorationCard = ({ html }) => {
24866
- const processedHtml = processHtmlImages(html);
24867
- return (0, import_jsx_runtime.jsx)("div", {
24868
- className: "font-bilifont",
24869
- dangerouslySetInnerHTML: { __html: purify.sanitize(processedHtml) }
24870
- });
24871
- };
24891
+ var DecorationCard = ({ html }) => (0, import_jsx_runtime.jsx)("div", {
24892
+ className: "font-bilifont",
24893
+ dangerouslySetInnerHTML: { __html: processHtmlImages(html) }
24894
+ });
24872
24895
  var BilibiliUserItem = (props) => (0, import_jsx_runtime.jsxs)("li", {
24873
24896
  className: "relative group overflow-hidden rounded-4xl bg-content1/60 border border-default-200/50 backdrop-blur-xl shadow-xl",
24874
24897
  children: [
@@ -25809,7 +25832,7 @@ var BilibiliArticleUserInfo = import_react.memo((props) => (0, import_jsx_runtim
25809
25832
  className: "flex flex-col gap-8 text-7xl",
25810
25833
  children: [(0, import_jsx_runtime.jsx)("div", {
25811
25834
  className: "text-6xl font-bold select-text text-foreground",
25812
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.username) } })
25835
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.data.username } })
25813
25836
  }), (0, import_jsx_runtime.jsxs)("div", {
25814
25837
  className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-foreground-500",
25815
25838
  children: [(0, import_jsx_runtime.jsx)(Clock, {
@@ -25871,7 +25894,7 @@ var BilibiliArticleContent = import_react.memo((props) => {
25871
25894
  }),
25872
25895
  sanitizedHtmlContent && (0, import_jsx_runtime.jsx)("div", {
25873
25896
  className: "flex-col items-center mb-8 select-text",
25874
- dangerouslySetInnerHTML: { __html: purify.sanitize(sanitizedHtmlContent) }
25897
+ dangerouslySetInnerHTML: { __html: sanitizedHtmlContent }
25875
25898
  })
25876
25899
  ]
25877
25900
  });
@@ -26003,7 +26026,7 @@ var BilibiliArticleFooter = import_react.memo((props) => (0, import_jsx_runtime.
26003
26026
  className: "flex flex-col gap-5",
26004
26027
  children: [(0, import_jsx_runtime.jsx)("div", {
26005
26028
  className: "text-7xl font-bold select-text text-foreground",
26006
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.username) } })
26029
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.data.username } })
26007
26030
  }), (0, import_jsx_runtime.jsxs)("div", {
26008
26031
  className: "flex gap-2 items-center text-4xl text-default-500",
26009
26032
  children: [(0, import_jsx_runtime.jsx)(Hash, {
@@ -26374,7 +26397,7 @@ var BilibiliVideoDynamicFooter = (props) => {
26374
26397
  className: "flex flex-col gap-5",
26375
26398
  children: [(0, import_jsx_runtime.jsx)("div", {
26376
26399
  className: "text-7xl font-bold select-text text-foreground",
26377
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.username) } })
26400
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.data.username } })
26378
26401
  }), (0, import_jsx_runtime.jsxs)("div", {
26379
26402
  className: "flex gap-2 items-center text-4xl text-default-500",
26380
26403
  children: [
@@ -26685,7 +26708,7 @@ var BilibiliDynamicUserInfo$1 = (props) => (0, import_jsx_runtime.jsxs)("div", {
26685
26708
  className: "flex flex-col gap-8 text-7xl",
26686
26709
  children: [(0, import_jsx_runtime.jsx)("div", {
26687
26710
  className: "text-6xl font-bold select-text text-foreground",
26688
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
26711
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
26689
26712
  }), (0, import_jsx_runtime.jsxs)("div", {
26690
26713
  className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-foreground-500",
26691
26714
  children: [(0, import_jsx_runtime.jsx)(Clock, {
@@ -26879,7 +26902,7 @@ var BilibiliDynamicFooter$1 = (props) => (0, import_jsx_runtime.jsxs)("div", {
26879
26902
  className: "flex flex-col gap-5",
26880
26903
  children: [(0, import_jsx_runtime.jsx)("div", {
26881
26904
  className: "text-7xl font-bold select-text text-foreground",
26882
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
26905
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
26883
26906
  }), (0, import_jsx_runtime.jsxs)("div", {
26884
26907
  className: "flex gap-2 items-center text-4xl text-default-500",
26885
26908
  children: [(0, import_jsx_runtime.jsx)(Hash, {
@@ -27035,7 +27058,7 @@ var BilibiliForwardUserInfo = (props) => (0, import_jsx_runtime.jsxs)("div", {
27035
27058
  className: "flex flex-col gap-8 text-7xl",
27036
27059
  children: [(0, import_jsx_runtime.jsx)("div", {
27037
27060
  className: "text-6xl font-bold select-text text-foreground",
27038
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
27061
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
27039
27062
  }), (0, import_jsx_runtime.jsxs)("div", {
27040
27063
  className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-foreground-500",
27041
27064
  children: [(0, import_jsx_runtime.jsx)(Clock, {
@@ -27069,7 +27092,7 @@ var OriginalUserInfo = (props) => (0, import_jsx_runtime.jsxs)("div", {
27069
27092
  className: "flex flex-col gap-4 text-7xl",
27070
27093
  children: [(0, import_jsx_runtime.jsx)("div", {
27071
27094
  className: "text-5xl font-normal select-text text-foreground",
27072
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
27095
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
27073
27096
  }), (0, import_jsx_runtime.jsxs)("div", {
27074
27097
  className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-foreground-500",
27075
27098
  children: [(0, import_jsx_runtime.jsx)(Clock, {
@@ -27122,7 +27145,7 @@ var OriginalAVContent = ({ content }) => (0, import_jsx_runtime.jsxs)("div", {
27122
27145
  }),
27123
27146
  (0, import_jsx_runtime.jsx)("div", {
27124
27147
  className: "pb-10 pl-8 text-6xl font-bold select-text leading-20 text-foreground",
27125
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(content.title) } })
27148
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: content.title } })
27126
27149
  })
27127
27150
  ]
27128
27151
  });
@@ -27234,7 +27257,7 @@ var OriginalLiveRcmdContent = ({ content }) => (0, import_jsx_runtime.jsxs)("div
27234
27257
  }),
27235
27258
  (0, import_jsx_runtime.jsx)("div", {
27236
27259
  className: "pl-8 text-6xl font-bold select-text text-foreground",
27237
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(content.title) } })
27260
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: content.title } })
27238
27261
  })
27239
27262
  ]
27240
27263
  });
@@ -27353,7 +27376,7 @@ var BilibiliForwardFooter = (props) => (0, import_jsx_runtime.jsxs)("div", {
27353
27376
  className: "flex flex-col gap-5",
27354
27377
  children: [(0, import_jsx_runtime.jsx)("div", {
27355
27378
  className: "text-7xl font-bold select-text text-foreground",
27356
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
27379
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
27357
27380
  }), (0, import_jsx_runtime.jsxs)("div", {
27358
27381
  className: "flex gap-2 items-center text-4xl text-default-500",
27359
27382
  children: [(0, import_jsx_runtime.jsx)(Hash, {
@@ -27669,7 +27692,7 @@ var BilibiliDynamicUserInfo = (props) => (0, import_jsx_runtime.jsxs)("div", {
27669
27692
  className: "flex flex-col gap-8 text-7xl",
27670
27693
  children: [(0, import_jsx_runtime.jsx)("div", {
27671
27694
  className: "text-6xl font-bold select-text text-foreground",
27672
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
27695
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
27673
27696
  }), (0, import_jsx_runtime.jsxs)("div", {
27674
27697
  className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-foreground-500",
27675
27698
  children: [(0, import_jsx_runtime.jsx)(Clock, {
@@ -27777,7 +27800,7 @@ var BilibiliDynamicFooter = (props) => (0, import_jsx_runtime.jsxs)("div", {
27777
27800
  className: "flex flex-col gap-5",
27778
27801
  children: [(0, import_jsx_runtime.jsx)("div", {
27779
27802
  className: "text-7xl font-bold select-text text-foreground",
27780
- children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: purify.sanitize(props.username) } })
27803
+ children: (0, import_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
27781
27804
  }), (0, import_jsx_runtime.jsxs)("div", {
27782
27805
  className: "flex gap-2 items-center text-4xl text-default-500",
27783
27806
  children: [(0, import_jsx_runtime.jsx)(Hash, {
@@ -28815,7 +28838,7 @@ var ReplyItemComponent = ({ reply, depth = 0, isLast, maxDepth = 6 }) => {
28815
28838
  className: "py-2",
28816
28839
  children: [(0, import_jsx_runtime.jsx)("div", {
28817
28840
  className: "text-5xl text-foreground leading-normal whitespace-pre-wrap select-text [&_img]:mb-2 [&_img]:inline [&_img]:h-[1.3em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em]",
28818
- dangerouslySetInnerHTML: { __html: purify.sanitize(reply.text) },
28841
+ dangerouslySetInnerHTML: { __html: reply.text },
28819
28842
  style: {
28820
28843
  wordBreak: "break-word",
28821
28844
  overflowWrap: "break-word"
@@ -28915,7 +28938,7 @@ var CommentItemComponent$1 = (props) => (0, import_jsx_runtime.jsx)("div", {
28915
28938
  }),
28916
28939
  (0, import_jsx_runtime.jsx)("div", {
28917
28940
  className: "text-5xl text-foreground leading-normal mb-4 whitespace-pre-wrap select-text [&_img]:mb-2 [&_img]:inline [&_img]:h-[1.3em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em]",
28918
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.text) },
28941
+ dangerouslySetInnerHTML: { __html: props.text },
28919
28942
  style: {
28920
28943
  wordBreak: "break-word",
28921
28944
  overflowWrap: "break-word"
@@ -29057,7 +29080,7 @@ var InfoSection$2 = (props) => (0, import_jsx_runtime.jsxs)("div", {
29057
29080
  letterSpacing: "1.5px",
29058
29081
  wordWrap: "break-word"
29059
29082
  },
29060
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.desc) }
29083
+ dangerouslySetInnerHTML: { __html: props.data.desc }
29061
29084
  }),
29062
29085
  (0, import_jsx_runtime.jsxs)("div", {
29063
29086
  className: "flex items-center gap-6 text-[45px] text-foreground-500 font-light mb-2.5 select-text",
@@ -29519,7 +29542,7 @@ var DouyinFavoriteList = (props) => {
29519
29542
  className: "text-rose-500/90 shrink-0 rotate-180 mt-2"
29520
29543
  }), (0, import_jsx_runtime.jsx)("div", {
29521
29544
  className: "text-white text-4xl font-medium leading-relaxed line-clamp-3 drop-shadow-lg tracking-wide",
29522
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.desc) || "分享视频" }
29545
+ dangerouslySetInnerHTML: { __html: props.data.desc || "分享视频" }
29523
29546
  })]
29524
29547
  })
29525
29548
  })]
@@ -29598,7 +29621,7 @@ var InfoSection$1 = (props) => (0, import_jsx_runtime.jsxs)("div", {
29598
29621
  letterSpacing: "1.5px",
29599
29622
  wordWrap: "break-word"
29600
29623
  },
29601
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.desc) }
29624
+ dangerouslySetInnerHTML: { __html: props.data.desc }
29602
29625
  }),
29603
29626
  (0, import_jsx_runtime.jsxs)("div", {
29604
29627
  className: "flex items-center gap-6 text-[45px] text-foreground-500 font-light mb-2.5 select-text",
@@ -30015,7 +30038,7 @@ var MusicInfoSection = ({ desc, musicId, userCount, createTime }) => (0, import_
30015
30038
  letterSpacing: "1.5px",
30016
30039
  wordWrap: "break-word"
30017
30040
  },
30018
- dangerouslySetInnerHTML: { __html: purify.sanitize(desc) }
30041
+ dangerouslySetInnerHTML: { __html: desc }
30019
30042
  }),
30020
30043
  (0, import_jsx_runtime.jsxs)("div", {
30021
30044
  className: "flex flex-col gap-2 text-[45px] text-default-500 font-light mb-2.5",
@@ -30336,7 +30359,7 @@ var DouyinRecommendList = (props) => {
30336
30359
  className: "text-emerald-500/90 shrink-0 rotate-180 mt-2"
30337
30360
  }), (0, import_jsx_runtime.jsx)("div", {
30338
30361
  className: "text-white text-4xl font-medium leading-relaxed line-clamp-3 drop-shadow-lg tracking-wide",
30339
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.desc) || "分享视频" }
30362
+ dangerouslySetInnerHTML: { __html: props.data.desc || "分享视频" }
30340
30363
  })]
30341
30364
  })
30342
30365
  })]
@@ -30963,7 +30986,7 @@ var InfoSection = (props) => (0, import_jsx_runtime.jsxs)("div", {
30963
30986
  letterSpacing: "1.5px",
30964
30987
  wordWrap: "break-word"
30965
30988
  },
30966
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.desc) }
30989
+ dangerouslySetInnerHTML: { __html: props.data.desc }
30967
30990
  }),
30968
30991
  (0, import_jsx_runtime.jsxs)("div", {
30969
30992
  className: "flex items-center gap-6 text-[45px] text-foreground-500 font-light mb-2.5 select-text",
@@ -31748,7 +31771,7 @@ var KuaishouCommentItemComponent = ({ comment, isLast = false }) => (0, import_j
31748
31771
  }),
31749
31772
  (0, import_jsx_runtime.jsx)("div", {
31750
31773
  className: "text-[60px] text-foreground leading-relaxed mb-2 whitespace-pre-wrap [&_img]:mb-3 [&_img]:inline [&_img]:h-[1.4em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em] select-text",
31751
- dangerouslySetInnerHTML: { __html: purify.sanitize(comment.text) },
31774
+ dangerouslySetInnerHTML: { __html: comment.text },
31752
31775
  style: {
31753
31776
  wordBreak: "break-word",
31754
31777
  overflowWrap: "break-word"
@@ -33419,148 +33442,237 @@ var VersionWarning = (props) => {
33419
33442
  }),
33420
33443
  (0, import_jsx_runtime.jsxs)("div", {
33421
33444
  className: "space-y-20",
33422
- children: [(0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33423
- className: "flex items-center space-x-4 mb-6",
33424
- children: [
33425
- (0, import_jsx_runtime.jsx)("div", {
33426
- className: "flex items-center justify-center w-10 h-10 rounded-lg",
33427
- style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33428
- children: (0, import_jsx_runtime.jsx)("span", {
33429
- className: "text-[28px] font-black",
33430
- style: { color: accentColor },
33431
- children: "1"
33445
+ children: [
33446
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33447
+ className: "flex items-center space-x-4 mb-6",
33448
+ children: [
33449
+ (0, import_jsx_runtime.jsx)("div", {
33450
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
33451
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33452
+ children: (0, import_jsx_runtime.jsx)("span", {
33453
+ className: "text-[28px] font-black",
33454
+ style: { color: accentColor },
33455
+ children: "1"
33456
+ })
33457
+ }),
33458
+ (0, import_jsx_runtime.jsxs)("svg", {
33459
+ className: "w-8 h-8",
33460
+ viewBox: "0 0 24 24",
33461
+ fill: "none",
33462
+ stroke: mutedColor,
33463
+ strokeWidth: "2",
33464
+ children: [(0, import_jsx_runtime.jsx)("rect", {
33465
+ x: "3",
33466
+ y: "3",
33467
+ width: "18",
33468
+ height: "18",
33469
+ rx: "2",
33470
+ strokeLinecap: "round",
33471
+ strokeLinejoin: "round"
33472
+ }), (0, import_jsx_runtime.jsx)("path", {
33473
+ d: "M9 3v18M3 9h18M3 15h18",
33474
+ strokeLinecap: "round",
33475
+ strokeLinejoin: "round"
33476
+ })]
33477
+ }),
33478
+ (0, import_jsx_runtime.jsx)("span", {
33479
+ className: "text-[32px] font-bold",
33480
+ style: { color: mutedColor },
33481
+ children: "Web 控制台更新"
33482
+ }),
33483
+ (0, import_jsx_runtime.jsx)(chip_default, {
33484
+ className: "text-[20px] font-semibold px-4",
33485
+ style: {
33486
+ backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
33487
+ color: accentColor
33488
+ },
33489
+ size: "lg",
33490
+ children: "推荐"
33432
33491
  })
33433
- }),
33434
- (0, import_jsx_runtime.jsxs)("svg", {
33435
- className: "w-8 h-8",
33436
- viewBox: "0 0 24 24",
33437
- fill: "none",
33438
- stroke: mutedColor,
33439
- strokeWidth: "2",
33440
- children: [(0, import_jsx_runtime.jsx)("rect", {
33441
- x: "3",
33442
- y: "3",
33443
- width: "18",
33444
- height: "18",
33445
- rx: "2",
33446
- strokeLinecap: "round",
33447
- strokeLinejoin: "round"
33448
- }), (0, import_jsx_runtime.jsx)("path", {
33449
- d: "M9 3v18M3 9h18M3 15h18",
33450
- strokeLinecap: "round",
33451
- strokeLinejoin: "round"
33452
- })]
33453
- }),
33454
- (0, import_jsx_runtime.jsx)("span", {
33455
- className: "text-[32px] font-bold",
33456
- style: { color: mutedColor },
33457
- children: "Web 控制台更新"
33458
- }),
33459
- (0, import_jsx_runtime.jsx)(chip_default, {
33460
- className: "text-[20px] font-semibold px-4",
33461
- style: {
33462
- backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
33463
- color: accentColor
33464
- },
33465
- size: "lg",
33466
- children: "推荐"
33467
- })
33468
- ]
33469
- }), (0, import_jsx_runtime.jsxs)("div", {
33470
- className: "ml-14 space-y-4",
33471
- children: [
33472
- (0, import_jsx_runtime.jsxs)("div", {
33473
- className: "flex items-start space-x-4",
33474
- children: [(0, import_jsx_runtime.jsx)("div", {
33475
- className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
33476
- style: { backgroundColor: mutedColor }
33477
- }), (0, import_jsx_runtime.jsx)("span", {
33478
- className: "text-[28px] leading-relaxed",
33479
- style: { color: secondaryColor },
33480
- children: "访问 Karin Web 控制台首页,查看 Karin 版本信息"
33481
- })]
33482
- }),
33483
- (0, import_jsx_runtime.jsxs)("div", {
33484
- className: "flex items-start space-x-4",
33485
- children: [(0, import_jsx_runtime.jsx)("div", {
33486
- className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
33487
- style: { backgroundColor: mutedColor }
33488
- }), (0, import_jsx_runtime.jsx)("span", {
33489
- className: "text-[28px] leading-relaxed",
33490
- style: { color: secondaryColor },
33491
- children: "当有新版本时会高亮提示,点击查看更新日志"
33492
- })]
33493
- }),
33494
- (0, import_jsx_runtime.jsxs)("div", {
33495
- className: "flex items-start space-x-4",
33496
- children: [(0, import_jsx_runtime.jsx)("div", {
33497
- className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
33498
- style: { backgroundColor: mutedColor }
33499
- }), (0, import_jsx_runtime.jsx)("span", {
33500
- className: "text-[28px] leading-relaxed",
33501
- style: { color: secondaryColor },
33502
- children: "点击「更新」按钮,系统将自动完成更新并重启"
33503
- })]
33504
- })
33505
- ]
33506
- })] }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33507
- className: "flex items-center space-x-4 mb-6",
33508
- children: [
33509
- (0, import_jsx_runtime.jsx)("div", {
33510
- className: "flex items-center justify-center w-10 h-10 rounded-lg",
33511
- style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33512
- children: (0, import_jsx_runtime.jsx)("span", {
33513
- className: "text-[28px] font-black",
33514
- style: { color: accentColor },
33515
- children: "2"
33492
+ ]
33493
+ }), (0, import_jsx_runtime.jsxs)("div", {
33494
+ className: "ml-14 space-y-4",
33495
+ children: [
33496
+ (0, import_jsx_runtime.jsxs)("div", {
33497
+ className: "flex items-start space-x-4",
33498
+ children: [(0, import_jsx_runtime.jsx)("div", {
33499
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33500
+ style: { backgroundColor: mutedColor }
33501
+ }), (0, import_jsx_runtime.jsx)("span", {
33502
+ className: "text-[28px] leading-relaxed",
33503
+ style: { color: secondaryColor },
33504
+ children: "访问 Karin Web 控制台首页,查看 Karin 版本信息"
33505
+ })]
33506
+ }),
33507
+ (0, import_jsx_runtime.jsxs)("div", {
33508
+ className: "flex items-start space-x-4",
33509
+ children: [(0, import_jsx_runtime.jsx)("div", {
33510
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33511
+ style: { backgroundColor: mutedColor }
33512
+ }), (0, import_jsx_runtime.jsx)("span", {
33513
+ className: "text-[28px] leading-relaxed",
33514
+ style: { color: secondaryColor },
33515
+ children: "当有新版本时会高亮提示,点击查看更新日志"
33516
+ })]
33517
+ }),
33518
+ (0, import_jsx_runtime.jsxs)("div", {
33519
+ className: "flex items-start space-x-4",
33520
+ children: [(0, import_jsx_runtime.jsx)("div", {
33521
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33522
+ style: { backgroundColor: mutedColor }
33523
+ }), (0, import_jsx_runtime.jsxs)("span", {
33524
+ className: "text-[28px] leading-relaxed",
33525
+ style: { color: secondaryColor },
33526
+ children: [
33527
+ "点击",
33528
+ (0, import_jsx_runtime.jsx)("span", {
33529
+ className: "font-mono font-black",
33530
+ children: "「更新」"
33531
+ }),
33532
+ "按钮,系统将自动完成更新并重启"
33533
+ ]
33534
+ })]
33516
33535
  })
33517
- }),
33518
- (0, import_jsx_runtime.jsx)("svg", {
33519
- className: "w-8 h-8",
33520
- viewBox: "0 0 24 24",
33521
- fill: "none",
33522
- stroke: mutedColor,
33523
- strokeWidth: "2",
33524
- children: (0, import_jsx_runtime.jsx)("path", {
33525
- d: "M4 17l6-6-6-6M12 19h8",
33526
- strokeLinecap: "round",
33527
- strokeLinejoin: "round"
33536
+ ]
33537
+ })] }),
33538
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33539
+ className: "flex items-center space-x-4 mb-6",
33540
+ children: [
33541
+ (0, import_jsx_runtime.jsx)("div", {
33542
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
33543
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33544
+ children: (0, import_jsx_runtime.jsx)("span", {
33545
+ className: "text-[28px] font-black",
33546
+ style: { color: accentColor },
33547
+ children: "2"
33548
+ })
33549
+ }),
33550
+ (0, import_jsx_runtime.jsx)(IoExtensionPuzzleOutline, {
33551
+ className: clsx("w-10 h-auto"),
33552
+ style: { color: mutedColor }
33553
+ }),
33554
+ (0, import_jsx_runtime.jsx)("span", {
33555
+ className: "text-[32px] font-bold",
33556
+ style: { color: mutedColor },
33557
+ children: "使用 basic 插件命令更新"
33558
+ }),
33559
+ (0, import_jsx_runtime.jsx)(chip_default, {
33560
+ className: "text-[20px] font-semibold px-4",
33561
+ style: {
33562
+ backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
33563
+ color: accentColor
33564
+ },
33565
+ size: "lg",
33566
+ children: "推荐"
33528
33567
  })
33529
- }),
33530
- (0, import_jsx_runtime.jsx)("span", {
33531
- className: "text-[32px] font-bold",
33532
- style: { color: mutedColor },
33533
- children: "命令行更新"
33534
- })
33535
- ]
33536
- }), (0, import_jsx_runtime.jsxs)("div", {
33537
- className: "ml-14 space-y-4",
33538
- children: [
33539
- (0, import_jsx_runtime.jsx)("p", {
33540
- className: "text-[28px]",
33541
- style: { color: secondaryColor },
33542
- children: "在 Karin 根目录下执行以下命令"
33543
- }),
33544
- (0, import_jsx_runtime.jsx)("div", {
33545
- className: "rounded-xl p-6",
33546
- style: { backgroundColor: isDark ? "rgba(0,0,0,0.4)" : "rgba(255,255,255,0.7)" },
33547
- children: (0, import_jsx_runtime.jsxs)("code", {
33548
- className: "text-[40px] font-mono font-bold block",
33549
- style: { color: accentColor },
33550
- children: [
33551
- "pnpm add node-karin@",
33552
- props.data.requireVersion,
33553
- " -w"
33554
- ]
33568
+ ]
33569
+ }), (0, import_jsx_runtime.jsxs)("div", {
33570
+ className: "ml-14 space-y-4",
33571
+ children: [
33572
+ (0, import_jsx_runtime.jsxs)("div", {
33573
+ className: "flex items-start space-x-4",
33574
+ children: [(0, import_jsx_runtime.jsx)("div", {
33575
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33576
+ style: { backgroundColor: mutedColor }
33577
+ }), (0, import_jsx_runtime.jsxs)("span", {
33578
+ className: "text-[28px] leading-relaxed",
33579
+ style: { color: secondaryColor },
33580
+ children: [
33581
+ "插件市场搜索",
33582
+ (0, import_jsx_runtime.jsx)("span", {
33583
+ className: "font-mono font-black",
33584
+ children: "「karin-plugin-basic」"
33585
+ }),
33586
+ "插件并安装"
33587
+ ]
33588
+ })]
33589
+ }),
33590
+ (0, import_jsx_runtime.jsxs)("div", {
33591
+ className: "flex items-start space-x-4",
33592
+ children: [(0, import_jsx_runtime.jsx)("div", {
33593
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33594
+ style: { backgroundColor: mutedColor }
33595
+ }), (0, import_jsx_runtime.jsxs)("span", {
33596
+ className: "text-[28px] leading-relaxed",
33597
+ style: { color: secondaryColor },
33598
+ children: ["安装完成后发送 ", (0, import_jsx_runtime.jsx)("span", {
33599
+ className: "font-mono font-black",
33600
+ children: "「#更新」"
33601
+ })]
33602
+ })]
33603
+ }),
33604
+ (0, import_jsx_runtime.jsxs)("div", {
33605
+ className: "flex items-start space-x-4",
33606
+ children: [(0, import_jsx_runtime.jsx)("div", {
33607
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33608
+ style: { backgroundColor: mutedColor }
33609
+ }), (0, import_jsx_runtime.jsx)("span", {
33610
+ className: "text-[28px] leading-relaxed",
33611
+ style: { color: secondaryColor },
33612
+ children: "插件会自动执行更新流程"
33613
+ })]
33555
33614
  })
33556
- }),
33557
- (0, import_jsx_runtime.jsx)("p", {
33558
- className: "text-[28px] opacity-80",
33559
- style: { color: secondaryColor },
33560
- children: "更新完成后手动重启 Karin 即可"
33561
- })
33562
- ]
33563
- })] })]
33615
+ ]
33616
+ })] }),
33617
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33618
+ className: "flex items-center space-x-4 mb-6",
33619
+ children: [
33620
+ (0, import_jsx_runtime.jsx)("div", {
33621
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
33622
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33623
+ children: (0, import_jsx_runtime.jsx)("span", {
33624
+ className: "text-[28px] font-black",
33625
+ style: { color: accentColor },
33626
+ children: "3"
33627
+ })
33628
+ }),
33629
+ (0, import_jsx_runtime.jsx)("svg", {
33630
+ className: "w-8 h-8",
33631
+ viewBox: "0 0 24 24",
33632
+ fill: "none",
33633
+ stroke: mutedColor,
33634
+ strokeWidth: "2",
33635
+ children: (0, import_jsx_runtime.jsx)("path", {
33636
+ d: "M4 17l6-6-6-6M12 19h8",
33637
+ strokeLinecap: "round",
33638
+ strokeLinejoin: "round"
33639
+ })
33640
+ }),
33641
+ (0, import_jsx_runtime.jsx)("span", {
33642
+ className: "text-[32px] font-bold",
33643
+ style: { color: mutedColor },
33644
+ children: "命令行手动更新"
33645
+ })
33646
+ ]
33647
+ }), (0, import_jsx_runtime.jsxs)("div", {
33648
+ className: "ml-14 space-y-4",
33649
+ children: [
33650
+ (0, import_jsx_runtime.jsx)("p", {
33651
+ className: "text-[28px]",
33652
+ style: { color: secondaryColor },
33653
+ children: "在 Karin 根目录下执行以下命令"
33654
+ }),
33655
+ (0, import_jsx_runtime.jsx)("div", {
33656
+ className: "rounded-xl p-6",
33657
+ style: { backgroundColor: isDark ? "rgba(0,0,0,0.4)" : "rgba(255,255,255,0.7)" },
33658
+ children: (0, import_jsx_runtime.jsxs)("code", {
33659
+ className: "text-[40px] font-mono font-bold block",
33660
+ style: { color: accentColor },
33661
+ children: [
33662
+ "pnpm add node-karin@",
33663
+ props.data.requireVersion,
33664
+ " -w"
33665
+ ]
33666
+ })
33667
+ }),
33668
+ (0, import_jsx_runtime.jsx)("p", {
33669
+ className: "text-[28px] opacity-80",
33670
+ style: { color: secondaryColor },
33671
+ children: "更新完成后手动重启 Karin 即可"
33672
+ })
33673
+ ]
33674
+ })] })
33675
+ ]
33564
33676
  }),
33565
33677
  (0, import_jsx_runtime.jsx)("div", {
33566
33678
  className: "h-0.5 rounded-full my-10",
@@ -33570,7 +33682,7 @@ var VersionWarning = (props) => {
33570
33682
  className: "rounded-2xl p-6 flex items-start space-x-5",
33571
33683
  style: { backgroundColor: isDark ? "rgba(251,146,60,0.08)" : "rgba(194,65,12,0.08)" },
33572
33684
  children: [(0, import_jsx_runtime.jsxs)("svg", {
33573
- className: "w-10 h-10 mt-1 flex-shrink-0",
33685
+ className: "w-10 h-10 mt-1 shrink-0",
33574
33686
  viewBox: "0 0 24 24",
33575
33687
  fill: accentColor,
33576
33688
  children: [(0, import_jsx_runtime.jsx)("path", { d: "M12 2L22 20H2L12 2Z" }), (0, import_jsx_runtime.jsx)("path", {
@@ -33803,81 +33915,97 @@ var Changelog = import_react.memo((props) => {
33803
33915
  children: [
33804
33916
  props.data.Tip === true ? (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: (0, import_jsx_runtime.jsxs)("div", {
33805
33917
  className: "pt-32",
33806
- children: [(0, import_jsx_runtime.jsx)("div", {
33807
- className: "text-5xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
33808
- children: "以下任意方式均可更新"
33809
- }), (0, import_jsx_runtime.jsxs)("div", {
33810
- className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
33811
- children: [
33812
- (0, import_jsx_runtime.jsxs)("div", {
33813
- className: "flex items-center gap-5",
33814
- children: [
33815
- (0, import_jsx_runtime.jsx)("span", {
33816
- className: "text-default-500 text-[1.2em]",
33817
- children: "•"
33818
- }),
33819
- (0, import_jsx_runtime.jsx)("span", { children: "回复" }),
33820
- (0, import_jsx_runtime.jsx)("span", {
33821
- className: "inline-block text-[1.15em] font-bold text-default-900",
33822
- children: "更新"
33823
- }),
33824
- (0, import_jsx_runtime.jsx)("span", { children: "立刻开始" })
33825
- ]
33826
- }),
33827
- (0, import_jsx_runtime.jsxs)("div", {
33828
- className: "flex items-center gap-5",
33829
- children: [
33830
- (0, import_jsx_runtime.jsx)("span", {
33831
- className: "text-default-500 text-[1.2em]",
33832
- children: "•"
33833
- }),
33834
- (0, import_jsx_runtime.jsx)("span", { children: "进入" }),
33835
- (0, import_jsx_runtime.jsx)(code_default, {
33836
- radius: "lg",
33837
- color: "success",
33838
- className: "text-[0.9em]",
33839
- children: "Karin WebUI"
33840
- }),
33841
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33842
- (0, import_jsx_runtime.jsx)(code_default, {
33843
- radius: "lg",
33844
- color: "success",
33845
- className: "text-[0.9em]",
33846
- children: "插件管理"
33847
- }),
33848
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33849
- (0, import_jsx_runtime.jsx)(code_default, {
33850
- radius: "lg",
33851
- color: "success",
33852
- className: "text-[0.9em]",
33853
- children: "已安装"
33854
- }),
33855
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33856
- (0, import_jsx_runtime.jsx)("span", { children: "一览更新" })
33857
- ]
33858
- }),
33859
- (0, import_jsx_runtime.jsxs)("div", {
33860
- className: "flex items-center gap-5",
33861
- children: [
33862
- (0, import_jsx_runtime.jsx)("span", {
33863
- className: "text-default-500 text-[1.2em]",
33864
- children: "•"
33865
- }),
33866
- (0, import_jsx_runtime.jsx)("span", { children: "Karin 根目录运行" }),
33867
- (0, import_jsx_runtime.jsxs)(code_default, {
33868
- radius: "lg",
33869
- color: "success",
33870
- className: "text-[0.85em] whitespace-nowrap",
33871
- children: [
33872
- "pnpm add karin-plugin-kkk@",
33873
- props.data.remoteVersion,
33874
- " -w"
33875
- ]
33876
- })
33877
- ]
33878
- })
33879
- ]
33880
- })]
33918
+ children: [
33919
+ (0, import_jsx_runtime.jsx)("div", {
33920
+ className: "text-5xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
33921
+ children: "以下任意方式均可更新"
33922
+ }),
33923
+ (0, import_jsx_runtime.jsxs)("div", {
33924
+ className: "mb-10 px-8 py-5 rounded-2xl border border-default-300/70 bg-default-50/50 text-default-700 text-[2.2em] flex items-center justify-center gap-6",
33925
+ children: [
33926
+ (0, import_jsx_runtime.jsxs)("span", { children: ["当前版本: v", props.data.localVersion] }),
33927
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33928
+ (0, import_jsx_runtime.jsxs)("span", { children: ["最新版本: v", props.data.remoteVersion] }),
33929
+ (0, import_jsx_runtime.jsxs)("span", { children: [
33930
+ ",共落后 ",
33931
+ props.data.lagVersionCount ?? 0,
33932
+ " 个版本"
33933
+ ] })
33934
+ ]
33935
+ }),
33936
+ (0, import_jsx_runtime.jsxs)("div", {
33937
+ className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
33938
+ children: [
33939
+ (0, import_jsx_runtime.jsxs)("div", {
33940
+ className: "flex items-center gap-5",
33941
+ children: [
33942
+ (0, import_jsx_runtime.jsx)("span", {
33943
+ className: "text-default-500 text-[1.2em]",
33944
+ children: "•"
33945
+ }),
33946
+ (0, import_jsx_runtime.jsx)("span", { children: "回复" }),
33947
+ (0, import_jsx_runtime.jsx)("span", {
33948
+ className: "inline-block text-[1.15em] font-bold text-default-900",
33949
+ children: "更新"
33950
+ }),
33951
+ (0, import_jsx_runtime.jsx)("span", { children: "立刻开始" })
33952
+ ]
33953
+ }),
33954
+ (0, import_jsx_runtime.jsxs)("div", {
33955
+ className: "flex items-center gap-5",
33956
+ children: [
33957
+ (0, import_jsx_runtime.jsx)("span", {
33958
+ className: "text-default-500 text-[1.2em]",
33959
+ children: "•"
33960
+ }),
33961
+ (0, import_jsx_runtime.jsx)("span", { children: "进入" }),
33962
+ (0, import_jsx_runtime.jsx)(code_default, {
33963
+ radius: "lg",
33964
+ color: "success",
33965
+ className: "text-[0.9em]",
33966
+ children: "Karin WebUI"
33967
+ }),
33968
+ (0, import_jsx_runtime.jsx)("span", { children: "" }),
33969
+ (0, import_jsx_runtime.jsx)(code_default, {
33970
+ radius: "lg",
33971
+ color: "success",
33972
+ className: "text-[0.9em]",
33973
+ children: "插件管理"
33974
+ }),
33975
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33976
+ (0, import_jsx_runtime.jsx)(code_default, {
33977
+ radius: "lg",
33978
+ color: "success",
33979
+ className: "text-[0.9em]",
33980
+ children: "已安装"
33981
+ }),
33982
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33983
+ (0, import_jsx_runtime.jsx)("span", { children: "一览更新" })
33984
+ ]
33985
+ }),
33986
+ (0, import_jsx_runtime.jsxs)("div", {
33987
+ className: "flex items-center gap-5",
33988
+ children: [
33989
+ (0, import_jsx_runtime.jsx)("span", {
33990
+ className: "text-default-500 text-[1.2em]",
33991
+ children: "•"
33992
+ }),
33993
+ (0, import_jsx_runtime.jsx)("span", { children: "Karin 根目录运行" }),
33994
+ (0, import_jsx_runtime.jsxs)(code_default, {
33995
+ radius: "lg",
33996
+ color: "success",
33997
+ className: "text-[0.85em] whitespace-nowrap",
33998
+ children: [
33999
+ "pnpm add karin-plugin-kkk@",
34000
+ props.data.remoteVersion,
34001
+ " -w"
34002
+ ]
34003
+ })
34004
+ ]
34005
+ })
34006
+ ]
34007
+ })
34008
+ ]
33881
34009
  }) }) : null,
33882
34010
  (0, import_jsx_runtime.jsx)("div", {
33883
34011
  className: "changelog-content",
@@ -34212,6 +34340,7 @@ var ERROR_TITLES = [
34212
34340
  "猝不及防"
34213
34341
  ];
34214
34342
  var getRandomErrorTitle = () => ERROR_TITLES[Math.floor(Math.random() * ERROR_TITLES.length)];
34343
+ var import_lodash = __toESM(require_lodash(), 1);
34215
34344
  var ansiColorMap = {
34216
34345
  30: "text-default-900",
34217
34346
  31: "text-danger",
@@ -34366,11 +34495,26 @@ var getAdapterLogo = (adapterName) => {
34366
34495
  const nameLower = adapterName.toLowerCase();
34367
34496
  for (const [key, logoPath] of Object.entries(ADAPTER_LOGO_MAP)) if (nameLower.includes(key)) return (0, import_jsx_runtime.jsx)("img", {
34368
34497
  src: logoPath,
34369
- className: "h-16 w-auto",
34498
+ className: "h-20 w-auto",
34370
34499
  alt: adapterName
34371
34500
  });
34372
- return (0, import_jsx_runtime.jsx)(Plug2, { className: "w-14 h-14 text-default-400" });
34373
- };
34501
+ return (0, import_jsx_runtime.jsx)(IoExtensionPuzzleOutline, { className: "w-16 h-auto text-danger-700/80" });
34502
+ };
34503
+ var SectionTitle = ({ icon, en, zh, color }) => (0, import_jsx_runtime.jsxs)("div", {
34504
+ className: "flex items-center gap-5 mb-6",
34505
+ children: [icon, (0, import_jsx_runtime.jsxs)("div", {
34506
+ className: "flex flex-col leading-tight",
34507
+ children: [(0, import_jsx_runtime.jsx)("span", {
34508
+ className: "text-xl font-semibold tracking-[0.2em] uppercase",
34509
+ style: { color },
34510
+ children: en
34511
+ }), (0, import_jsx_runtime.jsx)("span", {
34512
+ className: "text-base font-medium tracking-[0.08em] opacity-80",
34513
+ style: { color },
34514
+ children: zh
34515
+ })]
34516
+ })]
34517
+ });
34374
34518
  var handlerError = (props) => {
34375
34519
  const { data, qrCodeDataUrl } = props;
34376
34520
  const isDark = data.useDarkTheme === true;
@@ -34384,7 +34528,6 @@ var handlerError = (props) => {
34384
34528
  const accentColor = isDark ? "#fecaca" : "#7f1d1d";
34385
34529
  return (0, import_jsx_runtime.jsxs)(DefaultLayout, {
34386
34530
  ...props,
34387
- version: void 0,
34388
34531
  className: "relative overflow-hidden",
34389
34532
  style: {
34390
34533
  backgroundColor: bgColor,
@@ -34624,12 +34767,13 @@ var handlerError = (props) => {
34624
34767
  style: { color: mutedColor },
34625
34768
  children: "Date"
34626
34769
  }), (0, import_jsx_runtime.jsx)("div", {
34627
- className: "font-mono text-3xl font-bold tracking-widest",
34770
+ className: "font-mono text-3xl font-bold tracking-[0.2em]",
34628
34771
  style: { color: secondaryColor },
34629
- children: new Date(data.timestamp).toLocaleDateString("en-GB", {
34630
- day: "2-digit",
34631
- month: "2-digit"
34632
- }).replace("/", ".")
34772
+ children: new Date(data.timestamp).toLocaleDateString("zh-CN", {
34773
+ year: "numeric",
34774
+ month: "2-digit",
34775
+ day: "2-digit"
34776
+ }).replaceAll("/", "-")
34633
34777
  })]
34634
34778
  })
34635
34779
  ]
@@ -34691,38 +34835,34 @@ var handlerError = (props) => {
34691
34835
  }),
34692
34836
  data.triggerCommand && (0, import_jsx_runtime.jsxs)("div", {
34693
34837
  className: "mb-14",
34694
- children: [(0, import_jsx_runtime.jsxs)("div", {
34695
- className: "flex items-center gap-5 mb-6",
34696
- children: [(0, import_jsx_runtime.jsx)(Terminal, {
34838
+ children: [(0, import_jsx_runtime.jsx)(SectionTitle, {
34839
+ icon: (0, import_jsx_runtime.jsx)(Terminal, {
34697
34840
  className: "w-9 h-9",
34698
34841
  style: { color: mutedColor }
34699
- }), (0, import_jsx_runtime.jsx)("span", {
34700
- className: "text-xl font-semibold tracking-[0.2em] uppercase",
34701
- style: { color: mutedColor },
34702
- children: "Trigger Command"
34703
- })]
34842
+ }),
34843
+ en: "Trigger Command",
34844
+ zh: "触发命令",
34845
+ color: mutedColor
34704
34846
  }), (0, import_jsx_runtime.jsx)("div", {
34705
34847
  className: "p-10 rounded-[36px]",
34706
34848
  style: { backgroundColor: isDark ? "rgba(0,0,0,0.2)" : "rgba(255,255,255,0.5)" },
34707
34849
  children: (0, import_jsx_runtime.jsx)("pre", {
34708
34850
  className: "text-3xl leading-relaxed whitespace-pre-wrap break-all font-mono",
34709
34851
  style: { color: accentColor },
34710
- dangerouslySetInnerHTML: { __html: purify.sanitize(convertAnsiToHtml(data.triggerCommand)) }
34852
+ dangerouslySetInnerHTML: { __html: convertAnsiToHtml(data.triggerCommand) }
34711
34853
  })
34712
34854
  })]
34713
34855
  }),
34714
34856
  (0, import_jsx_runtime.jsxs)("div", {
34715
34857
  className: "mb-14",
34716
- children: [(0, import_jsx_runtime.jsxs)("div", {
34717
- className: "flex items-center gap-5 mb-6",
34718
- children: [(0, import_jsx_runtime.jsx)(CircleAlert, {
34858
+ children: [(0, import_jsx_runtime.jsx)(SectionTitle, {
34859
+ icon: (0, import_jsx_runtime.jsx)(CircleAlert, {
34719
34860
  className: "w-9 h-9",
34720
34861
  style: { color: primaryColor }
34721
- }), (0, import_jsx_runtime.jsx)("span", {
34722
- className: "text-xl font-semibold tracking-[0.2em] uppercase",
34723
- style: { color: mutedColor },
34724
- children: "Stack Trace"
34725
- })]
34862
+ }),
34863
+ en: "Stack Trace",
34864
+ zh: "错误堆栈",
34865
+ color: mutedColor
34726
34866
  }), (0, import_jsx_runtime.jsx)("div", {
34727
34867
  className: "p-10 rounded-[36px]",
34728
34868
  style: {
@@ -34732,22 +34872,20 @@ var handlerError = (props) => {
34732
34872
  children: (0, import_jsx_runtime.jsx)("pre", {
34733
34873
  className: "text-2xl leading-relaxed whitespace-pre-wrap break-all font-mono",
34734
34874
  style: { color: isDark ? "rgba(255,255,255,0.85)" : "rgba(127,29,29,0.9)" },
34735
- dangerouslySetInnerHTML: { __html: purify.sanitize(convertAnsiToHtml(String(businessError?.stack || data.error?.stack || ""))) }
34875
+ dangerouslySetInnerHTML: { __html: convertAnsiToHtml(String(businessError?.stack || data.error?.stack || "")) }
34736
34876
  })
34737
34877
  })]
34738
34878
  }),
34739
34879
  data.logs && data.logs.length > 0 && (0, import_jsx_runtime.jsxs)("div", {
34740
34880
  className: "mb-14",
34741
- children: [(0, import_jsx_runtime.jsxs)("div", {
34742
- className: "flex items-center gap-5 mb-6",
34743
- children: [(0, import_jsx_runtime.jsx)(FileText, {
34881
+ children: [(0, import_jsx_runtime.jsx)(SectionTitle, {
34882
+ icon: (0, import_jsx_runtime.jsx)(FileText, {
34744
34883
  className: "w-9 h-9",
34745
34884
  style: { color: mutedColor }
34746
- }), (0, import_jsx_runtime.jsx)("span", {
34747
- className: "text-xl font-semibold tracking-[0.2em] uppercase",
34748
- style: { color: mutedColor },
34749
- children: "Execution Logs"
34750
- })]
34885
+ }),
34886
+ en: "Execution Logs",
34887
+ zh: "执行日志",
34888
+ color: mutedColor
34751
34889
  }), (0, import_jsx_runtime.jsx)("div", {
34752
34890
  className: "space-y-6",
34753
34891
  children: data.logs.map((log, index) => {
@@ -34792,7 +34930,7 @@ var handlerError = (props) => {
34792
34930
  (0, import_jsx_runtime.jsx)("div", {
34793
34931
  className: "relative z-1 text-2xl font-mono whitespace-pre-wrap break-all leading-relaxed",
34794
34932
  style: { color: isDark ? "rgba(255,255,255,0.88)" : "rgba(0,0,0,0.82)" },
34795
- dangerouslySetInnerHTML: { __html: purify.sanitize(convertAnsiToHtml(log.message)) }
34933
+ dangerouslySetInnerHTML: { __html: convertAnsiToHtml(log.message) }
34796
34934
  })
34797
34935
  ]
34798
34936
  }, index);
@@ -34815,7 +34953,7 @@ var handlerError = (props) => {
34815
34953
  }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34816
34954
  className: "text-xl",
34817
34955
  style: { color: mutedColor },
34818
- children: "Framework"
34956
+ children: "Framework / 框架版本"
34819
34957
  }), (0, import_jsx_runtime.jsx)("p", {
34820
34958
  className: "text-3xl font-bold",
34821
34959
  style: { color: accentColor },
@@ -34846,48 +34984,141 @@ var handlerError = (props) => {
34846
34984
  }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34847
34985
  className: "text-xl",
34848
34986
  style: { color: mutedColor },
34849
- children: "Plugin"
34987
+ children: "Plugin / 插件版本"
34850
34988
  }), (0, import_jsx_runtime.jsx)("p", {
34851
34989
  className: "text-3xl font-bold",
34852
34990
  style: { color: accentColor },
34853
34991
  children: data.pluginVersion
34854
34992
  })] })]
34855
34993
  }),
34856
- data.amagiVersion && (0, import_jsx_runtime.jsxs)("div", {
34857
- className: "flex items-center gap-6",
34858
- children: [(0, import_jsx_runtime.jsx)("img", {
34859
- src: "/image/other/handlerError/cxk.png",
34860
- alt: "Amagi",
34861
- className: "w-16 h-16"
34862
- }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34863
- className: "text-xl",
34864
- style: { color: mutedColor },
34865
- children: "API Library"
34866
- }), (0, import_jsx_runtime.jsx)("p", {
34867
- className: "text-3xl font-bold",
34868
- style: { color: accentColor },
34869
- children: data.amagiVersion
34870
- })] })]
34871
- }),
34872
34994
  data.adapterInfo && (0, import_jsx_runtime.jsxs)("div", {
34873
- className: "flex items-center gap-6",
34874
- children: [getAdapterLogo(data.adapterInfo.name), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34875
- className: "text-xl",
34876
- style: { color: mutedColor },
34877
- children: "Adapter"
34878
- }), (0, import_jsx_runtime.jsxs)("div", {
34879
- className: "flex items-center gap-4",
34880
- children: [(0, import_jsx_runtime.jsx)("p", {
34881
- className: "text-3xl font-bold",
34882
- style: { color: accentColor },
34883
- children: data.adapterInfo.name
34884
- }), (0, import_jsx_runtime.jsx)(chip_default, {
34885
- size: "lg",
34886
- variant: "flat",
34887
- className: "h-8 text-lg",
34888
- children: data.adapterInfo.version.startsWith("v") ? data.adapterInfo.version : `v${data.adapterInfo.version}`
34995
+ className: "col-span-2 p-8 rounded-3xl",
34996
+ style: {
34997
+ backgroundColor: isDark ? "rgba(0,0,0,0.18)" : "rgba(255,255,255,0.52)",
34998
+ border: `1px solid ${isDark ? "rgba(248,113,113,0.22)" : "rgba(220,38,38,0.14)"}`
34999
+ },
35000
+ children: [(0, import_jsx_runtime.jsxs)("div", {
35001
+ className: "flex items-start justify-between gap-8 mb-6",
35002
+ children: [(0, import_jsx_runtime.jsxs)("div", {
35003
+ className: "flex items-center gap-6 min-w-0",
35004
+ children: [getAdapterLogo(data.adapterInfo.name), (0, import_jsx_runtime.jsxs)("div", {
35005
+ className: "min-w-0",
35006
+ children: [(0, import_jsx_runtime.jsx)("p", {
35007
+ className: "text-xl mb-1",
35008
+ style: { color: mutedColor },
35009
+ children: "Adapter / 适配器"
35010
+ }), (0, import_jsx_runtime.jsxs)("div", {
35011
+ className: "flex items-center gap-4 flex-wrap",
35012
+ children: [(0, import_jsx_runtime.jsx)("p", {
35013
+ className: "text-3xl font-bold truncate",
35014
+ style: { color: accentColor },
35015
+ children: data.adapterInfo.name
35016
+ }), (0, import_jsx_runtime.jsx)(chip_default, {
35017
+ size: "lg",
35018
+ variant: "flat",
35019
+ color: "danger",
35020
+ className: "h-8 text-lg",
35021
+ children: data.adapterInfo.version.startsWith("v") ? data.adapterInfo.version : `v${data.adapterInfo.version}`
35022
+ })]
35023
+ })]
35024
+ })]
35025
+ }), (0, import_jsx_runtime.jsx)("p", {
35026
+ className: "text-xl font-medium mb-4",
35027
+ style: { color: mutedColor },
35028
+ children: "事件信息来源"
34889
35029
  })]
34890
- })] })]
35030
+ }), (0, import_jsx_runtime.jsxs)("div", {
35031
+ className: "grid grid-cols-4 gap-4 text-lg",
35032
+ style: { color: secondaryColor },
35033
+ children: [
35034
+ (0, import_jsx_runtime.jsxs)("div", {
35035
+ className: "rounded-2xl px-4 py-3",
35036
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35037
+ children: [(0, import_jsx_runtime.jsx)("p", {
35038
+ className: "text-sm mb-1 opacity-75",
35039
+ children: "Platform / 对接平台"
35040
+ }), (0, import_jsx_runtime.jsx)("p", {
35041
+ className: "font-semibold break-all text-2xl",
35042
+ children: String(data.adapterInfo.platform)
35043
+ })]
35044
+ }),
35045
+ (0, import_jsx_runtime.jsxs)("div", {
35046
+ className: "rounded-2xl px-4 py-3 relative overflow-hidden",
35047
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35048
+ children: [
35049
+ (0, import_jsx_runtime.jsx)("p", {
35050
+ className: "text-sm mb-1 opacity-75",
35051
+ children: "Standard / 协议标准"
35052
+ }),
35053
+ (0, import_jsx_runtime.jsx)("p", {
35054
+ className: "font-semibold break-all text-2xl",
35055
+ children: import_lodash.default.upperFirst(import_lodash.default.camelCase(String(data.adapterInfo.standard)))
35056
+ }),
35057
+ String(data.adapterInfo.standard).toLowerCase() === "milky" && (0, import_jsx_runtime.jsx)("div", {
35058
+ className: "absolute inset-0 pointer-events-none",
35059
+ children: (0, import_jsx_runtime.jsx)("img", {
35060
+ src: "/image/other/handlerError/Milky.png",
35061
+ alt: "Milky",
35062
+ className: "absolute -right-2 -bottom-3 w-24 h-24 object-contain",
35063
+ style: {
35064
+ WebkitMaskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35065
+ maskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35066
+ opacity: 1
35067
+ }
35068
+ })
35069
+ }),
35070
+ String(data.adapterInfo.standard).toLowerCase() === "satori" && (0, import_jsx_runtime.jsx)("div", {
35071
+ className: "absolute inset-0 pointer-events-none",
35072
+ children: (0, import_jsx_runtime.jsx)("img", {
35073
+ src: "/image/other/handlerError/satori.png",
35074
+ alt: "Satori",
35075
+ className: "absolute -right-2 -bottom-3 w-24 h-24 object-contain",
35076
+ style: {
35077
+ WebkitMaskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35078
+ maskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35079
+ opacity: 1
35080
+ }
35081
+ })
35082
+ }),
35083
+ String(data.adapterInfo.standard).includes("onebot") && (0, import_jsx_runtime.jsx)("div", {
35084
+ className: "absolute inset-0 pointer-events-none",
35085
+ children: (0, import_jsx_runtime.jsx)("img", {
35086
+ src: "/image/other/handlerError/onebot.png",
35087
+ alt: "OneBot",
35088
+ className: "absolute -right-2 -bottom-3 w-24 h-24 object-contain",
35089
+ style: {
35090
+ WebkitMaskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35091
+ maskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35092
+ opacity: 1
35093
+ }
35094
+ })
35095
+ })
35096
+ ]
35097
+ }),
35098
+ (0, import_jsx_runtime.jsxs)("div", {
35099
+ className: "rounded-2xl px-4 py-3",
35100
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35101
+ children: [(0, import_jsx_runtime.jsx)("p", {
35102
+ className: "text-sm mb-1 opacity-75",
35103
+ children: "Protocol / 协议实现"
35104
+ }), (0, import_jsx_runtime.jsx)("p", {
35105
+ className: "font-semibold break-all text-2xl",
35106
+ children: String(data.adapterInfo.protocol)
35107
+ })]
35108
+ }),
35109
+ (0, import_jsx_runtime.jsxs)("div", {
35110
+ className: "rounded-2xl px-4 py-3",
35111
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35112
+ children: [(0, import_jsx_runtime.jsx)("p", {
35113
+ className: "text-sm mb-1 opacity-75",
35114
+ children: "Communication / 通信方式"
35115
+ }), (0, import_jsx_runtime.jsx)("p", {
35116
+ className: "font-semibold break-all text-2xl",
35117
+ children: String(data.adapterInfo.communication)
35118
+ })]
35119
+ })
35120
+ ]
35121
+ })]
34891
35122
  })
34892
35123
  ]
34893
35124
  }),
@@ -34896,46 +35127,92 @@ var handlerError = (props) => {
34896
35127
  style: { color: mutedColor },
34897
35128
  children: [data.buildTime && (0, import_jsx_runtime.jsxs)("div", {
34898
35129
  className: "flex items-center gap-3",
34899
- children: [(0, import_jsx_runtime.jsx)(MdAccessTime, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: ["Built ", data.buildTime] })]
35130
+ children: [(0, import_jsx_runtime.jsx)(MdAccessTime, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: [
35131
+ "Built Time: ",
35132
+ data.buildTime,
35133
+ " 距离 ",
35134
+ formatDistanceToNow(parse(data.buildTime, "yyyy年MM月dd日 HH:mm", /* @__PURE__ */ new Date()), { locale: zhCN })
35135
+ ] })]
34900
35136
  }), data.commitHash && (0, import_jsx_runtime.jsxs)("div", {
34901
35137
  className: "flex items-center gap-3",
34902
- children: [(0, import_jsx_runtime.jsx)(FaCodeBranch, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: ["Commit ", data.commitHash] })]
35138
+ children: [(0, import_jsx_runtime.jsx)(FaCodeBranch, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: ["Commit Hash: ", data.commitHash] })]
34903
35139
  })]
34904
35140
  }),
34905
35141
  (0, import_jsx_runtime.jsxs)("div", {
34906
35142
  className: "p-10 rounded-[36px]",
34907
35143
  style: { backgroundColor: isDark ? "rgba(0,0,0,0.2)" : "rgba(255,255,255,0.5)" },
34908
35144
  children: [
34909
- (0, import_jsx_runtime.jsx)("p", {
34910
- className: "text-3xl font-semibold mb-5",
34911
- style: { color: accentColor },
34912
- children: "需要帮助?"
34913
- }),
34914
- (0, import_jsx_runtime.jsx)("p", {
34915
- className: "text-2xl mb-8",
34916
- style: { color: secondaryColor },
34917
- children: "请提供完整的错误截图和问题复现步骤"
35145
+ (0, import_jsx_runtime.jsxs)("div", {
35146
+ className: "flex items-end justify-between mb-6",
35147
+ children: [(0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35148
+ className: "text-3xl font-semibold mb-2",
35149
+ style: { color: accentColor },
35150
+ children: "Need Help? / 需要帮助?"
35151
+ }), (0, import_jsx_runtime.jsx)("p", {
35152
+ className: "text-2xl",
35153
+ style: { color: secondaryColor },
35154
+ children: "提交问题时请附上完整报错截图、复现步骤和环境版本信息。"
35155
+ })] }), (0, import_jsx_runtime.jsx)("span", {
35156
+ className: "text-xs font-black tracking-[0.2em] uppercase px-3 py-1 rounded-full",
35157
+ style: {
35158
+ color: primaryColor,
35159
+ backgroundColor: isDark ? "rgba(248,113,113,0.12)" : "rgba(220,38,38,0.08)"
35160
+ },
35161
+ children: "Support"
35162
+ })]
34918
35163
  }),
34919
35164
  (0, import_jsx_runtime.jsxs)("div", {
34920
- className: "flex items-center gap-10 text-2xl",
35165
+ className: "grid grid-cols-2 gap-x-6 gap-y-6 text-2xl leading-relaxed py-6",
35166
+ style: {
35167
+ borderTop: `1px solid ${isDark ? "rgba(248,113,113,0.2)" : "rgba(220,38,38,0.12)"}`,
35168
+ borderBottom: `1px solid ${isDark ? "rgba(248,113,113,0.2)" : "rgba(220,38,38,0.12)"}`
35169
+ },
34921
35170
  children: [
34922
- (0, import_jsx_runtime.jsx)("span", {
35171
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35172
+ className: "font-semibold mb-1",
35173
+ style: { color: accentColor },
35174
+ children: "GitHub Issue"
35175
+ }), (0, import_jsx_runtime.jsx)("p", {
35176
+ className: "text-xl break-all",
34923
35177
  style: { color: secondaryColor },
34924
- children: "GitHub Issues"
34925
- }),
34926
- (0, import_jsx_runtime.jsx)("span", {
34927
- style: { color: mutedColor },
34928
- children: "·"
34929
- }),
34930
- (0, import_jsx_runtime.jsxs)("span", {
35178
+ children: "https://github.com/ikenxuan/karin-plugin-kkk/issues/new/choose"
35179
+ })] }),
35180
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35181
+ className: "font-semibold mb-1",
35182
+ style: { color: accentColor },
35183
+ children: "GitHub Repository"
35184
+ }), (0, import_jsx_runtime.jsx)("p", {
35185
+ className: "text-xl break-all",
34931
35186
  style: { color: secondaryColor },
34932
- children: ["QQ 群: ", (0, import_jsx_runtime.jsx)("span", {
34933
- className: "font-bold",
34934
- style: { color: primaryColor },
34935
- children: "795874649"
34936
- })]
34937
- })
35187
+ children: "https://github.com/ikenxuan/karin-plugin-kkk"
35188
+ })] }),
35189
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35190
+ className: "font-semibold mb-1",
35191
+ style: { color: accentColor },
35192
+ children: "QQ 群"
35193
+ }), (0, import_jsx_runtime.jsx)("p", {
35194
+ className: "text-xl",
35195
+ style: { color: secondaryColor },
35196
+ children: "795874649"
35197
+ })] }),
35198
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35199
+ className: "font-semibold mb-1",
35200
+ style: { color: accentColor },
35201
+ children: "附带信息"
35202
+ }), (0, import_jsx_runtime.jsx)("p", {
35203
+ className: "text-xl",
35204
+ style: { color: secondaryColor },
35205
+ children: "此图片 + 触发命令"
35206
+ })] })
34938
35207
  ]
35208
+ }),
35209
+ (0, import_jsx_runtime.jsxs)("div", {
35210
+ className: "flex items-center gap-4 mt-6 text-xl",
35211
+ style: { color: mutedColor },
35212
+ children: [(0, import_jsx_runtime.jsx)("span", {
35213
+ className: "font-mono",
35214
+ children: "Tips:"
35215
+ }), (0, import_jsx_runtime.jsx)("span", { children: "信息越完整,定位越快。" })]
34939
35216
  })
34940
35217
  ]
34941
35218
  })
@@ -35444,7 +35721,7 @@ var CommentItemComponent = ({ comment, isLast = false }) => (0, import_jsx_runti
35444
35721
  }),
35445
35722
  (0, import_jsx_runtime.jsx)("div", {
35446
35723
  className: "text-[60px] text-foreground leading-relaxed mb-2 whitespace-pre-wrap select-text [&_img]:mb-3 [&_img]:inline [&_img]:h-[1.4em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em] [&_span]:inline",
35447
- dangerouslySetInnerHTML: { __html: purify.sanitize(comment.content) },
35724
+ dangerouslySetInnerHTML: { __html: comment.content },
35448
35725
  style: {
35449
35726
  wordBreak: "break-word",
35450
35727
  overflowWrap: "break-word"
@@ -35528,7 +35805,7 @@ var CommentItemComponent = ({ comment, isLast = false }) => (0, import_jsx_runti
35528
35805
  }),
35529
35806
  (0, import_jsx_runtime.jsx)("div", {
35530
35807
  className: "text-[45px] text-foreground leading-relaxed mb-2 select-text [&_img]:mb-2 [&_img]:inline [&_img]:h-[1.2em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.5em] [&_span]:inline",
35531
- dangerouslySetInnerHTML: { __html: purify.sanitize(subComment.content) },
35808
+ dangerouslySetInnerHTML: { __html: subComment.content },
35532
35809
  style: {
35533
35810
  wordBreak: "break-word",
35534
35811
  overflowWrap: "break-word"
@@ -35670,7 +35947,7 @@ var XiaohongshuNoteInfo = import_react.memo((props) => {
35670
35947
  }),
35671
35948
  (0, import_jsx_runtime.jsx)("div", {
35672
35949
  className: "text-5xl text-foreground-700 leading-relaxed mb-8 whitespace-pre-wrap select-text [&_img]:mb-3 [&_img]:inline [&_img]:h-[1.4em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em]",
35673
- dangerouslySetInnerHTML: { __html: purify.sanitize(props.data.desc) }
35950
+ dangerouslySetInnerHTML: { __html: props.data.desc }
35674
35951
  }),
35675
35952
  (0, import_jsx_runtime.jsxs)("div", {
35676
35953
  className: "flex gap-8 items-center text-5xl text-foreground-500",