karin-plugin-kkk 2.27.0 → 2.27.2

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 (58) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +1 -1
  3. package/lib/apps/__ready.js +1 -1
  4. package/lib/apps/admin.js +1 -1
  5. package/lib/apps/help.js +1 -1
  6. package/lib/apps/push.js +1 -1
  7. package/lib/apps/qrlogin.js +1 -1
  8. package/lib/apps/statistics.js +1 -1
  9. package/lib/apps/tools.js +1 -1
  10. package/lib/apps/update.js +1 -1
  11. package/lib/build-metadata.json +5 -5
  12. package/lib/core_chunk/{ArticleWork-CyeP_9Ju.js → ArticleWork-D-BYrsdY.js} +1 -1
  13. package/lib/core_chunk/{Comment-D0M3DpYi.js → Comment-BCBpHyDJ.js} +1 -1
  14. package/lib/core_chunk/{Comment-RlkT7syy.js → Comment-C_YwQUnb.js} +1 -1
  15. package/lib/core_chunk/{Comment-CloqhvV0.js → Comment-Cp0STr1s.js} +1 -1
  16. package/lib/core_chunk/{Comment-BhVCtijU.js → Comment-uFQ-lSTU.js} +1 -1
  17. package/lib/core_chunk/{DYNAMIC_TYPE_ARTICLE-D-wVQedO.js → DYNAMIC_TYPE_ARTICLE-BANrixjv.js} +1 -1
  18. package/lib/core_chunk/{DYNAMIC_TYPE_AV-DMpVPecL.js → DYNAMIC_TYPE_AV-B1j0DOxj.js} +1 -1
  19. package/lib/core_chunk/{DYNAMIC_TYPE_DRAW-DuJorOti.js → DYNAMIC_TYPE_DRAW-BP5y2-Z0.js} +1 -1
  20. package/lib/core_chunk/{DYNAMIC_TYPE_FORWARD-Dk97hZWC.js → DYNAMIC_TYPE_FORWARD-Dqtxcfs5.js} +1 -1
  21. package/lib/core_chunk/{DYNAMIC_TYPE_LIVE_RCMD-Yhg88JiX.js → DYNAMIC_TYPE_LIVE_RCMD-BKK-MQIo.js} +1 -1
  22. package/lib/core_chunk/{DYNAMIC_TYPE_WORD-WAZwE5XI.js → DYNAMIC_TYPE_WORD-CExu1AeI.js} +1 -1
  23. package/lib/core_chunk/{Dynamic-lhhQ9e8x.js → Dynamic-BQRdF0Iq.js} +1 -1
  24. package/lib/core_chunk/{FavoriteList-8BdvBa17.js → FavoriteList-CXaUjA4Z.js} +1 -1
  25. package/lib/core_chunk/{GlobalStatistics-tAZKJV5k.js → GlobalStatistics-PgMjuEI0.js} +1 -1
  26. package/lib/core_chunk/{GroupStatistics-Bkxw7b1E.js → GroupStatistics-BQc8xoUG.js} +1 -1
  27. package/lib/core_chunk/{Help-CBzLw3Wu.js → Help-DxWnO364.js} +1 -1
  28. package/lib/core_chunk/{ImageWork-D1lvpjlw.js → ImageWork-CAXTExbl.js} +1 -1
  29. package/lib/core_chunk/{Live-DoW0VmN8.js → Live-BPt0WjxN.js} +1 -1
  30. package/lib/core_chunk/{MusicInfo-C0mmEY6e.js → MusicInfo-CbpQDtXR.js} +1 -1
  31. package/lib/core_chunk/{RecommendList-C3bwtdfE.js → RecommendList-CSGMmQHV.js} +1 -1
  32. package/lib/core_chunk/{UserList-C3OwAY5c.js → UserList-Dlfezkg4.js} +1 -1
  33. package/lib/core_chunk/{UserList-B4UUl3C5.js → UserList-ZtuCbZcD.js} +1 -1
  34. package/lib/core_chunk/{UserVideoList-Cy9aq78y.js → UserVideoList-DsfmDdbu.js} +1 -1
  35. package/lib/core_chunk/{VersionWarning-DxkXF5A-.js → VersionWarning-BBilm7ZQ.js} +1 -1
  36. package/lib/core_chunk/{VideoWork-Ct34SAD_.js → VideoWork-Mp9SYOhU.js} +1 -1
  37. package/lib/core_chunk/amagiClient-DVxH7OHV.js +3 -0
  38. package/lib/core_chunk/{bangumi-DLz3L-5i.js → bangumi-Ch7mnoug.js} +1 -1
  39. package/lib/core_chunk/{changelog-BctgtEZ4.js → changelog-e1jZ80d5.js} +1 -1
  40. package/lib/core_chunk/db-BDAEWTrG.js +3 -0
  41. package/lib/core_chunk/{handlerError-DhrU-U5-.js → handlerError-DsnWvz4S.js} +1 -1
  42. package/lib/core_chunk/{main-CMOXH5h4.js → main-6QQJ5H3C.js} +528 -339
  43. package/lib/core_chunk/{noteInfo-CTu_m_rn.js → noteInfo-D_BhS1le.js} +1 -1
  44. package/lib/core_chunk/{qrcodeImg-CpgoM3Rq.js → qrcodeImg-CZjyVFex.js} +1 -1
  45. package/lib/core_chunk/{qrcodeImg-CtKUk5z2.js → qrcodeImg-CzvTO1mE.js} +1 -1
  46. package/lib/core_chunk/{qrlogin-DUVA_skM.js → qrlogin-FkNz8tfK.js} +1 -1
  47. package/lib/core_chunk/{setup-DdGlw896.js → setup-B-PwgJem.js} +1 -1
  48. package/lib/core_chunk/template.js +1 -1
  49. package/lib/core_chunk/{videoInfo-CHAmZhDs.js → videoInfo-2ZftvrcH.js} +1 -1
  50. package/lib/core_chunk/{videoInfo-BWIHVGNG.js → videoInfo-Bnv5saba.js} +1 -1
  51. package/lib/index.js +1 -1
  52. package/lib/karin-plugin-kkk.css +134 -28
  53. package/lib/root.js +1 -1
  54. package/lib/web.config.js +1 -1
  55. package/package.json +2 -2
  56. package/lib/core_chunk/amagiClient-Iwx_ijMt.js +0 -3
  57. package/lib/core_chunk/db-C0XE_Eix.js +0 -3
  58. package/resources/image/other/changelog/banner.webp +0 -0
