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.
Files changed (95) hide show
  1. package/.eslintrc.cjs +74 -0
  2. package/.github/actions/screenshot/action.yml +35 -0
  3. package/.github/workflows/pages.yml +46 -0
  4. package/README.md +285 -0
  5. package/docs/README.md +176 -0
  6. package/docs/api/components.md +344 -0
  7. package/docs/api/core.md +349 -0
  8. package/docs/chat-style-1-minimal.html +78 -0
  9. package/docs/chat-style-2-neon.html +74 -0
  10. package/docs/chat-style-3-glass.html +73 -0
  11. package/docs/chat-style-4-terminal.html +84 -0
  12. package/docs/chat-style-5-gradient.html +69 -0
  13. package/docs/chat-style-6-corporate.html +116 -0
  14. package/docs/examples/basic-chat.md +291 -0
  15. package/docs/examples/custom-plugins.md +431 -0
  16. package/docs/examples/multi-model.md +466 -0
  17. package/docs/guide/api-adapters.md +431 -0
  18. package/docs/guide/getting-started.md +244 -0
  19. package/docs/guide/headless-mode.md +508 -0
  20. package/docs/guide/plugins.md +416 -0
  21. package/docs/guide/themes.md +327 -0
  22. package/docs/index.html +256 -0
  23. package/docs/theme-preview-1-minimal.html +74 -0
  24. package/docs/theme-preview-2-neon.html +73 -0
  25. package/docs/theme-preview-3-glass.html +77 -0
  26. package/docs/theme-preview-4-terminal.html +86 -0
  27. package/docs/theme-preview-5-gradient.html +79 -0
  28. package/docs/theme-preview-6-corporate.html +71 -0
  29. package/examples/index.html +414 -0
  30. package/examples/react-app/App.tsx +131 -0
  31. package/examples/react-app/index.html +12 -0
  32. package/examples/react-app/main.tsx +15 -0
  33. package/examples/react-app/package.json +24 -0
  34. package/examples/vue-app/index.html +12 -0
  35. package/examples/vue-app/package.json +22 -0
  36. package/examples/vue-app/src/App.vue +145 -0
  37. package/examples/vue-app/src/main.ts +9 -0
  38. package/package.json +44 -0
  39. package/packages/components/package.json +25 -0
  40. package/packages/components/src/chat/chat.css +80 -0
  41. package/packages/components/src/chat/chat.ts +236 -0
  42. package/packages/components/src/index.ts +36 -0
  43. package/packages/components/src/input/input.css +52 -0
  44. package/packages/components/src/input/input.ts +116 -0
  45. package/packages/components/src/markdown/markdown.css +118 -0
  46. package/packages/components/src/markdown/markdown.ts +229 -0
  47. package/packages/components/src/message/message.css +56 -0
  48. package/packages/components/src/message/message.ts +72 -0
  49. package/packages/components/src/styles/global.css +43 -0
  50. package/packages/components/src/tool-call/tool-call.css +98 -0
  51. package/packages/components/src/tool-call/tool-call.ts +171 -0
  52. package/packages/components/src/types.ts +55 -0
  53. package/packages/components/src/utils/helpers.ts +128 -0
  54. package/packages/components/tsconfig.json +25 -0
  55. package/packages/components/tsup.config.ts +18 -0
  56. package/packages/core/package.json +47 -0
  57. package/packages/core/pnpm-lock.yaml +2032 -0
  58. package/packages/core/pnpm-workspace.yaml +2 -0
  59. package/packages/core/src/api/adapters.ts +717 -0
  60. package/packages/core/src/api/base.ts +210 -0
  61. package/packages/core/src/api/index.ts +54 -0
  62. package/packages/core/src/index.ts +93 -0
  63. package/packages/core/src/parser/latex.ts +274 -0
  64. package/packages/core/src/parser/markdown.test.ts +58 -0
  65. package/packages/core/src/parser/markdown.ts +206 -0
  66. package/packages/core/src/parser/mermaid.ts +276 -0
  67. package/packages/core/src/plugins/PluginManager.ts +232 -0
  68. package/packages/core/src/plugins/builtin.ts +406 -0
  69. package/packages/core/src/store/ChatStore.ts +163 -0
  70. package/packages/core/src/store/ModelConfigStore.ts +136 -0
  71. package/packages/core/src/store/ToolCallStore.ts +164 -0
  72. package/packages/core/src/store/base.ts +75 -0
  73. package/packages/core/src/types/index.ts +133 -0
  74. package/packages/core/tsup.config.ts +18 -0
  75. package/packages/themes/package.json +33 -0
  76. package/packages/themes/src/corporate/index.ts +52 -0
  77. package/packages/themes/src/corporate/theme.css +228 -0
  78. package/packages/themes/src/glass/index.ts +52 -0
  79. package/packages/themes/src/glass/theme.css +237 -0
  80. package/packages/themes/src/gradient/index.ts +53 -0
  81. package/packages/themes/src/gradient/theme.css +218 -0
  82. package/packages/themes/src/index.ts +13 -0
  83. package/packages/themes/src/minimal/index.ts +52 -0
  84. package/packages/themes/src/minimal/theme.css +198 -0
  85. package/packages/themes/src/neon/index.ts +52 -0
  86. package/packages/themes/src/neon/theme.css +233 -0
  87. package/packages/themes/src/terminal/index.ts +52 -0
  88. package/packages/themes/src/terminal/theme.css +235 -0
  89. package/packages/themes/src/types.ts +10 -0
  90. package/packages/themes/src/vite-env.d.ts +9 -0
  91. package/packages/themes/tsup.config.ts +21 -0
  92. package/pnpm-workspace.yaml +4 -0
  93. package/tsconfig.json +27 -0
  94. package/vite.config.ts +25 -0
  95. package/vitest.config.ts +28 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ */
5
+
6
+ import type { ThemeConfig } from '../types.js';
7
+ import themeStyles from './theme.css?raw';
8
+
9
+ export const glassTheme: ThemeConfig = {
10
+ name: 'glass',
11
+ variables: {
12
+ '--ai-primary': 'rgba(102, 126, 234, 0.6)',
13
+ '--ai-primary-hover': 'rgba(102, 126, 234, 0.8)',
14
+ '--ai-primary-active': 'rgba(82, 106, 214, 0.9)',
15
+ '--ai-bg-primary': 'rgba(255, 255, 255, 0.25)',
16
+ '--ai-bg-secondary': 'rgba(255, 255, 255, 0.3)',
17
+ '--ai-bg-tertiary': 'rgba(255, 255, 255, 0.2)',
18
+ '--ai-bg-chat': 'transparent',
19
+ '--ai-text-primary': '#ffffff',
20
+ '--ai-text-secondary': 'rgba(255, 255, 255, 0.8)',
21
+ '--ai-text-tertiary': 'rgba(255, 255, 255, 0.6)',
22
+ '--ai-text-inverse': '#333333',
23
+ '--ai-message-user-bg': 'rgba(102, 126, 234, 0.6)',
24
+ '--ai-message-user-text': '#ffffff',
25
+ '--ai-message-ai-bg': 'rgba(255, 255, 255, 0.4)',
26
+ '--ai-message-ai-text': '#333333',
27
+ '--ai-message-border': 'rgba(255, 255, 255, 0.6)',
28
+ '--ai-input-bg': 'rgba(255, 255, 255, 0.3)',
29
+ '--ai-input-border': 'rgba(255, 255, 255, 0.5)',
30
+ '--ai-input-focus-border': 'rgba(255, 255, 255, 0.8)',
31
+ '--ai-input-text': '#ffffff',
32
+ '--ai-input-placeholder': 'rgba(255, 255, 255, 0.7)',
33
+ '--ai-tool-call-bg': 'rgba(255, 255, 255, 0.3)',
34
+ '--ai-tool-call-border': 'rgba(255, 255, 255, 0.5)',
35
+ '--ai-tool-call-success': '#52c41a',
36
+ '--ai-tool-call-error': '#ff4d4f',
37
+ '--ai-tool-call-running': 'rgba(102, 126, 234, 0.6)',
38
+ '--ai-shadow-sm': '0 2px 8px rgba(31, 38, 135, 0.1)',
39
+ '--ai-shadow-md': '0 4px 16px rgba(31, 38, 135, 0.2)',
40
+ '--ai-shadow-lg': '0 8px 32px rgba(31, 38, 135, 0.37)',
41
+ '--ai-radius-sm': '8px',
42
+ '--ai-radius-md': '16px',
43
+ '--ai-radius-lg': '20px',
44
+ '--ai-radius-xl': '24px',
45
+ '--ai-spacing-xs': '4px',
46
+ '--ai-spacing-sm': '8px',
47
+ '--ai-spacing-md': '14px',
48
+ '--ai-spacing-lg': '20px',
49
+ '--ai-spacing-xl': '24px',
50
+ },
51
+ styles: themeStyles,
52
+ };
@@ -0,0 +1,237 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ *
5
+ * Glassmorphism —— 毛玻璃拟态
6
+ * 对齐 docs/chat-style-3-glass.html
7
+ */
8
+
9
+ :root[data-theme='glass'],
10
+ .ai-theme-glass {
11
+ --ai-primary: rgba(102, 126, 234, 0.6);
12
+ --ai-primary-hover: rgba(102, 126, 234, 0.8);
13
+ --ai-message-user-bg: rgba(102, 126, 234, 0.6);
14
+ --ai-message-user-text: #ffffff;
15
+ --ai-message-ai-bg: rgba(255, 255, 255, 0.4);
16
+ --ai-message-ai-text: #333;
17
+ --ai-text-primary: #ffffff;
18
+ }
19
+
20
+ /* 让父容器(如 body)有渐变背景,毛玻璃才有意义 */
21
+ .ai-theme-glass-host,
22
+ body[data-theme='glass'] {
23
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
24
+ position: relative;
25
+ overflow: hidden;
26
+ }
27
+ .ai-theme-glass-host::before,
28
+ body[data-theme='glass']::before {
29
+ content: '';
30
+ position: absolute;
31
+ width: 400px;
32
+ height: 400px;
33
+ background: rgba(255, 255, 255, 0.3);
34
+ border-radius: 50%;
35
+ top: -100px;
36
+ left: -100px;
37
+ filter: blur(60px);
38
+ pointer-events: none;
39
+ }
40
+ .ai-theme-glass-host::after,
41
+ body[data-theme='glass']::after {
42
+ content: '';
43
+ position: absolute;
44
+ width: 350px;
45
+ height: 350px;
46
+ background: rgba(255, 200, 200, 0.3);
47
+ border-radius: 50%;
48
+ bottom: -80px;
49
+ right: -80px;
50
+ filter: blur(60px);
51
+ pointer-events: none;
52
+ }
53
+
54
+ /* 容器 */
55
+ .ai-theme-glass .ai-chat,
56
+ [data-theme='glass'] .ai-chat {
57
+ background: rgba(255, 255, 255, 0.25);
58
+ backdrop-filter: blur(20px);
59
+ -webkit-backdrop-filter: blur(20px);
60
+ border: 1px solid rgba(255, 255, 255, 0.5);
61
+ border-radius: 24px;
62
+ box-shadow: 0 8px 32px rgba(31, 38, 135, 0.37);
63
+ font-family: 'Segoe UI', sans-serif;
64
+ position: relative;
65
+ z-index: 1;
66
+ }
67
+
68
+ /* Header */
69
+ .ai-theme-glass .ai-chat__header,
70
+ [data-theme='glass'] .ai-chat__header {
71
+ padding: 24px;
72
+ background: rgba(255, 255, 255, 0.3);
73
+ border-bottom: 1px solid rgba(255, 255, 255, 0.5);
74
+ border-radius: 24px 24px 0 0;
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 14px;
78
+ }
79
+ .ai-theme-glass .ai-chat__avatar,
80
+ [data-theme='glass'] .ai-chat__avatar {
81
+ width: 45px;
82
+ height: 45px;
83
+ background: rgba(255, 255, 255, 0.4);
84
+ backdrop-filter: blur(10px);
85
+ border: 2px solid rgba(255, 255, 255, 0.6);
86
+ border-radius: 50%;
87
+ font-size: 22px;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ }
92
+ .ai-theme-glass .ai-chat__title,
93
+ [data-theme='glass'] .ai-chat__title {
94
+ font-size: 18px;
95
+ font-weight: 600;
96
+ color: #fff;
97
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
98
+ }
99
+ .ai-theme-glass .ai-chat__subtitle,
100
+ [data-theme='glass'] .ai-chat__subtitle {
101
+ font-size: 13px;
102
+ color: rgba(255, 255, 255, 0.8);
103
+ }
104
+
105
+ /* Messages */
106
+ .ai-theme-glass .ai-chat__messages,
107
+ [data-theme='glass'] .ai-chat__messages {
108
+ background: transparent;
109
+ padding: 20px;
110
+ gap: 14px;
111
+ }
112
+ .ai-theme-glass .ai-chat__messages::-webkit-scrollbar,
113
+ [data-theme='glass'] .ai-chat__messages::-webkit-scrollbar { width: 6px; }
114
+ .ai-theme-glass .ai-chat__messages::-webkit-scrollbar-thumb,
115
+ [data-theme='glass'] .ai-chat__messages::-webkit-scrollbar-thumb {
116
+ background: rgba(255, 255, 255, 0.5);
117
+ border-radius: 3px;
118
+ }
119
+
120
+ /* Message */
121
+ .ai-theme-glass .ai-message,
122
+ [data-theme='glass'] .ai-message { max-width: 78%; }
123
+ .ai-theme-glass .ai-message__avatar,
124
+ [data-theme='glass'] .ai-message__avatar { display: none; }
125
+ .ai-theme-glass .ai-message__content,
126
+ [data-theme='glass'] .ai-message__content {
127
+ padding: 14px 18px;
128
+ border-radius: 20px;
129
+ font-size: 14px;
130
+ line-height: 1.6;
131
+ backdrop-filter: blur(10px);
132
+ -webkit-backdrop-filter: blur(10px);
133
+ }
134
+ .ai-theme-glass .ai-message--user .ai-message__content,
135
+ [data-theme='glass'] .ai-message--user .ai-message__content {
136
+ background: rgba(102, 126, 234, 0.6);
137
+ color: #fff;
138
+ border: 1px solid rgba(255, 255, 255, 0.4);
139
+ border-bottom-right-radius: 8px;
140
+ }
141
+ .ai-theme-glass .ai-message--assistant .ai-message__content,
142
+ [data-theme='glass'] .ai-message--assistant .ai-message__content {
143
+ background: rgba(255, 255, 255, 0.4);
144
+ color: #333;
145
+ border: 1px solid rgba(255, 255, 255, 0.6);
146
+ border-bottom-left-radius: 8px;
147
+ }
148
+ .ai-theme-glass .ai-message__time,
149
+ [data-theme='glass'] .ai-message__time { display: none; }
150
+
151
+ /* Input */
152
+ .ai-theme-glass .ai-input,
153
+ [data-theme='glass'] .ai-input {
154
+ padding: 16px 20px;
155
+ background: rgba(255, 255, 255, 0.3);
156
+ border-top: 1px solid rgba(255, 255, 255, 0.5);
157
+ border-radius: 0 0 24px 24px;
158
+ }
159
+ .ai-theme-glass .ai-input__wrapper,
160
+ [data-theme='glass'] .ai-input__wrapper {
161
+ display: flex;
162
+ gap: 12px;
163
+ align-items: center;
164
+ }
165
+ .ai-theme-glass .ai-input__textarea,
166
+ [data-theme='glass'] .ai-input__textarea {
167
+ flex: 1;
168
+ padding: 12px 18px;
169
+ background: rgba(255, 255, 255, 0.3);
170
+ backdrop-filter: blur(10px);
171
+ border: 1px solid rgba(255, 255, 255, 0.5);
172
+ border-radius: 20px;
173
+ color: #fff;
174
+ font-size: 14px;
175
+ outline: none;
176
+ resize: none;
177
+ min-height: 44px;
178
+ max-height: 120px;
179
+ transition: all 0.3s;
180
+ }
181
+ .ai-theme-glass .ai-input__textarea::placeholder,
182
+ [data-theme='glass'] .ai-input__textarea::placeholder { color: rgba(255, 255, 255, 0.7); }
183
+ .ai-theme-glass .ai-input__textarea:focus,
184
+ [data-theme='glass'] .ai-input__textarea:focus {
185
+ background: rgba(255, 255, 255, 0.4);
186
+ border-color: rgba(255, 255, 255, 0.8);
187
+ }
188
+ .ai-theme-glass .ai-input__send,
189
+ [data-theme='glass'] .ai-input__send {
190
+ width: 44px;
191
+ height: 44px;
192
+ background: rgba(102, 126, 234, 0.6);
193
+ backdrop-filter: blur(10px);
194
+ border: 1px solid rgba(255, 255, 255, 0.5);
195
+ color: #fff;
196
+ border-radius: 50%;
197
+ cursor: pointer;
198
+ font-size: 18px;
199
+ transition: all 0.3s;
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ padding: 0;
204
+ }
205
+ .ai-theme-glass .ai-input__send:hover:not(:disabled),
206
+ [data-theme='glass'] .ai-input__send:hover:not(:disabled) {
207
+ background: rgba(102, 126, 234, 0.8);
208
+ transform: scale(1.05);
209
+ }
210
+
211
+ /* Typing */
212
+ .ai-theme-glass .ai-typing-indicator,
213
+ [data-theme='glass'] .ai-typing-indicator {
214
+ display: flex;
215
+ gap: 4px;
216
+ padding: 12px 16px;
217
+ background: rgba(255, 255, 255, 0.4);
218
+ border-radius: 20px;
219
+ width: fit-content;
220
+ }
221
+ .ai-theme-glass .ai-typing-indicator__dot,
222
+ [data-theme='glass'] .ai-typing-indicator__dot {
223
+ width: 6px;
224
+ height: 6px;
225
+ background: rgba(255, 255, 255, 0.8);
226
+ border-radius: 50%;
227
+ animation: ai-typing-bounce 1.4s infinite;
228
+ }
229
+ .ai-theme-glass .ai-typing-indicator__dot:nth-child(2),
230
+ [data-theme='glass'] .ai-typing-indicator__dot:nth-child(2) { animation-delay: 0.2s; }
231
+ .ai-theme-glass .ai-typing-indicator__dot:nth-child(3),
232
+ [data-theme='glass'] .ai-typing-indicator__dot:nth-child(3) { animation-delay: 0.4s; }
233
+
234
+ @keyframes ai-typing-bounce {
235
+ 0%, 60%, 100% { transform: translateY(0); }
236
+ 30% { transform: translateY(-6px); }
237
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ */
5
+
6
+ import type { ThemeConfig } from '../types.js';
7
+ import themeStyles from './theme.css?raw';
8
+
9
+ export const gradientTheme: ThemeConfig = {
10
+ name: 'gradient',
11
+ variables: {
12
+ '--ai-primary': 'linear-gradient(135deg, #f093fb, #f5576c)',
13
+ '--ai-primary-hover': 'linear-gradient(135deg, #f5576c, #f093fb)',
14
+ '--ai-primary-active': 'linear-gradient(135deg, #d63384, #e91e63)',
15
+ '--ai-bg-primary': '#ffffff',
16
+ '--ai-bg-secondary': '#fafafa',
17
+ '--ai-bg-tertiary': '#f5f5f5',
18
+ '--ai-bg-chat': 'linear-gradient(135deg, #f093fb 0%, #f5576c 25%, #4facfe 50%, #00f2fe 75%, #43e97b 100%)',
19
+ '--ai-bg-chat-size': '400% 400%',
20
+ '--ai-text-primary': '#333333',
21
+ '--ai-text-secondary': '#666666',
22
+ '--ai-text-tertiary': '#999999',
23
+ '--ai-text-inverse': '#ffffff',
24
+ '--ai-message-user-bg': 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
25
+ '--ai-message-user-text': '#ffffff',
26
+ '--ai-message-ai-bg': '#ffffff',
27
+ '--ai-message-ai-text': '#333333',
28
+ '--ai-message-border': '#f0f0f0',
29
+ '--ai-input-bg': '#f5f5f5',
30
+ '--ai-input-border': '#e0e0e0',
31
+ '--ai-input-focus-border': '#667eea',
32
+ '--ai-input-text': '#333333',
33
+ '--ai-input-placeholder': '#999999',
34
+ '--ai-tool-call-bg': '#fafafa',
35
+ '--ai-tool-call-border': '#e0e0e0',
36
+ '--ai-tool-call-success': '#52c41a',
37
+ '--ai-tool-call-error': '#ff4d4f',
38
+ '--ai-tool-call-running': '#667eea',
39
+ '--ai-shadow-sm': '0 2px 8px rgba(0, 0, 0, 0.08)',
40
+ '--ai-shadow-md': '0 4px 15px rgba(102, 126, 234, 0.4)',
41
+ '--ai-shadow-lg': '0 20px 60px rgba(0, 0, 0, 0.2)',
42
+ '--ai-radius-sm': '6px',
43
+ '--ai-radius-md': '20px',
44
+ '--ai-radius-lg': '20px',
45
+ '--ai-radius-xl': '30px',
46
+ '--ai-spacing-xs': '4px',
47
+ '--ai-spacing-sm': '8px',
48
+ '--ai-spacing-md': '16px',
49
+ '--ai-spacing-lg': '20px',
50
+ '--ai-spacing-xl': '24px',
51
+ },
52
+ styles: themeStyles,
53
+ };
@@ -0,0 +1,218 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ *
5
+ * Gradient Bubbles —— 多彩渐变
6
+ * 对齐 docs/chat-style-5-gradient.html
7
+ */
8
+
9
+ :root[data-theme='gradient'],
10
+ .ai-theme-gradient {
11
+ --ai-primary: #667eea;
12
+ --ai-message-user-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
13
+ --ai-message-user-text: #fff;
14
+ --ai-message-ai-bg: #fff;
15
+ --ai-message-ai-text: #333;
16
+ }
17
+
18
+ /* body 渐变背景 */
19
+ .ai-theme-gradient-host,
20
+ body[data-theme='gradient'] {
21
+ background: linear-gradient(
22
+ 135deg,
23
+ #f093fb 0%,
24
+ #f5576c 25%,
25
+ #4facfe 50%,
26
+ #00f2fe 75%,
27
+ #43e97b 100%
28
+ );
29
+ background-size: 400% 400%;
30
+ animation: ai-gradient-shift 15s ease infinite;
31
+ }
32
+ @keyframes ai-gradient-shift {
33
+ 0% { background-position: 0% 50%; }
34
+ 50% { background-position: 100% 50%; }
35
+ 100% { background-position: 0% 50%; }
36
+ }
37
+
38
+ /* 容器 */
39
+ .ai-theme-gradient .ai-chat,
40
+ [data-theme='gradient'] .ai-chat {
41
+ background: #fff;
42
+ border-radius: 30px;
43
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
44
+ overflow: hidden;
45
+ font-family: 'Segoe UI', sans-serif;
46
+ }
47
+
48
+ /* Header */
49
+ .ai-theme-gradient .ai-chat__header,
50
+ [data-theme='gradient'] .ai-chat__header {
51
+ padding: 24px 20px;
52
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
53
+ color: #fff;
54
+ text-align: center;
55
+ display: flex;
56
+ flex-direction: column;
57
+ align-items: center;
58
+ gap: 4px;
59
+ border-bottom: none;
60
+ }
61
+ .ai-theme-gradient .ai-chat__avatar,
62
+ [data-theme='gradient'] .ai-chat__avatar { display: none; }
63
+ .ai-theme-gradient .ai-chat__title,
64
+ [data-theme='gradient'] .ai-chat__title {
65
+ font-size: 20px;
66
+ font-weight: 700;
67
+ color: #fff;
68
+ margin: 0;
69
+ }
70
+ .ai-theme-gradient .ai-chat__subtitle,
71
+ [data-theme='gradient'] .ai-chat__subtitle {
72
+ font-size: 12px;
73
+ opacity: 0.85;
74
+ color: #fff;
75
+ margin: 0;
76
+ }
77
+ .ai-theme-gradient .ai-chat__title-group,
78
+ [data-theme='gradient'] .ai-chat__title-group {
79
+ text-align: center;
80
+ }
81
+
82
+ /* Messages */
83
+ .ai-theme-gradient .ai-chat__messages,
84
+ [data-theme='gradient'] .ai-chat__messages {
85
+ background: #fafafa;
86
+ padding: 20px;
87
+ gap: 16px;
88
+ }
89
+
90
+ /* Message */
91
+ .ai-theme-gradient .ai-message,
92
+ [data-theme='gradient'] .ai-message {
93
+ max-width: 80%;
94
+ animation: ai-pop-in 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
95
+ }
96
+ .ai-theme-gradient .ai-message__avatar,
97
+ [data-theme='gradient'] .ai-message__avatar { display: none; }
98
+ .ai-theme-gradient .ai-message__content,
99
+ [data-theme='gradient'] .ai-message__content {
100
+ padding: 14px 18px;
101
+ font-size: 14px;
102
+ line-height: 1.6;
103
+ }
104
+ .ai-theme-gradient .ai-message--user .ai-message__content,
105
+ [data-theme='gradient'] .ai-message--user .ai-message__content {
106
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
107
+ color: #fff;
108
+ border-radius: 20px 20px 6px 20px;
109
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
110
+ }
111
+ .ai-theme-gradient .ai-message--assistant .ai-message__content,
112
+ [data-theme='gradient'] .ai-message--assistant .ai-message__content {
113
+ background: #fff;
114
+ color: #333;
115
+ border: 1px solid #f0f0f0;
116
+ border-radius: 20px 20px 20px 6px;
117
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08);
118
+ }
119
+ .ai-theme-gradient .ai-message__time,
120
+ [data-theme='gradient'] .ai-message__time {
121
+ font-size: 11px;
122
+ color: #999;
123
+ margin-top: 4px;
124
+ }
125
+
126
+ @keyframes ai-pop-in {
127
+ 0% { transform: scale(0.8); opacity: 0; }
128
+ 100% { transform: scale(1); opacity: 1; }
129
+ }
130
+
131
+ /* Input */
132
+ .ai-theme-gradient .ai-input,
133
+ [data-theme='gradient'] .ai-input {
134
+ padding: 16px 20px;
135
+ background: #fff;
136
+ border-top: 1px solid #f0f0f0;
137
+ }
138
+ .ai-theme-gradient .ai-input__wrapper,
139
+ [data-theme='gradient'] .ai-input__wrapper {
140
+ display: flex;
141
+ gap: 12px;
142
+ align-items: center;
143
+ }
144
+ .ai-theme-gradient .ai-input__textarea,
145
+ [data-theme='gradient'] .ai-input__textarea {
146
+ flex: 1;
147
+ padding: 14px 20px;
148
+ border: none;
149
+ background: #f5f5f5;
150
+ border-radius: 25px;
151
+ font-size: 14px;
152
+ outline: none;
153
+ resize: none;
154
+ min-height: 48px;
155
+ max-height: 120px;
156
+ transition: all 0.3s;
157
+ color: #333;
158
+ }
159
+ .ai-theme-gradient .ai-input__textarea:focus,
160
+ [data-theme='gradient'] .ai-input__textarea:focus {
161
+ background: #eee;
162
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2);
163
+ }
164
+ .ai-theme-gradient .ai-input__textarea::placeholder,
165
+ [data-theme='gradient'] .ai-input__textarea::placeholder { color: #999; }
166
+ .ai-theme-gradient .ai-input__send,
167
+ [data-theme='gradient'] .ai-input__send {
168
+ width: 48px;
169
+ height: 48px;
170
+ border: none;
171
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
172
+ color: #fff;
173
+ border-radius: 50%;
174
+ cursor: pointer;
175
+ font-size: 20px;
176
+ transition: all 0.3s;
177
+ box-shadow: 0 4px 15px rgba(245, 87, 108, 0.4);
178
+ display: flex;
179
+ align-items: center;
180
+ justify-content: center;
181
+ padding: 0;
182
+ flex-shrink: 0;
183
+ }
184
+ .ai-theme-gradient .ai-input__send:hover:not(:disabled),
185
+ [data-theme='gradient'] .ai-input__send:hover:not(:disabled) {
186
+ transform: scale(1.1) rotate(15deg);
187
+ box-shadow: 0 6px 20px rgba(245, 87, 108, 0.6);
188
+ }
189
+
190
+ /* Typing */
191
+ .ai-theme-gradient .ai-typing-indicator,
192
+ [data-theme='gradient'] .ai-typing-indicator {
193
+ display: flex;
194
+ gap: 4px;
195
+ padding: 14px 18px;
196
+ background: #fff;
197
+ border: 1px solid #f0f0f0;
198
+ border-radius: 20px 20px 20px 6px;
199
+ width: fit-content;
200
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08);
201
+ }
202
+ .ai-theme-gradient .ai-typing-indicator__dot,
203
+ [data-theme='gradient'] .ai-typing-indicator__dot {
204
+ width: 6px;
205
+ height: 6px;
206
+ background: #999;
207
+ border-radius: 50%;
208
+ animation: ai-typing-bounce 1.4s infinite;
209
+ }
210
+ .ai-theme-gradient .ai-typing-indicator__dot:nth-child(2),
211
+ [data-theme='gradient'] .ai-typing-indicator__dot:nth-child(2) { animation-delay: 0.2s; }
212
+ .ai-theme-gradient .ai-typing-indicator__dot:nth-child(3),
213
+ [data-theme='gradient'] .ai-typing-indicator__dot:nth-child(3) { animation-delay: 0.4s; }
214
+
215
+ @keyframes ai-typing-bounce {
216
+ 0%, 60%, 100% { transform: translateY(0); }
217
+ 30% { transform: translateY(-6px); }
218
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ */
5
+
6
+ export { minimalTheme } from './minimal/index.js';
7
+ export { neonTheme } from './neon/index.js';
8
+ export { glassTheme } from './glass/index.js';
9
+ export { terminalTheme } from './terminal/index.js';
10
+ export { gradientTheme } from './gradient/index.js';
11
+ export { corporateTheme } from './corporate/index.js';
12
+
13
+ export type { ThemeConfig } from './types.js';
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ */
5
+
6
+ import type { ThemeConfig } from '../types.js';
7
+ import themeStyles from './theme.css?raw';
8
+
9
+ export const minimalTheme: ThemeConfig = {
10
+ name: 'minimal',
11
+ variables: {
12
+ '--ai-primary': '#0071e3',
13
+ '--ai-primary-hover': '#0077ed',
14
+ '--ai-primary-active': '#0056b3',
15
+ '--ai-bg-primary': '#ffffff',
16
+ '--ai-bg-secondary': '#f5f5f7',
17
+ '--ai-bg-tertiary': '#fafafa',
18
+ '--ai-bg-chat': '#f5f5f7',
19
+ '--ai-text-primary': '#1d1d1f',
20
+ '--ai-text-secondary': '#86868b',
21
+ '--ai-text-tertiary': '#a1a1a6',
22
+ '--ai-text-inverse': '#ffffff',
23
+ '--ai-message-user-bg': '#0071e3',
24
+ '--ai-message-user-text': '#ffffff',
25
+ '--ai-message-ai-bg': '#e5e5ea',
26
+ '--ai-message-ai-text': '#1d1d1f',
27
+ '--ai-message-border': '#e5e5ea',
28
+ '--ai-input-bg': '#ffffff',
29
+ '--ai-input-border': '#e5e5ea',
30
+ '--ai-input-focus-border': '#0071e3',
31
+ '--ai-input-text': '#1d1d1f',
32
+ '--ai-input-placeholder': '#86868b',
33
+ '--ai-tool-call-bg': '#f6f8fa',
34
+ '--ai-tool-call-border': '#d1d9e0',
35
+ '--ai-tool-call-success': '#52c41a',
36
+ '--ai-tool-call-error': '#ff4d4f',
37
+ '--ai-tool-call-running': '#0071e3',
38
+ '--ai-shadow-sm': '0 1px 2px rgba(0, 0, 0, 0.06)',
39
+ '--ai-shadow-md': '0 2px 8px rgba(0, 0, 0, 0.08)',
40
+ '--ai-shadow-lg': '0 4px 16px rgba(0, 0, 0, 0.1)',
41
+ '--ai-radius-sm': '6px',
42
+ '--ai-radius-md': '12px',
43
+ '--ai-radius-lg': '18px',
44
+ '--ai-radius-xl': '24px',
45
+ '--ai-spacing-xs': '4px',
46
+ '--ai-spacing-sm': '8px',
47
+ '--ai-spacing-md': '12px',
48
+ '--ai-spacing-lg': '16px',
49
+ '--ai-spacing-xl': '24px',
50
+ },
51
+ styles: themeStyles,
52
+ };