karin-plugin-kkk 2.31.0 → 2.31.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { i as __toESM } from "./rolldown-runtime.js";
2
- import { $ as SiOppo, $n as zod_default, $t as MessageCircle, A as n, An as CircleAlert, At as Sparkles, B as RiPieChart2Fill, Bn as Chip, Bt as RotateCcw, C as BiImage, Cn as Clock, Ct as TriangleAlert, D as AiOutlineVideoCamera, Dn as CircleEllipsis, Dt as Star, E as AiFillStar, En as CircleFadingArrowUp, Et as Sun, F as RiHeart3Fill, Fn as Box, Ft as Share2, G as RiTiktokFill, Gn as require_react, Gt as Puzzle, H as RiStarFill, Hn as clsx, Ht as Radio, I as RiHeart3Line, In as Bot, It as Settings2, J as RiVerifiedBadgeFill, Jn as require_jpeg_js, Jt as Pencil, K as RiTrophyFill, Kn as require_png, Kt as Plus, L as RiHeartLine, Ln as Bookmark, Lt as Search, M as RiArrowRightFill, Mn as ChartColumn, Mt as ShoppingBag, N as RiGroupLine, Nn as Camera, Nt as Shield, O as m, On as CircleCheck, Ot as Square, P as RiHashtag, Pn as Calendar, Pt as ShieldCheck, Q as SiSamsung, Qn as Xhshow, Qt as Monitor, R as RiLiveLine, Rn as BellRing, Rt as ScanLine, S as FaUserGroup, Sn as Code, St as Upload, T as AiFillPushpin, Tn as CircleQuestionMark, Tt as Terminal, U as RiStarLine, Un as require_jsx_runtime, Ut as Quote, V as RiShareForwardFill, Vn as Button, Vt as RefreshCw, W as RiThumbUpFill, Wn as require_server_node, Wt as QrCode, X as SiXiaomi, Xn as require_protobufjs, Xt as Music, Y as RiVideoLine, Yn as require_heic_decode, Yt as Palette, Z as SiVivo, Zn as Chalk, Zt as Moon, _ as MdLocationOn, _n as Download, _t as Video, a as purify, an as Info, at as SiBilibili, b as FaMusic, bn as CornerDownLeft, bt as User, c as VictoryLine, cn as Hash, ct as zhCN, d as VictoryLabel, dn as Gamepad2, dt as formatDistanceToNow, en as Menu, et as SiOneplus, f as VictoryTheme, fn as FileText, ft as format, g as MdLightbulbOutline, gn as ExternalLink, gt as WandSparkles, h as MdInfoOutline, hn as EyeOff, ht as X, i as Window, in as LayoutTemplate, it as SiGithub, j as Markdown, jn as Check, jt as Smartphone, k as a, kn as CircleCheckBig, kt as SquarePen, l as VictoryChart, ln as GitBranch, lt as parse, m as MdFitScreen, mn as Eye, mt as Zap, n as require_lib, nn as MapPin, nt as SiHonor, o as VictoryScatter, on as Image$1, ot as SiApple, p as rehypeHighlight, pn as FilePlay, pt as differenceInSeconds, q as RiUserFollowLine, qn as require_jsQR, qt as Play, r as require_qr_code_styling, rn as LoaderCircle, rt as SiGooglephotos, s as VictoryPie, sn as Heart, st as SiAnthropic, t as createProxyMiddleware, tn as Maximize, tt as SiHuawei, u as VictoryAxis, un as Gift, ut as fromUnixTime, v as MdSchedule, vn as Crown, vt as Users, w as AiFillHeart, wn as Clapperboard, wt as Trash2, x as FaTiktok, xn as Copy, xt as UserPlus, y as FaCommentDots, yn as Cpu, yt as UsersRound, z as RiMessage3Fill, zn as ArrowDownToLine, zt as Save } from "./vendor.js";
2
+ import { $ as SiGooglephotos, $t as Moon, A as RiHashtag, An as CircleEllipsis, At as Square, B as RiThumbUpFill, Bn as Bookmark, Bt as ScanLine, C as AiFillHeart, Cn as CornerDownLeft, Ct as UserPlus, D as Markdown, Dn as Clapperboard, Dt as Terminal, E as AiOutlineVideoCamera, En as Clock, Et as Trash2, F as RiMessage3Fill, Fn as ChartColumn, Ft as Shield, G as RiVideoLine, Gn as clsx, Gt as Quote, H as RiTrophyFill, Hn as ArrowDownToLine, Ht as RotateCcw, I as RiPieChart2Fill, In as Camera, It as ShieldCheck, J as SiSamsung, Jn as require_react, Jt as Plus, K as SiXiaomi, Kn as require_jsx_runtime, Kt as QrCode, L as RiShareForwardFill, Ln as Calendar, Lt as Share2, M as RiHeart3Line, Mn as CircleCheckBig, Mt as Sparkles, N as RiHeartLine, Nn as CircleAlert, Nt as Smartphone, O as RiArrowRightFill, On as CircleQuestionMark, Ot as Sun, P as RiLiveLine, Pn as Check, Pt as ShoppingBag, Q as SiHonor, Qn as zod_default, Qt as Music, R as RiStarFill, Rn as Box, Rt as Settings2, S as BiImage, Sn as Cpu, St as User, T as AiFillStar, Tn as Code, Tt as TriangleAlert, U as RiUserFollowLine, Un as Chip, Ut as RefreshCw, V as RiTiktokFill, Vn as BellRing, Vt as Save, W as RiVerifiedBadgeFill, Wn as Button, Wt as Radio, X as SiOneplus, Xn as Chalk, Xt as Pencil, Y as SiOppo, Yn as require_protobufjs, Yt as Play, Z as SiHuawei, Zn as Xhshow, Zt as Palette, _ as MdSchedule, _n as Eye, _t as X, a as VictoryScatter, an as LoaderCircle, at as m, b as FaTiktok, bn as Download, bt as Users, c as VictoryChart, cn as Info, ct as c, d as VictoryTheme, dn as Hash, dt as fromUnixTime, en as Monitor, et as SiGithub, f as rehypeHighlight, fn as GitBranch, ft as formatDistanceToNow, g as MdLocationOn, gn as FilePlay, gt as Zap, h as MdLightbulbOutline, hn as FileText, ht as twMerge, i as require_heic_decode, in as MapPin, it as o, j as RiHeart3Fill, jn as CircleCheck, jt as SquarePen, k as RiGroupLine, kn as CircleFadingArrowUp, kt as Star, l as VictoryAxis, ln as Image$1, lt as zhCN, m as MdInfoOutline, mn as Gamepad2, mt as differenceInSeconds, n as require_lib, nn as Menu, nt as SiApple, o as VictoryPie, on as Link, ot as a, p as MdFitScreen, pn as Gift, pt as format, q as SiVivo, qn as require_server_node, qt as Puzzle, r as require_jpeg_js, rn as Maximize, rt as SiAnthropic, s as VictoryLine, sn as LayoutTemplate, st as n, t as createProxyMiddleware, tn as MessageCircle, tt as SiBilibili, u as VictoryLabel, un as Heart, ut as parse, v as FaCommentDots, vn as EyeOff, vt as WandSparkles, w as AiFillPushpin, wn as Copy, wt as Upload, x as FaUserGroup, xn as Crown, xt as UsersRound, y as FaMusic, yn as ExternalLink, yt as Video, z as RiStarLine, 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";
@@ -15,8 +15,10 @@ import { karinPathBase, karinPathTemp as karinPathTemp$1 } from "node-karin/root
15
15
  import sqlite3 from "node-karin/sqlite3";
16
16
  import YAML from "node-karin/yaml";
17
17
  import util from "node:util";
18
+ import { generate, scan } from "@ikenxuan/qrcode";
18
19
  import { Transform } from "node:stream";
19
20
  import { pipeline } from "node:stream/promises";
21
+ import { inflateSync } from "node:zlib";
20
22
  import { embedWatermarkToPngBytes } from "@ikenxuan/watermark";
21
23
  import { snapka } from "@karinjs/plugin-puppeteer";
22
24
  import { newInjectedPage } from "fingerprint-injector";
@@ -3280,7 +3282,6 @@ var XBogus = class {
3280
3282
  const array2 = this.md5StrToArray(this.md5(this.md5StrToArray("d41d8cd98f00b204e9800998ecf8427e")));
3281
3283
  const urlEncryptedArray = this.md5Encrypt(urlPath);
3282
3284
  const timestamp = Math.floor(Date.now() / 1e3);
3283
- const ct = 536919696;
3284
3285
  const newArray = [
3285
3286
  64,
3286
3287
  1,
@@ -3296,10 +3297,10 @@ var XBogus = class {
3296
3297
  timestamp >> 16 & 255,
3297
3298
  timestamp >> 8 & 255,
3298
3299
  timestamp & 255,
3299
- ct >> 24 & 255,
3300
- ct >> 16 & 255,
3301
- ct >> 8 & 255,
3302
- ct & 255
3300
+ 32,
3301
+ 0,
3302
+ 190,
3303
+ 144
3303
3304
  ];
3304
3305
  let xorResult = newArray[0];
3305
3306
  for (let i = 1; i < newArray.length; i++) xorResult ^= newArray[i];
@@ -6296,7 +6297,7 @@ var captureKuaishouEncodeStack = () => {
6296
6297
  * @returns 用于 `SECS.s` 的栈尾字符串
6297
6298
  */
6298
6299
  var deriveKuaishouSecsStackTail = (stack = captureKuaishouEncodeStack()) => {
6299
- return stack.length > KUAISHOU_SECS_STACK_LIMIT ? stack.slice(-KUAISHOU_SECS_STACK_LIMIT) : stack;
6300
+ return stack.length > KUAISHOU_SECS_STACK_LIMIT ? stack.slice(-100) : stack;
6300
6301
  };
6301
6302
  /**
6302
6303
  * 构造快手 `window.SECS` 的纯算法等价状态。
@@ -10906,585 +10907,6 @@ var formatBuildTime = (isoString) => {
10906
10907
  const date = new Date(isoString);
10907
10908
  return `${date.getFullYear()}年${String(date.getMonth() + 1).padStart(2, "0")}月${String(date.getDate()).padStart(2, "0")}日 ${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
10908
10909
  };
10909
- //#endregion
10910
- //#region src/module/utils/QRCodeScanner.ts
10911
- var import_heic_decode = /* @__PURE__ */ __toESM(require_heic_decode(), 1);
10912
- var import_jpeg_js = /* @__PURE__ */ __toESM(require_jpeg_js(), 1);
10913
- var import_jsQR = /* @__PURE__ */ __toESM(require_jsQR(), 1);
10914
- var import_png = require_png();
10915
- /**
10916
- * 二维码扫描工具类
10917
- *
10918
- * 使用纯 JavaScript 实现,无需任何 native 模块依赖
10919
- *
10920
- * 支持的图片格式:
10921
- * - PNG (使用 pngjs)
10922
- * - JPEG/JPG (使用 jpeg-js)
10923
- * - HEIC/HEIF (使用 heic-decode,基于 WASM)
10924
- *
10925
- * 注意:所有图片解码库均为纯 JavaScript/WASM 实现,
10926
- * 不依赖任何 native 模块,可在任何平台上运行
10927
- */
10928
- var QRCodeScanner = class {
10929
- /**
10930
- * 从图片 URL 识别二维码
10931
- * @param imageUrl 图片 URL
10932
- * @returns 二维码内容,如果没有识别到则返回 null
10933
- */
10934
- static async scanFromUrl(imageUrl) {
10935
- try {
10936
- const response = await axios.get(imageUrl, { responseType: "arraybuffer" });
10937
- const buffer = Buffer.from(response.data);
10938
- if (!this.detectImageFormat(buffer)) {
10939
- logger.debug("URL 内容不是支持的图片格式,跳过二维码扫描");
10940
- return null;
10941
- }
10942
- return this.scanFromBuffer(buffer);
10943
- } catch (error) {
10944
- logger.error("识别二维码时发生错误:", error);
10945
- return null;
10946
- }
10947
- }
10948
- /**
10949
- * 提取图片的一个区域
10950
- * @param imageData 原始图片数据
10951
- * @param x 起始 x 坐标
10952
- * @param y 起始 y 坐标
10953
- * @param width 区域宽度
10954
- * @param height 区域高度
10955
- * @returns 区域图片数据
10956
- */
10957
- static extractRegion(imageData, x, y, width, height) {
10958
- const newData = new Uint8ClampedArray(width * height * 4);
10959
- for (let dy = 0; dy < height; dy++) for (let dx = 0; dx < width; dx++) {
10960
- const srcX = x + dx;
10961
- const srcY = y + dy;
10962
- if (srcX >= imageData.width || srcY >= imageData.height) continue;
10963
- const srcIndex = (srcY * imageData.width + srcX) * 4;
10964
- const dstIndex = (dy * width + dx) * 4;
10965
- newData[dstIndex] = imageData.data[srcIndex];
10966
- newData[dstIndex + 1] = imageData.data[srcIndex + 1];
10967
- newData[dstIndex + 2] = imageData.data[srcIndex + 2];
10968
- newData[dstIndex + 3] = imageData.data[srcIndex + 3];
10969
- }
10970
- return {
10971
- width,
10972
- height,
10973
- data: newData
10974
- };
10975
- }
10976
- /**
10977
- * 增强图片对比度(用于提高二维码识别率)
10978
- * @param imageData 图片数据
10979
- * @returns 增强后的图片数据
10980
- */
10981
- static enhanceContrast(imageData) {
10982
- const { width, height, data } = imageData;
10983
- const newData = new Uint8ClampedArray(data.length);
10984
- const histogram = new Array(256).fill(0);
10985
- for (let i = 0; i < data.length; i += 4) {
10986
- const gray = Math.floor(.299 * data[i] + .587 * data[i + 1] + .114 * data[i + 2]);
10987
- histogram[gray]++;
10988
- }
10989
- const cdf = new Array(256).fill(0);
10990
- cdf[0] = histogram[0];
10991
- for (let i = 1; i < 256; i++) cdf[i] = cdf[i - 1] + histogram[i];
10992
- const totalPixels = width * height;
10993
- const cdfMin = cdf.find((v) => v > 0) || 0;
10994
- for (let i = 0; i < data.length; i += 4) {
10995
- const gray = Math.floor(.299 * data[i] + .587 * data[i + 1] + .114 * data[i + 2]);
10996
- const newGray = Math.floor((cdf[gray] - cdfMin) / (totalPixels - cdfMin) * 255);
10997
- newData[i] = newGray;
10998
- newData[i + 1] = newGray;
10999
- newData[i + 2] = newGray;
11000
- newData[i + 3] = data[i + 3];
11001
- }
11002
- return {
11003
- width,
11004
- height,
11005
- data: newData
11006
- };
11007
- }
11008
- /**
11009
- * 二值化处理(用于提高小二维码识别率)
11010
- * @param imageData 图片数据
11011
- * @param threshold 阈值(0-255),默认自动计算
11012
- * @returns 二值化后的图片数据
11013
- */
11014
- static binarize(imageData, threshold) {
11015
- const { width, height, data } = imageData;
11016
- const newData = new Uint8ClampedArray(data.length);
11017
- if (threshold === void 0) {
11018
- const histogram = new Array(256).fill(0);
11019
- for (let i = 0; i < data.length; i += 4) {
11020
- const gray = Math.floor(.299 * data[i] + .587 * data[i + 1] + .114 * data[i + 2]);
11021
- histogram[gray]++;
11022
- }
11023
- const total = width * height;
11024
- let sum = 0;
11025
- for (let i = 0; i < 256; i++) sum += i * histogram[i];
11026
- let sumB = 0;
11027
- let wB = 0;
11028
- let wF = 0;
11029
- let maxVariance = 0;
11030
- threshold = 0;
11031
- for (let t = 0; t < 256; t++) {
11032
- wB += histogram[t];
11033
- if (wB === 0) continue;
11034
- wF = total - wB;
11035
- if (wF === 0) break;
11036
- sumB += t * histogram[t];
11037
- const mB = sumB / wB;
11038
- const mF = (sum - sumB) / wF;
11039
- const variance = wB * wF * (mB - mF) * (mB - mF);
11040
- if (variance > maxVariance) {
11041
- maxVariance = variance;
11042
- threshold = t;
11043
- }
11044
- }
11045
- }
11046
- for (let i = 0; i < data.length; i += 4) {
11047
- const binary = Math.floor(.299 * data[i] + .587 * data[i + 1] + .114 * data[i + 2]) > threshold ? 255 : 0;
11048
- newData[i] = binary;
11049
- newData[i + 1] = binary;
11050
- newData[i + 2] = binary;
11051
- newData[i + 3] = data[i + 3];
11052
- }
11053
- return {
11054
- width,
11055
- height,
11056
- data: newData
11057
- };
11058
- }
11059
- /**
11060
- * 锐化处理(增强边缘)
11061
- * @param imageData 图片数据
11062
- * @returns 锐化后的图片数据
11063
- */
11064
- static sharpen(imageData) {
11065
- const { width, height, data } = imageData;
11066
- const newData = new Uint8ClampedArray(data.length);
11067
- const kernel = [
11068
- 0,
11069
- -1,
11070
- 0,
11071
- -1,
11072
- 5,
11073
- -1,
11074
- 0,
11075
- -1,
11076
- 0
11077
- ];
11078
- for (let y = 1; y < height - 1; y++) for (let x = 1; x < width - 1; x++) {
11079
- let r = 0, g = 0, b = 0;
11080
- for (let ky = -1; ky <= 1; ky++) for (let kx = -1; kx <= 1; kx++) {
11081
- const idx = ((y + ky) * width + (x + kx)) * 4;
11082
- const k = kernel[(ky + 1) * 3 + (kx + 1)];
11083
- r += data[idx] * k;
11084
- g += data[idx + 1] * k;
11085
- b += data[idx + 2] * k;
11086
- }
11087
- const idx = (y * width + x) * 4;
11088
- newData[idx] = Math.max(0, Math.min(255, r));
11089
- newData[idx + 1] = Math.max(0, Math.min(255, g));
11090
- newData[idx + 2] = Math.max(0, Math.min(255, b));
11091
- newData[idx + 3] = data[idx + 3];
11092
- }
11093
- for (let x = 0; x < width; x++) {
11094
- const topIdx = x * 4;
11095
- const bottomIdx = ((height - 1) * width + x) * 4;
11096
- for (let c = 0; c < 4; c++) {
11097
- newData[topIdx + c] = data[topIdx + c];
11098
- newData[bottomIdx + c] = data[bottomIdx + c];
11099
- }
11100
- }
11101
- for (let y = 0; y < height; y++) {
11102
- const leftIdx = y * width * 4;
11103
- const rightIdx = (y * width + width - 1) * 4;
11104
- for (let c = 0; c < 4; c++) {
11105
- newData[leftIdx + c] = data[leftIdx + c];
11106
- newData[rightIdx + c] = data[rightIdx + c];
11107
- }
11108
- }
11109
- return {
11110
- width,
11111
- height,
11112
- data: newData
11113
- };
11114
- }
11115
- /**
11116
- * 在图片区域中尝试识别二维码
11117
- * @param imageData 图片数据
11118
- * @param regionName 区域名称(用于日志)
11119
- * @returns 二维码内容或 null
11120
- */
11121
- static tryRecognizeInRegion(imageData, regionName) {
11122
- for (const strategy of [
11123
- {
11124
- name: "默认",
11125
- enhance: false,
11126
- binarize: false,
11127
- sharpen: false,
11128
- options: void 0
11129
- },
11130
- {
11131
- name: "二值化",
11132
- enhance: false,
11133
- binarize: true,
11134
- sharpen: false,
11135
- options: void 0
11136
- },
11137
- {
11138
- name: "锐化",
11139
- enhance: false,
11140
- binarize: false,
11141
- sharpen: true,
11142
- options: void 0
11143
- },
11144
- {
11145
- name: "增强对比度",
11146
- enhance: true,
11147
- binarize: false,
11148
- sharpen: false,
11149
- options: void 0
11150
- },
11151
- {
11152
- name: "增强+二值化",
11153
- enhance: true,
11154
- binarize: true,
11155
- sharpen: false,
11156
- options: void 0
11157
- },
11158
- {
11159
- name: "锐化+二值化",
11160
- enhance: false,
11161
- binarize: true,
11162
- sharpen: true,
11163
- options: void 0
11164
- },
11165
- {
11166
- name: "attemptBoth",
11167
- enhance: false,
11168
- binarize: false,
11169
- sharpen: false,
11170
- options: { inversionAttempts: "attemptBoth" }
11171
- },
11172
- {
11173
- name: "二值化+attemptBoth",
11174
- enhance: false,
11175
- binarize: true,
11176
- sharpen: false,
11177
- options: { inversionAttempts: "attemptBoth" }
11178
- }
11179
- ]) try {
11180
- logger.debug(` 尝试策略: ${strategy.name}`);
11181
- let processedData = imageData;
11182
- if (strategy.sharpen) processedData = this.sharpen(processedData);
11183
- if (strategy.enhance) processedData = this.enhanceContrast(processedData);
11184
- if (strategy.binarize) processedData = this.binarize(processedData);
11185
- const code = (0, import_jsQR.default)(processedData.data, processedData.width, processedData.height, strategy.options);
11186
- if (code && code.data) {
11187
- logger.debug(`✓ 成功识别二维码 [区域: ${regionName}] [策略: ${strategy.name}]`);
11188
- logger.debug(` 二维码内容: ${code.data}`);
11189
- return code.data;
11190
- } else logger.debug(` 策略 ${strategy.name} 未识别到二维码`);
11191
- } catch (err) {
11192
- logger.debug(` 策略 ${strategy.name} 执行失败: ${err}`);
11193
- }
11194
- logger.debug(` 区域 ${regionName} 识别失败,尝试下一个区域`);
11195
- return null;
11196
- }
11197
- /**
11198
- * 检测图片格式
11199
- * @param buffer 图片 Buffer
11200
- * @returns 图片格式或 null
11201
- */
11202
- static detectImageFormat(buffer) {
11203
- if (buffer.length >= 8 && buffer[0] === 137 && buffer[1] === 80 && buffer[2] === 78 && buffer[3] === 71) return "png";
11204
- if (buffer.length >= 3 && buffer[0] === 255 && buffer[1] === 216 && buffer[2] === 255) return "jpeg";
11205
- if (buffer.length >= 12) {
11206
- if (buffer.toString("ascii", 4, 8) === "ftyp") {
11207
- const brand = buffer.toString("ascii", 8, 12);
11208
- if (brand === "heic" || brand === "heix" || brand === "hevc" || brand === "hevx" || brand === "mif1" || brand === "msf1") return "heic";
11209
- }
11210
- }
11211
- if (buffer.length >= 6 && buffer[0] === 71 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 56) return "gif";
11212
- if (buffer.length >= 2 && buffer[0] === 66 && buffer[1] === 77) return "bmp";
11213
- if (buffer.length >= 12 && buffer[0] === 82 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 70 && buffer[8] === 87 && buffer[9] === 69 && buffer[10] === 66 && buffer[11] === 80) return "webp";
11214
- return null;
11215
- }
11216
- /**
11217
- * 解析 PNG 图片
11218
- * @param buffer 图片 Buffer
11219
- * @returns 图片数据或 null
11220
- */
11221
- static parsePNG(buffer) {
11222
- try {
11223
- const png = import_png.PNG.sync.read(buffer);
11224
- logger.debug(`PNG 解析成功: ${png.width}x${png.height}`);
11225
- return {
11226
- width: png.width,
11227
- height: png.height,
11228
- data: Uint8ClampedArray.from(png.data)
11229
- };
11230
- } catch (err) {
11231
- logger.warn("PNG 解析失败:", err);
11232
- return null;
11233
- }
11234
- }
11235
- /**
11236
- * 解析 JPEG 图片
11237
- * @param buffer 图片 Buffer
11238
- * @returns 图片数据或 null
11239
- */
11240
- static parseJPEG(buffer) {
11241
- try {
11242
- const decoded = import_jpeg_js.default.decode(buffer, { useTArray: true });
11243
- logger.debug(`JPEG 解析成功: ${decoded.width}x${decoded.height}`);
11244
- return {
11245
- width: decoded.width,
11246
- height: decoded.height,
11247
- data: Uint8ClampedArray.from(decoded.data)
11248
- };
11249
- } catch (err) {
11250
- logger.warn("JPEG 解析失败:", err);
11251
- return null;
11252
- }
11253
- }
11254
- /**
11255
- * 解析 HEIC/HEIF 图片
11256
- * @param buffer 图片 Buffer
11257
- * @returns 图片数据或 null
11258
- */
11259
- static async parseHEIC(buffer) {
11260
- try {
11261
- const decoded = await (0, import_heic_decode.default)({ buffer });
11262
- logger.debug(`HEIC 解析成功: ${decoded.width}x${decoded.height}`);
11263
- return {
11264
- width: decoded.width,
11265
- height: decoded.height,
11266
- data: Uint8ClampedArray.from(decoded.data)
11267
- };
11268
- } catch (err) {
11269
- logger.warn("HEIC 解析失败:", err);
11270
- return null;
11271
- }
11272
- }
11273
- /**
11274
- * 解析图片 Buffer 为像素数据
11275
- * @param buffer 图片 Buffer
11276
- * @returns 图片数据或 null
11277
- */
11278
- static async parseImageBuffer(buffer) {
11279
- try {
11280
- const format = this.detectImageFormat(buffer);
11281
- logger.debug(`检测到图片格式: ${format || "未知"}`);
11282
- if (!format) {
11283
- logger.warn("无法识别图片格式");
11284
- return null;
11285
- }
11286
- switch (format) {
11287
- case "png": return this.parsePNG(buffer);
11288
- case "jpeg": return this.parseJPEG(buffer);
11289
- case "heic": return await this.parseHEIC(buffer);
11290
- default:
11291
- logger.warn(`不支持的图片格式: ${format}`);
11292
- return null;
11293
- }
11294
- } catch (err) {
11295
- logger.warn("图片解析失败:", err);
11296
- return null;
11297
- }
11298
- }
11299
- /**
11300
- * 从图片 Buffer 识别二维码
11301
- * @param buffer 图片 Buffer
11302
- * @returns 二维码内容,如果没有识别到则返回 null
11303
- */
11304
- static async scanFromBuffer(buffer) {
11305
- try {
11306
- const imageData = await this.parseImageBuffer(buffer);
11307
- if (!imageData) return null;
11308
- const { width, height } = imageData;
11309
- const dataSizeMB = (width * height * 4 / 1024 / 1024).toFixed(2);
11310
- logger.debug(`图片数据: ${width}x${height}, 内存占用: ${dataSizeMB}MB`);
11311
- if (width <= 1024 && height <= 1024) {
11312
- logger.debug("图片尺寸较小,使用全图识别策略");
11313
- const result = this.tryRecognizeInRegion(imageData, "全图");
11314
- if (result) return result;
11315
- }
11316
- logger.debug(`使用分块扫描策略 (${width}x${height})`);
11317
- const scanRegions = [];
11318
- const smallBlock = Math.min(400, Math.floor(Math.min(width, height) * .3));
11319
- const mediumBlock = Math.min(600, Math.floor(Math.min(width, height) * .5));
11320
- const largeBlock = Math.min(800, Math.floor(Math.max(width, height) * .6));
11321
- logger.debug("添加四角小块扫描区域(优先)");
11322
- scanRegions.push({
11323
- name: "左上角-小",
11324
- x: 0,
11325
- y: 0,
11326
- w: Math.min(smallBlock, width),
11327
- h: Math.min(smallBlock, height)
11328
- });
11329
- scanRegions.push({
11330
- name: "右上角-小",
11331
- x: Math.max(0, width - smallBlock),
11332
- y: 0,
11333
- w: Math.min(smallBlock, width),
11334
- h: Math.min(smallBlock, height)
11335
- });
11336
- scanRegions.push({
11337
- name: "左下角-小",
11338
- x: 0,
11339
- y: Math.max(0, height - smallBlock),
11340
- w: Math.min(smallBlock, width),
11341
- h: Math.min(smallBlock, height)
11342
- });
11343
- scanRegions.push({
11344
- name: "右下角-小",
11345
- x: Math.max(0, width - smallBlock),
11346
- y: Math.max(0, height - smallBlock),
11347
- w: Math.min(smallBlock, width),
11348
- h: Math.min(smallBlock, height)
11349
- });
11350
- logger.debug("添加四角中块扫描区域");
11351
- scanRegions.push({
11352
- name: "左上角-中",
11353
- x: 0,
11354
- y: 0,
11355
- w: Math.min(mediumBlock, width),
11356
- h: Math.min(mediumBlock, height)
11357
- });
11358
- scanRegions.push({
11359
- name: "右上角-中",
11360
- x: Math.max(0, width - mediumBlock),
11361
- y: 0,
11362
- w: Math.min(mediumBlock, width),
11363
- h: Math.min(mediumBlock, height)
11364
- });
11365
- scanRegions.push({
11366
- name: "左下角-中",
11367
- x: 0,
11368
- y: Math.max(0, height - mediumBlock),
11369
- w: Math.min(mediumBlock, width),
11370
- h: Math.min(mediumBlock, height)
11371
- });
11372
- scanRegions.push({
11373
- name: "右下角-中",
11374
- x: Math.max(0, width - mediumBlock),
11375
- y: Math.max(0, height - mediumBlock),
11376
- w: Math.min(mediumBlock, width),
11377
- h: Math.min(mediumBlock, height)
11378
- });
11379
- logger.debug("添加四角大块扫描区域");
11380
- const blockW = Math.min(largeBlock, width);
11381
- const blockH = Math.min(largeBlock, height);
11382
- scanRegions.push({
11383
- name: "左上角-大",
11384
- x: 0,
11385
- y: 0,
11386
- w: blockW,
11387
- h: blockH
11388
- });
11389
- scanRegions.push({
11390
- name: "右上角-大",
11391
- x: Math.max(0, width - blockW),
11392
- y: 0,
11393
- w: blockW,
11394
- h: blockH
11395
- });
11396
- scanRegions.push({
11397
- name: "左下角-大",
11398
- x: 0,
11399
- y: Math.max(0, height - blockH),
11400
- w: blockW,
11401
- h: blockH
11402
- });
11403
- scanRegions.push({
11404
- name: "右下角-大",
11405
- x: Math.max(0, width - blockW),
11406
- y: Math.max(0, height - blockH),
11407
- w: blockW,
11408
- h: blockH
11409
- });
11410
- if (width > mediumBlock * 1.5) {
11411
- logger.debug("添加顶部/底部中间扫描区域");
11412
- scanRegions.push({
11413
- name: "顶部中-小",
11414
- x: Math.floor((width - smallBlock) / 2),
11415
- y: 0,
11416
- w: Math.min(smallBlock, width),
11417
- h: Math.min(smallBlock, height)
11418
- });
11419
- if (height > mediumBlock * 1.5) scanRegions.push({
11420
- name: "底部中-小",
11421
- x: Math.floor((width - smallBlock) / 2),
11422
- y: Math.max(0, height - smallBlock),
11423
- w: Math.min(smallBlock, width),
11424
- h: Math.min(smallBlock, height)
11425
- });
11426
- }
11427
- if (height > mediumBlock * 1.5) {
11428
- logger.debug("添加左右中间扫描区域");
11429
- const middleY = Math.floor((height - smallBlock) / 2);
11430
- scanRegions.push({
11431
- name: "左中-小",
11432
- x: 0,
11433
- y: middleY,
11434
- w: Math.min(smallBlock, width),
11435
- h: Math.min(smallBlock, height)
11436
- });
11437
- if (width > mediumBlock * 1.5) scanRegions.push({
11438
- name: "右中-小",
11439
- x: Math.max(0, width - smallBlock),
11440
- y: middleY,
11441
- w: Math.min(smallBlock, width),
11442
- h: Math.min(smallBlock, height)
11443
- });
11444
- }
11445
- if (width > mediumBlock && height > mediumBlock) {
11446
- logger.debug("添加中心区域");
11447
- scanRegions.push({
11448
- name: "中心-小",
11449
- x: Math.floor((width - smallBlock) / 2),
11450
- y: Math.floor((height - smallBlock) / 2),
11451
- w: Math.min(smallBlock, width),
11452
- h: Math.min(smallBlock, height)
11453
- });
11454
- }
11455
- logger.debug(`共生成 ${scanRegions.length} 个扫描区域,开始逐个扫描`);
11456
- for (let i = 0; i < scanRegions.length; i++) {
11457
- const region = scanRegions[i];
11458
- logger.debug(`[${i + 1}/${scanRegions.length}] 扫描区域: ${region.name} (位置: ${region.x},${region.y}, 尺寸: ${region.w}x${region.h})`);
11459
- const regionData = this.extractRegion(imageData, region.x, region.y, region.w, region.h);
11460
- const result = this.tryRecognizeInRegion(regionData, region.name);
11461
- if (result) {
11462
- logger.debug(`二维码识别完成,共扫描了 ${i + 1}/${scanRegions.length} 个区域`);
11463
- return result;
11464
- }
11465
- }
11466
- logger.warn(`图片中未识别到二维码,已扫描所有 ${scanRegions.length} 个区域`);
11467
- return null;
11468
- } catch (error) {
11469
- logger.error("解析图片时发生错误:", error);
11470
- return null;
11471
- }
11472
- }
11473
- /**
11474
- * 检查二维码内容是否包含支持的平台链接
11475
- * @param qrContent 二维码内容
11476
- * @returns 是否包含支持的平台链接
11477
- */
11478
- static isSupportedPlatform(qrContent) {
11479
- return [
11480
- /(https?:\/\/)?(www|v|jx|m|jingxuan)\.(douyin|iesdouyin)\.com/i,
11481
- /https:\/\/aweme\.snssdk\.com\/aweme\/v1\/play/i,
11482
- /(bilibili\.com|b23\.tv|t\.bilibili\.com|bili2233\.cn|\bBV[1-9a-zA-Z]{10}\b|\bav\d+\b)/i,
11483
- /(快手.*快手|v\.kuaishou\.com|kuaishou\.com)/,
11484
- /(xiaohongshu\.com|xhslink\.com)/
11485
- ].some((pattern) => pattern.test(qrContent));
11486
- }
11487
- };
11488
10910
  /** 常用工具合集 */
11489
10911
  var Common = new class Tools {
11490
10912
  static VIDEO_PREVIEW_REMOVED_RETENTION_MS = 300 * 1e3;
@@ -11525,8 +10947,15 @@ var Common = new class Tools {
11525
10947
  async tryScanImageQrCode(imageUrl, source) {
11526
10948
  try {
11527
10949
  logger.debug(`检测到${source}为图片,尝试识别二维码...`);
11528
- const qrContent = await QRCodeScanner.scanFromUrl(imageUrl);
11529
- if (qrContent && QRCodeScanner.isSupportedPlatform(qrContent)) {
10950
+ const response = await axios.get(imageUrl, { responseType: "arraybuffer" });
10951
+ const qrContent = scan(Buffer.from(response.data));
10952
+ if (qrContent && [
10953
+ /(https?:\/\/)?(www|v|jx|m|jingxuan)\.(douyin|iesdouyin)\.com/i,
10954
+ /https:\/\/aweme\.snssdk\.com\/aweme\/v1\/play/i,
10955
+ /(bilibili\.com|b23\.tv|t\.bilibili\.com|bili2233\.cn|\bBV[1-9a-zA-Z]{10}\b|\bav\d+\b)/i,
10956
+ /(快手.*快手|v\.kuaishou\.com|kuaishou\.com)/,
10957
+ /(xiaohongshu\.com|xhslink\.com)/
10958
+ ].some((pattern) => pattern.test(qrContent))) {
11530
10959
  logger.debug(`从${source}二维码中识别到支持的平台链接: ${qrContent}`);
11531
10960
  return qrContent;
11532
10961
  } else if (qrContent) logger.debug(`识别到二维码内容但不是支持的平台: ${qrContent}`);
@@ -13565,6 +12994,11 @@ var PreviewLayout = ({ state }) => {
13565
12994
  });
13566
12995
  };
13567
12996
  //#endregion
12997
+ //#region ../template/src/utils/cn.ts
12998
+ function cn(...inputs) {
12999
+ return twMerge(clsx(inputs));
13000
+ }
13001
+ //#endregion
13568
13002
  //#region ../template/src/components/common/GlowImage.tsx
13569
13003
  var GlowImage = ({ src, children, alt, className, imgClassName, mode = "blur-layer", blurRadius = 18, glowStrength = .6, scale = 1.06, shadowRadius = 28, crossOrigin }) => {
13570
13004
  const [shadowColor, setShadowColor] = import_react.useState("rgba(255,255,255,0.5)");
@@ -14592,7 +14026,7 @@ var ViteLogo = ({ className = "w-auto h-12" }) => /* @__PURE__ */ (0, import_jsx
14592
14026
  var DefaultLayout = ({ children, version, data, scale = 3, className = "", style = {}, watermarkTextBitSize }) => {
14593
14027
  const { useDarkTheme } = data;
14594
14028
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
14595
- className: clsx("w-360 shrink-0 bg-background text-foreground font-[HarmonyOSHans-Regular]", useDarkTheme ? "dark" : "light", className),
14029
+ className: cn("w-360 shrink-0 bg-background text-foreground font-[HarmonyOSHans-Regular]", useDarkTheme ? "dark" : "light", className),
14596
14030
  "data-theme": useDarkTheme ? "dark" : "light",
14597
14031
  id: "container",
14598
14032
  style: {
@@ -14668,12 +14102,12 @@ var DefaultLayout = ({ children, version, data, scale = 3, className = "", style
14668
14102
  className: "w-4 h-4"
14669
14103
  }),
14670
14104
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
14671
- className: clsx(version.hasUpdate && "text-success", !version.hasUpdate && version.releaseType === "Preview" && "text-warning"),
14105
+ className: cn(version.hasUpdate && "text-success", !version.hasUpdate && version.releaseType === "Preview" && "text-warning"),
14672
14106
  children: version.hasUpdate ? "有可用更新" : version.releaseType
14673
14107
  })
14674
14108
  ]
14675
14109
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
14676
- className: clsx("text-5xl font-bold tracking-wide", version.hasUpdate && "text-success", !version.hasUpdate && version.releaseType === "Preview" && "text-warning"),
14110
+ className: cn("text-5xl font-bold tracking-wide", version.hasUpdate && "text-success", !version.hasUpdate && version.releaseType === "Preview" && "text-warning"),
14677
14111
  children: ["v", version.pluginVersion]
14678
14112
  })]
14679
14113
  }),
@@ -14750,7 +14184,7 @@ var DefaultLayout = ({ children, version, data, scale = 3, className = "", style
14750
14184
  var UsernameDisplay = ({ metadata, className, style }) => {
14751
14185
  const vipColor = metadata.vipStatus === 1 ? metadata.nicknameColor ?? "#FB7299" : null;
14752
14186
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
14753
- className: clsx(!vipColor && "text-foreground", "font-bold", className),
14187
+ className: cn(!vipColor && "text-foreground", "font-bold", className),
14754
14188
  style: {
14755
14189
  ...style,
14756
14190
  ...vipColor ? { color: vipColor } : {}
@@ -15182,14 +14616,14 @@ var BangumiBilibiliEpisodes = (props) => {
15182
14616
  className: "flex justify-center items-center text-7xl font-bold select-text text-foreground",
15183
14617
  children: day
15184
14618
  }),
15185
- !isLastOfAll && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: clsx("mt-8 w-1 bg-divider", episodesInSameDate > 1 ? "h-110" : "h-95") })
14619
+ !isLastOfAll && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("mt-8 w-1 bg-divider", episodesInSameDate > 1 ? "h-110" : "h-95") })
15186
14620
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
15187
14621
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-1 h-10 bg-divider" }),
15188
14622
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "my-2 w-4 h-4 rounded-full bg-divider" }),
15189
- (!isLastOfAll || episodesInSameDate > 1) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: clsx("w-1 bg-divider", isLastOfDate ? "h-110" : "h-130") })
14623
+ (!isLastOfAll || episodesInSameDate > 1) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("w-1 bg-divider", isLastOfDate ? "h-110" : "h-130") })
15190
14624
  ] })