@@ -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-DdGlw896.js");
24
+ import("./setup-B-PwgJem.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-Iwx_ijMt.js").then(({ reloadAmagiConfig }) => {
5216
+ import("./amagiClient-DVxH7OHV.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-C0XE_Eix.js");
5235
+ const { getDouyinDB, getBilibiliDB } = await import("./db-BDAEWTrG.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-C0XE_Eix.js");
5277
+ const { getDouyinDB, getBilibiliDB } = await import("./db-BDAEWTrG.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-C0XE_Eix.js");
5382
+ const { getDouyinDB, getBilibiliDB } = await import("./db-BDAEWTrG.js");
5383
5383
  const douyinDB = await getDouyinDB();
5384
5384
  const bilibiliDB = await getBilibiliDB();
5385
5385
  const pushCfg = this.getYaml("config", "pushlist");
@@ -5512,6 +5512,50 @@ var Base = class extends AmagiBase {
5512
5512
  this.headers = BASE_HEADERS;
5513
5513
  }
5514
5514
  };
5515
+ var statBotId$1 = (pushList) => {
5516
+ const platformBotCount = {
5517
+ douyin: /* @__PURE__ */ new Map(),
5518
+ bilibili: /* @__PURE__ */ new Map()
5519
+ };
5520
+ pushList.douyin.forEach((item) => {
5521
+ item.group_id.forEach((gid) => {
5522
+ const botId = gid.split(":")[1];
5523
+ platformBotCount.douyin.set(botId, (platformBotCount.douyin.get(botId) ?? 0) + 1);
5524
+ });
5525
+ });
5526
+ pushList.bilibili.forEach((item) => {
5527
+ item.group_id.forEach((gid) => {
5528
+ const botId = gid.split(":")[1];
5529
+ platformBotCount.bilibili.set(botId, (platformBotCount.bilibili.get(botId) ?? 0) + 1);
5530
+ });
5531
+ });
5532
+ let douyinMaxCount = 0;
5533
+ let douyinMostFrequentBot = "";
5534
+ platformBotCount.douyin.forEach((count, botId) => {
5535
+ if (count > douyinMaxCount) {
5536
+ douyinMaxCount = count;
5537
+ douyinMostFrequentBot = botId;
5538
+ }
5539
+ });
5540
+ let biliMaxCount = 0;
5541
+ let biliMostFrequentBot = "";
5542
+ platformBotCount.bilibili.forEach((count, botId) => {
5543
+ if (count > biliMaxCount) {
5544
+ biliMaxCount = count;
5545
+ biliMostFrequentBot = botId;
5546
+ }
5547
+ });
5548
+ return {
5549
+ douyin: {
5550
+ botId: douyinMostFrequentBot,
5551
+ count: douyinMaxCount
5552
+ },
5553
+ bilibili: {
5554
+ botId: biliMostFrequentBot,
5555
+ count: biliMaxCount
5556
+ }
5557
+ };
5558
+ };
5515
5559
  var Count = (count) => {
5516
5560
  if (count >= 1e8) return (count / 1e8).toFixed(1) + "亿";
5517
5561
  else if (count >= 1e4) return (count / 1e4).toFixed(1) + "万";
@@ -7979,47 +8023,47 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
7979
8023
  switch (baseComponent.id) {
7980
8024
  case "comment": return createComponentConfig(baseComponent, {
7981
8025
  validateData: (data) => data && typeof data.share_url === "string",
7982
- lazyComponent: () => import("./Comment-D0M3DpYi.js").then((module) => ({ default: module.DouyinComment }))
8026
+ lazyComponent: () => import("./Comment-BCBpHyDJ.js").then((module) => ({ default: module.DouyinComment }))
7983
8027
  });
7984
8028
  case "dynamic": return createComponentConfig(baseComponent, {
7985
8029
  validateData: (data) => data && typeof data.share_url === "string",
7986
- lazyComponent: () => import("./Dynamic-lhhQ9e8x.js").then((module) => ({ default: module.DouyinDynamic }))
8030
+ lazyComponent: () => import("./Dynamic-BQRdF0Iq.js").then((module) => ({ default: module.DouyinDynamic }))
7987
8031
  });
7988
8032
  case "video-work": return createComponentConfig(baseComponent, {
7989
8033
  validateData: (data) => data && typeof data.share_url === "string",
7990
- lazyComponent: () => import("./VideoWork-Ct34SAD_.js").then((module) => ({ default: module.DouyinVideoWork }))
8034
+ lazyComponent: () => import("./VideoWork-Mp9SYOhU.js").then((module) => ({ default: module.DouyinVideoWork }))
7991
8035
  });
7992
8036
  case "image-work": return createComponentConfig(baseComponent, {
7993
8037
  validateData: (data) => data && typeof data.share_url === "string",
7994
- lazyComponent: () => import("./ImageWork-D1lvpjlw.js").then((module) => ({ default: module.DouyinImageWork }))
8038
+ lazyComponent: () => import("./ImageWork-CAXTExbl.js").then((module) => ({ default: module.DouyinImageWork }))
7995
8039
  });
7996
8040
  case "article-work": return createComponentConfig(baseComponent, {
7997
8041
  validateData: (data) => data && typeof data.share_url === "string",
7998
- lazyComponent: () => import("./ArticleWork-CyeP_9Ju.js").then((module) => ({ default: module.DouyinArticleWork }))
8042
+ lazyComponent: () => import("./ArticleWork-D-BYrsdY.js").then((module) => ({ default: module.DouyinArticleWork }))
7999
8043
  });
8000
8044
  case "favorite-list": return createComponentConfig(baseComponent, {
8001
8045
  validateData: (data) => data && typeof data.share_url === "string",
8002
- lazyComponent: () => import("./FavoriteList-8BdvBa17.js").then((module) => ({ default: module.DouyinFavoriteList }))
8046
+ lazyComponent: () => import("./FavoriteList-CXaUjA4Z.js").then((module) => ({ default: module.DouyinFavoriteList }))
8003
8047
  });
8004
8048
  case "recommend-list": return createComponentConfig(baseComponent, {
8005
8049
  validateData: (data) => data && typeof data.share_url === "string",
8006
- lazyComponent: () => import("./RecommendList-C3bwtdfE.js").then((module) => ({ default: module.DouyinRecommendList }))
8050
+ lazyComponent: () => import("./RecommendList-CSGMmQHV.js").then((module) => ({ default: module.DouyinRecommendList }))
8007
8051
  });
8008
8052
  case "live": return createComponentConfig(baseComponent, {
8009
8053
  validateData: (data) => data && typeof data.share_url === "string",
8010
- lazyComponent: () => import("./Live-DoW0VmN8.js").then((module) => ({ default: module.DouyinLive }))
8054
+ lazyComponent: () => import("./Live-BPt0WjxN.js").then((module) => ({ default: module.DouyinLive }))
8011
8055
  });
8012
8056
  case "musicinfo": return createComponentConfig(baseComponent, {
8013
8057
  validateData: (data) => data && typeof data.share_url === "string",
8014
- lazyComponent: () => import("./MusicInfo-C0mmEY6e.js").then((module) => ({ default: module.DouyinMusicInfo }))
8058
+ lazyComponent: () => import("./MusicInfo-CbpQDtXR.js").then((module) => ({ default: module.DouyinMusicInfo }))
8015
8059
  });
8016
- case "user_profile": return createComponentConfig(baseComponent, { lazyComponent: () => import("./UserVideoList-Cy9aq78y.js").then((module) => ({ default: module.DouyinUserVideoList })) });
8060
+ case "user_profile": return createComponentConfig(baseComponent, { lazyComponent: () => import("./UserVideoList-DsfmDdbu.js").then((module) => ({ default: module.DouyinUserVideoList })) });
8017
8061
  case "userlist": return createComponentConfig(baseComponent, {
8018
8062
  validateData: (data) => data && Array.isArray(data.renderOpt),
8019
- lazyComponent: () => import("./UserList-B4UUl3C5.js").then((module) => ({ default: module.default }))
8063
+ lazyComponent: () => import("./UserList-ZtuCbZcD.js").then((module) => ({ default: module.default }))
8020
8064
  });
8021
- case "videoInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./videoInfo-BWIHVGNG.js").then((module) => ({ default: module.DouyinVideoInfo })) });
8022
- case "qrcodeImg": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrcodeImg-CtKUk5z2.js").then((module) => ({ default: module.DouyinQrcodeImg })) });
8065
+ case "videoInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./videoInfo-Bnv5saba.js").then((module) => ({ default: module.DouyinVideoInfo })) });
8066
+ case "qrcodeImg": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrcodeImg-CzvTO1mE.js").then((module) => ({ default: module.DouyinQrcodeImg })) });
8023
8067
  default: return createComponentConfig(baseComponent);
8024
8068
  }
8025
8069
  });
