karin-plugin-kkk 2.30.4 → 2.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
1
  import { i as __toESM } from "./rolldown-runtime.js";
2
- import { $ as zhCN, $t as Hash, A as n, An as Chip, At as Save, B as RiPieChart2Fill, Bn as require_protobufjs, Bt as Palette, C as BiImage, Cn as ChartColumn, Ct as ShoppingBag, D as AiOutlineVideoCamera, Dn as Bot, Dt as Settings2, E as AiFillStar, En as Box, Et as Share2, F as RiHeart3Fill, Fn as require_react, Ft as QrCode, G as RiTiktokFill, Gt as Menu, H as RiStarFill, Hn as Xhshow, Ht as Moon, I as RiHeart3Line, In as require_png, It as Puzzle, J as RiVerifiedBadgeFill, Jt as LoaderCircle, K as RiTrophyFill, Kt as Maximize, L as RiHeartLine, Ln as require_jsQR, Lt as Plus, M as RiArrowRightFill, Mn as clsx, Mt as RefreshCw, N as RiGroupLine, Nn as require_jsx_runtime, Nt as Radio, O as m, On as Bookmark, Ot as Search, P as RiHashtag, Pn as require_server_node, Pt as Quote, Q as SiAnthropic, Qt as Heart, R as RiLiveLine, Rn as require_jpeg_js, Rt as Play, S as FaUserGroup, Sn as Check, St as Smartphone, T as AiFillPushpin, Tn as Calendar, Tt as ShieldCheck, U as RiStarLine, Un as zod_default, Ut as Monitor, V as RiShareForwardFill, Vn as Chalk, Vt as Music, W as RiThumbUpFill, Wt as MessageCircle, X as SiGithub, Xt as Info, Y as RiVideoLine, Yt as LayoutTemplate, Z as SiBilibili, Zt as Image$1, _ as MdLocationOn, _n as CircleFadingArrowUp, _t as Sun, a as purify, an as Eye, at as Zap, b as FaMusic, bn as CircleCheck, bt as SquarePen, c as VictoryLine, cn as Download, ct as Video, d as VictoryLabel, dn as CornerDownLeft, dt as User, en as GitBranch, et as parse, f as VictoryTheme, fn as Copy, ft as UserPlus, g as MdLightbulbOutline, gn as CircleQuestionMark, gt as Terminal, h as MdInfoOutline, hn as Clapperboard, ht as Trash2, i as Window, in as FilePlay, it as differenceInSeconds, j as Markdown, jn as Button, jt as RotateCcw, k as a, kn as BellRing, kt as ScanLine, l as VictoryChart, ln as Crown, lt as Users, m as MdFitScreen, mn as Clock, mt as TriangleAlert, n as require_lib, nn as Gamepad2, nt as formatDistanceToNow, o as VictoryScatter, on as EyeOff, ot as X, p as rehypeHighlight, pn as Code, pt as Upload, q as RiUserFollowLine, qt as MapPin, r as require_qr_code_styling, rn as FileText, rt as format, s as VictoryPie, sn as ExternalLink, st as WandSparkles, t as createProxyMiddleware, tn as Gift, tt as fromUnixTime, u as VictoryAxis, un as Cpu, ut as UsersRound, v as MdSchedule, vn as CircleEllipsis, vt as Star, w as AiFillHeart, wn as Camera, wt as Shield, x as FaTiktok, xn as CircleAlert, xt as Sparkles, y as FaCommentDots, yn as CircleCheckBig, yt as Square, z as RiMessage3Fill, zn as require_heic_decode, zt as Pencil } from "./vendor.js";
2
+ import { $ as SiHonor, $n as require_protobufjs, $t as Moon, A as RiGroupLine, An as CircleEllipsis, At as Square, B as RiStarLine, Bn as Bookmark, Bt as ScanLine, C as BiImage, Cn as CornerDownLeft, Ct as UserPlus, D as AiOutlineVideoCamera, Dn as Clapperboard, Dt as Terminal, E as AiFillStar, En as Clock, Et as Trash2, F as RiLiveLine, Fn as ChartColumn, Ft as Shield, G as RiVerifiedBadgeFill, Gn as clsx, Gt as Quote, H as RiTiktokFill, Hn as ArrowDownToLine, Ht as RotateCcw, I as RiMessage3Fill, In as Camera, It as ShieldCheck, J as SiVivo, Jn as require_react, Jt as Plus, K as RiVideoLine, Kn as require_jsx_runtime, Kt as QrCode, L as RiPieChart2Fill, Ln as Calendar, Lt as Share2, M as RiHeart3Fill, Mn as CircleCheckBig, Mt as Sparkles, N as RiHeart3Line, Nn as CircleAlert, Nt as Smartphone, O as Markdown, On as CircleQuestionMark, Ot as Sun, P as RiHeartLine, Pn as Check, Pt as ShoppingBag, Q as SiHuawei, Qn as require_heic_decode, Qt as Music, R as RiShareForwardFill, Rn as Box, Rt as Settings2, S as FaUserGroup, Sn as Cpu, St as User, T as AiFillPushpin, Tn as Code, Tt as TriangleAlert, U as RiTrophyFill, Un as Chip, Ut as RefreshCw, V as RiThumbUpFill, Vn as BellRing, Vt as Save, W as RiUserFollowLine, Wn as Button, Wt as Radio, X as SiOppo, Xn as require_jsQR, Xt as Pencil, Y as SiSamsung, Yn as require_png, Yt as Play, Z as SiOneplus, Zn as require_jpeg_js, Zt as Palette, _ as MdLocationOn, _n as Eye, _t as X, a as purify, an as LoaderCircle, at as o, b as FaMusic, bn as Download, bt as Users, c as VictoryLine, cn as Info, ct as n, d as VictoryLabel, dn as Hash, dt as parse, en as Monitor, er as Chalk, et as SiGooglephotos, f as VictoryTheme, fn as GitBranch, ft as fromUnixTime, g as MdLightbulbOutline, gn as FilePlay, gt as Zap, h as MdInfoOutline, hn as FileText, ht as differenceInSeconds, i as Window, in as MapPin, it as SiAnthropic, j as RiHashtag, jn as CircleCheck, jt as SquarePen, k as RiArrowRightFill, kn as CircleFadingArrowUp, kt as Star, l as VictoryChart, ln as Image$1, lt as c, m as MdFitScreen, mn as Gamepad2, mt as format, n as require_lib, nn as Menu, nr as zod_default, nt as SiBilibili, o as VictoryScatter, on as Link, ot as m, p as rehypeHighlight, pn as Gift, pt as formatDistanceToNow, q as SiXiaomi, qn as require_server_node, qt as Puzzle, r as require_qr_code_styling, rn as Maximize, rt as SiApple, s as VictoryPie, sn as LayoutTemplate, st as a, t as createProxyMiddleware, tn as MessageCircle, tr as Xhshow, tt as SiGithub, u as VictoryAxis, un as Heart, ut as zhCN, v as MdSchedule, vn as EyeOff, vt as WandSparkles, w as AiFillHeart, wn as Copy, wt as Upload, x as FaTiktok, xn as Crown, xt as UsersRound, y as FaCommentDots, yn as ExternalLink, yt as Video, z as RiStarFill, zn as Bot, zt as Search } from "./vendor.js";
3
3
  import "node:module";
4
4
  import fs from "node:fs";
5
5
  import path, { resolve } from "node:path";
6
- import URL$1, { fileURLToPath } from "node:url";
6
+ import URL$2, { fileURLToPath } from "node:url";
7
7
  import os, { platform } from "node:os";
8
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";
@@ -18,7 +18,7 @@ import util from "node:util";
18
18
  import { Transform } from "node:stream";
19
19
  import { pipeline } from "node:stream/promises";
20
20
  import { embedWatermarkToPngBytes } from "@ikenxuan/watermark";
21
- import { snapka } from "@snapka/puppeteer";
21
+ import { snapka } from "@karinjs/plugin-puppeteer";
22
22
  import { newInjectedPage } from "fingerprint-injector";
23
23
  //#region src/index.ts
24
24
  globalThis.__kkkLoadStart ??= process.hrtime.bigint();
@@ -1613,8 +1613,8 @@ var xiaohongshuApiUrls = {
1613
1613
  keyword: data.keyword,
1614
1614
  page: data.page ?? 1,
1615
1615
  page_size: data.page_size ?? 20,
1616
- sort: SearchSortType.GENERAL,
1617
- note_type: SearchNoteType.ALL,
1616
+ sort: "general",
1617
+ note_type: 0,
1618
1618
  search_id: xiaohongshuSign.getSearchId(),
1619
1619
  image_formats: [
1620
1620
  "jpg",
@@ -2632,7 +2632,7 @@ var douoyinAPIErrorCode = /* @__PURE__ */ function(douoyinAPIErrorCode) {
2632
2632
  /** 当前用户未开播 */
2633
2633
  douoyinAPIErrorCode["NOT_LIVE"] = "USER_NOT_LIVE";
2634
2634
  /** 未知错误 */
2635
- douoyinAPIErrorCode[douoyinAPIErrorCode["UNKNOWN"] = amagiAPIErrorCode.UNKNOWN] = "UNKNOWN";
2635
+ douoyinAPIErrorCode["UNKNOWN"] = "UNKNOWN_ERROR";
2636
2636
  return douoyinAPIErrorCode;
2637
2637
  }({});
2638
2638
  /** B站平台API错误码 */
@@ -2744,7 +2744,7 @@ var kuaishouAPIErrorCode = /* @__PURE__ */ function(kuaishouAPIErrorCode) {
2744
2744
  /** Cookie无效或已过期 */
2745
2745
  kuaishouAPIErrorCode["COOKIE"] = "INVALID_COOKIE";
2746
2746
  /** 未知错误 */
2747
- kuaishouAPIErrorCode[kuaishouAPIErrorCode["UNKNOWN"] = amagiAPIErrorCode.UNKNOWN] = "UNKNOWN";
2747
+ kuaishouAPIErrorCode["UNKNOWN"] = "UNKNOWN_ERROR";
2748
2748
  return kuaishouAPIErrorCode;
2749
2749
  }({});
2750
2750
  /** 小红书平台API错误码 */
@@ -2752,7 +2752,7 @@ var xiaohongshuAPIErrorCode = /* @__PURE__ */ function(xiaohongshuAPIErrorCode)
2752
2752
  /** Cookie无效或已过期 */
2753
2753
  xiaohongshuAPIErrorCode["COOKIE"] = "INVALID_COOKIE";
2754
2754
  /** 未知错误 */
2755
- xiaohongshuAPIErrorCode[xiaohongshuAPIErrorCode["UNKNOWN"] = amagiAPIErrorCode.UNKNOWN] = "UNKNOWN";
2755
+ xiaohongshuAPIErrorCode["UNKNOWN"] = "UNKNOWN_ERROR";
2756
2756
  /** 非法请求 */
2757
2757
  xiaohongshuAPIErrorCode[xiaohongshuAPIErrorCode["ILLEGAL_REQUEST"] = 500] = "ILLEGAL_REQUEST";
2758
2758
  /** 检测到帐号异常,请稍后重试 */
@@ -3270,7 +3270,7 @@ var XBogus = class {
3270
3270
  * @returns 包含完整URL、X-Bogus值和使用的User-Agent的元组
3271
3271
  */
3272
3272
  getXBogus(url, ua) {
3273
- const parsedUrl = new URL$1.URL(url);
3273
+ const parsedUrl = new URL$2.URL(url);
3274
3274
  const urlPath = parsedUrl.pathname + parsedUrl.search;
3275
3275
  const currentUa = ua ?? this.defaultUa;
3276
3276
  const rc4EncryptedUa = this.rc4Encrypt(this.uaKey, currentUa);
@@ -10140,7 +10140,7 @@ function getApiRoute(platform, methodType) {
10140
10140
  * 构建后使用 __VERSION__,开发环境从 package.json 读取
10141
10141
  */
10142
10142
  var getVersion = () => {
10143
- return "6.1.2";
10143
+ return "6.1.3";
10144
10144
  };
10145
10145
  var VERSION = getVersion();
10146
10146
  /**
@@ -10935,6 +10935,10 @@ var QRCodeScanner = class {
10935
10935
  try {
10936
10936
  const response = await axios.get(imageUrl, { responseType: "arraybuffer" });
10937
10937
  const buffer = Buffer.from(response.data);
10938
+ if (!this.detectImageFormat(buffer)) {
10939
+ logger.debug("URL 内容不是支持的图片格式,跳过二维码扫描");
10940
+ return null;
10941
+ }
10938
10942
  return this.scanFromBuffer(buffer);
10939
10943
  } catch (error) {
10940
10944
  logger.error("识别二维码时发生错误:", error);
@@ -11254,7 +11258,7 @@ var QRCodeScanner = class {
11254
11258
  */
11255
11259
  static async parseHEIC(buffer) {
11256
11260
  try {
11257
- const decoded = await (0, import_heic_decode.default)({ buffer: buffer.buffer });
11261
+ const decoded = await (0, import_heic_decode.default)({ buffer });
11258
11262
  logger.debug(`HEIC 解析成功: ${decoded.width}x${decoded.height}`);
11259
11263
  return {
11260
11264
  width: decoded.width,
@@ -11512,23 +11516,47 @@ var Common = new class Tools {
11512
11516
  * @param e event 消息事件
11513
11517
  * @returns 被引用的消息
11514
11518
  */
11519
+ /**
11520
+ * 尝试从图片 URL 识别二维码并返回支持的平台链接
11521
+ * @param imageUrl 图片 URL
11522
+ * @param source 来源描述(用于日志)
11523
+ * @returns 识别到的平台链接,或 null
11524
+ */
11525
+ async tryScanImageQrCode(imageUrl, source) {
11526
+ try {
11527
+ logger.debug(`检测到${source}为图片,尝试识别二维码...`);
11528
+ const qrContent = await QRCodeScanner.scanFromUrl(imageUrl);
11529
+ if (qrContent && QRCodeScanner.isSupportedPlatform(qrContent)) {
11530
+ logger.debug(`从${source}二维码中识别到支持的平台链接: ${qrContent}`);
11531
+ return qrContent;
11532
+ } else if (qrContent) logger.debug(`识别到二维码内容但不是支持的平台: ${qrContent}`);
11533
+ } catch (error) {
11534
+ logger.error(`识别${source}二维码时发生错误:`, error);
11535
+ }
11536
+ return null;
11537
+ }
11515
11538
  async getReplyMessage(e) {
11516
11539
  if (e.replyId) {
11517
11540
  const reply = await e.bot.getMsg(e.contact, e.replyId);
11518
- for (const v of reply.elements) if (v.type === "text") return v.text;
11519
- else if (v.type === "json") return v.data;
11520
- else if (v.type === "image") try {
11521
- logger.debug("检测到引用消息为图片,尝试识别二维码...");
11522
- const imageUrl = v.file;
11523
- if (imageUrl) {
11524
- const qrContent = await QRCodeScanner.scanFromUrl(imageUrl);
11525
- if (qrContent && QRCodeScanner.isSupportedPlatform(qrContent)) {
11526
- logger.debug(`从图片二维码中识别到支持的平台链接: ${qrContent}`);
11527
- return qrContent;
11528
- } else if (qrContent) logger.debug(`识别到二维码内容但不是支持的平台: ${qrContent}`);
11529
- }
11530
- } catch (error) {
11531
- logger.error("识别图片二维码时发生错误:", error);
11541
+ for (const v of reply.elements) if (v.type === "text") {
11542
+ try {
11543
+ const parsed = JSON.parse(v.text);
11544
+ if (parsed.type === "markdown" && parsed.data?.content) {
11545
+ const content = parsed.data.content;
11546
+ const imageRegex = /!\[.*?\]\((.*?)\)/g;
11547
+ let match;
11548
+ while ((match = imageRegex.exec(content)) !== null) {
11549
+ const qrResult = await this.tryScanImageQrCode(match[1], "引用消息中的 markdown 图片");
11550
+ if (qrResult) return qrResult;
11551
+ }
11552
+ return content;
11553
+ }
11554
+ } catch {}
11555
+ return v.text;
11556
+ } else if (v.type === "json") return v.data;
11557
+ else if (v.type === "image") {
11558
+ const qrResult = await this.tryScanImageQrCode(v.file, "引用消息");
11559
+ if (qrResult) return qrResult;
11532
11560
  }
11533
11561
  }
11534
11562
  return "";
@@ -14561,7 +14589,7 @@ var ViteLogo = ({ className = "w-auto h-12" }) => /* @__PURE__ */ (0, import_jsx
14561
14589
  * @param props 组件属性
14562
14590
  * @returns JSX元素
14563
14591
  */
14564
- var DefaultLayout = ({ children, version, data, scale = 3, className = "", style = {} }) => {
14592
+ var DefaultLayout = ({ children, version, data, scale = 3, className = "", style = {}, watermarkTextBitSize }) => {
14565
14593
  const { useDarkTheme } = data;
14566
14594
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
14567
14595
  className: clsx("w-360 shrink-0 bg-background text-foreground font-[HarmonyOSHans-Regular]", useDarkTheme ? "dark" : "light", className),
@@ -14575,9 +14603,9 @@ var DefaultLayout = ({ children, version, data, scale = 3, className = "", style
14575
14603
  maxWidth: "1440px",
14576
14604
  ...style
14577
14605
  },
14578
- children: [children, version ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
14606
+ children: [children, version ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
14579
14607
  className: "relative z-50 pt-32 pb-20 text-foreground/80",
14580
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
14608
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
14581
14609
  className: "flex relative justify-center items-center space-x-8",
14582
14610
  children: [
14583
14611
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -14697,8 +14725,20 @@ var DefaultLayout = ({ children, version, data, scale = 3, className = "", style
14697
14725
  })]
14698
14726
  })] })
14699
14727
  ]
14728
+ }), typeof watermarkTextBitSize === "number" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
14729
+ className: "flex justify-center",
14730
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
14731
+ className: "text-xs font-mono text-foreground/30",
14732
+ children: ["Restore ID: ", watermarkTextBitSize]
14733
+ })
14734
+ })]
14735
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
14736
+ className: "flex items-center justify-center h-24",
14737
+ children: typeof watermarkTextBitSize === "number" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
14738
+ className: "text-xs font-mono text-foreground/30",
14739
+ children: ["Restore ID: ", watermarkTextBitSize]
14700
14740
  })
14701
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-24" })]
14741
+ })]
14702
14742
  });
14703
14743
  };
14704
14744
  //#endregion
@@ -15337,11 +15377,14 @@ var createParagraphNode = (nodes) => ({
15337
15377
  nodes
15338
15378
  });
15339
15379
  /** 创建图片节点。 */
15340
- var createImageNode = (src, alt) => ({
15380
+ var createImageNode = (src, alt, caption) => ({
15341
15381
  type: "image",
15342
15382
  src,
15343
- alt
15383
+ alt,
15384
+ caption
15344
15385
  });
15386
+ /** 创建水平分隔线节点。 */
15387
+ var createHorizontalRuleNode = () => ({ type: "horizontalRule" });
15345
15388
  /** 创建引用块节点。 */
15346
15389
  var createBlockquoteNode = (nodes) => ({
15347
15390
  type: "blockquote",
@@ -15416,7 +15459,8 @@ var extractRichTextPlainText = (document) => {
15416
15459
  case "blockquote":
15417
15460
  case "listItem": return node.nodes.map(extractFromNode).join("");
15418
15461
  case "list": return node.items.map(extractFromNode).join("");
15419
- case "lineBreak": return "";
15462
+ case "lineBreak":
15463
+ case "horizontalRule": return "";
15420
15464
  case "image": return "";
15421
15465
  case "codeBlock": return node.content;
15422
15466
  case "linkCard": return node.title;
@@ -15764,15 +15808,24 @@ var renderNodeToReact = (node, index, options) => {
15764
15808
  case "image": {
15765
15809
  const safeSrc = sanitizeImageSource(node.src);
15766
15810
  if (!safeSrc) return null;
15767
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
15768
- className: "rounded-4xl",
15769
- src: safeSrc,
15770
- alt: node.alt || "",
15771
- referrerPolicy: "no-referrer",
15772
- crossOrigin: "anonymous",
15773
- "data-richtext-node": "image"
15811
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
15812
+ "data-richtext-node": "image",
15813
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
15814
+ className: "rounded-4xl",
15815
+ src: safeSrc,
15816
+ alt: node.alt || "",
15817
+ referrerPolicy: "no-referrer",
15818
+ crossOrigin: "anonymous"
15819
+ }), node.caption && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
15820
+ className: "mt-6 text-center text-[36px] text-foreground/60 select-text",
15821
+ children: node.caption
15822
+ })]
15774
15823
  }, `image-${index}`);
