ThemeStyles 组件
概述
ThemeStyles 是一个占位组件,用于动态主题样式的注入。当前版本样式由服务端在 layout.tsx 中应用,此组件保留用于未来可能的动态主题切换功能。
文件路径
src/components/providers/theme-styles.tsx
功能特性
- 服务端样式应用: 当前样式由服务端处理
- 未来扩展: 保留用于动态主题切换
- 无 UI 渲染: 组件不渲染任何 DOM 元素
接口定义
interface ThemeStylesProps {
radius: "none" | "sm" | "md" | "lg"; // 圆角大小
variant: "flat" | "default" | "brutal"; // UI 变体
density: "compact" | "default" | "comfortable"; // 密度
primaryColor: string; // 主色调
}
使用示例
import { ThemeStyles } from "./theme-styles";
// 在 Providers 中使用
<ThemeStyles
radius="md"
variant="default"
density="default"
primaryColor="#3b82f6"
/>
服务端样式实现
实际主题样式在 layout.tsx 中通过 CSS 变量应用:
// layout.tsx
<style>{`
:root {
--radius: ${theme.radius === 'none' ? '0' : theme.radius === 'sm' ? '0.25rem' : theme.radius === 'md' ? '0.5rem' : '0.75rem'};
--primary: ${theme.colors.primary};
}
`}</style>
主题配置选项
| 属性 | 可选值 | CSS 变量 |
|---|---|---|
| radius | none / sm / md / lg | --radius |
| variant | flat / default / brutal | 影响阴影、边框 |
| density | compact / default / comfortable | 影响间距 |
| primaryColor | 任意颜色 | --primary |
依赖
无外部依赖
注意事项
- 当前组件返回
null,不执行任何操作 - 样式在服务端通过
<style>标签注入 - 这样可以防止页面加载时的主题闪烁
- 未来可能添加客户端动态主题切换功能
- 所有主题配置来自
prompts.config.ts
未来扩展
可能的增强功能:
export function ThemeStyles({ radius, variant, density, primaryColor }: ThemeStylesProps) {
// 动态创建样式标签
useEffect(() => {
const style = document.createElement('style');
style.textContent = `
:root {
--radius: ${getRadiusValue(radius)};
--primary: ${primaryColor};
}
`;
document.head.appendChild(style);
return () => {
document.head.removeChild(style);
};
}, [radius, variant, density, primaryColor]);
return null;
}