hermes-web-ui 0.1.6 → 0.1.7
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/README.md +75 -12
- package/dist/assets/ChannelsView-BWEvTQwM.css +1 -0
- package/dist/assets/ChannelsView-sOGWQqBR.js +1 -0
- package/dist/assets/ChatView-BYMsYkQ1.css +1 -0
- package/dist/assets/ChatView-Ck4IHVIc.js +142 -0
- package/dist/assets/Close-B7KfM3jl.js +45 -0
- package/dist/assets/FormItem-BdZ_3RxK.js +110 -0
- package/dist/assets/Input-C6bxvAIj.js +234 -0
- package/dist/assets/InputNumber-eI175yNc.js +13 -0
- package/dist/assets/JobsView-DkwaDky6.css +1 -0
- package/dist/assets/JobsView-wXKPSc8W.js +2 -0
- package/dist/assets/LogsView-B2TeFIUX.css +1 -0
- package/dist/assets/LogsView-Ck9HLcnc.js +1 -0
- package/dist/assets/MarkdownRenderer-B_Fo6783.js +23 -0
- package/dist/assets/MemoryView-BUR_XL9x.js +5 -0
- package/dist/assets/MemoryView-CHeaa1-C.css +1 -0
- package/dist/assets/Modal-DYN0wyo2.js +232 -0
- package/dist/assets/ModelsView-CLdtVeiJ.css +1 -0
- package/dist/assets/ModelsView-CkEpCpW4.js +1 -0
- package/dist/assets/Popover-BgNi3Q2J.js +117 -0
- package/dist/assets/Select-DevZ62i5.js +340 -0
- package/dist/assets/SettingRow-HrI0c-1s.css +1 -0
- package/dist/assets/SettingRow-bBgfSbZT.js +102 -0
- package/dist/assets/SettingsView-Cl1ts-YY.css +1 -0
- package/dist/assets/SettingsView-D_qQMAqN.js +352 -0
- package/dist/assets/SkillsView-BvNhRbMq.css +1 -0
- package/dist/assets/SkillsView-C68Fr3t5.js +1 -0
- package/dist/assets/Spin-C1dDkPv8.js +43 -0
- package/dist/assets/Suffix-B6bqA1w3.js +101 -0
- package/dist/assets/Tag-BBWtv463.js +71 -0
- package/dist/assets/Tooltip-D-FlJlcu.js +1 -0
- package/dist/assets/_plugin-vue_export-helper-AI_aJZ2_.js +49 -0
- package/dist/assets/app-DYgUa8EE.js +1 -0
- package/dist/assets/app-DZPFLxKB.js +1 -0
- package/dist/assets/chat-C87W9H3D.js +6 -0
- package/dist/assets/{context-DW8F1iIn.js → context-aD0DoQuE.js} +14 -14
- package/dist/assets/{index-DwVgwUIX.css → index-B7NziQ6I.css} +1 -1
- package/dist/assets/index-BxFv1xVi.js +307 -0
- package/dist/assets/jobs-D_98yklp.js +1 -0
- package/dist/assets/pinia-B7LrvQDh.js +1 -0
- package/dist/assets/preload-helper-D4M6sveU.js +1 -0
- package/dist/assets/{skills-CkDtgKB5.js → skills-nROrsAxi.js} +1 -1
- package/dist/assets/use-message-rwmUYd8q.js +1 -0
- package/dist/assets/vue.runtime.esm-bundler-LsUadeZi.js +3 -0
- package/dist/index.html +16 -16
- package/dist/server/index.js +4 -0
- package/dist/server/routes/config.d.ts +2 -0
- package/dist/server/routes/config.js +314 -0
- package/dist/server/routes/filesystem.js +121 -22
- package/dist/server/routes/weixin.d.ts +2 -0
- package/dist/server/routes/weixin.js +131 -0
- package/dist/server/shared/providers.d.ts +13 -0
- package/dist/server/shared/providers.js +210 -0
- package/package.json +6 -1
- package/dist/assets/ChatView-DmXZ5Q3Z.js +0 -18
- package/dist/assets/ChatView-cCVO1N9F.css +0 -1
- package/dist/assets/Dropdown-8pId5Qsj.js +0 -125
- package/dist/assets/Input-BZKSQ403.js +0 -234
- package/dist/assets/JobsView-BhwwXuLt.css +0 -1
- package/dist/assets/JobsView-CQf4Y7Mw.js +0 -123
- package/dist/assets/LogsView-BN_TkDPi.css +0 -1
- package/dist/assets/LogsView-CKyL3UT5.js +0 -1
- package/dist/assets/MarkdownRenderer-DNP-kPA8.js +0 -23
- package/dist/assets/MemoryView-BBwqM3vf.js +0 -5
- package/dist/assets/MemoryView-CK0PemlP.css +0 -1
- package/dist/assets/Modal-BtRuxNI4.js +0 -232
- package/dist/assets/Popover-C2CJscsj.js +0 -161
- package/dist/assets/Select-CithN5ti.js +0 -410
- package/dist/assets/SettingsView-BzBMKaLz.css +0 -1
- package/dist/assets/SettingsView-D1hOGA0Z.js +0 -1005
- package/dist/assets/SkillsView-86Z-HE_X.css +0 -1
- package/dist/assets/SkillsView-BfnrX5TQ.js +0 -1
- package/dist/assets/Spin-7g8GCzi5.js +0 -43
- package/dist/assets/Suffix-DI9irQ4f.js +0 -101
- package/dist/assets/Tooltip-BdrvORgU.js +0 -1
- package/dist/assets/_plugin-vue_export-helper-BrYOyDjU.js +0 -47
- package/dist/assets/app-JRkV5-Ft.js +0 -1
- package/dist/assets/chat-Cgdof9SF.js +0 -6
- package/dist/assets/index-DP1JeABS.js +0 -307
- package/dist/assets/jobs-DJ8ETzok.js +0 -1
- package/dist/assets/keysOf-Dvq9k1rv.js +0 -1
- package/dist/assets/pinia-tE0RcsDr.js +0 -1
- package/dist/assets/runtime-core.esm-bundler-yNW65ghW.js +0 -1
- package/dist/assets/use-message-Btr-O4Ih.js +0 -1
- /package/dist/assets/{client-kwQ0ijpp.js → client-Df_SqoZl.js} +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider registry — single source of truth for both frontend and backend.
|
|
4
|
+
* Synced from hermes-agent hermes_cli/models.py _PROVIDER_MODELS.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PROVIDER_PRESETS = void 0;
|
|
8
|
+
exports.buildProviderModelMap = buildProviderModelMap;
|
|
9
|
+
exports.PROVIDER_PRESETS = [
|
|
10
|
+
{
|
|
11
|
+
label: 'Anthropic',
|
|
12
|
+
value: 'anthropic',
|
|
13
|
+
base_url: 'https://api.anthropic.com',
|
|
14
|
+
models: [
|
|
15
|
+
'claude-opus-4-6',
|
|
16
|
+
'claude-sonnet-4-6',
|
|
17
|
+
'claude-opus-4-5-20251101',
|
|
18
|
+
'claude-sonnet-4-5-20250929',
|
|
19
|
+
'claude-opus-4-20250514',
|
|
20
|
+
'claude-sonnet-4-20250514',
|
|
21
|
+
'claude-haiku-4-5-20251001',
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: 'Google AI Studio',
|
|
26
|
+
value: 'gemini',
|
|
27
|
+
base_url: 'https://generativelanguage.googleapis.com/v1beta/openai',
|
|
28
|
+
models: [
|
|
29
|
+
'gemini-3.1-pro-preview',
|
|
30
|
+
'gemini-3-flash-preview',
|
|
31
|
+
'gemini-3.1-flash-lite-preview',
|
|
32
|
+
'gemini-2.5-pro',
|
|
33
|
+
'gemini-2.5-flash',
|
|
34
|
+
'gemini-2.5-flash-lite',
|
|
35
|
+
'gemma-4-31b-it',
|
|
36
|
+
'gemma-4-26b-it',
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
label: 'DeepSeek',
|
|
41
|
+
value: 'deepseek',
|
|
42
|
+
base_url: 'https://api.deepseek.com/v1',
|
|
43
|
+
models: ['deepseek-chat', 'deepseek-reasoner'],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: 'Z.AI / GLM',
|
|
47
|
+
value: 'zai',
|
|
48
|
+
base_url: 'https://api.z.ai/api/paas/v4',
|
|
49
|
+
models: ['glm-5', 'glm-5-turbo', 'glm-4.7', 'glm-4.5', 'glm-4.5-flash'],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: 'Kimi Coding Plan',
|
|
53
|
+
value: 'kimi-coding',
|
|
54
|
+
base_url: 'https://api.kimi.com/coding/v1',
|
|
55
|
+
models: [
|
|
56
|
+
'kimi-for-coding',
|
|
57
|
+
'kimi-k2.5',
|
|
58
|
+
'kimi-k2-thinking',
|
|
59
|
+
'kimi-k2-thinking-turbo',
|
|
60
|
+
'kimi-k2-turbo-preview',
|
|
61
|
+
'kimi-k2-0905-preview',
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
label: 'Moonshot (Pay-as-you-go)',
|
|
66
|
+
value: 'moonshot',
|
|
67
|
+
base_url: 'https://api.moonshot.ai/v1',
|
|
68
|
+
models: ['kimi-k2.5', 'kimi-k2-thinking', 'kimi-k2-turbo-preview', 'kimi-k2-0905-preview'],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
label: 'xAI',
|
|
72
|
+
value: 'xai',
|
|
73
|
+
base_url: 'https://api.x.ai/v1',
|
|
74
|
+
models: [
|
|
75
|
+
'grok-4.20-0309-reasoning',
|
|
76
|
+
'grok-4.20-0309-non-reasoning',
|
|
77
|
+
'grok-4-1-fast-reasoning',
|
|
78
|
+
'grok-4-1-fast-non-reasoning',
|
|
79
|
+
'grok-4-fast-reasoning',
|
|
80
|
+
'grok-4-fast-non-reasoning',
|
|
81
|
+
'grok-4-0709',
|
|
82
|
+
'grok-code-fast-1',
|
|
83
|
+
'grok-3',
|
|
84
|
+
'grok-3-mini',
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
label: 'MiniMax',
|
|
89
|
+
value: 'minimax',
|
|
90
|
+
base_url: 'https://api.minimax.io/anthropic',
|
|
91
|
+
models: ['MiniMax-M2.7', 'MiniMax-M2.5', 'MiniMax-M2.1', 'MiniMax-M2'],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
label: 'MiniMax (China)',
|
|
95
|
+
value: 'minimax-cn',
|
|
96
|
+
base_url: 'https://api.minimaxi.com/anthropic',
|
|
97
|
+
models: ['MiniMax-M2.7', 'MiniMax-M2.5', 'MiniMax-M2.1', 'MiniMax-M2'],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
label: 'Alibaba Cloud',
|
|
101
|
+
value: 'alibaba',
|
|
102
|
+
base_url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
|
|
103
|
+
models: [
|
|
104
|
+
'qwen3.5-plus',
|
|
105
|
+
'qwen3-coder-plus',
|
|
106
|
+
'qwen3-coder-next',
|
|
107
|
+
'glm-5',
|
|
108
|
+
'glm-4.7',
|
|
109
|
+
'kimi-k2.5',
|
|
110
|
+
'MiniMax-M2.5',
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
label: 'Hugging Face',
|
|
115
|
+
value: 'huggingface',
|
|
116
|
+
base_url: 'https://router.huggingface.co/v1',
|
|
117
|
+
models: [
|
|
118
|
+
'Qwen/Qwen3.5-397B-A17B',
|
|
119
|
+
'Qwen/Qwen3.5-35B-A3B',
|
|
120
|
+
'deepseek-ai/DeepSeek-V3.2',
|
|
121
|
+
'moonshotai/Kimi-K2.5',
|
|
122
|
+
'MiniMaxAI/MiniMax-M2.5',
|
|
123
|
+
'zai-org/GLM-5',
|
|
124
|
+
'XiaomiMiMo/MiMo-V2-Flash',
|
|
125
|
+
'moonshotai/Kimi-K2-Thinking',
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
label: 'Xiaomi MiMo',
|
|
130
|
+
value: 'xiaomi',
|
|
131
|
+
base_url: 'https://api.xiaomimimo.com/v1',
|
|
132
|
+
models: ['mimo-v2-pro', 'mimo-v2-omni', 'mimo-v2-flash'],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
label: 'Kilo Code',
|
|
136
|
+
value: 'kilocode',
|
|
137
|
+
base_url: 'https://api.kilo.ai/api/gateway',
|
|
138
|
+
models: [
|
|
139
|
+
'anthropic/claude-opus-4.6',
|
|
140
|
+
'anthropic/claude-sonnet-4.6',
|
|
141
|
+
'openai/gpt-5.4',
|
|
142
|
+
'google/gemini-3-pro-preview',
|
|
143
|
+
'google/gemini-3-flash-preview',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
label: 'AI Gateway',
|
|
148
|
+
value: 'ai-gateway',
|
|
149
|
+
base_url: 'https://ai-gateway.vercel.sh/v1',
|
|
150
|
+
models: [
|
|
151
|
+
'anthropic/claude-opus-4.6',
|
|
152
|
+
'anthropic/claude-sonnet-4.6',
|
|
153
|
+
'anthropic/claude-sonnet-4.5',
|
|
154
|
+
'anthropic/claude-haiku-4.5',
|
|
155
|
+
'openai/gpt-5',
|
|
156
|
+
'openai/gpt-4.1',
|
|
157
|
+
'openai/gpt-4.1-mini',
|
|
158
|
+
'google/gemini-3-pro-preview',
|
|
159
|
+
'google/gemini-3-flash',
|
|
160
|
+
'google/gemini-2.5-pro',
|
|
161
|
+
'google/gemini-2.5-flash',
|
|
162
|
+
'deepseek/deepseek-v3.2',
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
label: 'OpenCode Zen',
|
|
167
|
+
value: 'opencode-zen',
|
|
168
|
+
base_url: 'https://opencode.ai/zen/v1',
|
|
169
|
+
models: [
|
|
170
|
+
'gpt-5.4-pro',
|
|
171
|
+
'gpt-5.4',
|
|
172
|
+
'gpt-5.3-codex',
|
|
173
|
+
'gpt-5.2',
|
|
174
|
+
'gpt-5.1',
|
|
175
|
+
'claude-opus-4-6',
|
|
176
|
+
'claude-sonnet-4-6',
|
|
177
|
+
'claude-haiku-4-5',
|
|
178
|
+
'gemini-3.1-pro',
|
|
179
|
+
'gemini-3-pro',
|
|
180
|
+
'gemini-3-flash',
|
|
181
|
+
'minimax-m2.7',
|
|
182
|
+
'minimax-m2.5',
|
|
183
|
+
'glm-5',
|
|
184
|
+
'glm-4.7',
|
|
185
|
+
'kimi-k2.5',
|
|
186
|
+
],
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
label: 'OpenCode Go',
|
|
190
|
+
value: 'opencode-go',
|
|
191
|
+
base_url: 'https://opencode.ai/zen/go/v1',
|
|
192
|
+
models: ['glm-5', 'kimi-k2.5', 'mimo-v2-pro', 'mimo-v2-omni', 'minimax-m2.7', 'minimax-m2.5'],
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
label: 'OpenRouter',
|
|
196
|
+
value: 'openrouter',
|
|
197
|
+
base_url: 'https://openrouter.ai/api/v1',
|
|
198
|
+
models: [],
|
|
199
|
+
},
|
|
200
|
+
];
|
|
201
|
+
/** Build a Record<providerKey, models[]> for backend lookup */
|
|
202
|
+
function buildProviderModelMap() {
|
|
203
|
+
const map = {};
|
|
204
|
+
for (const p of exports.PROVIDER_PRESETS) {
|
|
205
|
+
if (p.models.length > 0) {
|
|
206
|
+
map[p.value] = p.models;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return map;
|
|
210
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hermes-web-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Hermes Agent Web UI - Chat and Job Management Dashboard",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,16 +28,20 @@
|
|
|
28
28
|
"@koa/cors": "^5.0.0",
|
|
29
29
|
"@koa/router": "^13.1.0",
|
|
30
30
|
"highlight.js": "^11.11.1",
|
|
31
|
+
"js-yaml": "^4.1.1",
|
|
31
32
|
"koa": "^2.15.3",
|
|
32
33
|
"koa-send": "^5.0.1",
|
|
33
34
|
"koa-static": "^5.0.0",
|
|
34
35
|
"markdown-it": "^14.1.1",
|
|
35
36
|
"naive-ui": "^2.44.1",
|
|
36
37
|
"pinia": "^3.0.4",
|
|
38
|
+
"qrcode": "^1.5.4",
|
|
37
39
|
"vue": "^3.5.32",
|
|
40
|
+
"vue-i18n": "^11.3.2",
|
|
38
41
|
"vue-router": "^4.6.4"
|
|
39
42
|
},
|
|
40
43
|
"devDependencies": {
|
|
44
|
+
"@types/js-yaml": "^4.0.9",
|
|
41
45
|
"@types/koa": "^2.15.0",
|
|
42
46
|
"@types/koa__cors": "^5.0.0",
|
|
43
47
|
"@types/koa__router": "^12.0.4",
|
|
@@ -45,6 +49,7 @@
|
|
|
45
49
|
"@types/koa-static": "^4.0.4",
|
|
46
50
|
"@types/markdown-it": "^14.1.2",
|
|
47
51
|
"@types/node": "^24.12.2",
|
|
52
|
+
"@types/qrcode": "^1.5.6",
|
|
48
53
|
"@vitejs/plugin-vue": "^6.0.5",
|
|
49
54
|
"@vue/tsconfig": "^0.9.1",
|
|
50
55
|
"concurrently": "^9.2.1",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./MarkdownRenderer-DNP-kPA8.js";import{C as t,Ct as n,E as r,F as i,G as a,I as o,K as s,L as c,M as l,U as u,_ as d,at as f,d as p,f as m,g as h,i as g,l as _,p as v,st as y,tt as b,u as x,v as S,wt as C,x as w}from"./runtime-core.esm-bundler-yNW65ghW.js";import{H as T,St as E,Tt as D,V as O,X as k,Y as A,c as j,ct as M,dt as N,l as P,lt as F,q as I,r as L,t as R,tt as z,wt as ee}from"./_plugin-vue_export-helper-BrYOyDjU.js";import{c as B,t as te}from"./Modal-BtRuxNI4.js";import{d as V,i as H,n as U,t as W}from"./Popover-C2CJscsj.js";import{l as G,u as K}from"./Suffix-DI9irQ4f.js";import{t as ne}from"./Dropdown-8pId5Qsj.js";import{a as re,r as q}from"./context-DW8F1iIn.js";import{t as ie}from"./keysOf-Dvq9k1rv.js";import{t as ae}from"./omit-QZj0aLfU.js";import{t as oe}from"./Input-BZKSQ403.js";import{t as J}from"./Tooltip-BdrvORgU.js";import{t as se}from"./use-message-Btr-O4Ih.js";import{n as ce,r as le,t as Y}from"./chat-Cgdof9SF.js";import{n as ue}from"./app-JRkV5-Ft.js";var de={iconSize:`22px`};function fe(e){let{fontSize:t,warningColor:n}=e;return Object.assign(Object.assign({},de),{fontSize:t,iconColor:n})}var pe=j({name:`Popconfirm`,common:L,peers:{Button:re,Popover:H},self:fe}),X=z(`n-popconfirm`),Z={positiveText:String,negativeText:String,showIcon:{type:Boolean,default:!0},onPositiveClick:{type:Function,required:!0},onNegativeClick:{type:Function,required:!0}},Q=ie(Z),me=S({name:`NPopconfirmPanel`,props:Z,setup(e){let{localeRef:n}=K(`Popconfirm`),{inlineThemeDisabled:r}=T(),{mergedClsPrefixRef:i,mergedThemeRef:a,props:o}=t(X),s=_(()=>{let{common:{cubicBezierEaseInOut:e},self:{fontSize:t,iconSize:n,iconColor:r}}=a.value;return{"--n-bezier":e,"--n-font-size":t,"--n-icon-size":n,"--n-icon-color":r}}),c=r?O(`popconfirm-panel`,void 0,s,o):void 0;return Object.assign(Object.assign({},K(`Popconfirm`)),{mergedClsPrefix:i,cssVars:r?void 0:s,localizedPositiveText:_(()=>e.positiveText||n.value.positiveText),localizedNegativeText:_(()=>e.negativeText||n.value.negativeText),positiveButtonProps:f(o,`positiveButtonProps`),negativeButtonProps:f(o,`negativeButtonProps`),handlePositiveClick(t){e.onPositiveClick(t)},handleNegativeClick(t){e.onNegativeClick(t)},themeClass:c?.themeClass,onRender:c?.onRender})},render(){var e;let{mergedClsPrefix:t,showIcon:n,$slots:r}=this,i=I(r.action,()=>this.negativeText===null&&this.positiveText===null?[]:[this.negativeText!==null&&w(q,Object.assign({size:`small`,onClick:this.handleNegativeClick},this.negativeButtonProps),{default:()=>this.localizedNegativeText}),this.positiveText!==null&&w(q,Object.assign({size:`small`,type:`primary`,onClick:this.handlePositiveClick},this.positiveButtonProps),{default:()=>this.localizedPositiveText})]);return(e=this.onRender)==null||e.call(this),w(`div`,{class:[`${t}-popconfirm__panel`,this.themeClass],style:this.cssVars},A(r.default,e=>n||e?w(`div`,{class:`${t}-popconfirm__body`},n?w(`div`,{class:`${t}-popconfirm__icon`},I(r.icon,()=>[w(G,{clsPrefix:t},{default:()=>w(B,null)})])):null,e):null),i?w(`div`,{class:[`${t}-popconfirm__action`]},i):null)}}),he=F(`popconfirm`,[N(`body`,`
|
|
2
|
-
font-size: var(--n-font-size);
|
|
3
|
-
display: flex;
|
|
4
|
-
align-items: center;
|
|
5
|
-
flex-wrap: nowrap;
|
|
6
|
-
position: relative;
|
|
7
|
-
`,[N(`icon`,`
|
|
8
|
-
display: flex;
|
|
9
|
-
font-size: var(--n-icon-size);
|
|
10
|
-
color: var(--n-icon-color);
|
|
11
|
-
transition: color .3s var(--n-bezier);
|
|
12
|
-
margin: 0 8px 0 0;
|
|
13
|
-
`)]),N(`action`,`
|
|
14
|
-
display: flex;
|
|
15
|
-
justify-content: flex-end;
|
|
16
|
-
`,[M(`&:not(:first-child)`,`margin-top: 8px`),F(`button`,[M(`&:not(:last-child)`,`margin-right: 8px;`)])])]),ge=S({name:`Popconfirm`,props:Object.assign(Object.assign(Object.assign({},P.props),U),{positiveText:String,negativeText:String,showIcon:{type:Boolean,default:!0},trigger:{type:String,default:`click`},positiveButtonProps:Object,negativeButtonProps:Object,onPositiveClick:Function,onNegativeClick:Function}),slots:Object,__popover__:!0,setup(e){let{mergedClsPrefixRef:t}=T(),n=P(`Popconfirm`,`-popconfirm`,he,pe,e,t),r=b(null);function i(t){if(!r.value?.getMergedShow())return;let{onPositiveClick:n,"onUpdate:show":i}=e;Promise.resolve(n?n(t):!0).then(e=>{var t;e!==!1&&((t=r.value)==null||t.setShow(!1),i&&k(i,!1))})}function a(t){if(!r.value?.getMergedShow())return;let{onNegativeClick:n,"onUpdate:show":i}=e;Promise.resolve(n?n(t):!0).then(e=>{var t;e!==!1&&((t=r.value)==null||t.setShow(!1),i&&k(i,!1))})}return o(X,{mergedThemeRef:n,mergedClsPrefixRef:t,props:e}),{setShow(e){var t;(t=r.value)==null||t.setShow(e)},syncPosition(){var e;(e=r.value)==null||e.syncPosition()},mergedTheme:n,popoverInstRef:r,handlePositiveClick:i,handleNegativeClick:a}},render(){let{$slots:e,$props:t,mergedTheme:n}=this;return w(W,Object.assign({},ae(t,Q),{theme:n.peers.Popover,themeOverrides:n.peerOverrides.Popover,internalExtraClass:[`popconfirm`],ref:`popoverInstRef`}),{trigger:e.trigger,default:()=>{let n=V(t,Q);return w(me,Object.assign({},n,{onPositiveClick:this.handlePositiveClick,onNegativeClick:this.handleNegativeClick}),e)}})}}),_e={class:`chat-input-area`},ve={key:0,class:`attachment-previews`},ye=[`src`,`alt`],be={key:1,class:`attachment-file`},xe={class:`file-name`},Se={class:`file-size`},Ce=[`onClick`],we={class:`input-actions`},Te=R(S({__name:`ChatInput`,setup(e){let t=Y(),r=b(``),o=b(),l=b(),u=b([]),f=b(!1),S=b(0),w=_(()=>r.value.trim()||u.value.length>0);function T(e){if(u.value.find(t=>t.name===e.name))return;let t=Date.now().toString(36)+Math.random().toString(36).slice(2,8),n=URL.createObjectURL(e);u.value.push({id:t,name:e.name,type:e.type,size:e.size,url:n,file:e})}function D(){l.value?.click()}function O(e){let t=e.target;if(t.files){for(let e of t.files)T(e);t.value=``}}function k(e){let t=Array.from(e.clipboardData?.items||[]).filter(e=>e.type.startsWith(`image/`));if(t.length){e.preventDefault();for(let e of t){let t=e.getAsFile();if(!t)continue;let n=e.type.split(`/`)[1]||`png`;T(new File([t],`pasted-${Date.now()}.${n}`,{type:e.type}))}}}function A(e){e.preventDefault()}function j(e){e.preventDefault(),e.dataTransfer?.types.includes(`Files`)&&(S.value++,f.value=!0)}function M(){S.value--,S.value<=0&&(S.value=0,f.value=!1)}function N(e){e.preventDefault(),S.value=0,f.value=!1;let t=Array.from(e.dataTransfer?.files||[]);if(t.length){for(let e of t)T(e);o.value?.focus()}}function P(){let e=r.value.trim();!e&&u.value.length===0||(t.sendMessage(e,u.value.length>0?u.value:void 0),r.value=``,u.value=[],o.value&&(o.value.style.height=`auto`))}function F(e){e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),P())}function I(e){let t=e.target;t.style.height=`auto`,t.style.height=Math.min(t.scrollHeight,100)+`px`}function L(e){let t=u.value.findIndex(t=>t.id===e);t!==-1&&(URL.revokeObjectURL(u.value[t].url),u.value.splice(t,1))}function R(e){return e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+` KB`:(e/(1024*1024)).toFixed(1)+` MB`}function z(e){return e.startsWith(`image/`)}return(e,_)=>(i(),v(`div`,_e,[u.value.length>0?(i(),v(`div`,ve,[(i(!0),v(g,null,c(u.value,e=>(i(),v(`div`,{key:e.id,class:n([`attachment-preview`,{image:z(e.type)}])},[z(e.type)?(i(),v(`img`,{key:0,src:e.url,alt:e.name,class:`attachment-thumb`},null,8,ye)):(i(),v(`div`,be,[_[2]||=x(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[x(`path`,{d:`M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z`}),x(`polyline`,{points:`14 2 14 8 20 8`})],-1),x(`span`,xe,C(e.name),1),x(`span`,Se,C(R(e.size)),1)])),x(`button`,{class:`attachment-remove`,onClick:t=>L(e.id)},[..._[3]||=[x(`svg`,{width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[x(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),x(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]],8,Ce)],2))),128))])):m(``,!0),x(`div`,{class:n([`input-wrapper`,{"drag-over":f.value}]),onDragover:A,onDragenter:j,onDragleave:M,onDrop:N},[x(`input`,{ref_key:`fileInputRef`,ref:l,type:`file`,multiple:``,class:`file-input-hidden`,onChange:O},null,544),s(x(`textarea`,{ref_key:`textareaRef`,ref:o,"onUpdate:modelValue":_[0]||=e=>r.value=e,class:`input-textarea`,placeholder:`Type a message... (Enter to send, Shift+Enter for new line)`,rows:`1`,onKeydown:F,onInput:I,onPaste:k},null,544),[[E,r.value]]),x(`div`,we,[d(y(J),{trigger:`hover`},{trigger:a(()=>[d(y(q),{quaternary:``,size:`small`,onClick:D,circle:``},{icon:a(()=>[..._[4]||=[x(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[x(`path`,{d:`M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48`})],-1)]]),_:1})]),default:a(()=>[_[5]||=h(` Attach files `,-1)]),_:1}),y(t).isStreaming?(i(),p(y(q),{key:0,size:`small`,type:`error`,onClick:_[1]||=e=>y(t).stopStreaming()},{default:a(()=>[..._[6]||=[h(` Stop `,-1)]]),_:1})):m(``,!0),d(y(q),{size:`small`,type:`primary`,disabled:!w.value||y(t).isStreaming,onClick:P},{icon:a(()=>[..._[7]||=[x(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[x(`line`,{x1:`22`,y1:`2`,x2:`11`,y2:`13`}),x(`polygon`,{points:`22 2 15 22 11 13 2 9 22 2`})],-1)]]),default:a(()=>[_[8]||=h(` Send `,-1)]),_:1},8,[`disabled`])])],34)]))}}),[[`__scopeId`,`data-v-38a3b8f9`]]),Ee={key:1,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,class:`tool-icon`},De={class:`tool-name`},Oe={key:2,class:`tool-preview`},ke={key:3,class:`tool-spinner`},Ae={key:4,class:`tool-error-badge`},je={key:0,class:`tool-details`},Me={key:0,class:`tool-detail-section`},Ne={class:`tool-detail-code`},Pe={key:1,class:`tool-detail-section`},Fe={class:`tool-detail-code`},Ie={key:1,class:`msg-body`},Le={key:0,src:le,alt:`Hermes`,class:`msg-avatar`},Re={key:0,class:`msg-attachments`},ze=[`src`,`alt`],Be={key:1,class:`msg-attachment-file`},Ve={class:`att-name`},He={class:`att-size`},Ue={key:2,class:`streaming-cursor`},We={key:3,class:`streaming-dots`},Ge={class:`message-time`},Ke=R(S({__name:`MessageItem`,props:{message:{}},setup(t){let r=t,a=_(()=>r.message.role===`system`),o=b(!1),s=_(()=>new Date(r.message.timestamp).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}));function l(e){return e.startsWith(`image/`)}function u(e){return e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+` KB`:(e/(1024*1024)).toFixed(1)+` MB`}let d=_(()=>(r.message.attachments?.length??0)>0),f=_(()=>!!(r.message.toolArgs||r.message.toolResult)),h=_(()=>{if(!r.message.toolArgs)return``;try{return JSON.stringify(JSON.parse(r.message.toolArgs),null,2)}catch{return r.message.toolArgs}}),y=_(()=>{if(!r.message.toolResult)return``;try{let e=JSON.parse(r.message.toolResult),t=JSON.stringify(e,null,2);return t.length>2e3?t.slice(0,2e3)+`
|
|
17
|
-
... (truncated)`:t}catch{let e=r.message.toolResult;return e.length>2e3?e.slice(0,2e3)+`
|
|
18
|
-
... (truncated)`:e}});return(r,_)=>(i(),v(`div`,{class:n([`message`,[t.message.role]])},[t.message.role===`tool`?(i(),v(g,{key:0},[x(`div`,{class:n([`tool-line`,{expandable:f.value}]),onClick:_[0]||=e=>f.value&&(o.value=!o.value)},[f.value?(i(),v(`svg`,{key:0,width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,class:n([`tool-chevron`,{rotated:o.value}])},[..._[1]||=[x(`polyline`,{points:`9 18 15 12 9 6`},null,-1)]],2)):(i(),v(`svg`,Ee,[..._[2]||=[x(`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z`},null,-1)]])),x(`span`,De,C(t.message.toolName),1),t.message.toolPreview&&!o.value?(i(),v(`span`,Oe,C(t.message.toolPreview),1)):m(``,!0),t.message.toolStatus===`running`?(i(),v(`span`,ke)):m(``,!0),t.message.toolStatus===`error`?(i(),v(`span`,Ae,`error`)):m(``,!0)],2),o.value&&f.value?(i(),v(`div`,je,[h.value?(i(),v(`div`,Me,[_[3]||=x(`div`,{class:`tool-detail-label`},`Arguments`,-1),x(`pre`,Ne,C(h.value),1)])):m(``,!0),y.value?(i(),v(`div`,Pe,[_[4]||=x(`div`,{class:`tool-detail-label`},`Result`,-1),x(`pre`,Fe,C(y.value),1)])):m(``,!0)])):m(``,!0)],64)):(i(),v(`div`,Ie,[t.message.role===`assistant`?(i(),v(`img`,Le)):m(``,!0),x(`div`,{class:n([`msg-content`,t.message.role])},[x(`div`,{class:n([`message-bubble`,{system:a.value}])},[d.value?(i(),v(`div`,Re,[(i(!0),v(g,null,c(t.message.attachments,e=>(i(),v(`div`,{key:e.id,class:n([`msg-attachment`,{image:l(e.type)}])},[l(e.type)&&e.url?(i(),v(`img`,{key:0,src:e.url,alt:e.name,class:`msg-attachment-thumb`},null,8,ze)):(i(),v(`div`,Be,[_[5]||=x(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[x(`path`,{d:`M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z`}),x(`polyline`,{points:`14 2 14 8 20 8`})],-1),x(`span`,Ve,C(e.name),1),x(`span`,He,C(u(e.size)),1)]))],2))),128))])):m(``,!0),t.message.content?(i(),p(e,{key:1,content:t.message.content},null,8,[`content`])):m(``,!0),t.message.isStreaming?(i(),v(`span`,Ue)):m(``,!0),t.message.isStreaming&&!t.message.content?(i(),v(`div`,We,[..._[6]||=[x(`span`,null,null,-1),x(`span`,null,null,-1),x(`span`,null,null,-1)]])):m(``,!0)],2),x(`div`,Ge,C(s.value),1)],2)]))],2))}}),[[`__scopeId`,`data-v-f138bbda`]]),qe={key:0,class:`empty-state`},Je={key:1,class:`streaming-indicator`},Ye=R(S({__name:`MessageList`,setup(e){let t=Y(),n=b();function a(){r(()=>{n.value&&(n.value.scrollTop=n.value.scrollHeight)})}return u(()=>t.messages.length,a),u(()=>t.messages[t.messages.length-1]?.content,a),u(()=>t.isStreaming,e=>{e&&a()}),(e,r)=>(i(),v(`div`,{ref_key:`listRef`,ref:n,class:`message-list`},[y(t).messages.length===0?(i(),v(`div`,qe,[...r[0]||=[x(`img`,{src:`/assets/logo-BAarh-tH.png`,alt:`Hermes`,class:`empty-logo`},null,-1),x(`p`,null,`Start a conversation with Hermes Agent`,-1)]])):m(``,!0),(i(!0),v(g,null,c(y(t).messages,e=>(i(),p(Ke,{key:e.id,message:e},null,8,[`message`]))),128)),y(t).isStreaming?(i(),v(`div`,Je,[...r[1]||=[x(`span`,null,null,-1),x(`span`,null,null,-1),x(`span`,null,null,-1)]])):m(``,!0)],512))}}),[[`__scopeId`,`data-v-c48f8f02`]]),Xe={class:`chat-panel`},Ze={class:`session-list-header`},Qe={key:0,class:`session-list-title`},$e={key:0,class:`session-items`},et={key:0,class:`session-loading`},tt={key:1,class:`session-empty`},$=[`onClick`],nt={class:`session-group-label`},rt={class:`session-group-count`},it=[`onClick`,`onContextmenu`],at={class:`session-item-content`},ot={class:`session-item-title`},st={class:`session-item-meta`},ct={key:0,class:`session-item-model`},lt={class:`session-item-time`},ut={class:`chat-main`},dt={class:`chat-header`},ft={class:`header-left`},pt={class:`header-session-title`},mt={key:0,class:`source-badge`},ht={class:`header-actions`},gt=R(S({__name:`ChatPanel`,setup(e){let t=Y(),o=se(),s=b(!0),l=b(!1),f=b(``),S=b(null),w=b(null),T=b(new Set),E={telegram:`Telegram`,api_server:`API Server`,cli:`CLI`,discord:`Discord`,slack:`Slack`,matrix:`Matrix`,whatsapp:`WhatsApp`,signal:`Signal`,email:`Email`,sms:`SMS`,dingtalk:`DingTalk`,feishu:`Feishu`,wecom:`WeCom`,weixin:`WeChat`,bluebubbles:`iMessage`,mattermost:`Mattermost`,cron:`Cron`};function O(e){return e?E[e]||e:``}function k(e){return e===`api_server`?-1:e===`cron`?999:0}let A=_(()=>{let e=[...t.sessions].sort((e,t)=>t.createdAt-e.createdAt),n=new Map;for(let t of e){let e=t.source||``;n.has(e)||n.set(e,[]),n.get(e).push(t)}return[...n.keys()].sort((e,t)=>{let n=k(e),r=k(t);return n===r?e.localeCompare(t):n-r}).map(e=>({source:e,label:e?O(e):`Other`,sessions:n.get(e)}))});function j(e){if(!T.value.has(e))T.value=new Set([...T.value,e]);else{T.value=new Set(A.value.map(e=>e.source).filter(t=>t!==e));let n=A.value.find(t=>t.source===e);n?.sessions.length&&t.switchSession(n.sessions[0].id)}}u(A,e=>{T.value.size>0||(T.value=new Set(e.map(e=>e.source)))},{once:!0});let M=_(()=>t.activeSession?.title||`New Chat`),N=_(()=>t.activeSession?.source||``);function P(){t.newChat()}function F(e){let n=e||t.activeSessionId;n&&(navigator.clipboard.writeText(n),o.success(`Copied`))}function I(e){t.deleteSession(e),o.success(`Session deleted`)}function L(e){let t=new Date(e),n=new Date;return t.toDateString()===n.toDateString()?t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):t.toLocaleDateString([],{month:`short`,day:`numeric`})}let R=[{label:`Rename`,key:`rename`},{label:`Copy Session ID`,key:`copy-id`}],z=b(null);function B(e,t){e.preventDefault(),z.value=t,V.value=!0,H.value=e.clientX,U.value=e.clientY}let V=b(!1),H=b(0),U=b(0);function W(e){if(V.value=!1,z.value){if(e===`copy-id`)F(z.value);else if(e===`rename`){let e=t.sessions.find(e=>e.id===z.value);S.value=z.value,f.value=e?.title||``,l.value=!0,r(()=>{w.value?.focus()})}}}function G(){V.value=!1}async function K(){if(!(!S.value||!f.value.trim())){if(await ce(S.value,f.value.trim())){let e=t.sessions.find(e=>e.id===S.value);e&&(e.title=f.value.trim()),t.activeSession?.id===S.value&&(t.activeSession.title=f.value.trim()),o.success(`Renamed`)}else o.error(`Rename failed`);l.value=!1}}return(e,r)=>(i(),v(`div`,Xe,[x(`aside`,{class:n([`session-list`,{collapsed:!s.value}])},[x(`div`,Ze,[s.value?(i(),v(`span`,Qe,`Sessions`)):m(``,!0),d(y(q),{quaternary:``,size:`tiny`,onClick:P,circle:``},{icon:a(()=>[...r[5]||=[x(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[x(`line`,{x1:`12`,y1:`5`,x2:`12`,y2:`19`}),x(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`})],-1)]]),_:1})]),s.value?(i(),v(`div`,$e,[y(t).isLoadingSessions&&y(t).sessions.length===0?(i(),v(`div`,et,`Loading...`)):y(t).sessions.length===0?(i(),v(`div`,tt,`No sessions`)):m(``,!0),(i(!0),v(g,null,c(A.value,e=>(i(),v(g,{key:e.source},[x(`div`,{class:`session-group-header`,onClick:t=>j(e.source)},[(i(),v(`svg`,{width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,class:n([`group-chevron`,{collapsed:T.value.has(e.source)}])},[...r[6]||=[x(`polyline`,{points:`9 18 15 12 9 6`},null,-1)]],2)),x(`span`,nt,C(e.label),1),x(`span`,rt,C(e.sessions.length),1)],8,$),T.value.has(e.source)?m(``,!0):(i(!0),v(g,{key:0},c(e.sessions,e=>(i(),v(`button`,{key:e.id,class:n([`session-item`,{active:e.id===y(t).activeSessionId}]),onClick:n=>y(t).switchSession(e.id),onContextmenu:t=>B(t,e.id)},[x(`div`,at,[x(`span`,ot,C(e.title),1),x(`span`,st,[e.model?(i(),v(`span`,ct,C(e.model),1)):m(``,!0),x(`span`,lt,C(L(e.createdAt)),1)])]),e.id!==y(t).activeSessionId||y(t).sessions.length>1?(i(),p(y(ge),{key:0,onPositiveClick:t=>I(e.id)},{trigger:a(()=>[x(`button`,{class:`session-item-delete`,onClick:r[0]||=D(()=>{},[`stop`])},[...r[7]||=[x(`svg`,{width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[x(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),x(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]])]),default:a(()=>[r[8]||=h(` Delete this session? `,-1)]),_:1},8,[`onPositiveClick`])):m(``,!0)],42,it))),128))],64))),128))])):m(``,!0)],2),d(y(ne),{placement:`bottom-start`,trigger:`manual`,x:H.value,y:U.value,options:R,show:V.value,onSelect:W,onClickoutside:G},null,8,[`x`,`y`,`show`]),d(y(te),{show:l.value,"onUpdate:show":r[2]||=e=>l.value=e,preset:`dialog`,title:`Rename Session`,"positive-text":`OK`,"negative-text":`Cancel`,onPositiveClick:K},{default:a(()=>[d(y(oe),{ref_key:`renameInputRef`,ref:w,value:f.value,"onUpdate:value":r[1]||=e=>f.value=e,placeholder:`Enter new title`,onKeydown:ee(K,[`enter`])},null,8,[`value`])]),_:1},8,[`show`]),x(`div`,ut,[x(`header`,dt,[x(`div`,ft,[d(y(q),{quaternary:``,size:`small`,onClick:r[3]||=e=>s.value=!s.value,circle:``},{icon:a(()=>[...r[9]||=[x(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[x(`rect`,{x:`3`,y:`3`,width:`7`,height:`7`}),x(`rect`,{x:`14`,y:`3`,width:`7`,height:`7`}),x(`rect`,{x:`3`,y:`14`,width:`7`,height:`7`}),x(`rect`,{x:`14`,y:`14`,width:`7`,height:`7`})],-1)]]),_:1}),x(`span`,pt,C(M.value),1),N.value?(i(),v(`span`,mt,C(O(N.value)),1)):m(``,!0)]),x(`div`,ht,[d(y(J),{trigger:`hover`},{trigger:a(()=>[d(y(q),{quaternary:``,size:`small`,onClick:r[4]||=e=>F(),circle:``},{icon:a(()=>[...r[10]||=[x(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[x(`rect`,{x:`9`,y:`9`,width:`13`,height:`13`,rx:`2`,ry:`2`}),x(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`})],-1)]]),_:1})]),default:a(()=>[r[11]||=h(` Copy Session ID `,-1)]),_:1}),d(y(q),{size:`small`,onClick:P},{icon:a(()=>[...r[12]||=[x(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[x(`line`,{x1:`12`,y1:`5`,x2:`12`,y2:`19`}),x(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`})],-1)]]),default:a(()=>[r[13]||=h(` New Chat `,-1)]),_:1})])]),d(Ye),d(Te)])]))}}),[[`__scopeId`,`data-v-2f50200e`]]),_t={class:`chat-view`},vt=R(S({__name:`ChatView`,setup(e){let t=ue(),n=Y();return l(()=>{t.loadModels(),n.loadSessions()}),(e,t)=>(i(),v(`div`,_t,[d(gt)]))}}),[[`__scopeId`,`data-v-d35d4d9c`]]);export{vt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.chat-input-area[data-v-38a3b8f9]{border-top:1px solid #e0e0e0;flex-shrink:0;padding:12px 20px 16px}.attachment-previews[data-v-38a3b8f9]{flex-wrap:wrap;gap:8px;padding:0 0 10px;display:flex}.attachment-preview[data-v-38a3b8f9]{background-color:#f0f0f0;border:1px solid #e0e0e0;border-radius:6px;position:relative;overflow:hidden}.attachment-preview.image[data-v-38a3b8f9]{width:64px;height:64px}.attachment-thumb[data-v-38a3b8f9]{object-fit:cover;width:100%;height:100%}.attachment-file[data-v-38a3b8f9]{color:#666;flex-direction:column;justify-content:center;align-items:center;gap:2px;min-width:80px;max-width:140px;padding:8px 12px;display:flex}.attachment-file .file-name[data-v-38a3b8f9]{white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:11px;overflow:hidden}.attachment-file .file-size[data-v-38a3b8f9]{color:#999;font-size:10px}.attachment-remove[data-v-38a3b8f9]{color:#fff;cursor:pointer;opacity:0;background:#00000080;border:none;border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;transition:opacity .15s;display:flex;position:absolute;top:2px;right:2px}.attachment-preview:hover .attachment-remove[data-v-38a3b8f9]{opacity:1}.file-input-hidden[data-v-38a3b8f9]{display:none}.input-wrapper[data-v-38a3b8f9]{background-color:#fff;border:1px solid #e0e0e0;border-radius:10px;align-items:center;gap:10px;padding:10px 12px;transition:border-color .15s;display:flex}.input-wrapper[data-v-38a3b8f9]:focus-within{border-color:#333}.input-textarea[data-v-38a3b8f9]{color:#1a1a1a;resize:none;background:0 0;border:none;outline:none;flex:1;min-height:20px;max-height:100px;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5;overflow-y:auto}.input-textarea[data-v-38a3b8f9]::placeholder{color:#999}.input-actions[data-v-38a3b8f9]{flex-shrink:0;align-items:center;gap:6px;display:flex}.input-wrapper.drag-over[data-v-38a3b8f9]{background-color:#4a90d90a;border-style:dashed;border-color:#4a90d9}.message[data-v-f138bbda]{flex-direction:column;display:flex}.message.user[data-v-f138bbda]{align-items:flex-end}.message.user .msg-body[data-v-f138bbda]{max-width:75%}.message.user .msg-content.user[data-v-f138bbda]{align-items:flex-end}.message.user .message-bubble[data-v-f138bbda]{background-color:#e8e8e8;border-radius:10px 10px 4px}.message.assistant[data-v-f138bbda]{flex-direction:row;align-items:flex-start;gap:8px}.message.assistant .msg-body[data-v-f138bbda]{max-width:80%}.message.assistant .msg-avatar[data-v-f138bbda]{border-radius:4px;flex-shrink:0;width:28px;height:28px;margin-top:2px}.message.assistant .message-bubble[data-v-f138bbda]{background-color:#f5f5f5;border-radius:10px 10px 10px 4px}.message.tool[data-v-f138bbda],.message.system[data-v-f138bbda]{align-items:flex-start}.message.system .message-bubble.system[data-v-f138bbda]{background-color:#f57f170f;border-left:3px solid #f57f17;border-radius:6px;max-width:80%}.msg-body[data-v-f138bbda]{align-items:flex-start;gap:8px;max-width:85%;display:flex}.msg-content[data-v-f138bbda]{flex-direction:column;min-width:0;display:flex}.message-bubble[data-v-f138bbda]{word-break:break-word;padding:10px 14px;font-size:14px;line-height:1.65}.msg-attachments[data-v-f138bbda]{flex-wrap:wrap;gap:8px;margin-bottom:8px;display:flex}.msg-attachment[data-v-f138bbda]{background-color:#0000000a;border:1px solid #ebebeb;border-radius:6px;overflow:hidden}.msg-attachment.image[data-v-f138bbda]{max-width:200px}.msg-attachment-thumb[data-v-f138bbda]{object-fit:contain;max-width:200px;max-height:160px;display:block}.msg-attachment-file[data-v-f138bbda]{color:#666;align-items:center;gap:6px;padding:6px 10px;font-size:12px;display:flex}.msg-attachment-file .att-name[data-v-f138bbda]{white-space:nowrap;text-overflow:ellipsis;max-width:160px;overflow:hidden}.msg-attachment-file .att-size[data-v-f138bbda]{color:#999;flex-shrink:0;font-size:11px}.message-time[data-v-f138bbda]{color:#999;margin-top:4px;padding:0 4px;font-size:11px}.tool-line[data-v-f138bbda]{color:#999;border-radius:6px;align-items:center;gap:6px;padding:2px 4px;font-size:11px;display:flex}.tool-line.expandable[data-v-f138bbda]{cursor:pointer}.tool-line.expandable[data-v-f138bbda]:hover{background:#00000008}.tool-line .tool-name[data-v-f138bbda]{flex-shrink:0;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.tool-line .tool-preview[data-v-f138bbda]{text-overflow:ellipsis;white-space:nowrap;max-width:400px;overflow:hidden}.tool-chevron[data-v-f138bbda]{flex-shrink:0;transition:transform .15s}.tool-chevron.rotated[data-v-f138bbda]{transform:rotate(90deg)}.tool-spinner[data-v-f138bbda]{border:1.5px solid #999;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:10px;height:10px;animation:.6s linear infinite spin-f138bbda}.tool-error-badge[data-v-f138bbda]{color:#c62828;background:#c6282814;border-radius:3px;padding:0 4px;font-size:9px;line-height:14px}.tool-details[data-v-f138bbda]{border-left:2px solid #ebebeb;margin-top:2px;margin-left:16px;padding-left:10px}.tool-detail-section[data-v-f138bbda]{margin-bottom:6px}.tool-detail-label[data-v-f138bbda]{color:#999;text-transform:uppercase;letter-spacing:.3px;margin-bottom:2px;font-size:10px;font-weight:600}.tool-detail-code[data-v-f138bbda]{color:#666;white-space:pre-wrap;word-break:break-all;background:#f4f4f4;border-radius:6px;max-height:300px;margin:0;padding:6px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:11px;line-height:1.5;overflow:auto}@keyframes spin-f138bbda{to{transform:rotate(360deg)}}.streaming-cursor[data-v-f138bbda]{vertical-align:text-bottom;background-color:#999;width:2px;height:1em;margin-left:2px;animation:.8s infinite blink-f138bbda;display:inline-block}.streaming-dots[data-v-f138bbda]{gap:4px;padding:4px 0;display:flex}.streaming-dots span[data-v-f138bbda]{background-color:#999;border-radius:50%;width:6px;height:6px;animation:1.4s ease-in-out infinite pulse-f138bbda}.streaming-dots span[data-v-f138bbda]:nth-child(2){animation-delay:.2s}.streaming-dots span[data-v-f138bbda]:nth-child(3){animation-delay:.4s}@keyframes blink-f138bbda{0%,50%{opacity:1}51%,to{opacity:0}}@keyframes pulse-f138bbda{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.message-list[data-v-c48f8f02]{flex-direction:column;flex:1;gap:16px;padding:20px;display:flex;overflow-y:auto}.empty-state[data-v-c48f8f02]{color:#999;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}.empty-state .empty-logo[data-v-c48f8f02]{opacity:.25;width:48px;height:48px}.empty-state p[data-v-c48f8f02]{font-size:14px}.streaming-indicator[data-v-c48f8f02]{color:#999;align-items:center;gap:4px;padding:4px;display:flex}.streaming-indicator span[data-v-c48f8f02]{background-color:#999;border-radius:50%;width:5px;height:5px;animation:1.4s ease-in-out infinite stream-pulse-c48f8f02}.streaming-indicator span[data-v-c48f8f02]:nth-child(2){animation-delay:.2s}.streaming-indicator span[data-v-c48f8f02]:nth-child(3){animation-delay:.4s}@keyframes stream-pulse-c48f8f02{0%,80%,to{opacity:.2;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.chat-panel[data-v-2f50200e]{height:100%;display:flex}.session-list[data-v-2f50200e]{border-right:1px solid #e0e0e0;flex-direction:column;flex-shrink:0;width:220px;transition:width .25s,opacity .25s;display:flex;overflow:hidden}.session-list.collapsed[data-v-2f50200e]{opacity:0;pointer-events:none;border-right:none;width:0}.session-list-header[data-v-2f50200e]{flex-shrink:0;justify-content:space-between;align-items:center;padding:12px;display:flex}.session-list-title[data-v-2f50200e]{color:#999;text-transform:uppercase;letter-spacing:.5px;font-size:12px;font-weight:600}.session-group-header[data-v-2f50200e]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;padding:6px 10px 4px;display:flex}.group-chevron[data-v-2f50200e]{flex-shrink:0;transition:transform .15s;transform:rotate(90deg)}.group-chevron.collapsed[data-v-2f50200e]{transform:rotate(0)}.session-group-label[data-v-2f50200e]{color:#999;text-transform:uppercase;letter-spacing:.5px;font-size:10px;font-weight:600}.session-group-count[data-v-2f50200e]{color:#999;font-size:10px;font-weight:400}.session-items[data-v-2f50200e]{flex:1;padding:0 6px 12px;overflow-y:auto}.session-loading[data-v-2f50200e],.session-empty[data-v-2f50200e]{color:#999;text-align:center;padding:16px 10px;font-size:12px}.session-item[data-v-2f50200e]{cursor:pointer;text-align:left;color:#666;background:0 0;border:none;border-radius:6px;justify-content:space-between;align-items:center;width:100%;margin-bottom:2px;padding:8px 10px;transition:all .15s;display:flex}.session-item[data-v-2f50200e]:hover{color:#1a1a1a;background:#3333330f}.session-item:hover .session-item-delete[data-v-2f50200e]{opacity:1}.session-item.active[data-v-2f50200e]{color:#1a1a1a;background:#3333331a;font-weight:500}.session-item-content[data-v-2f50200e]{flex:1;overflow:hidden}.session-item-title[data-v-2f50200e]{white-space:nowrap;text-overflow:ellipsis;font-size:13px;display:block;overflow:hidden}.session-item-time[data-v-2f50200e]{color:#999;font-size:11px}.session-item-meta[data-v-2f50200e]{align-items:center;gap:6px;margin-top:2px;display:flex}.session-item-model[data-v-2f50200e]{color:#333;text-overflow:ellipsis;white-space:nowrap;background:#33333314;border-radius:3px;flex-shrink:0;max-width:100px;padding:0 5px;font-size:10px;line-height:16px;overflow:hidden}.session-item-delete[data-v-2f50200e]{opacity:0;color:#999;cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;padding:2px;transition:all .15s}.session-item-delete[data-v-2f50200e]:hover{color:#c62828;background:#c628281a}.chat-main[data-v-2f50200e]{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.chat-header[data-v-2f50200e]{border-bottom:1px solid #e0e0e0;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.header-left[data-v-2f50200e]{flex:1;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.header-session-title[data-v-2f50200e]{color:#1a1a1a;white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:500;overflow:hidden}.source-badge[data-v-2f50200e]{color:#999;white-space:nowrap;background:#9999991f;border-radius:8px;flex-shrink:0;padding:1px 7px;font-size:10px;line-height:16px}.header-actions[data-v-2f50200e]{flex-shrink:0;align-items:center;gap:4px;display:flex}.chat-view[data-v-d35d4d9c]{flex-direction:column;height:100vh;display:flex}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import{$ as e,C as t,I as n,O as r,T as i,U as a,at as o,et as s,i as c,k as l,l as u,tt as d,v as f,x as p}from"./runtime-core.esm-bundler-yNW65ghW.js";import{H as m,Q as h,V as g,X as _,c as v,ct as y,dt as b,ft as x,it as S,l as C,lt as w,mt as T,pt as E,r as D,rt as O,tt as k,yt as A}from"./_plugin-vue_export-helper-BrYOyDjU.js";import{D as j,F as M,O as N,T as P,a as F,d as I,g as L,i as R,j as z,n as B,o as ee,r as te,t as ne,u as V,v as re,w as ie,z as H}from"./Popover-C2CJscsj.js";import{_ as ae,r as oe,v as U,y as W}from"./Suffix-DI9irQ4f.js";function se(t={},n){let i=e({ctrl:!1,command:!1,win:!1,shift:!1,tab:!1}),{keydown:o,keyup:c}=t,u=e=>{switch(e.key){case`Control`:i.ctrl=!0;break;case`Meta`:i.command=!0,i.win=!0;break;case`Shift`:i.shift=!0;break;case`Tab`:i.tab=!0;break}o!==void 0&&Object.keys(o).forEach(t=>{if(t!==e.key)return;let n=o[t];if(typeof n==`function`)n(e);else{let{stop:t=!1,prevent:r=!1}=n;t&&e.stopPropagation(),r&&e.preventDefault(),n.handler(e)}})},d=e=>{switch(e.key){case`Control`:i.ctrl=!1;break;case`Meta`:i.command=!1,i.win=!1;break;case`Shift`:i.shift=!1;break;case`Tab`:i.tab=!1;break}c!==void 0&&Object.keys(c).forEach(t=>{if(t!==e.key)return;let n=c[t];if(typeof n==`function`)n(e);else{let{stop:t=!1,prevent:r=!1}=n;t&&e.stopPropagation(),r&&e.preventDefault(),n.handler(e)}})},f=()=>{(n===void 0||n.value)&&(W(`keydown`,document,u),W(`keyup`,document,d)),n!==void 0&&a(n,e=>{e?(W(`keydown`,document,u),W(`keyup`,document,d)):(U(`keydown`,document,u),U(`keyup`,document,d))})};return M()?(r(f),l(()=>{(n===void 0||n.value)&&(U(`keydown`,document,u),U(`keyup`,document,d))})):f(),s(i)}function ce(e,t,n){if(!t)return e;let r=d(e.value),i=null;return a(e,e=>{i!==null&&window.clearTimeout(i),e===!0?n&&!n.value?r.value=!0:i=window.setTimeout(()=>{r.value=!0},t):r.value=!1}),r}function G(e){return t=>{t?e.value=t.$el:e.value=null}}var K=f({name:`ChevronRight`,render(){return p(`svg`,{viewBox:`0 0 16 16`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`},p(`path`,{d:`M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z`,fill:`currentColor`}))}}),le={padding:`4px 0`,optionIconSizeSmall:`14px`,optionIconSizeMedium:`16px`,optionIconSizeLarge:`16px`,optionIconSizeHuge:`18px`,optionSuffixWidthSmall:`14px`,optionSuffixWidthMedium:`14px`,optionSuffixWidthLarge:`16px`,optionSuffixWidthHuge:`16px`,optionIconSuffixWidthSmall:`32px`,optionIconSuffixWidthMedium:`32px`,optionIconSuffixWidthLarge:`36px`,optionIconSuffixWidthHuge:`36px`,optionPrefixWidthSmall:`14px`,optionPrefixWidthMedium:`14px`,optionPrefixWidthLarge:`16px`,optionPrefixWidthHuge:`16px`,optionIconPrefixWidthSmall:`36px`,optionIconPrefixWidthMedium:`36px`,optionIconPrefixWidthLarge:`40px`,optionIconPrefixWidthHuge:`40px`};function ue(e){let{primaryColor:t,textColor2:n,dividerColor:r,hoverColor:i,popoverColor:a,invertedColor:o,borderRadius:s,fontSizeSmall:c,fontSizeMedium:l,fontSizeLarge:u,fontSizeHuge:d,heightSmall:f,heightMedium:p,heightLarge:m,heightHuge:h,textColor3:g,opacityDisabled:_}=e;return Object.assign(Object.assign({},le),{optionHeightSmall:f,optionHeightMedium:p,optionHeightLarge:m,optionHeightHuge:h,borderRadius:s,fontSizeSmall:c,fontSizeMedium:l,fontSizeLarge:u,fontSizeHuge:d,optionTextColor:n,optionTextColorHover:n,optionTextColorActive:t,optionTextColorChildActive:t,color:a,dividerColor:r,suffixColor:n,prefixColor:n,optionColorHover:i,optionColorActive:S(t,{alpha:.1}),groupHeaderTextColor:g,optionTextColorInverted:`#BBB`,optionTextColorHoverInverted:`#FFF`,optionTextColorActiveInverted:`#FFF`,optionTextColorChildActiveInverted:`#FFF`,colorInverted:o,dividerColorInverted:`#BBB`,suffixColorInverted:`#BBB`,prefixColorInverted:`#BBB`,optionColorHoverInverted:t,optionColorActiveInverted:t,groupHeaderTextColorInverted:`#AAA`,optionOpacityDisabled:_})}var q=v({name:`Dropdown`,common:D,peers:{Popover:R},self:ue}),J=k(`n-dropdown-menu`),Y=k(`n-dropdown`),X=k(`n-dropdown-option`),Z=f({name:`DropdownDivider`,props:{clsPrefix:{type:String,required:!0}},render(){return p(`div`,{class:`${this.clsPrefix}-dropdown-divider`})}}),de=f({name:`DropdownGroupHeader`,props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(){let{showIconRef:e,hasSubmenuRef:n}=t(J),{renderLabelRef:r,labelFieldRef:i,nodePropsRef:a,renderOptionRef:o}=t(Y);return{labelField:i,showIcon:e,hasSubmenu:n,renderLabel:r,nodeProps:a,renderOption:o}},render(){let{clsPrefix:e,hasSubmenu:t,showIcon:n,nodeProps:r,renderLabel:i,renderOption:a}=this,{rawNode:o}=this.tmNode,s=p(`div`,Object.assign({class:`${e}-dropdown-option`},r?.(o)),p(`div`,{class:`${e}-dropdown-option-body ${e}-dropdown-option-body--group`},p(`div`,{"data-dropdown-option":!0,class:[`${e}-dropdown-option-body__prefix`,n&&`${e}-dropdown-option-body__prefix--show-icon`]},V(o.icon)),p(`div`,{class:`${e}-dropdown-option-body__label`,"data-dropdown-option":!0},i?i(o):V(o.title??o[this.labelField])),p(`div`,{class:[`${e}-dropdown-option-body__suffix`,t&&`${e}-dropdown-option-body__suffix--has-submenu`],"data-dropdown-option":!0})));return a?a({node:s,option:o}):s}});function fe(e){let{textColorBase:t,opacity1:n,opacity2:r,opacity3:i,opacity4:a,opacity5:o}=e;return{color:t,opacity1Depth:n,opacity2Depth:r,opacity3Depth:i,opacity4Depth:a,opacity5Depth:o}}var pe={name:`Icon`,common:D,self:fe},me=w(`icon`,`
|
|
2
|
-
height: 1em;
|
|
3
|
-
width: 1em;
|
|
4
|
-
line-height: 1em;
|
|
5
|
-
text-align: center;
|
|
6
|
-
display: inline-block;
|
|
7
|
-
position: relative;
|
|
8
|
-
fill: currentColor;
|
|
9
|
-
`,[x(`color-transition`,{transition:`color .3s var(--n-bezier)`}),x(`depth`,{color:`var(--n-color)`},[y(`svg`,{opacity:`var(--n-opacity)`,transition:`opacity .3s var(--n-bezier)`})]),y(`svg`,{height:`1em`,width:`1em`})]),he=f({_n_icon__:!0,name:`Icon`,inheritAttrs:!1,props:Object.assign(Object.assign({},C.props),{depth:[String,Number],size:[Number,String],color:String,component:[Object,Function]}),setup(e){let{mergedClsPrefixRef:t,inlineThemeDisabled:n}=m(e),r=C(`Icon`,`-icon`,me,pe,e,t),i=u(()=>{let{depth:t}=e,{common:{cubicBezierEaseInOut:n},self:i}=r.value;if(t!==void 0){let{color:e,[`opacity${t}Depth`]:r}=i;return{"--n-bezier":n,"--n-color":e,"--n-opacity":r}}return{"--n-bezier":n,"--n-color":``,"--n-opacity":``}}),a=n?g(`icon`,u(()=>`${e.depth||`d`}`),i,e):void 0;return{mergedClsPrefix:t,mergedStyle:u(()=>{let{size:t,color:n}=e;return{fontSize:L(t),color:n}}),cssVars:n?void 0:i,themeClass:a?.themeClass,onRender:a?.onRender}},render(){let{$parent:e,depth:t,mergedClsPrefix:n,component:r,onRender:a,themeClass:o}=this;return e?.$options?._n_icon__&&h(`icon`,"don't wrap `n-icon` inside `n-icon`"),a?.(),p(`i`,i(this.$attrs,{role:`img`,class:[`${n}-icon`,o,{[`${n}-icon--depth`]:t,[`${n}-icon--color-transition`]:t!==void 0}],style:[this.cssVars,this.mergedStyle]}),r?p(r):this.$slots)}});function Q(e,t){return e.type===`submenu`||e.type===void 0&&e[t]!==void 0}function ge(e){return e.type===`group`}function $(e){return e.type===`divider`}function _e(e){return e.type===`render`}var ve=f({name:`DropdownOption`,props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0},parentKey:{type:[String,Number],default:null},placement:{type:String,default:`right-start`},props:Object,scrollable:Boolean},setup(e){let r=t(Y),{hoverKeyRef:i,keyboardKeyRef:a,lastToggledSubmenuKeyRef:o,pendingKeyPathRef:s,activeKeyPathRef:c,animatedRef:l,mergedShowRef:f,renderLabelRef:p,renderIconRef:m,labelFieldRef:h,childrenFieldRef:g,renderOptionRef:_,nodePropsRef:v,menuPropsRef:y}=r,b=t(X,null),x=t(J),S=t(j),C=u(()=>e.tmNode.rawNode),w=u(()=>{let{value:t}=g;return Q(e.tmNode.rawNode,t)}),T=u(()=>{let{disabled:t}=e.tmNode;return t}),E=ce(u(()=>{if(!w.value)return!1;let{key:t,disabled:n}=e.tmNode;if(n)return!1;let{value:r}=i,{value:c}=a,{value:l}=o,{value:u}=s;return r===null?c===null?l===null?!1:u.includes(t):u.includes(t)&&u[u.length-1]!==t:u.includes(t)}),300,u(()=>a.value===null&&!l.value)),D=u(()=>!!b?.enteringSubmenuRef.value),k=d(!1);n(X,{enteringSubmenuRef:k});function A(){k.value=!0}function M(){k.value=!1}function N(){let{parentKey:t,tmNode:n}=e;n.disabled||f.value&&(o.value=t,a.value=null,i.value=n.key)}function P(){let{tmNode:t}=e;t.disabled||f.value&&i.value!==t.key&&N()}function F(t){if(e.tmNode.disabled||!f.value)return;let{relatedTarget:n}=t;n&&!H({target:n},`dropdownOption`)&&!H({target:n},`scrollbarRail`)&&(i.value=null)}function I(){let{value:t}=w,{tmNode:n}=e;f.value&&!t&&!n.disabled&&(r.doSelect(n.key,n.rawNode),r.doUpdateShow(!1))}return{labelField:h,renderLabel:p,renderIcon:m,siblingHasIcon:x.showIconRef,siblingHasSubmenu:x.hasSubmenuRef,menuProps:y,popoverBody:S,animated:l,mergedShowSubmenu:u(()=>E.value&&!D.value),rawNode:C,hasSubmenu:w,pending:O(()=>{let{value:t}=s,{key:n}=e.tmNode;return t.includes(n)}),childActive:O(()=>{let{value:t}=c,{key:n}=e.tmNode,r=t.findIndex(e=>n===e);return r===-1?!1:r<t.length-1}),active:O(()=>{let{value:t}=c,{key:n}=e.tmNode,r=t.findIndex(e=>n===e);return r===-1?!1:r===t.length-1}),mergedDisabled:T,renderOption:_,nodeProps:v,handleClick:I,handleMouseMove:P,handleMouseEnter:N,handleMouseLeave:F,handleSubmenuBeforeEnter:A,handleSubmenuAfterEnter:M}},render(){let{animated:e,rawNode:t,mergedShowSubmenu:n,clsPrefix:r,siblingHasIcon:a,siblingHasSubmenu:o,renderLabel:s,renderIcon:c,renderOption:l,nodeProps:u,props:d,scrollable:f}=this,m=null;if(n){let e=this.menuProps?.call(this,t,t.children);m=p(xe,Object.assign({},e,{clsPrefix:r,scrollable:this.scrollable,tmNodes:this.tmNode.children,parentKey:this.tmNode.key}))}let h={class:[`${r}-dropdown-option-body`,this.pending&&`${r}-dropdown-option-body--pending`,this.active&&`${r}-dropdown-option-body--active`,this.childActive&&`${r}-dropdown-option-body--child-active`,this.mergedDisabled&&`${r}-dropdown-option-body--disabled`],onMousemove:this.handleMouseMove,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onClick:this.handleClick},g=u?.(t),_=p(`div`,Object.assign({class:[`${r}-dropdown-option`,g?.class],"data-dropdown-option":!0},g),p(`div`,i(h,d),[p(`div`,{class:[`${r}-dropdown-option-body__prefix`,a&&`${r}-dropdown-option-body__prefix--show-icon`]},[c?c(t):V(t.icon)]),p(`div`,{"data-dropdown-option":!0,class:`${r}-dropdown-option-body__label`},s?s(t):V(t[this.labelField]??t.title)),p(`div`,{"data-dropdown-option":!0,class:[`${r}-dropdown-option-body__suffix`,o&&`${r}-dropdown-option-body__suffix--has-submenu`]},this.hasSubmenu?p(he,null,{default:()=>p(K,null)}):null)]),this.hasSubmenu?p(P,null,{default:()=>[p(ie,null,{default:()=>p(`div`,{class:`${r}-dropdown-offset-container`},p(re,{show:this.mergedShowSubmenu,placement:this.placement,to:f&&this.popoverBody||void 0,teleportDisabled:!f},{default:()=>p(`div`,{class:`${r}-dropdown-menu-wrapper`},e?p(A,{onBeforeEnter:this.handleSubmenuBeforeEnter,onAfterEnter:this.handleSubmenuAfterEnter,name:`fade-in-scale-up-transition`,appear:!0},{default:()=>m}):m)}))})]}):null);return l?l({node:_,option:t}):_}}),ye=f({name:`NDropdownGroup`,props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0},parentKey:{type:[String,Number],default:null}},render(){let{tmNode:e,parentKey:t,clsPrefix:n}=this,{children:r}=e;return p(c,null,p(de,{clsPrefix:n,tmNode:e,key:e.key}),r?.map(e=>{let{rawNode:r}=e;return r.show===!1?null:$(r)?p(Z,{clsPrefix:n,key:e.key}):e.isGroup?(h(`dropdown`,"`group` node is not allowed to be put in `group` node."),null):p(ve,{clsPrefix:n,tmNode:e,parentKey:t,key:e.key})}))}}),be=f({name:`DropdownRenderOption`,props:{tmNode:{type:Object,required:!0}},render(){let{rawNode:{render:e,props:t}}=this.tmNode;return p(`div`,t,[e?.()])}}),xe=f({name:`DropdownMenu`,props:{scrollable:Boolean,showArrow:Boolean,arrowStyle:[String,Object],clsPrefix:{type:String,required:!0},tmNodes:{type:Array,default:()=>[]},parentKey:{type:[String,Number],default:null}},setup(e){let{renderIconRef:r,childrenFieldRef:i}=t(Y);n(J,{showIconRef:u(()=>{let t=r.value;return e.tmNodes.some(e=>{if(e.isGroup)return e.children?.some(({rawNode:e})=>t?t(e):e.icon);let{rawNode:n}=e;return t?t(n):n.icon})}),hasSubmenuRef:u(()=>{let{value:t}=i;return e.tmNodes.some(e=>{if(e.isGroup)return e.children?.some(({rawNode:e})=>Q(e,t));let{rawNode:n}=e;return Q(n,t)})})});let a=d(null);return n(N,null),n(z,null),n(j,a),{bodyRef:a}},render(){let{parentKey:e,clsPrefix:t,scrollable:n}=this,r=this.tmNodes.map(r=>{let{rawNode:i}=r;return i.show===!1?null:_e(i)?p(be,{tmNode:r,key:r.key}):$(i)?p(Z,{clsPrefix:t,key:r.key}):ge(i)?p(ye,{clsPrefix:t,tmNode:r,parentKey:e,key:r.key}):p(ve,{clsPrefix:t,tmNode:r,parentKey:e,key:r.key,props:i.props,scrollable:n})});return p(`div`,{class:[`${t}-dropdown-menu`,n&&`${t}-dropdown-menu--scrollable`],ref:`bodyRef`},n?p(oe,{contentClass:`${t}-dropdown-menu__content`},{default:()=>r}):r,this.showArrow?te({clsPrefix:t,arrowStyle:this.arrowStyle,arrowClass:void 0,arrowWrapperClass:void 0,arrowWrapperStyle:void 0}):null)}}),Se=w(`dropdown-menu`,`
|
|
10
|
-
transform-origin: var(--v-transform-origin);
|
|
11
|
-
background-color: var(--n-color);
|
|
12
|
-
border-radius: var(--n-border-radius);
|
|
13
|
-
box-shadow: var(--n-box-shadow);
|
|
14
|
-
position: relative;
|
|
15
|
-
transition:
|
|
16
|
-
background-color .3s var(--n-bezier),
|
|
17
|
-
box-shadow .3s var(--n-bezier);
|
|
18
|
-
`,[F(),w(`dropdown-option`,`
|
|
19
|
-
position: relative;
|
|
20
|
-
`,[y(`a`,`
|
|
21
|
-
text-decoration: none;
|
|
22
|
-
color: inherit;
|
|
23
|
-
outline: none;
|
|
24
|
-
`,[y(`&::before`,`
|
|
25
|
-
content: "";
|
|
26
|
-
position: absolute;
|
|
27
|
-
left: 0;
|
|
28
|
-
right: 0;
|
|
29
|
-
top: 0;
|
|
30
|
-
bottom: 0;
|
|
31
|
-
`)]),w(`dropdown-option-body`,`
|
|
32
|
-
display: flex;
|
|
33
|
-
cursor: pointer;
|
|
34
|
-
position: relative;
|
|
35
|
-
height: var(--n-option-height);
|
|
36
|
-
line-height: var(--n-option-height);
|
|
37
|
-
font-size: var(--n-font-size);
|
|
38
|
-
color: var(--n-option-text-color);
|
|
39
|
-
transition: color .3s var(--n-bezier);
|
|
40
|
-
`,[y(`&::before`,`
|
|
41
|
-
content: "";
|
|
42
|
-
position: absolute;
|
|
43
|
-
top: 0;
|
|
44
|
-
bottom: 0;
|
|
45
|
-
left: 4px;
|
|
46
|
-
right: 4px;
|
|
47
|
-
transition: background-color .3s var(--n-bezier);
|
|
48
|
-
border-radius: var(--n-border-radius);
|
|
49
|
-
`),E(`disabled`,[x(`pending`,`
|
|
50
|
-
color: var(--n-option-text-color-hover);
|
|
51
|
-
`,[b(`prefix, suffix`,`
|
|
52
|
-
color: var(--n-option-text-color-hover);
|
|
53
|
-
`),y(`&::before`,`background-color: var(--n-option-color-hover);`)]),x(`active`,`
|
|
54
|
-
color: var(--n-option-text-color-active);
|
|
55
|
-
`,[b(`prefix, suffix`,`
|
|
56
|
-
color: var(--n-option-text-color-active);
|
|
57
|
-
`),y(`&::before`,`background-color: var(--n-option-color-active);`)]),x(`child-active`,`
|
|
58
|
-
color: var(--n-option-text-color-child-active);
|
|
59
|
-
`,[b(`prefix, suffix`,`
|
|
60
|
-
color: var(--n-option-text-color-child-active);
|
|
61
|
-
`)])]),x(`disabled`,`
|
|
62
|
-
cursor: not-allowed;
|
|
63
|
-
opacity: var(--n-option-opacity-disabled);
|
|
64
|
-
`),x(`group`,`
|
|
65
|
-
font-size: calc(var(--n-font-size) - 1px);
|
|
66
|
-
color: var(--n-group-header-text-color);
|
|
67
|
-
`,[b(`prefix`,`
|
|
68
|
-
width: calc(var(--n-option-prefix-width) / 2);
|
|
69
|
-
`,[x(`show-icon`,`
|
|
70
|
-
width: calc(var(--n-option-icon-prefix-width) / 2);
|
|
71
|
-
`)])]),b(`prefix`,`
|
|
72
|
-
width: var(--n-option-prefix-width);
|
|
73
|
-
display: flex;
|
|
74
|
-
justify-content: center;
|
|
75
|
-
align-items: center;
|
|
76
|
-
color: var(--n-prefix-color);
|
|
77
|
-
transition: color .3s var(--n-bezier);
|
|
78
|
-
z-index: 1;
|
|
79
|
-
`,[x(`show-icon`,`
|
|
80
|
-
width: var(--n-option-icon-prefix-width);
|
|
81
|
-
`),w(`icon`,`
|
|
82
|
-
font-size: var(--n-option-icon-size);
|
|
83
|
-
`)]),b(`label`,`
|
|
84
|
-
white-space: nowrap;
|
|
85
|
-
flex: 1;
|
|
86
|
-
z-index: 1;
|
|
87
|
-
`),b(`suffix`,`
|
|
88
|
-
box-sizing: border-box;
|
|
89
|
-
flex-grow: 0;
|
|
90
|
-
flex-shrink: 0;
|
|
91
|
-
display: flex;
|
|
92
|
-
justify-content: flex-end;
|
|
93
|
-
align-items: center;
|
|
94
|
-
min-width: var(--n-option-suffix-width);
|
|
95
|
-
padding: 0 8px;
|
|
96
|
-
transition: color .3s var(--n-bezier);
|
|
97
|
-
color: var(--n-suffix-color);
|
|
98
|
-
z-index: 1;
|
|
99
|
-
`,[x(`has-submenu`,`
|
|
100
|
-
width: var(--n-option-icon-suffix-width);
|
|
101
|
-
`),w(`icon`,`
|
|
102
|
-
font-size: var(--n-option-icon-size);
|
|
103
|
-
`)]),w(`dropdown-menu`,`pointer-events: all;`)]),w(`dropdown-offset-container`,`
|
|
104
|
-
pointer-events: none;
|
|
105
|
-
position: absolute;
|
|
106
|
-
left: 0;
|
|
107
|
-
right: 0;
|
|
108
|
-
top: -4px;
|
|
109
|
-
bottom: -4px;
|
|
110
|
-
`)]),w(`dropdown-divider`,`
|
|
111
|
-
transition: background-color .3s var(--n-bezier);
|
|
112
|
-
background-color: var(--n-divider-color);
|
|
113
|
-
height: 1px;
|
|
114
|
-
margin: 4px 0;
|
|
115
|
-
`),w(`dropdown-menu-wrapper`,`
|
|
116
|
-
transform-origin: var(--v-transform-origin);
|
|
117
|
-
width: fit-content;
|
|
118
|
-
`),y(`>`,[w(`scrollbar`,`
|
|
119
|
-
height: inherit;
|
|
120
|
-
max-height: inherit;
|
|
121
|
-
`)]),E(`scrollable`,`
|
|
122
|
-
padding: var(--n-padding);
|
|
123
|
-
`),x(`scrollable`,[b(`content`,`
|
|
124
|
-
padding: var(--n-padding);
|
|
125
|
-
`)])]),Ce={animated:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},size:String,inverted:Boolean,placement:{type:String,default:`bottom`},onSelect:[Function,Array],options:{type:Array,default:()=>[]},menuProps:Function,showArrow:Boolean,renderLabel:Function,renderIcon:Function,renderOption:Function,nodeProps:Function,labelField:{type:String,default:`label`},keyField:{type:String,default:`key`},childrenField:{type:String,default:`children`},value:[String,Number]},we=Object.keys(B),Te=f({name:`Dropdown`,inheritAttrs:!1,props:Object.assign(Object.assign(Object.assign({},B),Ce),C.props),setup(e){let t=d(!1),r=ae(o(e,`show`),t),i=u(()=>{let{keyField:t,childrenField:n}=e;return ee(e.options,{getKey(e){return e[t]},getDisabled(e){return e.disabled===!0},getIgnored(e){return e.type===`divider`||e.type===`render`},getChildren(e){return e[n]}})}),s=u(()=>i.value.treeNodes),c=d(null),l=d(null),f=d(null),p=u(()=>c.value??l.value??f.value??null),h=u(()=>i.value.getPath(p.value).keyPath),v=u(()=>i.value.getPath(e.value).keyPath),y=O(()=>e.keyboard&&r.value);se({keydown:{ArrowUp:{prevent:!0,handler:P},ArrowRight:{prevent:!0,handler:N},ArrowDown:{prevent:!0,handler:F},ArrowLeft:{prevent:!0,handler:M},Enter:{prevent:!0,handler:I},Escape:j}},y);let{mergedClsPrefixRef:b,inlineThemeDisabled:x,mergedComponentPropsRef:S}=m(e),w=u(()=>e.size||S?.value?.Dropdown?.size||`medium`),E=C(`Dropdown`,`-dropdown`,Se,q,e,b);n(Y,{labelFieldRef:o(e,`labelField`),childrenFieldRef:o(e,`childrenField`),renderLabelRef:o(e,`renderLabel`),renderIconRef:o(e,`renderIcon`),hoverKeyRef:c,keyboardKeyRef:l,lastToggledSubmenuKeyRef:f,pendingKeyPathRef:h,activeKeyPathRef:v,animatedRef:o(e,`animated`),mergedShowRef:r,nodePropsRef:o(e,`nodeProps`),renderOptionRef:o(e,`renderOption`),menuPropsRef:o(e,`menuProps`),doSelect:D,doUpdateShow:k}),a(r,t=>{!e.animated&&!t&&A()});function D(t,n){let{onSelect:r}=e;r&&_(r,t,n)}function k(n){let{"onUpdate:show":r,onUpdateShow:i}=e;r&&_(r,n),i&&_(i,n),t.value=n}function A(){c.value=null,l.value=null,f.value=null}function j(){k(!1)}function M(){R(`left`)}function N(){R(`right`)}function P(){R(`up`)}function F(){R(`down`)}function I(){let e=L();e?.isLeaf&&r.value&&(D(e.key,e.rawNode),k(!1))}function L(){let{value:e}=i,{value:t}=p;return!e||t===null?null:e.getNode(t)??null}function R(e){let{value:t}=p,{value:{getFirstAvailableNode:n}}=i,r=null;if(t===null){let e=n();e!==null&&(r=e.key)}else{let t=L();if(t){let n;switch(e){case`down`:n=t.getNext();break;case`up`:n=t.getPrev();break;case`right`:n=t.getChild();break;case`left`:n=t.getParent();break}n&&(r=n.key)}}r!==null&&(c.value=null,l.value=r)}let z=u(()=>{let{inverted:t}=e,n=w.value,{common:{cubicBezierEaseInOut:r},self:i}=E.value,{padding:a,dividerColor:o,borderRadius:s,optionOpacityDisabled:c,[T(`optionIconSuffixWidth`,n)]:l,[T(`optionSuffixWidth`,n)]:u,[T(`optionIconPrefixWidth`,n)]:d,[T(`optionPrefixWidth`,n)]:f,[T(`fontSize`,n)]:p,[T(`optionHeight`,n)]:m,[T(`optionIconSize`,n)]:h}=i,g={"--n-bezier":r,"--n-font-size":p,"--n-padding":a,"--n-border-radius":s,"--n-option-height":m,"--n-option-prefix-width":f,"--n-option-icon-prefix-width":d,"--n-option-suffix-width":u,"--n-option-icon-suffix-width":l,"--n-option-icon-size":h,"--n-divider-color":o,"--n-option-opacity-disabled":c};return t?(g[`--n-color`]=i.colorInverted,g[`--n-option-color-hover`]=i.optionColorHoverInverted,g[`--n-option-color-active`]=i.optionColorActiveInverted,g[`--n-option-text-color`]=i.optionTextColorInverted,g[`--n-option-text-color-hover`]=i.optionTextColorHoverInverted,g[`--n-option-text-color-active`]=i.optionTextColorActiveInverted,g[`--n-option-text-color-child-active`]=i.optionTextColorChildActiveInverted,g[`--n-prefix-color`]=i.prefixColorInverted,g[`--n-suffix-color`]=i.suffixColorInverted,g[`--n-group-header-text-color`]=i.groupHeaderTextColorInverted):(g[`--n-color`]=i.color,g[`--n-option-color-hover`]=i.optionColorHover,g[`--n-option-color-active`]=i.optionColorActive,g[`--n-option-text-color`]=i.optionTextColor,g[`--n-option-text-color-hover`]=i.optionTextColorHover,g[`--n-option-text-color-active`]=i.optionTextColorActive,g[`--n-option-text-color-child-active`]=i.optionTextColorChildActive,g[`--n-prefix-color`]=i.prefixColor,g[`--n-suffix-color`]=i.suffixColor,g[`--n-group-header-text-color`]=i.groupHeaderTextColor),g}),B=x?g(`dropdown`,u(()=>`${w.value[0]}${e.inverted?`i`:``}`),z,e):void 0;return{mergedClsPrefix:b,mergedTheme:E,mergedSize:w,tmNodes:s,mergedShow:r,handleAfterLeave:()=>{e.animated&&A()},doUpdateShow:k,cssVars:x?void 0:z,themeClass:B?.themeClass,onRender:B?.onRender}},render(){let e=(e,t,n,r,a)=>{var o;let{mergedClsPrefix:s,menuProps:c}=this;(o=this.onRender)==null||o.call(this);let l=c?.(void 0,this.tmNodes.map(e=>e.rawNode))||{},u={ref:G(t),class:[e,`${s}-dropdown`,`${s}-dropdown--${this.mergedSize}-size`,this.themeClass],clsPrefix:s,tmNodes:this.tmNodes,style:[...n,this.cssVars],showArrow:this.showArrow,arrowStyle:this.arrowStyle,scrollable:this.scrollable,onMouseenter:r,onMouseleave:a};return p(xe,i(this.$attrs,u,l))},{mergedTheme:t}=this,n={show:this.mergedShow,theme:t.peers.Popover,themeOverrides:t.peerOverrides.Popover,internalOnAfterLeave:this.handleAfterLeave,internalRenderBody:e,onUpdateShow:this.doUpdateShow,"onUpdate:show":void 0};return p(ne,Object.assign({},I(this.$props,we),n),{trigger:()=>{var e;return(e=this.$slots).default?.call(e)}})}});export{G as i,q as n,K as r,Te as t};
|