15775
15824
  }
15825
+ case "horizontalRule": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
15826
+ className: "my-16 w-full h-px bg-border",
15827
+ "data-richtext-node": "horizontalRule"
15828
+ }, `hr-${index}`);
15776
15829
  case "blockquote": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("blockquote", {
15777
15830
  "data-richtext-node": "blockquote",
15778
15831
  children: node.nodes.map((child, childIndex) => renderNodeToReact(child, childIndex, options))
@@ -15989,6 +16042,28 @@ var CoinIcon = ({ className, size, variant = "solid" }) => {
15989
16042
  })
15990
16043
  });
15991
16044
  };
16045
+ /** B站官方浏览图标 */
16046
+ var ViewIcon = ({ className, size, variant = "solid" }) => {
16047
+ if (variant === "line") return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
16048
+ viewBox: "0 0 16 16",
16049
+ xmlns: "http://www.w3.org/2000/svg",
16050
+ className,
16051
+ fill: "currentColor",
16052
+ width: size,
16053
+ height: size,
16054
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M8 3.3320333333333334C6.321186666666667 3.3320333333333334 4.855333333333333 3.4174399999999996 3.820593333333333 3.5013466666666666C3.1014733333333333 3.5596599999999996 2.5440733333333334 4.109013333333333 2.48 4.821693333333333C2.4040466666666664 5.666533333333334 2.333333333333333 6.780666666666666 2.333333333333333 7.998666666666666C2.333333333333333 9.216733333333334 2.4040466666666664 10.330866666666665 2.48 11.175699999999999C2.5440733333333334 11.888366666666666 3.1014733333333333 12.437733333333334 3.820593333333333 12.496066666666666C4.855333333333333 12.579933333333333 6.321186666666667 12.665333333333333 8 12.665333333333333C9.678999999999998 12.665333333333333 11.144933333333334 12.579933333333333 12.179733333333333 12.496033333333333C12.898733333333332 12.4377 13.456 11.888533333333331 13.520066666666667 11.176033333333333C13.595999999999998 10.331533333333333 13.666666666666666 9.217633333333332 13.666666666666666 7.998666666666666C13.666666666666666 6.779766666666667 13.595999999999998 5.665846666666667 13.520066666666667 4.821366666666666C13.456 4.108866666666666 12.898733333333332 3.55968 12.179733333333333 3.5013666666666663C11.144933333333334 3.417453333333333 9.678999999999998 3.3320333333333334 8 3.3320333333333334zM3.7397666666666667 2.50462C4.794879999999999 2.41906 6.288386666666666 2.3320333333333334 8 2.3320333333333334C9.7118 2.3320333333333334 11.2054 2.4190733333333334 12.260533333333331 2.5046399999999998C13.458733333333331 2.6018133333333333 14.407866666666665 3.5285199999999994 14.516066666666667 4.73182C14.593933333333332 5.597933333333334 14.666666666666666 6.7427 14.666666666666666 7.998666666666666C14.666666666666666 9.2547 14.593933333333332 10.399466666666665 14.516066666666667 11.2656C14.407866666666665 12.468866666666665 13.458733333333331 13.395566666666667 12.260533333333331 13.492766666666665C11.2054 13.578333333333333 9.7118 13.665333333333333 8 13.665333333333333C6.288386666666666 13.665333333333333 4.794879999999999 13.578333333333333 3.7397666666666667 13.492799999999999C2.541373333333333 13.395599999999998 1.5922066666666668 12.468633333333333 1.4840200000000001 11.265266666666665C1.4061199999999998 10.3988 1.3333333333333333 9.253866666666667 1.3333333333333333 7.998666666666666C1.3333333333333333 6.743533333333333 1.4061199999999998 5.598579999999999 1.4840200000000001 4.732153333333333C1.5922066666666668 3.5287466666666667 2.541373333333333 2.601793333333333 3.7397666666666667 2.50462z" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M9.8092 7.3125C10.338433333333333 7.618066666666666 10.338433333333333 8.382 9.809166666666666 8.687533333333333L7.690799999999999 9.910599999999999C7.161566666666666 10.216133333333332 6.5 9.8342 6.500006666666666 9.223066666666666L6.500006666666666 6.776999999999999C6.500006666666666 6.165873333333334 7.161566666666666 5.783913333333333 7.690799999999999 6.089479999999999L9.8092 7.3125z" })]
16055
+ });
16056
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
16057
+ viewBox: "0 0 16 16",
16058
+ xmlns: "http://www.w3.org/2000/svg",
16059
+ className,
16060
+ fill: "currentColor",
16061
+ fillRule: "evenodd",
16062
+ width: size,
16063
+ height: size,
16064
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3.7397666666666667 2.50462C4.794879999999999 2.41906 6.288386666666666 2.3320333333333334 8 2.3320333333333334C9.7118 2.3320333333333334 11.2054 2.4190733333333334 12.260533333333331 2.5046399999999998C13.458733333333331 2.6018133333333333 14.407866666666665 3.5285199999999994 14.516066666666667 4.73182C14.593933333333332 5.597933333333334 14.666666666666666 6.7427 14.666666666666666 7.998666666666666C14.666666666666666 9.2547 14.593933333333332 10.399466666666665 14.516066666666667 11.2656C14.407866666666665 12.468866666666665 13.458733333333331 13.395566666666667 12.260533333333331 13.492766666666665C11.2054 13.578333333333333 9.7118 13.665333333333333 8 13.665333333333333C6.288386666666666 13.665333333333333 4.794879999999999 13.578333333333333 3.7397666666666667 13.492799999999999C2.541373333333333 13.395599999999998 1.5922066666666668 12.468633333333333 1.4840200000000001 11.265266666666665C1.4061199999999998 10.3988 1.3333333333333333 9.253866666666667 1.3333333333333333 7.998666666666666C1.3333333333333333 6.743533333333333 1.4061199999999998 5.598579999999999 1.4840200000000001 4.732153333333333C1.5922066666666668 3.5287466666666667 2.541373333333333 2.601793333333333 3.7397666666666667 2.50462z M9.8092 7.3125L7.6908 6.0895C7.1616 5.7839 6.5 6.1659 6.5 6.777L6.5 9.2231C6.5 9.8342 7.1616 10.2161 7.6908 9.9106L9.8092 8.6875C10.3384 8.382 10.3384 7.6181 9.8092 7.3125z" })
16065
+ });
16066
+ };
15992
16067
  /** B站官方评论图标 */
15993
16068
  var CommentIcon = ({ className, size, variant = "solid" }) => {
15994
16069
  if (variant === "line") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
@@ -16112,10 +16187,10 @@ var formatBilibiliLikeCount = (count) => {
16112
16187
  };
16113
16188
  var renderBilibiliUserName = (uname, unameColor, vipstatus) => {
16114
16189
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16115
- className: "inline-block leading-[1.2]",
16190
+ className: "inline-block leading-[1.2] font-medium whitespace-nowrap",
16116
16191
  style: {
16117
16192
  color: unameColor ?? "#888",
16118
- fontWeight: vipstatus === 1 ? 700 : void 0
16193
+ fontWeight: vipstatus === 1 ? 500 : void 0
16119
16194
  },
16120
16195
  children: uname
16121
16196
  });
@@ -16944,164 +17019,323 @@ var BilibiliArticleDynamic = import_react.memo((props) => {
16944
17019
  });
16945
17020
  BilibiliArticleDynamic.displayName = "BilibiliArticleDynamic";
16946
17021
  //#endregion
16947
- //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_AV.tsx
17022
+ //#region ../template/src/components/platforms/bilibili/dynamic/CommonComponents.tsx
16948
17023
  /**
16949
- * B站视频动态头部组件
17024
+ * B站动态用户信息组件
16950
17025
  */
16951
- var BilibiliVideoDynamicHeader = () => {
16952
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
16953
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
16954
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16955
- className: "flex items-center pl-20 text-6xl text-muted",
16956
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16957
- src: "/image/bilibili/bilibili.png",
16958
- alt: "bilibili",
16959
- className: "h-auto w-120"
16960
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16961
- className: "ml-8 text-5xl select-text",
16962
- children: "你感兴趣的视频都在哔哩哔哩"
17026
+ var BilibiliDynamicUserInfo = (props) => {
17027
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17028
+ className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
17029
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17030
+ className: "flex gap-10 items-center",
17031
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17032
+ className: "relative",
17033
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17034
+ src: props.avatar_url,
17035
+ alt: "头像",
17036
+ className: "w-32 h-32 rounded-full shadow-medium",
17037
+ isCircular: true
17038
+ }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17039
+ src: props.frame,
17040
+ alt: "头像框",
17041
+ className: "absolute inset-0 transform scale-180"
17042
+ })]
17043
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17044
+ className: "flex flex-col gap-8 text-7xl",
17045
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17046
+ className: "text-6xl font-bold select-text text-foreground",
17047
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17048
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17049
+ className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
17050
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(c, {
17051
+ size: 40,
17052
+ weight: "fill"
17053
+ }), props.create_time]
17054
+ })]
16963
17055
  })]
16964
- }),
16965
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" })
16966
- ] });
17056
+ }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17057
+ className: "shrink-0",
17058
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
17059
+ })]
17060
+ });
16967
17061
  };
16968
17062
  /**
16969
- * B站视频动态内容组件
17063
+ * B站动态状态组件
16970
17064
  */
16971
- var BilibiliVideoDynamicContent = (props) => {
16972
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [props.data.image_url && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16973
- className: "flex flex-col items-center",
16974
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16975
- className: "flex overflow-hidden relative flex-col flex-1 items-center w-11/12 rounded-5xl shadow-large",
16976
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16977
- src: props.data.image_url,
16978
- alt: "封面",
16979
- className: "object-contain w-full h-full rounded-3xl"
16980
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16981
- className: "flex absolute bottom-12 right-16",
16982
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16983
- src: "/image/bilibili/play.svg",
16984
- alt: "播放图标",
16985
- className: "w-40 h-40"
16986
- })
16987
- })]
16988
- })
16989
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16990
- className: "flex flex-col w-full leading-relaxed px-16",
17065
+ var BilibiliDynamicStatus = (props) => {
17066
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17067
+ className: "flex flex-col gap-10 px-18 w-full leading-relaxed",
16991
17068
  children: [
16992
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16993
- className: "relative items-center text-7xl font-bold tracking-wider wrap-break-word text-foreground leading-tight",
16994
- children: props.data.text && renderRichTextToReact(props.data.text, {
16995
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16996
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16997
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16998
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16999
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17000
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17001
- })
17069
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17070
+ className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
17071
+ children: [
17072
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17073
+ className: "flex gap-2 items-center",
17074
+ children: [
17075
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, {
17076
+ size: 50,
17077
+ className: "mt-2"
17078
+ }),
17079
+ props.dianzan,
17080
+ "点赞"
17081
+ ]
17082
+ }),
17083
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
17084
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17085
+ className: "flex gap-2 items-center",
17086
+ children: [
17087
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
17088
+ props.pinglun,
17089
+ "评论"
17090
+ ]
17091
+ }),
17092
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
17093
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17094
+ className: "flex gap-2 items-center",
17095
+ children: [
17096
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
17097
+ props.share,
17098
+ "分享"
17099
+ ]
17100
+ })
17101
+ ]
17002
17102
  }),
17003
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" }),
17004
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17005
- className: "text-5xl text-muted leading-normal wrap-break-word break-keep",
17006
- children: props.data.desc && renderRichTextToReact(props.data.desc, {
17007
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17008
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17009
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17010
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17011
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17012
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17013
- })
17103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17104
+ className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
17105
+ children: [
17106
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(c, {
17107
+ size: 52,
17108
+ weight: "fill"
17109
+ }),
17110
+ "图片生成于: ",
17111
+ props.render_time
17112
+ ]
17014
17113
  }),
17015
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-30" }),
17016
17114
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17017
- className: "flex flex-col gap-15 text-foreground/70",
17115
+ className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-[#006A9E] dark:text-[#58B0D5]",
17116
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Link, { size: 46 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["https://t.bilibili.com/", props.dynamic_id] })]
17117
+ })
17118
+ ]
17119
+ });
17120
+ };
17121
+ /**
17122
+ * B站动态底部信息组件
17123
+ */
17124
+ var BilibiliDynamicFooter = (props) => {
17125
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17126
+ className: "flex justify-between items-start px-20 pb-20",
17127
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17128
+ className: "flex flex-col gap-12",
17129
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17130
+ className: "flex gap-12 items-start",
17018
17131
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17019
- className: "flex flex-col gap-8",
17020
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17021
- className: "flex gap-12 items-center text-5xl font-light tracking-normal",
17132
+ className: "relative shrink-0",
17133
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17134
+ src: props.avatar_url,
17135
+ alt: "头像",
17136
+ className: "rounded-full shadow-medium w-35 h-auto",
17137
+ isCircular: true
17138
+ }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17139
+ src: props.frame,
17140
+ alt: "头像框",
17141
+ className: "absolute inset-0 transform scale-180"
17142
+ })]
17143
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17144
+ className: "flex flex-col gap-5",
17145
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17146
+ className: "text-7xl font-bold select-text",
17147
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17148
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17149
+ className: "flex gap-2 items-center text-4xl text-muted",
17150
+ children: [props.showUidHash && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17151
+ className: "text-muted",
17152
+ children: "#"
17153
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17154
+ className: "text-muted select-text",
17155
+ children: ["UID: ", props.user_shortid]
17156
+ })]
17157
+ })]
17158
+ })]
17159
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17160
+ className: "text-3xl flex gap-6 items-center text-foreground/70",
17161
+ children: [
17162
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17163
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17022
17164
  children: [
17023
17165
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17024
- className: "flex gap-3 items-center",
17025
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17026
- className: "select-text",
17027
- children: [props.data.dianzan, "点赞"]
17028
- })]
17029
- }),
17030
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17031
- className: "flex gap-3 items-center",
17032
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17033
- className: "select-text",
17034
- children: [props.data.pinglun, "评论"]
17166
+ className: "flex gap-1 items-center",
17167
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 36 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17168
+ className: "text-muted",
17169
+ children: "获赞"
17035
17170
  })]
17036
17171
  }),
17037
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17038
- className: "flex gap-3 items-center",
17039
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17040
- className: "select-text",
17041
- children: [props.data.share, "分享"]
17042
- })]
17172
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17173
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17174
+ className: "select-text font-medium text-4xl",
17175
+ children: props.total_favorited
17043
17176
  })
17044
17177
  ]
17045
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17046
- className: "flex gap-12 items-center text-5xl font-light tracking-normal",
17178
+ }),
17179
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17180
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17047
17181
  children: [
17048
17182
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17049
- className: "flex gap-3 items-center",
17050
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CoinIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17051
- className: "select-text",
17052
- children: [props.data.coin, "硬币"]
17183
+ className: "flex gap-1 items-center",
17184
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewIcon, { size: 36 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17185
+ className: "text-muted",
17186
+ children: "关注"
17053
17187
  })]
17054
17188
  }),
17189
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17190
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17191
+ className: "select-text font-medium text-4xl",
17192
+ children: props.following_count
17193
+ })
17194
+ ]
17195
+ }),
17196
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17197
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17198
+ children: [
17055
17199
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17056
- className: "flex gap-3 items-center",
17057
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17058
- className: "select-text",
17059
- children: [props.data.view, "浏览"]
17200
+ className: "flex gap-1 items-center",
17201
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(o, {
17202
+ size: 36,
17203
+ weight: "fill"
17204
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17205
+ className: "text-muted",
17206
+ children: "粉丝"
17060
17207
  })]
17061
17208
  }),
17062
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17063
- className: "flex gap-3 items-center text-5xl font-light tracking-normal",
17064
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17065
- className: "select-text",
17066
- children: ["视频时长: ", props.data.duration_text]
17067
- })]
17209
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17210
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17211
+ className: "select-text font-medium text-4xl",
17212
+ children: props.fans
17068
17213
  })
17069
17214
  ]
17215
+ })
17216
+ ]
17217
+ })]
17218
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17219
+ className: "flex flex-col items-center gap-4",
17220
+ children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17221
+ src: props.qrCodeDataUrl,
17222
+ alt: "二维码",
17223
+ className: "h-auto w-75 rounded-2xl"
17224
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17225
+ className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
17226
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17227
+ className: "text-muted",
17228
+ children: "二维码"
17229
+ })
17230
+ })
17231
+ })]
17232
+ });
17233
+ };
17234
+ //#endregion
17235
+ //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_AV.tsx
17236
+ /**
17237
+ * B站视频内容组件
17238
+ */
17239
+ var BilibiliVideoContent = (props) => {
17240
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17241
+ className: "px-16",
17242
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17243
+ className: "px-12 py-12 rounded-8xl bg-surface-secondary",
17244
+ children: [props.data.image_url && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17245
+ className: "items-center",
17246
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17247
+ className: "flex overflow-hidden relative flex-col flex-1 items-center rounded-5xl shadow-large",
17248
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17249
+ src: props.data.image_url,
17250
+ alt: "封面",
17251
+ className: "object-contain w-full h-full rounded-3xl"
17252
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17253
+ className: "flex absolute bottom-12 right-16",
17254
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17255
+ src: "/image/bilibili/play.svg",
17256
+ alt: "播放图标",
17257
+ className: "w-40 h-40"
17258
+ })
17070
17259
  })]
17071
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17072
- className: "flex flex-col gap-4 text-4xl font-light",
17073
- children: [
17074
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17075
- className: "flex gap-3 items-center whitespace-nowrap",
17076
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17077
- className: "select-text",
17078
- children: ["发布于", props.data.create_time]
17079
- })]
17080
- }),
17081
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17082
- className: "flex gap-3 items-center whitespace-nowrap",
17083
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["图片生成于: ", format(/* @__PURE__ */ new Date(), "yyyy-MM-dd HH:mm:ss")] })]
17084
- }),
17085
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17086
- className: "flex gap-3 items-center",
17087
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17088
- className: "select-text",
17089
- children: ["动态ID: ", props.data.dynamic_id]
17090
- })]
17260
+ })
17261
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17262
+ className: "flex flex-col w-full leading-relaxed",
17263
+ children: [
17264
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17265
+ className: "relative items-center text-6xl font-bold tracking-wider wrap-break-word text-foreground leading-tight",
17266
+ children: props.data.text && renderRichTextToReact(props.data.text, {
17267
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17268
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17269
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17270
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17271
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17272
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17091
17273
  })
17092
- ]
17093
- })]
17094
- }),
17095
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-40" })
17096
- ]
17097
- })] });
17274
+ }),
17275
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" }),
17276
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17277
+ className: "text-5xl text-muted leading-normal wrap-break-word break-keep",
17278
+ children: props.data.desc && renderRichTextToReact(props.data.desc, {
17279
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17280
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17281
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17282
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17283
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17284
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17285
+ })
17286
+ }),
17287
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
17288
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17289
+ className: "flex flex-col gap-8 text-foreground/70",
17290
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17291
+ className: "flex gap-12 items-center text-5xl font-light tracking-normal",
17292
+ children: [
17293
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17294
+ className: "flex gap-3 items-center",
17295
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CoinIcon, { size: 52 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17296
+ className: "select-text",
17297
+ children: [props.data.coin, "硬币"]
17298
+ })]
17299
+ }),
17300
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17301
+ className: "flex gap-3 items-center",
17302
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewIcon, {
17303
+ size: 52,
17304
+ variant: "solid"
17305
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17306
+ className: "select-text",
17307
+ children: [props.data.view, "播放"]
17308
+ })]
17309
+ }),
17310
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17311
+ className: "flex gap-3 items-center text-5xl font-light tracking-normal",
17312
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(c, {
17313
+ size: 52,
17314
+ weight: "fill"
17315
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17316
+ className: "select-text",
17317
+ children: [
17318
+ "时长(",
17319
+ props.data.page_length,
17320
+ "P): ",
17321
+ props.data.duration_text
17322
+ ]
17323
+ })]
17324
+ })
17325
+ ]
17326
+ })
17327
+ }),
17328
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-2" })
17329
+ ]
17330
+ })]
17331
+ })
17332
+ });
17098
17333
  };