15191
14625
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
15192
- className: clsx("flex-1 min-w-0", !isLastOfAll && isLastOfDate && "mb-20"),
14626
+ className: cn("flex-1 min-w-0", !isLastOfAll && isLastOfDate && "mb-20"),
15193
14627
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
15194
14628
  className: "flex justify-between items-center mb-10",
15195
14629
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -15377,11 +14811,14 @@ var createParagraphNode = (nodes) => ({
15377
14811
  nodes
15378
14812
  });
15379
14813
  /** 创建图片节点。 */
15380
- var createImageNode = (src, alt) => ({
14814
+ var createImageNode = (src, alt, caption) => ({
15381
14815
  type: "image",
15382
14816
  src,
15383
- alt
14817
+ alt,
14818
+ caption
15384
14819
  });
14820
+ /** 创建水平分隔线节点。 */
14821
+ var createHorizontalRuleNode = () => ({ type: "horizontalRule" });
15385
14822
  /** 创建引用块节点。 */
15386
14823
  var createBlockquoteNode = (nodes) => ({
15387
14824
  type: "blockquote",
@@ -15456,7 +14893,8 @@ var extractRichTextPlainText = (document) => {
15456
14893
  case "blockquote":
15457
14894
  case "listItem": return node.nodes.map(extractFromNode).join("");
15458
14895
  case "list": return node.items.map(extractFromNode).join("");
15459
- case "lineBreak": return "";
14896
+ case "lineBreak":
14897
+ case "horizontalRule": return "";
15460
14898
  case "image": return "";
15461
14899
  case "codeBlock": return node.content;
15462
14900
  case "linkCard": return node.title;
@@ -15804,15 +15242,24 @@ var renderNodeToReact = (node, index, options) => {
15804
15242
  case "image": {
15805
15243
  const safeSrc = sanitizeImageSource(node.src);
15806
15244
  if (!safeSrc) return null;
15807
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
15808
- className: "rounded-4xl",
15809
- src: safeSrc,
15810
- alt: node.alt || "",
15811
- referrerPolicy: "no-referrer",
15812
- crossOrigin: "anonymous",
15813
- "data-richtext-node": "image"
15245
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
15246
+ "data-richtext-node": "image",
15247
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
15248
+ className: "rounded-4xl",
15249
+ src: safeSrc,
15250
+ alt: node.alt || "",
15251
+ referrerPolicy: "no-referrer",
15252
+ crossOrigin: "anonymous"
15253
+ }), node.caption && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
15254
+ className: "mt-6 text-center text-[36px] text-foreground/60 select-text",
15255
+ children: node.caption
15256
+ })]
15814
15257
  }, `image-${index}`);
15815
15258
  }
15259
+ case "horizontalRule": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
15260
+ className: "my-16 w-full h-px bg-border",
15261
+ "data-richtext-node": "horizontalRule"
15262
+ }, `hr-${index}`);
15816
15263
  case "blockquote": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("blockquote", {
15817
15264
  "data-richtext-node": "blockquote",
15818
15265
  children: node.nodes.map((child, childIndex) => renderNodeToReact(child, childIndex, options))
@@ -15880,6 +15327,34 @@ var renderRichTextToReact = (document, options = {}) => {
15880
15327
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: document.nodes.map((node, index) => renderNodeToReact(node, index, options)) });
15881
15328
  };
15882
15329
  //#endregion
15330
+ //#region ../template/src/utils/QRcode.ts
15331
+ /**
15332
+ * Generates a QR code image in base64 format for the given text.
15333
+ *
15334
+ * @param {string} text - The text to encode in the QR code.
15335
+ * @param {boolean} [useDarkTheme=false] - Whether to use a dark theme for the QR code.
15336
+ * @return {string} The base64-encoded QR code image.
15337
+ */
15338
+ var generateQRCode = (text, useDarkTheme = false) => {
15339
+ return `data:image/webp;base64,${generate({
15340
+ data: text,
15341
+ size: 1e3,
15342
+ dotsOptions: {
15343
+ dotType: "rounded",
15344
+ color: useDarkTheme ? "rgba(255, 255, 255, 0.9)" : "rgba(0, 0, 0, 0.8)"
15345
+ },
15346
+ cornersSquareOptions: {
15347
+ cornerType: "extra-rounded",
15348
+ color: useDarkTheme ? "rgba(255, 255, 255, 0.9)" : "rgba(0, 0, 0, 0.8)"
15349
+ },
15350
+ cornersDotOptions: {
15351
+ cornerType: "dot",
15352
+ color: useDarkTheme ? "rgba(255, 255, 255, 0.9)" : "rgba(0, 0, 0, 0.8)"
15353
+ },
15354
+ backgroundOptions: { transparent: true }
15355
+ }, "webp", "base64")}`;
15356
+ };
15357
+ //#endregion
15883
15358
  //#region ../template/src/components/platforms/bilibili/Icons.tsx
15884
15359
  /** B站官方点赞图标 */
15885
15360
  var ThumbUpIcon = ({ className, size, variant = "solid" }) => {
@@ -16029,6 +15504,28 @@ var CoinIcon = ({ className, size, variant = "solid" }) => {
16029
15504
  })
16030
15505
  });
16031
15506
  };
15507
+ /** B站官方浏览图标 */
15508
+ var ViewIcon = ({ className, size, variant = "solid" }) => {
15509
+ if (variant === "line") return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
15510
+ viewBox: "0 0 16 16",
15511
+ xmlns: "http://www.w3.org/2000/svg",
15512
+ className,
15513
+ fill: "currentColor",
15514
+ width: size,
15515
+ height: size,
15516
+ 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" })]
15517
+ });
15518
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
15519
+ viewBox: "0 0 16 16",
15520
+ xmlns: "http://www.w3.org/2000/svg",
15521
+ className,
15522
+ fill: "currentColor",
15523
+ fillRule: "evenodd",
15524
+ width: size,
15525
+ height: size,
15526
+ 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" })
15527
+ });
15528
+ };
16032
15529
  /** B站官方评论图标 */
16033
15530
  var CommentIcon = ({ className, size, variant = "solid" }) => {
16034
15531
  if (variant === "line") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
@@ -16074,7 +15571,7 @@ var FansMedal = ({ detail }) => {
16074
15571
  const nameColor = intToRgba(detail.medal_color_name);
16075
15572
  const levelColor = intToRgba(detail.medal_color_level);
16076
15573
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16077
- className: clsx("inline-flex items-center shrink-0", "h-14 rounded-full border"),
15574
+ className: cn("inline-flex items-center shrink-0", "h-14 rounded-full border"),
16078
15575
  style: {
16079
15576
  borderColor,
16080
15577
  backgroundImage: `linear-gradient(90deg, ${bgStart}, ${bgEnd})`
@@ -16086,7 +15583,7 @@ var FansMedal = ({ detail }) => {
16086
15583
  referrerPolicy: "no-referrer",
16087
15584
  crossOrigin: "anonymous"
16088
15585
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16089
- className: clsx("flex items-center", detail.first_icon ? "pr-4" : "px-4"),
15586
+ className: cn("flex items-center", detail.first_icon ? "pr-4" : "px-4"),
16090
15587
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16091
15588
  className: "font-medium whitespace-nowrap text-3xl",
16092
15589
  style: { color: nameColor },
@@ -16104,7 +15601,7 @@ var FansMedal = ({ detail }) => {
16104
15601
  */
16105
15602
  var TopBadge = () => {
16106
15603
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16107
- className: clsx("inline-flex justify-center items-center", "px-4 py-2 mr-4 mb-1 rounded-xl", "text-[45px] font-light leading-none", "align-baseline", "bg-[#ffedf5] text-[#ff799e]", "dark:bg-[#321b26] dark:text-[#cb5775]"),
15604
+ className: cn("inline-flex justify-center items-center", "px-4 py-2 mr-4 mb-1 rounded-xl", "text-[45px] font-light leading-none", "align-baseline", "bg-[#ffedf5] text-[#ff799e]", "dark:bg-[#321b26] dark:text-[#cb5775]"),
16108
15605
  children: "置顶"
16109
15606
  });
16110
15607
  };
@@ -16152,10 +15649,10 @@ var formatBilibiliLikeCount = (count) => {
16152
15649
  };
16153
15650
  var renderBilibiliUserName = (uname, unameColor, vipstatus) => {
16154
15651
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16155
- className: "inline-block leading-[1.2]",
15652
+ className: "inline-block leading-[1.2] font-medium whitespace-nowrap",
16156
15653
  style: {
16157
15654
  color: unameColor ?? "#888",
16158
- fontWeight: vipstatus === 1 ? 700 : void 0
15655
+ fontWeight: vipstatus === 1 ? 500 : void 0
16159
15656
  },
16160
15657
  children: uname
16161
15658
  });
@@ -16178,21 +15675,15 @@ var BilibiliLogo = () => {
16178
15675
  * @param props 组件属性
16179
15676
  * @returns JSX元素
16180
15677
  */
16181
- var QRCodeSection$2 = ({ qrCodeDataUrl }) => {
15678
+ var QRCodeSection$1 = ({ share_url, useDarkTheme }) => {
16182
15679
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16183
15680
  className: "flex flex-col items-center",
16184
15681
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16185
15682
  className: "flex justify-center items-center w-100 h-100 p-4",
16186
- children: qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16187
- src: qrCodeDataUrl,
15683
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
15684
+ src: generateQRCode(share_url, useDarkTheme),
16188
15685
  alt: "二维码",
16189
15686
  className: "object-contain w-full h-full rounded-lg"
16190
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16191
- className: "flex flex-col justify-center items-center text-muted",
16192
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16193
- className: "text-lg",
16194
- children: "二维码生成失败"
16195
- })
16196
15687
  })
16197
15688
  })
16198
15689
  });
@@ -16279,7 +15770,10 @@ var VideoInfoHeader$1 = (props) => {
16279
15770
  })]
16280
15771
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16281
15772
  className: "shrink-0",
16282
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QRCodeSection$2, { qrCodeDataUrl: props.qrCodeDataUrl })
15773
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QRCodeSection$1, {
15774
+ share_url: props.share_url,
15775
+ useDarkTheme: props.useDarkTheme
15776
+ })
16283
15777
  })]
16284
15778
  })
16285
15779
  });
@@ -16291,7 +15785,7 @@ var VideoInfoHeader$1 = (props) => {
16291
15785
  */
16292
15786
  var CommentItemComponent$2 = ({ isLast = false, ...props }) => {
16293
15787
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16294
- className: clsx("flex relative px-10 py-10 max-w-full", { "pb-0": isLast }),
15788
+ className: cn("flex relative px-10 py-10 max-w-full", { "pb-0": isLast }),
16295
15789
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16296
15790
  className: "relative mr-[33.75px] shrink-0 w-50 h-50 flex items-center justify-center",
16297
15791
  children: [
@@ -16640,10 +16134,7 @@ var BilibiliComment = import_react.memo((props) => {
16640
16134
  className: "p-5",
16641
16135
  children: [
16642
16136
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
16643
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VideoInfoHeader$1, {
16644
- ...processedData,
16645
- qrCodeDataUrl: props.qrCodeDataUrl
16646
- }),
16137
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VideoInfoHeader$1, { ...processedData }),
16647
16138
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16648
16139
  className: "overflow-hidden mt-8",
16649
16140
  children: processedData.CommentsData.length > 0 ? processedData.CommentsData.map((comment, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentItemComponent$2, {
@@ -16946,16 +16437,10 @@ var BilibiliArticleFooter = import_react.memo((props) => {
16946
16437
  })]
16947
16438
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16948
16439
  className: "flex flex-col items-center gap-4",
16949
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16950
- src: props.qrCodeDataUrl,
16440
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16441
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
16951
16442
  alt: "二维码",
16952
16443
  className: "h-auto w-75 rounded-2xl"
16953
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16954
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
16955
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16956
- className: "text-muted",
16957
- children: "二维码"
16958
- })
16959
16444
  })
16960
16445
  })]
