karin-plugin-kkk 2.20.2 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin, o as __toESM, r as __export } from "./rolldown-runtime-BMXAG3ag.js";
2
- import { $ as init_lu, $t as Bookmark, A as RiHashtag, At as Plug2, B as RiRefreshLine, Bt as FileText, C as AiFillStar, Ct as Shield, D as RiArrowRightFill, Dt as Radio, E as zhCN, Et as ScanLine, F as RiListCheck2, Ft as Info, G as RiStarFill, Gt as Coins, H as RiSendPlaneFill, Ht as ExternalLink, I as RiLiveLine, It as Heart, J as RiTiktokFill, Jt as CircleEllipsis, K as RiStarLine, Kt as Clock, L as RiLoginCircleFill, Lt as Hash, M as RiHeart3Fill, Mt as Music, N as RiHeart3Line, Nt as MessageCircle, O as RiBellFill, Ot as Quote, P as RiLinkM, Pt as MapPin, Q as LuFullscreen, Qt as Calendar, R as RiMessage3Fill, Rt as Gift, S as AiFillHeart, St as Smartphone, T as init_locale, Tt as Share2, U as RiShareForwardFill, Ut as Crown, V as RiRobot2Fill, Vt as Eye, W as RiSparkling2Fill, Wt as CornerDownLeft, X as RiVideoLine, Xt as CircleAlert, Y as RiUserFollowLine, Yt as CircleCheckBig, Z as init_ri, Zt as ChartColumn, _ as HiOutlineMenuAlt2, _t as UserPlus, an as require_react, at as init_dist, b as FaCommentDots, bt as Terminal, c as rehypeHighlight, ct as button_default, d as MdAccessTime, dt as IoSearch, en as BookOpen, et as init_date_fns, f as init_md, ft as init_io5, g as init_tb, gt as User, h as TbScan, ht as Users, in as require_server_node, j as RiHeart2Line, jt as Play, k as RiGroupLine, kt as QrCode, l as init_react_markdown, lt as HeroUIProvider, m as init_si, mt as Zap, nn as clsx_default, nt as formatDistanceToNow, ot as code_default, p as SiBilibili, pt as init_lucide_react, q as RiThumbUpFill, qt as CircleFadingArrowUp, rn as init_clsx, rt as format, s as init_rehype_highlight, st as chip_default, tn as Bell, u as Markdown, ut as require_jsx_runtime, v as init_hi, vt as TriangleAlert, w as init_ai, wt as ShieldCheck, x as init_fa6, xt as Star, y as FaCodeBranch, yt as ThumbsUp, z as RiQuestionFill, zt as Gamepad2 } from "./vendor-B3KhGHI_.js";
2
+ import { $ as init_date_fns, $t as BookOpen, A as RiHeart2Line, At as Play, B as RiRobot2Fill, Bt as Eye, C as init_ai, Ct as ShieldCheck, D as RiBellFill, Dt as Quote, E as RiArrowRightFill, Et as Radio, F as RiLiveLine, Ft as Heart, G as RiStarLine, Gt as Clock, H as RiShareForwardFill, Ht as Crown, I as RiLoginCircleFill, It as Hash, J as RiUserFollowLine, Jt as CircleCheckBig, K as RiThumbUpFill, Kt as CircleFadingArrowUp, L as RiMessage3Fill, Lt as Gift, M as RiHeart3Line, Mt as MessageCircle, N as RiLinkM, Nt as MapPin, O as RiGroupLine, Ot as QrCode, P as RiListCheck2, Pt as Info, Q as init_lu, Qt as Bookmark, R as RiQuestionFill, Rt as Gamepad2, S as AiFillStar, St as Shield, T as zhCN, Tt as ScanLine, U as RiSparkling2Fill, Ut as CornerDownLeft, V as RiSendPlaneFill, Vt as ExternalLink, W as RiStarFill, Wt as Coins, X as init_ri, Xt as ChartColumn, Y as RiVideoLine, Yt as CircleAlert, Z as LuFullscreen, Zt as Calendar, _ as init_hi, _t as TriangleAlert, at as code_default, b as init_fa6, bt as Star, c as init_react_markdown, ct as HeroUIProvider, d as init_md, dt as init_io5, en as Bell, f as SiBilibili, ft as init_lucide_react, g as HiOutlineMenuAlt2, gt as UserPlus, h as init_tb, ht as User, in as require_react, it as init_dist, j as RiHeart3Fill, jt as Music, k as RiHashtag, kt as Plug2, l as Markdown, lt as require_jsx_runtime, m as TbScan, mt as Users, nn as init_clsx, nt as format, o as init_rehype_highlight, ot as chip_default, p as init_si, pt as Zap, q as RiTiktokFill, qt as CircleEllipsis, rn as require_server_node, s as rehypeHighlight, st as button_default, tn as clsx_default, tt as formatDistanceToNow, u as MdAccessTime, ut as IoSearch, v as FaCodeBranch, vt as ThumbsUp, w as init_locale, wt as Share2, x as AiFillHeart, xt as Smartphone, y as FaCommentDots, yt as Terminal, z as RiRefreshLine, zt as FileText } from "./vendor-CYCcUtqE.js";
3
3
  import { logger as logger$1 } from "node-karin";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
@@ -3965,13 +3965,17 @@ var Comment_exports$2 = __export({
3965
3965
  BilibiliComment: () => BilibiliComment,
3966
3966
  default: () => Comment_default$2
3967
3967
  }, 1);
3968
- var import_react$22, import_jsx_runtime$20, processCommentHTML$1, ImageWithSkeleton, QRCodeSection$1, VideoInfoHeader, CommentItemComponent$1, BilibiliComment, Comment_default$2;
3968
+ var import_react$22, import_jsx_runtime$20, TopBadge, processCommentHTML$1, ImageWithSkeleton, QRCodeSection$1, VideoInfoHeader, CommentItemComponent$1, BilibiliComment, Comment_default$2;
3969
3969
  var init_Comment$2 = __esmMin(() => {
3970
3970
  init_clsx();
3971
3971
  init_lucide_react();
3972
3972
  import_react$22 = __toESM(require_react(), 1);
3973
3973
  init_DefaultLayout();
3974
3974
  import_jsx_runtime$20 = __toESM(require_jsx_runtime(), 1);
3975
+ TopBadge = () => (0, import_jsx_runtime$20.jsx)("span", {
3976
+ className: clsx_default("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]"),
3977
+ children: "置顶"
3978
+ });
3975
3979
  processCommentHTML$1 = (htmlContent) => htmlContent.replace(/<img([^>]*?)>/gi, "<img$1 referrerpolicy=\"no-referrer\" crossorigin=\"anonymous\">");
3976
3980
  ImageWithSkeleton = ({ src, alt, className = "", placeholder }) => {
3977
3981
  const [hasError, setHasError] = (0, import_react$22.useState)(false);
@@ -4197,22 +4201,42 @@ var init_Comment$2 = __esmMin(() => {
4197
4201
  })
4198
4202
  ]
4199
4203
  }),