17099
17334
  /**
17100
- * B站视频动态底部信息组件
17335
+ * B站视频动态共创者组件
17101
17336
  */
17102
- var BilibiliVideoDynamicFooter = (props) => {
17337
+ var BilibiliVideoStaff = (props) => {
17103
17338
  const otherStaff = props.data.staff?.filter((member) => member.mid !== Number(props.data.user_shortid)) || [];
17104
- const currentUserRole = props.data.staff?.find((member) => member.mid === Number(props.data.user_shortid))?.title;
17105
17339
  const listRef = import_react.useRef(null);
17106
17340
  const [visibleCount, setVisibleCount] = import_react.useState(otherStaff.length);
17107
17341
  import_react.useEffect(() => {
@@ -17116,167 +17350,59 @@ var BilibiliVideoDynamicFooter = (props) => {
17116
17350
  window.addEventListener("resize", calc);
17117
17351
  return () => window.removeEventListener("resize", calc);
17118
17352
  }, [otherStaff.length]);
17119
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
17120
- otherStaff.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17121
- className: "flex flex-col px-20 w-full",
17122
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17123
- ref: listRef,
17124
- className: "flex overflow-hidden gap-8 py-1 w-full",
17125
- children: [otherStaff.slice(0, visibleCount).map((member) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17126
- className: "flex flex-col items-center min-w-42 w-42 shrink-0",
17127
- children: [
17128
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17129
- className: "flex justify-center items-center bg-white rounded-full w-30 h-30",
17130
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17131
- src: member.face,
17132
- alt: member.name,
17133
- className: "object-cover w-28 h-28 rounded-full",
17134
- isCircular: true
17135
- })
17136
- }),
17137
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17138
- className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
17139
- children: member.name
17140
- }),
17141
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17142
- className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
17143
- children: member.title
17144
- })
17145
- ]
17146
- }, member.mid)), otherStaff.length > visibleCount && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17147
- className: "flex flex-col items-center min-w-42 w-42 shrink-0",
17148
- children: [
17149
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17150
- className: "flex justify-center items-center rounded-full bg-surface-secondary w-30 h-30",
17151
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17152
- className: "text-[42px] leading-none text-muted",
17153
- children: "···"
17154
- })
17155
- }),
17156
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17157
- className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
17158
- children: [
17159
- "还有",
17160
- otherStaff.length - visibleCount,
17161
- "人"
17162
- ]
17163
- }),
17164
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17165
- className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
17166
- children: "共创"
17167
- })
17168
- ]
17169
- })]
17170
- })
17171
- }),
17172
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17173
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17174
- className: "flex justify-between items-start px-20 pb-20",
17175
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17176
- className: "flex flex-col gap-12",
17177
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17178
- className: "flex gap-12 items-start",
17179
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17180
- className: "relative shrink-0",
17181
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17182
- src: props.data.avatar_url,
17183
- alt: "头像",
17184
- className: "rounded-full shadow-medium w-35 h-auto",
17353
+ if (otherStaff.length === 0) return null;
17354
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17355
+ className: "flex flex-col px-20 w-full",
17356
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17357
+ ref: listRef,
17358
+ className: "flex overflow-hidden gap-8 py-1 w-full",
17359
+ children: [otherStaff.slice(0, visibleCount).map((member) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17360
+ className: "flex flex-col items-center min-w-42 w-42 shrink-0",
17361
+ children: [
17362
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17363
+ className: "flex justify-center items-center bg-white rounded-full w-30 h-30",
17364
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17365
+ src: member.face,
17366
+ alt: member.name,
17367
+ className: "object-cover w-28 h-28 rounded-full",
17185
17368
  isCircular: true
17186
- }), props.data.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17187
- src: props.data.frame,
17188
- alt: "头像框",
17189
- className: "absolute inset-0 transform scale-180"
17190
- })]
17191
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17192
- className: "flex flex-col gap-5",
17193
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17194
- className: "text-7xl font-bold select-text text-foreground",
17195
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.data.usernameMeta })
17196
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17197
- className: "flex gap-2 items-center text-4xl text-muted",
17198
- children: [
17199
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, { size: 32 }),
17200
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["UID: ", props.data.user_shortid] }),
17201
- currentUserRole && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17202
- className: "ml-5 px-3 py-1 rounded-xl bg-surface-secondary text-3xl",
17203
- children: currentUserRole
17204
- })
17205
- ]
17206
- })]
17207
- })]
17208
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17209
- className: "text-3xl flex gap-6 items-center text-foreground/70",
17210
- children: [
17211
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17212
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17213
- children: [
17214
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17215
- className: "flex gap-1 items-center",
17216
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17217
- className: "text-muted",
17218
- children: "获赞"
17219
- })]
17220
- }),
17221
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17222
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17223
- className: "select-text font-medium text-4xl",
17224
- children: props.data.total_favorited
17225
- })
17226
- ]
17227
- }),
17228
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17229
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17230
- children: [
17231
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17232
- className: "flex gap-1 items-center",
17233
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17234
- className: "text-muted",
17235
- children: "关注"
17236
- })]
17237
- }),
17238
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17239
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17240
- className: "select-text font-medium text-4xl",
17241
- children: props.data.following_count
17242
- })
17243
- ]
17244
- }),
17245
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17246
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17247
- children: [
17248
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17249
- className: "flex gap-1 items-center",
17250
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17251
- className: "text-muted",
17252
- children: "粉丝"
17253
- })]
17254
- }),
17255
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17256
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17257
- className: "select-text font-medium text-4xl",
17258
- children: props.data.fans
17259
- })
17260
- ]
17261
17369
  })
17262
- ]
17263
- })]
17264
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17265
- className: "flex flex-col items-center gap-4",
17266
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17267
- src: props.qrCodeDataUrl,
17268
- alt: "二维码",
17269
- className: "h-auto w-75 rounded-xl"
17270
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17271
- className: "flex justify-center items-center rounded-xl bg-surface w-100 h-100",
17272
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17273
- className: "text-muted",
17274
- children: "二维码"
17370
+ }),
17371
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17372
+ className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
17373
+ children: member.name
17374
+ }),
17375
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17376
+ className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
17377
+ children: member.title
17275
17378
  })
17276
- })
17379
+ ]
17380
+ }, member.mid)), otherStaff.length > visibleCount && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17381
+ className: "flex flex-col items-center min-w-42 w-42 shrink-0",
17382
+ children: [
17383
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17384
+ className: "flex justify-center items-center rounded-full bg-surface-secondary w-30 h-30",
17385
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17386
+ className: "text-[42px] leading-none text-muted",
17387
+ children: "···"
17388
+ })
17389
+ }),
17390
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17391
+ className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
17392
+ children: [
17393
+ "还有",
17394
+ otherStaff.length - visibleCount,
17395
+ "人"
17396
+ ]
17397
+ }),
17398
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17399
+ className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
17400
+ children: "共创"
17401
+ })
17402
+ ]
17277
17403
  })]
17278
- })
17279
- ] });
17404
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" })]
17405
+ });
17280
17406
  };
17281
17407
  /**
17282
17408
  * B站视频动态组件
@@ -17287,9 +17413,50 @@ var BilibiliVideoDynamic = import_react.memo((props) => {
17287
17413
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17288
17414
  className: "p-4",
17289
17415
  children: [
17290
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoDynamicHeader, {}),
17291
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoDynamicContent, { ...props }),
17292
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoDynamicFooter, { ...props })
17416
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
17417
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
17418
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17419
+ props.data.dynamic_text && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17420
+ className: "flex flex-col px-20 w-full leading-relaxed",
17421
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17422
+ className: "relative items-center text-5xl tracking-wider wrap-break-word text-foreground",
17423
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17424
+ className: "text-[60px] tracking-[0.5px] leading-[1.6] whitespace-pre-wrap text-foreground select-text",
17425
+ style: {
17426
+ wordBreak: "break-word",
17427
+ overflowWrap: "break-word"
17428
+ },
17429
+ children: props.data.dynamic_text.nodes.length > 0 ? renderRichTextToReact(props.data.dynamic_text, {
17430
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17431
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17432
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17433
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17434
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17435
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17436
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17437
+ className: "text-default-foreground/50",
17438
+ children: "投稿了视频"
17439
+ })
17440
+ })
17441
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" })]
17442
+ }),
17443
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoContent, { ...props }),
17444
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17445
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
17446
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: clsx(props.data.staff && props.data.staff.length > 0 && "h-23", !props.data.staff && "h-40") }),
17447
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoStaff, { ...props }),
17448
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, {
17449
+ avatar_url: props.data.avatar_url,
17450
+ frame: props.data.frame,
17451
+ usernameMeta: props.data.usernameMeta,
17452
+ user_shortid: props.data.user_shortid,
17453
+ total_favorited: props.data.total_favorited,
17454
+ following_count: props.data.following_count,
17455
+ fans: props.data.fans,
17456
+ dynamicTYPE: props.data.dynamicTYPE,
17457
+ share_url: props.data.share_url,
17458
+ qrCodeDataUrl: props.qrCodeDataUrl
17459
+ })
17293
17460
  ]
17294
17461
  })
17295
17462
  });
@@ -17303,7 +17470,7 @@ BilibiliVideoDynamic.displayName = "BilibiliVideoDynamic";
17303
17470
  var BilibiliReserveCard = ({ reserve }) => {
17304
17471
  if (!reserve) return null;
17305
17472
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17306
- className: "overflow-hidden rounded-2xl bg-surface",
17473
+ className: "overflow-hidden rounded-4xl bg-surface",
17307
17474
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17308
17475
  className: "flex gap-8 justify-between items-center px-10 py-10",
17309
17476
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -17351,7 +17518,7 @@ var BilibiliVoteCard = ({ vote }) => {
17351
17518
  if (!vote) return null;
17352
17519
  const isEnded = vote.status === 4;
17353
17520
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17354
- className: "overflow-hidden rounded-2xl bg-surface",
17521
+ className: "overflow-hidden rounded-4xl bg-surface",
17355
17522
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17356
17523
  className: "flex gap-8 items-center px-10 py-8",
17357
17524
  children: [
@@ -17456,7 +17623,7 @@ var BilibiliUgcCard = ({ ugc }) => {
17456
17623
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17457
17624
  src: ugc.cover,
17458
17625
  alt: ugc.title,
17459
- className: "h-52 w-auto rounded-2xl"
17626
+ className: "h-52 w-auto rounded-4xl"
17460
17627
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17461
17628
  className: "absolute bottom-7 right-7 px-3 py-1 rounded-lg bg-black/70 text-white text-3xl",
17462
17629
  children: ugc.duration
@@ -17477,10 +17644,10 @@ var BilibiliUgcCard = ({ ugc }) => {
17477
17644
  /**
17478
17645
  * B站相关卡片容器组件
17479
17646
  */
17480
- var BilibiliAdditionalCard = ({ additional }) => {
17647
+ var BilibiliAdditionalCard = ({ additional, gap = true, className }) => {
17481
17648
  if (!additional) return null;
17482
17649
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17483
- className: "px-20 pb-20",
17650
+ className: clsx(gap && "px-20 pb-20", className),
17484
17651
  children: [
17485
17652
  additional.type === "ADDITIONAL_TYPE_RESERVE" && additional.reserve && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliReserveCard, { reserve: additional.reserve }),
17486
17653
  additional.type === "ADDITIONAL_TYPE_VOTE" && additional.vote && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVoteCard, { vote: additional.vote }),
@@ -17492,42 +17659,6 @@ var BilibiliAdditionalCard = ({ additional }) => {
17492
17659
  //#endregion
17493
17660
  //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_DRAW.tsx
17494
17661
  /**
17495
- * B站动态用户信息组件
17496
- */
17497
- var BilibiliDynamicUserInfo$1 = (props) => {
17498
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17499
- className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
17500
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17501
- className: "flex gap-10 items-center",
17502
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17503
- className: "relative",
17504
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17505
- src: props.avatar_url,
17506
- alt: "头像",
17507
- className: "w-32 h-32 rounded-full shadow-medium",
17508
- isCircular: true
17509
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17510
- src: props.frame,
17511
- alt: "头像框",
17512
- className: "absolute inset-0 transform scale-180"
17513
- })]
17514
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17515
- className: "flex flex-col gap-8 text-7xl",
17516
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17517
- className: "text-6xl font-bold select-text text-foreground",
17518
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17519
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17520
- className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
17521
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 36 }), props.create_time]
17522
- })]
17523
- })]
17524
- }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17525
- className: "shrink-0",
17526
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
17527
- })]
17528
- });
17529
- };
17530
- /**
17531
17662
  * B站动态内容组件
17532
17663
  */
17533
17664
  var BilibiliDynamicContent = (props) => {
@@ -17656,163 +17787,6 @@ var BilibiliDynamicContent = (props) => {
17656
17787
  ] });
17657
17788
  };
17658
17789
  /**
17659
- * B站动态状态组件
17660
- */
17661
- var BilibiliDynamicStatus$1 = (props) => {
17662
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17663
- className: "flex flex-col gap-10 px-20 w-full leading-relaxed",
17664
- children: [
17665
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17666
- className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
17667
- children: [
17668
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17669
- className: "flex gap-2 items-center",
17670
- children: [
17671
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }),
17672
- props.dianzan,
17673
- "点赞"
17674
- ]
17675
- }),
17676
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
17677
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17678
- className: "flex gap-2 items-center",
17679
- children: [
17680
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
17681
- props.pinglun,
17682
- "评论"
17683
- ]
17684
- }),
17685
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
17686
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17687
- className: "flex gap-2 items-center",
17688
- children: [
17689
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
17690
- props.share,
17691
- "分享"
17692
- ]
17693
- })
17694
- ]
17695
- }),
17696
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17697
- className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
17698
- children: [
17699
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }),
17700
- "图片生成于: ",
17701
- props.render_time
17702
- ]
17703
- }),
17704
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3" })
17705
- ]
17706
- });
17707
- };
17708
- /**
17709
- * B站动态底部信息组件
17710
- */
17711
- var BilibiliDynamicFooter$1 = (props) => {
17712
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17713
- className: "flex justify-between items-start px-20 pb-20",
17714
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17715
- className: "flex flex-col gap-12",
17716
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17717
- className: "flex gap-12 items-start",
17718
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17719
- className: "relative shrink-0",
17720
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17721
- src: props.avatar_url,
17722
- alt: "头像",
17723
- className: "rounded-full shadow-medium w-35 h-auto",
17724
- isCircular: true
17725
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17726
- src: props.frame,
17727
- alt: "头像框",
17728
- className: "absolute inset-0 transform scale-180"
17729
- })]
17730
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17731
- className: "flex flex-col gap-5",
17732
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17733
- className: "text-7xl font-bold select-text",
17734
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17735
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17736
- className: "flex gap-2 items-center text-4xl text-muted",
17737
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17738
- className: "text-muted select-text",
17739
- children: ["UID: ", props.user_shortid]
17740
- })
17741
- })]
17742
- })]
17743
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17744
- className: "text-3xl flex gap-6 items-center text-foreground/70",
17745
- children: [
17746
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17747
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17748
- children: [
17749
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17750
- className: "flex gap-1 items-center",
17751
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17752
- className: "text-muted",
17753
- children: "获赞"
17754
- })]
17755
- }),
17756
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17757
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17758
- className: "select-text font-medium text-4xl",
17759
- children: props.total_favorited
17760
- })
17761
- ]
17762
- }),
17763
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17764
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17765
- children: [
17766
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17767
- className: "flex gap-1 items-center",
17768
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17769
- className: "text-muted",
17770
- children: "关注"
17771
- })]
17772
- }),
17773
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17774
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17775
- className: "select-text font-medium text-4xl",
17776
- children: props.following_count
17777
- })
17778
- ]
17779
- }),
17780
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17781
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17782
- children: [
17783
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17784
- className: "flex gap-1 items-center",
17785
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17786
- className: "text-muted",
17787
- children: "粉丝"
17788
- })]
17789
- }),
17790
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17791
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17792
- className: "select-text font-medium text-4xl",
17793
- children: props.fans
17794
- })
17795
- ]
17796
- })
17797
- ]
17798
- })]
17799
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17800
- className: "flex flex-col items-center gap-4",
17801
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17802
- src: props.qrCodeDataUrl,
17803
- alt: "二维码",
17804
- className: "h-auto w-75 rounded-2xl"
17805
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17806
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
17807
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17808
- className: "text-muted",
17809
- children: "二维码"
17810
- })
17811
- })
17812
- })]
17813
- });
17814
- };
17815
- /**
17816
17790
  * B站动态组件
17817
17791
  */
17818
17792
  var BilibiliDrawDynamic = import_react.memo((props) => {
@@ -17822,13 +17796,7 @@ var BilibiliDrawDynamic = import_react.memo((props) => {
17822
17796
  className: "p-4",
17823
17797
  children: [
17824
17798
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
17825
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo$1, {
17826
- avatar_url: props.data.avatar_url,
17827
- frame: props.data.frame,
17828
- usernameMeta: props.data.usernameMeta,
17829
- create_time: props.data.create_time,
17830
- decoration_card: props.data.decoration_card
17831
- }),
17799
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
17832
17800
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17833
17801
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicContent, {
17834
17802
  title: props.data.title,
@@ -17837,14 +17805,9 @@ var BilibiliDrawDynamic = import_react.memo((props) => {
17837
17805
  imageLayout: props.data.imageLayout,
17838
17806
  additional: props.data.additional
17839
17807
  }),
17840
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus$1, {
17841
- dianzan: props.data.dianzan,
17842
- pinglun: props.data.pinglun,
17843
- share: props.data.share,
17844
- render_time: props.data.render_time
17845
- }),
17808
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
17846
17809
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-23" }),
17847
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter$1, {
17810
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, {
17848
17811
  avatar_url: props.data.avatar_url,
17849
17812
  frame: props.data.frame,
17850
17813
  usernameMeta: props.data.usernameMeta,
@@ -17864,47 +17827,11 @@ BilibiliDrawDynamic.displayName = "BilibiliDrawDynamic";
17864
17827
  //#endregion
17865
17828
  //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_FORWARD.tsx
17866
17829
  /**
17867
- * B站转发动态用户信息组件
17868
- */
17869
- var BilibiliForwardUserInfo = (props) => {
17870
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17871
- className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
17872
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17873
- className: "flex gap-10 items-center",
17874
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17875
- className: "relative",
17876
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17877
- src: props.avatar_url,
17878
- alt: "头像",
17879
- className: "w-36 h-36 rounded-full shadow-medium",
17880
- isCircular: true
17881
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17882
- src: props.frame,
17883
- alt: "头像框",
17884
- className: "absolute inset-0 transform scale-180"
17885
- })]
17886
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17887
- className: "flex flex-col gap-8 text-7xl",
17888
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17889
- className: "text-6xl font-bold select-text text-foreground",
17890
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17891
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17892
- className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
17893
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 36 }), props.create_time]
17894
- })]
17895
- })]
17896
- }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17897
- className: "shrink-0",
17898
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
17899
- })]
17900
- });
17901
- };
17902
- /**
17903
17830
  * 原始内容用户信息组件
17904
17831
  */
17905
17832
  var OriginalUserInfo = (props) => {
17906
17833
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17907
- className: "flex justify-between items-center pt-5 pb-10 pl-10 pr-0",
17834
+ className: "flex justify-between items-center pt-6 pb-10 pl-6 pr-0",
17908
17835
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17909
17836
  className: "flex gap-10 items-center min-w-0",
17910
17837
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -17994,7 +17921,7 @@ var OriginalAVContent = ({ content }) => {
17994
17921
  */
17995
17922
  var OriginalDrawContent = ({ content }) => {
17996
17923
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17997
- className: "px-12 py-8 mt-4 w-full rounded-8xl bg-surface-secondary",
17924
+ className: "px-12 py-12 mt-4 w-full rounded-8xl bg-surface-secondary",
17998
17925
  children: [
17999
17926
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
18000
17927
  avatar_url: content.avatar_url,
@@ -18026,7 +17953,7 @@ var OriginalDrawContent = ({ content }) => {
18026
17953
  })
18027
17954
  }),
18028
17955
  content.image_url && content.image_url.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18029
- className: "flex justify-center py-11 pb-4",
17956
+ className: "flex justify-center py-11 pb-0",
18030
17957
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18031
17958
  className: "flex overflow-hidden flex-col items-center w-full rounded-4xl shadow-large",
18032
17959
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
@@ -18035,9 +17962,9 @@ var OriginalDrawContent = ({ content }) => {
18035
17962
  className: "object-cover w-full h-full rounded-6"
18036
17963
  })
