import { AlertTriangle, CheckCircle, CircleFadingArrowUp, Info, Zap } from 'lucide-react' import React from 'react' import { cn } from '../../utils/cn' import { isDark } from '../../utils/theme' import type { PosterContext } from '../types/ctx' import { GlowImage } from './GlowImage' import { RolldownLogo } from './RolldownLogo' import { ViteLogo } from './ViteLogo' /** * 默认布局组件属性接口 */ interface DefaultLayoutProps { /** 子组件 */ children: React.ReactNode /** ktr 注入的运行时上下文(scale/theme + kkk 扩展字段) */ ctx: PosterContext /** 额外的CSS类名 */ className?: string /** 自定义样式 */ style?: React.CSSProperties } /** * 默认布局组件 * @param props 组件属性 * @returns JSX元素 */ export const DefaultLayout: React.FC = ({ children, ctx, className = '', style = {} }) => { // 明暗只用于内部装饰分支(辉光强度等);dark 类与 data-theme 由 ktr 外壳统一写在 body 上, // 模板根元素不再重复施加。唯一事实来源是 ctx.theme.mode。 const useDarkTheme = isDark(ctx) const { version } = ctx return (
层叠上下文被卡片背景盖住。 width: '1440px', minWidth: '1440px', maxWidth: '1440px', ...style }} > {children} {version ? (
{/* 版本信息:插件、框架、构建工具 */}
{/* 插件信息 */}
{/* 不要发光效果(上游的 GlowImage 已移除) */}
{version.plugin}
{version.pluginName}
{version.hasUpdate && } {!version.hasUpdate && version.releaseType === 'Stable' && } {!version.hasUpdate && version.releaseType === 'Preview' && ( )} {!version.hasUpdate && version.releaseType !== 'Stable' && version.releaseType !== 'Preview' && ( )} {version.hasUpdate ? '有可用更新' : version.releaseType}
v{version.pluginVersion}
{/* 框架信息 */}
{/* 上游这里是 src="/image/frame-logo.png"(绝对路径,靠 karin 的 HTTP 服务提供)。 Koishi 移植版渲染的是本地 HTML 文件,绝对路径会变成裂图, 所以改用渲染上下文里的 data URI(见 Render 的 resolveFrameLogo)。 */} {(version as any).frameLogo ? ( logo ) : null}
Power By
{version.poweredBy} v{version.frameworkVersion}
{/* 作者署名:by + 头像 + 名字(头像地址是外链,渲染时会被浏览器直接拉取) */}
maimai
By maimai
{/* 构建工具信息整块去掉:ROLLDOWN / VITE 都不要了 */}
) : (
)}
) }