4200
- (0, import_jsx_runtime$20.jsx)("div", {
4201
- className: "text-[60px] tracking-[0.5px] leading-[1.6] text-foreground mb-5 select-text [&_img]:mb-3 [&_img]:inline [&_img]:h-[1.4em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em]",
4204
+ (0, import_jsx_runtime$20.jsxs)("div", {
4205
+ className: "items-center text-[60px] tracking-[0.5px] leading-[1.6] text-foreground mb-5 select-text [&_img]:mb-3 [&_img]:inline [&_img]:h-[1.4em] [&_img]:w-auto [&_img]:align-middle [&_img]:mx-1 [&_img]:max-w-[1.7em] flex flex-wrap",
4202
4206
  style: {
4203
4207
  wordBreak: "break-word",
4204
4208
  overflowWrap: "break-word"
4205
4209
  },
4206
- dangerouslySetInnerHTML: { __html: (props.isTop ? "<span class=\"inline-flex justify-center items-center relative border-4 border-[#006A9E] rounded-xl text-[#006A9E] text-5xl px-2 py-1 leading-none mr-2 align-baseline\">置顶</span>" : "") + processCommentHTML$1(props.message) }
4210
+ children: [props.isTop && (0, import_jsx_runtime$20.jsx)(TopBadge, {}), (0, import_jsx_runtime$20.jsx)("span", { dangerouslySetInnerHTML: { __html: processCommentHTML$1(props.message) } })]
4207
4211
  }),
4208
- (props.img_src || props.sticker) && (0, import_jsx_runtime$20.jsx)("div", {
4209
- className: "flex my-5 overflow-hidden rounded-[25px] w-[95%] shadow-large",
4210
- children: (0, import_jsx_runtime$20.jsx)(ImageWithSkeleton, {
4211
- src: props.img_src || props.sticker || "IMAGE_PLACEHOLDER",
4212
- alt: "评论图片",
4213
- className: "rounded-[25px] object-contain w-full h-full",
4214
- placeholder: "评论图片"
4215
- })
4212
+ props.pictures && props.pictures.length > 0 && (0, import_jsx_runtime$20.jsx)("div", {
4213
+ className: "flex gap-5 my-5 w-[95%]",
4214
+ children: props.pictures.length === 1 ? (0, import_jsx_runtime$20.jsx)("div", {
4215
+ className: "overflow-hidden rounded-[25px] shadow-large w-full",
4216
+ children: (0, import_jsx_runtime$20.jsx)(ImageWithSkeleton, {
4217
+ src: props.pictures[0],
4218
+ alt: "评论图片",
4219
+ className: "rounded-[25px] object-contain w-full h-full",
4220
+ placeholder: "评论图片"
4221
+ })
4222
+ }) : props.pictures.slice(0, 2).map((picUrl, idx) => (0, import_jsx_runtime$20.jsxs)("div", {
4223
+ className: "relative overflow-hidden rounded-[25px] shadow-large flex-1 aspect-square",
4224
+ children: [(0, import_jsx_runtime$20.jsx)(ImageWithSkeleton, {
4225
+ src: picUrl,
4226
+ alt: `评论图片${idx + 1}`,
4227
+ className: "rounded-[25px] object-cover w-full h-full",
4228
+ placeholder: "评论图片"
4229
+ }), idx === 1 && props.pictures.length > 2 && (0, import_jsx_runtime$20.jsx)("div", {
4230
+ className: "absolute bottom-3 right-3",
4231
+ children: (0, import_jsx_runtime$20.jsx)("div", {
4232
+ className: "flex items-center justify-center bg-black px-4 py-3 rounded-2xl opacity-80 backdrop-blur-sm",
4233
+ children: (0, import_jsx_runtime$20.jsxs)("span", {
4234
+ className: "text-white text-4xl font-bold leading-none",
4235
+ children: ["+ ", props.pictures.length - 2]
4236
+ })
4237
+ })
4238
+ })]
4239
+ }, idx))
4216
4240
  }),
4217
4241
  (0, import_jsx_runtime$20.jsxs)("div", {
4218
4242
  className: "flex items-center justify-between mt-[37.5px] whitespace-nowrap text-foreground-500",
@@ -4339,14 +4363,35 @@ var init_Comment$2 = __esmMin(() => {
4339
4363
  },
4340
4364
  dangerouslySetInnerHTML: { __html: processCommentHTML$1(subReply.message) }
4341
4365
  }),
4342
- subReply.img_src && (0, import_jsx_runtime$20.jsx)("div", {
4343
- className: "flex my-5 overflow-hidden rounded-[25px] w-[95%] shadow-large",
4344
- children: (0, import_jsx_runtime$20.jsx)(ImageWithSkeleton, {
4345
- src: subReply.img_src,
4346
- alt: "评论图片",
4347
- className: "rounded-[25px] object-contain w-full h-full",
4348
- placeholder: "评论图片"
4349
- })
4366
+ subReply.pictures && subReply.pictures.length > 0 && (0, import_jsx_runtime$20.jsx)("div", {
4367
+ className: "flex gap-5 my-5 w-[95%]",
4368
+ children: subReply.pictures.length === 1 ? (0, import_jsx_runtime$20.jsx)("div", {
4369
+ className: "overflow-hidden rounded-[25px] shadow-large w-full",
4370
+ children: (0, import_jsx_runtime$20.jsx)(ImageWithSkeleton, {
4371
+ src: subReply.pictures[0],
4372
+ alt: "评论图片",
4373
+ className: "rounded-[25px] object-contain w-full h-full",
4374
+ placeholder: "评论图片"
4375
+ })
4376
+ }) : subReply.pictures.slice(0, 2).map((picUrl, idx) => (0, import_jsx_runtime$20.jsxs)("div", {
4377
+ className: "relative overflow-hidden rounded-[25px] shadow-large flex-1 aspect-square",
4378
+ children: [(0, import_jsx_runtime$20.jsx)(ImageWithSkeleton, {
4379
+ src: picUrl,
4380
+ alt: `评论图片${idx + 1}`,
4381
+ className: "rounded-[25px] object-cover w-full h-full",
4382
+ placeholder: "评论图片"
4383
+ }), idx === 1 && subReply.pictures.length > 2 && (0, import_jsx_runtime$20.jsx)("div", {
4384
+ className: "absolute bottom-10 right-10",
4385
+ children: (0, import_jsx_runtime$20.jsx)("div", {
4386
+ className: "flex items-center justify-center px-8 py-6 rounded-[18px] shadow-xl",
4387
+ style: { backgroundColor: "rgba(0, 0, 0, 0.7)" },
4388
+ children: (0, import_jsx_runtime$20.jsxs)("span", {
4389
+ className: "text-white text-[60px] font-bold leading-none",
4390
+ children: ["+", subReply.pictures.length - 2]
4391
+ })
4392
+ })
4393
+ })]
4394
+ }, idx))
4350
4395
  }),
4351
4396
  (0, import_jsx_runtime$20.jsxs)("div", {
4352
4397
  className: "flex items-center justify-between mt-[37.5px] whitespace-nowrap text-foreground-500",
@@ -6099,12 +6144,12 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6099
6144
  }),
6100
6145
  (0, import_jsx_runtime$13.jsx)("div", { className: "h-20" })
6101
6146
  ] });
6102
- BilibiliVideoDynamicContent = (props) => (0, import_jsx_runtime$13.jsxs)(import_jsx_runtime$13.Fragment, { children: [props.image_url && (0, import_jsx_runtime$13.jsxs)(import_jsx_runtime$13.Fragment, { children: [(0, import_jsx_runtime$13.jsx)("div", {
6147
+ BilibiliVideoDynamicContent = (props) => (0, import_jsx_runtime$13.jsxs)(import_jsx_runtime$13.Fragment, { children: [props.data.image_url && (0, import_jsx_runtime$13.jsxs)(import_jsx_runtime$13.Fragment, { children: [(0, import_jsx_runtime$13.jsx)("div", {
6103
6148
  className: "flex flex-col items-center",
6104
6149
  children: (0, import_jsx_runtime$13.jsxs)("div", {
6105
6150
  className: "flex overflow-hidden relative flex-col flex-1 items-center w-11/12 rounded-3xl shadow-large",
6106
6151
  children: [(0, import_jsx_runtime$13.jsx)(EnhancedImage, {
6107
- src: props.image_url,
6152
+ src: props.data.image_url,
6108
6153
  alt: "封面",
6109
6154
  className: "object-contain w-full h-full rounded-3xl"
6110
6155
  }), (0, import_jsx_runtime$13.jsx)("div", {
@@ -6123,7 +6168,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6123
6168
  className: "relative items-center text-8xl font-bold tracking-wider wrap-break-word text-foreground",
6124
6169
  children: (0, import_jsx_runtime$13.jsx)(CommentText, {
6125
6170
  className: "text-[80px] font-bold tracking-[1.5px] leading-normal whitespace-pre-wrap text-foreground select-text",
6126
- content: props.text,
6171
+ content: props.data.text,
6127
6172
  style: {
6128
6173
  wordBreak: "break-word",
6129
6174
  overflowWrap: "break-word"
@@ -6135,7 +6180,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6135
6180
  className: "text-6xl text-default-500",
6136
6181
  children: (0, import_jsx_runtime$13.jsx)(CommentText, {
6137
6182
  className: "text-[60px] leading-normal whitespace-pre-wrap text-default-500 select-text",
6138
- content: props.desc,
6183
+ content: props.data.desc,
6139
6184
  style: {
6140
6185
  wordBreak: "break-word",
6141
6186
  overflowWrap: "break-word"
@@ -6157,7 +6202,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6157
6202
  className: "text-like"
6158
6203
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6159
6204
  className: "select-text",
6160
- children: [props.dianzan, "点赞"]
6205
+ children: [props.data.dianzan, "点赞"]
6161
6206
  })]
6162
6207
  }),
6163
6208
  (0, import_jsx_runtime$13.jsxs)("div", {
@@ -6167,7 +6212,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6167
6212
  className: "text-comment"
6168
6213
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6169
6214
  className: "select-text",
6170
- children: [props.pinglun, "评论"]
6215
+ children: [props.data.pinglun, "评论"]
6171
6216
  })]
6172
6217
  }),
6173
6218
  (0, import_jsx_runtime$13.jsxs)("div", {
@@ -6177,7 +6222,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6177
6222
  className: "text-success"
6178
6223
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6179
6224
  className: "select-text",
6180
- children: [props.share, "分享"]
6225
+ children: [props.data.share, "分享"]
6181
6226
  })]
6182
6227
  })
6183
6228
  ]
@@ -6191,7 +6236,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6191
6236
  className: "text-warning"
6192
6237
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6193
6238
  className: "select-text",
6194
- children: [props.coin, "硬币"]
6239
+ children: [props.data.coin, "硬币"]
6195
6240
  })]
6196
6241
  }),
6197
6242
  (0, import_jsx_runtime$13.jsxs)("div", {
@@ -6201,7 +6246,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6201
6246
  className: "text-default-400 text-view"
6202
6247
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6203
6248
  className: "select-text",
6204
- children: [props.view, "浏览"]
6249
+ children: [props.data.view, "浏览"]
6205
6250
  })]
6206
6251
  }),
6207
6252
  (0, import_jsx_runtime$13.jsxs)("div", {
@@ -6211,7 +6256,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6211
6256
  className: "text-time"
6212
6257
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6213
6258
  className: "select-text",
6214
- children: ["视频时长: ", props.duration_text]
6259
+ children: ["视频时长: ", props.data.duration_text]
6215
6260
  })]
6216
6261
  })
6217
6262
  ]
@@ -6226,7 +6271,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6226
6271
  className: "text-time"
6227
6272
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6228
6273
  className: "select-text",
6229
- children: ["发布于", props.create_time]
6274
+ children: ["发布于", props.data.create_time]
6230
6275
  })]
6231
6276
  }),
6232
6277
  (0, import_jsx_runtime$13.jsxs)("div", {
@@ -6243,7 +6288,7 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6243
6288
  className: "text-default-400"
6244
6289
  }), (0, import_jsx_runtime$13.jsxs)("span", {
6245
6290
  className: "select-text",
6246
- children: ["动态ID: ", props.dynamic_id]
6291
+ children: ["动态ID: ", props.data.dynamic_id]
6247
6292
  })]
6248
6293
  })
6249
6294
  ]
@@ -6252,151 +6297,202 @@ var init_DYNAMIC_TYPE_AV = __esmMin(() => {
6252
6297
  (0, import_jsx_runtime$13.jsx)("div", { className: "h-40" })
6253
6298
  ]
6254
6299
  })] });