18037
17964
  })
18038
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18039
- className: `grid gap-3 p-4 ${content.image_url?.length === 4 ? "grid-cols-2" : "grid-cols-3"}`,
18040
- children: [content.image_url?.map((img, index) => {
17965
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17966
+ className: `grid gap-3 ${content.image_url?.length === 4 ? "grid-cols-2" : "grid-cols-3"}`,
17967
+ children: content.image_url?.map((img, index) => {
18041
17968
  const total = content.image_url?.length || 0;
18042
17969
  const cols = total === 4 ? 2 : 3;
18043
17970
  const row = Math.floor(index / cols);
@@ -18060,10 +17987,10 @@ var OriginalDrawContent = ({ content }) => {
18060
17987
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18061
17988
  src: img.image_src,
18062
17989
  alt: `图片${index + 1}`,
18063
- className: "object-cover absolute top-0 left-0 w-full h-full"
17990
+ className: "object-cover w-full h-full"
18064
17991
  })
18065
17992
  }, index);
18066
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "col-span-full h-2" })]
17993
+ })
18067
17994
  })
18068
17995
  ]
18069
17996
  });
@@ -18074,27 +18001,35 @@ var OriginalDrawContent = ({ content }) => {
18074
18001
  var OriginalWordContent = ({ content }) => {
18075
18002
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18076
18003
  className: "px-12 py-8 mt-4 w-full rounded-8xl bg-surface-secondary",
18077
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
18078
- avatar_url: content.avatar_url,
18079
- frame: content.frame,
18080
- usernameMeta: content.usernameMeta,
18081
- create_time: content.create_time,
18082
- decoration_card: content.decoration_card
18083
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18084
- className: "py-4",
18085
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18086
- className: "text-5xl leading-relaxed text-foreground wrap-break-word",
18087
- children: content.text && renderRichTextToReact(content.text, {
18088
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18089
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18090
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18091
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18092
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18093
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18094
- iconScale: .8
18004
+ children: [
18005
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
18006
+ avatar_url: content.avatar_url,
18007
+ frame: content.frame,
18008
+ usernameMeta: content.usernameMeta,
18009
+ create_time: content.create_time,
18010
+ decoration_card: content.decoration_card
18011
+ }),
18012
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18013
+ className: "py-4",
18014
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18015
+ className: "text-5xl leading-relaxed text-foreground wrap-break-word",
18016
+ children: content.text && renderRichTextToReact(content.text, {
18017
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18018
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18019
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18020
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18021
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18022
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18023
+ iconScale: .8
18024
+ })
18095
18025
  })
18026
+ }),
18027
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliAdditionalCard, {
18028
+ additional: content.additional,
18029
+ gap: false,
18030
+ className: "pb-4"
18096
18031
  })
18097
- })]
18032
+ ]
18098
18033
  });
18099
18034
  };
18100
18035
  /**
@@ -18194,163 +18129,6 @@ var BilibiliForwardContent = (props) => {
18194
18129
  ] });
18195
18130
  };
18196
18131
  /**
18197
- * B站转发动态状态组件
18198
- */
18199
- var BilibiliForwardStatus = (props) => {
18200
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18201
- className: "flex flex-col gap-10 px-20 w-full leading-relaxed",
18202
- children: [
18203
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18204
- className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
18205
- children: [
18206
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18207
- className: "flex gap-2 items-center",
18208
- children: [
18209
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }),
18210
- props.dianzan,
18211
- "点赞"
18212
- ]
18213
- }),
18214
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
18215
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18216
- className: "flex gap-2 items-center",
18217
- children: [
18218
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
18219
- props.pinglun,
18220
- "评论"
18221
- ]
18222
- }),
18223
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
18224
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18225
- className: "flex gap-2 items-center",
18226
- children: [
18227
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
18228
- props.share,
18229
- "分享"
18230
- ]
18231
- })
18232
- ]
18233
- }),
18234
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18235
- className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
18236
- children: [
18237
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }),
18238
- "图片生成于: ",
18239
- props.render_time
18240
- ]
18241
- }),
18242
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3" })
18243
- ]
18244
- });
18245
- };
18246
- /**
18247
- * B站转发动态底部信息组件
18248
- */
18249
- var BilibiliForwardFooter = (props) => {
18250
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18251
- className: "flex justify-between items-start px-20 pb-20",
18252
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18253
- className: "flex flex-col gap-12",
18254
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18255
- className: "flex gap-12 items-start",
18256
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18257
- className: "relative shrink-0",
18258
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18259
- src: props.avatar_url,
18260
- alt: "头像",
18261
- className: "rounded-full shadow-medium w-35 h-auto",
18262
- isCircular: true
18263
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18264
- src: props.frame,
18265
- alt: "头像框",
18266
- className: "absolute inset-0 transform scale-180"
18267
- })]
18268
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18269
- className: "flex flex-col gap-5",
18270
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18271
- className: "text-7xl font-bold select-text text-foreground",
18272
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
18273
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18274
- className: "flex gap-2 items-center text-4xl text-muted",
18275
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
18276
- className: "select-text",
18277
- children: ["UID: ", props.user_shortid]
18278
- })]
18279
- })]
18280
- })]
18281
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18282
- className: "text-3xl flex gap-6 items-center text-foreground/70",
18283
- children: [
18284
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18285
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
18286
- children: [
18287
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18288
- className: "flex gap-1 items-center",
18289
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18290
- className: "text-muted",
18291
- children: "获赞"
18292
- })]
18293
- }),
18294
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
18295
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18296
- className: "select-text font-medium text-4xl",
18297
- children: props.total_favorited
18298
- })
18299
- ]
18300
- }),
18301
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18302
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
18303
- children: [
18304
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18305
- className: "flex gap-1 items-center",
18306
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18307
- className: "text-muted",
18308
- children: "关注"
18309
- })]
18310
- }),
18311
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
18312
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18313
- className: "select-text font-medium text-4xl",
18314
- children: props.following_count
18315
- })
18316
- ]
18317
- }),
18318
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18319
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
18320
- children: [
18321
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18322
- className: "flex gap-1 items-center",
18323
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18324
- className: "text-muted",
18325
- children: "粉丝"
18326
- })]
18327
- }),
18328
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
18329
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18330
- className: "select-text font-medium text-4xl",
18331
- children: props.fans
18332
- })
18333
- ]
18334
- })
18335
- ]
18336
- })]
18337
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18338
- className: "flex flex-col items-center gap-4",
18339
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
18340
- src: props.qrCodeDataUrl,
18341
- alt: "二维码",
18342
- className: "h-auto w-75 rounded-2xl"
18343
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18344
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
18345
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18346
- className: "text-muted",
18347
- children: "二维码"
18348
- })
18349
- })
18350
- })]
18351
- });
18352
- };
18353
- /**
18354
18132
  * B站转发动态组件
18355
18133
  */
18356
18134
  var BilibiliForwardDynamic = import_react.memo((props) => {
@@ -18359,25 +18137,14 @@ var BilibiliForwardDynamic = import_react.memo((props) => {
18359
18137
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18360
18138
  className: "p-4",
18361
18139
  children: [
18362
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
18363
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardUserInfo, {
18364
- avatar_url: props.data.avatar_url,
18365
- frame: props.data.frame,
18366
- usernameMeta: props.data.usernameMeta,
18367
- create_time: props.data.create_time,
18368
- decoration_card: props.data.decoration_card
18369
- }),
18140
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
18141
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
18370
18142
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
18371
18143
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardContent, { ...props.data }),
18372
18144
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
18373
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardStatus, {
18374
- dianzan: props.data.dianzan,
18375
- pinglun: props.data.pinglun,
18376
- share: props.data.share,
18377
- render_time: props.data.render_time
18378
- }),
18145
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
18379
18146
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-23" }),
18380
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardFooter, {
18147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, {
18381
18148
  avatar_url: props.data.avatar_url,
18382
18149
  frame: props.data.frame,
18383
18150
  usernameMeta: props.data.usernameMeta,
@@ -18387,7 +18154,8 @@ var BilibiliForwardDynamic = import_react.memo((props) => {
18387
18154
  fans: props.data.fans,
18388
18155
  dynamicTYPE: props.data.dynamicTYPE,
18389
18156
  share_url: props.data.share_url,
18390
- qrCodeDataUrl: props.qrCodeDataUrl
18157
+ qrCodeDataUrl: props.qrCodeDataUrl,
18158
+ showUidHash: true
18391
18159
  })
18392
18160
  ]
18393
18161
  })
@@ -18929,42 +18697,6 @@ BilibiliLiveDynamic.displayName = "BilibiliLiveDynamic";
18929
18697
  //#endregion
18930
18698
  //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_WORD.tsx
18931
18699
  /**
18932
- * B站动态用户信息组件
18933
- */
18934
- var BilibiliDynamicUserInfo = (props) => {
18935
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18936
- className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
18937
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18938
- className: "flex gap-10 items-center",
18939
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18940
- className: "relative",
18941
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18942
- src: props.avatar_url,
18943
- alt: "头像",
18944
- className: "w-32 h-32 rounded-full shadow-medium",
18945
- isCircular: true
18946
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18947
- src: props.frame,
18948
- alt: "头像框",
18949
- className: "absolute inset-0 transform scale-180"
18950
- })]
18951
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18952
- className: "flex flex-col gap-8 text-7xl",
18953
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18954
- className: "text-6xl font-bold select-text text-foreground",
18955
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
18956
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18957
- className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
18958
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 36 }), props.create_time]
18959
- })]
18960
- })]
18961
- }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18962
- className: "shrink-0",
18963
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
18964
- })]
18965
- });
18966
- };
18967
- /**
18968
18700
  * B站纯文动态内容组件
18969
18701
  */
18970
18702
  var BilibiliWordContent = (props) => {
@@ -18988,163 +18720,6 @@ var BilibiliWordContent = (props) => {
18988
18720
  }), props.additional && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliAdditionalCard, { additional: props.additional })] });
18989
18721
  };
18990
18722
  /**
18991
- * B站动态状态组件
18992
- */
18993
- var BilibiliDynamicStatus = (props) => {
18994
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18995
- className: "flex flex-col gap-10 px-20 w-full leading-relaxed",
18996
- children: [
18997
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18998
- className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
18999
- children: [
19000
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19001
- className: "flex gap-2 items-center",
19002
- children: [
19003
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }),
19004
- props.dianzan,
19005
- "点赞"
19006
- ]
19007
- }),
19008
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
19009
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19010
- className: "flex gap-2 items-center",
19011
- children: [
19012
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
19013
- props.pinglun,
19014
- "评论"
19015
- ]
19016
- }),
19017
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
19018
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19019
- className: "flex gap-2 items-center",
19020
- children: [
19021
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
19022
- props.share,
19023
- "分享"
19024
- ]
19025
- })
19026
- ]
19027
- }),
19028
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19029
- className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
19030
- children: [
19031
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }),
19032
- "图片生成于: ",
19033
- props.render_time
19034
- ]
19035
- }),
19036
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3" })
19037
- ]
19038
- });
19039
- };
19040
- /**
19041
- * B站动态底部信息组件
19042
- */
19043
- var BilibiliDynamicFooter = (props) => {
19044
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19045
- className: "flex justify-between items-start px-20 pb-20",
19046
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19047
- className: "flex flex-col gap-12",
19048
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19049
- className: "flex gap-12 items-start",
19050
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19051
- className: "relative shrink-0",
19052
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
19053
- src: props.avatar_url,
19054
- alt: "头像",
19055
- className: "rounded-full shadow-medium w-35 h-auto",
19056
- isCircular: true
19057
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
19058
- src: props.frame,
19059
- alt: "头像框",
19060
- className: "absolute inset-0 transform scale-180"
19061
- })]
19062
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19063
- className: "flex flex-col gap-5",
19064
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19065
- className: "text-7xl font-bold select-text text-foreground",
19066
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
19067
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19068
- className: "flex gap-2 items-center text-4xl text-muted",
19069
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
19070
- className: "select-text",
19071
- children: ["UID: ", props.user_shortid]
19072
- })
19073
- })]
19074
- })]
19075
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19076
- className: "text-3xl flex gap-6 items-center text-foreground/70",
19077
- children: [
19078
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19079
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
19080
- children: [
19081
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19082
- className: "flex gap-1 items-center",
19083
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19084
- className: "text-muted",
19085
- children: "获赞"
19086
- })]
19087
- }),
19088
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
19089
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19090
- className: "select-text font-medium text-4xl",
19091
- children: props.total_favorited
19092
- })
19093
- ]
19094
- }),
19095
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19096
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
19097
- children: [
19098
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19099
- className: "flex gap-1 items-center",
19100
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19101
- className: "text-muted",
19102
- children: "关注"
19103
- })]
19104
- }),
19105
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
19106
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19107
- className: "select-text font-medium text-4xl",
19108
- children: props.following_count
19109
- })
19110
- ]
19111
- }),
19112
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19113
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
19114
- children: [
19115
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19116
- className: "flex gap-1 items-center",
19117
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19118
- className: "text-muted",
19119
- children: "粉丝"
19120
- })]
19121
- }),
19122
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
19123
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19124
- className: "select-text font-medium text-4xl",
19125
- children: props.fans
19126
- })
19127
- ]
19128
- })
19129
- ]
19130
- })]
19131
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19132
- className: "flex flex-col items-center gap-4",
19133
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
19134
- src: props.qrCodeDataUrl,
19135
- alt: "二维码",
19136
- className: "h-auto w-75 rounded-2xl"
19137
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19138
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
19139
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19140
- className: "text-muted",
19141
- children: "二维码"
19142
- })
19143
- })
19144
- })]
19145
- });
19146
- };
19147
- /**
19148
18723
  * B站纯文动态组件
19149
18724
  */
