ai-chat-ui-kit 0.1.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.
- package/.eslintrc.cjs +74 -0
- package/.github/actions/screenshot/action.yml +35 -0
- package/.github/workflows/pages.yml +46 -0
- package/README.md +285 -0
- package/docs/README.md +176 -0
- package/docs/api/components.md +344 -0
- package/docs/api/core.md +349 -0
- package/docs/chat-style-1-minimal.html +78 -0
- package/docs/chat-style-2-neon.html +74 -0
- package/docs/chat-style-3-glass.html +73 -0
- package/docs/chat-style-4-terminal.html +84 -0
- package/docs/chat-style-5-gradient.html +69 -0
- package/docs/chat-style-6-corporate.html +116 -0
- package/docs/examples/basic-chat.md +291 -0
- package/docs/examples/custom-plugins.md +431 -0
- package/docs/examples/multi-model.md +466 -0
- package/docs/guide/api-adapters.md +431 -0
- package/docs/guide/getting-started.md +244 -0
- package/docs/guide/headless-mode.md +508 -0
- package/docs/guide/plugins.md +416 -0
- package/docs/guide/themes.md +327 -0
- package/docs/index.html +256 -0
- package/docs/theme-preview-1-minimal.html +74 -0
- package/docs/theme-preview-2-neon.html +73 -0
- package/docs/theme-preview-3-glass.html +77 -0
- package/docs/theme-preview-4-terminal.html +86 -0
- package/docs/theme-preview-5-gradient.html +79 -0
- package/docs/theme-preview-6-corporate.html +71 -0
- package/examples/index.html +414 -0
- package/examples/react-app/App.tsx +131 -0
- package/examples/react-app/index.html +12 -0
- package/examples/react-app/main.tsx +15 -0
- package/examples/react-app/package.json +24 -0
- package/examples/vue-app/index.html +12 -0
- package/examples/vue-app/package.json +22 -0
- package/examples/vue-app/src/App.vue +145 -0
- package/examples/vue-app/src/main.ts +9 -0
- package/package.json +44 -0
- package/packages/components/package.json +25 -0
- package/packages/components/src/chat/chat.css +80 -0
- package/packages/components/src/chat/chat.ts +236 -0
- package/packages/components/src/index.ts +36 -0
- package/packages/components/src/input/input.css +52 -0
- package/packages/components/src/input/input.ts +116 -0
- package/packages/components/src/markdown/markdown.css +118 -0
- package/packages/components/src/markdown/markdown.ts +229 -0
- package/packages/components/src/message/message.css +56 -0
- package/packages/components/src/message/message.ts +72 -0
- package/packages/components/src/styles/global.css +43 -0
- package/packages/components/src/tool-call/tool-call.css +98 -0
- package/packages/components/src/tool-call/tool-call.ts +171 -0
- package/packages/components/src/types.ts +55 -0
- package/packages/components/src/utils/helpers.ts +128 -0
- package/packages/components/tsconfig.json +25 -0
- package/packages/components/tsup.config.ts +18 -0
- package/packages/core/package.json +47 -0
- package/packages/core/pnpm-lock.yaml +2032 -0
- package/packages/core/pnpm-workspace.yaml +2 -0
- package/packages/core/src/api/adapters.ts +717 -0
- package/packages/core/src/api/base.ts +210 -0
- package/packages/core/src/api/index.ts +54 -0
- package/packages/core/src/index.ts +93 -0
- package/packages/core/src/parser/latex.ts +274 -0
- package/packages/core/src/parser/markdown.test.ts +58 -0
- package/packages/core/src/parser/markdown.ts +206 -0
- package/packages/core/src/parser/mermaid.ts +276 -0
- package/packages/core/src/plugins/PluginManager.ts +232 -0
- package/packages/core/src/plugins/builtin.ts +406 -0
- package/packages/core/src/store/ChatStore.ts +163 -0
- package/packages/core/src/store/ModelConfigStore.ts +136 -0
- package/packages/core/src/store/ToolCallStore.ts +164 -0
- package/packages/core/src/store/base.ts +75 -0
- package/packages/core/src/types/index.ts +133 -0
- package/packages/core/tsup.config.ts +18 -0
- package/packages/themes/package.json +33 -0
- package/packages/themes/src/corporate/index.ts +52 -0
- package/packages/themes/src/corporate/theme.css +228 -0
- package/packages/themes/src/glass/index.ts +52 -0
- package/packages/themes/src/glass/theme.css +237 -0
- package/packages/themes/src/gradient/index.ts +53 -0
- package/packages/themes/src/gradient/theme.css +218 -0
- package/packages/themes/src/index.ts +13 -0
- package/packages/themes/src/minimal/index.ts +52 -0
- package/packages/themes/src/minimal/theme.css +198 -0
- package/packages/themes/src/neon/index.ts +52 -0
- package/packages/themes/src/neon/theme.css +233 -0
- package/packages/themes/src/terminal/index.ts +52 -0
- package/packages/themes/src/terminal/theme.css +235 -0
- package/packages/themes/src/types.ts +10 -0
- package/packages/themes/src/vite-env.d.ts +9 -0
- package/packages/themes/tsup.config.ts +21 -0
- package/pnpm-workspace.yaml +4 -0
- package/tsconfig.json +27 -0
- package/vite.config.ts +25 -0
- package/vitest.config.ts +28 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# 主题定制
|
|
2
|
+
|
|
3
|
+
AI Chat UI Kit 提供了灵活的主题定制功能,支持多种方式来定制聊天界面的外观。
|
|
4
|
+
|
|
5
|
+
## 内置主题
|
|
6
|
+
|
|
7
|
+
AI Chat UI Kit 内置了三种主题:
|
|
8
|
+
|
|
9
|
+
### 1. 默认主题(Default)
|
|
10
|
+
|
|
11
|
+
蓝色主题,简洁现代。
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import '@ai-chat/themes/default';
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**特点:**
|
|
18
|
+
- 主色调:蓝色(#1677ff)
|
|
19
|
+
- 用户消息:蓝色背景
|
|
20
|
+
- AI 消息:白色背景,灰色边框
|
|
21
|
+
|
|
22
|
+
### 2. 气泡主题(Bubble)
|
|
23
|
+
|
|
24
|
+
仿微信/QQ 气泡风格。
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import '@ai-chat/themes/bubble';
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**特点:**
|
|
31
|
+
- 主色调:绿色(#07c160)
|
|
32
|
+
- 用户消息:绿色气泡(#95ec69)
|
|
33
|
+
- AI 消息:白色气泡
|
|
34
|
+
- 带气泡箭头
|
|
35
|
+
|
|
36
|
+
### 3. 扁平主题(Flat)
|
|
37
|
+
|
|
38
|
+
扁平化设计,无阴影。
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import '@ai-chat/themes/flat';
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**特点:**
|
|
45
|
+
- 主色调:深蓝色(#2b6cb0)
|
|
46
|
+
- 无阴影
|
|
47
|
+
- 纯色背景
|
|
48
|
+
- 简洁边框
|
|
49
|
+
|
|
50
|
+
## 使用主题
|
|
51
|
+
|
|
52
|
+
### 方式一:静态导入(推荐)
|
|
53
|
+
|
|
54
|
+
在应用入口文件导入主题:
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// main.ts / App.tsx / main.tsx
|
|
58
|
+
import '@ai-chat/themes/default'; // 默认主题
|
|
59
|
+
// 或
|
|
60
|
+
import '@ai-chat/themes/bubble'; // 气泡主题
|
|
61
|
+
// 或
|
|
62
|
+
import '@ai-chat/themes/flat'; // 扁平主题
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 方式二:动态切换
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { applyTheme } from '@ai-chat/themes';
|
|
69
|
+
import { defaultTheme } from '@ai-chat/themes/default';
|
|
70
|
+
import { bubbleTheme } from '@ai-chat/themes/bubble';
|
|
71
|
+
import { flatTheme } from '@ai-chat/themes/flat';
|
|
72
|
+
|
|
73
|
+
// 应用默认主题
|
|
74
|
+
applyTheme(defaultTheme);
|
|
75
|
+
|
|
76
|
+
// 切换到气泡主题
|
|
77
|
+
applyTheme(bubbleTheme);
|
|
78
|
+
|
|
79
|
+
// 切换到扁平主题
|
|
80
|
+
applyTheme(flatTheme);
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 方式三:通过 CSS 变量覆盖
|
|
84
|
+
|
|
85
|
+
所有主题都使用 CSS 变量,您可以在自己的 CSS 中覆盖这些变量:
|
|
86
|
+
|
|
87
|
+
```css
|
|
88
|
+
/* 全局覆盖 */
|
|
89
|
+
:root {
|
|
90
|
+
--ai-primary: #your-primary-color;
|
|
91
|
+
--ai-message-user-bg: #your-user-msg-bg;
|
|
92
|
+
--ai-message-ai-bg: #your-ai-msg-bg;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* 针对特定组件覆盖 */
|
|
96
|
+
.ai-chat {
|
|
97
|
+
--ai-primary: #your-primary-color;
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 自定义主题
|
|
102
|
+
|
|
103
|
+
### 创建自定义主题
|
|
104
|
+
|
|
105
|
+
1. 创建主题 CSS 文件:
|
|
106
|
+
|
|
107
|
+
```css
|
|
108
|
+
/* themes/my-theme/theme.css */
|
|
109
|
+
|
|
110
|
+
:root {
|
|
111
|
+
/* 主色 */
|
|
112
|
+
--ai-primary: #your-primary-color;
|
|
113
|
+
--ai-primary-hover: #your-primary-hover;
|
|
114
|
+
--ai-primary-active: #your-primary-active;
|
|
115
|
+
|
|
116
|
+
/* 背景色 */
|
|
117
|
+
--ai-bg-primary: #your-bg-primary;
|
|
118
|
+
--ai-bg-secondary: #your-bg-secondary;
|
|
119
|
+
--ai-bg-chat: #your-bg-chat;
|
|
120
|
+
|
|
121
|
+
/* 文本色 */
|
|
122
|
+
--ai-text-primary: #your-text-primary;
|
|
123
|
+
--ai-text-secondary: #your-text-secondary;
|
|
124
|
+
|
|
125
|
+
/* 消息气泡 */
|
|
126
|
+
--ai-message-user-bg: #your-user-msg-bg;
|
|
127
|
+
--ai-message-user-text: #your-user-msg-text;
|
|
128
|
+
--ai-message-ai-bg: #your-ai-msg-bg;
|
|
129
|
+
--ai-message-ai-text: #your-ai-msg-text;
|
|
130
|
+
|
|
131
|
+
/* 输入框 */
|
|
132
|
+
--ai-input-bg: #your-input-bg;
|
|
133
|
+
--ai-input-border: #your-input-border;
|
|
134
|
+
|
|
135
|
+
/* 圆角 */
|
|
136
|
+
--ai-radius-sm: 4px;
|
|
137
|
+
--ai-radius-md: 8px;
|
|
138
|
+
--ai-radius-lg: 12px;
|
|
139
|
+
|
|
140
|
+
/* 间距 */
|
|
141
|
+
--ai-spacing-xs: 4px;
|
|
142
|
+
--ai-spacing-sm: 8px;
|
|
143
|
+
--ai-spacing-md: 12px;
|
|
144
|
+
--ai-spacing-lg: 16px;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* 自定义组件样式 */
|
|
148
|
+
.ai-chat {
|
|
149
|
+
/* 您的自定义样式 */
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.ai-message--user .ai-message__content {
|
|
153
|
+
/* 自定义用户消息样式 */
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.ai-message--assistant .ai-message__content {
|
|
157
|
+
/* 自定义 AI 消息样式 */
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
2. 创建主题配置:
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
// themes/my-theme/index.ts
|
|
165
|
+
import themeStyles from './theme.css?raw';
|
|
166
|
+
|
|
167
|
+
export const myTheme = {
|
|
168
|
+
name: 'my-theme',
|
|
169
|
+
variables: {
|
|
170
|
+
'--ai-primary': '#your-primary-color',
|
|
171
|
+
'--ai-primary-hover': '#your-primary-hover',
|
|
172
|
+
'--ai-primary-active': '#your-primary-active',
|
|
173
|
+
// ... 其他变量
|
|
174
|
+
},
|
|
175
|
+
styles: themeStyles,
|
|
176
|
+
};
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
3. 使用自定义主题:
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
import { applyTheme } from '@ai-chat/themes';
|
|
183
|
+
import { myTheme } from './themes/my-theme';
|
|
184
|
+
|
|
185
|
+
applyTheme(myTheme);
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## 主题配置详解
|
|
189
|
+
|
|
190
|
+
### ThemeConfig 接口
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
interface ThemeConfig {
|
|
194
|
+
name: string;
|
|
195
|
+
variables: Record<string, string>;
|
|
196
|
+
styles: string;
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**字段说明:**
|
|
201
|
+
|
|
202
|
+
- `name`: 主题名称
|
|
203
|
+
- `variables`: CSS 变量键值对
|
|
204
|
+
- `styles`: 主题 CSS 字符串
|
|
205
|
+
|
|
206
|
+
### 完整 CSS 变量列表
|
|
207
|
+
|
|
208
|
+
```css
|
|
209
|
+
:root {
|
|
210
|
+
/* 主色 */
|
|
211
|
+
--ai-primary: #1677ff;
|
|
212
|
+
--ai-primary-hover: #4096ff;
|
|
213
|
+
--ai-primary-active: #0958d9;
|
|
214
|
+
|
|
215
|
+
/* 背景色 */
|
|
216
|
+
--ai-bg-primary: #ffffff;
|
|
217
|
+
--ai-bg-secondary: #f5f5f5;
|
|
218
|
+
--ai-bg-tertiary: #fafafa;
|
|
219
|
+
--ai-bg-chat: #f0f2f5;
|
|
220
|
+
|
|
221
|
+
/* 文本色 */
|
|
222
|
+
--ai-text-primary: rgba(0, 0, 0, 0.88);
|
|
223
|
+
--ai-text-secondary: rgba(0, 0, 0, 0.65);
|
|
224
|
+
--ai-text-tertiary: rgba(0, 0, 0, 0.45);
|
|
225
|
+
--ai-text-inverse: #ffffff;
|
|
226
|
+
|
|
227
|
+
/* 消息气泡 */
|
|
228
|
+
--ai-message-user-bg: #1677ff;
|
|
229
|
+
--ai-message-user-text: #ffffff;
|
|
230
|
+
--ai-message-ai-bg: #ffffff;
|
|
231
|
+
--ai-message-ai-text: rgba(0, 0, 0, 0.88);
|
|
232
|
+
--ai-message-border: #e8e8e8;
|
|
233
|
+
|
|
234
|
+
/* 输入框 */
|
|
235
|
+
--ai-input-bg: #ffffff;
|
|
236
|
+
--ai-input-border: #d9d9d9;
|
|
237
|
+
--ai-input-focus-border: #1677ff;
|
|
238
|
+
--ai-input-text: rgba(0, 0, 0, 0.88);
|
|
239
|
+
--ai-input-placeholder: rgba(0, 0, 0, 0.35);
|
|
240
|
+
|
|
241
|
+
/* 工具调用 */
|
|
242
|
+
--ai-tool-call-bg: #f6f8fa;
|
|
243
|
+
--ai-tool-call-border: #d1d9e0;
|
|
244
|
+
--ai-tool-call-success: #52c41a;
|
|
245
|
+
--ai-tool-call-error: #ff4d4f;
|
|
246
|
+
--ai-tool-call-running: #1677ff;
|
|
247
|
+
|
|
248
|
+
/* 阴影 */
|
|
249
|
+
--ai-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
|
|
250
|
+
--ai-shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
251
|
+
--ai-shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.12);
|
|
252
|
+
|
|
253
|
+
/* 圆角 */
|
|
254
|
+
--ai-radius-sm: 4px;
|
|
255
|
+
--ai-radius-md: 8px;
|
|
256
|
+
--ai-radius-lg: 12px;
|
|
257
|
+
--ai-radius-xl: 16px;
|
|
258
|
+
|
|
259
|
+
/* 间距 */
|
|
260
|
+
--ai-spacing-xs: 4px;
|
|
261
|
+
--ai-spacing-sm: 8px;
|
|
262
|
+
--ai-spacing-md: 12px;
|
|
263
|
+
--ai-spacing-lg: 16px;
|
|
264
|
+
--ai-spacing-xl: 24px;
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## 暗黑模式
|
|
269
|
+
|
|
270
|
+
### 方式一:使用媒体查询
|
|
271
|
+
|
|
272
|
+
```css
|
|
273
|
+
/* 默认亮色主题 */
|
|
274
|
+
:root {
|
|
275
|
+
--ai-bg-chat: #f0f2f5;
|
|
276
|
+
--ai-text-primary: rgba(0, 0, 0, 0.88);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* 暗黑模式 */
|
|
280
|
+
@media (prefers-color-scheme: dark) {
|
|
281
|
+
:root {
|
|
282
|
+
--ai-bg-chat: #141414;
|
|
283
|
+
--ai-text-primary: rgba(255, 255, 255, 0.88);
|
|
284
|
+
--ai-message-ai-bg: #1f1f1f;
|
|
285
|
+
--ai-message-border: #303030;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 方式二:手动切换
|
|
291
|
+
|
|
292
|
+
```typescript
|
|
293
|
+
// 监听暗黑模式切换
|
|
294
|
+
const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
295
|
+
|
|
296
|
+
darkModeMediaQuery.addEventListener('change', (e) => {
|
|
297
|
+
if (e.matches) {
|
|
298
|
+
applyDarkTheme();
|
|
299
|
+
} else {
|
|
300
|
+
applyLightTheme();
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
// 或手动切换
|
|
305
|
+
function toggleDarkMode() {
|
|
306
|
+
document.documentElement.classList.toggle('dark');
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// CSS
|
|
310
|
+
.dark {
|
|
311
|
+
--ai-bg-chat: #141414;
|
|
312
|
+
--ai-text-primary: rgba(255, 255, 255, 0.88);
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## 最佳实践
|
|
317
|
+
|
|
318
|
+
1. **优先使用 CSS 变量覆盖** - 不需要创建完整主题,只需覆盖需要修改的变量
|
|
319
|
+
2. **保持一致性** - 确保主题色彩与您的品牌色一致
|
|
320
|
+
3. **测试可读性** - 确保文本与背景的对比度足够
|
|
321
|
+
4. **支持暗黑模式** - 为用户提供亮色和暗色两种主题
|
|
322
|
+
|
|
323
|
+
## 下一步
|
|
324
|
+
|
|
325
|
+
- [插件开发](./plugins.md) - 学习如何扩展功能
|
|
326
|
+
- [API 适配器](./api-adapters.md) - 学习如何兼容不同后端 API
|
|
327
|
+
- [API 参考](../../api/) - 查看完整 API 文档
|
package/docs/index.html
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@generated-by AI: edenxpzhang
|
|
3
|
+
@generated-date 2026-05-13
|
|
4
|
+
-->
|
|
5
|
+
<!DOCTYPE html>
|
|
6
|
+
<html lang="zh-CN">
|
|
7
|
+
<head>
|
|
8
|
+
<meta charset="UTF-8" />
|
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
10
|
+
<title>AI Chat UI Kit · 主题预览</title>
|
|
11
|
+
<style>
|
|
12
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
13
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f5f5f7; color: #333; }
|
|
14
|
+
.header { text-align: center; padding: 60px 20px 40px; background: white; border-bottom: 1px solid #e5e5ea; }
|
|
15
|
+
.header h1 { font-size: 36px; font-weight: 700; margin-bottom: 12px; }
|
|
16
|
+
.header p { font-size: 16px; color: #86868b; max-width: 760px; margin: 0 auto; line-height: 1.6; }
|
|
17
|
+
.header .badge {
|
|
18
|
+
display: inline-block; margin-top: 16px;
|
|
19
|
+
padding: 6px 14px; background: #e8f2ff; color: #0071e3;
|
|
20
|
+
font-size: 12px; border-radius: 12px; font-weight: 600;
|
|
21
|
+
}
|
|
22
|
+
.theme-grid {
|
|
23
|
+
max-width: 1480px; margin: 0 auto;
|
|
24
|
+
padding: 40px 20px 80px;
|
|
25
|
+
display: grid;
|
|
26
|
+
grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
|
|
27
|
+
gap: 32px;
|
|
28
|
+
}
|
|
29
|
+
.theme-card {
|
|
30
|
+
background: white; border-radius: 20px;
|
|
31
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
transition: transform 0.3s, box-shadow 0.3s;
|
|
34
|
+
}
|
|
35
|
+
.theme-card:hover { transform: translateY(-6px); box-shadow: 0 12px 40px rgba(0,0,0,0.15); }
|
|
36
|
+
.compare-row {
|
|
37
|
+
display: grid;
|
|
38
|
+
grid-template-columns: 1fr 1fr;
|
|
39
|
+
border-bottom: 1px solid #f0f0f0;
|
|
40
|
+
}
|
|
41
|
+
.compare-cell {
|
|
42
|
+
height: 360px;
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
position: relative;
|
|
48
|
+
}
|
|
49
|
+
.compare-cell + .compare-cell { border-left: 1px solid #f0f0f0; }
|
|
50
|
+
.compare-cell iframe {
|
|
51
|
+
border: none;
|
|
52
|
+
transform-origin: top center;
|
|
53
|
+
pointer-events: none;
|
|
54
|
+
}
|
|
55
|
+
.compare-cell .label {
|
|
56
|
+
position: absolute;
|
|
57
|
+
top: 8px; left: 8px;
|
|
58
|
+
padding: 3px 8px;
|
|
59
|
+
background: rgba(0,0,0,0.55);
|
|
60
|
+
color: #fff;
|
|
61
|
+
font-size: 11px;
|
|
62
|
+
border-radius: 6px;
|
|
63
|
+
letter-spacing: 0.5px;
|
|
64
|
+
z-index: 2;
|
|
65
|
+
}
|
|
66
|
+
.compare-cell.real .label { background: #0071e3; }
|
|
67
|
+
.theme-info {
|
|
68
|
+
padding: 18px 22px;
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
gap: 6px;
|
|
72
|
+
}
|
|
73
|
+
.theme-info h3 { font-size: 18px; font-weight: 600; }
|
|
74
|
+
.theme-info p { font-size: 13px; color: #86868b; line-height: 1.5; }
|
|
75
|
+
.theme-info .actions {
|
|
76
|
+
margin-top: 10px;
|
|
77
|
+
display: flex;
|
|
78
|
+
gap: 10px;
|
|
79
|
+
}
|
|
80
|
+
.theme-info .actions a {
|
|
81
|
+
display: inline-block;
|
|
82
|
+
padding: 6px 12px;
|
|
83
|
+
font-size: 12px;
|
|
84
|
+
text-decoration: none;
|
|
85
|
+
border-radius: 6px;
|
|
86
|
+
border: 1px solid #e0e0e0;
|
|
87
|
+
color: #555;
|
|
88
|
+
transition: all 0.15s;
|
|
89
|
+
}
|
|
90
|
+
.theme-info .actions a:hover { border-color: #0071e3; color: #0071e3; }
|
|
91
|
+
.theme-info .actions a.primary { background: #0071e3; border-color: #0071e3; color: #fff; }
|
|
92
|
+
.theme-info .actions a.primary:hover { background: #0077ed; }
|
|
93
|
+
.theme-tag {
|
|
94
|
+
display: inline-block;
|
|
95
|
+
padding: 3px 10px;
|
|
96
|
+
border-radius: 12px;
|
|
97
|
+
font-size: 11px;
|
|
98
|
+
font-weight: 600;
|
|
99
|
+
align-self: flex-start;
|
|
100
|
+
}
|
|
101
|
+
.footer { text-align: center; padding: 40px 20px; color: #86868b; font-size: 13px; }
|
|
102
|
+
.footer a { color: #0071e3; text-decoration: none; }
|
|
103
|
+
</style>
|
|
104
|
+
</head>
|
|
105
|
+
<body>
|
|
106
|
+
<div class="header">
|
|
107
|
+
<h1>🎨 AI Chat UI Kit</h1>
|
|
108
|
+
<p>6 套精心设计的聊天界面主题。每一行展示「设计稿 demo」与「真实组件 + 主题渲染」的并排对比,确认两者视觉一致。</p>
|
|
109
|
+
<span class="badge">基于 Web Components · 兼容 React / Vue / 原生 HTML</span>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<div class="theme-grid">
|
|
113
|
+
<!-- 01 Minimal -->
|
|
114
|
+
<div class="theme-card">
|
|
115
|
+
<div class="compare-row">
|
|
116
|
+
<div class="compare-cell" style="background: #f5f5f7;">
|
|
117
|
+
<span class="label">设计稿</span>
|
|
118
|
+
<iframe src="chat-style-1-minimal.html" style="width: 400px; height: 700px; transform: scale(0.5);"></iframe>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="compare-cell real" style="background: #f5f5f7;">
|
|
121
|
+
<span class="label">真实组件 + 主题</span>
|
|
122
|
+
<iframe src="theme-preview-1-minimal.html" style="width: 400px; height: 700px; transform: scale(0.5);"></iframe>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="theme-info">
|
|
126
|
+
<h3>01 · Minimal Clean</h3>
|
|
127
|
+
<p>极简苹果风,圆角气泡 + 蓝白配色,适合移动端和桌面端通用场景。</p>
|
|
128
|
+
<span class="theme-tag" style="background: #e8f2ff; color: #0071e3;">Apple Style</span>
|
|
129
|
+
<div class="actions">
|
|
130
|
+
<a href="chat-style-1-minimal.html" target="_blank">设计稿</a>
|
|
131
|
+
<a class="primary" href="theme-preview-1-minimal.html" target="_blank">主题预览</a>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<!-- 02 Neon -->
|
|
137
|
+
<div class="theme-card">
|
|
138
|
+
<div class="compare-row">
|
|
139
|
+
<div class="compare-cell" style="background: #0a0a0a;">
|
|
140
|
+
<span class="label">设计稿</span>
|
|
141
|
+
<iframe src="chat-style-2-neon.html" style="width: 450px; height: 700px; transform: scale(0.45);"></iframe>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="compare-cell real" style="background: #0a0a0a;">
|
|
144
|
+
<span class="label">真实组件 + 主题</span>
|
|
145
|
+
<iframe src="theme-preview-2-neon.html" style="width: 450px; height: 700px; transform: scale(0.45);"></iframe>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
<div class="theme-info">
|
|
149
|
+
<h3>02 · Dark Neon</h3>
|
|
150
|
+
<p>赛博朋克深色主题,霓虹发光效果,适合科技感强的 AI 产品。</p>
|
|
151
|
+
<span class="theme-tag" style="background: #1a1a2e; color: #00ffff;">Cyberpunk</span>
|
|
152
|
+
<div class="actions">
|
|
153
|
+
<a href="chat-style-2-neon.html" target="_blank">设计稿</a>
|
|
154
|
+
<a class="primary" href="theme-preview-2-neon.html" target="_blank">主题预览</a>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<!-- 03 Glass -->
|
|
160
|
+
<div class="theme-card">
|
|
161
|
+
<div class="compare-row">
|
|
162
|
+
<div class="compare-cell" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">
|
|
163
|
+
<span class="label">设计稿</span>
|
|
164
|
+
<iframe src="chat-style-3-glass.html" style="width: 420px; height: 700px; transform: scale(0.48);"></iframe>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="compare-cell real" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">
|
|
167
|
+
<span class="label">真实组件 + 主题</span>
|
|
168
|
+
<iframe src="theme-preview-3-glass.html" style="width: 420px; height: 700px; transform: scale(0.48);"></iframe>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
<div class="theme-info">
|
|
172
|
+
<h3>03 · Glassmorphism</h3>
|
|
173
|
+
<p>毛玻璃拟态风格,半透明模糊效果,适合现代化 SaaS 产品。</p>
|
|
174
|
+
<span class="theme-tag" style="background: rgba(102,126,234,0.15); color: #667eea;">Glass</span>
|
|
175
|
+
<div class="actions">
|
|
176
|
+
<a href="chat-style-3-glass.html" target="_blank">设计稿</a>
|
|
177
|
+
<a class="primary" href="theme-preview-3-glass.html" target="_blank">主题预览</a>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
|
|
182
|
+
<!-- 04 Terminal -->
|
|
183
|
+
<div class="theme-card">
|
|
184
|
+
<div class="compare-row">
|
|
185
|
+
<div class="compare-cell" style="background: #0a0a0a;">
|
|
186
|
+
<span class="label">设计稿</span>
|
|
187
|
+
<iframe src="chat-style-4-terminal.html" style="width: 650px; height: 720px; transform: scale(0.32);"></iframe>
|
|
188
|
+
</div>
|
|
189
|
+
<div class="compare-cell real" style="background: #0a0a0a;">
|
|
190
|
+
<span class="label">真实组件 + 主题</span>
|
|
191
|
+
<iframe src="theme-preview-4-terminal.html" style="width: 650px; height: 720px; transform: scale(0.32);"></iframe>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
<div class="theme-info">
|
|
195
|
+
<h3>04 · Retro Terminal</h3>
|
|
196
|
+
<p>复古终端风格,绿色配色 + 扫描线效果,适合开发者工具 / CLI 产品。</p>
|
|
197
|
+
<span class="theme-tag" style="background: #e8fff0; color: #00aa00;">Terminal</span>
|
|
198
|
+
<div class="actions">
|
|
199
|
+
<a href="chat-style-4-terminal.html" target="_blank">设计稿</a>
|
|
200
|
+
<a class="primary" href="theme-preview-4-terminal.html" target="_blank">主题预览</a>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<!-- 05 Gradient -->
|
|
206
|
+
<div class="theme-card">
|
|
207
|
+
<div class="compare-row">
|
|
208
|
+
<div class="compare-cell" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 25%, #4facfe 50%, #00f2fe 75%, #43e97b 100%); background-size: 400% 400%;">
|
|
209
|
+
<span class="label">设计稿</span>
|
|
210
|
+
<iframe src="chat-style-5-gradient.html" style="width: 420px; height: 720px; transform: scale(0.48);"></iframe>
|
|
211
|
+
</div>
|
|
212
|
+
<div class="compare-cell real" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 25%, #4facfe 50%, #00f2fe 75%, #43e97b 100%); background-size: 400% 400%;">
|
|
213
|
+
<span class="label">真实组件 + 主题</span>
|
|
214
|
+
<iframe src="theme-preview-5-gradient.html" style="width: 420px; height: 720px; transform: scale(0.48);"></iframe>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
<div class="theme-info">
|
|
218
|
+
<h3>05 · Gradient Bubbles</h3>
|
|
219
|
+
<p>多彩渐变气泡,弹出动画 + emoji,适合年轻化 / 社交类产品。</p>
|
|
220
|
+
<span class="theme-tag" style="background: linear-gradient(135deg,#f093fb,#f5576c); color: white;">Gradient</span>
|
|
221
|
+
<div class="actions">
|
|
222
|
+
<a href="chat-style-5-gradient.html" target="_blank">设计稿</a>
|
|
223
|
+
<a class="primary" href="theme-preview-5-gradient.html" target="_blank">主题预览</a>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
|
|
228
|
+
<!-- 06 Corporate -->
|
|
229
|
+
<div class="theme-card">
|
|
230
|
+
<div class="compare-row">
|
|
231
|
+
<div class="compare-cell" style="background: #f0f2f5;">
|
|
232
|
+
<span class="label">设计稿</span>
|
|
233
|
+
<iframe src="chat-style-6-corporate.html" style="width: 480px; height: 720px; transform: scale(0.42);"></iframe>
|
|
234
|
+
</div>
|
|
235
|
+
<div class="compare-cell real" style="background: #f0f2f5;">
|
|
236
|
+
<span class="label">真实组件 + 主题</span>
|
|
237
|
+
<iframe src="theme-preview-6-corporate.html" style="width: 480px; height: 720px; transform: scale(0.42);"></iframe>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
<div class="theme-info">
|
|
241
|
+
<h3>06 · Corporate Professional</h3>
|
|
242
|
+
<p>企业商务风格,蓝色主题 + 头像时间戳,适合 B 端 / 企业级应用。</p>
|
|
243
|
+
<span class="theme-tag" style="background: #e6f7ff; color: #1890ff;">Enterprise</span>
|
|
244
|
+
<div class="actions">
|
|
245
|
+
<a href="chat-style-6-corporate.html" target="_blank">设计稿</a>
|
|
246
|
+
<a class="primary" href="theme-preview-6-corporate.html" target="_blank">主题预览</a>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<div class="footer">
|
|
253
|
+
<p>AI Chat UI Kit · Built with Web Components · <a href="https://github.com/edenxpzhang/ai-chat-ui-kit" target="_blank">View on GitHub</a></p>
|
|
254
|
+
</div>
|
|
255
|
+
</body>
|
|
256
|
+
</html>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@generated-by AI: edenxpzhang
|
|
3
|
+
@generated-date 2026-05-13
|
|
4
|
+
|
|
5
|
+
Theme Preview · Minimal —— 真实组件 DOM + minimal 主题
|
|
6
|
+
-->
|
|
7
|
+
<!DOCTYPE html>
|
|
8
|
+
<html lang="zh-CN">
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="UTF-8" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
12
|
+
<title>主题预览 · 01 Minimal Clean | AI Chat UI Kit</title>
|
|
13
|
+
<link rel="stylesheet" href="../packages/themes/src/minimal/theme.css" />
|
|
14
|
+
<style>
|
|
15
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
16
|
+
html, body { height: 100%; }
|
|
17
|
+
body {
|
|
18
|
+
background: #f5f5f7;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
padding: 24px;
|
|
23
|
+
}
|
|
24
|
+
.stage { width: 400px; height: 700px; }
|
|
25
|
+
</style>
|
|
26
|
+
</head>
|
|
27
|
+
<body data-theme="minimal">
|
|
28
|
+
<div class="stage">
|
|
29
|
+
<div class="ai-chat" data-theme="minimal">
|
|
30
|
+
<header class="ai-chat__header">
|
|
31
|
+
<div class="ai-chat__avatar">🤖</div>
|
|
32
|
+
<div class="ai-chat__title-group">
|
|
33
|
+
<h3 class="ai-chat__title">AI Assistant</h3>
|
|
34
|
+
<p class="ai-chat__subtitle">在线 · 随时为您服务</p>
|
|
35
|
+
</div>
|
|
36
|
+
</header>
|
|
37
|
+
<div class="ai-chat__messages">
|
|
38
|
+
<div class="ai-message ai-message--assistant">
|
|
39
|
+
<div class="ai-message__avatar">AI</div>
|
|
40
|
+
<div class="ai-message__body">
|
|
41
|
+
<div class="ai-message__content">您好!我是 AI 助手,有什么可以帮您的吗?😊</div>
|
|
42
|
+
<div class="ai-message__time">14:30</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="ai-message ai-message--user">
|
|
46
|
+
<div class="ai-message__avatar">我</div>
|
|
47
|
+
<div class="ai-message__body">
|
|
48
|
+
<div class="ai-message__content">这个 UI 看起来不错</div>
|
|
49
|
+
<div class="ai-message__time">14:31</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="ai-message ai-message--assistant">
|
|
53
|
+
<div class="ai-message__avatar">AI</div>
|
|
54
|
+
<div class="ai-message__body">
|
|
55
|
+
<div class="ai-message__content">谢谢!这是基于 Web Components 的真实组件渲染效果。</div>
|
|
56
|
+
<div class="ai-message__time">14:31</div>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="ai-typing-indicator">
|
|
60
|
+
<span class="ai-typing-indicator__dot"></span>
|
|
61
|
+
<span class="ai-typing-indicator__dot"></span>
|
|
62
|
+
<span class="ai-typing-indicator__dot"></span>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="ai-input">
|
|
66
|
+
<div class="ai-input__wrapper">
|
|
67
|
+
<textarea class="ai-input__textarea" placeholder="输入消息..." rows="1"></textarea>
|
|
68
|
+
<button class="ai-input__send">↑</button>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</body>
|
|
74
|
+
</html>
|