16961
16446
  });
@@ -16984,164 +16469,314 @@ var BilibiliArticleDynamic = import_react.memo((props) => {
16984
16469
  });
16985
16470
  BilibiliArticleDynamic.displayName = "BilibiliArticleDynamic";
16986
16471
  //#endregion
16987
- //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_AV.tsx
16472
+ //#region ../template/src/components/platforms/bilibili/dynamic/CommonComponents.tsx
16988
16473
  /**
16989
- * B站视频动态头部组件
16474
+ * B站动态用户信息组件
16990
16475
  */
16991
- var BilibiliVideoDynamicHeader = () => {
16992
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
16993
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
16994
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16995
- className: "flex items-center pl-20 text-6xl text-muted",
16996
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16997
- src: "/image/bilibili/bilibili.png",
16998
- alt: "bilibili",
16999
- className: "h-auto w-120"
17000
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17001
- className: "ml-8 text-5xl select-text",
17002
- children: "你感兴趣的视频都在哔哩哔哩"
16476
+ var BilibiliDynamicUserInfo = (props) => {
16477
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16478
+ className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
16479
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16480
+ className: "flex gap-10 items-center",
16481
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16482
+ className: "relative",
16483
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16484
+ src: props.avatar_url,
16485
+ alt: "头像",
16486
+ className: "w-32 h-32 rounded-full shadow-medium",
16487
+ isCircular: true
16488
+ }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16489
+ src: props.frame,
16490
+ alt: "头像框",
16491
+ className: "absolute inset-0 transform scale-180"
16492
+ })]
16493
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16494
+ className: "flex flex-col gap-8 text-7xl",
16495
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16496
+ className: "text-6xl font-bold select-text text-foreground",
16497
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
16498
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16499
+ className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
16500
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(c, {
16501
+ size: 40,
16502
+ weight: "fill"
16503
+ }), props.create_time]
16504
+ })]
17003
16505
  })]
17004
- }),
17005
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" })
17006
- ] });
16506
+ }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16507
+ className: "shrink-0",
16508
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
16509
+ })]
16510
+ });
17007
16511
  };
17008
16512
  /**
17009
- * B站视频动态内容组件
16513
+ * B站动态状态组件
17010
16514
  */
17011
- var BilibiliVideoDynamicContent = (props) => {
17012
- 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", {
17013
- className: "flex flex-col items-center",
17014
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17015
- className: "flex overflow-hidden relative flex-col flex-1 items-center w-11/12 rounded-5xl shadow-large",
17016
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17017
- src: props.data.image_url,
17018
- alt: "封面",
17019
- className: "object-contain w-full h-full rounded-3xl"
17020
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17021
- className: "flex absolute bottom-12 right-16",
17022
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17023
- src: "/image/bilibili/play.svg",
17024
- alt: "播放图标",
17025
- className: "w-40 h-40"
17026
- })
17027
- })]
17028
- })
17029
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17030
- className: "flex flex-col w-full leading-relaxed px-16",
16515
+ var BilibiliDynamicStatus = (props) => {
16516
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16517
+ className: "flex flex-col gap-10 px-18 w-full leading-relaxed",
17031
16518
  children: [
17032
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17033
- className: "relative items-center text-7xl font-bold tracking-wider wrap-break-word text-foreground leading-tight",
17034
- children: props.data.text && renderRichTextToReact(props.data.text, {
17035
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17036
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17037
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17038
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17039
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17040
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17041
- })
16519
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16520
+ className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
16521
+ children: [
16522
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16523
+ className: "flex gap-2 items-center",
16524
+ children: [
16525
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, {
16526
+ size: 50,
16527
+ className: "mt-2"
16528
+ }),
16529
+ props.dianzan,
16530
+ "点赞"
16531
+ ]
16532
+ }),
16533
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
16534
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16535
+ className: "flex gap-2 items-center",
16536
+ children: [
16537
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
16538
+ props.pinglun,
16539
+ "评论"
16540
+ ]
16541
+ }),
16542
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
16543
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16544
+ className: "flex gap-2 items-center",
16545
+ children: [
16546
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
16547
+ props.share,
16548
+ "分享"
16549
+ ]
16550
+ })
16551
+ ]
17042
16552
  }),
17043
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" }),
17044
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17045
- className: "text-5xl text-muted leading-normal wrap-break-word break-keep",
17046
- children: props.data.desc && renderRichTextToReact(props.data.desc, {
17047
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17048
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17049
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17050
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17051
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17052
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17053
- })
16553
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16554
+ className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
16555
+ children: [
16556
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(c, {
16557
+ size: 52,
16558
+ weight: "fill"
16559
+ }),
16560
+ "图片生成于: ",
16561
+ props.render_time
16562
+ ]
17054
16563
  }),
17055
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-30" }),
17056
16564
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17057
- className: "flex flex-col gap-15 text-foreground/70",
16565
+ className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-[#006A9E] dark:text-[#58B0D5]",
16566
+ 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] })]
16567
+ })
16568
+ ]
16569
+ });
16570
+ };
16571
+ /**
16572
+ * B站动态底部信息组件
16573
+ */
16574
+ var BilibiliDynamicFooter = (props) => {
16575
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16576
+ className: "flex justify-between items-start px-20 pb-20",
16577
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16578
+ className: "flex flex-col gap-12",
16579
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16580
+ className: "flex gap-12 items-start",
17058
16581
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17059
- className: "flex flex-col gap-8",
17060
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17061
- className: "flex gap-12 items-center text-5xl font-light tracking-normal",
16582
+ className: "relative shrink-0",
16583
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16584
+ src: props.avatar_url,
16585
+ alt: "头像",
16586
+ className: "rounded-full shadow-medium w-35 h-auto",
16587
+ isCircular: true
16588
+ }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16589
+ src: props.frame,
16590
+ alt: "头像框",
16591
+ className: "absolute inset-0 transform scale-180"
16592
+ })]
16593
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16594
+ className: "flex flex-col gap-5",
16595
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16596
+ className: "text-7xl font-bold select-text",
16597
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
16598
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16599
+ className: "flex gap-2 items-center text-4xl text-muted",
16600
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
16601
+ className: "text-muted select-text",
16602
+ children: ["UID: ", props.user_shortid]
16603
+ })
16604
+ })]
16605
+ })]
16606
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16607
+ className: "text-3xl flex gap-6 items-center text-foreground/70",
16608
+ children: [
16609
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16610
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17062
16611
  children: [
17063
16612
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17064
- className: "flex gap-3 items-center",
17065
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17066
- className: "select-text",
17067
- children: [props.data.dianzan, "点赞"]
17068
- })]
17069
- }),
17070
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17071
- className: "flex gap-3 items-center",
17072
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17073
- className: "select-text",
17074
- children: [props.data.pinglun, "评论"]
16613
+ className: "flex gap-1 items-center",
16614
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 36 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16615
+ className: "text-muted",
16616
+ children: "获赞"
17075
16617
  })]
17076
16618
  }),
17077
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17078
- className: "flex gap-3 items-center",
17079
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17080
- className: "select-text",
17081
- children: [props.data.share, "分享"]
17082
- })]
16619
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
16620
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16621
+ className: "select-text font-medium text-4xl",
16622
+ children: props.total_favorited
17083
16623
  })
17084
16624
  ]
17085
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17086
- className: "flex gap-12 items-center text-5xl font-light tracking-normal",
16625
+ }),
16626
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16627
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17087
16628
  children: [
17088
16629
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17089
- className: "flex gap-3 items-center",
17090
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CoinIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17091
- className: "select-text",
17092
- children: [props.data.coin, "硬币"]
16630
+ className: "flex gap-1 items-center",
16631
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewIcon, { size: 36 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16632
+ className: "text-muted",
16633
+ children: "关注"
17093
16634
  })]
17094
16635
  }),
16636
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
16637
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16638
+ className: "select-text font-medium text-4xl",
16639
+ children: props.following_count
16640
+ })
16641
+ ]
16642
+ }),
16643
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16644
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
16645
+ children: [
17095
16646
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17096
- className: "flex gap-3 items-center",
17097
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17098
- className: "select-text",
17099
- children: [props.data.view, "浏览"]
16647
+ className: "flex gap-1 items-center",
16648
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(o, {
16649
+ size: 36,
16650
+ weight: "fill"
16651
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16652
+ className: "text-muted",
16653
+ children: "粉丝"
17100
16654
  })]
17101
16655
  }),
17102
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17103
- className: "flex gap-3 items-center text-5xl font-light tracking-normal",
17104
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17105
- className: "select-text",
17106
- children: ["视频时长: ", props.data.duration_text]
17107
- })]
16656
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
16657
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16658
+ className: "select-text font-medium text-4xl",
16659
+ children: props.fans
17108
16660
  })
17109
16661
  ]
16662
+ })
16663
+ ]
16664
+ })]
16665
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16666
+ className: "flex flex-col items-center gap-4",
16667
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16668
+ src: generateQRCode(props.share_url, props.useDarkTheme),
16669
+ alt: "二维码",
16670
+ className: "h-auto w-75 rounded-2xl"
16671
+ })
16672
+ })]
16673
+ });
16674
+ };
16675
+ //#endregion
16676
+ //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_AV.tsx
16677
+ /**
16678
+ * B站视频内容组件
16679
+ */
16680
+ var BilibiliVideoContent = (props) => {
16681
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16682
+ className: "px-16",
16683
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16684
+ className: "px-12 py-12 rounded-8xl bg-surface-secondary",
16685
+ children: [props.data.image_url && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16686
+ className: "items-center",
16687
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16688
+ className: "flex overflow-hidden relative flex-col flex-1 items-center rounded-5xl shadow-large",
16689
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16690
+ src: props.data.image_url,
16691
+ alt: "封面",
16692
+ className: "object-contain w-full h-full rounded-3xl"
16693
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16694
+ className: "flex absolute bottom-12 right-16",
16695
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
16696
+ src: "/image/bilibili/play.svg",
16697
+ alt: "播放图标",
16698
+ className: "w-40 h-40"
16699
+ })
17110
16700
  })]
17111
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17112
- className: "flex flex-col gap-4 text-4xl font-light",
17113
- children: [
17114
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17115
- className: "flex gap-3 items-center whitespace-nowrap",
17116
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17117
- className: "select-text",
17118
- children: ["发布于", props.data.create_time]
17119
- })]
17120
- }),
17121
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17122
- className: "flex gap-3 items-center whitespace-nowrap",
17123
- 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")] })]
17124
- }),
17125
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17126
- className: "flex gap-3 items-center",
17127
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17128
- className: "select-text",
17129
- children: ["动态ID: ", props.data.dynamic_id]
17130
- })]
16701
+ })
16702
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16703
+ className: "flex flex-col w-full leading-relaxed",
16704
+ children: [
16705
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16706
+ className: "relative items-center text-6xl font-bold tracking-wider wrap-break-word text-foreground leading-tight",
16707
+ children: props.data.text && renderRichTextToReact(props.data.text, {
16708
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16709
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16710
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16711
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16712
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16713
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
17131
16714
  })
17132
- ]
17133
- })]
17134
- }),
17135
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-40" })
17136
- ]
17137
- })] });
16715
+ }),
16716
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" }),
16717
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16718
+ className: "text-5xl text-muted leading-normal wrap-break-word break-keep",
16719
+ children: props.data.desc && renderRichTextToReact(props.data.desc, {
16720
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16721
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16722
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16723
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16724
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16725
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
16726
+ })
16727
+ }),
16728
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
16729
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16730
+ className: "flex flex-col gap-8 text-foreground/70",
16731
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16732
+ className: "flex gap-12 items-center text-5xl font-light tracking-normal",
16733
+ children: [
16734
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16735
+ className: "flex gap-3 items-center",
16736
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CoinIcon, { size: 52 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
16737
+ className: "select-text",
16738
+ children: [props.data.coin, "硬币"]
16739
+ })]
16740
+ }),
16741
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16742
+ className: "flex gap-3 items-center",
16743
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewIcon, {
16744
+ size: 52,
16745
+ variant: "solid"
16746
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
16747
+ className: "select-text",
16748
+ children: [props.data.view, "播放"]
16749
+ })]
16750
+ }),
16751
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16752
+ className: "flex gap-3 items-center text-5xl font-light tracking-normal",
16753
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(c, {
16754
+ size: 52,
16755
+ weight: "fill"
16756
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
16757
+ className: "select-text",
16758
+ children: [
16759
+ "时长(",
16760
+ props.data.page_length,
16761
+ "P): ",
16762
+ props.data.duration_text
16763
+ ]
16764
+ })]
16765
+ })
16766
+ ]
16767
+ })
16768
+ }),
16769
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-2" })
16770
+ ]
16771
+ })]
16772
+ })
16773
+ });
17138
16774
  };
17139
16775
  /**
17140
- * B站视频动态底部信息组件
16776
+ * B站视频动态共创者组件
17141
16777
  */
17142
- var BilibiliVideoDynamicFooter = (props) => {
16778
+ var BilibiliVideoStaff = (props) => {
17143
16779
  const otherStaff = props.data.staff?.filter((member) => member.mid !== Number(props.data.user_shortid)) || [];
17144
- const currentUserRole = props.data.staff?.find((member) => member.mid === Number(props.data.user_shortid))?.title;
17145
16780
  const listRef = import_react.useRef(null);
17146
16781
  const [visibleCount, setVisibleCount] = import_react.useState(otherStaff.length);
17147
16782
  import_react.useEffect(() => {
@@ -17156,167 +16791,59 @@ var BilibiliVideoDynamicFooter = (props) => {
17156
16791
  window.addEventListener("resize", calc);
17157
16792
  return () => window.removeEventListener("resize", calc);
17158
16793
  }, [otherStaff.length]);
17159
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
17160
- otherStaff.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17161
- className: "flex flex-col px-20 w-full",
17162
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17163
- ref: listRef,
17164
- className: "flex overflow-hidden gap-8 py-1 w-full",
17165
- children: [otherStaff.slice(0, visibleCount).map((member) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17166
- className: "flex flex-col items-center min-w-42 w-42 shrink-0",
17167
- children: [
17168
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17169
- className: "flex justify-center items-center bg-white rounded-full w-30 h-30",
17170
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17171
- src: member.face,
17172
- alt: member.name,
17173
- className: "object-cover w-28 h-28 rounded-full",
17174
- isCircular: true
17175
- })
17176
- }),
17177
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17178
- className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
17179
- children: member.name
17180
- }),
17181
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17182
- className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
17183
- children: member.title
17184
- })
17185
- ]
17186
- }, member.mid)), otherStaff.length > visibleCount && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17187
- className: "flex flex-col items-center min-w-42 w-42 shrink-0",
17188
- children: [
17189
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17190
- className: "flex justify-center items-center rounded-full bg-surface-secondary w-30 h-30",
17191
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17192
- className: "text-[42px] leading-none text-muted",
17193
- children: "···"
17194
- })
17195
- }),
17196
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17197
- className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
17198
- children: [
17199
- "还有",
17200
- otherStaff.length - visibleCount,
17201
- "人"
17202
- ]
17203
- }),
17204
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17205
- className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
17206
- children: "共创"
17207
- })
17208
- ]
17209
- })]
17210
- })
17211
- }),
17212
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17213
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17214
- className: "flex justify-between items-start px-20 pb-20",
17215
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17216
- className: "flex flex-col gap-12",
17217
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17218
- className: "flex gap-12 items-start",
17219
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17220
- className: "relative shrink-0",
17221
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17222
- src: props.data.avatar_url,
17223
- alt: "头像",
17224
- className: "rounded-full shadow-medium w-35 h-auto",
16794
+ if (otherStaff.length === 0) return null;
16795
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16796
+ className: "flex flex-col px-20 w-full",
16797
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16798
+ ref: listRef,
16799
+ className: "flex overflow-hidden gap-8 py-1 w-full",
16800
+ children: [otherStaff.slice(0, visibleCount).map((member) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16801
+ className: "flex flex-col items-center min-w-42 w-42 shrink-0",
16802
+ children: [
16803
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16804
+ className: "flex justify-center items-center bg-white rounded-full w-30 h-30",
16805
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
16806
+ src: member.face,
16807
+ alt: member.name,
16808
+ className: "object-cover w-28 h-28 rounded-full",
17225
16809
  isCircular: true
17226
- }), props.data.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17227
- src: props.data.frame,
17228
- alt: "头像框",
17229
- className: "absolute inset-0 transform scale-180"
17230
- })]
17231
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17232
- className: "flex flex-col gap-5",
17233
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17234
- className: "text-7xl font-bold select-text text-foreground",
17235
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.data.usernameMeta })
17236
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17237
- className: "flex gap-2 items-center text-4xl text-muted",
17238
- children: [
17239
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, { size: 32 }),
17240
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: ["UID: ", props.data.user_shortid] }),
17241
- currentUserRole && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17242
- className: "ml-5 px-3 py-1 rounded-xl bg-surface-secondary text-3xl",
17243
- children: currentUserRole
17244
- })
17245
- ]
17246
- })]
17247
- })]
17248
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17249
- className: "text-3xl flex gap-6 items-center text-foreground/70",
17250
- children: [
17251
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17252
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17253
- children: [
17254
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17255
- className: "flex gap-1 items-center",
17256
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17257
- className: "text-muted",
17258
- children: "获赞"
17259
- })]
17260
- }),
17261
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17262
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17263
- className: "select-text font-medium text-4xl",
17264
- children: props.data.total_favorited
17265
- })
17266
- ]
17267
- }),
17268
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17269
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17270
- children: [
17271
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17272
- className: "flex gap-1 items-center",
17273
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17274
- className: "text-muted",
17275
- children: "关注"
17276
- })]
17277
- }),
17278
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17279
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17280
- className: "select-text font-medium text-4xl",
17281
- children: props.data.following_count
17282
- })
17283
- ]
17284
- }),
17285
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17286
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17287
- children: [
17288
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17289
- className: "flex gap-1 items-center",
17290
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17291
- className: "text-muted",
17292
- children: "粉丝"
17293
- })]
17294
- }),
17295
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17296
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17297
- className: "select-text font-medium text-4xl",
17298
- children: props.data.fans
17299
- })
17300
- ]
17301
16810
  })
17302
- ]
17303
- })]
17304
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17305
- className: "flex flex-col items-center gap-4",
17306
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17307
- src: props.qrCodeDataUrl,
17308
- alt: "二维码",
17309
- className: "h-auto w-75 rounded-xl"
17310
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17311
- className: "flex justify-center items-center rounded-xl bg-surface w-100 h-100",
17312
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17313
- className: "text-muted",
17314
- children: "二维码"
16811
+ }),
16812
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16813
+ className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
16814
+ children: member.name
16815
+ }),
16816
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16817
+ className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
16818
+ children: member.title
17315
16819
  })
17316
- })
16820
+ ]
16821
+ }, member.mid)), otherStaff.length > visibleCount && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16822
+ className: "flex flex-col items-center min-w-42 w-42 shrink-0",
16823
+ children: [
16824
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16825
+ className: "flex justify-center items-center rounded-full bg-surface-secondary w-30 h-30",
16826
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16827
+ className: "text-[42px] leading-none text-muted",
16828
+ children: "···"
16829
+ })
16830
+ }),
16831
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16832
+ className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
16833
+ children: [
16834
+ "还有",
16835
+ otherStaff.length - visibleCount,
16836
+ "人"
16837
+ ]
16838
+ }),
16839
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16840
+ className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-muted",
16841
+ children: "共创"
16842
+ })
16843
+ ]
17317
16844
  })]
17318
- })
17319
- ] });
16845
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" })]
16846
+ });
17320
16847
  };
17321
16848
  /**
17322
16849
  * B站视频动态组件
@@ -17327,9 +16854,39 @@ var BilibiliVideoDynamic = import_react.memo((props) => {
17327
16854
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17328
16855
  className: "p-4",
17329
16856
  children: [
17330
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoDynamicHeader, {}),
17331
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoDynamicContent, { ...props }),
17332
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoDynamicFooter, { ...props })
16857
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
16858
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
16859
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
16860
+ props.data.dynamic_text && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16861
+ className: "flex flex-col px-20 w-full leading-relaxed",
16862
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16863
+ className: "relative items-center text-5xl tracking-wider wrap-break-word text-foreground",
16864
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
16865
+ className: "text-[60px] tracking-[0.5px] leading-[1.6] whitespace-pre-wrap text-foreground select-text",
16866
+ style: {
16867
+ wordBreak: "break-word",
16868
+ overflowWrap: "break-word"
16869
+ },
16870
+ children: props.data.dynamic_text.nodes.length > 0 ? renderRichTextToReact(props.data.dynamic_text, {
16871
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16872
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16873
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16874
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16875
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
16876
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
16877
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16878
+ className: "text-default-foreground/50",
16879
+ children: "投稿了视频"
16880
+ })
16881
+ })
16882
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" })]
16883
+ }),
16884
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoContent, { ...props }),
16885
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
16886
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
16887
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn(props.data.staff && props.data.staff.length > 0 && "h-23", !props.data.staff && "h-40") }),
16888
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVideoStaff, { ...props }),
16889
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, { ...props.data })
17333
16890
  ]
17334
16891
  })
17335
16892
  });
@@ -17343,7 +16900,7 @@ BilibiliVideoDynamic.displayName = "BilibiliVideoDynamic";
17343
16900
  var BilibiliReserveCard = ({ reserve }) => {
17344
16901
  if (!reserve) return null;
17345
16902
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17346
- className: "overflow-hidden rounded-2xl bg-surface",
16903
+ className: "overflow-hidden rounded-4xl bg-surface",
17347
16904
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17348
16905
  className: "flex gap-8 justify-between items-center px-10 py-10",
17349
16906
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -17391,7 +16948,7 @@ var BilibiliVoteCard = ({ vote }) => {
17391
16948
  if (!vote) return null;
17392
16949
  const isEnded = vote.status === 4;
17393
16950
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17394
- className: "overflow-hidden rounded-2xl bg-surface",
16951
+ className: "overflow-hidden rounded-4xl bg-surface",
17395
16952
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17396
16953
  className: "flex gap-8 items-center px-10 py-8",
17397
16954
  children: [
@@ -17496,7 +17053,7 @@ var BilibiliUgcCard = ({ ugc }) => {
17496
17053
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17497
17054
  src: ugc.cover,
17498
17055
  alt: ugc.title,
17499
- className: "h-52 w-auto rounded-2xl"
17056
+ className: "h-52 w-auto rounded-4xl"
17500
17057
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17501
17058
  className: "absolute bottom-7 right-7 px-3 py-1 rounded-lg bg-black/70 text-white text-3xl",
17502
17059
  children: ugc.duration
@@ -17517,10 +17074,10 @@ var BilibiliUgcCard = ({ ugc }) => {
17517
17074
  /**
17518
17075
  * B站相关卡片容器组件
17519
17076
  */
17520
- var BilibiliAdditionalCard = ({ additional }) => {
17077
+ var BilibiliAdditionalCard = ({ additional, gap = true, className }) => {
17521
17078
  if (!additional) return null;
17522
17079
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17523
- className: "px-20 pb-20",
17080
+ className: cn(gap && "px-20 pb-20", className),
17524
17081
  children: [
17525
17082
  additional.type === "ADDITIONAL_TYPE_RESERVE" && additional.reserve && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliReserveCard, { reserve: additional.reserve }),
17526
17083
  additional.type === "ADDITIONAL_TYPE_VOTE" && additional.vote && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliVoteCard, { vote: additional.vote }),
@@ -17532,42 +17089,6 @@ var BilibiliAdditionalCard = ({ additional }) => {
17532
17089
  //#endregion
17533
17090
  //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_DRAW.tsx
17534
17091
  /**
17535
- * B站动态用户信息组件
17536
- */
17537
- var BilibiliDynamicUserInfo$1 = (props) => {
17538
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17539
- className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
17540
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17541
- className: "flex gap-10 items-center",
17542
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17543
- className: "relative",
17544
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17545
- src: props.avatar_url,
17546
- alt: "头像",
17547
- className: "w-32 h-32 rounded-full shadow-medium",
17548
- isCircular: true
17549
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17550
- src: props.frame,
17551
- alt: "头像框",
17552
- className: "absolute inset-0 transform scale-180"
17553
- })]
17554
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17555
- className: "flex flex-col gap-8 text-7xl",
17556
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17557
- className: "text-6xl font-bold select-text text-foreground",
17558
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17559
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17560
- className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
17561
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 36 }), props.create_time]
17562
- })]
17563
- })]
17564
- }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17565
- className: "shrink-0",
17566
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
17567
- })]
17568
- });
17569
- };
17570
- /**
17571
17092
  * B站动态内容组件
17572
17093
  */
17573
17094
  var BilibiliDynamicContent = (props) => {
@@ -17679,16 +17200,16 @@ var BilibiliDynamicContent = (props) => {
17679
17200
  })]
17680
17201
  }),
17681
17202
  layoutType === "vertical" && props.image_url.map((img, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17682
- className: "flex flex-col items-center",
17203
+ className: "flex items-center",
17683
17204
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17684
17205
  className: "flex overflow-hidden flex-col flex-1 items-center rounded-4xl shadow-large",
17685
17206
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17686
17207
  src: img.image_src,
17687
17208
  alt: "封面",
17688
- className: "object-contain w-full h-full rounded-3xl"
17209
+ className: "object-contain w-full h-full rounded-5xl"
17689
17210
  })