19150
18725
  var BilibiliWordDynamic = import_react.memo((props) => {
@@ -19154,24 +18729,13 @@ var BilibiliWordDynamic = import_react.memo((props) => {
19154
18729
  className: "p-4",
19155
18730
  children: [
19156
18731
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
19157
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, {
19158
- avatar_url: props.data.avatar_url,
19159
- frame: props.data.frame,
19160
- usernameMeta: props.data.usernameMeta,
19161
- create_time: props.data.create_time,
19162
- decoration_card: props.data.decoration_card
19163
- }),
18732
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
19164
18733
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
19165
18734
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliWordContent, {
19166
18735
  text: props.data.text,
19167
18736
  additional: props.data.additional
19168
18737
  }),
19169
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, {
19170
- dianzan: props.data.dianzan,
19171
- pinglun: props.data.pinglun,
19172
- share: props.data.share,
19173
- render_time: props.data.render_time
19174
- }),
18738
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
19175
18739
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-23" }),
19176
18740
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, {
19177
18741
  avatar_url: props.data.avatar_url,
@@ -26913,6 +26477,13 @@ var iconRegistry = {
26913
26477
  "simple-icons:bilibili": SiBilibili,
26914
26478
  "simple-icons:openai": Sparkles,
26915
26479
  "simple-icons:anthropic": SiAnthropic,
26480
+ "simple-icons:googlephotos": SiGooglephotos,
26481
+ "simple-icons:xiaomi": SiXiaomi,
26482
+ "simple-icons:oppo": SiOppo,
26483
+ "simple-icons:huawei": SiHuawei,
26484
+ "simple-icons:honor": SiHonor,
26485
+ "simple-icons:vivo": SiVivo,
26486
+ "simple-icons:samsung": SiSamsung,
26916
26487
  "tabler:message-circle": MessageCircle,
26917
26488
  "tabler:scan": ScanLine,
26918
26489
  "ph:play-fill": n,
@@ -27184,6 +26755,435 @@ var Help = import_react.memo((props) => {
27184
26755
  });
27185
26756
  Help.displayName = "Help";
27186
26757
  //#endregion
26758
+ //#region ../template/src/components/platforms/other/LivePhotoTip.tsx
26759
+ /**
26760
+ * Google Photos 彩色官方 Logo
26761
+ */
26762
+ var GooglePhotosIcon = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
26763
+ className,
26764
+ viewBox: "0 0 32 32",
26765
+ xmlns: "http://www.w3.org/2000/svg",
26766
+ children: [
26767
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26768
+ d: "M4,16a6,6,0,0,1,12,0Z",
26769
+ fill: "#ffba00"
26770
+ }),
26771
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26772
+ d: "M22,10a6,6,0,0,1-6,6V4a6,6,0,0,1,6,6",
26773
+ fill: "#ea4435"
26774
+ }),
26775
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26776
+ d: "M28,16a6,6,0,0,1-12,0Z",
26777
+ fill: "#0066da"
26778
+ }),
26779
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26780
+ d: "M10,22a6,6,0,0,1,6-6V28a6,6,0,0,1-6-6",
26781
+ fill: "#00ac47"
26782
+ })
26783
+ ]
26784
+ });
26785
+ var statusConfig = {
26786
+ verified: {
26787
+ icon: Check,
26788
+ color: "#22c55e",
26789
+ label: "实测可用"
26790
+ },
26791
+ untested: {
26792
+ icon: CircleQuestionMark,
26793
+ color: "#f59e0b",
26794
+ label: "理论支持"
26795
+ },
26796
+ unsupported: {
26797
+ icon: X,
26798
+ color: "#ef4444",
26799
+ label: "不支持"
26800
+ }
26801
+ };
26802
+ /**
26803
+ * kkk Logo SVG
26804
+ */
26805
+ var KkkLogo = ({ className, color }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
26806
+ xmlns: "http://www.w3.org/2000/svg",
26807
+ viewBox: "0 0 230 221",
26808
+ className,
26809
+ style: { color },
26810
+ children: [
26811
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26812
+ d: "M132.75,87.37l-53.72-53.37c-4.66-4.63-1.38-12.58,5.18-12.58h115.13c6.57,0,9.84,7.95,5.18,12.58l-53.72,53.37c-4.99,4.96-13.06,4.96-18.05,0Z",
26813
+ fill: "currentColor"
26814
+ }),
26815
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26816
+ d: "M28.49,186.89l.03-51.42c-.02-6.57,7.92-9.87,12.56-5.23l57.02,57.02c4.64,4.64,1.34,12.41-5.23,12.39h-51.42c-7.04-.02-12.94-5.72-12.96-12.76Z",
26817
+ fill: "currentColor"
26818
+ }),
26819
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
26820
+ d: "M41.54,23.68l163.04,163.05c4.78,4.78,1.39,12.95-5.36,12.94h-47.88c-9.69,0-18.99-3.86-25.84-10.71L39.3,102.75c-6.85-6.85-10.7-16.15-10.7-25.84V29.04c0-6.76,8.16-10.14,12.94-5.36Z",
26821
+ fill: "currentColor"
26822
+ })
26823
+ ]
26824
+ });
26825
+ function BrandCard({ brand, isDark }) {
26826
+ const StatusIcon = statusConfig[brand.status].icon;
26827
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
26828
+ className: "flex flex-col items-center gap-3",
26829
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26830
+ className: "relative flex items-center justify-center w-75 h-75 rounded-3xl",
26831
+ style: { background: isDark ? "radial-gradient(circle, " + brand.color + "12 0%, transparent 70%)" : "radial-gradient(circle, " + brand.color + "08 0%, transparent 70%)" },
26832
+ children: [brand.icon, /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26833
+ className: "absolute top-4 right-4 flex items-center gap-1.5 px-5 py-2.5 rounded-full",
26834
+ style: { backgroundColor: statusConfig[brand.status].color + "20" },
26835
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, {
26836
+ className: "w-5 h-auto",
26837
+ style: { color: statusConfig[brand.status].color }
26838
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
26839
+ className: "text-lg font-bold",
26840
+ style: { color: statusConfig[brand.status].color },
26841
+ children: statusConfig[brand.status].label
26842
+ })]
26843
+ })]
26844
+ })
26845
+ });
26846
+ }
26847
+ function UnsupportedBrandCard({ brand, isDark }) {
26848
+ const StatusIcon = statusConfig[brand.status].icon;
26849
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26850
+ className: "flex flex-col items-center gap-2 opacity-50",
26851
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
26852
+ className: "relative flex items-center justify-center w-40 h-40 rounded-2xl",
26853
+ style: { background: isDark ? "radial-gradient(circle, " + brand.color + "08 0%, transparent 70%)" : "radial-gradient(circle, " + brand.color + "05 0%, transparent 70%)" },
26854
+ children: brand.icon
26855
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26856
+ className: "flex items-center gap-1",
26857
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(StatusIcon, {
26858
+ className: "w-5 h-auto",
26859
+ style: { color: statusConfig[brand.status].color }
26860
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
26861
+ className: "text-md font-bold",
26862
+ style: { color: statusConfig[brand.status].color },
26863
+ children: statusConfig[brand.status].label
26864
+ })]
26865
+ })]
26866
+ });
26867
+ }
26868
+ /**
26869
+ * 实况图提示组件 - 正方形,Vercel 黑白风格
26870
+ */
26871
+ var LivePhotoTip = import_react.memo((props) => {
26872
+ const isDark = props.data.useDarkTheme ?? false;
26873
+ const bgColor = isDark ? "#000000" : "#ffffff";
26874
+ const primaryColor = isDark ? "#ffffff" : "#000000";
26875
+ const secondaryColor = isDark ? "#888888" : "#666666";
26876
+ const mutedColor = isDark ? "rgba(255,255,255,0.5)" : "rgba(0,0,0,0.5)";
26877
+ const accentColor = isDark ? "#ffffff" : "#000000";
26878
+ const glow1 = "radial-gradient(ellipse at 30% 40%, " + (isDark ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.06)") + " 0%, transparent 70%)";
26879
+ const glow2 = "radial-gradient(ellipse at 70% 60%, " + (isDark ? "rgba(128,128,128,0.1)" : "rgba(128,128,128,0.08)") + " 0%, transparent 70%)";
26880
+ const noiseOpacity = isDark ? .04 : .06;
26881
+ const appleColor = isDark ? "#ffffff" : "#000000";
26882
+ const supportedBrands = [
26883
+ {
26884
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GooglePhotosIcon, { className: "w-36 h-auto" }),
26885
+ color: "#4285F4",
26886
+ status: "verified"
26887
+ },
26888
+ {
26889
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiXiaomi, {
26890
+ className: "w-28 h-auto",
26891
+ style: { color: "#FF6900" }
26892
+ }),
26893
+ color: "#FF6900",
26894
+ status: "verified"
26895
+ },
26896
+ {
26897
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiSamsung, {
26898
+ className: "w-68 h-auto",
26899
+ style: { color: "#1428A0" }
26900
+ }),
26901
+ color: "#1428A0",
26902
+ status: "verified"
26903
+ },
26904
+ {
26905
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiOppo, { className: "w-58 h-auto" }),
26906
+ color: "#009B77",
26907
+ status: "verified"
26908
+ },
26909
+ {
26910
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiOneplus, {
26911
+ className: "w-26 h-auto",
26912
+ style: { color: "#F50514" }
26913
+ }),
26914
+ color: "#F50514",
26915
+ status: "verified"
26916
+ },
26917
+ {
26918
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiHuawei, {
26919
+ className: "w-32 h-auto",
26920
+ style: { color: "#CF0A2C" }
26921
+ }),
26922
+ color: "#CF0A2C",
26923
+ status: "untested"
26924
+ },
26925
+ {
26926
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiHonor, {
26927
+ className: "w-58 h-auto",
26928
+ style: { color: "#00BFFF" }
26929
+ }),
26930
+ color: "#00BFFF",
26931
+ status: "untested"
26932
+ }
26933
+ ];
26934
+ const unsupportedBrands = [{
26935
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiApple, {
26936
+ className: "w-20 h-auto",
26937
+ style: { color: appleColor }
26938
+ }),
26939
+ color: appleColor,
26940
+ status: "unsupported"
26941
+ }, {
26942
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SiVivo, {
26943
+ className: "w-24 h-auto",
26944
+ style: { color: "#415FFF" }
26945
+ }),
26946
+ color: "#415FFF",
26947
+ status: "unsupported"
26948
+ }];
26949
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DefaultLayout, {
26950
+ ...props,
26951
+ version: void 0,
26952
+ className: "relative overflow-hidden",
26953
+ style: {
26954
+ backgroundColor: bgColor,
26955
+ minHeight: "1440px"
26956
+ },
26957
+ children: [
26958
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26959
+ className: "absolute inset-0 pointer-events-none",
26960
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
26961
+ className: "absolute rounded-full w-150 h-125 top-[20%] left-[10%] blur-[150px]",
26962
+ style: { background: glow1 }
26963
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
26964
+ className: "absolute rounded-full w-125 h-112.5 bottom-[15%] right-[10%] blur-[130px]",
26965
+ style: { background: glow2 }
26966
+ })]
26967
+ }),
26968
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
26969
+ className: "absolute inset-0 pointer-events-none",
26970
+ style: { opacity: noiseOpacity },
26971
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
26972
+ className: "w-full h-full",
26973
+ xmlns: "http://www.w3.org/2000/svg",
26974
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("filter", {
26975
+ id: "tipNoise",
26976
+ x: "0%",
26977
+ y: "0%",
26978
+ width: "100%",
26979
+ height: "100%",
26980
+ children: [
26981
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feTurbulence", {
26982
+ type: "fractalNoise",
26983
+ baseFrequency: "0.8",
26984
+ numOctaves: "1",
26985
+ stitchTiles: "stitch",
26986
+ result: "noise"
26987
+ }),
26988
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feColorMatrix", {
26989
+ type: "saturate",
26990
+ values: "0",
26991
+ result: "gray"
26992
+ }),
26993
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("feComponentTransfer", { children: [
26994
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncR", {
26995
+ type: "discrete",
26996
+ tableValues: "0 1"
26997
+ }),
26998
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncG", {
26999
+ type: "discrete",
27000
+ tableValues: "0 1"
27001
+ }),
27002
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncB", {
27003
+ type: "discrete",
27004
+ tableValues: "0 1"
27005
+ })
27006
+ ] })
27007
+ ]
27008
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
27009
+ width: "100%",
27010
+ height: "100%",
27011
+ filter: "url(#tipNoise)"
27012
+ })]
27013
+ })
27014
+ }),
27015
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27016
+ className: "absolute inset-0 pointer-events-none overflow-hidden",
27017
+ children: [
27018
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27019
+ className: "absolute top-20 left-20 grid grid-cols-5 gap-2 opacity-30",
27020
+ children: Array.from({ length: 15 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27021
+ className: "w-2 h-2 rounded-full",
27022
+ style: { backgroundColor: primaryColor }
27023
+ }, i))
27024
+ }),
27025
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27026
+ className: "absolute top-20 right-20 flex flex-col items-end gap-2 opacity-30",
27027
+ children: [
27028
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27029
+ className: "h-0.75 rounded-full w-20",
27030
+ style: { backgroundColor: secondaryColor }
27031
+ }),
27032
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27033
+ className: "h-0.75 rounded-full w-12",
27034
+ style: { backgroundColor: secondaryColor }
27035
+ }),
27036
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27037
+ className: "h-0.75 rounded-full w-6",
27038
+ style: { backgroundColor: secondaryColor }
27039
+ })
27040
+ ]
27041
+ }),
27042
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27043
+ className: "absolute bottom-40 left-10 flex gap-2 opacity-30",
27044
+ children: [
27045
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27046
+ className: "w-2 h-2 rounded-full",
27047
+ style: { backgroundColor: primaryColor }
27048
+ }),
27049
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27050
+ className: "w-2 h-2 rounded-full",
27051
+ style: { backgroundColor: primaryColor }
27052
+ }),
27053
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27054
+ className: "w-2 h-2 rounded-full",
27055
+ style: { backgroundColor: primaryColor }
27056
+ }),
27057
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27058
+ className: "w-2 h-2 rounded-full",
27059
+ style: { backgroundColor: primaryColor }
27060
+ })
27061
+ ]
27062
+ }),
27063
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27064
+ className: "absolute bottom-10 right-10 opacity-30",
27065
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
27066
+ width: "100",
27067
+ height: "100",
27068
+ viewBox: "0 0 100 100",
27069
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
27070
+ cx: "50",
27071
+ cy: "50",
27072
+ r: "44",
27073
+ fill: "none",
27074
+ stroke: primaryColor,
27075
+ strokeWidth: "2"
27076
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
27077
+ cx: "50",
27078
+ cy: "50",
27079
+ r: "28",
27080
+ fill: "none",
27081
+ stroke: secondaryColor,
27082
+ strokeWidth: "2"
27083
+ })]
27084
+ })
27085
+ })
27086
+ ]
27087
+ }),
27088
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27089
+ className: "relative z-10 flex flex-col min-h-360 px-20 py-16",
27090
+ children: [
27091
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
27092
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27093
+ className: "flex items-center gap-5 mb-16",
27094
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27095
+ className: "rounded-full p-5 shrink-0",
27096
+ style: { background: "radial-gradient(circle, " + (isDark ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.06)") + " 0%, transparent 70%)" },
27097
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowDownToLine, {
27098
+ className: "w-20 h-auto",
27099
+ style: { color: primaryColor }
27100
+ })
27101
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
27102
+ className: "text-4xl font-bold leading-tight",
27103
+ style: { color: accentColor },
27104
+ children: "保存原图"
27105
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
27106
+ className: "text-2xl mt-1",
27107
+ style: { color: mutedColor },
27108
+ children: "长按选择「保存原图」即可识别为实况照片"
27109
+ })] })]
27110
+ }),
27111
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27112
+ className: "flex-1 flex flex-col justify-center items-center gap-6",
27113
+ children: [
27114
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27115
+ className: "flex flex-col gap-6",
27116
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27117
+ className: "flex justify-center gap-6",
27118
+ children: supportedBrands.slice(0, 4).map((brand, idx) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BrandCard, {
27119
+ brand,
27120
+ isDark
27121
+ }, idx))
27122
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27123
+ className: "flex justify-center gap-6",
27124
+ children: supportedBrands.slice(4).map((brand, idx) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BrandCard, {
27125
+ brand,
27126
+ isDark
27127
+ }, idx))
27128
+ })]
27129
+ }),
27130
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27131
+ className: "w-200 h-px",
27132
+ style: { backgroundColor: isDark ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.06)" }
27133
+ }),
27134
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27135
+ className: "flex justify-center gap-8",
27136
+ children: unsupportedBrands.map((brand, idx) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UnsupportedBrandCard, {
27137
+ brand,
27138
+ isDark
27139
+ }, idx))
27140
+ })
27141
+ ]
27142
+ }),
27143
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27144
+ className: "flex items-start gap-4 mt-12 px-8 py-5 rounded-2xl",
27145
+ style: { backgroundColor: isDark ? "rgba(255,255,255,0.04)" : "rgba(0,0,0,0.03)" },
27146
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Info, {
27147
+ className: "w-6 h-6 shrink-0 mt-0.5",
27148
+ style: { color: primaryColor }
27149
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
27150
+ className: "text-xl leading-relaxed",
27151
+ style: { color: mutedColor },
27152
+ children: "所有支持 Google Motion Photo 标准的相册 App 均可识别实况照片"
27153
+ })]
27154
+ }),
27155
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27156
+ className: "flex justify-end items-end mt-auto pt-12",
27157
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27158
+ className: "flex items-end gap-6",
27159
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27160
+ className: "flex flex-col items-end",
27161
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27162
+ className: "text-xl font-bold tracking-[0.15em] uppercase",
27163
+ style: { color: mutedColor },
27164
+ children: "KARIN-PLUGIN"
27165
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27166
+ className: "text-5xl font-black",
27167
+ style: { color: accentColor },
27168
+ children: "kkk"
27169
+ })]
27170
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlowImage, {
27171
+ glowStrength: 1,
27172
+ blurRadius: 25,
27173
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(KkkLogo, {
27174
+ className: "w-auto h-20",
27175
+ color: accentColor
27176
+ })
27177
+ })]
27178
+ })
27179
+ })
27180
+ ]
27181
+ })
27182
+ ]
27183
+ });
27184
+ });
27185
+ LivePhotoTip.displayName = "LivePhotoTip";
27186
+ //#endregion
27187
27187
  //#region ../template/src/components/platforms/other/qrlogin.tsx
27188
27188
  /**
27189
27189
  * APP 扫码登录组件
@@ -29020,6 +29020,14 @@ var baseComponentConfigs = [
29020
29020
  enabled: true,
29021
29021
  componentPath: "platforms/other/qrlogin",
29022
29022
  exportName: "QrLogin"
29023
+ },
29024
+ {
29025
+ id: "live-photo-tip",
29026
+ name: "实况图提示",
29027
+ description: "实况照片保存提示图片",
29028
+ enabled: true,
29029
+ componentPath: "platforms/other/LivePhotoTip",
29030
+ exportName: "LivePhotoTip"
29023
29031
  }
29024
29032
  ]
29025
29033
  },
@@ -29199,6 +29207,7 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
29199
29207
  case "changelog": return createComponentConfig(baseComponent, { component: Changelog });
29200
29208
  case "version_warning": return createComponentConfig(baseComponent, { component: VersionWarning });
29201
29209
  case "qrlogin": return createComponentConfig(baseComponent, { component: QrLogin });
29210
+ case "live-photo-tip": return createComponentConfig(baseComponent, { component: LivePhotoTip });
29202
29211
  default: return createComponentConfig(baseComponent);
29203
29212
  }
29204
29213
  });
@@ -29655,6 +29664,7 @@ var ComponentRendererFactory = class {
29655
29664
  data: request.data,
29656
29665
  version: request.version,
29657
29666
  scale: request.scale,
29667
+ watermarkTextBitSize: request.watermarkTextBitSize,
29658
29668
  ...extraProps
29659
29669
  };
29660
29670
  if (templateName.includes("/")) props.subType = templateName.split("/")[1];
@@ -30558,7 +30568,6 @@ var createPosterPalettePlugin = () => {
30558
30568
  */
30559
30569
  /**
30560
30570
  * 将隐水印嵌入到 PNG 图片中
30561
- *
30562
30571
  * @param pngBytes - PNG 图片的 Buffer 或 Uint8Array
30563
30572
  * @param watermarkText - 要嵌入的水印文本
30564
30573
  * @returns 嵌入水印后的 PNG Buffer,失败返回 null
@@ -30566,12 +30575,17 @@ var createPosterPalettePlugin = () => {
30566
30575
  var embedWatermark = (pngBytes, watermarkText) => {
30567
30576
  try {
30568
30577
  const result = embedWatermarkToPngBytes(pngBytes instanceof Buffer ? pngBytes : Buffer.from(pngBytes), watermarkText);
30569
- return result instanceof Buffer ? result : Buffer.from(result);
30570
- } catch (error) {
30571
- logger.error("嵌入隐水印失败:", error);
30578
+ return result instanceof Buffer ? result : Buffer.from(result.buffer);
30579
+ } catch {
30572
30580
  return null;
30573
30581
  }
30574
30582
  };
30583
+ /**
30584
+ * 从 PNG 图片中提取隐水印文本
30585
+ *
30586
+ * @param pngBytes - PNG 图片的 Buffer 或 Uint8Array
30587
+ * @returns 提取出的水印文本,失败返回 null
30588
+ */
30575
30589
  //#endregion
30576
30590
  //#region src/module/utils/Render/index.ts
