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,198 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ *
5
+ * Minimal Clean —— 苹果极简风
6
+ * 对齐 docs/chat-style-1-minimal.html
7
+ */
8
+
9
+ :root[data-theme='minimal'],
10
+ .ai-theme-minimal {
11
+ --ai-primary: #0071e3;
12
+ --ai-primary-hover: #0077ed;
13
+ --ai-primary-active: #0056b3;
14
+ --ai-bg-primary: #ffffff;
15
+ --ai-bg-secondary: #f5f5f7;
16
+ --ai-bg-chat: #ffffff;
17
+ --ai-text-primary: #1d1d1f;
18
+ --ai-text-secondary: #86868b;
19
+ --ai-text-tertiary: #a1a1a6;
20
+ --ai-text-inverse: #ffffff;
21
+ --ai-message-user-bg: #0071e3;
22
+ --ai-message-user-text: #ffffff;
23
+ --ai-message-ai-bg: #e5e5ea;
24
+ --ai-message-ai-text: #1d1d1f;
25
+ --ai-border: #e5e5ea;
26
+ }
27
+
28
+ /* 容器 */
29
+ .ai-theme-minimal .ai-chat,
30
+ [data-theme='minimal'] .ai-chat {
31
+ background: var(--ai-bg-primary);
32
+ border-radius: 24px;
33
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
34
+ overflow: hidden;
35
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
36
+ }
37
+
38
+ /* Header */
39
+ .ai-theme-minimal .ai-chat__header,
40
+ [data-theme='minimal'] .ai-chat__header {
41
+ padding: 20px;
42
+ background: var(--ai-bg-primary);
43
+ border-bottom: 1px solid var(--ai-border);
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 12px;
47
+ }
48
+ .ai-theme-minimal .ai-chat__avatar,
49
+ [data-theme='minimal'] .ai-chat__avatar {
50
+ width: 40px;
51
+ height: 40px;
52
+ border-radius: 50%;
53
+ background: linear-gradient(135deg, #0071e3, #42a4ff);
54
+ color: #fff;
55
+ font-size: 18px;
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ }
60
+ .ai-theme-minimal .ai-chat__title,
61
+ [data-theme='minimal'] .ai-chat__title {
62
+ font-size: 16px;
63
+ font-weight: 600;
64
+ color: var(--ai-text-primary);
65
+ }
66
+ .ai-theme-minimal .ai-chat__subtitle,
67
+ [data-theme='minimal'] .ai-chat__subtitle {
68
+ font-size: 12px;
69
+ color: var(--ai-text-secondary);
70
+ }
71
+
72
+ /* Messages */
73
+ .ai-theme-minimal .ai-chat__messages,
74
+ [data-theme='minimal'] .ai-chat__messages {
75
+ background: var(--ai-bg-primary);
76
+ padding: 20px;
77
+ gap: 12px;
78
+ }
79
+
80
+ /* Message */
81
+ .ai-theme-minimal .ai-message,
82
+ [data-theme='minimal'] .ai-message {
83
+ max-width: 75%;
84
+ }
85
+ .ai-theme-minimal .ai-message__avatar,
86
+ [data-theme='minimal'] .ai-message__avatar {
87
+ display: none; /* minimal 风格不需要头像 */
88
+ }
89
+ .ai-theme-minimal .ai-message__content,
90
+ [data-theme='minimal'] .ai-message__content {
91
+ padding: 12px 16px;
92
+ border-radius: 18px;
93
+ font-size: 14px;
94
+ line-height: 1.5;
95
+ }
96
+ .ai-theme-minimal .ai-message--user .ai-message__content,
97
+ [data-theme='minimal'] .ai-message--user .ai-message__content {
98
+ background: var(--ai-message-user-bg);
99
+ color: var(--ai-message-user-text);
100
+ border-bottom-right-radius: 6px;
101
+ }
102
+ .ai-theme-minimal .ai-message--assistant .ai-message__content,
103
+ [data-theme='minimal'] .ai-message--assistant .ai-message__content {
104
+ background: var(--ai-message-ai-bg);
105
+ color: var(--ai-message-ai-text);
106
+ border-bottom-left-radius: 6px;
107
+ }
108
+ .ai-theme-minimal .ai-message__time,
109
+ [data-theme='minimal'] .ai-message__time {
110
+ display: none;
111
+ }
112
+
113
+ /* Input */
114
+ .ai-theme-minimal .ai-input,
115
+ [data-theme='minimal'] .ai-input {
116
+ padding: 16px 20px;
117
+ background: var(--ai-bg-primary);
118
+ border-top: 1px solid var(--ai-border);
119
+ }
120
+ .ai-theme-minimal .ai-input__wrapper,
121
+ [data-theme='minimal'] .ai-input__wrapper {
122
+ display: flex;
123
+ gap: 12px;
124
+ align-items: center;
125
+ }
126
+ .ai-theme-minimal .ai-input__textarea,
127
+ [data-theme='minimal'] .ai-input__textarea {
128
+ flex: 1;
129
+ padding: 12px 16px;
130
+ border: 1px solid var(--ai-border);
131
+ border-radius: 20px;
132
+ background: #fff;
133
+ color: var(--ai-text-primary);
134
+ font-size: 14px;
135
+ outline: none;
136
+ resize: none;
137
+ min-height: 44px;
138
+ max-height: 120px;
139
+ transition: border-color 0.2s;
140
+ }
141
+ .ai-theme-minimal .ai-input__textarea:focus,
142
+ [data-theme='minimal'] .ai-input__textarea:focus {
143
+ border-color: var(--ai-primary);
144
+ }
145
+ .ai-theme-minimal .ai-input__send,
146
+ [data-theme='minimal'] .ai-input__send {
147
+ width: 40px;
148
+ height: 40px;
149
+ border: none;
150
+ border-radius: 50%;
151
+ background: var(--ai-primary);
152
+ color: #fff;
153
+ font-size: 18px;
154
+ cursor: pointer;
155
+ transition: transform 0.2s;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ padding: 0;
160
+ }
161
+ .ai-theme-minimal .ai-input__send:hover:not(:disabled),
162
+ [data-theme='minimal'] .ai-input__send:hover:not(:disabled) {
163
+ transform: scale(1.05);
164
+ }
165
+ .ai-theme-minimal .ai-input__send:disabled,
166
+ [data-theme='minimal'] .ai-input__send:disabled {
167
+ opacity: 0.4;
168
+ cursor: not-allowed;
169
+ }
170
+
171
+ /* Typing */
172
+ .ai-theme-minimal .ai-typing-indicator,
173
+ [data-theme='minimal'] .ai-typing-indicator {
174
+ display: flex;
175
+ gap: 4px;
176
+ padding: 12px 16px;
177
+ background: var(--ai-message-ai-bg);
178
+ border-radius: 18px;
179
+ align-self: flex-start;
180
+ width: fit-content;
181
+ }
182
+ .ai-theme-minimal .ai-typing-indicator__dot,
183
+ [data-theme='minimal'] .ai-typing-indicator__dot {
184
+ width: 6px;
185
+ height: 6px;
186
+ background: var(--ai-text-secondary);
187
+ border-radius: 50%;
188
+ animation: ai-typing-bounce 1.4s infinite;
189
+ }
190
+ .ai-theme-minimal .ai-typing-indicator__dot:nth-child(2),
191
+ [data-theme='minimal'] .ai-typing-indicator__dot:nth-child(2) { animation-delay: 0.2s; }
192
+ .ai-theme-minimal .ai-typing-indicator__dot:nth-child(3),
193
+ [data-theme='minimal'] .ai-typing-indicator__dot:nth-child(3) { animation-delay: 0.4s; }
194
+
195
+ @keyframes ai-typing-bounce {
196
+ 0%, 60%, 100% { transform: translateY(0); }
197
+ 30% { transform: translateY(-8px); }
198
+ }
@@ -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 neonTheme: ThemeConfig = {
10
+ name: 'neon',
11
+ variables: {
12
+ '--ai-primary': '#7f5af0',
13
+ '--ai-primary-hover': '#9f7aea',
14
+ '--ai-primary-active': '#6b46c1',
15
+ '--ai-bg-primary': '#1a1a2e',
16
+ '--ai-bg-secondary': '#16213e',
17
+ '--ai-bg-tertiary': '#0f3460',
18
+ '--ai-bg-chat': '#0a0a0a',
19
+ '--ai-text-primary': '#00ffff',
20
+ '--ai-text-secondary': '#7f5af0',
21
+ '--ai-text-tertiary': '#4a5568',
22
+ '--ai-text-inverse': '#ffffff',
23
+ '--ai-message-user-bg': 'linear-gradient(135deg, #7f5af0, #ff006e)',
24
+ '--ai-message-user-text': '#ffffff',
25
+ '--ai-message-ai-bg': '#16213e',
26
+ '--ai-message-ai-text': '#00ffff',
27
+ '--ai-message-border': '#0f3460',
28
+ '--ai-input-bg': '#1a1a2e',
29
+ '--ai-input-border': '#7f5af0',
30
+ '--ai-input-focus-border': '#00ffff',
31
+ '--ai-input-text': '#00ffff',
32
+ '--ai-input-placeholder': '#7f5af0',
33
+ '--ai-tool-call-bg': '#16213e',
34
+ '--ai-tool-call-border': '#0f3460',
35
+ '--ai-tool-call-success': '#00ff88',
36
+ '--ai-tool-call-error': '#ff006e',
37
+ '--ai-tool-call-running': '#7f5af0',
38
+ '--ai-shadow-sm': '0 0 10px rgba(127, 90, 240, 0.3)',
39
+ '--ai-shadow-md': '0 0 20px rgba(127, 90, 240, 0.3)',
40
+ '--ai-shadow-lg': '0 0 30px rgba(120, 0, 255, 0.3), 0 0 60px rgba(0, 255, 255, 0.1)',
41
+ '--ai-radius-sm': '4px',
42
+ '--ai-radius-md': '8px',
43
+ '--ai-radius-lg': '12px',
44
+ '--ai-radius-xl': '16px',
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
+ };
@@ -0,0 +1,233 @@
1
+ /**
2
+ * @generated-by AI: edenxpzhang
3
+ * @generated-date 2026-05-13
4
+ *
5
+ * Dark Neon —— 赛博朋克霓虹
6
+ * 对齐 docs/chat-style-2-neon.html
7
+ */
8
+
9
+ :root[data-theme='neon'],
10
+ .ai-theme-neon {
11
+ --ai-primary: #7f5af0;
12
+ --ai-primary-hover: #9f7aea;
13
+ --ai-bg-primary: #1a1a2e;
14
+ --ai-bg-secondary: #16213e;
15
+ --ai-bg-tertiary: #0f3460;
16
+ --ai-text-primary: #00ffff;
17
+ --ai-text-secondary: #7f5af0;
18
+ --ai-text-inverse: #ffffff;
19
+ --ai-message-user-bg: linear-gradient(135deg, #7f5af0, #ff006e);
20
+ --ai-message-user-text: #ffffff;
21
+ --ai-message-ai-bg: #16213e;
22
+ --ai-message-ai-text: #00ffff;
23
+ }
24
+
25
+ /* 全局背景 —— 让父容器或 body 也带上发光氛围 */
26
+ .ai-theme-neon-host,
27
+ body[data-theme='neon'] {
28
+ background: #0a0a0a;
29
+ }
30
+ .ai-theme-neon-host::before,
31
+ body[data-theme='neon']::before {
32
+ content: '';
33
+ position: fixed;
34
+ inset: 0;
35
+ background:
36
+ radial-gradient(circle at 20% 50%, rgba(120, 0, 255, 0.15) 0%, transparent 50%),
37
+ radial-gradient(circle at 80% 50%, rgba(0, 255, 255, 0.1) 0%, transparent 50%);
38
+ pointer-events: none;
39
+ z-index: 0;
40
+ }
41
+
42
+ /* 容器 */
43
+ .ai-theme-neon .ai-chat,
44
+ [data-theme='neon'] .ai-chat {
45
+ background: var(--ai-bg-primary);
46
+ border: 1px solid var(--ai-bg-secondary);
47
+ border-radius: 16px;
48
+ box-shadow:
49
+ 0 0 30px rgba(120, 0, 255, 0.3),
50
+ 0 0 60px rgba(0, 255, 255, 0.1);
51
+ font-family: 'Courier New', monospace;
52
+ position: relative;
53
+ z-index: 1;
54
+ }
55
+
56
+ /* Header */
57
+ .ai-theme-neon .ai-chat__header,
58
+ [data-theme='neon'] .ai-chat__header {
59
+ padding: 20px;
60
+ background: linear-gradient(135deg, #16213e, #1a1a2e);
61
+ border-bottom: 2px solid var(--ai-bg-tertiary);
62
+ display: flex;
63
+ align-items: center;
64
+ gap: 12px;
65
+ }
66
+ .ai-theme-neon .ai-chat__avatar,
67
+ [data-theme='neon'] .ai-chat__avatar {
68
+ width: 8px;
69
+ height: 8px;
70
+ background: #00ff88;
71
+ border-radius: 50%;
72
+ box-shadow: 0 0 10px #00ff88;
73
+ animation: ai-neon-pulse 2s infinite;
74
+ }
75
+ .ai-theme-neon .ai-chat__title,
76
+ [data-theme='neon'] .ai-chat__title {
77
+ font-size: 16px;
78
+ font-weight: 600;
79
+ color: #00ffff;
80
+ text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
81
+ }
82
+ .ai-theme-neon .ai-chat__subtitle,
83
+ [data-theme='neon'] .ai-chat__subtitle {
84
+ font-size: 12px;
85
+ color: #7f5af0;
86
+ }
87
+
88
+ @keyframes ai-neon-pulse {
89
+ 0%, 100% { opacity: 1; }
90
+ 50% { opacity: 0.5; }
91
+ }
92
+
93
+ /* Messages */
94
+ .ai-theme-neon .ai-chat__messages,
95
+ [data-theme='neon'] .ai-chat__messages {
96
+ background: var(--ai-bg-primary);
97
+ padding: 20px;
98
+ gap: 16px;
99
+ }
100
+ .ai-theme-neon .ai-chat__messages::-webkit-scrollbar,
101
+ [data-theme='neon'] .ai-chat__messages::-webkit-scrollbar { width: 6px; }
102
+ .ai-theme-neon .ai-chat__messages::-webkit-scrollbar-thumb,
103
+ [data-theme='neon'] .ai-chat__messages::-webkit-scrollbar-thumb {
104
+ background: #7f5af0;
105
+ border-radius: 3px;
106
+ }
107
+
108
+ /* Message */
109
+ .ai-theme-neon .ai-message,
110
+ [data-theme='neon'] .ai-message {
111
+ max-width: 80%;
112
+ }
113
+ .ai-theme-neon .ai-message__avatar,
114
+ [data-theme='neon'] .ai-message__avatar { display: none; }
115
+ .ai-theme-neon .ai-message__content,
116
+ [data-theme='neon'] .ai-message__content {
117
+ padding: 14px 18px;
118
+ border-radius: 12px;
119
+ font-size: 14px;
120
+ line-height: 1.6;
121
+ position: relative;
122
+ }
123
+ .ai-theme-neon .ai-message--user .ai-message__content,
124
+ [data-theme='neon'] .ai-message--user .ai-message__content {
125
+ background: var(--ai-message-user-bg);
126
+ color: var(--ai-message-user-text);
127
+ border: 1px solid rgba(127, 90, 240, 0.5);
128
+ box-shadow: 0 0 20px rgba(127, 90, 240, 0.3);
129
+ }
130
+ .ai-theme-neon .ai-message--assistant .ai-message__content,
131
+ [data-theme='neon'] .ai-message--assistant .ai-message__content {
132
+ background: var(--ai-message-ai-bg);
133
+ color: var(--ai-message-ai-text);
134
+ border: 1px solid rgba(0, 255, 255, 0.3);
135
+ box-shadow: 0 0 15px rgba(0, 255, 255, 0.1);
136
+ }
137
+ .ai-theme-neon .ai-message--assistant .ai-message__content::before,
138
+ [data-theme='neon'] .ai-message--assistant .ai-message__content::before {
139
+ content: '⚡';
140
+ position: absolute;
141
+ left: -25px;
142
+ top: 50%;
143
+ transform: translateY(-50%);
144
+ font-size: 16px;
145
+ }
146
+ .ai-theme-neon .ai-message__time,
147
+ [data-theme='neon'] .ai-message__time { display: none; }
148
+
149
+ /* Input */
150
+ .ai-theme-neon .ai-input,
151
+ [data-theme='neon'] .ai-input {
152
+ padding: 16px 20px;
153
+ background: var(--ai-bg-secondary);
154
+ border-top: 2px solid var(--ai-bg-tertiary);
155
+ }
156
+ .ai-theme-neon .ai-input__wrapper,
157
+ [data-theme='neon'] .ai-input__wrapper {
158
+ display: flex;
159
+ gap: 12px;
160
+ align-items: center;
161
+ }
162
+ .ai-theme-neon .ai-input__textarea,
163
+ [data-theme='neon'] .ai-input__textarea {
164
+ flex: 1;
165
+ padding: 12px 16px;
166
+ background: var(--ai-bg-primary);
167
+ border: 2px solid #7f5af0;
168
+ border-radius: 12px;
169
+ color: #00ffff;
170
+ font-family: 'Courier New', monospace;
171
+ font-size: 14px;
172
+ outline: none;
173
+ resize: none;
174
+ min-height: 44px;
175
+ max-height: 120px;
176
+ transition: all 0.3s;
177
+ }
178
+ .ai-theme-neon .ai-input__textarea:focus,
179
+ [data-theme='neon'] .ai-input__textarea:focus {
180
+ border-color: #00ffff;
181
+ box-shadow: 0 0 15px rgba(0, 255, 255, 0.3);
182
+ }
183
+ .ai-theme-neon .ai-input__textarea::placeholder,
184
+ [data-theme='neon'] .ai-input__textarea::placeholder { color: #7f5af0; }
185
+ .ai-theme-neon .ai-input__send,
186
+ [data-theme='neon'] .ai-input__send {
187
+ padding: 12px 24px;
188
+ background: linear-gradient(135deg, #7f5af0, #ff006e);
189
+ border: none;
190
+ color: #fff;
191
+ border-radius: 12px;
192
+ cursor: pointer;
193
+ font-weight: 600;
194
+ font-size: 14px;
195
+ text-transform: uppercase;
196
+ letter-spacing: 1px;
197
+ transition: all 0.3s;
198
+ }
199
+ .ai-theme-neon .ai-input__send:hover:not(:disabled),
200
+ [data-theme='neon'] .ai-input__send:hover:not(:disabled) {
201
+ box-shadow: 0 0 20px rgba(127, 90, 240, 0.5);
202
+ transform: translateY(-2px);
203
+ }
204
+
205
+ /* Typing */
206
+ .ai-theme-neon .ai-typing-indicator,
207
+ [data-theme='neon'] .ai-typing-indicator {
208
+ display: flex;
209
+ gap: 6px;
210
+ padding: 12px 18px;
211
+ background: var(--ai-bg-secondary);
212
+ border-radius: 12px;
213
+ border: 1px solid rgba(0, 255, 255, 0.3);
214
+ width: fit-content;
215
+ }
216
+ .ai-theme-neon .ai-typing-indicator__dot,
217
+ [data-theme='neon'] .ai-typing-indicator__dot {
218
+ width: 8px;
219
+ height: 8px;
220
+ background: #00ffff;
221
+ border-radius: 50%;
222
+ box-shadow: 0 0 6px #00ffff;
223
+ animation: ai-typing-bounce 1.4s infinite;
224
+ }
225
+ .ai-theme-neon .ai-typing-indicator__dot:nth-child(2),
226
+ [data-theme='neon'] .ai-typing-indicator__dot:nth-child(2) { animation-delay: 0.2s; }
227
+ .ai-theme-neon .ai-typing-indicator__dot:nth-child(3),
228
+ [data-theme='neon'] .ai-typing-indicator__dot:nth-child(3) { animation-delay: 0.4s; }
229
+
230
+ @keyframes ai-typing-bounce {
231
+ 0%, 60%, 100% { transform: translateY(0); }
232
+ 30% { transform: translateY(-6px); }
233
+ }
@@ -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 terminalTheme: ThemeConfig = {
10
+ name: 'terminal',
11
+ variables: {
12
+ '--ai-primary': '#00ff00',
13
+ '--ai-primary-hover': '#00ff00',
14
+ '--ai-primary-active': '#00aa00',
15
+ '--ai-bg-primary': '#0a0a0a',
16
+ '--ai-bg-secondary': '#0c0c0c',
17
+ '--ai-bg-tertiary': '#0a0a0a',
18
+ '--ai-bg-chat': '#0a0a0a',
19
+ '--ai-text-primary': '#00ff00',
20
+ '--ai-text-secondary': '#00aa00',
21
+ '--ai-text-tertiary': '#008000',
22
+ '--ai-text-inverse': '#0a0a0a',
23
+ '--ai-message-user-bg': 'transparent',
24
+ '--ai-message-user-text': '#00ffff',
25
+ '--ai-message-ai-bg': 'transparent',
26
+ '--ai-message-ai-text': '#00ff00',
27
+ '--ai-message-border': '#00ff00',
28
+ '--ai-input-bg': 'transparent',
29
+ '--ai-input-border': '#00ff00',
30
+ '--ai-input-focus-border': '#00ff00',
31
+ '--ai-input-text': '#00ff00',
32
+ '--ai-input-placeholder': '#006600',
33
+ '--ai-tool-call-bg': '#0c0c0c',
34
+ '--ai-tool-call-border': '#00ff00',
35
+ '--ai-tool-call-success': '#00ff00',
36
+ '--ai-tool-call-error': '#ff0000',
37
+ '--ai-tool-call-running': '#ffff00',
38
+ '--ai-shadow-sm': '0 0 10px rgba(0, 255, 0, 0.2)',
39
+ '--ai-shadow-md': '0 0 20px rgba(0, 255, 0, 0.3)',
40
+ '--ai-shadow-lg': '0 0 30px rgba(0, 255, 0, 0.3), inset 0 0 30px rgba(0, 255, 0, 0.05)',
41
+ '--ai-radius-sm': '0px',
42
+ '--ai-radius-md': '0px',
43
+ '--ai-radius-lg': '8px',
44
+ '--ai-radius-xl': '8px',
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
+ };