17690
17211
  })
17691
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-18" })] }, index)),
17212
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" })] }, index)),
17692
17213
  (layoutType === "waterfall" || layoutType === "grid") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-18" })
17693
17214
  ]
17694
17215
  }),
@@ -17696,163 +17217,6 @@ var BilibiliDynamicContent = (props) => {
17696
17217
  ] });
17697
17218
  };
17698
17219
  /**
17699
- * B站动态状态组件
17700
- */
17701
- var BilibiliDynamicStatus$1 = (props) => {
17702
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17703
- className: "flex flex-col gap-10 px-20 w-full leading-relaxed",
17704
- children: [
17705
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17706
- className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
17707
- children: [
17708
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17709
- className: "flex gap-2 items-center",
17710
- children: [
17711
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }),
17712
- props.dianzan,
17713
- "点赞"
17714
- ]
17715
- }),
17716
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
17717
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17718
- className: "flex gap-2 items-center",
17719
- children: [
17720
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
17721
- props.pinglun,
17722
- "评论"
17723
- ]
17724
- }),
17725
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
17726
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17727
- className: "flex gap-2 items-center",
17728
- children: [
17729
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
17730
- props.share,
17731
- "分享"
17732
- ]
17733
- })
17734
- ]
17735
- }),
17736
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17737
- className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
17738
- children: [
17739
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }),
17740
- "图片生成于: ",
17741
- props.render_time
17742
- ]
17743
- }),
17744
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3" })
17745
- ]
17746
- });
17747
- };
17748
- /**
17749
- * B站动态底部信息组件
17750
- */
17751
- var BilibiliDynamicFooter$1 = (props) => {
17752
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17753
- className: "flex justify-between items-start px-20 pb-20",
17754
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17755
- className: "flex flex-col gap-12",
17756
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17757
- className: "flex gap-12 items-start",
17758
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17759
- className: "relative shrink-0",
17760
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17761
- src: props.avatar_url,
17762
- alt: "头像",
17763
- className: "rounded-full shadow-medium w-35 h-auto",
17764
- isCircular: true
17765
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17766
- src: props.frame,
17767
- alt: "头像框",
17768
- className: "absolute inset-0 transform scale-180"
17769
- })]
17770
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17771
- className: "flex flex-col gap-5",
17772
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17773
- className: "text-7xl font-bold select-text",
17774
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17775
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17776
- className: "flex gap-2 items-center text-4xl text-muted",
17777
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17778
- className: "text-muted select-text",
17779
- children: ["UID: ", props.user_shortid]
17780
- })
17781
- })]
17782
- })]
17783
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17784
- className: "text-3xl flex gap-6 items-center text-foreground/70",
17785
- children: [
17786
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17787
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17788
- children: [
17789
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17790
- className: "flex gap-1 items-center",
17791
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17792
- className: "text-muted",
17793
- children: "获赞"
17794
- })]
17795
- }),
17796
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17797
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17798
- className: "select-text font-medium text-4xl",
17799
- children: props.total_favorited
17800
- })
17801
- ]
17802
- }),
17803
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17804
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17805
- children: [
17806
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17807
- className: "flex gap-1 items-center",
17808
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17809
- className: "text-muted",
17810
- children: "关注"
17811
- })]
17812
- }),
17813
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17814
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17815
- className: "select-text font-medium text-4xl",
17816
- children: props.following_count
17817
- })
17818
- ]
17819
- }),
17820
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17821
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
17822
- children: [
17823
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17824
- className: "flex gap-1 items-center",
17825
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17826
- className: "text-muted",
17827
- children: "粉丝"
17828
- })]
17829
- }),
17830
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
17831
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17832
- className: "select-text font-medium text-4xl",
17833
- children: props.fans
17834
- })
17835
- ]
17836
- })
17837
- ]
17838
- })]
17839
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17840
- className: "flex flex-col items-center gap-4",
17841
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
17842
- src: props.qrCodeDataUrl,
17843
- alt: "二维码",
17844
- className: "h-auto w-75 rounded-2xl"
17845
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17846
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
17847
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
17848
- className: "text-muted",
17849
- children: "二维码"
17850
- })
17851
- })
17852
- })]
17853
- });
17854
- };
17855
- /**
17856
17220
  * B站动态组件
17857
17221
  */
17858
17222
  var BilibiliDrawDynamic = import_react.memo((props) => {
@@ -17862,13 +17226,7 @@ var BilibiliDrawDynamic = import_react.memo((props) => {
17862
17226
  className: "p-4",
17863
17227
  children: [
17864
17228
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
17865
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo$1, {
17866
- avatar_url: props.data.avatar_url,
17867
- frame: props.data.frame,
17868
- usernameMeta: props.data.usernameMeta,
17869
- create_time: props.data.create_time,
17870
- decoration_card: props.data.decoration_card
17871
- }),
17229
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
17872
17230
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17873
17231
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicContent, {
17874
17232
  title: props.data.title,
@@ -17877,25 +17235,9 @@ var BilibiliDrawDynamic = import_react.memo((props) => {
17877
17235
  imageLayout: props.data.imageLayout,
17878
17236
  additional: props.data.additional
17879
17237
  }),
17880
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus$1, {
17881
- dianzan: props.data.dianzan,
17882
- pinglun: props.data.pinglun,
17883
- share: props.data.share,
17884
- render_time: props.data.render_time
17885
- }),
17886
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-23" }),
17887
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter$1, {
17888
- avatar_url: props.data.avatar_url,
17889
- frame: props.data.frame,
17890
- usernameMeta: props.data.usernameMeta,
17891
- user_shortid: props.data.user_shortid,
17892
- total_favorited: props.data.total_favorited,
17893
- following_count: props.data.following_count,
17894
- fans: props.data.fans,
17895
- dynamicTYPE: props.data.dynamicTYPE,
17896
- share_url: props.data.share_url,
17897
- qrCodeDataUrl: props.qrCodeDataUrl
17898
- })
17238
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
17239
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-40" }),
17240
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, { ...props.data })
17899
17241
  ]
17900
17242
  })
17901
17243
  });
@@ -17904,47 +17246,11 @@ BilibiliDrawDynamic.displayName = "BilibiliDrawDynamic";
17904
17246
  //#endregion
17905
17247
  //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_FORWARD.tsx
17906
17248
  /**
17907
- * B站转发动态用户信息组件
17908
- */
17909
- var BilibiliForwardUserInfo = (props) => {
17910
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17911
- className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
17912
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17913
- className: "flex gap-10 items-center",
17914
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17915
- className: "relative",
17916
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17917
- src: props.avatar_url,
17918
- alt: "头像",
17919
- className: "w-36 h-36 rounded-full shadow-medium",
17920
- isCircular: true
17921
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17922
- src: props.frame,
17923
- alt: "头像框",
17924
- className: "absolute inset-0 transform scale-180"
17925
- })]
17926
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17927
- className: "flex flex-col gap-8 text-7xl",
17928
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17929
- className: "text-6xl font-bold select-text text-foreground",
17930
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
17931
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17932
- className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
17933
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 36 }), props.create_time]
17934
- })]
17935
- })]
17936
- }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17937
- className: "shrink-0",
17938
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
17939
- })]
17940
- });
17941
- };
17942
- /**
17943
17249
  * 原始内容用户信息组件
17944
17250
  */
17945
17251
  var OriginalUserInfo = (props) => {
17946
17252
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17947
- className: "flex justify-between items-center pt-5 pb-10 pl-10 pr-0",
17253
+ className: "flex justify-between items-center pl-8 pr-0",
17948
17254
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17949
17255
  className: "flex gap-10 items-center min-w-0",
17950
17256
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -17981,6 +17287,7 @@ var OriginalAVContent = ({ content }) => {
17981
17287
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17982
17288
  className: "px-12 py-8 mt-4 w-full rounded-8xl bg-surface-secondary",
17983
17289
  children: [
17290
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" }),
17984
17291
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
17985
17292
  avatar_url: content.avatar_url,
17986
17293
  frame: content.frame,
@@ -17988,10 +17295,11 @@ var OriginalAVContent = ({ content }) => {
17988
17295
  create_time: content.create_time,
17989
17296
  decoration_card: content.decoration_card
17990
17297
  }),
17298
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17991
17299
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17992
- className: "flex flex-col items-center py-11",
17300
+ className: "flex flex-col items-center",
17993
17301
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17994
- className: "flex overflow-hidden relative flex-col items-center w-11/12 rounded-4xl rounded-10 aspect-video shadow-large",
17302
+ className: "flex overflow-hidden relative flex-col items-center w-full rounded-4xl rounded-10 aspect-video shadow-large",
17995
17303
  children: [
17996
17304
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
17997
17305
  src: content.cover,
@@ -18015,8 +17323,9 @@ var OriginalAVContent = ({ content }) => {
18015
17323
  ]
18016
17324
  })
18017
17325
  }),
17326
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10" }),
18018
17327
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18019
- className: "pb-10 pl-8 text-6xl font-bold select-text leading-20 text-foreground",
17328
+ className: "pl-2 text-6xl font-bold select-text leading-20 text-foreground",
18020
17329
  children: content.title && renderRichTextToReact(content.title, {
18021
17330
  at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18022
17331
  topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
@@ -18025,7 +17334,8 @@ var OriginalAVContent = ({ content }) => {
18025
17334
  vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18026
17335
  viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" }
18027
17336
  })
18028
- })
17337
+ }),
17338
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-4" })
18029
17339
  ]
18030
17340
  });
18031
17341
  };
@@ -18034,7 +17344,7 @@ var OriginalAVContent = ({ content }) => {
18034
17344
  */
18035
17345
  var OriginalDrawContent = ({ content }) => {
18036
17346
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18037
- className: "px-12 py-8 mt-4 w-full rounded-8xl bg-surface-secondary",
17347
+ className: "px-12 py-12 mt-4 w-full rounded-8xl bg-surface-secondary",
18038
17348
  children: [
18039
17349
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
18040
17350
  avatar_url: content.avatar_url,
@@ -18043,30 +17353,28 @@ var OriginalDrawContent = ({ content }) => {
18043
17353
  create_time: content.create_time,
18044
17354
  decoration_card: content.decoration_card
18045
17355
  }),
18046
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18047
- className: "py-4",
18048
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18049
- className: "text-5xl leading-relaxed text-foreground wrap-break-word",
18050
- children: [content.title && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
18051
- className: "text-6xl font-bold",
18052
- children: [
18053
- content.title,
18054
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("br", {}),
18055
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("br", {})
18056
- ]
18057
- }), content.text && renderRichTextToReact(content.text, {
18058
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18059
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18060
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18061
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18062
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18063
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18064
- iconScale: .8
18065
- })]
18066
- })
17356
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
17357
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17358
+ className: "text-5xl leading-relaxed text-foreground wrap-break-word",
17359
+ children: [content.title && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17360
+ className: "text-6xl font-bold",
17361
+ children: [
17362
+ content.title,
17363
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("br", {}),
17364
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("br", {})
17365
+ ]
17366
+ }), content.text && renderRichTextToReact(content.text, {
17367
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17368
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17369
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17370
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17371
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17372
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17373
+ iconScale: .8
17374
+ })]
18067
17375
  }),
18068
17376
  content.image_url && content.image_url.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18069
- className: "flex justify-center py-11 pb-4",
17377
+ className: "flex justify-center py-11 pb-0",
18070
17378
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18071
17379
  className: "flex overflow-hidden flex-col items-center w-full rounded-4xl shadow-large",
18072
17380
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
@@ -18075,9 +17383,9 @@ var OriginalDrawContent = ({ content }) => {
18075
17383
  className: "object-cover w-full h-full rounded-6"
18076
17384
  })
18077
17385
  })
18078
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17386
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18079
17387
  className: `grid gap-3 ${content.image_url?.length === 4 ? "grid-cols-2" : "grid-cols-3"}`,
18080
- children: [content.image_url?.map((img, index) => {
17388
+ children: content.image_url?.map((img, index) => {
18081
17389
  const total = content.image_url?.length || 0;
18082
17390
  const cols = total === 4 ? 2 : 3;
18083
17391
  const row = Math.floor(index / cols);
@@ -18100,10 +17408,10 @@ var OriginalDrawContent = ({ content }) => {
18100
17408
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18101
17409
  src: img.image_src,
18102
17410
  alt: `图片${index + 1}`,
18103
- className: "object-cover absolute top-0 left-0 w-full h-full"
17411
+ className: "object-cover w-full h-full"
18104
17412
  })
18105
17413
  }, index);
18106
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "col-span-full h-2" })]
17414
+ })
18107
17415
  })
18108
17416
  ]
18109
17417
  });
@@ -18114,27 +17422,35 @@ var OriginalDrawContent = ({ content }) => {
18114
17422
  var OriginalWordContent = ({ content }) => {
18115
17423
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18116
17424
  className: "px-12 py-8 mt-4 w-full rounded-8xl bg-surface-secondary",
18117
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
18118
- avatar_url: content.avatar_url,
18119
- frame: content.frame,
18120
- usernameMeta: content.usernameMeta,
18121
- create_time: content.create_time,
18122
- decoration_card: content.decoration_card
18123
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18124
- className: "py-4",
18125
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18126
- className: "text-5xl leading-relaxed text-foreground wrap-break-word",
18127
- children: content.text && renderRichTextToReact(content.text, {
18128
- at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18129
- topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18130
- lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18131
- webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18132
- vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18133
- viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
18134
- iconScale: .8
17425
+ children: [
17426
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OriginalUserInfo, {
17427
+ avatar_url: content.avatar_url,
17428
+ frame: content.frame,
17429
+ usernameMeta: content.usernameMeta,
17430
+ create_time: content.create_time,
17431
+ decoration_card: content.decoration_card
17432
+ }),
17433
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17434
+ className: "py-4",
17435
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
17436
+ className: "text-5xl leading-relaxed text-foreground wrap-break-word",
17437
+ children: content.text && renderRichTextToReact(content.text, {
17438
+ at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17439
+ topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17440
+ lottery: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17441
+ webLink: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17442
+ vote: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17443
+ viewPicture: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
17444
+ iconScale: .8
17445
+ })
18135
17446
  })
17447
+ }),
17448
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliAdditionalCard, {
17449
+ additional: content.additional,
17450
+ gap: false,
17451
+ className: "pb-4"
18136
17452
  })
18137
- })]
17453
+ ]
18138
17454
  });
18139
17455
  };
18140
17456
  /**
@@ -18234,163 +17550,6 @@ var BilibiliForwardContent = (props) => {
18234
17550
  ] });
18235
17551
  };
18236
17552
  /**
18237
- * B站转发动态状态组件
18238
- */
18239
- var BilibiliForwardStatus = (props) => {
18240
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18241
- className: "flex flex-col gap-10 px-20 w-full leading-relaxed",
18242
- children: [
18243
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18244
- className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
18245
- children: [
18246
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18247
- className: "flex gap-2 items-center",
18248
- children: [
18249
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }),
18250
- props.dianzan,
18251
- "点赞"
18252
- ]
18253
- }),
18254
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
18255
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18256
- className: "flex gap-2 items-center",
18257
- children: [
18258
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
18259
- props.pinglun,
18260
- "评论"
18261
- ]
18262
- }),
18263
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
18264
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18265
- className: "flex gap-2 items-center",
18266
- children: [
18267
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
18268
- props.share,
18269
- "分享"
18270
- ]
18271
- })
18272
- ]
18273
- }),
18274
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18275
- className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
18276
- children: [
18277
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }),
18278
- "图片生成于: ",
18279
- props.render_time
18280
- ]
18281
- }),
18282
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3" })
18283
- ]
18284
- });
18285
- };
18286
- /**
18287
- * B站转发动态底部信息组件
18288
- */
18289
- var BilibiliForwardFooter = (props) => {
18290
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18291
- className: "flex justify-between items-start px-20 pb-20",
18292
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18293
- className: "flex flex-col gap-12",
18294
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18295
- className: "flex gap-12 items-start",
18296
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18297
- className: "relative shrink-0",
18298
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18299
- src: props.avatar_url,
18300
- alt: "头像",
18301
- className: "rounded-full shadow-medium w-35 h-auto",
18302
- isCircular: true
18303
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18304
- src: props.frame,
18305
- alt: "头像框",
18306
- className: "absolute inset-0 transform scale-180"
18307
- })]
18308
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18309
- className: "flex flex-col gap-5",
18310
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18311
- className: "text-7xl font-bold select-text text-foreground",
18312
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
18313
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18314
- className: "flex gap-2 items-center text-4xl text-muted",
18315
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, { size: 32 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
18316
- className: "select-text",
18317
- children: ["UID: ", props.user_shortid]
18318
- })]
18319
- })]
18320
- })]
18321
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18322
- className: "text-3xl flex gap-6 items-center text-foreground/70",
18323
- children: [
18324
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18325
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
18326
- children: [
18327
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18328
- className: "flex gap-1 items-center",
18329
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18330
- className: "text-muted",
18331
- children: "获赞"
18332
- })]
18333
- }),
18334
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
18335
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18336
- className: "select-text font-medium text-4xl",
18337
- children: props.total_favorited
18338
- })
18339
- ]
18340
- }),
18341
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18342
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
18343
- children: [
18344
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18345
- className: "flex gap-1 items-center",
18346
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18347
- className: "text-muted",
18348
- children: "关注"
18349
- })]
18350
- }),
18351
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
18352
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18353
- className: "select-text font-medium text-4xl",
18354
- children: props.following_count
18355
- })
18356
- ]
18357
- }),
18358
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18359
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
18360
- children: [
18361
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18362
- className: "flex gap-1 items-center",
18363
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18364
- className: "text-muted",
18365
- children: "粉丝"
18366
- })]
18367
- }),
18368
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
18369
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18370
- className: "select-text font-medium text-4xl",
18371
- children: props.fans
18372
- })
18373
- ]
18374
- })
18375
- ]
18376
- })]
18377
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18378
- className: "flex flex-col items-center gap-4",
18379
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
18380
- src: props.qrCodeDataUrl,
18381
- alt: "二维码",
18382
- className: "h-auto w-75 rounded-2xl"
18383
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18384
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
18385
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
18386
- className: "text-muted",
18387
- children: "二维码"
18388
- })
18389
- })
18390
- })]
18391
- });
18392
- };
18393
- /**
18394
17553
  * B站转发动态组件
18395
17554
  */
18396
17555
  var BilibiliForwardDynamic = import_react.memo((props) => {
@@ -18400,35 +17559,13 @@ var BilibiliForwardDynamic = import_react.memo((props) => {
18400
17559
  className: "p-4",
18401
17560
  children: [
18402
17561
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
18403
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardUserInfo, {
18404
- avatar_url: props.data.avatar_url,
18405
- frame: props.data.frame,
18406
- usernameMeta: props.data.usernameMeta,
18407
- create_time: props.data.create_time,
18408
- decoration_card: props.data.decoration_card
18409
- }),
17562
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
18410
17563
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
18411
17564
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardContent, { ...props.data }),
18412
17565
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
18413
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardStatus, {
18414
- dianzan: props.data.dianzan,
18415
- pinglun: props.data.pinglun,
18416
- share: props.data.share,
18417
- render_time: props.data.render_time
18418
- }),
18419
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-23" }),
18420
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliForwardFooter, {
18421
- avatar_url: props.data.avatar_url,
18422
- frame: props.data.frame,
18423
- usernameMeta: props.data.usernameMeta,
18424
- user_shortid: props.data.user_shortid,
18425
- total_favorited: props.data.total_favorited,
18426
- following_count: props.data.following_count,
18427
- fans: props.data.fans,
18428
- dynamicTYPE: props.data.dynamicTYPE,
18429
- share_url: props.data.share_url,
18430
- qrCodeDataUrl: props.qrCodeDataUrl
18431
- })
17566
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
17567
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-40" }),
17568
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, { ...props.data })
18432
17569
  ]
18433
17570
  })
18434
17571
  });
@@ -18483,7 +17620,7 @@ var getSingleLineFontSize = (content, base, min) => {
18483
17620
  return min;
18484
17621
  };
18485
17622
  var BilibiliLiveDynamic = import_react.memo((props) => {
18486
- const { data, qrCodeDataUrl } = props;
17623
+ const { data } = props;
18487
17624
  const isDark = data.useDarkTheme === true;
18488
17625
  const { bgColor, primaryColor, secondaryColor, mutedColor, accentColor, deepColor, coverShade } = props.posterPalettes ? isDark ? props.posterPalettes.dark : props.posterPalettes.light : props.posterPalette ?? (isDark ? DARK_FALLBACK : LIGHT_FALLBACK);
18489
17626
  const logo = isDark ? "/image/bilibili/bilibili-light.png" : "/image/bilibili/bilibili.png";
@@ -18943,8 +18080,8 @@ var BilibiliLiveDynamic = import_react.memo((props) => {
18943
18080
  className: "absolute right-22 top-1/2 h-52 w-52 -translate-y-1/2 rounded-full blur-[48px]",
18944
18081
  style: { backgroundColor: withAlphaFromCss(accentColor, isDark ? .16 : .1) }
18945
18082
  }),
18946
- qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
18947
- src: qrCodeDataUrl,
18083
+ data.share_url ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
18084
+ src: generateQRCode(data.share_url, isDark),
18948
18085
  alt: "二维码",
18949
18086
  className: "relative h-100 w-100 object-contain drop-shadow-[0_20px_38px_rgba(0,0,0,0.18)]"
18950
18087
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -18969,42 +18106,6 @@ BilibiliLiveDynamic.displayName = "BilibiliLiveDynamic";
18969
18106
  //#endregion
18970
18107
  //#region ../template/src/components/platforms/bilibili/dynamic/DYNAMIC_TYPE_WORD.tsx
18971
18108
  /**
18972
- * B站动态用户信息组件
18973
- */
18974
- var BilibiliDynamicUserInfo = (props) => {
18975
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18976
- className: "flex gap-10 items-center justify-between px-0 pb-0 pl-24 pr-10",
18977
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18978
- className: "flex gap-10 items-center",
18979
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18980
- className: "relative",
18981
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18982
- src: props.avatar_url,
18983
- alt: "头像",
18984
- className: "w-32 h-32 rounded-full shadow-medium",
18985
- isCircular: true
18986
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
18987
- src: props.frame,
18988
- alt: "头像框",
18989
- className: "absolute inset-0 transform scale-180"
18990
- })]
18991
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18992
- className: "flex flex-col gap-8 text-7xl",
18993
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
18994
- className: "text-6xl font-bold select-text text-foreground",
18995
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
18996
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18997
- className: "flex gap-2 items-center text-4xl font-normal whitespace-nowrap text-muted",
18998
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 36 }), props.create_time]
18999
- })]
19000
- })]
19001
- }), props.decoration_card && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19002
- className: "shrink-0",
19003
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DecorationCard, { data: props.decoration_card })
19004
- })]
19005
- });
19006
- };
19007
- /**
19008
18109
  * B站纯文动态内容组件
19009
18110
  */
19010
18111
  var BilibiliWordContent = (props) => {
@@ -19028,163 +18129,6 @@ var BilibiliWordContent = (props) => {
19028
18129
  }), props.additional && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliAdditionalCard, { additional: props.additional })] });
19029
18130
  };
19030
18131
  /**
19031
- * B站动态状态组件
19032
- */
19033
- var BilibiliDynamicStatus = (props) => {
19034
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19035
- className: "flex flex-col gap-10 px-20 w-full leading-relaxed",
19036
- children: [
19037
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19038
- className: "flex gap-6 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
19039
- children: [
19040
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19041
- className: "flex gap-2 items-center",
19042
- children: [
19043
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 48 }),
19044
- props.dianzan,
19045
- "点赞"
19046
- ]
19047
- }),
19048
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
19049
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19050
- className: "flex gap-2 items-center",
19051
- children: [
19052
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
19053
- props.pinglun,
19054
- "评论"
19055
- ]
19056
- }),
19057
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "·" }),
19058
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19059
- className: "flex gap-2 items-center",
19060
- children: [
19061
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShareIcon, { size: 48 }),
19062
- props.share,
19063
- "分享"
19064
- ]
19065
- })
19066
- ]
19067
- }),
19068
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19069
- className: "flex gap-2 items-center text-5xl font-light tracking-normal select-text text-foreground/70",
19070
- children: [
19071
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, { size: 48 }),
19072
- "图片生成于: ",
19073
- props.render_time
19074
- ]
19075
- }),
19076
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3" })
19077
- ]
19078
- });
19079
- };
19080
- /**
19081
- * B站动态底部信息组件
19082
- */
19083
- var BilibiliDynamicFooter = (props) => {
19084
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19085
- className: "flex justify-between items-start px-20 pb-20",
19086
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19087
- className: "flex flex-col gap-12",
19088
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19089
- className: "flex gap-12 items-start",
19090
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19091
- className: "relative shrink-0",
19092
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
19093
- src: props.avatar_url,
19094
- alt: "头像",
19095
- className: "rounded-full shadow-medium w-35 h-auto",
19096
- isCircular: true
19097
- }), props.frame && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
19098
- src: props.frame,
19099
- alt: "头像框",
19100
- className: "absolute inset-0 transform scale-180"
19101
- })]
19102
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19103
- className: "flex flex-col gap-5",
19104
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19105
- className: "text-7xl font-bold select-text text-foreground",
19106
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsernameDisplay, { metadata: props.usernameMeta })
19107
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19108
- className: "flex gap-2 items-center text-4xl text-muted",
19109
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
19110
- className: "select-text",
19111
- children: ["UID: ", props.user_shortid]
19112
- })
19113
- })]
19114
- })]
19115
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19116
- className: "text-3xl flex gap-6 items-center text-foreground/70",
19117
- children: [
19118
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19119
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
19120
- children: [
19121
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19122
- className: "flex gap-1 items-center",
19123
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThumbUpIcon, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19124
- className: "text-muted",
19125
- children: "获赞"
19126
- })]
19127
- }),
19128
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
19129
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19130
- className: "select-text font-medium text-4xl",
19131
- children: props.total_favorited
19132
- })
19133
- ]
19134
- }),
19135
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19136
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
19137
- children: [
19138
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19139
- className: "flex gap-1 items-center",
19140
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19141
- className: "text-muted",
19142
- children: "关注"
19143
- })]
19144
- }),
19145
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
19146
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19147
- className: "select-text font-medium text-4xl",
19148
- children: props.following_count
19149
- })
19150
- ]
19151
- }),
19152
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19153
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-surface",
19154
- children: [
19155
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19156
- className: "flex gap-1 items-center",
19157
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsersRound, { size: 28 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19158
- className: "text-muted",
19159
- children: "粉丝"
19160
- })]
19161
- }),
19162
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-px bg-border" }),
19163
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19164
- className: "select-text font-medium text-4xl",
19165
- children: props.fans
19166
- })
19167
- ]
19168
- })
19169
- ]
19170
- })]
19171
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19172
- className: "flex flex-col items-center gap-4",
19173
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
19174
- src: props.qrCodeDataUrl,
19175
- alt: "二维码",
19176
- className: "h-auto w-75 rounded-2xl"
19177
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19178
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
19179
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19180
- className: "text-muted",
19181
- children: "二维码"
19182
- })
19183
- })
19184
- })]
19185
- });
19186
- };
19187
- /**
19188
18132
  * B站纯文动态组件
19189
18133
  */