30577
30591
  /**
@@ -30599,6 +30613,12 @@ var Render = async (event, path$1, data) => {
30599
30613
  const lockedVersion = await db.get("kkk:update:lock");
30600
30614
  if (typeof lockedVersion === "string" && lockedVersion.length > 0) hasUpdate = isSemverGreater(lockedVersion, Root.pluginVersion);
30601
30615
  } catch {}
30616
+ const watermarkText = JSON.stringify({
30617
+ a: Date.now(),
30618
+ b: `Generated by karin-plugin-kkk v${Root.pluginVersion}, with source code open-sourced under the GPL-3.0 license`,
30619
+ c: `Sent by ${event?.bot?.account.selfId ?? "unknown"}|${event?.bot?.account.name ?? "unknown"}`
30620
+ });
30621
+ const watermarkTextBitSize = Buffer.byteLength(watermarkText, "utf8") * 8;
30602
30622
  const result = await reactServerRender({
30603
30623
  request: {
30604
30624
  templateType,
@@ -30614,6 +30634,7 @@ var Render = async (event, path$1, data) => {
30614
30634
  frameworkVersion: Root.karinVersion,
30615
30635
  hasUpdate
30616
30636
  },
30637
+ watermarkTextBitSize,
30617
30638
  data: {
30618
30639
  ...data,
30619
30640
  useDarkTheme: Common.useDarkTheme()
@@ -30635,7 +30656,7 @@ var Render = async (event, path$1, data) => {
30635
30656
  const renderResult = await render.render({
30636
30657
  name: `${Root.pluginName}/${templateType}`,
30637
30658
  file: result.htmlPath,
30638
- multiPage: Config.app.multiPageRender ? Config.app.multiPageHeight : false,
30659
+ multiPage: Config.app.multiPageRender && event.bot.adapter.name !== "QQ Official Bot" ? Config.app.multiPageHeight : false,
30639
30660
  selector: "#container",
30640
30661
  fullPage: false,
30641
30662
  type: "png",
@@ -30650,11 +30671,7 @@ var Render = async (event, path$1, data) => {
30650
30671
  const imageStats = [];
30651
30672
  for (const image of images) {
30652
30673
  const imageBuffer = Buffer.from(image, "base64");
30653
- const finalImageBuffer = embedWatermark(imageBuffer, JSON.stringify({
30654
- a: Date.now(),
30655
- b: `Generated by karin-plugin-kkk v${Root.pluginVersion}, with source code open-sourced under the GPL-3.0 license`,
30656
- c: `Sent by ${event?.bot?.account.selfId ?? "unknown"}|${event?.bot?.account.name ?? "unknown"}`
30657
- })) ?? imageBuffer;
30674
+ const finalImageBuffer = embedWatermark(imageBuffer, watermarkText) ?? imageBuffer;
30658
30675
  const metadata = getImageMetadata(finalImageBuffer);
30659
30676
  const dimensions = metadata.width && metadata.height ? `${metadata.width}x${metadata.height}` : "unknown";
30660
30677
  imageStats.push({
@@ -33366,29 +33383,12 @@ var DouyinWeb = (all) => {
33366
33383
  }],
33367
33384
  isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33368
33385
  }),
33369
- components.input.number("subCommentDepth", {
33370
- label: "次级评论解析深度",
33371
- description: "次级评论解析深度",
33372
- defaultValue: all.douyin.subCommentDepth.toString(),
33373
- rules: [{
33374
- min: 1,
33375
- max: 6,
33376
- error: "嵌套深度最高只有 6 层,超过 6 层的评论会被强制截断"
33377
- }],
33378
- isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33379
- }),
33380
33386
  components.switch.create("commentImageCollection", {
33381
33387
  label: "是否收集评论区的图片",
33382
33388
  description: "开启后将收集评论区的图片,以合并转发的形式返回",
33383
33389
  defaultSelected: all.douyin.commentImageCollection,
33384
33390
  isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33385
33391
  }),
33386
- components.switch.create("realCommentCount", {
33387
- label: "显示真实评论数量",
33388
- description: "评论图是否显示真实评论数量,关闭则显示解析到的评论数量",
33389
- defaultSelected: all.douyin.realCommentCount,
33390
- isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33391
- }),
33392
33392
  components.divider.create("divider-dy-render", {
33393
33393
  description: "渲染与画质设置",
33394
33394
  descPosition: 20
@@ -35875,60 +35875,71 @@ var buildBilibiliDynamicRichText = (text, richTextNodes) => {
35875
35875
  }
35876
35876
  return createRichTextDocument(nodes, { platform: "bilibili" });
35877
35877
  }
35878
- const findInText = (searchText, startPos) => {
35879
- return text.indexOf(searchText, startPos);
35880
- };
35881
- let currentPos = 0;
35882
- for (const tag of richTextNodes) {
35878
+ const buildNodesFromTag = (tag) => {
35883
35879
  const matchText = tag.orig_text || tag.text || "";
35884
- if (!matchText) continue;
35885
- const matchPos = findInText(matchText, currentPos);
35886
- if (matchPos === -1) continue;
35887
- if (matchPos > currentPos) {
35888
- const parts = text.slice(currentPos, matchPos).split(/(\r?\n)/);
35889
- for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
35890
- else if (part) nodes.push(...parseTextWithUrls(part));
35891
- }
35880
+ if (!matchText) return [];
35881
+ const result = [];
35892
35882
  switch (tag.type) {
35893
35883
  case "RICH_TEXT_NODE_TYPE_TEXT": {
35894
35884
  const parts = matchText.split(/(\r?\n)/);
35895
- for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
35896
- else if (part) nodes.push(...parseTextWithUrls(part));
35885
+ for (const part of parts) if (part === "\r\n" || part === "\n") result.push(createLineBreakNode());
35886
+ else if (part) result.push(...parseTextWithUrls(part));
35897
35887
  break;
35898
35888
  }
35899
35889
  case "topic":
35900
35890
  case "RICH_TEXT_NODE_TYPE_TOPIC":
35901
- nodes.push(createTopicNode(matchText));
35891
+ result.push(createTopicNode(matchText));
35902
35892
  break;
35903
35893
  case "RICH_TEXT_NODE_TYPE_AT":
35904
- nodes.push(createAtNode(matchText));
35894
+ result.push(createAtNode(matchText));
35905
35895
  break;
35906
35896
  case "RICH_TEXT_NODE_TYPE_LOTTERY":
35907
- nodes.push(createLotteryNode(matchText));
35897
+ result.push(createLotteryNode(matchText));
35908
35898
  break;
35909
35899
  case "RICH_TEXT_NODE_TYPE_WEB":
35910
- nodes.push(createWebLinkNode(tag.text || matchText, matchText));
35900
+ result.push(createWebLinkNode(tag.text || matchText, matchText));
35911
35901
  break;
35912
35902
  case "RICH_TEXT_NODE_TYPE_EMOJI": {
35913
35903
  const emojiUrl = tag.emoji?.gif_url || tag.emoji?.icon_url;
35914
35904
  const scale = tag.emoji?.size === 2 || tag.emoji?.size === 3 ? 2 : void 0;
35915
- if (emojiUrl) nodes.push(createEmojiNode(matchText, emojiUrl, { scale }));
35916
- else nodes.push(createTextNode(matchText));
35905
+ if (emojiUrl) result.push(createEmojiNode(matchText, emojiUrl, { scale }));
35906
+ else result.push(createTextNode(matchText));
35917
35907
  break;
35918
35908
  }
35919
35909
  case "RICH_TEXT_NODE_TYPE_VOTE":
35920
- nodes.push(createVoteNode(tag.text || matchText));
35910
+ result.push(createVoteNode(tag.text || matchText));
35921
35911
  break;
35922
35912
  case "RICH_TEXT_NODE_TYPE_VIEW_PICTURE":
35923
- nodes.push(createViewPictureNode(matchText));
35913
+ result.push(createViewPictureNode(matchText));
35924
35914
  break;
35925
35915
  default: {
35926
35916
  const parts = matchText.split(/(\r?\n)/);
35927
- for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
35928
- else if (part) nodes.push(...parseTextWithUrls(part));
35917
+ for (const part of parts) if (part === "\r\n" || part === "\n") result.push(createLineBreakNode());
35918
+ else if (part) result.push(...parseTextWithUrls(part));
35929
35919
  break;
35930
35920
  }
35931
35921
  }
35922
+ return result;
35923
+ };
35924
+ if (!text) {
35925
+ for (const tag of richTextNodes) nodes.push(...buildNodesFromTag(tag));
35926
+ return createRichTextDocument(nodes, { platform: "bilibili" });
35927
+ }
35928
+ const findInText = (searchText, startPos) => {
35929
+ return text.indexOf(searchText, startPos);
35930
+ };
35931
+ let currentPos = 0;
35932
+ for (const tag of richTextNodes) {
35933
+ const matchText = tag.orig_text || tag.text || "";
35934
+ if (!matchText) continue;
35935
+ const matchPos = findInText(matchText, currentPos);
35936
+ if (matchPos === -1) continue;
35937
+ if (matchPos > currentPos) {
35938
+ const parts = text.slice(currentPos, matchPos).split(/(\r?\n)/);
35939
+ for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
35940
+ else if (part) nodes.push(...parseTextWithUrls(part));
35941
+ }
35942
+ nodes.push(...buildNodesFromTag(tag));
35932
35943
  currentPos = matchPos + matchText.length;
35933
35944
  }
35934
35945
  if (currentPos < text.length) {
@@ -36021,10 +36032,15 @@ var parseOpusToRichText = (opus, useDarkTheme) => {
36021
36032
  flushList();
36022
36033
  const pics = paragraph.pic?.pics;
36023
36034
  if (Array.isArray(pics)) {
36024
- for (const pic of pics) if (pic.url) nodes.push(createImageNode(fixImageUrl(pic.url), pic.alt || "专栏图片"));
36035
+ for (const pic of pics) if (pic.url) nodes.push(createImageNode(fixImageUrl(pic.url), pic.alt || "专栏图片", pic.comment));
36025
36036
  }
36026
36037
  continue;
36027
36038
  }
36039
+ if (paraType === 3) {
36040
+ flushList();
36041
+ nodes.push(createHorizontalRuleNode());
36042
+ continue;
36043
+ }
36028
36044
  if (paraType === 7) {
36029
36045
  flushList();
36030
36046
  const linkCard = paragraph.link_card;
@@ -36051,6 +36067,7 @@ var parseOpusToRichText = (opus, useDarkTheme) => {
36051
36067
  if (![
36052
36068
  1,
36053
36069
  2,
36070
+ 3,
36054
36071
  4,
36055
36072
  7,
36056
36073
  8,
@@ -36618,13 +36635,11 @@ var Bilibili = class extends Base {
36618
36635
  imgArray.push(segment.image(imageUrl));
36619
36636
  }
36620
36637
  if (hasGeneratedLivePhoto) {
36621
- const tip = {
36622
- google: "Google 相册",
36623
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
36624
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
36625
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
36626
- }[Config.app.livePhotoSystem] || "Google 相册";
36627
- imgArray.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
36638
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
36639
+ title: "实况照片已生成",
36640
+ description: "保存原图到相册即可识别为实况图"
36641
+ });
36642
+ imgArray.push(...tipImg);
36628
36643
  }
36629
36644
  if (imgArray.length === 1) this.e.reply(imgArray[0]);
36630
36645
  if (imgArray.length > 1) {
@@ -36640,15 +36655,18 @@ var Bilibili = class extends Base {
36640
36655
  for (const item of temp) await Common.removeFile(item.filepath, true);
36641
36656
  }
36642
36657
  }
36643
- if ("topic" in dynamicInfo.data.data.item.modules.module_dynamic && dynamicInfo.data.data.item.modules.module_dynamic.topic !== null) {
36644
- const name = dynamicInfo.data.data.item.modules.module_dynamic.topic.name;
36645
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.rich_text_nodes.unshift({
36658
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36659
+ if (md.topic) {
36660
+ const { name } = md.topic;
36661
+ const summary = md.major.opus.summary;
36662
+ summary.rich_text_nodes ??= [];
36663
+ summary.rich_text_nodes.unshift({
36646
36664
  orig_text: name,
36647
36665
  jump_url: "",
36648
36666
  text: name,
36649
36667
  type: "topic"
36650
36668
  });
36651
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.text = `${name}\n` + dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.text;
36669
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
36652
36670
  }
36653
36671
  this.e.reply(await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_DRAW", {
36654
36672
  image_url: Object.values(dynamicInfo.data.data.item.modules.module_dynamic.major.opus.pics).filter((item) => typeof item?.url === "string").map((item) => ({ image_src: item.url })),
@@ -36668,23 +36686,27 @@ var Bilibili = class extends Base {
36668
36686
  following_count: Count(userProfileData.data.data.card.attention),
36669
36687
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
36670
36688
  render_time: TimeFormatter.now(),
36671
- dynamicTYPE: "图文动态",
36689
+ dynamicTYPE: "图文动态解析",
36672
36690
  imageLayout: Config.bilibili.imageLayout,
36673
- additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional)
36691
+ additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional),
36692
+ dynamic_id: dynamicInfo.data.data.item.id_str
36674
36693
  }));
36675
36694
  break;
36676
36695
  }
36677
36696
  /** 纯文 */
36678
36697
  case DynamicType.WORD: {
36679
- if ("topic" in dynamicInfo.data.data.item.modules.module_dynamic && dynamicInfo.data.data.item.modules.module_dynamic.topic !== null) {
36680
- const name = dynamicInfo.data.data.item.modules.module_dynamic.topic.name;
36681
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.rich_text_nodes.unshift({
36698
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36699
+ if (md.topic) {
36700
+ const { name } = md.topic;
36701
+ const summary = md.major.opus.summary;
36702
+ summary.rich_text_nodes ??= [];
36703
+ summary.rich_text_nodes.unshift({
36682
36704
  orig_text: name,
36683
36705
  jump_url: "",
36684
36706
  text: name,
36685
36707
  type: "topic"
36686
36708
  });
36687
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.text = `${name}\n\n` + dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.text;
36709
+ summary.text = summary.text ? `${name}\n\n${summary.text}` : name;
36688
36710
  }
36689
36711
  const text = buildBilibiliDynamicRichText(dynamicInfo.data.data.item.modules.module_dynamic.major.opus?.summary?.text ?? "", dynamicInfo.data.data.item.modules.module_dynamic.major.opus?.summary?.rich_text_nodes ?? []);
36690
36712
  this.e.reply(await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_WORD", {
@@ -36703,22 +36725,26 @@ var Bilibili = class extends Base {
36703
36725
  following_count: Count(userProfileData.data.data.card.attention),
36704
36726
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
36705
36727
  render_time: TimeFormatter.now(),
36706
- dynamicTYPE: "纯文动态",
36707
- additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional)
36728
+ dynamicTYPE: "纯文动态解析",
36729
+ additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional),
36730
+ dynamic_id: dynamicInfo.data.data.item.id_str
36708
36731
  }));
36709
36732
  break;
36710
36733
  }
36711
36734
  /** 转发动态 */