6255
- BilibiliVideoDynamicFooter = (props) => (0, import_jsx_runtime$13.jsxs)(import_jsx_runtime$13.Fragment, { children: [(0, import_jsx_runtime$13.jsx)("div", { className: "h-15" }), (0, import_jsx_runtime$13.jsxs)("div", {
6256
- className: "flex justify-between items-start px-20 pb-20",
6257
- children: [(0, import_jsx_runtime$13.jsxs)("div", {
6258
- className: "flex flex-col gap-12",
6259
- children: [(0, import_jsx_runtime$13.jsxs)("div", {
6260
- className: "flex gap-12 items-start",
6261
- children: [(0, import_jsx_runtime$13.jsxs)("div", {
6262
- className: "relative shrink-0",
6263
- children: [(0, import_jsx_runtime$13.jsx)(EnhancedImage, {
6264
- src: props.avatar_url,
6265
- alt: "头像",
6266
- className: "rounded-full shadow-medium w-35 h-auto",
6267
- isCircular: true
6268
- }), props.frame && (0, import_jsx_runtime$13.jsx)(EnhancedImage, {
6269
- src: props.frame,
6270
- alt: "头像框",
6271
- className: "absolute inset-0 transform scale-180"
6272
- })]
6273
- }), (0, import_jsx_runtime$13.jsxs)("div", {
6274
- className: "flex flex-col gap-5",
6275
- children: [(0, import_jsx_runtime$13.jsx)("div", {
6276
- className: "text-7xl font-bold select-text text-foreground",
6277
- children: (0, import_jsx_runtime$13.jsx)("span", { dangerouslySetInnerHTML: { __html: props.username } })
6278
- }), (0, import_jsx_runtime$13.jsxs)("div", {
6279
- className: "flex gap-2 items-center text-4xl text-default-500",
6280
- children: [(0, import_jsx_runtime$13.jsx)(Hash, {
6281
- size: 32,
6282
- className: "text-default-400"
6283
- }), (0, import_jsx_runtime$13.jsxs)("span", {
6284
- className: "select-text",
6285
- children: ["UID: ", props.user_shortid]
6286
- })]
6287
- })]
6288
- })]
6289
- }), (0, import_jsx_runtime$13.jsxs)("div", {
6290
- className: "text-3xl flex gap-6 items-center text-default-600",
6291
- children: [
6292
- (0, import_jsx_runtime$13.jsxs)("div", {
6293
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-default-100",
6300
+ BilibiliVideoDynamicFooter = (props) => {
6301
+ const otherStaff = props.data.staff?.filter((member) => member.mid !== Number(props.data.user_shortid)) || [];
6302
+ const currentUserRole = props.data.staff?.find((member) => member.mid === Number(props.data.user_shortid))?.title;
6303
+ const listRef = import_react$15.useRef(null);
6304
+ const [visibleCount, setVisibleCount] = import_react$15.useState(otherStaff.length);
6305
+ import_react$15.useEffect(() => {
6306
+ const calc = () => {
6307
+ const el = listRef.current;
6308
+ if (!el || otherStaff.length === 0) return;
6309
+ const containerWidth = el.offsetWidth;
6310
+ const capacity = Math.floor(containerWidth / 200);
6311
+ setVisibleCount(otherStaff.length > capacity ? Math.max(0, capacity - 1) : otherStaff.length);
6312
+ };
6313
+ calc();
6314
+ window.addEventListener("resize", calc);
6315
+ return () => window.removeEventListener("resize", calc);
6316
+ }, [otherStaff.length]);
6317
+ return (0, import_jsx_runtime$13.jsxs)(import_jsx_runtime$13.Fragment, { children: [
6318
+ otherStaff.length > 0 && (0, import_jsx_runtime$13.jsx)("div", {
6319
+ className: "flex flex-col px-20 w-full",
6320
+ children: (0, import_jsx_runtime$13.jsxs)("div", {
6321
+ ref: listRef,
6322
+ className: "flex overflow-hidden gap-8 py-1 w-full",
6323
+ children: [otherStaff.slice(0, visibleCount).map((member) => (0, import_jsx_runtime$13.jsxs)("div", {
6324
+ className: "flex flex-col items-center min-w-42 w-42 shrink-0",
6294
6325
  children: [
6295
- (0, import_jsx_runtime$13.jsxs)("div", {
6296
- className: "flex gap-1 items-center",
6297
- children: [(0, import_jsx_runtime$13.jsx)(Heart, {
6298
- size: 28,
6299
- className: "text-like"
6300
- }), (0, import_jsx_runtime$13.jsx)("span", {
6301
- className: "text-default-400",
6302
- children: "获赞"
6303
- })]
6326
+ (0, import_jsx_runtime$13.jsx)("div", {
6327
+ className: "flex justify-center items-center bg-white rounded-full w-30 h-30",
6328
+ children: (0, import_jsx_runtime$13.jsx)(EnhancedImage, {
6329
+ src: member.face,
6330
+ alt: member.name,
6331
+ className: "object-cover w-28 h-28 rounded-full",
6332
+ isCircular: true
6333
+ })
6304
6334
  }),
6305
- (0, import_jsx_runtime$13.jsx)("div", { className: "w-full h-px bg-default-300" }),
6306
- (0, import_jsx_runtime$13.jsx)("span", {
6307
- className: "select-text font-medium text-4xl",
6308
- children: props.total_favorited
6335
+ (0, import_jsx_runtime$13.jsx)("div", {
6336
+ className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
6337
+ children: member.name
6338
+ }),
6339
+ (0, import_jsx_runtime$13.jsx)("div", {
6340
+ className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-default-500",
6341
+ children: member.title
6309
6342
  })
6310
6343
  ]
6311
- }),
6312
- (0, import_jsx_runtime$13.jsxs)("div", {
6313
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-default-100",
6344
+ }, member.mid)), otherStaff.length > visibleCount && (0, import_jsx_runtime$13.jsxs)("div", {
6345
+ className: "flex flex-col items-center min-w-42 w-42 shrink-0",
6314
6346
  children: [
6347
+ (0, import_jsx_runtime$13.jsx)("div", {
6348
+ className: "flex justify-center items-center rounded-full bg-default-200 w-30 h-30",
6349
+ children: (0, import_jsx_runtime$13.jsx)("span", {
6350
+ className: "text-[42px] leading-none text-default-500",
6351
+ children: "···"
6352
+ })
6353
+ }),
6315
6354
  (0, import_jsx_runtime$13.jsxs)("div", {
6316
- className: "flex gap-1 items-center",
6317
- children: [(0, import_jsx_runtime$13.jsx)(Eye, {
6318
- size: 28,
6319
- className: "text-view"
6320
- }), (0, import_jsx_runtime$13.jsx)("span", {
6321
- className: "text-default-400",
6322
- children: "关注"
6323
- })]
6355
+ className: "overflow-hidden mt-6 w-full text-3xl font-medium leading-tight text-center truncate whitespace-nowrap select-text text-foreground",
6356
+ children: [
6357
+ "还有",
6358
+ otherStaff.length - visibleCount,
6359
+ ""
6360
+ ]
6324
6361
  }),
6325
- (0, import_jsx_runtime$13.jsx)("div", { className: "w-full h-px bg-default-300" }),
6326
- (0, import_jsx_runtime$13.jsx)("span", {
6327
- className: "select-text font-medium text-4xl",
6328
- children: props.following_count
6362
+ (0, import_jsx_runtime$13.jsx)("div", {
6363
+ className: "overflow-hidden mt-2 w-full text-3xl leading-tight text-center truncate whitespace-nowrap select-text text-default-500",
6364
+ children: "共创"
6329
6365
  })
6330
6366
  ]
6331
- }),
6332
- (0, import_jsx_runtime$13.jsxs)("div", {
6333
- className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-default-100",
6367
+ })]
6368
+ })
6369
+ }),
6370
+ (0, import_jsx_runtime$13.jsx)("div", { className: "h-15" }),
6371
+ (0, import_jsx_runtime$13.jsxs)("div", {
6372
+ className: "flex justify-between items-start px-20 pb-20",
6373
+ children: [(0, import_jsx_runtime$13.jsxs)("div", {
6374
+ className: "flex flex-col gap-12",
6375
+ children: [(0, import_jsx_runtime$13.jsxs)("div", {
6376
+ className: "flex gap-12 items-start",
6377
+ children: [(0, import_jsx_runtime$13.jsxs)("div", {
6378
+ className: "relative shrink-0",
6379
+ children: [(0, import_jsx_runtime$13.jsx)(EnhancedImage, {
6380
+ src: props.data.avatar_url,
6381
+ alt: "头像",
6382
+ className: "rounded-full shadow-medium w-35 h-auto",
6383
+ isCircular: true
6384
+ }), props.data.frame && (0, import_jsx_runtime$13.jsx)(EnhancedImage, {
6385
+ src: props.data.frame,
6386
+ alt: "头像框",
6387
+ className: "absolute inset-0 transform scale-180"
6388
+ })]
6389
+ }), (0, import_jsx_runtime$13.jsxs)("div", {
6390
+ className: "flex flex-col gap-5",
6391
+ children: [(0, import_jsx_runtime$13.jsx)("div", {
6392
+ className: "text-7xl font-bold select-text text-foreground",
6393
+ children: (0, import_jsx_runtime$13.jsx)("span", { dangerouslySetInnerHTML: { __html: props.data.username } })
6394
+ }), (0, import_jsx_runtime$13.jsxs)("div", {
6395
+ className: "flex gap-2 items-center text-4xl text-default-500",
6396
+ children: [
6397
+ (0, import_jsx_runtime$13.jsx)(Hash, { size: 32 }),
6398
+ (0, import_jsx_runtime$13.jsxs)("span", { children: ["UID: ", props.data.user_shortid] }),
6399
+ currentUserRole && (0, import_jsx_runtime$13.jsx)("span", {
6400
+ className: "ml-5 px-3 py-1 rounded-xl bg-default-200 text-3xl",
6401
+ children: currentUserRole
6402
+ })
6403
+ ]
6404
+ })]
6405
+ })]
6406
+ }), (0, import_jsx_runtime$13.jsxs)("div", {
6407
+ className: "text-3xl flex gap-6 items-center text-default-600",
6334
6408
  children: [
6335
6409
  (0, import_jsx_runtime$13.jsxs)("div", {
6336
- className: "flex gap-1 items-center",
6337
- children: [(0, import_jsx_runtime$13.jsx)(Users, {
6338
- size: 28,
6339
- className: "text-primary"
6340
- }), (0, import_jsx_runtime$13.jsx)("span", {
6341
- className: "text-default-400",
6342
- children: "粉丝"
6343
- })]
6410
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-default-100",
6411
+ children: [
6412
+ (0, import_jsx_runtime$13.jsxs)("div", {
6413
+ className: "flex gap-1 items-center",
6414
+ children: [(0, import_jsx_runtime$13.jsx)(Heart, {
6415
+ size: 28,
6416
+ className: "text-like"
6417
+ }), (0, import_jsx_runtime$13.jsx)("span", {
6418
+ className: "text-default-400",
6419
+ children: "获赞"
6420
+ })]
6421
+ }),
6422
+ (0, import_jsx_runtime$13.jsx)("div", { className: "w-full h-px bg-default-300" }),
6423
+ (0, import_jsx_runtime$13.jsx)("span", {
6424
+ className: "select-text font-medium text-4xl",
6425
+ children: props.data.total_favorited
6426
+ })
6427
+ ]
6344
6428
  }),
6345
- (0, import_jsx_runtime$13.jsx)("div", { className: "w-full h-px bg-default-300" }),
6346
- (0, import_jsx_runtime$13.jsx)("span", {
6347
- className: "select-text font-medium text-4xl",
6348
- children: props.fans
6429
+ (0, import_jsx_runtime$13.jsxs)("div", {
6430
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-default-100",
6431
+ children: [
6432
+ (0, import_jsx_runtime$13.jsxs)("div", {
6433
+ className: "flex gap-1 items-center",
6434
+ children: [(0, import_jsx_runtime$13.jsx)(Eye, {
6435
+ size: 28,
6436
+ className: "text-view"
6437
+ }), (0, import_jsx_runtime$13.jsx)("span", {
6438
+ className: "text-default-400",
6439
+ children: "关注"
6440
+ })]
6441
+ }),
6442
+ (0, import_jsx_runtime$13.jsx)("div", { className: "w-full h-px bg-default-300" }),
6443
+ (0, import_jsx_runtime$13.jsx)("span", {
6444
+ className: "select-text font-medium text-4xl",
6445
+ children: props.data.following_count
6446
+ })
6447
+ ]
6448
+ }),
6449
+ (0, import_jsx_runtime$13.jsxs)("div", {
6450
+ className: "flex flex-col gap-1 items-start px-6 py-3 rounded-2xl bg-default-100",
6451
+ children: [
6452
+ (0, import_jsx_runtime$13.jsxs)("div", {
6453
+ className: "flex gap-1 items-center",
6454
+ children: [(0, import_jsx_runtime$13.jsx)(Users, {
6455
+ size: 28,
6456
+ className: "text-primary"
6457
+ }), (0, import_jsx_runtime$13.jsx)("span", {
6458
+ className: "text-default-400",
6459
+ children: "粉丝"
6460
+ })]
6461
+ }),
6462
+ (0, import_jsx_runtime$13.jsx)("div", { className: "w-full h-px bg-default-300" }),
6463
+ (0, import_jsx_runtime$13.jsx)("span", {
6464
+ className: "select-text font-medium text-4xl",
6465
+ children: props.data.fans
6466
+ })
6467
+ ]
6349
6468
  })
6350
6469
  ]
6470
+ })]
6471
+ }), (0, import_jsx_runtime$13.jsx)("div", {
6472
+ className: "flex flex-col items-center gap-4",
6473
+ children: props.qrCodeDataUrl ? (0, import_jsx_runtime$13.jsx)("img", {
6474
+ src: props.qrCodeDataUrl,
6475
+ alt: "二维码",
6476
+ className: "h-auto w-75 rounded-xl"
6477
+ }) : (0, import_jsx_runtime$13.jsx)("div", {
6478
+ className: "flex justify-center items-center rounded-xl bg-default-100 w-100 h-100",
6479
+ children: (0, import_jsx_runtime$13.jsx)("span", {
6480
+ className: "text-default-400",
6481
+ children: "二维码"
6482
+ })
6351
6483
  })
6352
- ]
6353
- })]
6354
- }), (0, import_jsx_runtime$13.jsx)("div", {
6355
- className: "flex flex-col items-center gap-4",
6356
- children: props.qrCodeDataUrl ? (0, import_jsx_runtime$13.jsx)("img", {
6357
- src: props.qrCodeDataUrl,
6358
- alt: "二维码",
6359
- className: "h-auto w-75 rounded-xl"
6360
- }) : (0, import_jsx_runtime$13.jsx)("div", {
6361
- className: "flex justify-center items-center rounded-xl bg-default-100 w-100 h-100",
6362
- children: (0, import_jsx_runtime$13.jsx)("span", {
6363
- className: "text-default-400",
6364
- children: "二维码"
6365
- })
6484
+ })]
6366
6485
  })
6367
- })]
6368
- })] });
6486
+ ] });
6487
+ };
6369
6488
  BilibiliVideoDynamic = import_react$15.memo((props) => (0, import_jsx_runtime$13.jsx)(DefaultLayout, {
6370
6489
  ...props,
6371
6490
  children: (0, import_jsx_runtime$13.jsxs)("div", {
6372
6491
  className: "p-4",
6373
6492
  children: [
6374
6493
  (0, import_jsx_runtime$13.jsx)(BilibiliVideoDynamicHeader, {}),
6375
- (0, import_jsx_runtime$13.jsx)(BilibiliVideoDynamicContent, {
6376
- text: props.data.text,
6377
- desc: props.data.desc,
6378
- image_url: props.data.image_url,
6379
- dianzan: props.data.dianzan,
6380
- pinglun: props.data.pinglun,
6381
- share: props.data.share,
6382
- coin: props.data.coin,
6383
- view: props.data.view,
6384
- duration_text: props.data.duration_text,
6385
- create_time: props.data.create_time,
6386
- dynamic_id: props.data.dynamic_id
6387
- }),
6388
- (0, import_jsx_runtime$13.jsx)(BilibiliVideoDynamicFooter, {
6389
- avatar_url: props.data.avatar_url,
6390
- frame: props.data.frame,
6391
- username: props.data.username,
6392
- user_shortid: props.data.user_shortid,
6393
- total_favorited: props.data.total_favorited,
6394
- following_count: props.data.following_count,
6395
- fans: props.data.fans,
6396
- dynamicTYPE: props.data.dynamicTYPE,
6397
- share_url: props.data.share_url,
6398
- qrCodeDataUrl: props.qrCodeDataUrl
6399
- })
6494
+ (0, import_jsx_runtime$13.jsx)(BilibiliVideoDynamicContent, { ...props }),
6495
+ (0, import_jsx_runtime$13.jsx)(BilibiliVideoDynamicFooter, { ...props })
6400
6496
  ]
6401
6497
  })
6402
6498
  }));
@@ -9881,8 +9977,8 @@ var init_changelog = __esmMin(() => {
9881
9977
  },
9882
9978
  children: (0, import_jsx_runtime$2.jsxs)("div", {
9883
9979
  className: "relative px-20 pt-5 pb-0 w-full max-w-none prose prose-lg prose-invert from-default-50 to-default-100",
9884
- children: [props.data.Tip === true ? (0, import_jsx_runtime$2.jsxs)(import_jsx_runtime$2.Fragment, { children: [
9885
- (0, import_jsx_runtime$2.jsxs)("div", {
9980
+ children: [
9981
+ props.data.Tip === true ? (0, import_jsx_runtime$2.jsxs)(import_jsx_runtime$2.Fragment, { children: [(0, import_jsx_runtime$2.jsxs)("div", {
9886
9982
  className: "inline-block relative mt-20",
9887
9983
  children: [
9888
9984
  (0, import_jsx_runtime$2.jsx)("div", { className: "absolute inset-0 bg-black rounded-2xl opacity-50 blur-xl translate-y-6 -z-10" }),
@@ -9899,166 +9995,246 @@ var init_changelog = __esmMin(() => {
9899
9995
  })
9900
9996
  })
9901
9997
  ]
9998
+ }), (0, import_jsx_runtime$2.jsxs)("div", {
9999
+ className: "py-12 pb-6",
10000
+ children: [(0, import_jsx_runtime$2.jsx)("div", {
10001
+ className: "text-4xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
10002
+ children: "以下任意方式均可更新"
10003
+ }), (0, import_jsx_runtime$2.jsxs)("div", {
10004
+ className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
10005
+ children: [
10006
+ (0, import_jsx_runtime$2.jsxs)("div", {
10007
+ className: "flex items-center gap-5",
10008
+ children: [
10009
+ (0, import_jsx_runtime$2.jsx)("span", {
10010
+ className: "text-warning text-[1.2em]",
10011
+ children: "•"
10012
+ }),
10013
+ (0, import_jsx_runtime$2.jsx)("span", { children: "引用回复此消息包含" }),
10014
+ (0, import_jsx_runtime$2.jsx)(GlowText, {
10015
+ className: "inline-block text-[1.15em] font-bold text-warning",
10016
+ blurRadius: 15,
10017
+ glowStrength: 2,
10018
+ scale: 1.1,
10019
+ children: "更新"
10020
+ }),
10021
+ (0, import_jsx_runtime$2.jsx)("span", { children: "字眼" })
10022
+ ]
10023
+ }),
10024
+ (0, import_jsx_runtime$2.jsxs)("div", {
10025
+ className: "flex items-center gap-5",
10026
+ children: [
10027
+ (0, import_jsx_runtime$2.jsx)("span", {
10028
+ className: "text-warning text-[1.2em]",
10029
+ children: "•"
10030
+ }),
10031
+ (0, import_jsx_runtime$2.jsx)("span", { children: "Karin 的" }),
10032
+ (0, import_jsx_runtime$2.jsx)(GlowText, {
10033
+ blurRadius: 10,
10034
+ glowStrength: 1.5,
10035
+ scale: 1.05,
10036
+ children: (0, import_jsx_runtime$2.jsx)(code_default, {
10037
+ radius: "lg",
10038
+ color: "warning",
10039
+ className: "text-[0.9em]",
10040
+ children: "WebUI"
10041
+ })
10042
+ }),
10043
+ (0, import_jsx_runtime$2.jsx)("span", { children: "→" }),
10044
+ (0, import_jsx_runtime$2.jsx)(GlowText, {
10045
+ blurRadius: 10,
10046
+ glowStrength: 1.5,
10047
+ scale: 1.05,
10048
+ children: (0, import_jsx_runtime$2.jsx)(code_default, {
10049
+ radius: "lg",
10050
+ color: "warning",
10051
+ className: "text-[0.9em]",
10052
+ children: "插件管理"
10053
+ })
10054
+ }),
10055
+ (0, import_jsx_runtime$2.jsx)("span", { children: "→" }),
10056
+ (0, import_jsx_runtime$2.jsx)(GlowText, {
10057
+ blurRadius: 10,
10058
+ glowStrength: 1.5,
10059
+ scale: 1.05,
10060
+ children: (0, import_jsx_runtime$2.jsx)(code_default, {
10061
+ radius: "lg",
10062
+ color: "warning",
10063
+ className: "text-[0.9em]",
10064
+ children: "已安装"
10065
+ })
10066
+ })
10067
+ ]
10068
+ }),
10069
+ (0, import_jsx_runtime$2.jsxs)("div", {
10070
+ className: "flex items-center gap-5",
10071
+ children: [
10072
+ (0, import_jsx_runtime$2.jsx)("span", {
10073
+ className: "text-warning text-[1.2em]",
10074
+ children: "•"
10075
+ }),
10076
+ (0, import_jsx_runtime$2.jsx)("span", { children: "Karin 目录运行" }),
10077
+ (0, import_jsx_runtime$2.jsx)(GlowText, {
10078
+ blurRadius: 10,
10079
+ glowStrength: 1.5,
10080
+ scale: 1.05,
10081
+ children: (0, import_jsx_runtime$2.jsxs)(code_default, {
10082
+ radius: "lg",
10083
+ color: "warning",
10084
+ className: "text-[0.85em] whitespace-nowrap",
10085
+ children: [
10086
+ "pnpm add karin-plugin-kkk@",
10087
+ props.data.remoteVersion,
10088
+ " -w"
10089
+ ]
10090
+ })
10091
+ })
10092
+ ]
10093
+ })
10094
+ ]
10095
+ })]
10096
+ })] }) : null,
10097
+ (0, import_jsx_runtime$2.jsx)("div", {
10098
+ className: "changelog-content",
10099
+ children: (0, import_jsx_runtime$2.jsx)(Markdown, {
10100
+ rehypePlugins: [rehypeHighlight],
10101
+ components: {
10102
+ h1: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h1", {
10103
+ className: "text-[5.28em] font-semibold mb-8 pb-2 border-b-2 border-default-400 text-default-900",
10104
+ ...props$1,
10105
+ children
10106
+ }),
10107
+ h2: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsxs)("div", {
10108
+ className: "relative mt-20 mb-5",
10109
+ children: [
10110
+ (0, import_jsx_runtime$2.jsx)("div", {
10111
+ className: "absolute -top-13 left-0 text-[11em] font-black text-default-200/50 select-none pointer-events-none uppercase leading-none",
10112
+ "aria-hidden": "true",
10113
+ children: typeof children === "string" ? children : "H2"
10114
+ }),
10115
+ (0, import_jsx_runtime$2.jsx)("h2", {
10116
+ className: "ml-15 relative z-10 text-[3.8em] pb-2 text-default-900 font-medium",
10117
+ ...props$1,
10118
+ children
10119
+ }),
10120
+ (0, import_jsx_runtime$2.jsx)("div", { className: "w-full border-b border-default-400" })
10121
+ ]
10122
+ }),
10123
+ h3: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsxs)("h3", {
10124
+ className: "flex items-baseline gap-3 text-[3.3em] font-semibold mb-6 text-default-900",
10125
+ ...props$1,
10126
+ children: [children, (0, import_jsx_runtime$2.jsx)(CornerDownLeft, {
10127
+ strokeWidth: 2.5,
10128
+ className: "w-[1em] h-[1em] text-default-200"
10129
+ })]
10130
+ }),
10131
+ h4: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h4", {
10132
+ className: "text-[2.64em] font-semibold mb-5 text-default-900",
10133
+ ...props$1,
10134
+ children
10135
+ }),
10136
+ h5: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h5", {
10137
+ className: "text-[2.38em] font-semibold mb-5 text-default-900",
10138
+ ...props$1,
10139
+ children
10140
+ }),
10141
+ h6: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h6", {
10142
+ className: "text-[2.11em] font-semibold mb-4 text-default-600",
10143
+ ...props$1,
10144
+ children
10145
+ }),
10146
+ p: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("p", {
10147
+ className: "text-[2.64em] leading-[1.75] mb-[2.64em] text-default-900",
10148
+ ...props$1,
10149
+ children
10150
+ }),
10151
+ ul: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("ul", {
10152
+ className: "pl-[5em] mb-[2em] list-disc text-default-900",
10153
+ ...props$1,
10154
+ children
10155
+ }),
10156
+ ol: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("ol", {
10157
+ className: "pl-[3.6em] mb-[1.8em] list-decimal text-default-900",
10158
+ ...props$1,
10159
+ children
10160
+ }),
10161
+ li: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("li", {
10162
+ className: "text-[2.6em] leading-[1.6] text-default-900",
10163
+ ...props$1,
10164
+ children
10165
+ }),
10166
+ blockquote: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("blockquote", {
10167
+ className: "border-l-4 border-default-500 pl-[1.8em] py-[0.9em] mb-[1.8em] text-default-700 bg-default-100",
10168
+ ...props$1,
10169
+ children
10170
+ }),
10171
+ code: ({ children }) => (0, import_jsx_runtime$2.jsx)(code_default, {
10172
+ radius: "lg",
10173
+ color: "warning",
10174
+ className: "inline align-text-bottom leading-inherit text-[0.8em] whitespace-normal break-all box-decoration-slice",
10175
+ children
10176
+ }),
10177
+ pre: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("pre", {
10178
+ className: "p-[1.8em] mb-[1.8em] bg-default-200 rounded overflow-x-auto font-mono",
10179
+ ...props$1,
10180
+ children
10181
+ }),
10182
+ a: ({ children, href, ...props$1 }) => (0, import_jsx_runtime$2.jsxs)("a", {
10183
+ className: "inline-flex gap-3 items-baseline cursor-pointer text-warning hover:underline",
10184
+ onClick: (e) => e.preventDefault(),
10185
+ ...props$1,
10186
+ children: [(0, import_jsx_runtime$2.jsx)(GlowText, {
10187
+ blurRadius: 10,
10188
+ glowStrength: 3,
10189
+ scale: 1.2,
10190
+ children
10191
+ }), (0, import_jsx_runtime$2.jsx)(GlowText, {
10192
+ blurRadius: 10,
10193
+ glowStrength: 3,
10194
+ scale: 1.2,
10195
+ children: (0, import_jsx_runtime$2.jsx)(ExternalLink, { className: "w-[1.1em] h-[1.1em] -mb-[0.1em]" })
10196
+ })]
10197
+ }),
10198
+ img: ({ ...props$1 }) => (0, import_jsx_runtime$2.jsx)("img", {
10199
+ className: "max-w-full h-auto rounded",
10200
+ ...props$1
10201
+ }),
10202
+ table: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("table", {
10203
+ className: "w-full border-collapse mb-[1.8em] text-default-900",
10204
+ ...props$1,
10205
+ children
10206
+ }),
10207
+ th: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("th", {
10208
+ className: "px-5 py-3 font-semibold text-left border text-default-900 bg-default-200 border-default-400",
10209
+ ...props$1,
10210
+ children
10211
+ }),
10212
+ td: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("td", {
10213
+ className: "px-5 py-3 border text-default-900 border-default-400",
10214
+ ...props$1,
10215
+ children
10216
+ })
10217
+ },
10218
+ children: props.data?.markdown ?? ""
10219
+ })
9902
10220
  }),
9903
- (0, import_jsx_runtime$2.jsxs)("div", {
9904
- className: "py-16 pb-4 text-5xl leading-relaxed text-center",
9905
- children: [
9906
- "引用回复此消息包含",
9907
- (0, import_jsx_runtime$2.jsx)("span", {
9908
- className: "text-7xl",
9909
- children: "「"
9910
- }),
9911
- (0, import_jsx_runtime$2.jsx)(GlowText, {
9912
- className: "text-7xl font-bold text-warning",
9913
- blurRadius: 20,
9914
- glowStrength: 2,
9915
- scale: 1.2,
9916
- children: "更新"
9917
- }),
9918
- (0, import_jsx_runtime$2.jsx)("span", {
9919
- className: "text-7xl",
9920
- children: "」"
9921
- }),
9922
- "字眼,即可开始更新"
9923
- ]
9924
- }),
9925
- props.data.buildTime && (0, import_jsx_runtime$2.jsxs)("div", {
9926
- className: "flex gap-4 opacity-50",
10221
+ props.data.Tip === true && props.data.buildTime && (0, import_jsx_runtime$2.jsxs)("div", {
10222
+ className: "flex gap-8 justify-center py-12 mt-16 border-t-2 border-default-300 opacity-60",
9927
10223
  children: [(0, import_jsx_runtime$2.jsxs)("div", {
9928
- className: "text-4xl ml-17",
10224
+ className: "text-4xl",
9929
10225
  children: ["更新频道:", (0, import_jsx_runtime$2.jsx)("span", {
9930
10226
  className: "font-bold text-warning-200",
9931
10227
  children: " 正式版"
9932
10228
  })]
9933
10229
  }), (0, import_jsx_runtime$2.jsxs)("div", {
9934
- className: "text-4xl ml-15",
10230
+ className: "text-4xl",
9935
10231
  children: ["编译于:", (0, import_jsx_runtime$2.jsxs)("span", {
9936
10232
  className: "font-bold text-warning-200",
9937
10233
  children: [" ", props.data.buildTime]
9938
10234
  })]
9939
10235
  })]
9940
10236
  })
9941
- ] }) : null, (0, import_jsx_runtime$2.jsx)(Markdown, {
9942
- rehypePlugins: [rehypeHighlight],
9943
- components: {
9944
- h1: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h1", {
9945
- className: "text-[5.28em] font-semibold mb-8 pb-2 border-b-2 border-default-400 text-default-900",
9946
- ...props$1,
9947
- children
9948
- }),
9949
- h2: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsxs)("div", {
9950
- className: "relative mt-20 mb-5",
9951
- children: [
9952
- (0, import_jsx_runtime$2.jsx)("div", {
9953
- className: "absolute -top-13 left-0 text-[11em] font-black text-default-200/50 select-none pointer-events-none uppercase leading-none",
9954
- "aria-hidden": "true",
9955
- children: typeof children === "string" ? children : "H2"
9956
- }),
9957
- (0, import_jsx_runtime$2.jsx)("h2", {
9958
- className: "ml-15 relative z-10 text-[3.8em] pb-2 text-default-900 font-medium",
9959
- ...props$1,
9960
- children
9961
- }),
9962
- (0, import_jsx_runtime$2.jsx)("div", { className: "w-full border-b border-default-400" })
9963
- ]
9964
- }),
9965
- h3: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsxs)("h3", {
9966
- className: "flex items-baseline gap-3 text-[3.3em] font-semibold mb-6 text-default-900",
9967
- ...props$1,
9968
- children: [children, (0, import_jsx_runtime$2.jsx)(CornerDownLeft, {
9969
- strokeWidth: 2.5,
9970
- className: "w-[1em] h-[1em] text-default-200"
9971
- })]
9972
- }),
9973
- h4: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h4", {
9974
- className: "text-[2.64em] font-semibold mb-5 text-default-900",
9975
- ...props$1,
9976
- children
9977
- }),
9978
- h5: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h5", {
9979
- className: "text-[2.38em] font-semibold mb-5 text-default-900",
9980
- ...props$1,
9981
- children
9982
- }),
9983
- h6: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("h6", {
9984
- className: "text-[2.11em] font-semibold mb-4 text-default-600",
9985
- ...props$1,
9986
- children
9987
- }),
9988
- p: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("p", {
9989
- className: "text-[2.64em] leading-[1.75] mb-[2.64em] text-default-900",
9990
- ...props$1,
9991
- children
9992
- }),
9993
- ul: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("ul", {
9994
- className: "pl-[5em] mb-[2em] list-disc text-default-900",
9995
- ...props$1,
9996
- children
9997
- }),
9998
- ol: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("ol", {
9999
- className: "pl-[3.6em] mb-[1.8em] list-decimal text-default-900",
10000
- ...props$1,
10001
- children
10002
- }),
10003
- li: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("li", {
10004
- className: "text-[2.6em] leading-[1.6] text-default-900",
10005
- ...props$1,
10006
- children
10007
- }),
10008
- blockquote: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("blockquote", {
10009
- className: "border-l-4 border-default-500 pl-[1.8em] py-[0.9em] mb-[1.8em] text-default-700 bg-default-100",
10010
- ...props$1,
10011
- children
10012
- }),
10013
- code: ({ children }) => (0, import_jsx_runtime$2.jsx)(code_default, {
10014
- radius: "lg",
10015
- color: "warning",
10016
- className: "inline align-text-bottom leading-inherit text-[0.8em] whitespace-normal break-all box-decoration-slice",
10017
- children
10018
- }),
10019
- pre: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("pre", {
10020
- className: "p-[1.8em] mb-[1.8em] bg-default-200 rounded overflow-x-auto font-mono",
10021
- ...props$1,
10022
- children
10023
- }),
10024
- a: ({ children, href, ...props$1 }) => (0, import_jsx_runtime$2.jsxs)("a", {
10025
- className: "inline-flex gap-3 items-baseline cursor-pointer text-warning hover:underline",
10026
- onClick: (e) => e.preventDefault(),
10027
- ...props$1,
10028
- children: [(0, import_jsx_runtime$2.jsx)(GlowText, {
10029
- blurRadius: 10,
10030
- glowStrength: 3,
10031
- scale: 1.2,
10032
- children
10033
- }), (0, import_jsx_runtime$2.jsx)(GlowText, {
10034
- blurRadius: 10,
10035
- glowStrength: 3,
10036
- scale: 1.2,
10037
- children: (0, import_jsx_runtime$2.jsx)(ExternalLink, { className: "w-[1.1em] h-[1.1em] -mb-[0.1em]" })
10038
- })]
10039
- }),
10040
- img: ({ ...props$1 }) => (0, import_jsx_runtime$2.jsx)("img", {
10041
- className: "max-w-full h-auto rounded",
10042
- ...props$1
10043
- }),
10044
- table: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("table", {
10045
- className: "w-full border-collapse mb-[1.8em] text-default-900",
10046
- ...props$1,
10047
- children
10048
- }),
10049
- th: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("th", {
10050
- className: "px-5 py-3 font-semibold text-left border text-default-900 bg-default-200 border-default-400",
10051
- ...props$1,
10052
- children
10053
- }),
10054
- td: ({ children, ...props$1 }) => (0, import_jsx_runtime$2.jsx)("td", {
10055
- className: "px-5 py-3 border text-default-900 border-default-400",
10056
- ...props$1,
10057
- children
10058
- })
10059
- },
10060
- children: props.data?.markdown ?? ""
10061
- })]
10237
+ ]
10062
10238
  })