19190
18134
  var BilibiliWordDynamic = import_react.memo((props) => {
@@ -19194,37 +18138,15 @@ var BilibiliWordDynamic = import_react.memo((props) => {
19194
18138
  className: "p-4",
19195
18139
  children: [
19196
18140
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-25" }),
19197
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, {
19198
- avatar_url: props.data.avatar_url,
19199
- frame: props.data.frame,
19200
- usernameMeta: props.data.usernameMeta,
19201
- create_time: props.data.create_time,
19202
- decoration_card: props.data.decoration_card
19203
- }),
18141
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicUserInfo, { ...props.data }),
19204
18142
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-15" }),
19205
18143
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliWordContent, {
19206
18144
  text: props.data.text,
19207
18145
  additional: props.data.additional
19208
18146
  }),
19209
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, {
19210
- dianzan: props.data.dianzan,
19211
- pinglun: props.data.pinglun,
19212
- share: props.data.share,
19213
- render_time: props.data.render_time
19214
- }),
18147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicStatus, { ...props.data }),
19215
18148
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-23" }),
19216
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, {
19217
- avatar_url: props.data.avatar_url,
19218
- frame: props.data.frame,
19219
- usernameMeta: props.data.usernameMeta,
19220
- user_shortid: props.data.user_shortid,
19221
- total_favorited: props.data.total_favorited,
19222
- following_count: props.data.following_count,
19223
- fans: props.data.fans,
19224
- dynamicTYPE: props.data.dynamicTYPE,
19225
- share_url: props.data.share_url,
19226
- qrCodeDataUrl: props.qrCodeDataUrl
19227
- })
18149
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BilibiliDynamicFooter, { ...props.data })
19228
18150
  ]
19229
18151
  })
19230
18152
  });
@@ -19239,7 +18161,7 @@ BilibiliWordDynamic.displayName = "BilibiliWordDynamic";
19239
18161
  */
19240
18162
  var BilibiliQrcodeImg = import_react.memo((props) => {
19241
18163
  const isDark = props.data?.useDarkTheme ?? false;
19242
- const { qrCodeDataUrl } = props;
18164
+ const qrCodeDataUrl = generateQRCode(props.data.share_url, isDark);
19243
18165
  const theme = {
19244
18166
  bg: isDark ? "#000000" : "#FFFFFF",
19245
18167
  text: isDark ? "#FFFFFF" : "#000000",
@@ -20345,16 +19267,10 @@ var DouyinArticleWork = (props) => {
20345
19267
  className: "flex justify-between items-start px-20 pb-20",
20346
19268
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserInfoSection$3, { ...props }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20347
19269
  className: "flex flex-col items-center gap-4",
20348
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
20349
- src: props.qrCodeDataUrl,
19270
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
19271
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
20350
19272
  alt: "二维码",
20351
19273
  className: "h-auto w-75 rounded-xl"
20352
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20353
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
20354
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
20355
- className: "text-muted",
20356
- children: "二维码"
20357
- })
20358
19274
  })
20359
19275
  })]
20360
19276
  })
@@ -20401,24 +19317,15 @@ var formatPublishTime = (timestamp) => {
20401
19317
  * @param props 组件属性
20402
19318
  * @returns JSX元素
20403
19319
  */
20404
- var QRCodeSection$1 = ({ qrCodeDataUrl }) => {
19320
+ var QRCodeSection = (props) => {
20405
19321
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20406
19322
  className: "flex flex-col items-center",
20407
19323
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20408
19324
  className: "flex justify-center items-center w-100 h-100 p-4",
20409
- children: qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
20410
- src: qrCodeDataUrl,
19325
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
19326
+ src: generateQRCode(props.share_url, props.useDarkTheme),
20411
19327
  alt: "二维码",
20412
19328
  className: "object-contain w-full h-full rounded-lg"
20413
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
20414
- className: "flex flex-col justify-center items-center text-muted",
20415
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(QrCode, {
20416
- width: 80,
20417
- className: "mb-4"
20418
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
20419
- className: "text-lg",
20420
- children: "二维码生成失败"
20421
- })]
20422
19329
  })
20423
19330
  })
20424
19331
  });
@@ -20549,7 +19456,7 @@ var VideoInfoHeader = (props) => {
20549
19456
  ]
20550
19457
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20551
19458
  className: "shrink-0",
20552
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QRCodeSection$1, { qrCodeDataUrl: props.qrCodeDataUrl })
19459
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QRCodeSection, { ...props })
20553
19460
  })]
20554
19461
  })
20555
19462
  });
@@ -20679,26 +19586,26 @@ var ReplyItemComponent = ({ reply, depth = 0, isLast, maxDepth = 6 }) => {
20679
19586
  })
20680
19587
  }), reply.children.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-0.5 bg-border-secondary h-full grow mt-3 rounded-t-full" })]
20681
19588
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
20682
- className: clsx("flex flex-col pl-6 min-w-0 gap-2", isLast && reply.children.length === 0 ? "pb-16" : "pb-6"),
19589
+ className: cn("flex flex-col pl-6 min-w-0 gap-2", isLast && reply.children.length === 0 ? "pb-16" : "pb-6"),
20683
19590
  children: [
20684
19591
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
20685
19592
  className: "flex flex-nowrap items-center content-center w-full overflow-hidden",
20686
19593
  children: [
20687
19594
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
20688
- className: clsx("mr-2 text-4xl font-normal text-muted", isNicknameLonger ? "min-w-0 truncate shrink" : "shrink-0"),
19595
+ className: cn("mr-2 text-4xl font-normal text-muted", isNicknameLonger ? "min-w-0 truncate shrink" : "shrink-0"),
20689
19596
  children: reply.nickname
20690
19597
  }),
20691
19598
  reply.label_text !== "" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20692
- className: clsx("inline-flex shrink-0 items-center px-3 py-1 text-3xl rounded-lg mr-2", reply.label_text === "作者" ? "bg-[#fe2c55] text-white" : "bg-surface text-muted"),
19599
+ className: cn("px-4 py-1 text-3xl rounded-xl mr-2", reply.label_text === "作者" ? "bg-[#fe2c55] text-white" : "bg-surface text-muted"),
20693
19600
  children: reply.label_text
20694
19601
  }),
20695
19602
  reply.reply_to_username && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
20696
- className: clsx("flex items-center", !isNicknameLonger ? "overflow-hidden min-w-0 shrink" : "shrink-0"),
19603
+ className: cn("flex items-center", !isNicknameLonger ? "overflow-hidden min-w-0 shrink" : "shrink-0"),
20697
19604
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(a, {
20698
19605
  weight: "fill",
20699
19606
  className: "w-7 h-auto mr-3.5 mx-1 text-muted shrink-0"
20700
19607
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
20701
- className: clsx("text-4xl font-normal text-muted", !isNicknameLonger && "truncate"),
19608
+ className: cn("text-4xl font-normal text-muted", !isNicknameLonger && "truncate"),
20702
19609
  children: reply.reply_to_username
20703
19610
  })]
20704
19611
  })
@@ -20768,7 +19675,7 @@ var ReplyItemComponent = ({ reply, depth = 0, isLast, maxDepth = 6 }) => {
20768
19675
  */
20769
19676
  var CommentItemComponent$1 = (props) => {
20770
19677
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20771
- className: clsx("flex flex-col px-6 pt-8", {
19678
+ className: cn("flex flex-col px-6 pt-8", {
20772
19679
  "pb-0": props.isLast,
20773
19680
  "pb-10": !props.isLast
20774
19681
  }),
@@ -20885,10 +19792,7 @@ var DouyinComment = import_react.memo((props) => {
20885
19792
  className: "p-5 px-15",
20886
19793
  children: [
20887
19794
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
20888
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VideoInfoHeader, {
20889
- ...props.data,
20890
- qrCodeDataUrl: props.qrCodeDataUrl
20891
- }),
19795
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VideoInfoHeader, { ...props.data }),
20892
19796
  randomSuggestWord && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
20893
19797
  className: "mx-auto my-20 mb-5 ml-10",
20894
19798
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -21232,16 +20136,10 @@ var DouyinDynamic = (props) => {
21232
20136
  className: "flex justify-between items-start px-20 pb-20",
21233
20137
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserInfoSection$2, { ...props }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21234
20138
  className: "flex flex-col items-center gap-4",
21235
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21236
- src: props.qrCodeDataUrl,
20139
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
20140
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
21237
20141
  alt: "二维码",
21238
20142
  className: "h-auto w-75 rounded-xl"
21239
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21240
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
21241
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
21242
- className: "text-muted",
21243
- children: "二维码"
21244
- })
21245
20143
  })
21246
20144
  })]
21247
20145
  })]
@@ -21400,8 +20298,8 @@ var DouyinFavoriteList = (props) => {
21400
20298
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-px w-full bg-linear-to-r from-surface-secondary via-border to-transparent" }),
21401
20299
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21402
20300
  className: "flex items-end gap-6",
21403
- children: [props.qrCodeDataUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21404
- src: props.qrCodeDataUrl,
20301
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
20302
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
21405
20303
  className: "w-65 h-auto rounded-2xl mix-blend-multiply",
21406
20304
  alt: "QR"
21407
20305
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -21816,16 +20714,10 @@ var DouyinImageWork = (props) => {
21816
20714
  className: "flex justify-between items-start px-20 pb-20",
21817
20715
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserInfoSection$1, { ...props }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21818
20716
  className: "flex flex-col items-center gap-4",
21819
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21820
- src: props.qrCodeDataUrl,
20717
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
20718
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
21821
20719
  alt: "二维码",
21822
20720
  className: "h-auto w-75 rounded-xl"
21823
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
21824
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
21825
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
21826
- className: "text-muted",
21827
- children: "二维码"
21828
- })
21829
20721
  })
21830
20722
  })]
21831
20723
  })]
@@ -22058,7 +20950,7 @@ var InfoSection$1 = ({ data }) => {
22058
20950
  /**
22059
20951
  * 底部区域 - 主播信息 + 二维码 + 抖音Logo
22060
20952
  */
22061
- var BottomSection = ({ data, qrCodeDataUrl }) => {
20953
+ var BottomSection = ({ data }) => {
22062
20954
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
22063
20955
  className: "flex justify-between items-end px-16 pt-24 pb-16",
22064
20956
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -22151,8 +21043,8 @@ var BottomSection = ({ data, qrCodeDataUrl }) => {
22151
21043
  alt: "抖音",
22152
21044
  className: "w-60 h-auto opacity-80 dark:opacity-70"
22153
21045
  }),
22154
- qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
22155
- src: qrCodeDataUrl,
21046
+ generateQRCode(data.share_url, data.useDarkTheme) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21047
+ src: generateQRCode(data.share_url, data.useDarkTheme),
22156
21048
  alt: "二维码",
22157
21049
  className: "h-auto w-75"
22158
21050
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -22174,7 +21066,6 @@ var BottomSection = ({ data, qrCodeDataUrl }) => {
22174
21066
  * 抖音直播组件
22175
21067
  */
22176
21068
  var DouyinLive = (props) => {
22177
- const { qrCodeDataUrl } = props;
22178
21069
  const d = props.data;
22179
21070
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DefaultLayout, {
22180
21071
  ...props,
@@ -22184,10 +21075,7 @@ var DouyinLive = (props) => {
22184
21075
  children: [
22185
21076
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CoverSection$1, { imageUrl: d.image_url }),
22186
21077
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InfoSection$1, { data: d }),
22187
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BottomSection, {
22188
- data: d,
22189
- qrCodeDataUrl
22190
- })
21078
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BottomSection, { data: d })
22191
21079
  ]
22192
21080
  })]
22193
21081
  });
@@ -22317,7 +21205,7 @@ var MusicAuthorInfoSection = ({ avatarUrl, username, userShortId, totalFavorited
22317
21205
  * @param props 组件属性
22318
21206
  * @returns JSX元素
22319
21207
  */
22320
- var MusicQRCodeSection = ({ qrCodeDataUrl }) => {
21208
+ var MusicQRCodeSection = ({ share_url, useDarkTheme }) => {
22321
21209
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
22322
21210
  className: "flex flex-col-reverse items-center -mb-12 mr-18",
22323
21211
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -22326,7 +21214,7 @@ var MusicQRCodeSection = ({ qrCodeDataUrl }) => {
22326
21214
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
22327
21215
  className: "p-2.5 rounded-sm border-[7px] border-dashed border-border",
22328
21216
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
22329
- src: qrCodeDataUrl,
21217
+ src: generateQRCode(share_url, useDarkTheme),
22330
21218
  alt: "二维码",
22331
21219
  className: "w-87.5 h-87.5 select-text"
22332
21220
  })
@@ -22339,7 +21227,7 @@ var MusicQRCodeSection = ({ qrCodeDataUrl }) => {
22339
21227
  * @returns JSX元素
22340
21228
  */
22341
21229
  var DouyinMusicInfo = (props) => {
22342
- const { data, qrCodeDataUrl } = props;
21230
+ const { data } = props;
22343
21231
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DefaultLayout, {
22344
21232
  ...props,
22345
21233
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
@@ -22373,7 +21261,7 @@ var DouyinMusicInfo = (props) => {
22373
21261
  fans: data.fans,
22374
21262
  useDarkTheme: data.useDarkTheme
22375
21263
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MusicQRCodeSection, {
22376
- qrCodeDataUrl,
21264
+ share_url: data.share_url,
22377
21265
  useDarkTheme: data.useDarkTheme
22378
21266
  })]
22379
21267
  })
@@ -22389,7 +21277,7 @@ var DouyinMusicInfo = (props) => {
22389
21277
  */
22390
21278
  var DouyinQrcodeImg = import_react.memo((props) => {
22391
21279
  const isDark = props.data?.useDarkTheme ?? false;
22392
- const qrCodeImage = props.data.qrCodeDataUrl || props.qrCodeDataUrl;
21280
+ const qrCodeImage = generateQRCode(props.data.share_url || "", isDark);
22393
21281
  const theme = {
22394
21282
  bg: isDark ? "#000000" : "#FFFFFF",
22395
21283
  text: isDark ? "#FFFFFF" : "#000000",
@@ -22749,8 +21637,8 @@ var DouyinRecommendList = (props) => {
22749
21637
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-px w-full bg-linear-to-r from-surface-secondary via-border to-transparent" }),
22750
21638
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
22751
21639
  className: "flex items-end gap-6",
22752
- children: [props.qrCodeDataUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
22753
- src: props.qrCodeDataUrl,
21640
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
21641
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
22754
21642
  className: "w-65 h-auto rounded-2xl mix-blend-multiply",
22755
21643
  alt: "QR"
22756
21644
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -24010,16 +22898,10 @@ var DouyinVideoWork = (props) => {
24010
22898
  className: "flex justify-between items-start px-20 pb-20",
24011
22899
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserInfoSection, { ...props }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24012
22900
  className: "flex flex-col items-center gap-4",
24013
- children: props.qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
24014
- src: props.qrCodeDataUrl,
22901
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
22902
+ src: generateQRCode(props.data.share_url, props.data.useDarkTheme),
24015
22903
  alt: "二维码",
24016
22904
  className: "h-auto w-75 rounded-xl"
24017
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24018
- className: "flex justify-center items-center rounded-2xl bg-surface w-100 h-100",
24019
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24020
- className: "text-muted",
24021
- children: "二维码"
24022
- })
24023
22905
  })
24024
22906
  })]
24025
22907
  })]
@@ -24053,28 +22935,19 @@ var formatKuaishouLikeCount = (count) => {
24053
22935
  * @param props 组件属性
24054
22936
  * @returns JSX元素
24055
22937
  */
24056
- var KuaishouQRCodeSection = ({ qrCodeDataUrl, type, imageLength }) => {
22938
+ var KuaishouQRCodeSection = (props) => {
24057
22939
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24058
22940
  className: "flex flex-col items-center -mr-10",
24059
22941
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24060
22942
  className: "mt-20 flex items-center justify-center w-150 h-150 bg-surface rounded-lg shadow-medium",
24061
- children: qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
24062
- src: qrCodeDataUrl,
22943
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
22944
+ src: generateQRCode(props.share_url, props.useDarkTheme),
24063
22945
  alt: "二维码",
24064
22946
  className: "object-contain w-full h-full"
24065
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24066
- className: "flex flex-col justify-center items-center text-muted",
24067
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(QrCode, {
24068
- width: 80,
24069
- className: "mb-4"
24070
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24071
- className: "text-lg",
24072
- children: "二维码生成失败"
24073
- })]
24074
22947
  })
24075
22948
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24076
22949
  className: "mt-5 text-[45px] text-center text-foreground",
24077
- children: type === "视频" ? "视频直链(永久)" : type === "图集" ? `图集分享链接 共${imageLength}张` : "分享链接"
22950
+ children: props.Type === "视频" ? "视频直链(永久)" : props.Type === "图集" ? `图集分享链接 共${props.ImageLength}张` : "分享链接"
24078
22951
  })]
24079
22952
  });
24080
22953
  };
@@ -24083,7 +22956,7 @@ var KuaishouQRCodeSection = ({ qrCodeDataUrl, type, imageLength }) => {
24083
22956
  * @param props 组件属性
24084
22957
  * @returns JSX元素
24085
22958
  */
24086
- var KuaishouVideoInfoHeader = ({ type, commentLength, videoSize, likeCount, viewCount, imageLength }) => {
22959
+ var KuaishouVideoInfoHeader = (props) => {
24087
22960
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24088
22961
  className: "flex justify-between items-center max-w-300 mx-auto p-5",
24089
22962
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -24108,33 +22981,33 @@ var KuaishouVideoInfoHeader = ({ type, commentLength, videoSize, likeCount, view
24108
22981
  className: "flex items-center p-2.5 tracking-[6px] text-[45px] text-left",
24109
22982
  children: [
24110
22983
  "评论数量:",
24111
- commentLength,
22984
+ props.CommentLength,
24112
22985
  "条"
24113
22986
  ]
24114
22987
  }),
24115
- type === "视频" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
22988
+ props.Type === "视频" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
24116
22989
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24117
22990
  className: "flex items-center p-2.5 tracking-[6px] text-[45px] text-left",
24118
22991
  children: [
24119
22992
  "视频大小:",
24120
- videoSize,
22993
+ props.VideoSize,
24121
22994
  "MB"
24122
22995
  ]
24123
22996
  }),
24124
22997
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24125
22998
  className: "flex items-center p-2.5 tracking-[6px] text-[45px] text-left",
24126
- children: ["点赞数量:", likeCount]
22999
+ children: ["点赞数量:", props.likeCount]
24127
23000
  }),
24128
23001
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24129
23002
  className: "flex items-center p-2.5 tracking-[6px] text-[45px] text-left",
24130
- children: ["观看次数:", viewCount]
23003
+ children: ["观看次数:", props.viewCount]
24131
23004
  })
24132
23005
  ] }),
24133
- type === "图集" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23006
+ props.Type === "图集" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24134
23007
  className: "flex items-center p-2.5 tracking-[6px] text-[45px] text-left",
24135
23008
  children: [
24136
23009
  "图片数量:",
24137
- imageLength,
23010
+ props.ImageLength,
24138
23011
  "张"
24139
23012
  ]
24140
23013
  })
@@ -24148,11 +23021,11 @@ var KuaishouVideoInfoHeader = ({ type, commentLength, videoSize, likeCount, view
24148
23021
  * @param props 组件属性
24149
23022
  * @returns JSX元素
24150
23023
  */
24151
- var KuaishouCommentItemComponent = ({ comment, isLast = false }) => {
23024
+ var KuaishouCommentItemComponent = ({ ...props }, isLast = false) => {
24152
23025
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24153
23026
  className: `flex px-10 pt-10 ${isLast ? "pb-0" : "pb-10"}`,
24154
23027
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
24155
- src: comment.userimageurl,
23028
+ src: props.userimageurl,
24156
23029
  className: "mb-12.5 w-[187.5px] h-[187.5px] rounded-full mr-8 object-cover shadow-lg",
24157
23030
  alt: "用户头像"
24158
23031
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -24162,7 +23035,7 @@ var KuaishouCommentItemComponent = ({ comment, isLast = false }) => {
24162
23035
  className: "mb-12.5 text-[50px] text-foreground/70 relative flex items-center",
24163
23036
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24164
23037
  className: "font-medium",
24165
- children: comment.nickname
23038
+ children: props.nickname
24166
23039
  })
24167
23040
  }),
24168
23041
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -24171,13 +23044,13 @@ var KuaishouCommentItemComponent = ({ comment, isLast = false }) => {
24171
23044
  wordBreak: "break-word",
24172
23045
  overflowWrap: "break-word"
24173
23046
  },
24174
- children: renderKuaishouCommentRichText(comment.text)
23047
+ children: renderKuaishouCommentRichText(props.text)
24175
23048
  }),
24176
- (comment.commentimage || comment.sticker) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23049
+ (props.commentimage || props.sticker) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24177
23050
  className: "flex my-5 overflow-hidden shadow-md rounded-2xl w-[95%] flex-1",
24178
23051
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
24179
23052
  className: "object-contain w-full h-full rounded-2xl",
24180
- src: comment.commentimage || comment.sticker,
23053
+ src: props.commentimage || props.sticker,
24181
23054
  alt: "评论图片"
24182
23055
  })
24183
23056
  }),
@@ -24188,17 +23061,17 @@ var KuaishouCommentItemComponent = ({ comment, isLast = false }) => {
24188
23061
  children: [
24189
23062
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24190
23063
  className: "text-[45px] select-text",
24191
- children: formatKuaishouCommentTime(comment.create_time)
23064
+ children: formatKuaishouCommentTime(props.create_time)
24192
23065
  }),
24193
- comment.ip_label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
23066
+ props.ip_label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24194
23067
  className: "text-[45px] select-text",
24195
- children: comment.ip_label
23068
+ children: props.ip_label
24196
23069
  }),
24197
- comment.reply_comment_total && comment.reply_comment_total > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
23070
+ props.reply_comment_total && props.reply_comment_total > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
24198
23071
  className: "text-[40px] text-foreground/70",
24199
23072
  children: [
24200
23073
  "共",
24201
- comment.reply_comment_total,
23074
+ props.reply_comment_total,
24202
23075
  "条回复"
24203
23076
  ]
24204
23077
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -24215,7 +23088,7 @@ var KuaishouCommentItemComponent = ({ comment, isLast = false }) => {
24215
23088
  className: "stroke-current"
24216
23089
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24217
23090
  className: "text-[50px] select-text",
24218
- children: formatKuaishouLikeCount(comment.digg_count)
23091
+ children: formatKuaishouLikeCount(props.digg_count)
24219
23092
  })]
24220
23093
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24221
23094
  className: "flex items-center transition-colors cursor-pointer hover:text-accent",