36712
36735
  case DynamicType.FORWARD: {
36713
- if ("topic" in dynamicInfo.data.data.item.modules.module_dynamic && dynamicInfo.data.data.item.modules.module_dynamic.topic !== null) {
36714
- const name = dynamicInfo.data.data.item.modules.module_dynamic.topic.name;
36715
- dynamicInfo.data.data.item.modules.module_dynamic.desc.rich_text_nodes.unshift({
36736
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36737
+ if (md.topic) {
36738
+ const { name } = md.topic;
36739
+ const desc = md.desc;
36740
+ desc.rich_text_nodes ??= [];
36741
+ desc.rich_text_nodes.unshift({
36716
36742
  orig_text: name,
36717
36743
  jump_url: "",
36718
36744
  text: name,
36719
36745
  type: "topic"
36720
36746
  });
36721
- dynamicInfo.data.data.item.modules.module_dynamic.desc.text = `${name}\n\n` + dynamicInfo.data.data.item.modules.module_dynamic.desc.text;
36747
+ desc.text = desc.text ? `${name}\n\n${desc.text}` : name;
36722
36748
  }
36723
36749
  const text = buildBilibiliDynamicRichText(dynamicInfo.data.data.item.modules.module_dynamic.desc.text, dynamicInfo.data.data.item.modules.module_dynamic.desc.rich_text_nodes);
36724
36750
  const imgList = [];
@@ -36741,13 +36767,14 @@ var Bilibili = class extends Base {
36741
36767
  frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image
36742
36768
  };
36743
36769
  break;
36744
- case DynamicType.DRAW:
36745
- if ("topic" in dynamicInfo.data.data.item.orig.modules.module_dynamic && dynamicInfo.data.data.item.orig.modules.module_dynamic.topic !== null) {
36746
- const name = dynamicInfo.data.data.item.orig.modules.module_dynamic.topic.name;
36747
- const origSummary = dynamicInfo.data.data.item.orig.modules.module_dynamic.major?.opus?.summary;
36748
- if (origSummary) {
36749
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
36750
- origSummary.rich_text_nodes.unshift({
36770
+ case DynamicType.DRAW: {
36771
+ const origMd = dynamicInfo.data.data.item.orig.modules.module_dynamic;
36772
+ if (origMd.topic) {
36773
+ const { name } = origMd.topic;
36774
+ const summary = origMd.major?.opus?.summary;
36775
+ if (summary) {
36776
+ summary.rich_text_nodes ??= [];
36777
+ summary.rich_text_nodes.unshift({
36751
36778
  orig_text: name,
36752
36779
  jump_url: "",
36753
36780
  text: name,
@@ -36755,7 +36782,7 @@ var Bilibili = class extends Base {
36755
36782
  rid: "",
36756
36783
  style: { "1114514": "1919810" }
36757
36784
  });
36758
- origSummary.text = `${name}\n` + (origSummary.text || "");
36785
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
36759
36786
  }
36760
36787
  }
36761
36788
  data = {
@@ -36769,19 +36796,21 @@ var Bilibili = class extends Base {
36769
36796
  frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image
36770
36797
  };
36771
36798
  break;
36772
- case DynamicType.WORD:
36773
- if ("topic" in dynamicInfo.data.data.item.orig.modules.module_dynamic && dynamicInfo.data.data.item.orig.modules.module_dynamic.topic !== null) {
36774
- const name = dynamicInfo.data.data.item.orig.modules.module_dynamic.topic.name;
36775
- const origSummary = dynamicInfo.data.data.item.orig.modules.module_dynamic.major?.opus?.summary;
36776
- if (origSummary) {
36777
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
36778
- origSummary.rich_text_nodes.unshift({
36799
+ }
36800
+ case DynamicType.WORD: {
36801
+ const origMd = dynamicInfo.data.data.item.orig.modules.module_dynamic;
36802
+ if (origMd.topic) {
36803
+ const { name } = origMd.topic;
36804
+ const summary = origMd.major?.opus?.summary;
36805
+ if (summary) {
36806
+ summary.rich_text_nodes ??= [];
36807
+ summary.rich_text_nodes.unshift({
36779
36808
  orig_text: name,
36780
36809
  jump_url: "",
36781
36810
  text: name,
36782
36811
  type: "topic"
36783
36812
  });
36784
- origSummary.text = `${name}\n` + (origSummary.text || "");
36813
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
36785
36814
  }
36786
36815
  }
36787
36816
  data = {
@@ -36790,9 +36819,11 @@ var Bilibili = class extends Base {
36790
36819
  avatar_url: dynamicInfo.data.data.item.orig.modules.module_author.face,
36791
36820
  text: buildBilibiliDynamicRichText(dynamicInfo.data.data.item.orig.modules.module_dynamic.major.opus.summary.text, dynamicInfo.data.data.item.orig.modules.module_dynamic.major.opus.summary.rich_text_nodes),
36792
36821
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.orig.modules.module_author.decoration_card),
36793
- frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image
36822
+ frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image,
36823
+ additional: parseAdditionalCard(dynamicInfo.data.data.item.orig.modules.module_dynamic.additional)
36794
36824
  };
36795
36825
  break;
36826
+ }
36796
36827
  case DynamicType.LIVE_RCMD: {
36797
36828
  const liveData = JSON.parse(dynamicInfo.data.data.item.orig.modules.module_dynamic.major.live_rcmd.content);
36798
36829
  data = {
@@ -36831,7 +36862,8 @@ var Bilibili = class extends Base {
36831
36862
  dynamicTYPE: "转发动态解析",
36832
36863
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
36833
36864
  render_time: TimeFormatter.now(),
36834
- original_content: { [dynamicInfo.data.data.item.orig.type]: data }
36865
+ original_content: { [dynamicInfo.data.data.item.orig.type]: data },
36866
+ dynamic_id: dynamicInfo.data.data.item.id_str
36835
36867
  }));
36836
36868
  break;
36837
36869
  }
@@ -36859,18 +36891,36 @@ var Bilibili = class extends Base {
36859
36891
  staff.unshift(currentUser);
36860
36892
  }
36861
36893
  }
36894
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36895
+ if (md.topic) {
36896
+ const { name } = md.topic;
36897
+ md.desc ??= {
36898
+ rich_text_nodes: [],
36899
+ text: ""
36900
+ };
36901
+ md.desc.rich_text_nodes.unshift({
36902
+ orig_text: name,
36903
+ jump_url: "",
36904
+ text: name,
36905
+ type: "topic"
36906
+ });
36907
+ md.desc.text = md.desc.text ? `${name}\n\n${md.desc.text}` : name;
36908
+ }
36909
+ const dynamicText = buildBilibiliDynamicRichText(dynamicInfo.data.data.item.modules.module_dynamic.desc?.text ?? "", dynamicInfo.data.data.item.modules.module_dynamic.desc?.rich_text_nodes ?? []);
36862
36910
  img$1 = await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_AV", {
36863
36911
  image_url: INFODATA.data.data.pic,
36864
36912
  text: buildBilibiliDynamicRichText(INFODATA.data.data.title, []),
36865
36913
  desc: INFODATA.data.data.desc_v2?.length ? buildBilibiliVideoDescRichText(INFODATA.data.data.desc_v2) : buildBilibiliDynamicRichText(INFODATA.data.data.desc || "", []),
36914
+ dynamic_text: dynamicText,
36866
36915
  dianzan: Count(INFODATA.data.data.stat.like),
36867
36916
  pinglun: Count(INFODATA.data.data.stat.reply),
36868
36917
  share: Count(INFODATA.data.data.stat.share),
36869
36918
  view: Count(INFODATA.data.data.stat.view),
36870
36919
  coin: Count(INFODATA.data.data.stat.coin),
36871
36920
  duration_text: dynamicInfo.data.data.item.modules.module_dynamic.major.archive.duration_text,
36872
- create_time: TimeFormatter.toDateTime(INFODATA.data.data.ctime),
36873
- avatar_url: userProfileData.data.data.card.face,
36921
+ page_length: INFODATA.data.data.pages.length,
36922
+ create_time: TimeFormatter.toRelative(dynamicInfo.data.data.item.modules.module_author.pub_ts),
36923
+ avatar_url: dynamicInfo.data.data.item.modules.module_author.face,
36874
36924
  frame: dynamicInfo.data.data.item.modules.module_author.pendant.image,
36875
36925
  share_url: "https://www.bilibili.com/video/" + bvid,
36876
36926
  usernameMeta: getUsernameMetadata(userProfileData.data.data.card),
@@ -36878,8 +36928,9 @@ var Bilibili = class extends Base {
36878
36928
  user_shortid: userProfileData.data.data.card.mid,
36879
36929
  total_favorited: Count(userProfileData.data.data.like_num),
36880
36930
  following_count: Count(userProfileData.data.data.card.attention),
36931
+ decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
36881
36932
  render_time: TimeFormatter.now(),
36882
- dynamicTYPE: "视频动态",
36933
+ dynamicTYPE: "视频动态解析",
36883
36934
  dynamic_id: dynamicInfo.data.data.item.id_str,
36884
36935
  staff
36885
36936
  });
@@ -36904,7 +36955,7 @@ var Bilibili = class extends Base {
36904
36955
  create_time: TimeFormatter.toDateTime(dynamicInfo.data.data.item.modules.module_author.pub_ts),
36905
36956
  now_time: TimeFormatter.now(),
36906
36957
  share_url: "https://live.bilibili.com/" + liveInfo.live_play_info.room_id,
36907
- dynamicTYPE: "直播动态"
36958
+ dynamicTYPE: "直播动态解析"
36908
36959
  });
36909
36960
  this.e.reply(img$1);
36910
36961
  break;
@@ -37048,7 +37099,7 @@ var Bilibili = class extends Base {
37048
37099
  create_time: liveInfo.data.data.live_time === "-62170012800" ? "获取失败" : liveInfo.data.data.live_time,
37049
37100
  now_time: TimeFormatter.now(),
37050
37101
  share_url: "https://live.bilibili.com/" + liveInfo.data.data.room_id,
37051
- dynamicTYPE: "直播"
37102
+ dynamicTYPE: "直播动态解析"
37052
37103
  });
37053
37104
  this.e.reply(img);
37054
37105
  break;
@@ -38161,8 +38212,6 @@ var Bilibilipush = class extends Base {
38161
38212
  host_mid: data[dynamicId].host_mid,
38162
38213
  typeMode: "strict"
38163
38214
  });
38164
- let emojiDATA = await this.amagi.bilibili.fetcher.fetchEmojiList({ typeMode: "strict" });
38165
- emojiDATA = extractEmojisData(emojiDATA.data.data.packages);
38166
38215
  switch (data[dynamicId].dynamic_type) {
38167
38216
  /** 处理图文动态 */
38168
38217
  case DynamicType.DRAW:
@@ -38196,20 +38245,24 @@ var Bilibilipush = class extends Base {
38196
38245
  render_time: TimeFormatter.now(),
38197
38246
  imageLayout: Config.bilibili.imageLayout,
38198
38247
  additional: parseAdditionalCard(data[dynamicId].Dynamic_Data.modules.module_dynamic.additional),
38199
- dynamicTYPE: "图文动态推送"
38248
+ dynamicTYPE: "图文动态推送",
38249
+ dynamic_id: dynamicId
38200
38250
  });
38201
38251
  break;
38202
38252
  /** 处理纯文动态 */
38203
38253
  case DynamicType.WORD: {
38204
38254
  if ("topic" in data[dynamicId].Dynamic_Data.orig.modules.module_dynamic && data[dynamicId].Dynamic_Data.modules.module_dynamic.topic !== null) {
38205
- const name = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.name;
38206
- data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.opus.summary.rich_text_nodes.unshift({
38255
+ const md = data[dynamicId].Dynamic_Data.modules.module_dynamic;
38256
+ const { name } = md.topic;
38257
+ const summary = md.major.opus.summary;
38258
+ summary.rich_text_nodes ??= [];
38259
+ summary.rich_text_nodes.unshift({
38207
38260
  orig_text: name,
38208
38261
  text: name,
38209
38262
  type: "topic",
38210
- rid: data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.id.toString()
38263
+ rid: md.topic.id.toString()
38211
38264
  });
38212
- data[dynamicId].Dynamic_Data.modules.module_dynamic.major.opus.summary.text = `${name}\n\n` + data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.opus?.summary?.text;
38265
+ summary.text = summary.text ? `${name}\n\n${summary.text}` : name;
38213
38266
  }
38214
38267
  const text = buildBilibiliDynamicRichText(data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.opus?.summary?.text ?? "", data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.opus?.summary?.rich_text_nodes ?? []);
38215
38268
  img = await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_WORD", {
@@ -38229,7 +38282,8 @@ var Bilibilipush = class extends Base {
38229
38282
  decoration_card: generateDecorationCard(data[dynamicId].Dynamic_Data.modules.module_author.decoration_card),
38230
38283
  render_time: TimeFormatter.now(),
38231
38284
  additional: parseAdditionalCard(data[dynamicId].Dynamic_Data.modules.module_dynamic.additional),
38232
- dynamicTYPE: "纯文动态推送"
38285
+ dynamicTYPE: "纯文动态推送",
38286
+ dynamic_id: dynamicId
38233
38287
  });
38234
38288
  break;
38235
38289
  }
@@ -38262,16 +38316,34 @@ var Bilibilipush = class extends Base {
38262
38316
  staff.unshift(currentUser);
38263
38317
  }
38264
38318
  }
38319
+ const md = data[dynamicId].Dynamic_Data.modules.module_dynamic;
38320
+ if (md.topic) {
38321
+ const { name } = md.topic;
38322
+ md.desc ??= {
38323
+ rich_text_nodes: [],
38324
+ text: ""
38325
+ };
38326
+ md.desc.rich_text_nodes.unshift({
38327
+ orig_text: name,
38328
+ jump_url: "",
38329
+ text: name,
38330
+ type: "topic"
38331
+ });
38332
+ md.desc.text = md.desc.text ? `${name}\n\n${md.desc.text}` : name;
38333
+ }
38334
+ const dynamicText = buildBilibiliDynamicRichText(data[dynamicId].Dynamic_Data.modules.module_dynamic.desc?.text ?? "", data[dynamicId].Dynamic_Data.modules.module_dynamic.desc?.rich_text_nodes ?? []);
38265
38335
  img = await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_AV", {
38266
38336
  image_url: INFODATA.data.data.pic,
38267
38337
  text: buildBilibiliDynamicRichText(INFODATA.data.data.title, []),
38268
38338
  desc: INFODATA.data.data.desc_v2?.length ? buildBilibiliVideoDescRichText(INFODATA.data.data.desc_v2) : buildBilibiliDynamicRichText(INFODATA.data.data.desc || "", []),
38339
+ dynamic_text: dynamicText,
38269
38340
  dianzan: Count(INFODATA.data.data.stat.like),
38270
38341
  pinglun: Count(INFODATA.data.data.stat.reply),
38271
38342
  share: Count(INFODATA.data.data.stat.share),
38272
38343
  view: Count(INFODATA.data.data.stat.view),
38273
38344
  coin: Count(INFODATA.data.data.stat.coin),
38274
38345
  duration_text: data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.archive?.duration_text ?? "0:00",
38346
+ page_length: INFODATA.data.data.pages.length,
38275
38347
  create_time: TimeFormatter.toDateTime(data[dynamicId].Dynamic_Data.modules.module_author.pub_ts),
38276
38348
  avatar_url: userINFO.data.data.card.face,
38277
38349
  frame: data[dynamicId].Dynamic_Data.modules.module_author.pendant.image,
@@ -38308,15 +38380,18 @@ var Bilibilipush = class extends Base {
38308
38380
  }
38309
38381
  /** 处理转发动态 */
38310
38382
  case DynamicType.FORWARD: {
38311
- if ("topic" in data[dynamicId].Dynamic_Data.modules.module_dynamic && data[dynamicId].Dynamic_Data.modules.module_dynamic.topic !== null) {
38312
- const name = data[dynamicId].Dynamic_Data.modules.module_dynamic.topic.name;
38313
- data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.rich_text_nodes.unshift({
38383
+ const md = data[dynamicId].Dynamic_Data.modules.module_dynamic;
38384
+ if (md.topic) {
38385
+ const { name } = md.topic;
38386
+ const desc = md.desc;
38387
+ desc.rich_text_nodes ??= [];
38388
+ desc.rich_text_nodes.unshift({
38314
38389
  orig_text: name,
38315
38390
  jump_url: "",
38316
38391
  text: name,
38317
38392
  type: "topic"
38318
38393
  });
38319
- data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.text = `${name}\n\n` + data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.text;
38394
+ desc.text = desc.text ? `${name}\n\n${desc.text}` : name;
38320
38395
  }
38321
38396
  const text = buildBilibiliDynamicRichText(data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.text, data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.rich_text_nodes);
38322
38397
  let param = {};
@@ -38342,21 +38417,22 @@ var Bilibilipush = class extends Base {
38342
38417
  frame: data[dynamicId].Dynamic_Data.orig.modules.module_author.pendant.image
38343
38418
  };
38344
38419
  break;
38345
- case DynamicType.DRAW:
38346
- if ("topic" in data[dynamicId].Dynamic_Data.orig.modules.module_dynamic && data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic !== null) {
38347
- const name = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.name;
38348
- const origSummary = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.major?.opus?.summary;
38349
- if (origSummary) {
38350
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
38351
- origSummary.rich_text_nodes.unshift({
38420
+ case DynamicType.DRAW: {
38421
+ const origMd = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic;
38422
+ if (origMd.topic) {
38423
+ const { name } = origMd.topic;
38424
+ const summary = origMd.major?.opus?.summary;
38425
+ if (summary) {
38426
+ summary.rich_text_nodes ??= [];
38427
+ summary.rich_text_nodes.unshift({
38352
38428
  orig_text: name,
38353
38429
  text: name,
38354
38430
  type: "topic",
38355
- rid: data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.id.toString(),
38431
+ rid: origMd.topic.id.toString(),
38356
38432
  jump_url: "114514",
38357
38433
  style: { "114514": "1919810" }
38358
38434
  });
38359
- origSummary.text = `${name}\n` + (origSummary.text || "");
38435
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
38360
38436
  }
38361
38437
  }
38362
38438
  param = {
@@ -38370,19 +38446,21 @@ var Bilibilipush = class extends Base {
38370
38446
  frame: data[dynamicId].Dynamic_Data.orig.modules.module_author.pendant.image
38371
38447
  };
38372
38448
  break;
38373
- case DynamicType.WORD:
38374
- if ("topic" in data[dynamicId].Dynamic_Data.orig.modules.module_dynamic && data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic !== null) {
38375
- const name = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.name;
38376
- const origSummary = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.major?.opus?.summary;
38377
- if (origSummary) {
38378
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
38379
- origSummary.rich_text_nodes.unshift({
38449
+ }
38450
+ case DynamicType.WORD: {
38451
+ const origMd = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic;
38452
+ if (origMd.topic) {
38453
+ const { name } = origMd.topic;
38454
+ const summary = origMd.major?.opus?.summary;
38455
+ if (summary) {
38456
+ summary.rich_text_nodes ??= [];
38457
+ summary.rich_text_nodes.unshift({
38380
38458
  orig_text: name,
38381
38459
  text: name,
38382
38460
  type: "topic",
38383
- rid: data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.id.toString()
38461
+ rid: origMd.topic.id.toString()
38384
38462
  });
38385
- origSummary.text = `${name}\n` + (origSummary.text || "");
38463
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
38386
38464
  }
38387
38465
  }
38388
38466
  param = {
@@ -38394,6 +38472,7 @@ var Bilibilipush = class extends Base {
38394
38472
  frame: data[dynamicId].Dynamic_Data.orig.modules.module_author.pendant.image
38395
38473
  };
38396
38474
  break;
38475
+ }
38397
38476
  case DynamicType.LIVE_RCMD: {
38398
38477
  const liveData = JSON.parse(data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.major.live_rcmd.content);
38399
38478
  param = {
@@ -38434,7 +38513,8 @@ var Bilibilipush = class extends Base {
38434
38513
  decoration_card: generateDecorationCard(data[dynamicId].Dynamic_Data.modules.module_author.decoration_card),
38435
38514
  render_time: TimeFormatter.now(),
38436
38515
  original_content: { [data[dynamicId].Dynamic_Data.orig.type]: param },
38437
- imgList: imgList.length > 0 ? imgList : null
38516
+ imgList: imgList.length > 0 ? imgList : null,
38517
+ dynamic_id: dynamicId
38438
38518
  });
38439
38519
  break;
38440
38520
  }
@@ -38493,9 +38573,13 @@ var Bilibilipush = class extends Base {
38493
38573
  if (send_video) {
38494
38574
  let correctList;
38495
38575
  let videoSize = "";
38576
+ const videoInfo = await this.amagi.bilibili.fetcher.fetchVideoInfo({
38577
+ bvid: data[dynamicId].Dynamic_Data.modules.module_dynamic.major.archive.bvid,
38578
+ typeMode: "strict"
38579
+ });
38496
38580
  const playUrlData = await this.amagi.bilibili.fetcher.fetchVideoStreamUrl({
38497
38581
  avid: parseInt(data[dynamicId].Dynamic_Data.modules.module_dynamic.major.archive.aid),
38498
- cid: data[dynamicId].Dynamic_Data.modules.module_dynamic.major.archive.cid,
38582
+ cid: videoInfo.data.data.cid,
38499
38583
  typeMode: "strict"
38500
38584
  });
38501
38585
  /** 提取出视频流信息对象,并排除清晰度重复的视频流 */
@@ -38662,13 +38746,11 @@ var Bilibilipush = class extends Base {
38662
38746
  }
38663
38747
  }
38664
38748
  if (hasGeneratedLivePhoto) {
38665
- const tip = {
38666
- google: "Google 相册",
38667
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
38668
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
38669
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
38670
- }[Config.app.livePhotoSystem] || "Google 相册";
38671
- imgArray.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
38749
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
38750
+ title: "实况照片已生成",
38751
+ description: "保存原图到相册即可识别为实况图"
38752
+ });
38753
+ imgArray.push(...tipImg);
38672
38754
  }
38673
38755
  const forwardMsg = common.makeForward(imgArray, botId, bot.account.name);
38674
38756
  try {
@@ -38952,23 +39034,6 @@ var br = (data) => {
38952
39034
  return data = data.replace(/\n/g, "<br>");
38953
39035
  };
38954
39036
  /**
38955
- * 处理并提取表情数据,返回一个包含表情名称和URL的对象数组。
38956
- * @param data 表情数据的数组,每个元素包含一个表情包的信息。
38957
- * @returns 返回一个对象数组,每个对象包含text(表情名称)和url(表情图片地址)属性。
38958
- */
38959
- var extractEmojisData = (data) => {
38960
- const emojisData = [];
38961
- data.forEach((packages) => {
38962
- packages.emote.forEach((emote) => {
38963
- emojisData.push({
38964
- text: emote.text,
38965
- url: emote.url
38966
- });
38967
- });
38968
- });
38969
- return emojisData;
38970
- };
38971
- /**
38972
39037
  * 判断标题是否有屏蔽词或屏蔽标签
38973
39038
  * @param PushItem 推送项
38974
39039
  * @returns 是否应该跳过推送
@@ -39861,13 +39926,11 @@ var DouYin = class DouYin extends Base {
39861
39926
  }
39862
39927
  }
39863
39928
  if (hasGeneratedLivePhoto) {
39864
- const tip = {
39865
- google: "Google 相册",
39866
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
39867
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
39868
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
39869
- }[Config.app.livePhotoSystem] || "Google 相册";
39870
- processedImages.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
39929
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
39930
+ title: "实况照片已生成",
39931
+ description: "保存原图到相册即可识别为实况图"
39932
+ });
39933
+ processedImages.push(...tipImg);
39871
39934
  }
39872
39935
  const Element = common.makeForward(processedImages, Config.app.fakeForward ? this.e.sender.userId : this.e.bot.account.selfId, Config.app.fakeForward ? this.e.sender.nick : this.e.bot.account.name);
39873
39936
  try {
@@ -40018,13 +40081,11 @@ var DouYin = class DouYin extends Base {
40018
40081
  }
40019
40082
  }
40020
40083
  if (hasGeneratedLivePhoto) {
40021
- const tip = {
40022
- google: "Google 相册",
40023
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
40024
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
40025
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
40026
- }[Config.app.livePhotoSystem] || "Google 相册";
40027
- images.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
40084
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
40085
+ title: "实况照片已生成",
40086
+ description: "保存原图到相册即可识别为实况图"
40087
+ });
40088
+ images.push(...tipImg);
40028
40089
  }
40029
40090
  const Element = common.makeForward(images, Config.app.fakeForward ? this.e.sender.userId : this.e.bot.account.selfId, Config.app.fakeForward ? this.e.sender.nick : this.e.bot.account.name);
40030
40091
  try {
@@ -40080,13 +40141,7 @@ var DouYin = class DouYin extends Base {
40080
40141
  分享链接:${logger.green(VideoData.data.aweme_detail.share_url)}
40081
40142
  `);
40082
40143
  video.bit_rate = douyinProcessVideos(video.bit_rate, Config.douyin.videoQuality, Config.douyin.maxAutoVideoSize);
40083
- g_video_url = await new Network({
40084
- url: video.bit_rate[0].play_addr.url_list[2],
40085
- headers: {
40086
- ...this.headers,
40087
- Referer: video.bit_rate[0].play_addr.url_list[0]
40088
- }
40089
- }).getLongLink();
40144
+ g_video_url = video.bit_rate[0].play_addr.url_list[0] ?? video.bit_rate[0].play_addr.url_list[1] ?? video.bit_rate[0].play_addr.url_list[2];
40090
40145
  g_title = VideoData.data.aweme_detail.preview_title.substring(0, 80).replace(/[\\/:*?"<>|\r\n]/g, " ");
40091
40146
  mp4size = (video.bit_rate[0].play_addr.data_size / (1024 * 1024)).toFixed(2);
40092
40147
  }
@@ -40171,7 +40226,7 @@ var DouYin = class DouYin extends Base {
40171
40226
  const img = await Render(this.e, "douyin/comment", {
40172
40227
  Type: isArticle ? "文章" : isVideo ? "视频" : this.is_slides ? "合辑" : "图集",
40173
40228
  CommentsData: douyinCommentsRes.CommentsData,
40174
- CommentLength: Config.douyin.realCommentCount ? aweme.statistics.comment_count : douyinCommentsRes.CommentsData.length ?? 0,
40229
+ CommentLength: douyinCommentsRes.CommentsData.length ?? 0,
40175
40230
  share_url: isVideo ? `https://aweme.snssdk.com/aweme/v1/play/?video_id=${aweme.video.play_addr.uri}&ratio=1080p&line=0` : aweme.share_url,
40176
40231
  VideoSize: mp4size,
40177
40232
  VideoFPS: FPS,
@@ -40179,7 +40234,7 @@ var DouYin = class DouYin extends Base {
40179
40234
  Region: aweme.region,
40180
40235
  suggestWrod: suggest,
40181
40236
  Resolution: isVideo && video ? `${video.bit_rate[0].play_addr.width} x ${video.bit_rate[0].play_addr.height}` : null,
40182
- maxDepth: Config.douyin.subCommentDepth,
40237
+ maxDepth: 6,
40183
40238
  Author: aweme.author.nickname,
40184
40239
  AuthorAvatar: aweme.author.avatar_thumb.url_list[0],
40185
40240
  Statistics: {
@@ -40620,21 +40675,11 @@ var DouyinWorkMainType = /* @__PURE__ */ function(DouyinWorkMainType) {
40620
40675
  return DouyinWorkMainType;
40621
40676
  }({});
40622
40677
  /**
40623
- * 图文作品子类型
40624
- */
40625
- var DouyinImageSubType = /* @__PURE__ */ function(DouyinImageSubType) {
40626
- /** 图集(纯静态图片或包含 live 图) */
40627
- DouyinImageSubType["GALLERY"] = "gallery";
40628
- /** 合辑(图片+视频混合) */
40629
- DouyinImageSubType["COLLECTION"] = "collection";
40630
- return DouyinImageSubType;
40631
- }({});
40632
- /**
40633
40678
  * 从作品数据判断详细类型信息
40634
40679
  */
40635
40680
  function getWorkTypeInfo(data) {
40636
40681
  if (data.live_data) return {
40637
- mainType: DouyinWorkMainType.LIVE,
40682
+ mainType: "live",
40638
40683
  isVideo: false,
40639
40684
  isImage: false,
40640
40685
  isArticle: false,
@@ -40644,7 +40689,7 @@ function getWorkTypeInfo(data) {
40644
40689
  templatePath: "douyin/live"
40645
40690
  };
40646
40691
  if (data.aweme_type === 163 || data.article_info) return {
40647
- mainType: DouyinWorkMainType.ARTICLE,
40692
+ mainType: "article",
40648
40693
  isVideo: false,
40649
40694
  isImage: false,
40650
40695
  isArticle: true,
@@ -40654,21 +40699,21 @@ function getWorkTypeInfo(data) {
40654
40699
  templatePath: "douyin/article-work"
40655
40700
  };
40656
40701
  if (data.images && data.images.length > 0) {
40657
- const subType = data.is_slides === true ? DouyinImageSubType.COLLECTION : DouyinImageSubType.GALLERY;
40702
+ const subType = data.is_slides === true ? "collection" : "gallery";
40658
40703
  return {
40659
- mainType: DouyinWorkMainType.IMAGE,
40704
+ mainType: "image",
40660
40705
  subType,
40661
40706
  isVideo: false,
40662
40707
  isImage: true,
40663
40708
  isArticle: false,
40664
40709
  isLive: false,
40665
- isGallery: subType === DouyinImageSubType.GALLERY,
40666
- isCollection: subType === DouyinImageSubType.COLLECTION,
40710
+ isGallery: subType === "gallery",
40711
+ isCollection: subType === "collection",
40667
40712
  templatePath: "douyin/image-work"
40668
40713
  };
40669
40714
  }
40670
40715
  return {
40671
- mainType: DouyinWorkMainType.VIDEO,
40716
+ mainType: "video",
40672
40717
  isVideo: true,
40673
40718
  isImage: false,
40674
40719
  isArticle: false,
@@ -41419,13 +41464,11 @@ var DouYinpush = class extends Base {
41419
41464
  }
41420
41465
  }
41421
41466
  if (hasGeneratedLivePhoto) {
41422
- const tip = {
41423
- google: "Google 相册",
41424
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
41425
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
41426
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
41427
- }[Config.app.livePhotoSystem] || "Google 相册";
41428
- images.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
41467
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
41468
+ title: "实况照片已生成",
41469
+ description: "保存原图到相册即可识别为实况图"
41470
+ });
41471
+ images.push(...tipImg);
41429
41472
  }
41430
41473
  const bot = karin$1.getBot(botId);
41431
41474
  const Element = common.makeForward(images, botId, bot.account.name);
@@ -41544,13 +41587,11 @@ var DouYinpush = class extends Base {
41544
41587
  }
41545
41588
  }
41546
41589
  if (hasGeneratedLivePhoto) {
41547
- const tip = {
41548
- google: "Google 相册",
41549
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
41550
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
41551
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
41552
- }[Config.app.livePhotoSystem] || "Google 相册";
41553
- processedImages.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
41590
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
41591
+ title: "实况照片已生成",
41592
+ description: "保存原图到相册即可识别为实况图"
41593
+ });
41594
+ processedImages.push(...tipImg);
41554
41595
  }
41555
41596
  const bot = karin$1.getBot(botId);
41556
41597
  const Element = common.makeForward(processedImages, botId, bot.account.name);
@@ -42451,13 +42492,11 @@ var Xiaohongshu = class extends Base {
42451
42492
  processedImages.push(segment.image(imageUrl));
42452
42493
  }
42453
42494
  if (hasGeneratedLivePhoto) {
42454
- const tip = {
42455
- google: "Google 相册",
42456
- xiaomi: "小米相册(支持实况照片的任何版本)、Google 相册",
42457
- oppo: "OPPO 相册、小米相册(较新版本)、Google 相册",
42458
- huawei_honor: "华为/荣耀相册(理论可行但未实测)"
42459
- }[Config.app.livePhotoSystem] || "Google 相册";
42460
- processedImages.push(segment.text(`💡 提示:保存原图到 ${tip} 即可识别为实况图`));
42495
+ const tipImg = await Render(this.e, "other/live-photo-tip", {
42496
+ title: "实况照片已生成",
42497
+ description: "保存原图到相册即可识别为实况图"
42498
+ });
42499
+ processedImages.push(...tipImg);
42461
42500
  }
42462
42501
  const res = common.makeForward(processedImages, Config.app.fakeForward ? this.e.sender.userId : this.e.bot.account.selfId, Config.app.fakeForward ? this.e.sender.nick : this.e.bot.account.name);
42463
42502
  if (processedImages.length === 1) await this.e.reply(processedImages[0]);
@@ -43501,14 +43540,12 @@ var forcePush = karin$1.command(/#(抖音|B站)(全部)?强制推送/, handleFor
43501
43540
  var setdyPush = karin$1.command(/^#设置抖音推送/, handleSetDouyinPush, {
43502
43541
  name: "kkk-推送功能-设置",
43503
43542
  event: "message.group",
43504
- perm: Config.douyin.push.permission,
43505
- dsbAdapter: ["qqbot"]
43543
+ perm: Config.douyin.push.permission
43506
43544
  });
43507
43545
  var setbiliPush = karin$1.command(/^#设置[bB]站推送/, handleSetBilibiliPush, {
43508
43546
  name: "kkk-推送功能-设置",
43509
43547
  event: "message.group",
43510
- perm: Config.bilibili.push.permission,
43511
- dsbAdapter: ["qqbot"]
43548
+ perm: Config.bilibili.push.permission
43512
43549
  });
43513
43550
  var bilibiliPushList = karin$1.command(/^#?[bB]站推送列表$/, handleBilibiliPushList, {
43514
43551
  name: "kkk-推送功能-列表",
@@ -43526,7 +43563,6 @@ var testDouyinPush = karin$1.command(/^#测试抖音推送\s*(https?:\/\/[^\s]+)
43526
43563
  name: "kkk-推送功能-测试",
43527
43564
  event: "message.group",
43528
43565
  perm: Config.douyin.push.permission,
43529
- dsbAdapter: ["qqbot"],
43530
43566
  priority: -Infinity
43531
43567
  });
43532
43568
  var globalIgnore = karin$1.command(/^#kkk推送全局忽略/, handleGlobalIgnore, {
@@ -46560,19 +46596,6 @@ var douyinConfigSchema = {
46560
46596
  max: 20
46561
46597
  }]
46562
46598
  },
46563
- {
46564
- key: "subCommentDepth",
46565
- type: "input",
46566
- inputType: "number",
46567
- label: "次级评论解析深度",
46568
- description: "次级评论解析深度",
46569
- disabled: $or($not("switch"), $not($includes("sendContent", "comment"))),
46570
- rules: [{
46571
- min: 1,
46572
- max: 6,
46573
- error: "嵌套深度最高只有 6 层,超过 6 层的评论会被强制截断"
46574
- }]
46575
- },
46576
46599
  {
46577
46600
  key: "commentImageCollection",
46578
46601
  type: "switch",
@@ -46580,13 +46603,6 @@ var douyinConfigSchema = {
46580
46603
  description: "开启后将收集评论区的图片,以合并转发的形式返回",
46581
46604
  disabled: $or($not("switch"), $not($includes("sendContent", "comment")))
46582
46605
  },
46583
- {
46584
- key: "realCommentCount",
46585
- type: "switch",
46586
- label: "显示真实评论数量",
46587
- description: "评论图是否显示真实评论数量,关闭则显示解析到的评论数量",
46588
- disabled: $or($not("switch"), $not($includes("sendContent", "comment")))
46589
- },
46590
46606
  {
46591
46607
  type: "divider",
46592
46608
  title: "渲染与画质设置"
@@ -47761,4 +47777,4 @@ mkdirSync(`${karinPathBase}/${Root.pluginName}/data`);
47761
47777
  mkdirSync(Common.tempDri.images);
47762
47778
  mkdirSync(Common.tempDri.video);
47763
47779
  //#endregion
47764
- export { createListItemNode as $, KuaishouCommentParamsSchema as $n, emitLogError as $r, createAmagiClient as $t, template_default as A, isNetworkErrorResult as An, BilibiliColumnInfoParamsSchema as Ar, KuaishouMethodMapping as At, DouyinDBBase as B, douyinSign as Bn, BilibiliQrcodeStatusParamsSchema as Br, DouyinMethodToFetcher as Bt, help as C, httpLogger as Cn, BilibiliArticleCardParamsSchema as Cr, amagi as Ct, removeOldFiles as D, fetchData as Dn, BilibiliBangumiInfoParamsSchema as Dr, DouyinApiRoutes as Dt, dylogin as E, logger$2 as En, BilibiliAv2BvParamsSchema as Er, BilibiliMethodMapping as Et, getBilibiliDB as F, kuaishouSign as Fn, BilibiliEmojiParamsSchema as Fr, BilibiliFetcherMethods as Ft, createAtNode as G, validateBilibiliParams as Gn, BilibiliVideoParamsSchema as Gr, XiaohongshuFetcherMethods as Gt, reactServerRender as H, createBoundBilibiliFetcher as Hn, BilibiliValidateCaptchaParamsSchema as Hr, KuaishouInternalMethods as Ht, getDouyinDB as I, kuaishouApiUrls as In, BilibiliLiveParamsSchema as Ir, BilibiliInternalMethods as It, createEmojiNode as J, validateXiaohongshuParams as Jn, emitApiSuccess as Jr, toFetcherMethod as Jt, createBlockquoteNode as K, validateDouyinParams as Kn, amagiEvents as Kr, XiaohongshuInternalMethods as Kt, getStatisticsDB as L, douyinFetcher$1 as Ln, BilibiliLoginParamsSchema as Lr, BilibiliMethodToFetcher as Lt, bilibiliDBInstance as M, xiaohongshuFetcher$1 as Mn, BilibiliCommentReplyParamsSchema as Mr, XiaohongshuMethodMapping as Mt, cleanOldDynamicCache as N, createBoundKuaishouFetcher as Nn, BilibiliDanmakuParamsSchema as Nr, getApiRoute as Nt, task as O, fetchResponse as On, BilibiliBangumiStreamParamsSchema as Or, DouyinMethodMapping as Ot, douyinDBInstance as P, kuaishouFetcher$1 as Pn, BilibiliDynamicParamsSchema as Pr, getEnglishMethodName as Pt, createLinkCardNode as Q, xiaohongshuSign as Qn, emitLogDebug as Qr, CommentType as Qt, initAllDatabases as R, createBoundDouyinFetcher as Rn, BilibiliMethodRoutes as Rr, DouyinFetcherMethods as Rt, testDouyinPush as S, qtparam as Sn, BilibiliApplyCaptchaParamsSchema as Sr, CreateApp as St, biLogin as T, logMiddleware as Tn, BilibiliArticleParamsSchema as Tr, BilibiliApiRoutes as Tt, renderVideoPreviewPage as U, createErrorResponse as Un, BilibiliValidationSchemas as Ur, KuaishouMethodToFetcher as Ut, BilibiliDBBase as V, bilibiliFetcher$1 as Vn, BilibiliUserParamsSchema as Vr, KuaishouFetcherMethods as Vt, renderRichTextToReact as W, createSuccessResponse$1 as Wn, BilibiliVideoDownloadParamsSchema as Wr, MethodMaps as Wt, createImageNode as X, XiaohongshuValidationSchemas as Xn, emitHttpResponse as Xr, AdditionalType as Xt, createHeadingNode as Y, XiaohongshuMethodRoutes as Yn, emitHttpRequest as Yr, DynamicType as Yt, createLineBreakNode as Z, xiaohongshuApiUrls as Zn, emitLog as Zr, MajorType as Zt, douyinPushList as _, bilibiliErrorCodeMap as _n, DouyinSearchParamsSchema as _r, bilibiliFetcher as _t, bilibiliAPP as a, bilibili$1 as ai, createKuaishouRoutes as an, KuaishouValidationSchemas as ar, createSearchKeywordNode as at, setbiliPush as b, av2bv as bn, DouyinValidationSchemas as br, reloadAmagiConfig as bt, prefix as c, getBilibiliData as ci, douyinUtils as cn, DouyinCommentReplyParamsSchema as cr, createViewPictureNode as ct, groupStatistics as d, Root as di, douyin$1 as dn, DouyinEmojiProParamsSchema as dr, extractRichTextPlainText as dt, emitLogInfo as ei, xiaohongshuUtils as en, KuaishouEmojiParamsSchema as er, createListNode as et, qrLogin as f, bilibiliUtils as fn, DouyinHotWordsParamsSchema as fr, normalizeRichTextNodes as ft, douyinPush as g, handleError as gn, DouyinQrcodeParamsSchema as gr, amagiClient as gt, changeBotID as h, ValidationError as hn, DouyinMusicParamsSchema as hr, SOFT_ERROR_CODES as ht, update as i, emitNetworkRetry as ii, kuaishouUtils as in, KuaishouUserWorkListParamsSchema as ir, createRichTextDocument as it, webConfig as j, createBoundXiaohongshuFetcher as jn, BilibiliCommentParamsSchema as jr, XiaohongshuApiRoutes as jt, testWrapWithErrorHandler as k, getHeadersAndData as kn, BilibiliBv2AvParamsSchema as kr, KuaishouApiRoutes as kt, xiaohongshuAPP as l, getDouyinData as li, createDouyinRoutes as ln, DouyinDanmakuParamsSchema as lr, createVoteNode as lt, bilibiliPushList as m, ApiError as mn, DouyinMethodRoutes as mr, AmagiError as mt, kkkUpdateCommand as n, emitLogWarn as ni, createBoundXiaohongshuApi as nn, KuaishouMethodRoutes as nr, createMentionNode as nt, douyinAPP as o, createBoundBilibiliApi as oi, createBoundKuaishouApi as on, KuaishouVideoParamsSchema as or, createTextNode as ot, bilibiliPush as p, createBilibiliRoutes as pn, DouyinLiveRoomParamsSchema as pr, AmagiBase as pt, createCodeBlockNode as q, validateKuaishouParams as qn, emitApiError as qr, XiaohongshuMethodToFetcher as qt, kkkUpdateTest as r, emitNetworkError as ri, xiaohongshu$1 as rn, KuaishouUserProfileParamsSchema as rr, createParagraphNode as rt, kuaishouAPP as s, bilibiliApiUrls as si, kuaishou$1 as sn, DouyinCommentParamsSchema as sr, createTopicNode as st, kkkUpdate as t, emitLogMark as ti, createXiaohongshuRoutes as tn, KuaishouLiveRoomInfoParamsSchema as tr, createLotteryNode as tt, globalStatistics as u, getKuaishouData as ui, createBoundDouyinApi as un, DouyinEmojiListParamsSchema as ur, createWebLinkNode as ut, forcePush as v, wbi_sign as vn, DouyinUserListParamsSchema as vr, douyinFetcher as vt, version as w, initLogger as wn, BilibiliArticleInfoParamsSchema as wr, amagiClient$1 as wt, setdyPush as x, bv2av as xn, DouyinWorkParamsSchema as xr, softFetch as xt, globalIgnore as y, parseDmSegMobileReply as yn, DouyinUserParamsSchema as yr, kuaishouFetcher as yt, StatisticsDBBase as z, douyinApiUrls as zn, BilibiliQrcodeParamsSchema as zr, DouyinInternalMethods as zt };
47780
+ export { createLinkCardNode as $, xiaohongshuSign as $n, emitLogDebug as $r, CommentType as $t, template_default as A, getHeadersAndData as An, BilibiliBv2AvParamsSchema as Ar, KuaishouApiRoutes as At, DouyinDBBase as B, douyinApiUrls as Bn, BilibiliQrcodeParamsSchema as Br, DouyinInternalMethods as Bt, help as C, qtparam as Cn, BilibiliApplyCaptchaParamsSchema as Cr, CreateApp as Ct, removeOldFiles as D, logger$2 as Dn, BilibiliAv2BvParamsSchema as Dr, BilibiliMethodMapping as Dt, dylogin as E, logMiddleware as En, BilibiliArticleParamsSchema as Er, BilibiliApiRoutes as Et, getBilibiliDB as F, kuaishouFetcher$1 as Fn, BilibiliDynamicParamsSchema as Fr, getEnglishMethodName as Ft, createAtNode as G, createSuccessResponse$1 as Gn, BilibiliVideoDownloadParamsSchema as Gr, MethodMaps as Gt, reactServerRender as H, bilibiliFetcher$1 as Hn, BilibiliUserParamsSchema as Hr, KuaishouFetcherMethods as Ht, getDouyinDB as I, kuaishouSign as In, BilibiliEmojiParamsSchema as Ir, BilibiliFetcherMethods as It, createEmojiNode as J, validateKuaishouParams as Jn, emitApiError as Jr, XiaohongshuMethodToFetcher as Jt, createBlockquoteNode as K, validateBilibiliParams as Kn, BilibiliVideoParamsSchema as Kr, XiaohongshuFetcherMethods as Kt, getStatisticsDB as L, kuaishouApiUrls as Ln, BilibiliLiveParamsSchema as Lr, BilibiliInternalMethods as Lt, bilibiliDBInstance as M, createBoundXiaohongshuFetcher as Mn, BilibiliCommentParamsSchema as Mr, XiaohongshuApiRoutes as Mt, cleanOldDynamicCache as N, xiaohongshuFetcher$1 as Nn, BilibiliCommentReplyParamsSchema as Nr, XiaohongshuMethodMapping as Nt, task as O, fetchData as On, BilibiliBangumiInfoParamsSchema as Or, DouyinApiRoutes as Ot, douyinDBInstance as P, createBoundKuaishouFetcher as Pn, BilibiliDanmakuParamsSchema as Pr, getApiRoute as Pt, createLineBreakNode as Q, xiaohongshuApiUrls as Qn, emitLog as Qr, MajorType as Qt, initAllDatabases as R, douyinFetcher$1 as Rn, BilibiliLoginParamsSchema as Rr, BilibiliMethodToFetcher as Rt, testDouyinPush as S, bv2av as Sn, DouyinWorkParamsSchema as Sr, softFetch as St, biLogin as T, initLogger as Tn, BilibiliArticleInfoParamsSchema as Tr, amagiClient$1 as Tt, renderVideoPreviewPage as U, createBoundBilibiliFetcher as Un, BilibiliValidateCaptchaParamsSchema as Ur, KuaishouInternalMethods as Ut, BilibiliDBBase as V, douyinSign as Vn, BilibiliQrcodeStatusParamsSchema as Vr, DouyinMethodToFetcher as Vt, renderRichTextToReact as W, createErrorResponse as Wn, BilibiliValidationSchemas as Wr, KuaishouMethodToFetcher as Wt, createHorizontalRuleNode as X, XiaohongshuMethodRoutes as Xn, emitHttpRequest as Xr, DynamicType as Xt, createHeadingNode as Y, validateXiaohongshuParams as Yn, emitApiSuccess as Yr, toFetcherMethod as Yt, createImageNode as Z, XiaohongshuValidationSchemas as Zn, emitHttpResponse as Zr, AdditionalType as Zt, douyinPushList as _, handleError as _n, DouyinQrcodeParamsSchema as _r, amagiClient as _t, bilibiliAPP as a, emitNetworkRetry as ai, kuaishouUtils as an, KuaishouUserWorkListParamsSchema as ar, createRichTextDocument as at, setbiliPush as b, parseDmSegMobileReply as bn, DouyinUserParamsSchema as br, kuaishouFetcher as bt, prefix as c, bilibiliApiUrls as ci, kuaishou$1 as cn, DouyinCommentParamsSchema as cr, createTopicNode as ct, groupStatistics as d, getKuaishouData as di, createBoundDouyinApi as dn, DouyinEmojiListParamsSchema as dr, createWebLinkNode as dt, emitLogError as ei, createAmagiClient as en, KuaishouCommentParamsSchema as er, createListItemNode as et, qrLogin as f, Root as fi, douyin$1 as fn, DouyinEmojiProParamsSchema as fr, extractRichTextPlainText as ft, douyinPush as g, ValidationError as gn, DouyinMusicParamsSchema as gr, SOFT_ERROR_CODES as gt, changeBotID as h, ApiError as hn, DouyinMethodRoutes as hr, AmagiError as ht, update as i, emitNetworkError as ii, xiaohongshu$1 as in, KuaishouUserProfileParamsSchema as ir, createParagraphNode as it, webConfig as j, isNetworkErrorResult as jn, BilibiliColumnInfoParamsSchema as jr, KuaishouMethodMapping as jt, testWrapWithErrorHandler as k, fetchResponse as kn, BilibiliBangumiStreamParamsSchema as kr, DouyinMethodMapping as kt, xiaohongshuAPP as l, getBilibiliData as li, douyinUtils as ln, DouyinCommentReplyParamsSchema as lr, createViewPictureNode as lt, bilibiliPushList as m, createBilibiliRoutes as mn, DouyinLiveRoomParamsSchema as mr, AmagiBase as mt, kkkUpdateCommand as n, emitLogMark as ni, createXiaohongshuRoutes as nn, KuaishouLiveRoomInfoParamsSchema as nr, createLotteryNode as nt, douyinAPP as o, bilibili$1 as oi, createKuaishouRoutes as on, KuaishouValidationSchemas as or, createSearchKeywordNode as ot, bilibiliPush as p, bilibiliUtils as pn, DouyinHotWordsParamsSchema as pr, normalizeRichTextNodes as pt, createCodeBlockNode as q, validateDouyinParams as qn, amagiEvents as qr, XiaohongshuInternalMethods as qt, kkkUpdateTest as r, emitLogWarn as ri, createBoundXiaohongshuApi as rn, KuaishouMethodRoutes as rr, createMentionNode as rt, kuaishouAPP as s, createBoundBilibiliApi as si, createBoundKuaishouApi as sn, KuaishouVideoParamsSchema as sr, createTextNode as st, kkkUpdate as t, emitLogInfo as ti, xiaohongshuUtils as tn, KuaishouEmojiParamsSchema as tr, createListNode as tt, globalStatistics as u, getDouyinData as ui, createDouyinRoutes as un, DouyinDanmakuParamsSchema as ur, createVoteNode as ut, forcePush as v, bilibiliErrorCodeMap as vn, DouyinSearchParamsSchema as vr, bilibiliFetcher as vt, version as w, httpLogger as wn, BilibiliArticleCardParamsSchema as wr, amagi as wt, setdyPush as x, av2bv as xn, DouyinValidationSchemas as xr, reloadAmagiConfig as xt, globalIgnore as y, wbi_sign as yn, DouyinUserListParamsSchema as yr, douyinFetcher as yt, StatisticsDBBase as z, createBoundDouyinFetcher as zn, BilibiliMethodRoutes as zr, DouyinFetcherMethods as zt };