10063
10239
  }));
10064
10240
  Changelog.displayName = "Changelog";
@@ -10084,7 +10260,7 @@ var init_VersionWarning = __esmMin(() => {
10084
10260
  className: "relative overflow-hidden",
10085
10261
  style: {
10086
10262
  backgroundColor: bgColor,
10087
- height: "2100px"
10263
+ height: "2450px"
10088
10264
  },
10089
10265
  children: [
10090
10266
  (0, import_jsx_runtime$1.jsxs)("div", {
@@ -10179,7 +10355,7 @@ var init_VersionWarning = __esmMin(() => {
10179
10355
  (0, import_jsx_runtime$1.jsx)("h1", {
10180
10356
  className: "text-[180px] font-black leading-none",
10181
10357
  style: { color: accentColor },
10182
- children: "请升级"
10358
+ children: "请升级你的"
10183
10359
  }),
10184
10360
  (0, import_jsx_runtime$1.jsx)("h1", {
10185
10361
  className: "text-[120px] font-black leading-none",
@@ -10317,7 +10493,7 @@ var init_VersionWarning = __esmMin(() => {
10317
10493
  (0, import_jsx_runtime$1.jsx)("span", {
10318
10494
  className: "text-[28px] font-medium",
10319
10495
  style: { color: mutedColor },
10320
- children: "需要的版本"
10496
+ children: "需要/建议的版本"
10321
10497
  }),
10322
10498
  (0, import_jsx_runtime$1.jsx)(chip_default, {
10323
10499
  className: "text-lg font-bold",
@@ -10341,37 +10517,188 @@ var init_VersionWarning = __esmMin(() => {
10341
10517
  className: "h-0.5 rounded-full mb-10",
10342
10518
  style: { backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(180,83,9,0.15)" }
10343
10519
  }),
10344
- (0, import_jsx_runtime$1.jsxs)("div", { children: [(0, import_jsx_runtime$1.jsxs)("div", {
10345
- className: "flex items-center space-x-4 mb-4",
10346
- children: [(0, import_jsx_runtime$1.jsx)("svg", {
10347
- className: "w-5 h-5",
10520
+ (0, import_jsx_runtime$1.jsxs)("div", {
10521
+ className: "space-y-20",
10522
+ children: [(0, import_jsx_runtime$1.jsxs)("div", { children: [(0, import_jsx_runtime$1.jsxs)("div", {
10523
+ className: "flex items-center space-x-4 mb-6",
10524
+ children: [
10525
+ (0, import_jsx_runtime$1.jsx)("div", {
10526
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
10527
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
10528
+ children: (0, import_jsx_runtime$1.jsx)("span", {
10529
+ className: "text-[28px] font-black",
10530
+ style: { color: accentColor },
10531
+ children: "1"
10532
+ })
10533
+ }),
10534
+ (0, import_jsx_runtime$1.jsxs)("svg", {
10535
+ className: "w-8 h-8",
10536
+ viewBox: "0 0 24 24",
10537
+ fill: "none",
10538
+ stroke: mutedColor,
10539
+ strokeWidth: "2",
10540
+ children: [(0, import_jsx_runtime$1.jsx)("rect", {
10541
+ x: "3",
10542
+ y: "3",
10543
+ width: "18",
10544
+ height: "18",
10545
+ rx: "2",
10546
+ strokeLinecap: "round",
10547
+ strokeLinejoin: "round"
10548
+ }), (0, import_jsx_runtime$1.jsx)("path", {
10549
+ d: "M9 3v18M3 9h18M3 15h18",
10550
+ strokeLinecap: "round",
10551
+ strokeLinejoin: "round"
10552
+ })]
10553
+ }),
10554
+ (0, import_jsx_runtime$1.jsx)("span", {
10555
+ className: "text-[32px] font-bold",
10556
+ style: { color: mutedColor },
10557
+ children: "Web 控制台更新"
10558
+ }),
10559
+ (0, import_jsx_runtime$1.jsx)(chip_default, {
10560
+ className: "text-[20px] font-semibold px-4",
10561
+ style: {
10562
+ backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
10563
+ color: accentColor
10564
+ },
10565
+ size: "lg",
10566
+ children: "推荐"
10567
+ })
10568
+ ]
10569
+ }), (0, import_jsx_runtime$1.jsxs)("div", {
10570
+ className: "ml-14 space-y-4",
10571
+ children: [
10572
+ (0, import_jsx_runtime$1.jsxs)("div", {
10573
+ className: "flex items-start space-x-4",
10574
+ children: [(0, import_jsx_runtime$1.jsx)("div", {
10575
+ className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
10576
+ style: { backgroundColor: mutedColor }
10577
+ }), (0, import_jsx_runtime$1.jsx)("span", {
10578
+ className: "text-[28px] leading-relaxed",
10579
+ style: { color: secondaryColor },
10580
+ children: "访问 Karin Web 控制台首页,查看 Karin 版本信息"
10581
+ })]
10582
+ }),
10583
+ (0, import_jsx_runtime$1.jsxs)("div", {
10584
+ className: "flex items-start space-x-4",
10585
+ children: [(0, import_jsx_runtime$1.jsx)("div", {
10586
+ className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
10587
+ style: { backgroundColor: mutedColor }
10588
+ }), (0, import_jsx_runtime$1.jsx)("span", {
10589
+ className: "text-[28px] leading-relaxed",
10590
+ style: { color: secondaryColor },
10591
+ children: "当有新版本时会高亮提示,点击查看更新日志"
10592
+ })]
10593
+ }),
10594
+ (0, import_jsx_runtime$1.jsxs)("div", {
10595
+ className: "flex items-start space-x-4",
10596
+ children: [(0, import_jsx_runtime$1.jsx)("div", {
10597
+ className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
10598
+ style: { backgroundColor: mutedColor }
10599
+ }), (0, import_jsx_runtime$1.jsx)("span", {
10600
+ className: "text-[28px] leading-relaxed",
10601
+ style: { color: secondaryColor },
10602
+ children: "点击「更新」按钮,系统将自动完成更新并重启"
10603
+ })]
10604
+ })
10605
+ ]
10606
+ })] }), (0, import_jsx_runtime$1.jsxs)("div", { children: [(0, import_jsx_runtime$1.jsxs)("div", {
10607
+ className: "flex items-center space-x-4 mb-6",
10608
+ children: [
10609
+ (0, import_jsx_runtime$1.jsx)("div", {
10610
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
10611
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
10612
+ children: (0, import_jsx_runtime$1.jsx)("span", {
10613
+ className: "text-[28px] font-black",
10614
+ style: { color: accentColor },
10615
+ children: "2"
10616
+ })
10617
+ }),
10618
+ (0, import_jsx_runtime$1.jsx)("svg", {
10619
+ className: "w-8 h-8",
10620
+ viewBox: "0 0 24 24",
10621
+ fill: "none",
10622
+ stroke: mutedColor,
10623
+ strokeWidth: "2",
10624
+ children: (0, import_jsx_runtime$1.jsx)("path", {
10625
+ d: "M4 17l6-6-6-6M12 19h8",
10626
+ strokeLinecap: "round",
10627
+ strokeLinejoin: "round"
10628
+ })
10629
+ }),
10630
+ (0, import_jsx_runtime$1.jsx)("span", {
10631
+ className: "text-[32px] font-bold",
10632
+ style: { color: mutedColor },
10633
+ children: "命令行更新"
10634
+ })
10635
+ ]
10636
+ }), (0, import_jsx_runtime$1.jsxs)("div", {
10637
+ className: "ml-14 space-y-4",
10638
+ children: [
10639
+ (0, import_jsx_runtime$1.jsx)("p", {
10640
+ className: "text-[28px]",
10641
+ style: { color: secondaryColor },
10642
+ children: "在 Karin 根目录下执行以下命令"
10643
+ }),
10644
+ (0, import_jsx_runtime$1.jsx)("div", {
10645
+ className: "rounded-xl p-6",
10646
+ style: { backgroundColor: isDark ? "rgba(0,0,0,0.4)" : "rgba(255,255,255,0.7)" },
10647
+ children: (0, import_jsx_runtime$1.jsxs)("code", {
10648
+ className: "text-[40px] font-mono font-bold block",
10649
+ style: { color: accentColor },
10650
+ children: [
10651
+ "pnpm add node-karin@",
10652
+ props.data.requireVersion,
10653
+ " -w"
10654
+ ]
10655
+ })
10656
+ }),
10657
+ (0, import_jsx_runtime$1.jsx)("p", {
10658
+ className: "text-[28px] opacity-80",
10659
+ style: { color: secondaryColor },
10660
+ children: "更新完成后手动重启 Karin 即可"
10661
+ })
10662
+ ]
10663
+ })] })]
10664
+ }),
10665
+ (0, import_jsx_runtime$1.jsx)("div", {
10666
+ className: "h-0.5 rounded-full my-10",
10667
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(180,83,9,0.15)" }
10668
+ }),
10669
+ (0, import_jsx_runtime$1.jsxs)("div", {
10670
+ className: "rounded-2xl p-6 flex items-start space-x-5",
10671
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.08)" : "rgba(194,65,12,0.08)" },
10672
+ children: [(0, import_jsx_runtime$1.jsxs)("svg", {
10673
+ className: "w-10 h-10 mt-1 flex-shrink-0",
10348
10674
  viewBox: "0 0 24 24",
10349
- fill: "none",
10350
- stroke: mutedColor,
10351
- strokeWidth: "2",
10352
- children: (0, import_jsx_runtime$1.jsx)("path", {
10353
- d: "M4 17l6-6-6-6M12 19h8",
10354
- strokeLinecap: "round",
10355
- strokeLinejoin: "round"
10356
- })
10357
- }), (0, import_jsx_runtime$1.jsx)("span", {
10358
- className: "text-[22px] font-medium",
10359
- style: { color: mutedColor },
10360
- children: "根目录下执行以下命令以升级"
10675
+ fill: accentColor,
10676
+ children: [(0, import_jsx_runtime$1.jsx)("path", { d: "M12 2L22 20H2L12 2Z" }), (0, import_jsx_runtime$1.jsx)("path", {
10677
+ d: "M12 9v4M12 17h.01",
10678
+ stroke: bgColor,
10679
+ strokeWidth: "2",
10680
+ strokeLinecap: "round"
10681
+ })]
10682
+ }), (0, import_jsx_runtime$1.jsxs)("div", {
10683
+ className: "flex-1",
10684
+ children: [(0, import_jsx_runtime$1.jsx)("p", {
10685
+ className: "text-[28px] font-semibold mb-2",
10686
+ style: { color: accentColor },
10687
+ children: "版本兼容性提示"
10688
+ }), (0, import_jsx_runtime$1.jsxs)("p", {
10689
+ className: "text-[26px] leading-relaxed",
10690
+ style: { color: secondaryColor },
10691
+ children: [
10692
+ "当前插件版本基于 ",
10693
+ (0, import_jsx_runtime$1.jsxs)("span", {
10694
+ className: "font-bold font-mono",
10695
+ style: { color: accentColor },
10696
+ children: ["node-karin v", props.data.requireVersion]
10697
+ }),
10698
+ " 开发,低版本运行时可能出现功能异常或兼容性问题,请及时更新以获得最佳体验"
10699
+ ]
10700
+ })]
10361
10701
  })]
10362
- }), (0, import_jsx_runtime$1.jsxs)("code", {
10363
- className: "text-[40px] font-mono font-bold",
10364
- style: { color: accentColor },
10365
- children: [
10366
- "pnpm add node-karin@",
10367
- props.data.requireVersion,
10368
- " -w"
10369
- ]
10370
- })] }),
10371
- (0, import_jsx_runtime$1.jsx)("p", {
10372
- className: "text-[28px] mt-10 opacity-70",
10373
- style: { color: secondaryColor },
10374
- children: "插件基于较新版本开发,低版本运行可能存在兼容问题"
10375
10702
  })
10376
10703
  ]
10377
10704
  })
@@ -11137,7 +11464,10 @@ var init_DevDataManager = __esmMin(() => {
11137
11464
  if (!fs.existsSync(dirPath)) fs.mkdirSync(dirPath, { recursive: true });
11138
11465
  }
11139
11466
  static getTemplateDataDir(platform, templateName) {
11140
- if (!devDataDir) throw new Error("karin-plugin-kkk 仅在环境变量 NODE_ENV 为 production 时可用");
11467
+ if (!devDataDir) {
11468
+ logger$1.debug("DevDataManager: 当前不在开发环境,数据保存功能将被禁用");
11469
+ return "";
11470
+ }
11141
11471
  const dir = path.join(devDataDir, platform, templateName);
11142
11472
  this.ensureDir(dir);
11143
11473
  return dir;
@@ -11190,6 +11520,7 @@ var init_DevDataManager = __esmMin(() => {
11190
11520
  if (!this.isDevEnvironment()) return false;
11191
11521
  try {
11192
11522
  const dir = this.getTemplateDataDir(platform, templateName);
11523
+ if (!dir) return false;
11193
11524
  const defaultFilePath = path.join(dir, "default.json");
11194
11525
  let versionsData = this.readVersionsFile(dir);
11195
11526
  if (fs.existsSync(defaultFilePath)) {
@@ -11298,18 +11629,18 @@ var init_main = __esmMin(() => {
11298
11629
  packageDir;
11299
11630
  NODE_ENV;
11300
11631
  static initialized = false;
11632
+ isDevelopment;
11301
11633
  constructor() {
11302
11634
  this.NODE_ENV = process.env.NODE_ENV || "production";
11635
+ this.isDevelopment = this.NODE_ENV === "development";
11303
11636
  this.packageDir = this.getPackageDir();
11304
11637
  ResourcePathManager.initialized = true;
11305
11638
  }
11306
11639
  getPackageDir() {
11307
11640
  const cwd = process.cwd();
11308
- switch (this.NODE_ENV) {
11309
- case "development": return this.findDevelopmentDir(cwd);
11310
- case "production":
11311
- default: return this.getPackageDirFromImportMeta();
11312
- }
11641
+ const metaDir = this.getPackageDirFromImportMeta();
11642
+ if (this.isDevelopment) return this.findDevelopmentDir(cwd) || metaDir;
11643
+ return metaDir;
11313
11644
  }
11314
11645
  findDevelopmentDir(cwd) {
11315
11646
  let currentDir = cwd;
@@ -11321,7 +11652,8 @@ var init_main = __esmMin(() => {
11321
11652
  }
11322
11653
  currentDir = path.dirname(currentDir);
11323
11654
  }
11324
- return path.join(path.dirname(cwd), "render");
11655
+ if (!ResourcePathManager.initialized) logger$1.debug("开发模式:未找到 render 目录,将使用生产模式路径");
11656
+ return null;
11325
11657
  }
11326
11658
  getPackageDirFromImportMeta() {
11327
11659
  try {
@@ -11389,21 +11721,86 @@ var init_main = __esmMin(() => {
11389
11721
  return hasPluginsInPath && pluginResourcesExists && npmPackageExists;
11390
11722
  }
11391
11723
  getResourcePaths() {
11392
- switch (this.NODE_ENV) {
11393
- case "development": return {
11394
- cssDir: path.join(path.dirname(this.packageDir), "core", "lib"),
11395
- imageDir: path.join(path.dirname(this.packageDir), "core/resources/image")
11396
- };
11397
- case "production":
11398
- default: if (this.isPluginMode()) return {
11399
- cssDir: fs.existsSync(path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "lib")) ? path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "lib") : path.join(this.packageDir, "lib"),
11400
- imageDir: path.join(this.packageDir, "resources", "image")
11401
- };
11402
- else return {
11403
- cssDir: path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "lib"),
11404
- imageDir: path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "resources", "image")
11405
- };
11724
+ const possiblePaths = this.getPossibleResourcePaths();
11725
+ let cssDir = "";
11726
+ for (const cssPath of possiblePaths.cssPaths) if (fs.existsSync(cssPath)) {
11727
+ cssDir = cssPath;
11728
+ if (!ResourcePathManager.initialized) logger$1.debug("找到 CSS 目录:", cssDir);
11729
+ break;
11406
11730
  }
11731
+ let imageDir = "";
11732
+ for (const imagePath of possiblePaths.imagePaths) if (fs.existsSync(imagePath)) {
11733
+ imageDir = imagePath;
11734
+ if (!ResourcePathManager.initialized) logger$1.debug("找到图片目录:", imageDir);
11735
+ break;
11736
+ }
11737
+ if (!cssDir) {
11738
+ cssDir = possiblePaths.cssPaths[0];
11739
+ if (!ResourcePathManager.initialized) logger$1.warn("未找到 CSS 目录,使用默认路径:", cssDir);
11740
+ }
11741
+ if (!imageDir) {
11742
+ imageDir = possiblePaths.imagePaths[0];
11743
+ if (!ResourcePathManager.initialized) logger$1.warn("未找到图片目录,使用默认路径:", imageDir);
11744
+ }
11745
+ return {
11746
+ cssDir,
11747
+ imageDir
11748
+ };
11749
+ }
11750
+ getPossibleResourcePaths() {
11751
+ const cssPaths = [];
11752
+ const imagePaths = [];
11753
+ const karinPluginPath = this.findKarinPluginKkkPackage();
11754
+ if (karinPluginPath) {
11755
+ cssPaths.push(path.join(karinPluginPath, "lib"));
11756
+ imagePaths.push(path.join(karinPluginPath, "resources", "image"));
11757
+ }
11758
+ if (this.isDevelopment) {
11759
+ const parentDir = path.dirname(this.packageDir);
11760
+ cssPaths.push(path.join(parentDir, "core", "lib"), path.join(this.packageDir, "../core/lib"));
11761
+ imagePaths.push(path.join(parentDir, "core", "resources", "image"), path.join(this.packageDir, "../core/resources/image"));
11762
+ }
11763
+ if (this.isPluginMode()) {
11764
+ cssPaths.push(path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "lib"), path.join(this.packageDir, "lib"));
11765
+ imagePaths.push(path.join(this.packageDir, "resources", "image"));
11766
+ }
11767
+ cssPaths.push(path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "lib"), path.join(this.packageDir, "lib"), path.join(this.packageDir, "dist"));
11768
+ imagePaths.push(path.join(this.packageDir, "node_modules", "karin-plugin-kkk", "resources", "image"), path.join(this.packageDir, "resources", "image"), path.join(this.packageDir, "public", "image"));
11769
+ return {
11770
+ cssPaths,
11771
+ imagePaths
11772
+ };
11773
+ }
11774
+ findKarinPluginKkkPackage() {
11775
+ try {
11776
+ const currentModuleUrl = import.meta.url;
11777
+ const currentModulePath = new URL(currentModuleUrl).pathname;
11778
+ const normalizedPath = process.platform === "win32" ? currentModulePath.slice(1) : currentModulePath;
11779
+ let currentDir = path.dirname(normalizedPath);
11780
+ for (let i = 0; i < 10; i++) {
11781
+ const packageJsonPath = path.join(currentDir, "package.json");
11782
+ if (fs.existsSync(packageJsonPath)) try {
11783
+ if (JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")).name === "karin-plugin-kkk") {
11784
+ if (!ResourcePathManager.initialized) logger$1.debug("找到 karin-plugin-kkk 包:", currentDir);
11785
+ return currentDir;
11786
+ }
11787
+ } catch {}
11788
+ const nodeModulesPath = path.join(currentDir, "node_modules", "karin-plugin-kkk");
11789
+ if (fs.existsSync(nodeModulesPath)) {
11790
+ const packageJsonPath$1 = path.join(nodeModulesPath, "package.json");
11791
+ if (fs.existsSync(packageJsonPath$1)) {
11792
+ if (!ResourcePathManager.initialized) logger$1.debug("在 node_modules 中找到 karin-plugin-kkk:", nodeModulesPath);
11793
+ return nodeModulesPath;
11794
+ }
11795
+ }
11796
+ const parentDir = path.dirname(currentDir);
11797
+ if (parentDir === currentDir) break;
11798
+ currentDir = parentDir;
11799
+ }
11800
+ } catch (error) {
11801
+ if (!ResourcePathManager.initialized) logger$1.debug("查找 karin-plugin-kkk 包失败:", error);
11802
+ }
11803
+ return null;
11407
11804
  }
11408
11805
  };
11409
11806
  HtmlWrapper = class {
@@ -11421,7 +11818,7 @@ var init_main = __esmMin(() => {
11421
11818
  const fontRelativePath = path.relative(htmlDir, fontDir).replace(/\\/g, "/");
11422
11819
  const bilifontUrl = path.join(fontRelativePath, "bilifont/font.css").replace(/\\/g, "/");
11423
11820
  const monoFontUrl = path.join(fontRelativePath, "mono/font.css").replace(/\\/g, "/");
11424
- const processedHtml = htmlContent.replace(/src="\/image\//g, `src="${imageRelativePath}/`);
11821
+ let processedHtml = htmlContent.replace(/src="\/image\//g, `src="${imageRelativePath}/`).replace(/src='\/image\//g, `src='${imageRelativePath}/`).replace(/src="image\//g, `src="${imageRelativePath}/`);
11425
11822
  return `\n <!DOCTYPE html>\n <html lang="zh-CN">\n <head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width">\n <link rel="stylesheet" href="${bilifontUrl}">\n <link rel="stylesheet" href="${monoFontUrl}">\n <link rel="stylesheet" href="${cssUrl}">\n <style>\n html, body {\n margin: 0;\n padding: 0;\n background: transparent !important;\n }\n body {\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n }\n #container {\n border-radius: 3rem;\n overflow: hidden;\n background-clip: padding-box;\n }\n </style>\n </head>\n <body class="${isDark ? "dark" : ""}">\n ${processedHtml}\n </body>\n </html>\n `;
11426
11823
  }
11427
11824
  };
@@ -11483,7 +11880,7 @@ var init_main = __esmMin(() => {
11483
11880
  plugins,
11484
11881
  outputDir
11485
11882
  }).render(request);
11486
- if (result.success && process.env.NODE_ENV === "development") DevDataManager.saveRenderData(request.templateType, request.templateName, request.data);
11883
+ if (process.env.NODE_ENV === "development") DevDataManager.saveRenderData(request.templateType, request.templateName, request.data);
11487
11884
  return result;
11488
11885
  };
11489
11886
  });