@@ -24243,24 +23116,11 @@ var KuaishouComment = import_react.memo((props) => {
24243
23116
  className: "p-5",
24244
23117
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24245
23118
  className: "flex justify-between items-center max-w-300 mx-auto p-5",
24246
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(KuaishouVideoInfoHeader, {
24247
- type: props.data?.Type || "视频",
24248
- commentLength: props.data?.CommentLength || 0,
24249
- videoSize: props.data?.VideoSize,
24250
- likeCount: props.data?.likeCount,
24251
- viewCount: props.data?.viewCount,
24252
- imageLength: props.data?.ImageLength,
24253
- useDarkTheme: props.data?.useDarkTheme
24254
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(KuaishouQRCodeSection, {
24255
- qrCodeDataUrl: props.qrCodeDataUrl || "",
24256
- type: props.data?.Type || "视频",
24257
- imageLength: props.data?.ImageLength,
24258
- useDarkTheme: props.data?.useDarkTheme
24259
- })]
23119
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(KuaishouVideoInfoHeader, { ...props.data }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(KuaishouQRCodeSection, { ...props.data })]
24260
23120
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24261
23121
  className: "overflow-auto mx-auto max-w-full",
24262
23122
  children: commentsArray.length > 0 ? commentsArray.map((comment, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(KuaishouCommentItemComponent, {
24263
- comment,
23123
+ ...comment,
24264
23124
  isLast: index === commentsArray.length - 1
24265
23125
  }, comment.cid || index)) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24266
23126
  className: "flex justify-center items-center py-20 text-muted",
@@ -24296,7 +23156,7 @@ var InlineCalloutCode = ({ children, className }) => /* @__PURE__ */ (0, import_
24296
23156
  */
24297
23157
  var Changelog = import_react.memo((props) => {
24298
23158
  const isDark = props.data.useDarkTheme ?? false;
24299
- const { qrCodeDataUrl } = props;
23159
+ const share_url = props.data?.share_url || "";
24300
23160
  const backgroundColors = isDark ? {
24301
23161
  base: "#0a0a0a",
24302
23162
  primary: "rgba(212, 175, 55, 0.28)",
@@ -24608,12 +23468,12 @@ var Changelog = import_react.memo((props) => {
24608
23468
  children: props.data?.markdown ?? ""
24609
23469
  })
24610
23470
  }),
24611
- qrCodeDataUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23471
+ share_url && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24612
23472
  className: "flex flex-col items-center gap-12 py-8",
24613
23473
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24614
23474
  className: "w-120 h-auto",
24615
23475
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
24616
- src: qrCodeDataUrl,
23476
+ src: generateQRCode(share_url, isDark),
24617
23477
  alt: "二维码",
24618
23478
  className: "w-full h-full object-contain"
24619
23479
  })
@@ -26120,7 +24980,7 @@ var SectionTitle = ({ icon, en, zh, color }) => /* @__PURE__ */ (0, import_jsx_r
26120
24980
  * API错误显示组件 - 手机端 Apple 风格
26121
24981
  */
26122
24982
  var handlerError = (props) => {
26123
- const { data, qrCodeDataUrl } = props;
24983
+ const { data } = props;
26124
24984
  const isDark = data.useDarkTheme === true;
26125
24985
  const businessError = data.type === "business_error" ? data.error : null;
26126
24986
  const displayMethod = businessError?.businessName || data.method;
@@ -26395,7 +25255,7 @@ var handlerError = (props) => {
26395
25255
  children: displayMethod
26396
25256
  })]
26397
25257
  }),
26398
- data.isVerification && qrCodeDataUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
25258
+ data.isVerification && data.verificationUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26399
25259
  className: "mb-16 p-12 rounded-[40px]",
26400
25260
  style: { backgroundColor: isDark ? "rgba(0,0,0,0.25)" : "rgba(255,255,255,0.6)" },
26401
25261
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -26411,7 +25271,7 @@ var handlerError = (props) => {
26411
25271
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26412
25272
  className: "flex gap-16 items-center",
26413
25273
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
26414
- src: qrCodeDataUrl,
25274
+ src: generateQRCode(data.verificationUrl, isDark),
26415
25275
  alt: "验证二维码",
26416
25276
  className: "w-64 h-64 rounded-3xl"
26417
25277
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -27562,7 +26422,7 @@ var LivePhotoTip = import_react.memo((props) => {
27562
26422
  ]
27563
26423
  }),
27564
26424
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27565
- className: "relative z-10 flex flex-col min-h-360 px-20 py-16",
26425
+ className: "relative z-10 flex flex-col min-h-360 px-16 py-16",
27566
26426
  children: [
27567
26427
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-20" }),
27568
26428
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -27571,7 +26431,7 @@ var LivePhotoTip = import_react.memo((props) => {
27571
26431
  className: "rounded-full p-5 shrink-0",
27572
26432
  style: { background: "radial-gradient(circle, " + (isDark ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.06)") + " 0%, transparent 70%)" },
27573
26433
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowDownToLine, {
27574
- className: "w-20 h-auto",
26434
+ className: "w-30 h-auto",
27575
26435
  style: { color: primaryColor }
27576
26436
  })
27577
26437
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
@@ -27579,9 +26439,9 @@ var LivePhotoTip = import_react.memo((props) => {
27579
26439
  style: { color: accentColor },
27580
26440
  children: "保存原图"
27581
26441
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
27582
- className: "text-2xl mt-1",
26442
+ className: "text-5xl mt-1",
27583
26443
  style: { color: mutedColor },
27584
- children: "长按选择「保存原图」即可识别为实况照片"
26444
+ children: "点击「查看原图」后保存到相册即可识别为实况照片"
27585
26445
  })] })]
27586
26446
  }),
27587
26447
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -27667,7 +26527,7 @@ LivePhotoTip.displayName = "LivePhotoTip";
27667
26527
  * @returns JSX元素
27668
26528
  */
27669
26529
  var QrLogin = import_react.memo((props) => {
27670
- const qrCodeDataUrl = props.qrCodeDataUrl;
26530
+ const qrCodeDataUrl = props.data.qr_url ? generateQRCode(props.data.qr_url, props.data.useDarkTheme ?? false) : "";
27671
26531
  const isDark = props.data.useDarkTheme ?? false;
27672
26532
  const bgColor = isDark ? "#0f0f1a" : "#f8f6ff";
27673
26533
  const secondaryColor = isDark ? "#a78bfa" : "#8b5cf6";
@@ -28454,7 +27314,7 @@ var VersionWarning = (props) => {
28454
27314
  })
28455
27315
  }),
28456
27316
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Puzzle, {
28457
- className: clsx("w-10 h-auto"),
27317
+ className: cn("w-10 h-auto"),
28458
27318
  style: { color: mutedColor }
28459
27319
  }),
28460
27320
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -28724,35 +27584,11 @@ var formatXiaohongshuLikeCount = (count) => {
28724
27584
  return count || "0";
28725
27585
  };
28726
27586
  /**
28727
- * 二维码区域组件
28728
- * @param props 组件属性
28729
- * @returns JSX元素
28730
- */
28731
- var QRCodeSection = ({ qrCodeDataUrl }) => {
28732
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28733
- className: "flex flex-col justify-center items-center p-5",
28734
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28735
- className: "flex overflow-hidden justify-center items-center bg-white w-110 h-110",
28736
- children: qrCodeDataUrl ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
28737
- src: qrCodeDataUrl,
28738
- alt: "二维码",
28739
- className: "object-contain"
28740
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QrCode, {
28741
- width: 200,
28742
- className: "text-muted"
28743
- })
28744
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
28745
- className: "mt-5 text-[40px] text-muted text-center",
28746
- children: "扫码查看原笔记"
28747
- })]
28748
- });
28749
- };
28750
- /**
28751
27587
  * 笔记信息头部组件
28752
27588
  * @param props 组件属性
28753
27589
  * @returns JSX元素
28754
27590
  */
28755
- var NoteInfoHeader = ({ type, commentLength, imageLength, qrCodeDataUrl }) => {
27591
+ var NoteInfoHeader = (props) => {
28756
27592
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28757
27593
  className: "flex justify-between items-center max-w-300 mx-auto p-5",
28758
27594
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -28775,27 +27611,40 @@ var NoteInfoHeader = ({ type, commentLength, imageLength, qrCodeDataUrl }) => {
28775
27611
  children: [
28776
27612
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28777
27613
  className: "tracking-[6px] text-[45px] select-text",
28778
- children: ["笔记类型:", type]
27614
+ children: ["笔记类型:", props.Type]
28779
27615
  }),
28780
27616
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28781
27617
  className: "tracking-[6px] text-[45px] select-text",
28782
27618
  children: [
28783
27619
  "评论数量:",
28784
- commentLength,
27620
+ props.CommentLength,
28785
27621
  "条"
28786
27622
  ]
28787
27623
  }),
28788
- type === "图文" && imageLength && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27624
+ props.Type === "图文" && props.ImageLength && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28789
27625
  className: "tracking-[6px] text-[45px] select-text",
28790
27626
  children: [
28791
27627
  "图片数量:",
28792
- imageLength,
27628
+ props.ImageLength,
28793
27629
  "张"
28794
27630
  ]
28795
27631
  })
28796
27632
  ]
28797
27633
  })]
28798
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QRCodeSection, { qrCodeDataUrl })]
27634
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27635
+ className: "flex flex-col justify-center items-center p-5",
27636
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27637
+ className: "flex overflow-hidden justify-center items-center bg-white w-110 h-110",
27638
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
27639
+ src: generateQRCode(props.share_url, props.useDarkTheme),
27640
+ alt: "二维码",
27641
+ className: "object-contain"
27642
+ })
27643
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
27644
+ className: "mt-5 text-[40px] text-muted text-center",
27645
+ children: "扫码查看原笔记"
27646
+ })]
27647
+ })]
28799
27648
  });
28800
27649
  };
28801
27650
  /**
@@ -28803,11 +27652,11 @@ var NoteInfoHeader = ({ type, commentLength, imageLength, qrCodeDataUrl }) => {
28803
27652
  * @param props 组件属性
28804
27653
  * @returns JSX元素
28805
27654
  */
28806
- var CommentItemComponent = ({ comment, isLast = false }) => {
27655
+ var CommentItemComponent = ({ ...props }, isLast = false) => {
28807
27656
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28808
27657
  className: `flex px-10 pt-15 ${isLast ? "pb-0" : "pb-15"}`,
28809
27658
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
28810
- src: comment.user_info.image,
27659
+ src: props.user_info.image,
28811
27660
  className: "mb-12.5 w-[187.5px] h-[187.5px] rounded-full mr-8 object-cover shadow-lg",
28812
27661
  alt: "用户头像"
28813
27662
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -28817,8 +27666,8 @@ var CommentItemComponent = ({ comment, isLast = false }) => {
28817
27666
  className: "mb-12.5 text-[50px] text-foreground/70 relative flex items-center select-text",
28818
27667
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28819
27668
  className: "text-5xl",
28820
- children: comment.user_info.nickname
28821
- }), comment.show_tags && comment.show_tags.length > 0 && comment.show_tags.map((tag, index) => {
27669
+ children: props.user_info.nickname
27670
+ }), props.show_tags && props.show_tags.length > 0 && props.show_tags.map((tag, index) => {
28822
27671
  if (tag === "is_author") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28823
27672
  className: "inline-block px-6 py-3 ml-3 text-4xl rounded-full bg-surface text-muted",
28824
27673
  children: "作者"
@@ -28836,13 +27685,13 @@ var CommentItemComponent = ({ comment, isLast = false }) => {
28836
27685
  wordBreak: "break-word",
28837
27686
  overflowWrap: "break-word"
28838
27687
  },
28839
- children: renderXiaohongshuCommentRichText(comment.content)
27688
+ children: renderXiaohongshuCommentRichText(props.content)
28840
27689
  }),
28841
- comment.pictures && comment.pictures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27690
+ props.pictures && props.pictures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28842
27691
  className: "flex my-5 overflow-hidden shadow-md rounded-2xl w-[95%] flex-1",
28843
27692
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
28844
27693
  className: "object-contain w-full h-full rounded-2xl",
28845
- src: comment.pictures[0].url_default,
27694
+ src: props.pictures[0].url_default,
28846
27695
  alt: "评论图片"
28847
27696
  })
28848
27697
  }),
@@ -28853,17 +27702,17 @@ var CommentItemComponent = ({ comment, isLast = false }) => {
28853
27702
  children: [
28854
27703
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28855
27704
  className: "text-[45px]",
28856
- children: formatXiaohongshuCommentTime(comment.create_time)
27705
+ children: formatXiaohongshuCommentTime(props.create_time)
28857
27706
  }),
28858
27707
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28859
27708
  className: "text-[45px]",
28860
- children: comment.ip_location
27709
+ children: props.ip_location
28861
27710
  }),
28862
- parseInt(comment.sub_comment_count) > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
27711
+ parseInt(props.sub_comment_count) > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
28863
27712
  className: "text-[40px] text-foreground/70",
28864
27713
  children: [
28865
27714
  "共",
28866
- comment.sub_comment_count,
27715
+ props.sub_comment_count,
28867
27716
  "条回复"
28868
27717
  ]
28869
27718
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -28877,10 +27726,10 @@ var CommentItemComponent = ({ comment, isLast = false }) => {
28877
27726
  className: "flex items-center space-x-2 transition-colors cursor-pointer",
28878
27727
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Heart, {
28879
27728
  size: 60,
28880
- className: comment.liked ? "text-red-500 fill-current" : "text-muted"
27729
+ className: props.liked ? "text-red-500 fill-current" : "text-muted"
28881
27730
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28882
27731
  className: "text-[50px] select-text",
28883
- children: formatXiaohongshuLikeCount(comment.like_count)
27732
+ children: formatXiaohongshuLikeCount(props.like_count)
28884
27733
  })]
28885
27734
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28886
27735
  className: "flex items-center transition-colors cursor-pointer",
@@ -28891,10 +27740,10 @@ var CommentItemComponent = ({ comment, isLast = false }) => {
28891
27740
  })]
28892
27741
  })]
28893
27742
  }),
28894
- comment.sub_comments && comment.sub_comments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27743
+ props.sub_comments && props.sub_comments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28895
27744
  className: "pl-6 mt-6",