@@ -8029,42 +8073,42 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8029
8073
  switch (baseComponent.id) {
8030
8074
  case "comment": return createComponentConfig(baseComponent, {
8031
8075
  validateData: (data) => data && typeof data.share_url === "string",
8032
- lazyComponent: () => import("./Comment-CloqhvV0.js").then((module) => ({ default: module.BilibiliComment }))
8076
+ lazyComponent: () => import("./Comment-Cp0STr1s.js").then((module) => ({ default: module.BilibiliComment }))
8033
8077
  });
8034
8078
  case "userlist": return createComponentConfig(baseComponent, {
8035
8079
  validateData: (data) => data && Array.isArray(data.renderOpt),
8036
- lazyComponent: () => import("./UserList-C3OwAY5c.js").then((module) => ({ default: module.default }))
8080
+ lazyComponent: () => import("./UserList-Dlfezkg4.js").then((module) => ({ default: module.default }))
8037
8081
  });
8038
- case "bangumi": return createComponentConfig(baseComponent, { lazyComponent: () => import("./bangumi-DLz3L-5i.js").then((module) => ({ default: module.default })) });
8082
+ case "bangumi": return createComponentConfig(baseComponent, { lazyComponent: () => import("./bangumi-Ch7mnoug.js").then((module) => ({ default: module.default })) });
8039
8083
  case "dynamic/DYNAMIC_TYPE_DRAW": return createComponentConfig(baseComponent, {
8040
8084
  validateData: (data) => data && typeof data.share_url === "string",
8041
- lazyComponent: () => import("./DYNAMIC_TYPE_DRAW-DuJorOti.js").then((module) => ({ default: module.BilibiliDrawDynamic }))
8085
+ lazyComponent: () => import("./DYNAMIC_TYPE_DRAW-BP5y2-Z0.js").then((module) => ({ default: module.BilibiliDrawDynamic }))
8042
8086
  });
8043
8087
  case "dynamic/DYNAMIC_TYPE_WORD": return createComponentConfig(baseComponent, {
8044
8088
  validateData: (data) => data && typeof data.share_url === "string",
8045
- lazyComponent: () => import("./DYNAMIC_TYPE_WORD-WAZwE5XI.js").then((module) => ({ default: module.BilibiliWordDynamic }))
8089
+ lazyComponent: () => import("./DYNAMIC_TYPE_WORD-CExu1AeI.js").then((module) => ({ default: module.BilibiliWordDynamic }))
8046
8090
  });
8047
8091
  case "dynamic/DYNAMIC_TYPE_AV": return createComponentConfig(baseComponent, {
8048
8092
  validateData: (data) => data && typeof data.share_url === "string",
8049
- lazyComponent: () => import("./DYNAMIC_TYPE_AV-DMpVPecL.js").then((module) => ({ default: module.BilibiliVideoDynamic }))
8093
+ lazyComponent: () => import("./DYNAMIC_TYPE_AV-B1j0DOxj.js").then((module) => ({ default: module.BilibiliVideoDynamic }))
8050
8094
  });
8051
8095
  case "dynamic/DYNAMIC_TYPE_FORWARD": return createComponentConfig(baseComponent, {
8052
8096
  validateData: (data) => data && typeof data.share_url === "string",
8053
- lazyComponent: () => import("./DYNAMIC_TYPE_FORWARD-Dk97hZWC.js").then((module) => ({ default: module.BilibiliForwardDynamic }))
8097
+ lazyComponent: () => import("./DYNAMIC_TYPE_FORWARD-Dqtxcfs5.js").then((module) => ({ default: module.BilibiliForwardDynamic }))
8054
8098
  });
8055
8099
  case "dynamic/DYNAMIC_TYPE_LIVE_RCMD": return createComponentConfig(baseComponent, {
8056
8100
  validateData: (data) => data && typeof data.share_url === "string",
8057
- lazyComponent: () => import("./DYNAMIC_TYPE_LIVE_RCMD-Yhg88JiX.js").then((module) => ({ default: module.BilibiliLiveDynamic }))
8101
+ lazyComponent: () => import("./DYNAMIC_TYPE_LIVE_RCMD-BKK-MQIo.js").then((module) => ({ default: module.BilibiliLiveDynamic }))
8058
8102
  });
8059
8103
  case "dynamic/DYNAMIC_TYPE_WORD": return createComponentConfig(baseComponent, { validateData: (data) => data && typeof data.share_url === "string" });
8060
- case "dynamic/DYNAMIC_TYPE_ARTICLE": return createComponentConfig(baseComponent, { lazyComponent: () => import("./DYNAMIC_TYPE_ARTICLE-D-wVQedO.js").then((module) => ({ default: module.BilibiliArticleDynamic })) });
8104
+ case "dynamic/DYNAMIC_TYPE_ARTICLE": return createComponentConfig(baseComponent, { lazyComponent: () => import("./DYNAMIC_TYPE_ARTICLE-BANrixjv.js").then((module) => ({ default: module.BilibiliArticleDynamic })) });
8061
8105
  case "videoInfo": return createComponentConfig(baseComponent, {
8062
8106
  validateData: (data) => data && typeof data.share_url === "string",
8063
- lazyComponent: () => import("./videoInfo-CHAmZhDs.js").then((module) => ({ default: module.BilibiliVideoInfo }))
8107
+ lazyComponent: () => import("./videoInfo-2ZftvrcH.js").then((module) => ({ default: module.BilibiliVideoInfo }))
8064
8108
  });
8065
8109
  case "qrcodeImg": return createComponentConfig(baseComponent, {
8066
8110
  validateData: (data) => data && typeof data.share_url === "string",
8067
- lazyComponent: () => import("./qrcodeImg-CpgoM3Rq.js").then((module) => ({ default: module.BilibiliQrcodeImg }))
8111
+ lazyComponent: () => import("./qrcodeImg-CZjyVFex.js").then((module) => ({ default: module.BilibiliQrcodeImg }))
8068
8112
  });
8069
8113
  default: return createComponentConfig(baseComponent);
8070
8114
  }
@@ -8075,7 +8119,7 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8075
8119
  switch (baseComponent.id) {
8076
8120
  case "comment": return createComponentConfig(baseComponent, {
8077
8121
  validateData: (data) => data && typeof data.share_url === "string",
8078
- lazyComponent: () => import("./Comment-BhVCtijU.js").then((module) => ({ default: module.KuaishouComment }))
8122
+ lazyComponent: () => import("./Comment-uFQ-lSTU.js").then((module) => ({ default: module.KuaishouComment }))
8079
8123
  });
8080
8124
  default: return createComponentConfig(baseComponent);
8081
8125
  }
@@ -8084,8 +8128,8 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8084
8128
  case PlatformType.XIAOHONGSHU:
8085
8129
  platform.components = basePlatform.components.map((baseComponent) => {
8086
8130
  switch (baseComponent.id) {
8087
- case "noteInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./noteInfo-CTu_m_rn.js").then((module) => ({ default: module.XiaohongshuNoteInfo })) });
8088
- case "comment": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Comment-RlkT7syy.js").then((module) => ({ default: module.XiaohongshuComment })) });
8131
+ case "noteInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./noteInfo-D_BhS1le.js").then((module) => ({ default: module.XiaohongshuNoteInfo })) });
8132
+ case "comment": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Comment-C_YwQUnb.js").then((module) => ({ default: module.XiaohongshuComment })) });
8089
8133
  default: return createComponentConfig(baseComponent);
8090
8134
  }
8091
8135
  });
@@ -8093,11 +8137,11 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8093
8137
  case PlatformType.OTHER:
8094
8138
  platform.components = basePlatform.components.map((baseComponent) => {
8095
8139
  switch (baseComponent.id) {
8096
- case "help": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Help-CBzLw3Wu.js").then((module) => ({ default: module.default })) });
8097
- case "handlerError": return createComponentConfig(baseComponent, { lazyComponent: () => import("./handlerError-DhrU-U5-.js").then((module) => ({ default: module.handlerError })) });
8098
- case "changelog": return createComponentConfig(baseComponent, { lazyComponent: () => import("./changelog-BctgtEZ4.js").then((module) => ({ default: module.Changelog })) });
8099
- case "version_warning": return createComponentConfig(baseComponent, { lazyComponent: () => import("./VersionWarning-DxkXF5A-.js").then((module) => ({ default: module.VersionWarning })) });
8100
- case "qrlogin": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrlogin-DUVA_skM.js").then((module) => ({ default: module.QrLogin })) });
8140
+ case "help": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Help-DxWnO364.js").then((module) => ({ default: module.default })) });
8141
+ case "handlerError": return createComponentConfig(baseComponent, { lazyComponent: () => import("./handlerError-DsnWvz4S.js").then((module) => ({ default: module.handlerError })) });
8142
+ case "changelog": return createComponentConfig(baseComponent, { lazyComponent: () => import("./changelog-e1jZ80d5.js").then((module) => ({ default: module.Changelog })) });
8143
+ case "version_warning": return createComponentConfig(baseComponent, { lazyComponent: () => import("./VersionWarning-BBilm7ZQ.js").then((module) => ({ default: module.VersionWarning })) });
8144
+ case "qrlogin": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrlogin-FkNz8tfK.js").then((module) => ({ default: module.QrLogin })) });
8101
8145
  default: return createComponentConfig(baseComponent);
8102
8146
  }
8103
8147
  });
@@ -8105,8 +8149,8 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8105
8149
  case PlatformType.STATISTICS:
8106
8150
  platform.components = basePlatform.components.map((baseComponent) => {
8107
8151
  switch (baseComponent.id) {
8108
- case "group": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GroupStatistics-Bkxw7b1E.js").then((module) => ({ default: module.GroupStatistics })) });
8109
- case "global": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GlobalStatistics-tAZKJV5k.js").then((module) => ({ default: module.GlobalStatistics })) });
8152
+ case "group": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GroupStatistics-BQc8xoUG.js").then((module) => ({ default: module.GroupStatistics })) });
8153
+ case "global": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GlobalStatistics-PgMjuEI0.js").then((module) => ({ default: module.GlobalStatistics })) });
8110
8154
  default: return createComponentConfig(baseComponent);
8111
8155
  }
8112
8156
  });
@@ -8826,19 +8870,44 @@ var Render = async (event, path$1, data) => {
8826
8870
  });
8827
8871
  const ret = [];
8828
8872
  const images = Array.isArray(renderResult) ? renderResult : [renderResult];
8873
+ const imageStats = [];
8829
8874
  for (const image of images) {
8830
8875
  const imageBuffer = Buffer.from(image, "base64");
8831
8876
  const finalImageBuffer = embedWatermark(imageBuffer, JSON.stringify({
8832
8877
  a: Date.now(),
8833
8878
  b: `Generated by karin-plugin-kkk v${Root.pluginVersion}, with source code open-sourced under the GPL-3.0 license`,
8834
- c: `Sent by ${event.bot.account.selfId}|${event.bot.account.name}`
8879
+ c: `Sent by ${event?.bot?.account.selfId ?? "unknown"}|${event?.bot?.account.name ?? "unknown"}`
8835
8880
  })) ?? imageBuffer;
8836
- const finalImageSizeMb = finalImageBuffer.length / (1024 * 1024);
8837
- logger.debug(`[Render] 图片处理完成,准备入队发送,大小: ${logger.green(`${finalImageSizeMb.toFixed(3)} MB`)}`);
8881
+ const metadata = getImageMetadata(finalImageBuffer);
8882
+ const dimensions = metadata.width && metadata.height ? `${metadata.width}x${metadata.height}` : "unknown";
8883
+ imageStats.push({
8884
+ index: ret.length,
8885
+ type: "png",
8886
+ sizeMb: (finalImageBuffer.length / (1024 * 1024)).toFixed(3),
8887
+ dimensions
8888
+ });
8838
8889
  ret.push(segment.image("base64://" + finalImageBuffer.toString("base64")));
8839
8890
  }