28896
- children: comment.sub_comments.map((subComment, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28897
- className: `py-4 ${index !== comment.sub_comments.length - 1 ? "border-b border-divider" : ""}`,
27745
+ children: props.sub_comments.map((subComment, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27746
+ className: `py-4 ${index !== props.sub_comments.length - 1 ? "border-b border-divider" : ""}`,
28898
27747
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28899
27748
  className: "flex items-start space-x-4",
28900
27749
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
@@ -28963,18 +27812,13 @@ var XiaohongshuComment = import_react.memo((props) => {
28963
27812
  ...props,
28964
27813
  children: [
28965
27814
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-30" }),
28966
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NoteInfoHeader, {
28967
- type: props.data.Type,
28968
- commentLength: props.data.CommentLength,
28969
- imageLength: props.data.ImageLength,
28970
- qrCodeDataUrl: props.qrCodeDataUrl
28971
- }),
27815
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NoteInfoHeader, { ...props.data }),
28972
27816
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28973
27817
  className: "overflow-auto mx-20 max-w-full",
28974
27818
  children: props.data.CommentsData.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28975
27819
  className: "divide-y divide-divider",
28976
27820
  children: props.data.CommentsData.map((comment, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentItemComponent, {
28977
- comment,
27821
+ ...comment,
28978
27822
  isLast: index === props.data.CommentsData.length - 1
28979
27823
  }, comment.id))
28980
27824
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -30507,6 +29351,7 @@ var SSRRender = class {
30507
29351
  async render(request) {
30508
29352
  try {
30509
29353
  logger$1.debug("[SSR] 开始渲染组件,预设模板:", `${logger$1.yellow(`${request.templateType}/`)}${request.templateName}`);
29354
+ const startTime = Date.now();
30510
29355
  const ctx = {
30511
29356
  request,
30512
29357
  outputDir: this.outputDir,
@@ -30529,6 +29374,8 @@ var SSRRender = class {
30529
29374
  const fullHtml = this.htmlWrapper.wrapContent(ctx.state.html ?? htmlContent, filePath, request.data.useDarkTheme ?? false);
30530
29375
  fs.writeFileSync(filePath, fullHtml, "utf-8");
30531
29376
  if (process.env.NODE_ENV === "development") DevDataManager.saveRenderData(request.templateType, request.templateName, buildDevPreviewPayload(request.data, ctx.state.props));
29377
+ const endTime = Date.now();
29378
+ logger$1.debug(`[SSR] ${logger$1.yellow(`${request.templateType}/`)}${request.templateName} Done! ${endTime - startTime >= 1e3 ? logger$1.green(`${((endTime - startTime) / 1e3).toFixed(2)} s`) : logger$1.green(`${endTime - startTime} ms`)}`);
30532
29379
  return {
30533
29380
  success: true,
30534
29381
  htmlPath: filePath
@@ -30723,114 +29570,12 @@ var isSemverGreater = (remote, local) => {
30723
29570
  };
30724
29571
  //#endregion
30725
29572
  //#region src/module/utils/Render/plugins.ts
30726
- var import_qr_code_styling = /* @__PURE__ */ __toESM(require_qr_code_styling(), 1);
30727
- /**
30728
- * 创建 DOMPurify 实例
30729
- * 使用 happy-dom 的 Window 来创建隔离的 DOM 环境
30730
- */
30731
- var createDomPurify = () => {
30732
- return purify(new Window());
30733
- };
30734
- /**
30735
- * 对值进行消毒处理
30736
- * 如果是字符串则进行 HTML 消毒
30737
- * 如果是数组则递归处理每个元素
30738
- * 如果是对象则递归处理每个属性值
30739
- * 其他类型直接返回原值
30740
- * @param value 需要消毒的值
30741
- * @returns 消毒后的值
30742
- */
30743
- var sanitizeValue = (value) => {
30744
- const domPurify = createDomPurify();
30745
- if (typeof value === "string") return domPurify.sanitize(value);
30746
- if (Array.isArray(value)) return value.map((item) => sanitizeValue(item));
30747
- if (value && typeof value === "object") {
30748
- const output = {};
30749
- for (const [key, item] of Object.entries(value)) output[key] = sanitizeValue(item);
30750
- return output;
30751
- }
30752
- return value;
30753
- };
30754
- /**
30755
- * 对渲染数据进行消毒处理,防止 XSS 攻击。
30756
- * 在渲染前调用,确保数据安全。
30757
- */
30758
- var createSanitizeContentPlugin = () => {
30759
- return {
30760
- name: "数据消毒",
30761
- enforce: "pre",
30762
- beforeRender(ctx) {
30763
- ctx.request.data = sanitizeValue(ctx.request.data);
30764
- ctx.state.props = sanitizeValue(ctx.state.props);
30765
- }
30766
- };
30767
- };
30768
- /**
30769
- * 二维码插件工厂
30770
- * 为指定字段生成二维码数据 URL
30771
- * @param options 插件配置选项
30772
- * @returns 二维码插件实例
30773
- */
30774
- var createQrCodePlugin = () => {
30775
- return {
30776
- name: "生成二维码",
30777
- enforce: "pre",
30778
- async beforeRender(ctx) {
30779
- const data = ctx.request.data || {};
30780
- const useDarkTheme = Boolean(data.useDarkTheme);
30781
- const toDataUrl = async (url) => {
30782
- const buffer = await new import_qr_code_styling.default({
30783
- jsdom: Window,
30784
- type: "svg",
30785
- shape: "square",
30786
- width: 2e3,
30787
- height: 2e3,
30788
- data: url,
30789
- margin: 0,
30790
- qrOptions: {
30791
- typeNumber: 0,
30792
- mode: "Byte",
30793
- errorCorrectionLevel: "L"
30794
- },
30795
- imageOptions: {
30796
- hideBackgroundDots: false,
30797
- imageSize: .4,
30798
- margin: 0
30799
- },
30800
- dotsOptions: {
30801
- type: "rounded",
30802
- color: useDarkTheme ? "#C3C3C3" : "#3A3A3A",
30803
- roundSize: false
30804
- },
30805
- backgroundOptions: { color: "transparent" },
30806
- cornersSquareOptions: {
30807
- type: "extra-rounded",
30808
- color: useDarkTheme ? "#C3C3C3" : "#3A3A3A"
30809
- },
30810
- cornersDotOptions: { color: useDarkTheme ? "#C3C3C3" : "#3A3A3A" }
30811
- }).getRawData("svg");
30812
- if (!buffer) throw new Error("Failed to generate QR code");
30813
- return `data:image/svg+xml;base64,${buffer.toString("base64")}`;
30814
- };
30815
- const props = ctx.state.props || {};
30816
- if (!props.qrCodes) props.qrCodes = {};
30817
- if (!props.qrCodeDataUrl) props.qrCodeDataUrl = void 0;
30818
- if (typeof data.share_url === "string" && data.share_url.length > 0) {
30819
- const dataUrl = await toDataUrl(data.share_url);
30820
- const qrCodes = props.qrCodes;
30821
- qrCodes.share_url = dataUrl;
30822
- if (!props.qrCodeDataUrl) props.qrCodeDataUrl = dataUrl;
30823
- }
30824
- ctx.state.props = props;
30825
- }
30826
- };
30827
- };
30828
29573
  var clamp = (value, min, max) => {
30829
29574
  return Math.min(max, Math.max(min, value));
30830
29575
  };
30831
29576
  var buildProxyImageUrl = (url) => {
30832
29577
  if (!url || !url.startsWith("http")) return url;
30833
- return `https://images.weserv.nl/?url=${encodeURIComponent(url)}&w=96&h=96&fit=cover&output=jpg`;
29578
+ return `https://images.weserv.nl/?url=${encodeURIComponent(url)}&w=96&h=96&fit=cover&output=png`;
30834
29579
  };
30835
29580
  var mixRgb = (a, b, weight) => {
30836
29581
  const w = clamp(weight, 0, 1);
@@ -30908,20 +29653,80 @@ var tuneRgb = (rgb, saturationMin, lightnessTarget) => {
30908
29653
  const { h, s } = rgbToHsl(rgb);
30909
29654
  return hslToRgb(h, Math.max(s, saturationMin), clamp(lightnessTarget, 0, 1));
30910
29655
  };
30911
- var decodeImageToPixels = (buffer, contentType) => {
30912
- if (contentType.includes("png")) {
30913
- const decoded = import_png.PNG.sync.read(buffer);
30914
- return {
30915
- data: decoded.data,
30916
- width: decoded.width,
30917
- height: decoded.height
30918
- };
29656
+ var decodePngToPixels = (buffer) => {
29657
+ if (buffer[0] !== 137 || buffer[1] !== 80) return null;
29658
+ let offset = 8;
29659
+ let width = 0;
29660
+ let height = 0;
29661
+ let bitDepth = 0;
29662
+ let colorType = 0;
29663
+ const idatChunks = [];
29664
+ while (offset < buffer.length) {
29665
+ const length = buffer.readUInt32BE(offset);
29666
+ const type = buffer.toString("ascii", offset + 4, offset + 8);
29667
+ const chunkData = buffer.subarray(offset + 8, offset + 8 + length);
29668
+ if (type === "IHDR") {
29669
+ width = chunkData.readUInt32BE(0);
29670
+ height = chunkData.readUInt32BE(4);
29671
+ bitDepth = chunkData[8];
29672
+ colorType = chunkData[9];
29673
+ } else if (type === "IDAT") idatChunks.push(chunkData);
29674
+ else if (type === "IEND") break;
29675
+ offset += 12 + length;
29676
+ }
29677
+ if (!width || !height || bitDepth !== 8) return null;
29678
+ const channels = colorType === 6 ? 4 : colorType === 2 ? 3 : 0;
29679
+ if (!channels) return null;
29680
+ const raw = inflateSync(Buffer.concat(idatChunks));
29681
+ const stride = width * channels;
29682
+ const pixels = Buffer.alloc(width * height * 4);
29683
+ const prevRow = Buffer.alloc(stride);
29684
+ let rawOffset = 0;
29685
+ for (let y = 0; y < height; y++) {
29686
+ const filter = raw[rawOffset++];
29687
+ const curRow = Buffer.alloc(stride);
29688
+ for (let x = 0; x < stride; x++) {
29689
+ const val = raw[rawOffset++];
29690
+ const a = x >= channels ? curRow[x - channels] : 0;
29691
+ const b = prevRow[x];
29692
+ const c = x >= channels ? prevRow[x - channels] : 0;
29693
+ switch (filter) {
29694
+ case 0:
29695
+ curRow[x] = val;
29696
+ break;
29697
+ case 1:
29698
+ curRow[x] = val + a & 255;
29699
+ break;
29700
+ case 2:
29701
+ curRow[x] = val + b & 255;
29702
+ break;
29703
+ case 3:
29704
+ curRow[x] = val + (a + b >> 1) & 255;
29705
+ break;
29706
+ case 4: {
29707
+ const p = a + b - c;
29708
+ const pa = Math.abs(p - a);
29709
+ const pb = Math.abs(p - b);
29710
+ const pc = Math.abs(p - c);
29711
+ curRow[x] = val + (pa <= pb && pa <= pc ? a : pb <= pc ? b : c) & 255;
29712
+ break;
29713
+ }
29714
+ }
29715
+ }
29716
+ for (let x = 0; x < width; x++) {
29717
+ const pi = (y * width + x) * 4;
29718
+ const ci = x * channels;
29719
+ pixels[pi] = curRow[ci];
29720
+ pixels[pi + 1] = curRow[ci + 1];
29721
+ pixels[pi + 2] = curRow[ci + 2];
29722
+ pixels[pi + 3] = channels === 4 ? curRow[ci + 3] : 255;
29723
+ }
29724
+ curRow.copy(prevRow);
30919
29725
  }
30920
- const decoded = import_jpeg_js.default.decode(buffer, { useTArray: true });
30921
29726
  return {
30922
- data: decoded.data,
30923
- width: decoded.width,
30924
- height: decoded.height
29727
+ data: pixels,
29728
+ width,
29729
+ height
30925
29730
  };
30926
29731
  };
30927
29732
  var createPosterPalette = (seed, isDark) => {
@@ -30956,8 +29761,10 @@ var createPosterPalette = (seed, isDark) => {
30956
29761
  coverShade: isDark ? "rgba(0, 0, 0, 0.42)" : "rgba(10, 24, 32, 0.34)"
30957
29762
  };
30958
29763
  };
30959
- var extractPosterPaletteSeedFromBuffer = (buffer, contentType) => {
30960
- const { data } = decodeImageToPixels(buffer, contentType);
29764
+ var extractPosterPaletteSeedFromBuffer = (buffer) => {
29765
+ const decoded = decodePngToPixels(buffer);
29766
+ if (!decoded) return null;
29767
+ const { data } = decoded;
30961
29768
  let weightedR = 0;
30962
29769
  let weightedG = 0;
30963
29770
  let weightedB = 0;
@@ -31012,9 +29819,11 @@ var createPosterPalettePlugin = () => {
31012
29819
  const useDarkTheme = Boolean(ctx.request.useDarkTheme ?? data.useDarkTheme);
31013
29820
  const candidates = [buildProxyImageUrl(imageUrl), imageUrl];
31014
29821
  for (const candidate of candidates) try {
31015
- const response = await fetch(candidate, { headers: { accept: "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" } });
31016
- if (!response.ok) continue;
31017
- const paletteSeed = extractPosterPaletteSeedFromBuffer(Buffer.from(await response.arrayBuffer()), response.headers.get("content-type") || "image/jpeg");
29822
+ const response = await axios.get(candidate, {
29823
+ responseType: "arraybuffer",
29824
+ headers: { accept: "image/png,image/apng,image/*,*/*;q=0.8" }
29825
+ });
29826
+ const paletteSeed = extractPosterPaletteSeedFromBuffer(Buffer.from(response.data));
31018
29827
  if (paletteSeed) {
31019
29828
  const lightPalette = createPosterPalette(paletteSeed, false);
31020
29829
  const darkPalette = createPosterPalette(paletteSeed, true);
@@ -31072,9 +29881,10 @@ var embedWatermark = (pngBytes, watermarkText) => {
31072
29881
  * @template P 渲染路径,必须是有效的动态路径
31073
29882
  * @param path 渲染路径,格式为 "平台/组件ID" 或 "平台/分类/组件ID"
31074
29883
  * @param data 渲染数据,类型根据路径自动推断
29884
+ * @options 渲染选项
31075
29885
  * @returns 渲染结果图片元素数组的 Promise
31076
29886
  */
31077
- var Render = async (event, path$1, data) => {
29887
+ var Render = async (event, path$1, data, options) => {
31078
29888
  const pathParts = path$1.split("/");
31079
29889
  let templateType;
31080
29890
  let templateName;
@@ -31117,11 +29927,7 @@ var Render = async (event, path$1, data) => {
31117
29927
  }
31118
29928
  },
31119
29929
  outputDir,
31120
- plugins: [
31121
- createQrCodePlugin(),
31122
- createPosterPalettePlugin(),
31123
- createSanitizeContentPlugin()
31124
- ]
29930
+ plugins: [createPosterPalettePlugin()]
31125
29931
  }).then((res) => {
31126
29932
  if (!res.success || !res.htmlPath) throw new Error(res.error);
31127
29933
  return res;
@@ -31132,7 +29938,7 @@ var Render = async (event, path$1, data) => {
31132
29938
  const renderResult = await render.render({
31133
29939
  name: `${Root.pluginName}/${templateType}`,
31134
29940
  file: result.htmlPath,
31135
- multiPage: Config.app.multiPageRender && event.bot.adapter.name !== "QQ Official Bot" ? Config.app.multiPageHeight : false,
29941
+ multiPage: Config.app.multiPageRender && event.bot.adapter.protocol !== "qqbot" ? Config.app.multiPageHeight : false,
31136
29942
  selector: "#container",
31137
29943
  fullPage: false,
31138
29944
  type: "png",
@@ -31147,7 +29953,9 @@ var Render = async (event, path$1, data) => {
31147
29953
  const imageStats = [];
31148
29954
  for (const image of images) {
31149
29955
  const imageBuffer = Buffer.from(image, "base64");
31150
- const finalImageBuffer = embedWatermark(imageBuffer, watermarkText) ?? imageBuffer;
29956
+ let finalImageBuffer;
29957
+ if (options?.skipWatermark) finalImageBuffer = imageBuffer;
29958
+ else finalImageBuffer = embedWatermark(imageBuffer, watermarkText) ?? imageBuffer;
31151
29959
  const metadata = getImageMetadata(finalImageBuffer);
31152
29960
  const dimensions = metadata.width && metadata.height ? `${metadata.width}x${metadata.height}` : "unknown";
31153
29961
  imageStats.push({
@@ -31183,6 +29991,24 @@ var getImageMetadata = (buffer) => {
31183
29991
  };
31184
29992
  return {};
31185
29993
  };
29994
+ /**
29995
+ * 对已渲染的图片元素数组应用水印
29996
+ * 用于推送场景:渲染一次,按目标群逐个嵌入不同 bot 的水印
29997
+ */
29998
+ var applyWatermarkToImages = (images, event) => {
29999
+ if (Config.app.RemoveWatermark) return images;
30000
+ const watermarkText = JSON.stringify({
30001
+ a: Date.now(),
30002
+ b: `Generated by karin-plugin-kkk v${Root.pluginVersion}, with source code open-sourced under the GPL-3.0 license`,
30003
+ c: `Sent by ${event?.bot?.account.selfId ?? "unknown"}|${event?.bot?.account.name ?? "unknown"}`
30004
+ });
30005
+ return images.map((img) => {
30006
+ const base64Data = img.file.replace(/^base64:\/\//, "");
30007
+ const buffer = Buffer.from(base64Data, "base64");
30008
+ const watermarked = embedWatermark(buffer, watermarkText) ?? buffer;
30009
+ return segment.image("base64://" + watermarked.toString("base64"));
30010
+ });
30011
+ };
31186
30012
  //#endregion
31187
30013
  //#region src/module/db/bilibili.ts
31188
30014
  /** 数据库操作类 */
@@ -33859,29 +32685,12 @@ var DouyinWeb = (all) => {
33859
32685
  }],
33860
32686
  isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33861
32687
  }),
33862
- components.input.number("subCommentDepth", {
33863
- label: "次级评论解析深度",
33864
- description: "次级评论解析深度",
33865
- defaultValue: all.douyin.subCommentDepth.toString(),
33866
- rules: [{
33867
- min: 1,
33868
- max: 6,
33869
- error: "嵌套深度最高只有 6 层,超过 6 层的评论会被强制截断"
33870
- }],
33871
- isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33872
- }),
33873
32688
  components.switch.create("commentImageCollection", {
33874
32689
  label: "是否收集评论区的图片",
33875
32690
  description: "开启后将收集评论区的图片,以合并转发的形式返回",
33876
32691
  defaultSelected: all.douyin.commentImageCollection,
33877
32692
  isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33878
32693
  }),
33879
- components.switch.create("realCommentCount", {
33880
- label: "显示真实评论数量",
33881
- description: "评论图是否显示真实评论数量,关闭则显示解析到的评论数量",
33882
- defaultSelected: all.douyin.realCommentCount,
33883
- isDisabled: !all.douyin.sendContent.includes("comment") || !all.douyin.switch
33884
- }),
33885
32694
  components.divider.create("divider-dy-render", {
33886
32695
  description: "渲染与画质设置",
33887
32696
  descPosition: 20
@@ -36368,60 +35177,71 @@ var buildBilibiliDynamicRichText = (text, richTextNodes) => {
36368
35177
  }
36369
35178
  return createRichTextDocument(nodes, { platform: "bilibili" });
36370
35179
  }
36371
- const findInText = (searchText, startPos) => {
36372
- return text.indexOf(searchText, startPos);
36373
- };
36374
- let currentPos = 0;
36375
- for (const tag of richTextNodes) {
35180
+ const buildNodesFromTag = (tag) => {
36376
35181
  const matchText = tag.orig_text || tag.text || "";
36377
- if (!matchText) continue;
36378
- const matchPos = findInText(matchText, currentPos);
36379
- if (matchPos === -1) continue;
36380
- if (matchPos > currentPos) {
36381
- const parts = text.slice(currentPos, matchPos).split(/(\r?\n)/);
36382
- for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
36383
- else if (part) nodes.push(...parseTextWithUrls(part));
36384
- }
35182
+ if (!matchText) return [];
35183
+ const result = [];
36385
35184
  switch (tag.type) {
36386
35185
  case "RICH_TEXT_NODE_TYPE_TEXT": {
36387
35186
  const parts = matchText.split(/(\r?\n)/);
36388
- for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
36389
- else if (part) nodes.push(...parseTextWithUrls(part));
35187
+ for (const part of parts) if (part === "\r\n" || part === "\n") result.push(createLineBreakNode());
35188
+ else if (part) result.push(...parseTextWithUrls(part));
36390
35189
  break;
36391
35190
  }
36392
35191
  case "topic":
36393
35192
  case "RICH_TEXT_NODE_TYPE_TOPIC":
36394
- nodes.push(createTopicNode(matchText));
35193
+ result.push(createTopicNode(matchText));
36395
35194
  break;
36396
35195
  case "RICH_TEXT_NODE_TYPE_AT":
36397
- nodes.push(createAtNode(matchText));
35196
+ result.push(createAtNode(matchText));
36398
35197
  break;
36399
35198
  case "RICH_TEXT_NODE_TYPE_LOTTERY":
36400
- nodes.push(createLotteryNode(matchText));
35199
+ result.push(createLotteryNode(matchText));
36401
35200
  break;
36402
35201
  case "RICH_TEXT_NODE_TYPE_WEB":
36403
- nodes.push(createWebLinkNode(tag.text || matchText, matchText));
35202
+ result.push(createWebLinkNode(tag.text || matchText, matchText));
36404
35203
  break;
36405
35204
  case "RICH_TEXT_NODE_TYPE_EMOJI": {
36406
35205
  const emojiUrl = tag.emoji?.gif_url || tag.emoji?.icon_url;
36407
35206
  const scale = tag.emoji?.size === 2 || tag.emoji?.size === 3 ? 2 : void 0;
36408
- if (emojiUrl) nodes.push(createEmojiNode(matchText, emojiUrl, { scale }));
36409
- else nodes.push(createTextNode(matchText));
35207
+ if (emojiUrl) result.push(createEmojiNode(matchText, emojiUrl, { scale }));
35208
+ else result.push(createTextNode(matchText));
36410
35209
  break;
36411
35210
  }
36412
35211
  case "RICH_TEXT_NODE_TYPE_VOTE":
36413
- nodes.push(createVoteNode(tag.text || matchText));
35212
+ result.push(createVoteNode(tag.text || matchText));
36414
35213
  break;
36415
35214
  case "RICH_TEXT_NODE_TYPE_VIEW_PICTURE":
36416
- nodes.push(createViewPictureNode(matchText));
35215
+ result.push(createViewPictureNode(matchText));
36417
35216
  break;
36418
35217
  default: {
36419
35218
  const parts = matchText.split(/(\r?\n)/);
36420
- for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
36421
- else if (part) nodes.push(...parseTextWithUrls(part));
35219
+ for (const part of parts) if (part === "\r\n" || part === "\n") result.push(createLineBreakNode());
35220
+ else if (part) result.push(...parseTextWithUrls(part));
36422
35221
  break;
36423
35222
  }
36424
35223
  }
35224
+ return result;
35225
+ };
35226
+ if (!text) {
35227
+ for (const tag of richTextNodes) nodes.push(...buildNodesFromTag(tag));
35228
+ return createRichTextDocument(nodes, { platform: "bilibili" });
35229
+ }
35230
+ const findInText = (searchText, startPos) => {
35231
+ return text.indexOf(searchText, startPos);
35232
+ };
35233
+ let currentPos = 0;
35234
+ for (const tag of richTextNodes) {
35235
+ const matchText = tag.orig_text || tag.text || "";
35236
+ if (!matchText) continue;
35237
+ const matchPos = findInText(matchText, currentPos);
35238
+ if (matchPos === -1) continue;
35239
+ if (matchPos > currentPos) {
35240
+ const parts = text.slice(currentPos, matchPos).split(/(\r?\n)/);
35241
+ for (const part of parts) if (part === "\r\n" || part === "\n") nodes.push(createLineBreakNode());
35242
+ else if (part) nodes.push(...parseTextWithUrls(part));
35243
+ }
35244
+ nodes.push(...buildNodesFromTag(tag));
36425
35245
  currentPos = matchPos + matchText.length;
36426
35246
  }
36427
35247
  if (currentPos < text.length) {
@@ -36514,10 +35334,15 @@ var parseOpusToRichText = (opus, useDarkTheme) => {
36514
35334
  flushList();
36515
35335
  const pics = paragraph.pic?.pics;
36516
35336
  if (Array.isArray(pics)) {
36517
- for (const pic of pics) if (pic.url) nodes.push(createImageNode(fixImageUrl(pic.url), pic.alt || "专栏图片"));
35337
+ for (const pic of pics) if (pic.url) nodes.push(createImageNode(fixImageUrl(pic.url), pic.alt || "专栏图片", pic.comment));
36518
35338
  }
36519
35339
  continue;
36520
35340
  }
35341
+ if (paraType === 3) {
35342
+ flushList();
35343
+ nodes.push(createHorizontalRuleNode());
35344
+ continue;
35345
+ }
36521
35346
  if (paraType === 7) {
36522
35347
  flushList();
36523
35348
  const linkCard = paragraph.link_card;
@@ -36544,6 +35369,7 @@ var parseOpusToRichText = (opus, useDarkTheme) => {
36544
35369
  if (![
36545
35370
  1,
36546
35371
  2,
35372
+ 3,
36547
35373
  4,
36548
35374
  7,
36549
35375
  8,
@@ -37067,7 +35893,7 @@ var Bilibili = class extends Base {
37067
35893
  outputPath,
37068
35894
  loopCount,
37069
35895
  staticImagePath: staticImg.filepath,
37070
- transitionEnabled: loopCount > 1
35896
+ transitionEnabled: true
37071
35897
  })).success) {
37072
35898
  const filePath = Common.tempDri.video + `tmp_${Date.now()}.mp4`;
37073
35899
  fs.renameSync(outputPath, filePath);
@@ -37131,15 +35957,18 @@ var Bilibili = class extends Base {
37131
35957
  for (const item of temp) await Common.removeFile(item.filepath, true);
37132
35958
  }
37133
35959
  }
37134
- if ("topic" in dynamicInfo.data.data.item.modules.module_dynamic && dynamicInfo.data.data.item.modules.module_dynamic.topic !== null) {
37135
- const name = dynamicInfo.data.data.item.modules.module_dynamic.topic.name;
37136
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.rich_text_nodes.unshift({
35960
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
35961
+ if (md.topic) {
35962
+ const { name } = md.topic;
35963
+ const summary = md.major.opus.summary;
35964
+ summary.rich_text_nodes ??= [];
35965
+ summary.rich_text_nodes.unshift({
37137
35966
  orig_text: name,
37138
35967
  jump_url: "",
37139
35968
  text: name,
37140
35969
  type: "topic"
37141
35970
  });
37142
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.text = `${name}\n` + dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.text;
35971
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
37143
35972
  }
37144
35973
  this.e.reply(await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_DRAW", {
37145
35974
  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 })),
@@ -37159,23 +35988,27 @@ var Bilibili = class extends Base {
37159
35988
  following_count: Count(userProfileData.data.data.card.attention),
37160
35989
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
37161
35990
  render_time: TimeFormatter.now(),
37162
- dynamicTYPE: "图文动态",
35991
+ dynamicTYPE: "图文动态解析",
37163
35992
  imageLayout: Config.bilibili.imageLayout,
37164
- additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional)
35993
+ additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional),
35994
+ dynamic_id: dynamicInfo.data.data.item.id_str
37165
35995
  }));
37166
35996
  break;
37167
35997
  }
37168
35998
  /** 纯文 */
37169
35999
  case DynamicType.WORD: {
37170
- if ("topic" in dynamicInfo.data.data.item.modules.module_dynamic && dynamicInfo.data.data.item.modules.module_dynamic.topic !== null) {
37171
- const name = dynamicInfo.data.data.item.modules.module_dynamic.topic.name;
37172
- dynamicInfo.data.data.item.modules.module_dynamic.major.opus.summary.rich_text_nodes.unshift({
36000
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36001
+ if (md.topic) {
36002
+ const { name } = md.topic;
36003
+ const summary = md.major.opus.summary;
36004
+ summary.rich_text_nodes ??= [];
36005
+ summary.rich_text_nodes.unshift({
37173
36006
  orig_text: name,
37174
36007
  jump_url: "",
37175
36008
  text: name,
37176
36009
  type: "topic"
37177
36010
  });
37178
- 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;
36011
+ summary.text = summary.text ? `${name}\n\n${summary.text}` : name;
37179
36012
  }
37180
36013
  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 ?? []);
37181
36014
  this.e.reply(await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_WORD", {
@@ -37194,22 +36027,26 @@ var Bilibili = class extends Base {
37194
36027
  following_count: Count(userProfileData.data.data.card.attention),
37195
36028
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
37196
36029
  render_time: TimeFormatter.now(),
37197
- dynamicTYPE: "纯文动态",
37198
- additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional)
36030
+ dynamicTYPE: "纯文动态解析",
36031
+ additional: parseAdditionalCard(dynamicInfo.data.data.item.modules.module_dynamic.additional),
36032
+ dynamic_id: dynamicInfo.data.data.item.id_str
37199
36033
  }));
37200
36034
  break;
37201
36035
  }
37202
36036
  /** 转发动态 */
37203
36037
  case DynamicType.FORWARD: {
37204
- if ("topic" in dynamicInfo.data.data.item.modules.module_dynamic && dynamicInfo.data.data.item.modules.module_dynamic.topic !== null) {
37205
- const name = dynamicInfo.data.data.item.modules.module_dynamic.topic.name;
37206
- dynamicInfo.data.data.item.modules.module_dynamic.desc.rich_text_nodes.unshift({
36038
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36039
+ if (md.topic) {
36040
+ const { name } = md.topic;
36041
+ const desc = md.desc;
36042
+ desc.rich_text_nodes ??= [];
36043
+ desc.rich_text_nodes.unshift({
37207
36044
  orig_text: name,
37208
36045
  jump_url: "",
37209
36046
  text: name,
37210
36047
  type: "topic"
37211
36048
  });
37212
- dynamicInfo.data.data.item.modules.module_dynamic.desc.text = `${name}\n\n` + dynamicInfo.data.data.item.modules.module_dynamic.desc.text;
36049
+ desc.text = desc.text ? `${name}\n\n${desc.text}` : name;
37213
36050
  }
37214
36051
  const text = buildBilibiliDynamicRichText(dynamicInfo.data.data.item.modules.module_dynamic.desc.text, dynamicInfo.data.data.item.modules.module_dynamic.desc.rich_text_nodes);
37215
36052
  const imgList = [];
@@ -37232,13 +36069,14 @@ var Bilibili = class extends Base {
37232
36069
  frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image
37233
36070
  };
37234
36071
  break;
37235
- case DynamicType.DRAW:
37236
- if ("topic" in dynamicInfo.data.data.item.orig.modules.module_dynamic && dynamicInfo.data.data.item.orig.modules.module_dynamic.topic !== null) {
37237
- const name = dynamicInfo.data.data.item.orig.modules.module_dynamic.topic.name;
37238
- const origSummary = dynamicInfo.data.data.item.orig.modules.module_dynamic.major?.opus?.summary;
37239
- if (origSummary) {
37240
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
37241
- origSummary.rich_text_nodes.unshift({
36072
+ case DynamicType.DRAW: {
36073
+ const origMd = dynamicInfo.data.data.item.orig.modules.module_dynamic;
36074
+ if (origMd.topic) {
36075
+ const { name } = origMd.topic;
36076
+ const summary = origMd.major?.opus?.summary;
36077
+ if (summary) {
36078
+ summary.rich_text_nodes ??= [];
36079
+ summary.rich_text_nodes.unshift({
37242
36080
  orig_text: name,
37243
36081
  jump_url: "",
37244
36082
  text: name,
@@ -37246,7 +36084,7 @@ var Bilibili = class extends Base {
37246
36084
  rid: "",
37247
36085
  style: { "1114514": "1919810" }
37248
36086
  });
37249
- origSummary.text = `${name}\n` + (origSummary.text || "");
36087
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
37250
36088
  }
37251
36089
  }
37252
36090
  data = {
@@ -37260,19 +36098,21 @@ var Bilibili = class extends Base {
37260
36098
  frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image
37261
36099
  };
37262
36100
  break;
37263
- case DynamicType.WORD:
37264
- if ("topic" in dynamicInfo.data.data.item.orig.modules.module_dynamic && dynamicInfo.data.data.item.orig.modules.module_dynamic.topic !== null) {
37265
- const name = dynamicInfo.data.data.item.orig.modules.module_dynamic.topic.name;
37266
- const origSummary = dynamicInfo.data.data.item.orig.modules.module_dynamic.major?.opus?.summary;
37267
- if (origSummary) {
37268
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
37269
- origSummary.rich_text_nodes.unshift({
36101
+ }
36102
+ case DynamicType.WORD: {
36103
+ const origMd = dynamicInfo.data.data.item.orig.modules.module_dynamic;
36104
+ if (origMd.topic) {
36105
+ const { name } = origMd.topic;
36106
+ const summary = origMd.major?.opus?.summary;
36107
+ if (summary) {
36108
+ summary.rich_text_nodes ??= [];
36109
+ summary.rich_text_nodes.unshift({
37270
36110
  orig_text: name,
37271
36111
  jump_url: "",
37272
36112
  text: name,
37273
36113
  type: "topic"
37274
36114
  });
37275
- origSummary.text = `${name}\n` + (origSummary.text || "");
36115
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
37276
36116
  }
37277
36117
  }
37278
36118
  data = {
@@ -37281,9 +36121,11 @@ var Bilibili = class extends Base {
37281
36121
  avatar_url: dynamicInfo.data.data.item.orig.modules.module_author.face,
37282
36122
  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),
37283
36123
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.orig.modules.module_author.decoration_card),
37284
- frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image
36124
+ frame: dynamicInfo.data.data.item.orig.modules.module_author.pendant.image,
36125
+ additional: parseAdditionalCard(dynamicInfo.data.data.item.orig.modules.module_dynamic.additional)
37285
36126
  };
37286
36127
  break;
36128
+ }
37287
36129
  case DynamicType.LIVE_RCMD: {
37288
36130
  const liveData = JSON.parse(dynamicInfo.data.data.item.orig.modules.module_dynamic.major.live_rcmd.content);
37289
36131
  data = {
@@ -37322,7 +36164,8 @@ var Bilibili = class extends Base {
37322
36164
  dynamicTYPE: "转发动态解析",
37323
36165
  decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
37324
36166
  render_time: TimeFormatter.now(),
37325
- original_content: { [dynamicInfo.data.data.item.orig.type]: data }
36167
+ original_content: { [dynamicInfo.data.data.item.orig.type]: data },
36168
+ dynamic_id: dynamicInfo.data.data.item.id_str
37326
36169
  }));
37327
36170
  break;
37328
36171
  }
@@ -37350,18 +36193,36 @@ var Bilibili = class extends Base {
37350
36193
  staff.unshift(currentUser);
37351
36194
  }
37352
36195
  }
36196
+ const md = dynamicInfo.data.data.item.modules.module_dynamic;
36197
+ if (md.topic) {
36198
+ const { name } = md.topic;
36199
+ md.desc ??= {
36200
+ rich_text_nodes: [],
36201
+ text: ""
36202
+ };
36203
+ md.desc.rich_text_nodes.unshift({
36204
+ orig_text: name,
36205
+ jump_url: "",
36206
+ text: name,
36207
+ type: "topic"
36208
+ });
36209
+ md.desc.text = md.desc.text ? `${name}\n\n${md.desc.text}` : name;
36210
+ }
36211
+ const dynamicText = buildBilibiliDynamicRichText(dynamicInfo.data.data.item.modules.module_dynamic.desc?.text ?? "", dynamicInfo.data.data.item.modules.module_dynamic.desc?.rich_text_nodes ?? []);
37353
36212
  img$1 = await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_AV", {
37354
36213
  image_url: INFODATA.data.data.pic,
37355
36214
  text: buildBilibiliDynamicRichText(INFODATA.data.data.title, []),
37356
36215
  desc: INFODATA.data.data.desc_v2?.length ? buildBilibiliVideoDescRichText(INFODATA.data.data.desc_v2) : buildBilibiliDynamicRichText(INFODATA.data.data.desc || "", []),
36216
+ dynamic_text: dynamicText,
37357
36217
  dianzan: Count(INFODATA.data.data.stat.like),
37358
36218
  pinglun: Count(INFODATA.data.data.stat.reply),
37359
36219
  share: Count(INFODATA.data.data.stat.share),
37360
36220
  view: Count(INFODATA.data.data.stat.view),
37361
36221
  coin: Count(INFODATA.data.data.stat.coin),
37362
36222
  duration_text: dynamicInfo.data.data.item.modules.module_dynamic.major.archive.duration_text,
37363
- create_time: TimeFormatter.toDateTime(INFODATA.data.data.ctime),
37364
- avatar_url: userProfileData.data.data.card.face,
36223
+ page_length: INFODATA.data.data.pages.length,
36224
+ create_time: TimeFormatter.toRelative(dynamicInfo.data.data.item.modules.module_author.pub_ts),
36225
+ avatar_url: dynamicInfo.data.data.item.modules.module_author.face,
37365
36226
  frame: dynamicInfo.data.data.item.modules.module_author.pendant.image,
37366
36227
  share_url: "https://www.bilibili.com/video/" + bvid,
37367
36228
  usernameMeta: getUsernameMetadata(userProfileData.data.data.card),
@@ -37369,8 +36230,9 @@ var Bilibili = class extends Base {
37369
36230
  user_shortid: userProfileData.data.data.card.mid,
37370
36231
  total_favorited: Count(userProfileData.data.data.like_num),
37371
36232
  following_count: Count(userProfileData.data.data.card.attention),
36233
+ decoration_card: generateDecorationCard(dynamicInfo.data.data.item.modules.module_author.decoration_card),
37372
36234
  render_time: TimeFormatter.now(),
37373
- dynamicTYPE: "视频动态",
36235
+ dynamicTYPE: "视频动态解析",
37374
36236
  dynamic_id: dynamicInfo.data.data.item.id_str,
37375
36237
  staff
37376
36238
  });
@@ -37395,7 +36257,7 @@ var Bilibili = class extends Base {
37395
36257
  create_time: TimeFormatter.toDateTime(dynamicInfo.data.data.item.modules.module_author.pub_ts),
37396
36258
  now_time: TimeFormatter.now(),
37397
36259
  share_url: "https://live.bilibili.com/" + liveInfo.live_play_info.room_id,
37398
- dynamicTYPE: "直播动态"
36260
+ dynamicTYPE: "直播动态解析"
37399
36261
  });
37400
36262
  this.e.reply(img$1);
37401
36263
  break;
@@ -37539,7 +36401,7 @@ var Bilibili = class extends Base {
37539
36401
  create_time: liveInfo.data.data.live_time === "-62170012800" ? "获取失败" : liveInfo.data.data.live_time,
37540
36402
  now_time: TimeFormatter.now(),
37541
36403
  share_url: "https://live.bilibili.com/" + liveInfo.data.data.room_id,
37542
- dynamicTYPE: "直播"
36404
+ dynamicTYPE: "直播动态解析"
37543
36405
  });
37544
36406
  this.e.reply(img);
37545
36407
  break;
@@ -38685,20 +37547,24 @@ var Bilibilipush = class extends Base {
38685
37547
  render_time: TimeFormatter.now(),
38686
37548
  imageLayout: Config.bilibili.imageLayout,
38687
37549
  additional: parseAdditionalCard(data[dynamicId].Dynamic_Data.modules.module_dynamic.additional),
38688
- dynamicTYPE: "图文动态推送"
38689
- });
37550
+ dynamicTYPE: "图文动态推送",
37551
+ dynamic_id: dynamicId
37552
+ }, { skipWatermark: true });
38690
37553
  break;
38691
37554
  /** 处理纯文动态 */
38692
37555
  case DynamicType.WORD: {
38693
37556
  if ("topic" in data[dynamicId].Dynamic_Data.orig.modules.module_dynamic && data[dynamicId].Dynamic_Data.modules.module_dynamic.topic !== null) {
38694
- const name = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.name;
38695
- data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.opus.summary.rich_text_nodes.unshift({
37557
+ const md = data[dynamicId].Dynamic_Data.modules.module_dynamic;
37558
+ const { name } = md.topic;
37559
+ const summary = md.major.opus.summary;
37560
+ summary.rich_text_nodes ??= [];
37561
+ summary.rich_text_nodes.unshift({
38696
37562
  orig_text: name,
38697
37563
  text: name,
38698
37564
  type: "topic",
38699
- rid: data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.id.toString()
37565
+ rid: md.topic.id.toString()
38700
37566
  });
38701
- 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;
37567
+ summary.text = summary.text ? `${name}\n\n${summary.text}` : name;
38702
37568
  }
38703
37569
  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 ?? []);
38704
37570
  img = await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_WORD", {
@@ -38718,8 +37584,9 @@ var Bilibilipush = class extends Base {
38718
37584
  decoration_card: generateDecorationCard(data[dynamicId].Dynamic_Data.modules.module_author.decoration_card),
38719
37585
  render_time: TimeFormatter.now(),
38720
37586
  additional: parseAdditionalCard(data[dynamicId].Dynamic_Data.modules.module_dynamic.additional),
38721
- dynamicTYPE: "纯文动态推送"
38722
- });
37587
+ dynamicTYPE: "纯文动态推送",
37588
+ dynamic_id: dynamicId
37589
+ }, { skipWatermark: true });
38723
37590
  break;
38724
37591
  }
38725
37592
  /** 处理视频动态 */
@@ -38751,16 +37618,34 @@ var Bilibilipush = class extends Base {
38751
37618
  staff.unshift(currentUser);
38752
37619
  }
38753
37620
  }
37621
+ const md = data[dynamicId].Dynamic_Data.modules.module_dynamic;
37622
+ if (md.topic) {
37623
+ const { name } = md.topic;
37624
+ md.desc ??= {
37625
+ rich_text_nodes: [],
37626
+ text: ""
37627
+ };
37628
+ md.desc.rich_text_nodes.unshift({
37629
+ orig_text: name,
37630
+ jump_url: "",
37631
+ text: name,
37632
+ type: "topic"
37633
+ });
37634
+ md.desc.text = md.desc.text ? `${name}\n\n${md.desc.text}` : name;
37635
+ }
37636
+ const dynamicText = buildBilibiliDynamicRichText(data[dynamicId].Dynamic_Data.modules.module_dynamic.desc?.text ?? "", data[dynamicId].Dynamic_Data.modules.module_dynamic.desc?.rich_text_nodes ?? []);
38754
37637
  img = await Render(this.e, "bilibili/dynamic/DYNAMIC_TYPE_AV", {
38755
37638
  image_url: INFODATA.data.data.pic,
38756
37639
  text: buildBilibiliDynamicRichText(INFODATA.data.data.title, []),
38757
37640
  desc: INFODATA.data.data.desc_v2?.length ? buildBilibiliVideoDescRichText(INFODATA.data.data.desc_v2) : buildBilibiliDynamicRichText(INFODATA.data.data.desc || "", []),
37641
+ dynamic_text: dynamicText,
38758
37642
  dianzan: Count(INFODATA.data.data.stat.like),
38759
37643
  pinglun: Count(INFODATA.data.data.stat.reply),
38760
37644
  share: Count(INFODATA.data.data.stat.share),
38761
37645
  view: Count(INFODATA.data.data.stat.view),
38762
37646
  coin: Count(INFODATA.data.data.stat.coin),
38763
37647
  duration_text: data[dynamicId].Dynamic_Data.modules.module_dynamic.major?.archive?.duration_text ?? "0:00",
37648
+ page_length: INFODATA.data.data.pages.length,
38764
37649
  create_time: TimeFormatter.toDateTime(data[dynamicId].Dynamic_Data.modules.module_author.pub_ts),
38765
37650
  avatar_url: userINFO.data.data.card.face,
38766
37651
  frame: data[dynamicId].Dynamic_Data.modules.module_author.pendant.image,
@@ -38774,7 +37659,7 @@ var Bilibilipush = class extends Base {
38774
37659
  dynamicTYPE: "视频动态推送",
38775
37660
  dynamic_id: dynamicId,
38776
37661
  staff
38777
- });
37662
+ }, { skipWatermark: true });
38778
37663
  }
38779
37664
  break;
38780
37665
  /** 处理直播动态 */
@@ -38792,20 +37677,23 @@ var Bilibilipush = class extends Base {
38792
37677
  now_time: TimeFormatter.now(),
38793
37678
  share_url: "https://live.bilibili.com/" + liveInfo.live_play_info.room_id,
38794
37679
  dynamicTYPE: "直播动态推送"
38795
- });
37680
+ }, { skipWatermark: true });
38796
37681
  break;
38797
37682
  }
38798
37683
  /** 处理转发动态 */
38799
37684
  case DynamicType.FORWARD: {
38800
- if ("topic" in data[dynamicId].Dynamic_Data.modules.module_dynamic && data[dynamicId].Dynamic_Data.modules.module_dynamic.topic !== null) {
38801
- const name = data[dynamicId].Dynamic_Data.modules.module_dynamic.topic.name;
38802
- data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.rich_text_nodes.unshift({
37685
+ const md = data[dynamicId].Dynamic_Data.modules.module_dynamic;
37686
+ if (md.topic) {
37687
+ const { name } = md.topic;
37688
+ const desc = md.desc;
37689
+ desc.rich_text_nodes ??= [];
37690
+ desc.rich_text_nodes.unshift({
38803
37691
  orig_text: name,
38804
37692
  jump_url: "",
38805
37693
  text: name,
38806
37694
  type: "topic"
38807
37695
  });
38808
- data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.text = `${name}\n\n` + data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.text;
37696
+ desc.text = desc.text ? `${name}\n\n${desc.text}` : name;
38809
37697
  }
38810
37698
  const text = buildBilibiliDynamicRichText(data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.text, data[dynamicId].Dynamic_Data.modules.module_dynamic.desc.rich_text_nodes);
38811
37699
  let param = {};
@@ -38831,21 +37719,22 @@ var Bilibilipush = class extends Base {
38831
37719
  frame: data[dynamicId].Dynamic_Data.orig.modules.module_author.pendant.image
38832
37720
  };
38833
37721
  break;
38834
- case DynamicType.DRAW:
38835
- if ("topic" in data[dynamicId].Dynamic_Data.orig.modules.module_dynamic && data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic !== null) {
38836
- const name = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.name;
38837
- const origSummary = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.major?.opus?.summary;
38838
- if (origSummary) {
38839
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
38840
- origSummary.rich_text_nodes.unshift({
37722
+ case DynamicType.DRAW: {
37723
+ const origMd = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic;
37724
+ if (origMd.topic) {
37725
+ const { name } = origMd.topic;
37726
+ const summary = origMd.major?.opus?.summary;
37727
+ if (summary) {
37728
+ summary.rich_text_nodes ??= [];
37729
+ summary.rich_text_nodes.unshift({
38841
37730
  orig_text: name,
38842
37731
  text: name,
38843
37732
  type: "topic",
38844
- rid: data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.id.toString(),
37733
+ rid: origMd.topic.id.toString(),
38845
37734
  jump_url: "114514",
38846
37735
  style: { "114514": "1919810" }
38847
37736
  });
38848
- origSummary.text = `${name}\n` + (origSummary.text || "");
37737
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
38849
37738
  }
38850
37739
  }
38851
37740
  param = {
@@ -38859,19 +37748,21 @@ var Bilibilipush = class extends Base {
38859
37748
  frame: data[dynamicId].Dynamic_Data.orig.modules.module_author.pendant.image
38860
37749
  };
38861
37750
  break;
38862
- case DynamicType.WORD:
38863
- if ("topic" in data[dynamicId].Dynamic_Data.orig.modules.module_dynamic && data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic !== null) {
38864
- const name = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.name;
38865
- const origSummary = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.major?.opus?.summary;
38866
- if (origSummary) {
38867
- if (!origSummary.rich_text_nodes) origSummary.rich_text_nodes = [];
38868
- origSummary.rich_text_nodes.unshift({
37751
+ }
37752
+ case DynamicType.WORD: {
37753
+ const origMd = data[dynamicId].Dynamic_Data.orig.modules.module_dynamic;
37754
+ if (origMd.topic) {
37755
+ const { name } = origMd.topic;
37756
+ const summary = origMd.major?.opus?.summary;
37757
+ if (summary) {
37758
+ summary.rich_text_nodes ??= [];
37759
+ summary.rich_text_nodes.unshift({
38869
37760
  orig_text: name,
38870
37761
  text: name,
38871
37762
  type: "topic",
38872
- rid: data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.topic.id.toString()
37763
+ rid: origMd.topic.id.toString()
38873
37764
  });
38874
- origSummary.text = `${name}\n` + (origSummary.text || "");
37765
+ summary.text = summary.text ? `${name}\n${summary.text}` : name;
38875
37766
  }
38876
37767
  }
38877
37768
  param = {
@@ -38883,6 +37774,7 @@ var Bilibilipush = class extends Base {
38883
37774
  frame: data[dynamicId].Dynamic_Data.orig.modules.module_author.pendant.image
38884
37775
  };
38885
37776
  break;
37777
+ }
38886
37778
  case DynamicType.LIVE_RCMD: {
38887
37779
  const liveData = JSON.parse(data[dynamicId].Dynamic_Data.orig.modules.module_dynamic.major.live_rcmd.content);
38888
37780
  param = {
@@ -38923,8 +37815,9 @@ var Bilibilipush = class extends Base {
38923
37815
  decoration_card: generateDecorationCard(data[dynamicId].Dynamic_Data.modules.module_author.decoration_card),
38924
37816
  render_time: TimeFormatter.now(),
38925
37817
  original_content: { [data[dynamicId].Dynamic_Data.orig.type]: param },
38926
- imgList: imgList.length > 0 ? imgList : null
38927
- });
37818
+ imgList: imgList.length > 0 ? imgList : null,
37819
+ dynamic_id: dynamicId
37820
+ }, { skipWatermark: true });
38928
37821
  break;
38929
37822
  }
38930
37823
  /** 文章/专栏动态 */
@@ -38958,7 +37851,7 @@ var Bilibilipush = class extends Base {
38958
37851
  render_time: TimeFormatter.now(),
38959
37852
  share_url: articleContent.dyn_id_str ? `https://www.bilibili.com/opus/${articleContent.dyn_id_str}` : `https://www.bilibili.com/read/cv${articleContent.id}`,
38960
37853
  dynamicTYPE: "专栏动态推送"
38961
- });
37854
+ }, { skipWatermark: true });
38962
37855
  break;
38963
37856
  }
38964
37857
  /** 未处理的动态类型 */
@@ -38976,7 +37869,11 @@ var Bilibilipush = class extends Base {
38976
37869
  const { groupId, botId } = target;
38977
37870
  const bot = karin$1.getBot(botId);
38978
37871
  const Contact = karin$1.contactGroup(groupId);
38979
- status = await karin$1.sendMsg(botId, Contact, img ? [...img] : []);
37872
+ const eventWithBot = this.e;
37873
+ eventWithBot.bot = bot;
37874
+ eventWithBot.selfId = botId;
37875
+ const watermarkedImg = img ? applyWatermarkToImages(img, this.e) : [];
37876
+ status = await karin$1.sendMsg(botId, Contact, [...watermarkedImg]);
38980
37877
  if (Config.bilibili.push.parsedynamic && status.messageId) switch (data[dynamicId].dynamic_type) {
38981
37878
  case "DYNAMIC_TYPE_AV":
38982
37879
  if (send_video) {
@@ -39108,7 +38005,7 @@ var Bilibilipush = class extends Base {
39108
38005
  outputPath,
39109
38006
  loopCount,
39110
38007
  staticImagePath: staticImg.filepath,
39111
- transitionEnabled: loopCount > 1
38008
+ transitionEnabled: true
39112
38009
  })).success) {
39113
38010
  const filePath = Common.tempDri.video + `tmp_${Date.now()}.mp4`;
39114
38011
  fs.renameSync(outputPath, filePath);
@@ -39537,6 +38434,8 @@ registerErrorStrategy({
39537
38434
  });
39538
38435
  //#endregion
39539
38436
  //#region src/platform/douyin/comments.ts
38437
+ var import_heic_decode = /* @__PURE__ */ __toESM(require_heic_decode(), 1);
38438
+ var import_jpeg_js = /* @__PURE__ */ __toESM(require_jpeg_js(), 1);
39540
38439
  /**
39541
38440
  * @description 提取评论里的 @ 用户 sec_uid 列表
39542
38441
  */
@@ -40550,13 +39449,7 @@ var DouYin = class DouYin extends Base {
40550
39449
  分享链接:${logger.green(VideoData.data.aweme_detail.share_url)}
40551
39450
  `);
40552
39451
  video.bit_rate = douyinProcessVideos(video.bit_rate, Config.douyin.videoQuality, Config.douyin.maxAutoVideoSize);
40553
- g_video_url = await new Network({
40554
- url: video.bit_rate[0].play_addr.url_list[2],
40555
- headers: {
40556
- ...this.headers,
40557
- Referer: video.bit_rate[0].play_addr.url_list[0]
40558
- }
40559
- }).getLongLink();
39452
+ 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];
40560
39453
  g_title = VideoData.data.aweme_detail.preview_title.substring(0, 80).replace(/[\\/:*?"<>|\r\n]/g, " ");
40561
39454
  mp4size = (video.bit_rate[0].play_addr.data_size / (1024 * 1024)).toFixed(2);
40562
39455
  }
@@ -40641,7 +39534,7 @@ var DouYin = class DouYin extends Base {
40641
39534
  const img = await Render(this.e, "douyin/comment", {
40642
39535
  Type: isArticle ? "文章" : isVideo ? "视频" : this.is_slides ? "合辑" : "图集",
40643
39536
  CommentsData: douyinCommentsRes.CommentsData,
40644
- CommentLength: Config.douyin.realCommentCount ? aweme.statistics.comment_count : douyinCommentsRes.CommentsData.length ?? 0,
39537
+ CommentLength: douyinCommentsRes.CommentsData.length ?? 0,
40645
39538
  share_url: isVideo ? `https://aweme.snssdk.com/aweme/v1/play/?video_id=${aweme.video.play_addr.uri}&ratio=1080p&line=0` : aweme.share_url,
40646
39539
  VideoSize: mp4size,
40647
39540
  VideoFPS: FPS,
@@ -40649,7 +39542,7 @@ var DouYin = class DouYin extends Base {
40649
39542
  Region: aweme.region,
40650
39543
  suggestWrod: suggest,
40651
39544
  Resolution: isVideo && video ? `${video.bit_rate[0].play_addr.width} x ${video.bit_rate[0].play_addr.height}` : null,
40652
- maxDepth: Config.douyin.subCommentDepth,
39545
+ maxDepth: 6,
40653
39546
  Author: aweme.author.nickname,
40654
39547
  AuthorAvatar: aweme.author.avatar_thumb.url_list[0],
40655
39548
  Statistics: {
@@ -41612,7 +40505,7 @@ var DouYinpush = class extends Base {
41612
40505
  following_count: this.count(Detail_Data.user_info.data.user.following_count),
41613
40506
  total_favorited: this.count(Detail_Data.user_info.data.user.total_favorited),
41614
40507
  has_commerce_goods: liveItem.has_commerce_goods
41615
- });
40508
+ }, { skipWatermark: true });
41616
40509
  } else {
41617
40510
  const realUrl = Config.douyin.push.shareType === "web" && await new Network({
41618
40511
  url: Detail_Data.share_url,
@@ -41642,7 +40535,7 @@ var DouYinpush = class extends Base {
41642
40535
  author_avatar: "https://p3-pc.douyinpic.com/aweme/1080x1080/" + authorUserInfo.data.user.avatar_larger.uri,
41643
40536
  author_douyin_id: authorUserInfo.data.user.unique_id === "" ? authorUserInfo.data.user.short_id : authorUserInfo.data.user.unique_id,
41644
40537
  share_url: Config.douyin.push.shareType === "web" ? realUrl : `https://aweme.snssdk.com/aweme/v1/play/?video_id=${Detail_Data.video.play_addr.uri}&ratio=1080p&line=0`
41645
- });
40538
+ }, { skipWatermark: true });
41646
40539
  } else if (pushItem.pushType === "recommend") {
41647
40540
  const authorUserInfo = "author_user_info" in Detail_Data ? Detail_Data.author_user_info : void 0;
41648
40541
  const coverUrl = getWorkCoverUrl(getWorkTypeInfo(Detail_Data), Detail_Data);
@@ -41662,7 +40555,7 @@ var DouYinpush = class extends Base {
41662
40555
  author_avatar: "https://p3-pc.douyinpic.com/aweme/1080x1080/" + authorUserInfo.data.user.avatar_larger.uri,
41663
40556
  author_douyin_id: authorUserInfo.data.user.unique_id === "" ? authorUserInfo.data.user.short_id : authorUserInfo.data.user.unique_id,
41664
40557
  share_url: Config.douyin.push.shareType === "web" ? realUrl : `https://aweme.snssdk.com/aweme/v1/play/?video_id=${Detail_Data.video.play_addr.uri}&ratio=1080p&line=0`
41665
- });
40558
+ }, { skipWatermark: true });
41666
40559
  } else {
41667
40560
  const dynamicTypeLabel = "作品动态推送";
41668
40561
  const workTypeInfo = getWorkTypeInfo(Detail_Data);
@@ -41688,7 +40581,7 @@ var DouYinpush = class extends Base {
41688
40581
  粉丝: this.count(Detail_Data.user_info.data.user.follower_count),
41689
40582
  share_url: Detail_Data.share_url,
41690
40583
  useDarkTheme: false
41691
- });
40584
+ }, { skipWatermark: true });
41692
40585
  } else img = await Render(this.e, workTypeInfo.templatePath, {
41693
40586
  image_url: coverUrl,
41694
40587
  desc: this.desc(Detail_Data, Detail_Data.desc),
@@ -41730,7 +40623,7 @@ var DouYinpush = class extends Base {
41730
40623
  subscriber_role: subscriberInCreators?.role_title ?? (subscriberUid && Detail_Data.author?.uid && subscriberUid === Detail_Data.author.uid || subscriberSecUid && Detail_Data.author?.sec_uid && subscriberSecUid === Detail_Data.author.sec_uid || Detail_Data.user_info.data.user.nickname && Detail_Data.author?.nickname && Detail_Data.user_info.data.user.nickname === Detail_Data.author.nickname ? "作者" : void 0)
41731
40624
  };
41732
40625
  })()
41733
- });
40626
+ }, { skipWatermark: true });
41734
40627
  }
41735
40628
  }
41736
40629
  for (const target of pushItem.targets) {
@@ -41738,7 +40631,12 @@ var DouYinpush = class extends Base {
41738
40631
  const { groupId, botId } = target;
41739
40632
  if (!skip) {
41740
40633
  const Contact = karin$1.contactGroup(groupId);
41741
- status = await karin$1.sendMsg(botId, Contact, img ? [...img] : []);
40634
+ const bot = karin$1.getBot(botId);
40635
+ const eventWithBot = this.e;
40636
+ eventWithBot.bot = bot;
40637
+ eventWithBot.selfId = botId;
40638
+ const watermarkedImg = img ? applyWatermarkToImages(img, this.e) : [];
40639
+ status = await karin$1.sendMsg(botId, Contact, [...watermarkedImg]);
41742
40640
  if (pushItem.pushType === "live" && "room_data" in pushItem.Detail_Data && status.message_id) await douyinDBInstance.updateLiveStatus(pushItem.sec_uid, true);
41743
40641
  if (Config.douyin.push.parsedynamic && status.message_id) {
41744
40642
  const workTypeInfo = getWorkTypeInfo(Detail_Data);
@@ -42844,7 +41742,7 @@ var Xiaohongshu = class extends Base {
42844
41742
  if (livePhoto.filepath) {
42845
41743
  if (shouldGenerateVideo) {
42846
41744
  const outputPath = Common.tempDri.video + `xhs_live_${Date.now()}_${index}.mp4`;
42847
- const transitionEnabled = loopCount > 1 && Boolean(staticImgPath);
41745
+ const transitionEnabled = Boolean(staticImgPath);
42848
41746
  const safeStaticPath = staticImgPath || livePhoto.filepath;
42849
41747
  const result = await loopVideoWithTransition({
42850
41748
  inputPath: livePhoto.filepath,
@@ -42856,7 +41754,7 @@ var Xiaohongshu = class extends Base {
42856
41754
  context: bgmContext ?? void 0
42857
41755
  });
42858
41756
  const success = result.success;
42859
- if (mergeMode === "continuous" && result.context) bgmContext = result.context;
41757
+ if (result.context) bgmContext = result.context;
42860
41758
  if (success) {
42861
41759
  const filePath = Common.tempDri.video + `tmp_${Date.now()}.mp4`;
42862
41760
  fs.renameSync(outputPath, filePath);
@@ -43200,7 +42098,7 @@ var douyinLogin = async (e) => {
43200
42098
  }
43201
42099
  let gcInterval;
43202
42100
  try {
43203
- const loginQRcode = await Render(e, "douyin/qrcodeImg", qrCodeData.url ? { share_url: qrCodeData.url } : { qrCodeDataUrl: qrCodeData.originalImage });
42101
+ const loginQRcode = await Render(e, "douyin/qrcodeImg", qrCodeData.url ? { share_url: qrCodeData.url } : { share_url: qrCodeData.originalImage });
43204
42102
  const base64Data = loginQRcode[0]?.file;
43205
42103
  if (!base64Data) throw new Error("生成二维码图片失败");
43206
42104
  const cleanBase64 = base64Data.replace(/^base64:\/\//, "");
@@ -43442,7 +42340,7 @@ var waitQrcode = async (page) => {
43442
42340
  const response = await fetch(originalImage);
43443
42341
  imageBuffer = Buffer.from(await response.arrayBuffer());
43444
42342
  }
43445
- const qrContent = await QRCodeScanner.scanFromBuffer(imageBuffer);
42343
+ const qrContent = scan(imageBuffer);
43446
42344
  if (qrContent) {
43447
42345
  logger.mark("二维码解码成功:", qrContent);
43448
42346
  return {
@@ -47011,19 +45909,6 @@ var douyinConfigSchema = {
47011
45909
  max: 20
47012
45910
  }]
47013
45911
  },
47014
- {
47015
- key: "subCommentDepth",
47016
- type: "input",
47017
- inputType: "number",
47018
- label: "次级评论解析深度",
47019
- description: "次级评论解析深度",
47020
- disabled: $or($not("switch"), $not($includes("sendContent", "comment"))),
47021
- rules: [{
47022
- min: 1,
47023
- max: 6,
47024
- error: "嵌套深度最高只有 6 层,超过 6 层的评论会被强制截断"
47025
- }]
47026
- },
47027
45912
  {
47028
45913
  key: "commentImageCollection",
47029
45914
  type: "switch",
@@ -47031,13 +45916,6 @@ var douyinConfigSchema = {
47031
45916
  description: "开启后将收集评论区的图片,以合并转发的形式返回",
47032
45917
  disabled: $or($not("switch"), $not($includes("sendContent", "comment")))
47033
45918
  },
47034
- {
47035
- key: "realCommentCount",
47036
- type: "switch",
47037
- label: "显示真实评论数量",
47038
- description: "评论图是否显示真实评论数量,关闭则显示解析到的评论数量",
47039
- disabled: $or($not("switch"), $not($includes("sendContent", "comment")))
47040
- },
47041
45919
  {
47042
45920
  type: "divider",
47043
45921
  title: "渲染与画质设置"
@@ -48212,4 +47090,4 @@ mkdirSync(`${karinPathBase}/${Root.pluginName}/data`);
48212
47090
  mkdirSync(Common.tempDri.images);
48213
47091
  mkdirSync(Common.tempDri.video);
48214
47092
  //#endregion
48215
- 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 };
47093
+ 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 };