8891
+ const statsText = imageStats.map((stat, i) => ` [${i + 1}] 类型: ${stat.type}, 大小: ${stat.sizeMb}MB, 尺寸: ${stat.dimensions}`).join("\n");
8892
+ logger.debug(`[Render] 图片处理完成,准备入队发送:\n共 ${imageStats.length} 张图片:\n${statsText}`);
8840
8893
  return ret;
8841
8894
  };
8895
+ var getImageMetadata = (buffer) => {
8896
+ if (buffer.length >= 24 && buffer.subarray(0, 8).equals(Buffer.from([
8897
+ 137,
8898
+ 80,
8899
+ 78,
8900
+ 71,
8901
+ 13,
8902
+ 10,
8903
+ 26,
8904
+ 10
8905
+ ]))) return {
8906
+ width: buffer.readUInt32BE(16),
8907
+ height: buffer.readUInt32BE(20)
8908
+ };
8909
+ return {};
8910
+ };
8842
8911
  var BilibiliDBBase = class {
8843
8912
  db;
8844
8913
  dbPath;
@@ -11138,7 +11207,7 @@ var DouyinWeb = (all) => [components.accordion.create("douyin", {
11138
11207
  value: "download"
11139
11208
  })]
11140
11209
  }),
11141
- components.radio.group("pushvideoQuality", {
11210
+ components.radio.group("push:pushVideoQuality", {
11142
11211
  label: "画质偏好",
11143
11212
  description: "推送解析时解析视频的分辨率偏好。",
11144
11213
  orientation: "horizontal",
@@ -11146,34 +11215,34 @@ var DouyinWeb = (all) => [components.accordion.create("douyin", {
11146
11215
  isDisabled: !all.douyin.push.switch,
11147
11216
  color: "warning",
11148
11217
  radio: [
11149
- components.radio.create("pushvideoQuality:radio-1", {
11218
+ components.radio.create("push:pushVideoQuality:radio-1", {
11150
11219
  label: "自动选择",
11151
11220
  value: "adapt",
11152
11221
  description: "根据「视频体积上限(MB)」自动选择分辨率进行下载"
11153
11222
  }),
11154
- components.radio.create("pushvideoQuality:radio-2", {
11223
+ components.radio.create("push:pushVideoQuality:radio-2", {
11155
11224
  label: "标清 540p",
11156
11225
  value: "540p"
11157
11226
  }),
11158
- components.radio.create("pushvideoQuality:radio-3", {
11227
+ components.radio.create("push:pushVideoQuality:radio-3", {
11159
11228
  label: "高清 720p",
11160
11229
  value: "720p"
11161
11230
  }),
11162
- components.radio.create("pushvideoQuality:radio-4", {
11231
+ components.radio.create("push:pushVideoQuality:radio-4", {
11163
11232
  label: "高清 1080p",
11164
11233
  value: "1080p"
11165
11234
  }),
11166
- components.radio.create("pushvideoQuality:radio-5", {
11235
+ components.radio.create("push:pushVideoQuality:radio-5", {
11167
11236
  label: "超清 2k",
11168
11237
  value: "2k"
11169
11238
  }),
11170
- components.radio.create("pushvideoQuality:radio-6", {
11239
+ components.radio.create("push:pushVideoQuality:radio-6", {
11171
11240
  label: "超清 4k",
11172
11241
  value: "4k"
11173
11242
  })
11174
11243
  ]
11175
11244
  }),
11176
- components.input.number("maxAutoVideoSize", {
11245
+ components.input.number("push:pushMaxAutoVideoSize", {
11177
11246
  label: "视频体积上限(MB)",
11178
11247
  color: "warning",
11179
11248
  description: "推送解析时根据该值自动选择分辨率进行下载。仅在「画质偏好」 为 \"自动选择\" 时生效",
@@ -12293,6 +12362,49 @@ var renderErrorImage = async (ctx, opts = {}) => {
12293
12362
  share_url: opts.share_url
12294
12363
  });
12295
12364
  };
12365
+ var getCandidateBots = () => karin$1.getAllBotList().map((item) => item.bot).filter((bot) => bot.account.name !== "console");
12366
+ var getNonConsoleMasters = (masters = config.master()) => masters.filter((id) => id !== "console");
12367
+ var getReachableMasterBots = async (masters = config.master()) => {
12368
+ const owners = getNonConsoleMasters(masters);
12369
+ if (owners.length === 0) return [];
12370
+ const bots = getCandidateBots();
12371
+ if (bots.length === 0) return [];
12372
+ const friendsMap = /* @__PURE__ */ new Map();
12373
+ await Promise.all(bots.map(async (bot) => {
12374
+ try {
12375
+ const list = await bot.getFriendList();
12376
+ friendsMap.set(bot.account.selfId, Array.isArray(list) ? list : []);
12377
+ } catch {
12378
+ friendsMap.set(bot.account.selfId, []);
12379
+ }
12380
+ }));
12381
+ const result = [];
12382
+ for (const master of owners) {
12383
+ const matchedBot = bots.find((bot) => (friendsMap.get(bot.account.selfId) || []).some((friend) => friend.userId === master));
12384
+ if (matchedBot) result.push({
12385
+ master,
12386
+ bot: matchedBot
12387
+ });
12388
+ }
12389
+ return result;
12390
+ };
12391
+ var resolveUsableBot = async (selfId) => {
12392
+ if (selfId) {
12393
+ const matchedBot = karin$1.getBot(selfId);
12394
+ if (matchedBot) return matchedBot;
12395
+ }
12396
+ const reachable = await getReachableMasterBots();
12397
+ if (reachable.length > 0) return reachable[0].bot;
12398
+ const { douyin, bilibili } = statBotId$1(Config.pushlist);
12399
+ const preferredBotId = douyin.botId || bilibili.botId;
12400
+ if (preferredBotId) {
12401
+ const matchedBot = karin$1.getBot(preferredBotId);
12402
+ if (matchedBot) return matchedBot;
12403
+ }
12404
+ const fallbackBotId = karin$1.getAllBotID()[0];
12405
+ if (!fallbackBotId) return void 0;
12406
+ return karin$1.getBot(fallbackBotId);
12407
+ };
12296
12408
  var parseLogsToStructured = (logs) => {
12297
12409
  const logRegex = /\[(\d{2}:\d{2}:\d{2}\.\d{3})\]\[([A-Z]{4})\]\s(.+)/s;
12298
12410
  return logs.map((log) => {
@@ -12324,6 +12436,17 @@ var getPushTaskBotId = () => {
12324
12436
  const ids = statBotId(Config.pushlist);
12325
12437
  return ids.douyin.botId || ids.bilibili.botId;
12326
12438
  };
12439
+ var injectBotToEventForPushTask = async (event, businessName) => {
12440
+ if (!isPushTask(event, businessName)) return event;
12441
+ if (event?.bot) return event;
12442
+ const preferredBotId = typeof event?.selfId === "string" ? event.selfId : getPushTaskBotId();
12443
+ const bot = (preferredBotId ? karin$1.getBot(preferredBotId) : void 0) ?? await resolveUsableBot(preferredBotId);
12444
+ if (!bot) throw new Error(`[ErrorHandler] push 任务缺少可用 bot 实例: ${businessName}`);
12445
+ const normalizedEvent = event ?? {};
12446
+ normalizedEvent.bot = bot;
12447
+ normalizedEvent.selfId = normalizedEvent.selfId ?? bot.account.selfId;
12448
+ return normalizedEvent;
12449
+ };
12327
12450
  var sendErrorToTrigger = async (ctx, img) => {
12328
12451
  const { event } = ctx;
12329
12452
  if (!event) return;
@@ -12331,20 +12454,18 @@ var sendErrorToTrigger = async (ctx, img) => {
12331
12454
  try {
12332
12455
  await event.reply(img);
12333
12456
  } catch (err) {
12334
- logger.error(`[ErrorHandler] 发送错误消息给用户失败: ${err}`);
12457
+ logger.error(`[ErrorHandler] 发送错误消息给触发者失败: ${err}`);
12335
12458
  }
12336
12459
  };
12337
12460
  var sendErrorToMaster = async (ctx, img, customPrefix) => {
12338
12461
  const { options, event } = ctx;
12339
12462
  if (!Config.app.errorLogSendTo.some((item) => item === "master")) return;
12340
- const list = config.master();
12341
- const master = list[0] === "console" ? list[1] : list[0];
12342
12463
  const isPush = isPushTask(event, options.businessName);
12343
- const botId = isPush ? getPushTaskBotId() : event?.bot?.selfId;
12344
- if (!botId || !master) return;
12464
+ const target = await resolveSingleMasterTarget(event, isPush);
12465
+ if (!target) return;
12345
12466
  try {
12346
- const prefix = customPrefix || await buildErrorPrefix(ctx, isPush, botId);
12347
- await karin$1.sendMaster(botId, master, [segment.text(prefix), ...img]);
12467
+ const prefix = customPrefix || await buildErrorPrefix(ctx, isPush, target.botId);
12468
+ await karin$1.sendMaster(target.botId, target.master, [segment.text(prefix), ...img]);
12348
12469
  } catch (err) {
12349
12470
  logger.error(`[ErrorHandler] 发送错误消息给主人失败: ${err}`);
12350
12471
  }
@@ -12352,30 +12473,59 @@ var sendErrorToMaster = async (ctx, img, customPrefix) => {
12352
12473
  var sendErrorToAllMasters = async (ctx, img, customPrefix) => {
12353
12474
  const { options, event } = ctx;
12354
12475
  if (!Config.app.errorLogSendTo.some((item) => item === "allMasters")) return;
12355
- const masters = config.master().filter((m) => m !== "console");
12356
- if (masters.length === 0) return;
12357
12476
  const isPush = isPushTask(event, options.businessName);
12358
- const botId = isPush ? getPushTaskBotId() : event?.bot?.selfId;
12359
- if (!botId) return;
12360
- const prefix = customPrefix || await buildErrorPrefix(ctx, isPush, botId);
12477
+ const targets = await resolveAllMasterTargets(event, isPush);
12478
+ if (targets.length === 0) return;
12479
+ const prefix = customPrefix || await buildErrorPrefix(ctx, isPush, targets[0].botId);
12361
12480
  const notifiedSet = /* @__PURE__ */ new Set();
12362
- for (const master of masters) {
12363
- const key = `${botId}:${master}`;
12481
+ for (const target of targets) {
12482
+ const key = `${target.botId}:${target.master}`;
12364
12483
  if (notifiedSet.has(key)) continue;
12365
12484
  try {
12366
- await karin$1.sendMaster(botId, master, [segment.text(prefix), ...img]);
12485
+ await karin$1.sendMaster(target.botId, target.master, [segment.text(prefix), ...img]);
12367
12486
  notifiedSet.add(key);
12368
- logger.debug(`[ErrorHandler] 已发送错误消息给主人: ${master} (via ${botId})`);
12487
+ logger.debug(`[ErrorHandler] 已发送错误消息给主人: ${target.master} (via ${target.botId})`);
12369
12488
  } catch (err) {
12370
- logger.error(`[ErrorHandler] 发送错误消息给主人 (${master}) 失败: ${err}`);
12489
+ logger.error(`[ErrorHandler] 发送错误消息给主人 (${target.master}) 失败: ${err}`);
12371
12490
  }
12372
12491
  }
12373
12492
  };
12493
+ var resolveSingleMasterTarget = async (event, isPush) => {
12494
+ if (isPush) {
12495
+ const matched = (await getReachableMasterBots())[0];
12496
+ if (!matched) return void 0;
12497
+ return {
12498
+ master: matched.master,
12499
+ botId: matched.bot.account.selfId
12500
+ };
12501
+ }
12502
+ const master = config.master().find((item) => item !== "console");
12503
+ const botId = event?.bot?.account.selfId ?? event?.selfId;
12504
+ if (!master || !botId) return void 0;
12505
+ return {
12506
+ master,
12507
+ botId
12508
+ };
12509
+ };
12510
+ var resolveAllMasterTargets = async (event, isPush) => {
12511
+ const masters = config.master().filter((item) => item !== "console");
12512
+ if (masters.length === 0) return [];
12513
+ if (isPush) return (await getReachableMasterBots(masters)).map((item) => ({
12514
+ master: item.master,
12515
+ botId: item.bot.account.selfId
12516
+ }));
12517
+ const botId = event?.bot?.account.selfId ?? event?.selfId;
12518
+ if (!botId) return [];
12519
+ return masters.map((master) => ({
12520
+ master,
12521
+ botId
12522
+ }));
12523
+ };
12374
12524
  var buildErrorPrefix = async (ctx, isPush, botId) => {
12375
12525
  const { options, event } = ctx;
12376
- if (isPush) return `${options.businessName} 任务执行出错!\n请即时解决以消除警告`;
12526
+ if (isPush) return `${options.businessName} 任务执行出错\n请尽快解决以消除警告`;
12377
12527
  const groupId = event && "groupId" in event ? event.groupId : "";
12378
- return `群:${(await karin$1.getBot(botId)?.getGroupInfo(groupId))?.groupName || "未知"}(${groupId})\n${options.businessName} 任务执行出错!\n请即时解决以消除警告`;
12528
+ return `群:${(await karin$1.getBot(botId)?.getGroupInfo(groupId))?.groupName || "未知"}(${groupId})\n${options.businessName} 任务执行出错\n请尽快解决以消除警告`;
12379
12529
  };
12380
12530
  var handleBusinessError = async (error, options, logs, event) => {
12381
12531
  try {
@@ -12413,7 +12563,9 @@ var handleBusinessError = async (error, options, logs, event) => {
12413
12563
  }
12414
12564
  };
12415
12565
  var wrapWithErrorHandler = (fn, options) => async (e, next) => {
12416
- const emojiManager = e ? new EmojiReactionManager(e) : void 0;
12566
+ const rawEvent = e;
12567
+ const normalizedEvent = await injectBotToEventForPushTask(rawEvent, options.businessName);
12568
+ const emojiManager = Boolean(rawEvent) && !isPushTask(rawEvent, options.businessName) ? new EmojiReactionManager(rawEvent) : void 0;
12417
12569
  let processingTimer = null;
12418
12570
  let successTimer = null;
12419
12571
  if (emojiManager) {
@@ -12422,7 +12574,7 @@ var wrapWithErrorHandler = (fn, options) => async (e, next) => {
12422
12574
  emojiManager.add("PROCESSING").catch(() => {});
12423
12575
  }, 1500);
12424
12576
  }
12425
- const ctx = logger.runContext(async () => fn(e, next));
12577
+ const ctx = logger.runContext(async () => fn(normalizedEvent, next));
12426
12578
  try {
12427
12579
  const result = await ctx.run();
12428
12580
  if (emojiManager) successTimer = setTimeout(() => {
@@ -12438,7 +12590,7 @@ var wrapWithErrorHandler = (fn, options) => async (e, next) => {
12438
12590
  await emojiManager.add("ERROR");
12439
12591
  }
12440
12592
  await new Promise((resolve) => setTimeout(resolve, 100));
12441
- if (await handleBusinessError(error, options, parseLogsToStructured(ctx.logs()), e) === "handled") return void 0;
12593
+ if (await handleBusinessError(error, options, parseLogsToStructured(ctx.logs()), normalizedEvent) === "handled") return void 0;
12442
12594
  throw error;
12443
12595
  }
12444
12596
  };
@@ -16787,7 +16939,7 @@ var getDouyinID = async (event, url, log = true) => {
16787
16939
  };
16788
16940
  break;
16789
16941
  }
16790
- case /https:\/\/(?:www\.douyin\.com|www\.iesdouyin\.com)\/share\/user\/(\S+)/.test(longLink): {
16942
+ case /https:\/\/(?:www\.douyin\.com|www\.iesdouyin\.com)\/(?:share\/)?user\/(\S+)/.test(longLink): {
16791
16943
  const userMatch = /user\/([a-zA-Z0-9_-]+)/.exec(longLink);
16792
16944
  result = {
16793
16945
  type: "user_dynamic",
@@ -23055,26 +23207,6 @@ var GlowImage = ({ src, children, alt, className, imgClassName, mode = "blur-lay
23055
23207
  })]
23056
23208
  });
23057
23209
  };
23058
- var GlowText = ({ children, className, glowClassName, blurRadius = 12, glowStrength = .6, scale = 1.02 }) => (0, import_jsx_runtime.jsxs)("span", {
23059
- className,
23060
- style: {
23061
- position: "relative",
23062
- display: "inline-block"
23063
- },
23064
- children: [(0, import_jsx_runtime.jsx)("span", {
23065
- "aria-hidden": "true",
23066
- className: glowClassName,
23067
- style: {
23068
- position: "absolute",
23069
- inset: 0,
23070
- transform: `scale(${scale})`,
23071
- filter: `blur(${blurRadius}px) saturate(1.1)`,
23072
- opacity: glowStrength,
23073
- pointerEvents: "none"
23074
- },
23075
- children
23076
- }), (0, import_jsx_runtime.jsx)("span", { children })]
23077
- });
23078
23210
  var RolldownLogo = ({ className = "w-auto h-10" }) => (0, import_jsx_runtime.jsxs)("svg", {
23079
23211
  viewBox: "0 0 177 15",
23080
23212
  fill: "none",
@@ -33474,274 +33606,331 @@ var VersionWarning = (props) => {
33474
33606
  ]
33475
33607
  });
33476
33608
  };
33477
- var Changelog = import_react.memo((props) => (0, import_jsx_runtime.jsx)(DefaultLayout, {
33478
- ...props,
33479
- style: {
33480
- backgroundImage: `\n linear-gradient(to right, rgb(163 163 163 / 0.1) 2px, transparent 2px),\n linear-gradient(to bottom, rgb(163 163 163 / 0.1) 2px, transparent 2px)\n `,
33481
- backgroundSize: "60px 60px"
33482
- },
33483
- children: (0, import_jsx_runtime.jsxs)("div", {
33484
- className: "relative px-20 pt-5 pb-0 w-full max-w-none prose prose-lg prose-invert from-default-50 to-default-100",
33609
+ var Changelog = import_react.memo((props) => {
33610
+ const backgroundColors = props.data.useDarkTheme ?? false ? {
33611
+ base: "#06110d",
33612
+ primary: "rgba(70, 184, 145, 0.26)",
33613
+ secondary: "rgba(135, 214, 84, 0.22)",
33614
+ accent: "rgba(88, 154, 210, 0.18)",
33615
+ wash: "rgba(7, 24, 18, 0.8)",
33616
+ tint: "rgba(162, 224, 103, 0.1)",
33617
+ noiseOpacity: .22,
33618
+ noiseBlend: "screen",
33619
+ inlineCodeBg: "rgba(255, 255, 255, 0.08)",
33620
+ inlineCodeText: "#dff3db"
33621
+ } : {
33622
+ base: "#f5fbfc",
33623
+ primary: "rgba(214, 236, 240, 0.95)",
33624
+ secondary: "rgba(189, 221, 34, 0.42)",
33625
+ accent: "rgba(214, 236, 240, 0.72)",
33626
+ wash: "rgba(255, 255, 255, 0.36)",
33627
+ tint: "rgba(189, 221, 34, 0.12)",
33628
+ noiseOpacity: .16,
33629
+ noiseBlend: "multiply",
33630
+ inlineCodeBg: "rgba(15, 23, 42, 0.06)",
33631
+ inlineCodeText: "#314329"
33632
+ };
33633
+ return (0, import_jsx_runtime.jsxs)(DefaultLayout, {
33634
+ ...props,
33635
+ className: "relative overflow-hidden",
33636
+ style: { backgroundColor: backgroundColors.base },
33485
33637
  children: [
33486
- props.data.Tip === true ? (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [(0, import_jsx_runtime.jsxs)("div", {
33487
- className: "inline-block relative mt-20",
33638
+ (0, import_jsx_runtime.jsxs)("div", {
33639
+ className: "absolute inset-0 pointer-events-none z-0",
33488
33640
  children: [
33489
- (0, import_jsx_runtime.jsx)("div", { className: "absolute inset-0 bg-black rounded-2xl opacity-50 blur-xl translate-y-6 -z-10" }),
33490
- (0, import_jsx_runtime.jsx)("img", {
33491
- className: "block relative rounded-2xl",
33492
- src: "/image/other/changelog/banner.webp",
33493
- alt: "横幅"
33641
+ (0, import_jsx_runtime.jsx)("div", {
33642
+ className: "absolute -top-48 -left-20 w-7xl h-280 rounded-full blur-[120px]",
33643
+ style: { background: `radial-gradient(ellipse at 35% 40%, ${backgroundColors.primary} 0%, transparent 72%)` }
33494
33644
  }),
33495
33645
  (0, import_jsx_runtime.jsx)("div", {
33496
- className: "flex absolute inset-0 flex-col justify-center items-center left-50 bottom-50",
33497
- children: (0, import_jsx_runtime.jsxs)("span", {
33498
- className: "text-9xl font-bold text-white opacity-10",
33499
- children: ["v", props.data.remoteVersion]
33500
- })
33646
+ className: "absolute top-42 right-[-7%] w-[30%] h-[24%] rounded-full blur-[132px] rotate-12",
33647
+ style: { background: `radial-gradient(ellipse at 50% 50%, ${backgroundColors.secondary} 0%, transparent 72%)` }
33648
+ }),
33649
+ (0, import_jsx_runtime.jsx)("div", {
33650
+ className: "absolute -bottom-36 left-30 w-280 h-220 rounded-full blur-[128px] -rotate-6",
33651
+ style: { background: `radial-gradient(ellipse at 55% 55%, ${backgroundColors.accent} 0%, transparent 72%)` }
33652
+ }),
33653
+ (0, import_jsx_runtime.jsx)("div", {
33654
+ className: "absolute left-[10%] w-[34%] h-[30%] blur-[138px]",
33655
+ style: {
33656
+ top: "33%",
33657
+ background: `radial-gradient(ellipse at 42% 50%, ${backgroundColors.tint} 0%, transparent 76%)`
33658
+ }
33659
+ }),
33660
+ (0, import_jsx_runtime.jsx)("div", {
33661
+ className: "absolute left-[32%] -bottom-[14%] w-[44%] h-[28%] blur-[342px]",
33662
+ style: { background: `radial-gradient(ellipse at 50% 48%, ${backgroundColors.secondary} 0%, transparent 77%)` }
33663
+ }),
33664
+ (0, import_jsx_runtime.jsx)("div", {
33665
+ className: "absolute inset-0",
33666
+ style: { background: `linear-gradient(180deg, ${backgroundColors.wash} 0%, transparent 28%, transparent 72%, ${backgroundColors.wash} 100%)` }
33501
33667
  })
33502
33668
  ]
33503
- }), (0, import_jsx_runtime.jsxs)("div", {
33504
- className: "py-12 pb-6",
33505
- children: [(0, import_jsx_runtime.jsx)("div", {
33506
- className: "text-4xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
33507
- children: "以下任意方式均可更新"
33508
- }), (0, import_jsx_runtime.jsxs)("div", {
33509
- className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
33510
- children: [
33511
- (0, import_jsx_runtime.jsxs)("div", {
33512
- className: "flex items-center gap-5",
33513
- children: [
33514
- (0, import_jsx_runtime.jsx)("span", {
33515
- className: "text-warning text-[1.2em]",
33516
- children: ""
33517
- }),
33518
- (0, import_jsx_runtime.jsx)("span", { children: "引用回复此消息包含" }),
33519
- (0, import_jsx_runtime.jsx)(GlowText, {
33520
- className: "inline-block text-[1.15em] font-bold text-warning",
33521
- blurRadius: 15,
33522
- glowStrength: 2,
33523
- scale: 1.1,
33524
- children: "更新"
33525
- }),
33526
- (0, import_jsx_runtime.jsx)("span", { children: "字眼" })
33527
- ]
33528
- }),
33529
- (0, import_jsx_runtime.jsxs)("div", {
33530
- className: "flex items-center gap-5",
33531
- children: [
33532
- (0, import_jsx_runtime.jsx)("span", {
33533
- className: "text-warning text-[1.2em]",
33534
- children: ""
33669
+ }),
33670
+ (0, import_jsx_runtime.jsx)("div", {
33671
+ className: "absolute inset-0 pointer-events-none z-0",
33672
+ style: {
33673
+ opacity: backgroundColors.noiseOpacity,
33674
+ mixBlendMode: backgroundColors.noiseBlend
33675
+ },
33676
+ children: (0, import_jsx_runtime.jsxs)("svg", {
33677
+ className: "w-full h-full",
33678
+ xmlns: "http://www.w3.org/2000/svg",
33679
+ children: [(0, import_jsx_runtime.jsxs)("filter", {
33680
+ id: "changelogNoise",
33681
+ x: "0%",
33682
+ y: "0%",
33683
+ width: "100%",
33684
+ height: "100%",
33685
+ children: [
33686
+ (0, import_jsx_runtime.jsx)("feTurbulence", {
33687
+ type: "fractalNoise",
33688
+ baseFrequency: "0.88",
33689
+ numOctaves: "2",
33690
+ stitchTiles: "stitch",
33691
+ result: "noise"
33692
+ }),
33693
+ (0, import_jsx_runtime.jsx)("feColorMatrix", {
33694
+ type: "saturate",
33695
+ values: "0",
33696
+ result: "gray"
33697
+ }),
33698
+ (0, import_jsx_runtime.jsxs)("feComponentTransfer", { children: [
33699
+ (0, import_jsx_runtime.jsx)("feFuncR", {
33700
+ type: "discrete",
33701
+ tableValues: "0 0 1 1"
33535
33702
  }),
33536
- (0, import_jsx_runtime.jsx)("span", { children: "Karin 的" }),
33537
- (0, import_jsx_runtime.jsx)(GlowText, {
33538
- blurRadius: 10,
33539
- glowStrength: 1.5,
33540
- scale: 1.05,
33541
- children: (0, import_jsx_runtime.jsx)(code_default, {
33542
- radius: "lg",
33543
- color: "warning",
33544
- className: "text-[0.9em]",
33545
- children: "WebUI"
33546
- })
33703
+ (0, import_jsx_runtime.jsx)("feFuncG", {
33704
+ type: "discrete",
33705
+ tableValues: "0 0 1 1"
33547
33706
  }),
33548
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33549
- (0, import_jsx_runtime.jsx)(GlowText, {
33550
- blurRadius: 10,
33551
- glowStrength: 1.5,
33552
- scale: 1.05,
33553
- children: (0, import_jsx_runtime.jsx)(code_default, {
33554
- radius: "lg",
33555
- color: "warning",
33556
- className: "text-[0.9em]",
33557
- children: "插件管理"
33558
- })
33707
+ (0, import_jsx_runtime.jsx)("feFuncB", {
33708
+ type: "discrete",
33709
+ tableValues: "0 0 1 1"
33559
33710
  }),
33560
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33561
- (0, import_jsx_runtime.jsx)(GlowText, {
33562
- blurRadius: 10,
33563
- glowStrength: 1.5,
33564
- scale: 1.05,
33565
- children: (0, import_jsx_runtime.jsx)(code_default, {
33566
- radius: "lg",
33567
- color: "warning",
33568
- className: "text-[0.9em]",
33569
- children: "已安装"
33570
- })
33711
+ (0, import_jsx_runtime.jsx)("feFuncA", {
33712
+ type: "table",
33713
+ tableValues: "0 0.25 0.9 1"
33571
33714
  })
33572
- ]
33573
- }),
33574
- (0, import_jsx_runtime.jsxs)("div", {
33575
- className: "flex items-center gap-5",
33715
+ ] })
33716
+ ]
33717
+ }), (0, import_jsx_runtime.jsx)("rect", {
33718
+ width: "100%",
33719
+ height: "100%",
33720
+ filter: "url(#changelogNoise)"
33721
+ })]
33722
+ })
33723
+ }),
33724
+ (0, import_jsx_runtime.jsxs)("div", {
33725
+ className: "relative px-20 pt-5 pb-0 w-full max-w-none prose prose-lg prose-invert from-default-50 to-default-100",
33726
+ children: [
33727
+ props.data.Tip === true ? (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: (0, import_jsx_runtime.jsxs)("div", {
33728
+ className: "pt-32",
33729
+ children: [(0, import_jsx_runtime.jsx)("div", {
33730
+ className: "text-5xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
33731
+ children: "以下任意方式均可更新"
33732
+ }), (0, import_jsx_runtime.jsxs)("div", {
33733
+ className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
33576
33734
  children: [
33577
- (0, import_jsx_runtime.jsx)("span", {
33578
- className: "text-warning text-[1.2em]",
33579
- children: "•"
33735
+ (0, import_jsx_runtime.jsxs)("div", {
33736
+ className: "flex items-center gap-5",
33737
+ children: [
33738
+ (0, import_jsx_runtime.jsx)("span", {
33739
+ className: "text-default-500 text-[1.2em]",
33740
+ children: "•"
33741
+ }),
33742
+ (0, import_jsx_runtime.jsx)("span", { children: "回复" }),
33743
+ (0, import_jsx_runtime.jsx)("span", {
33744
+ className: "inline-block text-[1.15em] font-bold text-default-900",
33745
+ children: "更新"
33746
+ }),
33747
+ (0, import_jsx_runtime.jsx)("span", { children: "立刻开始" })
33748
+ ]
33580
33749
  }),
33581
- (0, import_jsx_runtime.jsx)("span", { children: "Karin 目录运行" }),
33582
- (0, import_jsx_runtime.jsx)(GlowText, {
33583
- blurRadius: 10,
33584
- glowStrength: 1.5,
33585
- scale: 1.05,
33586
- children: (0, import_jsx_runtime.jsxs)(code_default, {
33587
- radius: "lg",
33588
- color: "warning",
33589
- className: "text-[0.85em] whitespace-nowrap",
33590
- children: [
33591
- "pnpm add karin-plugin-kkk@",
33592
- props.data.remoteVersion,
33593
- " -w"
33594
- ]
33595
- })
33750
+ (0, import_jsx_runtime.jsxs)("div", {
33751
+ className: "flex items-center gap-5",
33752
+ children: [
33753
+ (0, import_jsx_runtime.jsx)("span", {
33754
+ className: "text-default-500 text-[1.2em]",
33755
+ children: "•"
33756
+ }),
33757
+ (0, import_jsx_runtime.jsx)("span", { children: "进入" }),
33758
+ (0, import_jsx_runtime.jsx)(code_default, {
33759
+ radius: "lg",
33760
+ color: "success",
33761
+ className: "text-[0.9em]",
33762
+ children: "Karin WebUI"
33763
+ }),
33764
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33765
+ (0, import_jsx_runtime.jsx)(code_default, {
33766
+ radius: "lg",
33767
+ color: "success",
33768
+ className: "text-[0.9em]",
33769
+ children: "插件管理"
33770
+ }),
33771
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33772
+ (0, import_jsx_runtime.jsx)(code_default, {
33773
+ radius: "lg",
33774
+ color: "success",
33775
+ className: "text-[0.9em]",
33776
+ children: "已安装"
33777
+ }),
33778
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33779
+ (0, import_jsx_runtime.jsx)("span", { children: "一览更新" })
33780
+ ]
33781
+ }),
33782
+ (0, import_jsx_runtime.jsxs)("div", {
33783
+ className: "flex items-center gap-5",
33784
+ children: [
33785
+ (0, import_jsx_runtime.jsx)("span", {
33786
+ className: "text-default-500 text-[1.2em]",
33787
+ children: "•"
33788
+ }),
33789
+ (0, import_jsx_runtime.jsx)("span", { children: "Karin 根目录运行" }),
33790
+ (0, import_jsx_runtime.jsxs)(code_default, {
33791
+ radius: "lg",
33792
+ color: "success",
33793
+ className: "text-[0.85em] whitespace-nowrap",
33794
+ children: [
33795
+ "pnpm add karin-plugin-kkk@",
33796
+ props.data.remoteVersion,
33797
+ " -w"
33798
+ ]
33799
+ })
33800
+ ]
33596
33801
  })
33597
33802
  ]
33598
- })
33599
- ]
33600
- })]
33601
- })] }) : null,
33602
- (0, import_jsx_runtime.jsx)("div", {
33603
- className: "changelog-content",
33604
- children: (0, import_jsx_runtime.jsx)(Markdown, {
33605
- rehypePlugins: [rehypeHighlight],
33606
- components: {
33607
- h1: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h1", {
33608
- className: "text-[5.28em] font-semibold mb-8 pb-2 border-b-2 border-default-400 text-default-900",
33609
- ...props,
33610
- children
33611
- }),
33612
- h2: ({ children, ...props }) => (0, import_jsx_runtime.jsxs)("div", {
33613
- className: "relative mt-20 mb-5",
33614
- children: [
33615
- (0, import_jsx_runtime.jsx)("div", {
33616
- className: "absolute -top-13 left-0 text-[11em] font-black text-default-200/50 select-none pointer-events-none uppercase leading-none",
33617
- "aria-hidden": "true",
33618
- children: typeof children === "string" ? children : "H2"
33803
+ })]
33804
+ }) }) : null,
33805
+ (0, import_jsx_runtime.jsx)("div", {
33806
+ className: "changelog-content",
33807
+ children: (0, import_jsx_runtime.jsx)(Markdown, {
33808
+ rehypePlugins: [rehypeHighlight],
33809
+ components: {
33810
+ h1: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h1", {
33811
+ className: "text-[5.28em] font-semibold mb-8 pb-2 border-b-2 border-default-400 text-default-900",
33812
+ ...props,
33813
+ children
33814
+ }),
33815
+ h2: ({ children, ...props }) => (0, import_jsx_runtime.jsxs)("div", {
33816
+ className: "relative mt-25 mb-5",
33817
+ children: [(0, import_jsx_runtime.jsx)("h2", {
33818
+ className: "ml-5 relative z-10 text-[5.28em] text-default-900 font-light",
33819
+ ...props,
33820
+ children
33821
+ }), (0, import_jsx_runtime.jsx)("div", { className: "w-full border-b border-default-400" })]
33619
33822
  }),
33620
- (0, import_jsx_runtime.jsx)("h2", {
33621
- className: "ml-15 relative z-10 text-[3.8em] pb-2 text-default-900 font-medium",
33823
+ h3: ({ children, ...props }) => (0, import_jsx_runtime.jsxs)("h3", {
33824
+ className: "flex items-baseline gap-3 text-[3.2em] font-light mb-2 text-default-900",
33825
+ ...props,
33826
+ children: [children, (0, import_jsx_runtime.jsx)(CornerDownLeft, {
33827
+ strokeWidth: 2.5,
33828
+ className: "w-[1em] h-[1em] text-default-900/10"
33829
+ })]
33830
+ }),
33831
+ h4: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h4", {
33832
+ className: "text-[2.64em] font-semibold mb-5 text-default-900",
33622
33833
  ...props,
33623
33834
  children
33624
33835
  }),
33625
- (0, import_jsx_runtime.jsx)("div", { className: "w-full border-b border-default-400" })
33626
- ]
33627
- }),
33628
- h3: ({ children, ...props }) => (0, import_jsx_runtime.jsxs)("h3", {
33629
- className: "flex items-baseline gap-3 text-[3.3em] font-semibold mb-6 text-default-900",
33630
- ...props,
33631
- children: [children, (0, import_jsx_runtime.jsx)(CornerDownLeft, {
33632
- strokeWidth: 2.5,
33633
- className: "w-[1em] h-[1em] text-default-200"
33836
+ h5: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h5", {
33837
+ className: "text-[2.38em] font-semibold mb-5 text-default-900",
33838
+ ...props,
33839
+ children
33840
+ }),
33841
+ h6: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h6", {
33842
+ className: "text-[2.11em] font-semibold mb-4 text-default-600",
33843
+ ...props,
33844
+ children
33845
+ }),
33846
+ p: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("p", {
33847
+ className: "text-[2.64em] leading-[1.75] mb-[2.64em] text-default-900",
33848
+ ...props,
33849
+ children
33850
+ }),
33851
+ ul: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("ul", {
33852
+ className: "pl-[5em] mb-[2em] list-disc text-default-900",
33853
+ ...props,
33854
+ children
33855
+ }),
33856
+ ol: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("ol", {
33857
+ className: "pl-[3.6em] mb-[1.8em] list-decimal text-default-900",
33858
+ ...props,
33859
+ children
33860
+ }),
33861
+ li: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("li", {
33862
+ className: "text-[2.6em] leading-[1.6] text-default-900 font-black",
33863
+ ...props,
33864
+ children
33865
+ }),
33866
+ blockquote: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("blockquote", {
33867
+ className: "border-l-4 border-default-500 pl-[1.8em] py-[0.9em] mb-[1.8em] text-default-700 bg-default-100",
33868
+ ...props,
33869
+ children
33870
+ }),
33871
+ code: ({ children }) => (0, import_jsx_runtime.jsx)("code", {
33872
+ className: "inline align-text-bottom leading-inherit text-[0.8em] whitespace-normal break-all box-decoration-slice rounded-[0.5em] px-[0.38em] py-[0.14em] font-semibold",
33873
+ style: {
33874
+ backgroundColor: backgroundColors.inlineCodeBg,
33875
+ color: backgroundColors.inlineCodeText
33876
+ },
33877
+ children
33878
+ }),
33879
+ pre: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("pre", {
33880
+ className: "p-[1.8em] mb-[1.8em] bg-default-200 rounded overflow-x-auto font-mono",
33881
+ ...props,
33882
+ children
33883
+ }),
33884
+ a: ({ children, href, ...props }) => (0, import_jsx_runtime.jsx)("a", {
33885
+ className: "inline-flex gap-3 items-baseline cursor-pointer text-default-900/50 hover:underline",
33886
+ onClick: (e) => e.preventDefault(),
33887
+ ...props,
33888
+ children: (0, import_jsx_runtime.jsx)("span", { children })
33889
+ }),
33890
+ img: ({ ...props }) => (0, import_jsx_runtime.jsx)("img", {
33891
+ className: "max-w-full h-auto rounded",
33892
+ ...props
33893
+ }),
33894
+ table: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("table", {
33895
+ className: "w-full border-collapse mb-[1.8em] text-default-900",
33896
+ ...props,
33897
+ children
33898
+ }),
33899
+ th: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("th", {
33900
+ className: "px-5 py-3 font-semibold text-left border text-default-900 bg-default-200 border-default-400",
33901
+ ...props,
33902
+ children
33903
+ }),
33904
+ td: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("td", {
33905
+ className: "px-5 py-3 border text-default-900 border-default-400",
33906
+ ...props,
33907
+ children
33908
+ })
33909
+ },
33910
+ children: props.data?.markdown ?? ""
33911
+ })
33912
+ }),
33913
+ props.data.Tip === true && props.data.buildTime && (0, import_jsx_runtime.jsxs)("div", {
33914
+ className: "flex gap-8 justify-center py-12 mt-16 border-t-2 border-default-300 opacity-60",
33915
+ children: [(0, import_jsx_runtime.jsxs)("div", {
33916
+ className: "text-4xl",
33917
+ children: ["更新频道:", (0, import_jsx_runtime.jsx)("span", {
33918
+ className: "font-bold text-default-700",
33919
+ children: " 正式版"
33634
33920
  })]
33635
- }),
33636
- h4: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h4", {
33637
- className: "text-[2.64em] font-semibold mb-5 text-default-900",
33638
- ...props,
33639
- children
33640
- }),
33641
- h5: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h5", {
33642
- className: "text-[2.38em] font-semibold mb-5 text-default-900",
33643
- ...props,
33644
- children
33645
- }),
33646
- h6: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("h6", {
33647
- className: "text-[2.11em] font-semibold mb-4 text-default-600",
33648
- ...props,
33649
- children
33650
- }),
33651
- p: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("p", {
33652
- className: "text-[2.64em] leading-[1.75] mb-[2.64em] text-default-900",
33653
- ...props,
33654
- children
33655
- }),
33656
- ul: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("ul", {
33657
- className: "pl-[5em] mb-[2em] list-disc text-default-900",
33658
- ...props,
33659
- children
33660
- }),
33661
- ol: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("ol", {
33662
- className: "pl-[3.6em] mb-[1.8em] list-decimal text-default-900",
33663
- ...props,
33664
- children
33665
- }),
33666
- li: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("li", {
33667
- className: "text-[2.6em] leading-[1.6] text-default-900",
33668
- ...props,
33669
- children
33670
- }),
33671
- blockquote: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("blockquote", {
33672
- className: "border-l-4 border-default-500 pl-[1.8em] py-[0.9em] mb-[1.8em] text-default-700 bg-default-100",
33673
- ...props,
33674
- children
33675
- }),
33676
- code: ({ children }) => (0, import_jsx_runtime.jsx)(code_default, {
33677
- radius: "lg",
33678
- color: "warning",
33679
- className: "inline align-text-bottom leading-inherit text-[0.8em] whitespace-normal break-all box-decoration-slice",
33680
- children
33681
- }),
33682
- pre: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("pre", {
33683
- className: "p-[1.8em] mb-[1.8em] bg-default-200 rounded overflow-x-auto font-mono",
33684
- ...props,
33685
- children
33686
- }),
33687
- a: ({ children, href, ...props }) => (0, import_jsx_runtime.jsxs)("a", {
33688
- className: "inline-flex gap-3 items-baseline cursor-pointer text-warning hover:underline",
33689
- onClick: (e) => e.preventDefault(),
33690
- ...props,
33691
- children: [(0, import_jsx_runtime.jsx)(GlowText, {
33692
- blurRadius: 10,
33693
- glowStrength: 3,
33694
- scale: 1.2,
33695
- children
33696
- }), (0, import_jsx_runtime.jsx)(GlowText, {
33697
- blurRadius: 10,
33698
- glowStrength: 3,
33699
- scale: 1.2,
33700
- children: (0, import_jsx_runtime.jsx)(ExternalLink, { className: "w-[1.1em] h-[1.1em] -mb-[0.1em]" })
33921
+ }), (0, import_jsx_runtime.jsxs)("div", {
33922
+ className: "text-4xl",
33923
+ children: ["编译于:", (0, import_jsx_runtime.jsxs)("span", {
33924
+ className: "font-bold text-default-700",
33925
+ children: [" ", props.data.buildTime]
33701
33926
  })]
33702
- }),
33703
- img: ({ ...props }) => (0, import_jsx_runtime.jsx)("img", {
33704
- className: "max-w-full h-auto rounded",
33705
- ...props
33706
- }),
33707
- table: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("table", {
33708
- className: "w-full border-collapse mb-[1.8em] text-default-900",
33709
- ...props,
33710
- children
33711
- }),
33712
- th: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("th", {
33713
- className: "px-5 py-3 font-semibold text-left border text-default-900 bg-default-200 border-default-400",
33714
- ...props,
33715
- children
33716
- }),
33717
- td: ({ children, ...props }) => (0, import_jsx_runtime.jsx)("td", {
33718
- className: "px-5 py-3 border text-default-900 border-default-400",
33719
- ...props,
33720
- children
33721
- })
33722
- },
33723
- children: props.data?.markdown ?? ""
33724
- })
33725
- }),
33726
- props.data.Tip === true && props.data.buildTime && (0, import_jsx_runtime.jsxs)("div", {
33727
- className: "flex gap-8 justify-center py-12 mt-16 border-t-2 border-default-300 opacity-60",
33728
- children: [(0, import_jsx_runtime.jsxs)("div", {
33729
- className: "text-4xl",
33730
- children: ["更新频道:", (0, import_jsx_runtime.jsx)("span", {
33731
- className: "font-bold text-warning-200",
33732
- children: " 正式版"
33733
- })]
33734
- }), (0, import_jsx_runtime.jsxs)("div", {
33735
- className: "text-4xl",
33736
- children: ["编译于:", (0, import_jsx_runtime.jsxs)("span", {
33737
- className: "font-bold text-warning-200",
33738
- children: [" ", props.data.buildTime]
33739
- })]
33740
- })]
33927
+ })]
33928
+ })
33929
+ ]
33741
33930
  })
33742
33931
  ]
33743
- })
33744
- }));
33932
+ });
33933
+ });
33745
33934
  Changelog.displayName = "Changelog";
33746
33935
  var ERROR_TITLES = [
33747
33936
  "哎呀",