vue-chat-kit 0.1.3 → 0.2.2

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.
@@ -1,10 +1,10 @@
1
- import { ref as f, computed as re, nextTick as Ne, watch as yt, resolveComponent as ce, openBlock as r, createBlock as q, withCtx as b, createElementVNode as t, createElementBlock as v, createCommentVNode as I, createVNode as p, createTextVNode as ne, onMounted as _t, onUnmounted as bt, unref as u, Fragment as fe, renderList as me, normalizeClass as X, resolveDynamicComponent as Ct, toDisplayString as k, isRef as we, withModifiers as Je, withDirectives as kt, withKeys as wt, vModelText as Ut, normalizeStyle as xt } from "vue";
2
- import { ChatDotRound as Ee, UserFilled as Qe, Bell as At, Setting as St, Search as Ke, Plus as Vt, MoreFilled as Ft, Document as Rt, Download as It, Folder as Ze, Picture as Lt, ChatLineRound as Tt, Camera as zt } from "@element-plus/icons-vue";
3
- import We from "dayjs";
4
- import { ElMessage as Y } from "element-plus";
5
- class Dt {
6
- constructor(e, s = {}) {
7
- this.userId = e, this.wsUrl = s.wsUrl || "", this.socket = null, this.reconnectAttempts = 0, this.maxReconnectAttempts = s.maxReconnectAttempts || 5, this.reconnectDelay = s.reconnectDelay || 3e3, this.handlers = {
1
+ import { ref as h, computed as ye, nextTick as Qe, watch as Dt, resolveComponent as ie, openBlock as n, createBlock as B, withCtx as b, createElementVNode as e, createElementBlock as v, createCommentVNode as U, createVNode as p, createTextVNode as J, onMounted as gt, onUnmounted as _t, unref as c, Fragment as se, renderList as ae, normalizeClass as K, resolveDynamicComponent as yt, toDisplayString as _, isRef as Ce, withModifiers as Ye, withDirectives as bt, withKeys as kt, vModelText as wt, normalizeStyle as Ct } from "vue";
2
+ import { ChatDotRound as Re, UserFilled as Ge, Bell as Ut, Setting as $t, Search as Le, Plus as xt, MoreFilled as At, Document as Vt, Download as St, Folder as Je, Picture as Ft, ChatLineRound as It, Camera as zt } from "@element-plus/icons-vue";
3
+ import mt from "dayjs";
4
+ import { ElMessage as P } from "element-plus";
5
+ class Et {
6
+ constructor(t, a = {}) {
7
+ this.userId = t, this.wsUrl = a.wsUrl || "", this.socket = null, this.reconnectAttempts = 0, this.maxReconnectAttempts = a.maxReconnectAttempts || 5, this.reconnectDelay = a.reconnectDelay || 3e3, this.handlers = {
8
8
  message: [],
9
9
  open: [],
10
10
  close: [],
@@ -20,60 +20,60 @@ class Dt {
20
20
  try {
21
21
  this.socket = new WebSocket(this.wsUrl), this.socket.onopen = () => {
22
22
  console.log("[VueChatKit] WebSocket 连接成功"), this.isConnecting = !1, this.reconnectAttempts = 0, this.emit("open");
23
- }, this.socket.onmessage = (e) => {
23
+ }, this.socket.onmessage = (t) => {
24
24
  try {
25
- const s = e.data;
26
- this.emit("message", s);
27
- } catch (s) {
28
- console.error("[VueChatKit] WebSocket 消息解析失败", s);
25
+ const a = t.data;
26
+ this.emit("message", a);
27
+ } catch (a) {
28
+ console.error("[VueChatKit] WebSocket 消息解析失败", a);
29
29
  }
30
- }, this.socket.onclose = (e) => {
31
- console.log("[VueChatKit] WebSocket 连接关闭", e.code), this.isConnecting = !1, this.emit("close", e), !this.manualClose && e.code !== 1e3 && this.reconnect();
32
- }, this.socket.onerror = (e) => {
33
- console.error("[VueChatKit] WebSocket 连接错误", e), this.isConnecting = !1, this.emit("error", e);
30
+ }, this.socket.onclose = (t) => {
31
+ console.log("[VueChatKit] WebSocket 连接关闭", t.code), this.isConnecting = !1, this.emit("close", t), !this.manualClose && t.code !== 1e3 && this.reconnect();
32
+ }, this.socket.onerror = (t) => {
33
+ console.error("[VueChatKit] WebSocket 连接错误", t), this.isConnecting = !1, this.emit("error", t);
34
34
  };
35
- } catch (e) {
36
- console.error("[VueChatKit] WebSocket 创建连接失败", e), this.isConnecting = !1;
35
+ } catch (t) {
36
+ console.error("[VueChatKit] WebSocket 创建连接失败", t), this.isConnecting = !1;
37
37
  }
38
38
  }
39
39
  }
40
40
  /**
41
41
  * 发送消息
42
42
  */
43
- send(e, s, o = "text", F = "", T = "", z = 0) {
43
+ send(t, a, m = "text", C = "", N = "", I = 0) {
44
44
  if (this.isConnected()) {
45
- const w = JSON.stringify({
46
- to: e,
47
- msg: s,
48
- type: o,
49
- fileUrl: F,
50
- fileName: T,
51
- fileSize: z
45
+ const T = JSON.stringify({
46
+ to: t,
47
+ msg: a,
48
+ type: m,
49
+ fileUrl: C,
50
+ fileName: N,
51
+ fileSize: I
52
52
  });
53
- return this.socket.send(w), !0;
53
+ return this.socket.send(T), !0;
54
54
  }
55
55
  return console.warn("[VueChatKit] WebSocket 连接未建立,无法发送消息"), !1;
56
56
  }
57
57
  /**
58
58
  * 注册事件监听
59
59
  */
60
- on(e, s) {
61
- this.handlers[e] && this.handlers[e].push(s);
60
+ on(t, a) {
61
+ this.handlers[t] && this.handlers[t].push(a);
62
62
  }
63
63
  /**
64
64
  * 移除事件监听
65
65
  */
66
- off(e, s) {
67
- if (this.handlers[e]) {
68
- const o = this.handlers[e].indexOf(s);
69
- o > -1 && this.handlers[e].splice(o, 1);
66
+ off(t, a) {
67
+ if (this.handlers[t]) {
68
+ const m = this.handlers[t].indexOf(a);
69
+ m > -1 && this.handlers[t].splice(m, 1);
70
70
  }
71
71
  }
72
72
  /**
73
73
  * 触发事件
74
74
  */
75
- emit(e, ...s) {
76
- this.handlers[e] && this.handlers[e].forEach((o) => o(...s));
75
+ emit(t, ...a) {
76
+ this.handlers[t] && this.handlers[t].forEach((m) => m(...a));
77
77
  }
78
78
  /**
79
79
  * 重连
@@ -99,743 +99,758 @@ class Dt {
99
99
  return this.socket && this.socket.readyState === WebSocket.OPEN;
100
100
  }
101
101
  }
102
- class Ue extends Error {
103
- constructor(e, s, o, F) {
104
- super(e), this.name = "RequestError", this.status = s || 0, this.code = o || 0, this.data = F;
102
+ class Xe extends Error {
103
+ constructor(t, a, m, C) {
104
+ super(t), this.name = "RequestError", this.status = a || 0, this.code = m || 0, this.data = C;
105
105
  }
106
106
  }
107
- class Mt {
108
- constructor(e = {}) {
109
- this.baseUrl = e.baseUrl || "", this.timeout = e.timeout || 1e4, this.headers = e.headers || {}, this.requestInterceptors = [], this.responseInterceptors = [], this.addRequestInterceptor((s) => (s.body instanceof FormData || (s.headers = {
107
+ class qt {
108
+ constructor(t = {}) {
109
+ this.baseUrl = t.baseUrl || "", this.timeout = t.timeout || 1e4, this.headers = t.headers || {}, this.requestInterceptors = [], this.responseInterceptors = [], t.requestInterceptors && Array.isArray(t.requestInterceptors) && t.requestInterceptors.forEach((a) => {
110
+ this.requestInterceptors.push(a);
111
+ }), this.addRequestInterceptor((a) => (a.body instanceof FormData || (a.headers = {
110
112
  "Content-Type": "application/json",
111
- ...s.headers
112
- }), s));
113
+ ...a.headers
114
+ }), a)), t.responseInterceptors && Array.isArray(t.responseInterceptors) && t.responseInterceptors.forEach((a) => {
115
+ this.responseInterceptors.push(a);
116
+ });
113
117
  }
114
118
  /**
115
119
  * 添加请求拦截器
116
120
  */
117
- addRequestInterceptor(e) {
118
- this.requestInterceptors.push(e);
121
+ addRequestInterceptor(t) {
122
+ this.requestInterceptors.push(t);
119
123
  }
120
124
  /**
121
125
  * 添加响应拦截器
122
126
  */
123
- addResponseInterceptor(e) {
124
- this.responseInterceptors.push(e);
127
+ addResponseInterceptor(t) {
128
+ this.responseInterceptors.push(t);
125
129
  }
126
130
  /**
127
131
  * 超时控制
128
132
  */
129
- timeoutPromise(e) {
130
- return new Promise((s, o) => {
133
+ timeoutPromise(t) {
134
+ return new Promise((a, m) => {
131
135
  setTimeout(() => {
132
- o(new Ue("请求超时", 408, 408));
133
- }, e);
136
+ m(new Xe("请求超时", 408, 408));
137
+ }, t);
134
138
  });
135
139
  }
136
140
  /**
137
141
  * 核心请求方法
138
142
  */
139
- async request(e, s = {}) {
140
- const { method: o = "GET", headers: F = {}, body: T, params: z } = s;
141
- let w = e.startsWith("http") ? e : `${this.baseUrl}${e}`, U = {
142
- method: o,
143
- headers: { ...this.headers, ...F },
144
- body: T,
145
- params: z
143
+ async request(t, a = {}) {
144
+ const { method: m = "GET", headers: C = {}, body: N, params: I } = a;
145
+ let T = t.startsWith("http") ? t : `${this.baseUrl}${t}`, L = {
146
+ method: m,
147
+ headers: { ...this.headers, ...C },
148
+ body: N,
149
+ params: I
146
150
  };
147
- this.requestInterceptors.forEach((m) => {
148
- U = m(U);
151
+ this.requestInterceptors.forEach((x) => {
152
+ L = x(L);
149
153
  });
150
- const V = {
151
- method: U.method,
152
- headers: U.headers,
154
+ const H = {
155
+ method: L.method,
156
+ headers: L.headers,
153
157
  credentials: "include"
154
158
  };
155
- if (U.body && o !== "GET" && (U.body instanceof FormData ? V.body = U.body : typeof U.body == "object" ? V.body = JSON.stringify(U.body) : V.body = U.body), U.params) {
156
- const m = new URLSearchParams();
157
- for (const C in U.params)
158
- U.params[C] !== void 0 && U.params[C] !== null && U.params[C] !== "" && m.append(C, U.params[C]);
159
- const _ = m.toString();
160
- _ && (w += (w.includes("?") ? "&" : "?") + _);
159
+ if (L.body && m !== "GET" && (L.body instanceof FormData ? H.body = L.body : typeof L.body == "object" ? H.body = JSON.stringify(L.body) : H.body = L.body), L.params) {
160
+ const x = new URLSearchParams();
161
+ for (const S in L.params)
162
+ L.params[S] !== void 0 && L.params[S] !== null && L.params[S] !== "" && x.append(S, L.params[S]);
163
+ const k = x.toString();
164
+ k && (T += (T.includes("?") ? "&" : "?") + k);
161
165
  }
162
166
  try {
163
- let _ = await Promise.race([
164
- fetch(w, V),
167
+ let k = await Promise.race([
168
+ fetch(T, H),
165
169
  this.timeoutPromise(this.timeout)
166
170
  ]);
167
- if (this.responseInterceptors.forEach((N) => {
168
- _ = N(_);
169
- }), !_.ok)
170
- throw new Ue(
171
- `HTTP ${_.status}: ${_.statusText}`,
172
- _.status,
173
- _.status
171
+ if (this.responseInterceptors.forEach((G) => {
172
+ k = G(k);
173
+ }), !k.ok)
174
+ throw new Xe(
175
+ `HTTP ${k.status}: ${k.statusText}`,
176
+ k.status,
177
+ k.status
174
178
  );
175
- const C = _.headers.get("content-type");
176
- let R;
177
- return C && C.includes("application/json") ? R = await _.json() : R = await _.text(), R;
178
- } catch (m) {
179
- throw m instanceof Ue ? m : new Ue(
180
- m instanceof Error ? m.message : "网络错误",
179
+ const S = k.headers.get("content-type");
180
+ let z;
181
+ return S && S.includes("application/json") ? z = await k.json() : z = await k.text(), z;
182
+ } catch (x) {
183
+ throw x instanceof Xe ? x : new Xe(
184
+ x instanceof Error ? x.message : "网络错误",
181
185
  0,
182
186
  0
183
187
  );
184
188
  }
185
189
  }
186
190
  // 便捷方法
187
- get(e, s, o) {
188
- return this.request(e, { ...o, method: "GET", params: s });
191
+ get(t, a, m) {
192
+ return this.request(t, { ...m, method: "GET", params: a });
189
193
  }
190
- post(e, s, o) {
191
- return this.request(e, { ...o, method: "POST", body: s });
194
+ post(t, a, m) {
195
+ return this.request(t, { ...m, method: "POST", body: a });
192
196
  }
193
- put(e, s, o) {
194
- return this.request(e, { ...o, method: "PUT", body: s });
197
+ put(t, a, m) {
198
+ return this.request(t, { ...m, method: "PUT", body: a });
195
199
  }
196
- delete(e, s) {
197
- return this.request(e, { ...s, method: "DELETE" });
200
+ delete(t, a) {
201
+ return this.request(t, { ...a, method: "DELETE" });
198
202
  }
199
203
  }
200
- class Be {
201
- constructor(e, s = null) {
202
- this.config = e, this.endpoints = e.api.endpoints, this.customAdapter = e.api.adapter, s ? this.http = s : this.http = new Mt({
203
- baseUrl: e.api.baseUrl,
204
- headers: e.headers
204
+ class ft {
205
+ constructor(t, a = null) {
206
+ this.config = t, this.endpoints = t.api.endpoints, this.customAdapter = t.api.adapter, a ? this.http = a : this.http = new qt({
207
+ baseUrl: t.api.baseUrl,
208
+ headers: t.headers,
209
+ requestInterceptors: t.requestInterceptors,
210
+ responseInterceptors: t.responseInterceptors
205
211
  });
206
212
  }
207
213
  /**
208
214
  * 使用自定义适配器或默认实现
209
215
  */
210
- async _call(e, ...s) {
211
- return this.customAdapter && typeof this.customAdapter[e] == "function" ? this.customAdapter[e](...s) : this[`_${e}`](...s);
216
+ async _call(t, ...a) {
217
+ return this.customAdapter && typeof this.customAdapter[t] == "function" ? this.customAdapter[t](...a) : this[`_${t}`](...a);
212
218
  }
213
219
  // ========== 好友相关 ==========
214
220
  /**
215
221
  * 获取好友列表
216
222
  */
217
- async getFriends(e) {
218
- return this._call("getFriends", e);
223
+ async getFriends(t) {
224
+ return this._call("getFriends", t);
219
225
  }
220
- async _getFriends(e) {
221
- return this.http.get(this.endpoints.getFriends, { currentUser: e });
226
+ async _getFriends(t) {
227
+ return this.http.get(this.endpoints.getFriends, { currentUser: t });
222
228
  }
223
229
  /**
224
230
  * 获取可添加的用户列表
225
231
  */
226
- async getAvailableUsers(e) {
227
- return this._call("getAvailableUsers", e);
232
+ async getAvailableUsers(t) {
233
+ return this._call("getAvailableUsers", t);
228
234
  }
229
- async _getAvailableUsers(e) {
230
- return this.http.get(this.endpoints.getAvailableUsers, { currentUser: e });
235
+ async _getAvailableUsers(t) {
236
+ return this.http.get(this.endpoints.getAvailableUsers, { currentUser: t });
231
237
  }
232
238
  /**
233
239
  * 添加好友
234
240
  */
235
- async addFriend(e, s) {
236
- return this._call("addFriend", e, s);
241
+ async addFriend(t, a) {
242
+ return this._call("addFriend", t, a);
237
243
  }
238
- async _addFriend(e, s) {
239
- return this.http.post(this.endpoints.addFriend, { currentUser: e, friendUser: s });
244
+ async _addFriend(t, a) {
245
+ return this.http.post(this.endpoints.addFriend, { currentUser: t, friendUser: a });
240
246
  }
241
247
  /**
242
248
  * 获取好友申请列表
243
249
  */
244
- async getApplyList(e) {
245
- return this._call("getApplyList", e);
250
+ async getApplyList(t) {
251
+ return this._call("getApplyList", t);
246
252
  }
247
- async _getApplyList(e) {
248
- return this.http.get(this.endpoints.getApplyList, { currentUser: e });
253
+ async _getApplyList(t) {
254
+ return this.http.get(this.endpoints.getApplyList, { currentUser: t });
249
255
  }
250
256
  /**
251
257
  * 同意好友申请
252
258
  */
253
- async agreeFriend(e, s) {
254
- return this._call("agreeFriend", e, s);
259
+ async agreeFriend(t, a) {
260
+ return this._call("agreeFriend", t, a);
255
261
  }
256
- async _agreeFriend(e, s) {
257
- return this.http.post(this.endpoints.agreeFriend, { applyUser: e, friendUser: s });
262
+ async _agreeFriend(t, a) {
263
+ return this.http.post(this.endpoints.agreeFriend, { applyUser: t, friendUser: a });
258
264
  }
259
265
  /**
260
266
  * 设置好友聊天状态
261
267
  */
262
- async setChatStatus(e, s, o = 1) {
263
- return this._call("setChatStatus", e, s, o);
268
+ async setChatStatus(t, a, m = 1) {
269
+ return this._call("setChatStatus", t, a, m);
264
270
  }
265
- async _setChatStatus(e, s, o) {
266
- return this.http.post(this.endpoints.setChatStatus, null, { params: { currentUser: e, friendUser: s, status: o } });
271
+ async _setChatStatus(t, a, m) {
272
+ return this.http.post(this.endpoints.setChatStatus, null, { params: { currentUser: t, friendUser: a, status: m } });
267
273
  }
268
274
  // ========== 消息相关 ==========
269
275
  /**
270
276
  * 获取聊天历史
271
277
  */
272
- async getHistory(e, s) {
273
- return this._call("getHistory", e, s);
278
+ async getHistory(t, a) {
279
+ return this._call("getHistory", t, a);
274
280
  }
275
- async _getHistory(e, s) {
276
- return this.http.get(this.endpoints.getHistory, { fromUser: e, toUser: s });
281
+ async _getHistory(t, a) {
282
+ return this.http.get(this.endpoints.getHistory, { fromUser: t, toUser: a });
277
283
  }
278
284
  /**
279
285
  * 标记消息已读
280
286
  */
281
- async setRead(e, s) {
282
- return this._call("setRead", e, s);
287
+ async setRead(t, a) {
288
+ return this._call("setRead", t, a);
283
289
  }
284
- async _setRead(e, s) {
285
- return this.http.post(this.endpoints.setRead, { currentUser: e, friendUser: s });
290
+ async _setRead(t, a) {
291
+ return this.http.post(this.endpoints.setRead, { currentUser: t, friendUser: a });
286
292
  }
287
293
  // ========== 文件相关 ==========
288
294
  /**
289
295
  * 上传文件
290
296
  */
291
- async uploadFile(e) {
292
- return this._call("uploadFile", e);
297
+ async uploadFile(t) {
298
+ return this._call("uploadFile", t);
293
299
  }
294
- async _uploadFile(e) {
295
- const s = new FormData();
296
- return s.append("file", e), this.http.post(this.endpoints.uploadFile, s);
300
+ async _uploadFile(t) {
301
+ const a = new FormData();
302
+ return a.append("file", t), this.http.post(this.endpoints.uploadFile, a);
297
303
  }
298
304
  // ========== 用户相关 ==========
299
305
  /**
300
306
  * 获取用户信息
301
307
  */
302
- async getUserInfo(e) {
303
- return this._call("getUserInfo", e);
308
+ async getUserInfo(t) {
309
+ return this._call("getUserInfo", t);
304
310
  }
305
- async _getUserInfo(e) {
306
- return this.http.get(this.endpoints.getUserInfo, { username: e });
311
+ async _getUserInfo(t) {
312
+ return this.http.get(this.endpoints.getUserInfo, { username: t });
307
313
  }
308
314
  /**
309
315
  * 更新用户信息
310
316
  */
311
- async updateUserInfo(e, s) {
312
- return this._call("updateUserInfo", e, s);
317
+ async updateUserInfo(t, a) {
318
+ return this._call("updateUserInfo", t, a);
313
319
  }
314
- async _updateUserInfo(e, s) {
315
- return this.http.put(this.endpoints.updateUserInfo, { username: e, ...s });
320
+ async _updateUserInfo(t, a) {
321
+ return this.http.put(this.endpoints.updateUserInfo, { username: t, ...a });
316
322
  }
317
323
  /**
318
324
  * 获取用户头像
319
325
  */
320
- async getUserAvatar(e) {
321
- return this._call("getUserAvatar", e);
326
+ async getUserAvatar(t) {
327
+ return this._call("getUserAvatar", t);
322
328
  }
323
- async _getUserAvatar(e) {
324
- return this.http.get(this.endpoints.getUserAvatar, { username: e });
329
+ async _getUserAvatar(t) {
330
+ return this.http.get(this.endpoints.getUserAvatar, { username: t });
325
331
  }
326
332
  /**
327
333
  * 上传头像
328
334
  */
329
- async uploadAvatar(e, s) {
330
- return this._call("uploadAvatar", e, s);
335
+ async uploadAvatar(t, a) {
336
+ return this._call("uploadAvatar", t, a);
331
337
  }
332
- async _uploadAvatar(e, s) {
333
- const o = new FormData();
334
- return o.append("file", e), o.append("username", s), this.http.post(this.endpoints.uploadAvatar, o);
338
+ async _uploadAvatar(t, a) {
339
+ const m = new FormData();
340
+ return m.append("file", t), m.append("username", a), this.http.post(this.endpoints.uploadAvatar, m);
335
341
  }
336
342
  }
337
- const $t = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
343
+ const Rt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
338
344
  __proto__: null,
339
- ChatApi: Be,
340
- default: Be
345
+ ChatApi: ft,
346
+ default: ft
341
347
  }, Symbol.toStringTag, { value: "Module" }));
342
- function Et(y) {
343
- const e = new Be(y);
344
- let s = null;
345
- const o = y.user.username, F = f(y.user.avatar || `https://api.dicebear.com/7.x/avataaars/svg?seed=${o}`), T = f({
346
- username: o,
347
- nickname: y.user.nickname || "",
348
- email: y.user.email || "",
349
- phone: y.user.phone || "",
350
- bio: y.user.bio || ""
351
- }), z = f(!1), w = f([]), U = f([]), V = f([]), m = f(""), _ = f(""), C = f(""), R = f(null), N = f(!1), G = f(""), J = f([]), Q = f(!1), le = f([]), te = f(!1), g = re(() => {
352
- let a = U.value;
353
- if (_.value) {
354
- const i = _.value.toLowerCase();
355
- a = a.filter(
356
- (c) => {
357
- var S;
358
- return (S = c.username) == null ? void 0 : S.toLowerCase().includes(i);
348
+ function Lt(w, t) {
349
+ const a = new ft(w);
350
+ let m = null;
351
+ const C = w.user.username, N = h(w.user.avatar || `https://api.dicebear.com/7.x/avataaars/svg?seed=${C}`), I = h({
352
+ username: C,
353
+ nickname: w.user.nickname || "",
354
+ email: w.user.email || "",
355
+ phone: w.user.phone || "",
356
+ bio: w.user.bio || ""
357
+ }), T = h(!1), L = h([]), H = h([]), x = h([]), k = h(""), S = h(""), z = h(""), G = h(null), fe = h(!1), oe = h(""), Q = h([]), ne = h(!1), _e = h([]), $ = h(!1), R = ye(() => {
358
+ let l = H.value;
359
+ if (S.value) {
360
+ const d = S.value.toLowerCase();
361
+ l = l.filter(
362
+ (g) => {
363
+ var A;
364
+ return (A = g.username) == null ? void 0 : A.toLowerCase().includes(d);
359
365
  }
360
366
  );
361
367
  }
362
- return a.map((i) => ({
363
- id: i.username,
364
- name: i.username,
365
- avatar: i.avatar || F.value,
366
- online: i.online,
367
- lastMsg: i.lastMsg || "暂无消息",
368
- lastTime: i.lastTime,
369
- unread: i.unReadNum || 0
368
+ return l.map((d) => ({
369
+ id: d.username,
370
+ name: d.username,
371
+ avatar: d.avatar || N.value,
372
+ online: d.online,
373
+ lastMsg: d.lastMsg || "暂无消息",
374
+ lastTime: d.lastTime,
375
+ unread: d.unReadNum || 0
370
376
  }));
371
- }), x = re(() => {
372
- let a = w.value;
373
- if (_.value) {
374
- const i = _.value.toLowerCase();
375
- a = a.filter(
376
- (c) => {
377
- var S;
378
- return (S = c.username) == null ? void 0 : S.toLowerCase().includes(i);
377
+ }), M = ye(() => {
378
+ let l = L.value;
379
+ if (S.value) {
380
+ const d = S.value.toLowerCase();
381
+ l = l.filter(
382
+ (g) => {
383
+ var A;
384
+ return (A = g.username) == null ? void 0 : A.toLowerCase().includes(d);
379
385
  }
380
386
  );
381
387
  }
382
- return a.map((i) => ({
383
- id: i.username,
384
- name: i.username,
385
- avatar: i.avatar || F.value,
386
- online: i.online,
387
- isChatting: i.isChatting
388
+ return l.map((d) => ({
389
+ id: d.username,
390
+ name: d.username,
391
+ avatar: d.avatar || N.value,
392
+ online: d.online,
393
+ isChatting: d.isChatting
388
394
  }));
389
- }), A = re(() => G.value ? J.value.filter(
390
- (a) => {
391
- var i;
392
- return (i = a.username) == null ? void 0 : i.toLowerCase().includes(G.value.toLowerCase());
395
+ }), Z = ye(() => oe.value ? Q.value.filter(
396
+ (l) => {
397
+ var d;
398
+ return (d = l.username) == null ? void 0 : d.toLowerCase().includes(oe.value.toLowerCase());
393
399
  }
394
- ) : J.value), E = re(() => g.value.find((a) => a.id === m.value) || null), ie = re(() => V.value.map((a) => {
395
- const i = a.type === "file" || a.fileUrl || a.fileName, c = a.fileName || a.msgContent;
400
+ ) : Q.value), he = ye(() => R.value.find((l) => l.id === k.value) || null), re = ye(() => x.value.map((l) => {
401
+ const d = l.type === "file" || l.fileUrl || l.fileName, g = l.fileName || l.msgContent;
396
402
  return {
397
- text: a.msgContent,
398
- isSelf: a.sendUsername === o,
399
- time: a.createTime,
400
- sendUsername: a.sendUsername,
401
- type: i ? "file" : "text",
402
- fileType: ge(c) ? "image" : ye(c),
403
- fileUrl: a.fileUrl || "",
404
- fileName: c,
405
- fileSize: a.fileSize || 0
403
+ text: l.msgContent,
404
+ isSelf: l.sendUsername === C,
405
+ time: l.createTime,
406
+ sendUsername: l.sendUsername,
407
+ type: d ? "file" : "text",
408
+ fileType: $e(g) ? "image" : ke(g),
409
+ fileUrl: l.fileUrl || "",
410
+ fileName: g,
411
+ fileSize: l.fileSize || 0
406
412
  };
407
- })), P = (a) => We(a).format("HH:mm"), he = (a) => {
408
- if (!a) return "";
409
- const i = We(), c = We(a);
410
- return i.isSame(c, "day") ? c.format("HH:mm") : i.diff(c, "day") === 1 ? "昨天" : i.diff(c, "day") < 7 ? ["周日", "周一", "周二", "周三", "周四", "周五", "周六"][c.day()] : c.format("MM/DD");
411
- }, ge = (a) => {
412
- if (!a) return !1;
413
- const i = ["jpg", "jpeg", "png", "gif", "bmp", "webp", "svg"], c = a.split(".").pop().toLowerCase();
414
- return i.includes(c);
415
- }, ye = (a) => {
416
- if (!a) return "default";
417
- const i = a.split(".").pop().toLowerCase();
418
- return ["xls", "xlsx"].includes(i) ? "excel" : ["pdf"].includes(i) ? "pdf" : ["doc", "docx"].includes(i) ? "docx" : "default";
419
- }, O = () => {
420
- Ne(() => {
421
- R.value && (R.value.scrollTop = R.value.scrollHeight);
413
+ })), be = (l) => mt(l).format("HH:mm"), Ue = (l) => {
414
+ if (!l) return "";
415
+ const d = mt(), g = mt(l);
416
+ return d.isSame(g, "day") ? g.format("HH:mm") : d.diff(g, "day") === 1 ? "昨天" : d.diff(g, "day") < 7 ? ["周日", "周一", "周二", "周三", "周四", "周五", "周六"][g.day()] : g.format("MM/DD");
417
+ }, $e = (l) => {
418
+ if (!l) return !1;
419
+ const d = ["jpg", "jpeg", "png", "gif", "bmp", "webp", "svg"], g = l.split(".").pop().toLowerCase();
420
+ return d.includes(g);
421
+ }, ke = (l) => {
422
+ if (!l) return "default";
423
+ const d = l.split(".").pop().toLowerCase();
424
+ return ["xls", "xlsx"].includes(d) ? "excel" : ["pdf"].includes(d) ? "pdf" : ["doc", "docx"].includes(d) ? "docx" : "default";
425
+ }, ce = () => {
426
+ Qe(() => {
427
+ G.value && (G.value.scrollTop = G.value.scrollHeight);
422
428
  });
423
- }, K = async () => {
429
+ }, de = async () => {
424
430
  try {
425
- const i = (await e.getFriends(o)).data || [];
426
- w.value = i, U.value = i.filter((c) => c.isChatting === 1);
427
- for (const c of U.value)
431
+ const d = (await a.getFriends(C)).data || [];
432
+ L.value = d, H.value = d.filter((g) => g.isChatting === 1);
433
+ for (const g of H.value)
428
434
  try {
429
- const se = (await e.getHistory(o, c.username)).data || [];
430
- c.unReadNum = se.filter(
431
- (ee) => ee.isRead === 0 && ee.sendUsername === c.username
435
+ const le = (await a.getHistory(C, g.username)).data || [];
436
+ g.unReadNum = le.filter(
437
+ (E) => E.isRead === 0 && E.sendUsername === g.username
432
438
  ).length;
433
439
  } catch {
434
- c.unReadNum = 0;
440
+ g.unReadNum = 0;
435
441
  }
436
- } catch (a) {
437
- console.error("[VueChatKit] 获取好友列表失败", a);
442
+ } catch (l) {
443
+ console.error("[VueChatKit] 获取好友列表失败", l);
438
444
  }
439
- }, oe = async (a) => {
445
+ }, we = async (l) => {
440
446
  try {
441
- const i = await e.getHistory(o, a);
442
- V.value = i.data || [], O();
443
- } catch (i) {
444
- console.error("[VueChatKit] 获取聊天历史失败", i);
447
+ const d = await a.getHistory(C, l);
448
+ x.value = d.data || [], ce();
449
+ } catch (d) {
450
+ console.error("[VueChatKit] 获取聊天历史失败", d);
445
451
  }
446
- }, He = async (a) => {
452
+ }, Te = async (l) => {
447
453
  try {
448
- await e.setRead(o, a), K();
449
- } catch (i) {
450
- console.error("[VueChatKit] 标记已读失败", i);
454
+ await a.setRead(C, l), de();
455
+ } catch (d) {
456
+ console.error("[VueChatKit] 标记已读失败", d);
451
457
  }
452
- }, xe = async (a) => {
453
- m.value = a.id, await oe(a.id), await He(a.id), O();
454
- }, Ae = async (a, i = 1) => {
458
+ }, Me = async (l) => {
459
+ k.value = l.id, await we(l.id), await Te(l.id), ce();
460
+ }, Fe = async (l, d = 1) => {
455
461
  try {
456
- return await e.setChatStatus(o, a, i), await K(), !0;
457
- } catch (c) {
458
- return console.error("[VueChatKit] 设置聊天状态失败", c), !1;
462
+ return await a.setChatStatus(C, l, d), await de(), !0;
463
+ } catch (g) {
464
+ return console.error("[VueChatKit] 设置聊天状态失败", g), !1;
459
465
  }
460
- }, _e = () => {
461
- if (!C.value.trim() || !m.value || !s) return;
462
- if (s.send(m.value, C.value.trim(), "text")) {
463
- const i = {
464
- msgContent: C.value.trim(),
465
- sendUsername: o,
466
- receiveUsername: m.value,
466
+ }, Ie = () => {
467
+ if (!z.value.trim() || !k.value || !m) return;
468
+ if (m.send(k.value, z.value.trim(), "text")) {
469
+ const d = {
470
+ msgContent: z.value.trim(),
471
+ sendUsername: C,
472
+ receiveUsername: k.value,
467
473
  createTime: /* @__PURE__ */ new Date(),
468
474
  isRead: 0,
469
475
  type: "text"
470
476
  };
471
- V.value.push(i), C.value = "", O(), setTimeout(() => {
472
- oe(m.value), K();
477
+ x.value.push(d), z.value = "", ce(), setTimeout(() => {
478
+ we(k.value), de();
473
479
  }, 300);
474
480
  }
475
- }, be = async (a) => {
476
- if (!m.value || !s) return !1;
481
+ }, xe = async (l) => {
482
+ if (!k.value || !m) return !1;
477
483
  try {
478
- const i = await e.uploadFile(a);
479
- if (i.code === 200 && i.data) {
480
- const { fileUrl: c, fileName: S } = i.data;
481
- if (s.send(
482
- m.value,
483
- S,
484
+ const d = await a.uploadFile(l);
485
+ if (d.code === 200 && d.data) {
486
+ const { fileUrl: g, fileName: A } = d.data;
487
+ if (m.send(
488
+ k.value,
489
+ A,
484
490
  "file",
485
- c,
486
- S,
487
- a.size
491
+ g,
492
+ A,
493
+ l.size
488
494
  )) {
489
- const ee = {
490
- msgContent: S,
491
- sendUsername: o,
492
- receiveUsername: m.value,
495
+ const E = {
496
+ msgContent: A,
497
+ sendUsername: C,
498
+ receiveUsername: k.value,
493
499
  createTime: /* @__PURE__ */ new Date(),
494
500
  isRead: 0,
495
501
  type: "file",
496
- fileUrl: c,
497
- fileName: S,
498
- fileSize: a.size
502
+ fileUrl: g,
503
+ fileName: A,
504
+ fileSize: l.size
499
505
  };
500
- return V.value.push(ee), O(), !0;
506
+ return x.value.push(E), ce(), !0;
501
507
  }
502
508
  }
503
509
  return !1;
504
- } catch (i) {
505
- return console.error("[VueChatKit] 发送文件失败", i), !1;
510
+ } catch (d) {
511
+ return console.error("[VueChatKit] 发送文件失败", d), !1;
506
512
  }
507
- }, Ce = async (a, i) => {
508
- if (!(!m.value || !s)) {
509
- if (i && i.trim() && s.send(m.value, i.trim(), "text")) {
510
- const S = {
511
- msgContent: i.trim(),
512
- sendUsername: o,
513
- receiveUsername: m.value,
513
+ }, De = async (l, d) => {
514
+ if (!(!k.value || !m)) {
515
+ if (d && d.trim() && m.send(k.value, d.trim(), "text")) {
516
+ const A = {
517
+ msgContent: d.trim(),
518
+ sendUsername: C,
519
+ receiveUsername: k.value,
514
520
  createTime: /* @__PURE__ */ new Date(),
515
521
  isRead: 0,
516
522
  type: "text"
517
523
  };
518
- V.value.push(S);
524
+ x.value.push(A);
519
525
  }
520
- for (const c of a) {
521
- const S = c.file || c;
522
- await be(S);
526
+ for (const g of l) {
527
+ const A = g.file || g;
528
+ await xe(A);
523
529
  }
524
530
  setTimeout(() => {
525
- oe(m.value), K();
531
+ we(k.value), de();
526
532
  }, 300);
527
533
  }
528
- }, Se = (a) => {
534
+ }, Ee = (l) => {
529
535
  try {
530
536
  try {
531
- const c = JSON.parse(a);
532
- if (c.to || c.msg)
537
+ const g = JSON.parse(l);
538
+ if (g.to || g.msg)
533
539
  return {
534
- to: c.to,
535
- content: c.msg,
536
- type: c.type || "text",
537
- fileUrl: c.fileUrl || "",
538
- fileName: c.fileName || "",
539
- fileSize: c.fileSize || 0
540
+ to: g.to,
541
+ content: g.msg,
542
+ type: g.type || "text",
543
+ fileUrl: g.fileUrl || "",
544
+ fileName: g.fileName || "",
545
+ fileSize: g.fileSize || 0
540
546
  };
541
547
  } catch {
542
548
  }
543
- const i = a.match(/^\[(.+?)\]:(.+)$/);
544
- if (i)
549
+ const d = l.match(/^\[(.+?)\]:(.+)$/);
550
+ if (d)
545
551
  return {
546
- username: i[1],
547
- content: i[2],
552
+ username: d[1],
553
+ content: d[2],
548
554
  type: "text"
549
555
  };
550
- } catch (i) {
551
- console.error("[VueChatKit] 解析消息失败", i);
556
+ } catch (d) {
557
+ console.error("[VueChatKit] 解析消息失败", d);
552
558
  }
553
559
  return null;
554
- }, Ve = (a) => {
555
- if (a.includes("【状态变更】")) {
556
- const c = /【状态变更】(.+?) 已(上线|下线)/, S = a.match(c);
557
- if (S) {
558
- const se = S[1], ee = S[2] === "上线", ve = w.value.find((B) => B.username === se);
559
- ve && (ve.online = ee);
560
+ }, qe = (l) => {
561
+ if (l.includes("【状态变更】")) {
562
+ const g = /【状态变更】(.+?) 已(上线|下线)/, A = l.match(g);
563
+ if (A) {
564
+ const le = A[1], E = A[2] === "上线", q = L.value.find((pe) => pe.username === le);
565
+ q && (q.online = E);
560
566
  }
561
567
  return;
562
568
  }
563
- const i = Se(a);
564
- if (i) {
565
- if (m.value) {
569
+ const d = Ee(l);
570
+ if (d) {
571
+ const g = {
572
+ content: d.content,
573
+ username: d.username || k.value,
574
+ type: d.type || "text",
575
+ fileUrl: d.fileUrl || "",
576
+ fileName: d.fileName || "",
577
+ fileSize: d.fileSize || 0,
578
+ timestamp: /* @__PURE__ */ new Date()
579
+ };
580
+ if (k.value) {
566
581
  try {
567
- let c = {
568
- msgContent: i.content,
569
- sendUsername: i.username || m.value,
570
- receiveUsername: o,
582
+ let A = {
583
+ msgContent: d.content,
584
+ sendUsername: g.username,
585
+ receiveUsername: C,
571
586
  createTime: /* @__PURE__ */ new Date(),
572
587
  isRead: 0,
573
- type: i.type || "text",
574
- fileUrl: i.fileUrl || "",
575
- fileName: i.fileName || "",
576
- fileSize: i.fileSize || 0
588
+ type: d.type || "text",
589
+ fileUrl: d.fileUrl || "",
590
+ fileName: d.fileName || "",
591
+ fileSize: d.fileSize || 0
577
592
  };
578
- V.value.push(c), O();
579
- } catch (c) {
580
- console.error("[VueChatKit] 添加临时消息失败", c);
593
+ x.value.push(A), ce();
594
+ } catch (A) {
595
+ console.error("[VueChatKit] 添加临时消息失败", A);
581
596
  }
582
- oe(m.value);
597
+ we(k.value);
583
598
  }
584
- K();
599
+ de(), t && typeof t == "function" && t(g);
585
600
  }
586
- }, Fe = () => {
587
- const a = `${y.api.websocketUrl}?userId=${o}`;
588
- s = new Dt(o, {
589
- wsUrl: a,
590
- maxReconnectAttempts: y.websocket.maxReconnectAttempts,
591
- reconnectDelay: y.websocket.reconnectDelay
592
- }), s.on("message", Ve), s.connect();
593
- }, Re = () => {
594
- s && (s.close(), s = null);
595
- }, Ie = async () => {
596
- N.value = !0, G.value = "", await Le();
597
- }, Le = async () => {
598
- Q.value = !0;
601
+ }, We = () => {
602
+ const l = `${w.api.websocketUrl}?userId=${C}`;
603
+ m = new Et(C, {
604
+ wsUrl: l,
605
+ maxReconnectAttempts: w.websocket.maxReconnectAttempts,
606
+ reconnectDelay: w.websocket.reconnectDelay
607
+ }), m.on("message", qe), m.connect();
608
+ }, Be = () => {
609
+ m && (m.close(), m = null);
610
+ }, Ke = async () => {
611
+ fe.value = !0, oe.value = "", await ve();
612
+ }, ve = async () => {
613
+ ne.value = !0;
599
614
  try {
600
- const a = await e.getAvailableUsers(o);
601
- J.value = (a == null ? void 0 : a.data) || [];
602
- } catch (a) {
603
- console.error("[VueChatKit] 获取可用用户失败", a);
615
+ const l = await a.getAvailableUsers(C);
616
+ Q.value = (l == null ? void 0 : l.data) || [];
617
+ } catch (l) {
618
+ console.error("[VueChatKit] 获取可用用户失败", l);
604
619
  } finally {
605
- Q.value = !1;
620
+ ne.value = !1;
606
621
  }
607
- }, Te = async (a) => {
622
+ }, ee = async (l) => {
608
623
  try {
609
- await e.addFriend(o, a.username), await K(), N.value = !1;
610
- } catch (i) {
611
- console.error("[VueChatKit] 添加好友失败", i);
624
+ await a.addFriend(C, l.username), await de(), fe.value = !1;
625
+ } catch (d) {
626
+ console.error("[VueChatKit] 添加好友失败", d);
612
627
  }
613
- }, Z = async () => {
614
- te.value = !0;
628
+ }, W = async () => {
629
+ $.value = !0;
615
630
  try {
616
- const a = await e.getApplyList(o);
617
- le.value = a.data || [];
618
- } catch (a) {
619
- console.error("[VueChatKit] 获取好友申请列表失败", a);
631
+ const l = await a.getApplyList(C);
632
+ _e.value = l.data || [];
633
+ } catch (l) {
634
+ console.error("[VueChatKit] 获取好友申请列表失败", l);
620
635
  } finally {
621
- te.value = !1;
636
+ $.value = !1;
622
637
  }
623
- }, de = async (a) => {
638
+ }, F = async (l) => {
624
639
  try {
625
- await e.agreeFriend(a, o), await Z(), await K();
626
- } catch (i) {
627
- console.error("[VueChatKit] 同意好友申请失败", i);
640
+ await a.agreeFriend(l, C), await W(), await de();
641
+ } catch (d) {
642
+ console.error("[VueChatKit] 同意好友申请失败", d);
628
643
  }
629
- }, D = async () => {
644
+ }, O = async () => {
630
645
  try {
631
- const a = await e.getUserAvatar(o);
632
- a.code === 200 && a.data && (F.value = a.data);
633
- } catch (a) {
634
- console.warn("[VueChatKit] 加载头像失败", a);
646
+ const l = await a.getUserAvatar(C);
647
+ l.code === 200 && l.data && (N.value = l.data);
648
+ } catch (l) {
649
+ console.warn("[VueChatKit] 加载头像失败", l);
635
650
  }
636
- }, M = (a) => {
637
- F.value = a;
638
- }, ue = async () => {
639
- z.value = !0;
651
+ }, j = (l) => {
652
+ N.value = l;
653
+ }, D = async () => {
654
+ T.value = !0;
640
655
  try {
641
- const a = await e.getUserInfo(o);
642
- a.code === 200 && a.data && (T.value = {
643
- ...T.value,
644
- ...a.data
656
+ const l = await a.getUserInfo(C);
657
+ l.code === 200 && l.data && (I.value = {
658
+ ...I.value,
659
+ ...l.data
645
660
  });
646
- } catch (a) {
647
- console.error("[VueChatKit] 获取用户信息失败", a);
661
+ } catch (l) {
662
+ console.error("[VueChatKit] 获取用户信息失败", l);
648
663
  } finally {
649
- z.value = !1;
664
+ T.value = !1;
650
665
  }
651
- }, H = async (a) => {
666
+ }, X = async (l) => {
652
667
  try {
653
- return (await e.updateUserInfo(o, a)).code === 200 ? (T.value = {
654
- ...T.value,
655
- ...a
668
+ return (await a.updateUserInfo(C, l)).code === 200 ? (I.value = {
669
+ ...I.value,
670
+ ...l
656
671
  }, !0) : !1;
657
- } catch (i) {
658
- return console.error("[VueChatKit] 更新用户信息失败", i), !1;
672
+ } catch (d) {
673
+ return console.error("[VueChatKit] 更新用户信息失败", d), !1;
659
674
  }
660
- }, W = () => {
661
- m.value = "", V.value = [], C.value = "", _.value = "";
675
+ }, ge = () => {
676
+ k.value = "", x.value = [], z.value = "", S.value = "";
662
677
  };
663
- return D(), {
678
+ return O(), {
664
679
  // 状态
665
- myUsername: o,
666
- myAvatar: F,
667
- userInfo: T,
668
- loadingUserInfo: z,
669
- friendList: w,
670
- chatList: U,
671
- filteredFriendList: x,
672
- chatMsgList: V,
673
- currentSelectName: m,
674
- searchText: _,
675
- inputText: C,
676
- messagesContainer: R,
677
- filteredUsers: g,
678
- filteredAvailableUsers: A,
679
- currentUser: E,
680
- currentMessages: ie,
681
- addFriendDialogVisible: N,
682
- addFriendSearchText: G,
683
- availableUsers: J,
684
- loadingAvailableUsers: Q,
685
- friendApplyList: le,
686
- loadingFriendApply: te,
680
+ myUsername: C,
681
+ myAvatar: N,
682
+ userInfo: I,
683
+ loadingUserInfo: T,
684
+ friendList: L,
685
+ chatList: H,
686
+ filteredFriendList: M,
687
+ chatMsgList: x,
688
+ currentSelectName: k,
689
+ searchText: S,
690
+ inputText: z,
691
+ messagesContainer: G,
692
+ filteredUsers: R,
693
+ filteredAvailableUsers: Z,
694
+ currentUser: he,
695
+ currentMessages: re,
696
+ addFriendDialogVisible: fe,
697
+ addFriendSearchText: oe,
698
+ availableUsers: Q,
699
+ loadingAvailableUsers: ne,
700
+ friendApplyList: _e,
701
+ loadingFriendApply: $,
687
702
  // 方法
688
- formatTime: P,
689
- formatLastTime: he,
690
- scrollToBottom: O,
691
- getFriendList: K,
692
- getChatHistory: oe,
693
- setFriendToChatStatus: Ae,
694
- selectUser: xe,
695
- sendMessage: _e,
696
- sendFile: be,
697
- sendFilesAndText: Ce,
698
- initWebSocket: Fe,
699
- closeWebSocket: Re,
700
- reset: W,
701
- openAddFriendDialog: Ie,
702
- addFriend: Te,
703
- loadFriendApplyList: Z,
704
- agreeFriend: de,
705
- updateMyAvatar: M,
706
- getUserInfo: ue,
707
- updateUserInfo: H
703
+ formatTime: be,
704
+ formatLastTime: Ue,
705
+ scrollToBottom: ce,
706
+ getFriendList: de,
707
+ getChatHistory: we,
708
+ setFriendToChatStatus: Fe,
709
+ selectUser: Me,
710
+ sendMessage: Ie,
711
+ sendFile: xe,
712
+ sendFilesAndText: De,
713
+ initWebSocket: We,
714
+ closeWebSocket: Be,
715
+ reset: ge,
716
+ openAddFriendDialog: Ke,
717
+ addFriend: ee,
718
+ loadFriendApplyList: W,
719
+ agreeFriend: F,
720
+ updateMyAvatar: j,
721
+ getUserInfo: D,
722
+ updateUserInfo: X
708
723
  };
709
724
  }
710
- const et = (y, e) => {
711
- const s = y.__vccOpts || y;
712
- for (const [o, F] of e)
713
- s[o] = F;
714
- return s;
715
- }, Kt = { class: "avatar-crop-container" }, Wt = ["src"], Bt = { class: "crop-overlay" }, Nt = { class: "crop-box" }, Ht = {
725
+ const ht = (w, t) => {
726
+ const a = w.__vccOpts || w;
727
+ for (const [m, C] of t)
728
+ a[m] = C;
729
+ return a;
730
+ }, Wt = { class: "avatar-crop-container" }, Bt = ["src"], Kt = { class: "crop-overlay" }, Pt = { class: "crop-box" }, Nt = {
716
731
  key: 0,
717
732
  class: "crop-mask"
718
- }, qt = { class: "zoom-controls" }, Pt = {
733
+ }, Ht = { class: "zoom-controls" }, Ot = {
719
734
  __name: "AvatarCrop",
720
735
  props: {
721
736
  modelValue: { type: Boolean, default: !1 },
722
737
  src: { type: String, default: "" }
723
738
  },
724
739
  emits: ["update:modelValue", "confirm"],
725
- setup(y, { emit: e }) {
726
- const s = y, o = e, F = re({
727
- get: () => s.modelValue,
728
- set: (g) => o("update:modelValue", g)
729
- }), T = f(""), z = f(null), w = f(null), U = f(null), V = f(1), m = f({ x: 0, y: 0 }), _ = f(!1), C = f({ x: 0, y: 0 }), R = f({ width: 0, height: 0 });
730
- yt(() => s.src, (g) => {
731
- g && (T.value = g, V.value = 1, m.value = { x: 0, y: 0 });
740
+ setup(w, { emit: t }) {
741
+ const a = w, m = t, C = ye({
742
+ get: () => a.modelValue,
743
+ set: ($) => m("update:modelValue", $)
744
+ }), N = h(""), I = h(null), T = h(null), L = h(null), H = h(1), x = h({ x: 0, y: 0 }), k = h(!1), S = h({ x: 0, y: 0 }), z = h({ width: 0, height: 0 });
745
+ Dt(() => a.src, ($) => {
746
+ $ && (N.value = $, H.value = 1, x.value = { x: 0, y: 0 });
732
747
  });
733
- const N = () => {
734
- Ne(() => {
735
- if (z.value && w.value) {
736
- const g = z.value, x = w.value, A = Math.min(x.clientWidth, x.clientHeight);
737
- g.naturalWidth > g.naturalHeight ? (R.value.height = A, R.value.width = g.naturalWidth / g.naturalHeight * A) : (R.value.width = A, R.value.height = g.naturalHeight / g.naturalWidth * A), m.value = {
738
- x: (A - R.value.width) / 2,
739
- y: (A - R.value.height) / 2
748
+ const G = () => {
749
+ Qe(() => {
750
+ if (I.value && T.value) {
751
+ const $ = I.value, R = T.value, M = Math.min(R.clientWidth, R.clientHeight);
752
+ $.naturalWidth > $.naturalHeight ? (z.value.height = M, z.value.width = $.naturalWidth / $.naturalHeight * M) : (z.value.width = M, z.value.height = $.naturalHeight / $.naturalWidth * M), x.value = {
753
+ x: (M - z.value.width) / 2,
754
+ y: (M - z.value.height) / 2
740
755
  };
741
756
  }
742
757
  });
743
- }, G = (g) => {
744
- _.value = !0;
745
- const x = g.touches ? g.touches[0].clientX : g.clientX, A = g.touches ? g.touches[0].clientY : g.clientY;
746
- C.value = { x: x - m.value.x, y: A - m.value.y }, document.addEventListener("mousemove", J), document.addEventListener("mouseup", Q), document.addEventListener("touchmove", J), document.addEventListener("touchend", Q);
747
- }, J = (g) => {
748
- if (!_.value) return;
749
- const x = g.touches ? g.touches[0].clientX : g.clientX, A = g.touches ? g.touches[0].clientY : g.clientY;
750
- m.value = {
751
- x: x - C.value.x,
752
- y: A - C.value.y
758
+ }, fe = ($) => {
759
+ k.value = !0;
760
+ const R = $.touches ? $.touches[0].clientX : $.clientX, M = $.touches ? $.touches[0].clientY : $.clientY;
761
+ S.value = { x: R - x.value.x, y: M - x.value.y }, document.addEventListener("mousemove", oe), document.addEventListener("mouseup", Q), document.addEventListener("touchmove", oe), document.addEventListener("touchend", Q);
762
+ }, oe = ($) => {
763
+ if (!k.value) return;
764
+ const R = $.touches ? $.touches[0].clientX : $.clientX, M = $.touches ? $.touches[0].clientY : $.clientY;
765
+ x.value = {
766
+ x: R - S.value.x,
767
+ y: M - S.value.y
753
768
  };
754
769
  }, Q = () => {
755
- _.value = !1, document.removeEventListener("mousemove", J), document.removeEventListener("mouseup", Q), document.removeEventListener("touchmove", J), document.removeEventListener("touchend", Q);
756
- }, le = () => {
757
- const g = document.createElement("canvas"), x = g.getContext("2d"), A = 200;
758
- g.width = A, g.height = A;
759
- const E = z.value, ie = U.value, P = w.value;
760
- if (E && ie && P) {
761
- const he = ie.getBoundingClientRect(), ge = P.getBoundingClientRect(), ye = (he.left - ge.left - m.value.x) / V.value, O = (he.top - ge.top - m.value.y) / V.value, K = he.width / V.value;
762
- x.drawImage(
763
- E,
764
- ye * (E.naturalWidth / R.value.width),
765
- O * (E.naturalHeight / R.value.height),
766
- K * (E.naturalWidth / R.value.width),
767
- K * (E.naturalHeight / R.value.height),
770
+ k.value = !1, document.removeEventListener("mousemove", oe), document.removeEventListener("mouseup", Q), document.removeEventListener("touchmove", oe), document.removeEventListener("touchend", Q);
771
+ }, ne = () => {
772
+ const $ = document.createElement("canvas"), R = $.getContext("2d"), M = 200;
773
+ $.width = M, $.height = M;
774
+ const Z = I.value, he = L.value, re = T.value;
775
+ if (Z && he && re) {
776
+ const be = he.getBoundingClientRect(), Ue = re.getBoundingClientRect(), $e = (be.left - Ue.left - x.value.x) / H.value, ke = (be.top - Ue.top - x.value.y) / H.value, ce = be.width / H.value;
777
+ R.drawImage(
778
+ Z,
779
+ $e * (Z.naturalWidth / z.value.width),
780
+ ke * (Z.naturalHeight / z.value.height),
781
+ ce * (Z.naturalWidth / z.value.width),
782
+ ce * (Z.naturalHeight / z.value.height),
768
783
  0,
769
784
  0,
770
- A,
771
- A
772
- ), g.toBlob((oe) => {
773
- o("confirm", { file: oe, url: g.toDataURL("image/png") }), F.value = !1;
785
+ M,
786
+ M
787
+ ), $.toBlob((de) => {
788
+ m("confirm", { file: de, url: $.toDataURL("image/png") }), C.value = !1;
774
789
  }, "image/png");
775
790
  }
776
- }, te = () => {
777
- T.value = "", V.value = 1, m.value = { x: 0, y: 0 };
791
+ }, _e = () => {
792
+ N.value = "", H.value = 1, x.value = { x: 0, y: 0 };
778
793
  };
779
- return (g, x) => {
780
- const A = ce("el-slider"), E = ce("el-button"), ie = ce("el-dialog");
781
- return r(), q(ie, {
782
- modelValue: F.value,
783
- "onUpdate:modelValue": x[2] || (x[2] = (P) => F.value = P),
794
+ return ($, R) => {
795
+ const M = ie("el-slider"), Z = ie("el-button"), he = ie("el-dialog");
796
+ return n(), B(he, {
797
+ modelValue: C.value,
798
+ "onUpdate:modelValue": R[2] || (R[2] = (re) => C.value = re),
784
799
  title: "裁剪头像",
785
800
  width: "500px",
786
801
  "close-on-click-modal": !1,
787
- onClosed: te
802
+ onClosed: _e
788
803
  }, {
789
804
  footer: b(() => [
790
- p(E, {
791
- onClick: x[1] || (x[1] = (P) => F.value = !1)
805
+ p(Z, {
806
+ onClick: R[1] || (R[1] = (re) => C.value = !1)
792
807
  }, {
793
- default: b(() => [...x[3] || (x[3] = [
794
- ne("取消", -1)
808
+ default: b(() => [...R[3] || (R[3] = [
809
+ J("取消", -1)
795
810
  ])]),
796
811
  _: 1
797
812
  }),
798
- p(E, {
813
+ p(Z, {
799
814
  type: "primary",
800
- onClick: le
815
+ onClick: ne
801
816
  }, {
802
- default: b(() => [...x[4] || (x[4] = [
803
- ne("确定", -1)
817
+ default: b(() => [...R[4] || (R[4] = [
818
+ J("确定", -1)
804
819
  ])]),
805
820
  _: 1
806
821
  })
807
822
  ]),
808
823
  default: b(() => [
809
- t("div", Kt, [
810
- t("div", {
824
+ e("div", Wt, [
825
+ e("div", {
811
826
  class: "crop-area",
812
827
  ref_key: "cropAreaRef",
813
- ref: w
828
+ ref: T
814
829
  }, [
815
- t("img", {
816
- src: T.value,
830
+ e("img", {
831
+ src: N.value,
817
832
  ref_key: "imageRef",
818
- ref: z,
833
+ ref: I,
819
834
  class: "crop-image",
820
- onLoad: N,
821
- onMousedown: G,
822
- onTouchstart: G
823
- }, null, 40, Wt),
824
- t("div", Bt, [
825
- t("div", Nt, [
826
- t("div", {
835
+ onLoad: G,
836
+ onMousedown: fe,
837
+ onTouchstart: fe
838
+ }, null, 40, Bt),
839
+ e("div", Kt, [
840
+ e("div", Pt, [
841
+ e("div", {
827
842
  class: "crop-border",
828
843
  ref_key: "cropBoxRef",
829
- ref: U
844
+ ref: L
830
845
  }, null, 512)
831
846
  ])
832
847
  ]),
833
- _.value ? (r(), v("div", Ht)) : I("", !0)
848
+ k.value ? (n(), v("div", Nt)) : U("", !0)
834
849
  ], 512),
835
- t("div", qt, [
836
- p(A, {
837
- modelValue: V.value,
838
- "onUpdate:modelValue": x[0] || (x[0] = (P) => V.value = P),
850
+ e("div", Ht, [
851
+ p(M, {
852
+ modelValue: H.value,
853
+ "onUpdate:modelValue": R[0] || (R[0] = (re) => H.value = re),
839
854
  min: 0.5,
840
855
  max: 3,
841
856
  step: 0.1,
@@ -848,61 +863,969 @@ const et = (y, e) => {
848
863
  }, 8, ["modelValue"]);
849
864
  };
850
865
  }
851
- }, Ot = /* @__PURE__ */ et(Pt, [["__scopeId", "data-v-4e4a992b"]]), jt = { class: "chat-container" }, Xt = { class: "sidebar-nav" }, Yt = ["src"], Gt = ["onClick"], Jt = {
866
+ }, Tt = /* @__PURE__ */ ht(Ot, [["__scopeId", "data-v-4e4a992b"]]), jt = { class: "chat-panel" }, Xt = { class: "chat-sidebar" }, Yt = ["src"], Gt = ["onClick"], Jt = {
867
+ key: 0,
868
+ class: "sidebar-nav-badge"
869
+ }, Qt = { class: "chat-content-panel" }, Zt = { class: "chat-search-bar" }, es = { class: "chat-content-scroll" }, ts = { key: 0 }, ss = ["onClick", "onContextmenu"], as = { class: "chat-list-avatar-wrapper" }, ns = ["src", "alt"], ls = {
870
+ key: 0,
871
+ class: "chat-list-online-indicator"
872
+ }, is = { class: "chat-list-info" }, os = { class: "chat-list-header" }, rs = { class: "chat-list-name" }, cs = { class: "chat-list-time" }, ds = { class: "chat-list-preview" }, us = { class: "chat-list-last-msg" }, vs = {
873
+ key: 0,
874
+ class: "chat-list-unread"
875
+ }, ps = { key: 1 }, ms = { class: "add-friend-section" }, fs = { class: "add-friend-icon" }, hs = ["onClick"], gs = { class: "chat-list-avatar-wrapper" }, _s = ["src", "alt"], ys = { class: "chat-list-info" }, bs = { class: "chat-list-name" }, ks = { key: 2 }, ws = { class: "friend-request-info" }, Cs = ["src", "alt"], Us = { class: "friend-request-details" }, $s = { class: "friend-request-username" }, xs = { class: "chat-main-area" }, As = {
876
+ key: 0,
877
+ class: "friend-profile-area"
878
+ }, Vs = ["src", "alt"], Ss = { class: "profile-name" }, Fs = { class: "profile-status" }, Is = {
879
+ key: 1,
880
+ class: "chat-window-area"
881
+ }, zs = { class: "chat-window-header" }, Rs = { class: "chat-window-title" }, Ls = { class: "chat-window-name" }, Ts = { class: "chat-window-actions" }, Ms = { class: "message-avatar" }, Ds = ["src"], Es = {
882
+ key: 0,
883
+ class: "message-sender-name"
884
+ }, qs = { class: "message-bubble-wrapper" }, Ws = ["onClick"], Bs = ["src", "alt"], Ks = {
885
+ key: 0,
886
+ class: "message-image-size"
887
+ }, Ps = ["onClick"], Ns = { class: "message-file-content" }, Hs = { class: "message-file-icon" }, Os = { class: "message-file-info" }, js = { class: "message-file-name" }, Xs = { class: "message-file-meta" }, Ys = { key: 0 }, Gs = { class: "chat-input-area" }, Js = {
888
+ key: 0,
889
+ class: "pending-files-area"
890
+ }, Qs = {
891
+ key: 0,
892
+ class: "pending-image-wrapper"
893
+ }, Zs = ["src", "alt"], ea = ["onClick"], ta = {
894
+ key: 1,
895
+ class: "pending-file-wrapper"
896
+ }, sa = { class: "pending-file-name" }, aa = ["onClick"], na = {
897
+ key: 1,
898
+ class: "input-toolbar"
899
+ }, la = { class: "input-textarea-wrapper" }, ia = ["onKeydown"], oa = { class: "input-send-wrapper" }, ra = {
900
+ key: 2,
901
+ class: "chat-empty-state"
902
+ }, ca = { class: "empty-state-text" }, da = {
903
+ key: 0,
904
+ class: "chat-detail-panel"
905
+ }, ua = { class: "chat-detail-content" }, va = { class: "chat-detail-profile" }, pa = ["src", "alt"], ma = { class: "chat-detail-name" }, fa = { class: "add-friend-search-wrapper" }, ha = { class: "add-friend-users-list" }, ga = { class: "add-friend-user-info" }, _a = ["src", "alt"], ya = { class: "add-friend-user-name" }, ba = { class: "chat-settings-container" }, ka = { class: "chat-settings-avatar-section" }, wa = { class: "chat-settings-avatar-wrapper" }, Ca = ["src"], Ua = { class: "chat-settings-user-display" }, $a = { class: "chat-settings-nickname" }, xa = { class: "chat-settings-username" }, Aa = { class: "chat-settings-form-section" }, Va = { class: "chat-settings-form-header" }, Sa = { class: "chat-settings-form-title" }, Fa = { class: "chat-settings-form" }, Ia = { class: "chat-settings-form-item" }, za = {
906
+ key: 1,
907
+ class: "chat-settings-form-value"
908
+ }, Ra = { class: "chat-settings-form-item" }, La = {
909
+ key: 1,
910
+ class: "chat-settings-form-value"
911
+ }, Ta = { class: "chat-settings-form-item" }, Ma = {
912
+ key: 1,
913
+ class: "chat-settings-form-value"
914
+ }, Da = { class: "chat-settings-form-item" }, Ea = {
915
+ key: 1,
916
+ class: "chat-settings-form-value bio-value"
917
+ }, qa = {
918
+ key: 0,
919
+ class: "chat-settings-form-actions"
920
+ }, Wa = {
921
+ __name: "ChatPanel",
922
+ props: {
923
+ config: { type: Object, required: !0 }
924
+ },
925
+ emits: ["message", "send", "error", "init"],
926
+ setup(w, { emit: t }) {
927
+ const a = w, m = t, {
928
+ myUsername: C,
929
+ myAvatar: N,
930
+ userInfo: I,
931
+ loadingUserInfo: T,
932
+ friendList: L,
933
+ filteredFriendList: H,
934
+ searchText: x,
935
+ inputText: k,
936
+ messagesContainer: S,
937
+ filteredUsers: z,
938
+ filteredAvailableUsers: G,
939
+ currentUser: fe,
940
+ currentMessages: oe,
941
+ addFriendDialogVisible: Q,
942
+ addFriendSearchText: ne,
943
+ availableUsers: _e,
944
+ loadingAvailableUsers: $,
945
+ friendApplyList: R,
946
+ loadingFriendApply: M,
947
+ formatTime: Z,
948
+ formatLastTime: he,
949
+ scrollToBottom: re,
950
+ getFriendList: be,
951
+ getChatHistory: Ue,
952
+ setFriendToChatStatus: $e,
953
+ selectUser: ke,
954
+ sendMessage: ce,
955
+ sendFile: de,
956
+ sendFilesAndText: we,
957
+ initWebSocket: Te,
958
+ closeWebSocket: Me,
959
+ reset: Fe,
960
+ openAddFriendDialog: Ie,
961
+ addFriend: xe,
962
+ loadFriendApplyList: De,
963
+ agreeFriend: Ee,
964
+ updateMyAvatar: qe,
965
+ getUserInfo: We,
966
+ updateUserInfo: Be
967
+ } = Lt(a.config, (f) => {
968
+ m("message", f);
969
+ }), Ke = ye(() => {
970
+ var r;
971
+ const f = [{ id: "chat", icon: Re, badge: 0 }];
972
+ return a.config.modules.friends && f.push({ id: "friends", icon: Ge, badge: 0 }), a.config.modules.apply && f.push({ id: "apply", icon: Ut, badge: ((r = R.value) == null ? void 0 : r.length) || 0 }), f;
973
+ }), ve = h("chat"), ee = h(null), W = h(null), F = h(null), O = h(!1), j = h(!1), D = h({ nickname: "", email: "", phone: "", bio: "" }), X = h(!1), ge = h(!1), l = h(!1), d = h(!1), g = h(null), A = h(""), le = h(null), E = h([]), q = h({ visible: !1, x: 0, y: 0, chat: null }), pe = (f, r) => {
974
+ f.preventDefault(), f.stopPropagation(), q.value = { visible: !0, x: f.clientX, y: f.clientY, chat: r };
975
+ }, Ae = () => {
976
+ q.value.visible = !1;
977
+ }, Ze = async () => {
978
+ if (!q.value.chat) return;
979
+ await $e(q.value.chat.id, 0) && ee.value === q.value.chat.id && (ee.value = null, W.value = null), Ae();
980
+ }, Ve = (f) => {
981
+ ee.value = f.id, W.value = f, F.value = null, O.value = !1, ke({
982
+ id: f.id,
983
+ name: f.name,
984
+ avatar: f.avatar,
985
+ online: f.online
986
+ });
987
+ }, et = (f) => {
988
+ F.value = f, ee.value = null, W.value = null;
989
+ }, tt = async () => {
990
+ if (!F.value) return;
991
+ if (await $e(F.value.id)) {
992
+ ve.value = "chat", await Qe();
993
+ const r = z.value.find((u) => u.id === F.value.id);
994
+ r && Ve(r), F.value = null;
995
+ }
996
+ }, st = () => {
997
+ ge.value = !0;
998
+ }, at = () => {
999
+ var f;
1000
+ (f = g.value) == null || f.click();
1001
+ }, nt = () => {
1002
+ var f;
1003
+ (f = le.value) == null || f.click();
1004
+ }, lt = (f) => {
1005
+ const r = Array.from(f.target.files || []);
1006
+ if (r.length !== 0) {
1007
+ for (const u of r) {
1008
+ if (u.size > 50 * 1024 * 1024) {
1009
+ P.warning(`文件 ${u.name} 超过50MB,已跳过`);
1010
+ continue;
1011
+ }
1012
+ const s = URL.createObjectURL(u);
1013
+ E.value.push({
1014
+ id: Date.now() + Math.random(),
1015
+ file: u,
1016
+ name: u.name,
1017
+ size: u.size,
1018
+ type: u.type,
1019
+ previewUrl: s,
1020
+ isImage: u.type.startsWith("image/")
1021
+ });
1022
+ }
1023
+ le.value && (le.value.value = "");
1024
+ }
1025
+ }, Pe = (f) => {
1026
+ const r = E.value[f];
1027
+ r.previewUrl && URL.revokeObjectURL(r.previewUrl), E.value.splice(f, 1);
1028
+ }, Ne = (f) => {
1029
+ if (f === 0) return "0 B";
1030
+ const r = 1024, u = ["B", "KB", "MB", "GB"], s = Math.floor(Math.log(f) / Math.log(r));
1031
+ return parseFloat((f / Math.pow(r, s)).toFixed(2)) + " " + u[s];
1032
+ }, He = async () => {
1033
+ if (!k.value.trim() && E.value.length === 0) return;
1034
+ const f = [...E.value], r = k.value;
1035
+ k.value = "", E.value.forEach((u) => {
1036
+ u.previewUrl && URL.revokeObjectURL(u.previewUrl);
1037
+ }), E.value = [], await we(f, r), m("send", { text: r, files: f });
1038
+ }, it = (f) => {
1039
+ var u;
1040
+ const r = (u = f.clipboardData) == null ? void 0 : u.items;
1041
+ if (r) {
1042
+ for (const s of r)
1043
+ if (s.kind === "file") {
1044
+ const y = s.getAsFile();
1045
+ if (y) {
1046
+ if (y.size > 50 * 1024 * 1024) {
1047
+ P.warning(`文件 ${y.name} 超过50MB,已跳过`);
1048
+ continue;
1049
+ }
1050
+ const V = URL.createObjectURL(y);
1051
+ E.value.push({
1052
+ id: Date.now() + Math.random(),
1053
+ file: y,
1054
+ name: y.name,
1055
+ size: y.size,
1056
+ type: y.type,
1057
+ previewUrl: V,
1058
+ isImage: y.type.startsWith("image/")
1059
+ });
1060
+ }
1061
+ }
1062
+ }
1063
+ }, Oe = (f) => {
1064
+ if (!f) {
1065
+ P.warning("文件地址无效");
1066
+ return;
1067
+ }
1068
+ window.open(f, "_blank");
1069
+ }, ot = (f) => {
1070
+ console.warn("图片加载失败", f);
1071
+ }, rt = (f) => {
1072
+ const r = f.target.files[0];
1073
+ if (!r) return;
1074
+ if (!r.type.startsWith("image/")) {
1075
+ P.error("只能上传图片文件");
1076
+ return;
1077
+ }
1078
+ if (r.size > 5 * 1024 * 1024) {
1079
+ P.error("图片大小不能超过 5MB");
1080
+ return;
1081
+ }
1082
+ const u = new FileReader();
1083
+ u.onload = (s) => {
1084
+ A.value = s.target.result, l.value = !0;
1085
+ }, u.readAsDataURL(r);
1086
+ }, ct = async ({ file: f }) => {
1087
+ if (f) {
1088
+ d.value = !0;
1089
+ try {
1090
+ const { ChatApi: r } = await Promise.resolve().then(() => Rt), s = await new r(a.config).uploadAvatar(f, C);
1091
+ s.code === 200 ? (P.success("头像上传成功"), qe(s.data), je()) : P.error(s.msg || "头像上传失败");
1092
+ } catch (r) {
1093
+ console.error(r), P.error("头像上传失败");
1094
+ } finally {
1095
+ d.value = !1;
1096
+ }
1097
+ }
1098
+ }, je = () => {
1099
+ A.value = "", l.value = !1, g.value && (g.value.value = "");
1100
+ }, dt = () => {
1101
+ D.value = {
1102
+ nickname: I.value.nickname || "",
1103
+ email: I.value.email || "",
1104
+ phone: I.value.phone || "",
1105
+ bio: I.value.bio || ""
1106
+ }, j.value = !0;
1107
+ }, ut = () => {
1108
+ j.value = !1, D.value = { nickname: "", email: "", phone: "", bio: "" };
1109
+ }, vt = async () => {
1110
+ X.value = !0;
1111
+ try {
1112
+ await Be(D.value) ? (P.success("保存成功"), j.value = !1) : P.error("保存失败");
1113
+ } catch (f) {
1114
+ console.error(f), P.error("保存失败");
1115
+ } finally {
1116
+ X.value = !1;
1117
+ }
1118
+ };
1119
+ return gt(async () => {
1120
+ await Promise.all([be(), De(), We()]), Te(), z.value.length > 0 && Ve(z.value[0]), m("init"), document.addEventListener("click", Ae);
1121
+ }), _t(() => {
1122
+ Fe(), Me(), document.removeEventListener("click", Ae);
1123
+ }), (f, r) => {
1124
+ var ue, ze, Se;
1125
+ const u = ie("el-icon"), s = ie("el-input"), y = ie("el-empty"), V = ie("el-button"), Y = ie("el-dialog");
1126
+ return n(), v("div", jt, [
1127
+ e("div", Xt, [
1128
+ e("div", {
1129
+ class: "sidebar-avatar",
1130
+ onClick: st
1131
+ }, [
1132
+ e("img", {
1133
+ src: c(N),
1134
+ alt: "头像",
1135
+ class: "sidebar-avatar-img"
1136
+ }, null, 8, Yt)
1137
+ ]),
1138
+ (n(!0), v(se, null, ae(Ke.value, (o) => (n(), v("div", {
1139
+ key: o.id,
1140
+ class: K([
1141
+ "sidebar-nav-item",
1142
+ ve.value === o.id ? "sidebar-nav-item-active" : "sidebar-nav-item-inactive"
1143
+ ]),
1144
+ onClick: (te) => ve.value = o.id
1145
+ }, [
1146
+ p(u, { size: 24 }, {
1147
+ default: b(() => [
1148
+ (n(), B(yt(o.icon)))
1149
+ ]),
1150
+ _: 2
1151
+ }, 1024),
1152
+ o.badge ? (n(), v("span", Jt, _(o.badge > 99 ? "99+" : o.badge), 1)) : U("", !0)
1153
+ ], 10, Gt))), 128)),
1154
+ r[13] || (r[13] = e("div", { class: "sidebar-spacer" }, null, -1)),
1155
+ w.config.modules.settings ? (n(), v("div", {
1156
+ key: 0,
1157
+ class: "sidebar-nav-item sidebar-nav-item-inactive",
1158
+ onClick: r[0] || (r[0] = (o) => ge.value = !0),
1159
+ title: "设置"
1160
+ }, [
1161
+ p(u, { size: 24 }, {
1162
+ default: b(() => [
1163
+ p(c($t))
1164
+ ]),
1165
+ _: 1
1166
+ })
1167
+ ])) : U("", !0)
1168
+ ]),
1169
+ e("div", Qt, [
1170
+ e("div", Zt, [
1171
+ p(s, {
1172
+ modelValue: c(x),
1173
+ "onUpdate:modelValue": r[1] || (r[1] = (o) => Ce(x) ? x.value = o : null),
1174
+ placeholder: "搜索",
1175
+ "prefix-icon": c(Le),
1176
+ class: "chat-search-input"
1177
+ }, null, 8, ["modelValue", "prefix-icon"])
1178
+ ]),
1179
+ e("div", es, [
1180
+ ve.value === "chat" ? (n(), v("div", ts, [
1181
+ (n(!0), v(se, null, ae(c(z), (o) => (n(), v("div", {
1182
+ key: o.id,
1183
+ class: K([
1184
+ "chat-list-item",
1185
+ ee.value === o.id ? "chat-list-item-active" : ""
1186
+ ]),
1187
+ onClick: (te) => Ve(o),
1188
+ onContextmenu: Ye((te) => pe(te, o), ["prevent", "stop"])
1189
+ }, [
1190
+ e("div", as, [
1191
+ e("img", {
1192
+ src: o.avatar,
1193
+ alt: o.name,
1194
+ class: "chat-list-avatar"
1195
+ }, null, 8, ns),
1196
+ o.online ? (n(), v("span", ls)) : U("", !0)
1197
+ ]),
1198
+ e("div", is, [
1199
+ e("div", os, [
1200
+ e("span", rs, _(o.name), 1),
1201
+ e("span", cs, _(c(he)(o.lastTime)), 1)
1202
+ ]),
1203
+ e("div", ds, [
1204
+ e("span", us, _(o.lastMsg), 1),
1205
+ o.unread > 0 ? (n(), v("span", vs, _(o.unread > 99 ? "99+" : o.unread), 1)) : U("", !0)
1206
+ ])
1207
+ ])
1208
+ ], 42, ss))), 128))
1209
+ ])) : U("", !0),
1210
+ ve.value === "friends" && w.config.modules.friends ? (n(), v("div", ps, [
1211
+ e("div", ms, [
1212
+ e("div", {
1213
+ class: "add-friend-btn",
1214
+ onClick: r[2] || (r[2] = (...o) => c(Ie) && c(Ie)(...o))
1215
+ }, [
1216
+ e("div", fs, [
1217
+ p(u, {
1218
+ class: "text-white",
1219
+ size: 20
1220
+ }, {
1221
+ default: b(() => [
1222
+ p(c(xt))
1223
+ ]),
1224
+ _: 1
1225
+ })
1226
+ ]),
1227
+ r[14] || (r[14] = e("span", { class: "add-friend-text" }, "添加好友", -1))
1228
+ ])
1229
+ ]),
1230
+ (n(!0), v(se, null, ae(c(H), (o) => (n(), v("div", {
1231
+ key: o.id,
1232
+ class: "chat-list-item",
1233
+ onClick: (te) => et(o)
1234
+ }, [
1235
+ e("div", gs, [
1236
+ e("img", {
1237
+ src: o.avatar,
1238
+ alt: o.name,
1239
+ class: "chat-list-avatar"
1240
+ }, null, 8, _s),
1241
+ e("span", {
1242
+ class: K([
1243
+ "chat-list-online-indicator",
1244
+ o.online ? "chat-list-online" : "chat-list-offline"
1245
+ ])
1246
+ }, null, 2)
1247
+ ]),
1248
+ e("div", ys, [
1249
+ e("span", bs, _(o.name), 1)
1250
+ ])
1251
+ ], 8, hs))), 128))
1252
+ ])) : U("", !0),
1253
+ ve.value === "apply" && w.config.modules.apply ? (n(), v("div", ks, [
1254
+ c(M) ? (n(), B(y, {
1255
+ key: 0,
1256
+ description: "加载中..."
1257
+ })) : c(R).length === 0 ? (n(), B(y, {
1258
+ key: 1,
1259
+ description: "暂无好友申请"
1260
+ })) : (n(!0), v(se, { key: 2 }, ae(c(R), (o) => (n(), v("div", {
1261
+ key: o.applyUser || o.id,
1262
+ class: "friend-request-item"
1263
+ }, [
1264
+ e("div", ws, [
1265
+ e("img", {
1266
+ src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${o.applyUser}`,
1267
+ alt: o.applyUser,
1268
+ class: "friend-request-avatar"
1269
+ }, null, 8, Cs),
1270
+ e("div", Us, [
1271
+ e("div", $s, _(o.applyUser), 1),
1272
+ r[15] || (r[15] = e("div", { class: "friend-request-desc" }, "请求添加你为好友", -1))
1273
+ ])
1274
+ ]),
1275
+ p(V, {
1276
+ type: "primary",
1277
+ size: "small",
1278
+ onClick: (te) => c(Ee)(o.applyUser)
1279
+ }, {
1280
+ default: b(() => [...r[16] || (r[16] = [
1281
+ J("同意", -1)
1282
+ ])]),
1283
+ _: 1
1284
+ }, 8, ["onClick"])
1285
+ ]))), 128))
1286
+ ])) : U("", !0)
1287
+ ])
1288
+ ]),
1289
+ e("div", xs, [
1290
+ F.value && !W.value ? (n(), v("div", As, [
1291
+ e("img", {
1292
+ src: F.value.avatar,
1293
+ alt: F.value.name,
1294
+ class: "profile-avatar"
1295
+ }, null, 8, Vs),
1296
+ e("div", Ss, _(F.value.name), 1),
1297
+ e("div", Fs, [
1298
+ e("span", {
1299
+ class: K([
1300
+ "profile-status-dot",
1301
+ F.value.online ? "profile-status-online" : "profile-status-offline"
1302
+ ])
1303
+ }, null, 2),
1304
+ e("span", null, _(F.value.online ? "在线" : "离线"), 1)
1305
+ ]),
1306
+ p(V, {
1307
+ type: "primary",
1308
+ size: "large",
1309
+ onClick: tt,
1310
+ class: "profile-start-chat-btn"
1311
+ }, {
1312
+ default: b(() => [
1313
+ p(u, null, {
1314
+ default: b(() => [
1315
+ p(c(Re))
1316
+ ]),
1317
+ _: 1
1318
+ }),
1319
+ r[17] || (r[17] = e("span", null, "发消息", -1))
1320
+ ]),
1321
+ _: 1
1322
+ })
1323
+ ])) : U("", !0),
1324
+ W.value ? (n(), v("div", Is, [
1325
+ e("div", zs, [
1326
+ e("div", Rs, [
1327
+ e("span", Ls, _(W.value.name), 1),
1328
+ e("span", {
1329
+ class: K([
1330
+ "chat-window-status",
1331
+ W.value.online ? "chat-window-status-online" : "chat-window-status-offline"
1332
+ ])
1333
+ }, _(W.value.online ? "在线" : "离线"), 3)
1334
+ ]),
1335
+ e("div", Ts, [
1336
+ p(u, { class: "chat-action-icon" }, {
1337
+ default: b(() => [
1338
+ p(c(Le))
1339
+ ]),
1340
+ _: 1
1341
+ }),
1342
+ p(u, {
1343
+ class: "chat-action-icon",
1344
+ onClick: r[3] || (r[3] = (o) => O.value = !O.value)
1345
+ }, {
1346
+ default: b(() => [
1347
+ p(c(At))
1348
+ ]),
1349
+ _: 1
1350
+ })
1351
+ ])
1352
+ ]),
1353
+ e("div", {
1354
+ ref_key: "messagesContainer",
1355
+ ref: S,
1356
+ class: "chat-messages-container"
1357
+ }, [
1358
+ (n(!0), v(se, null, ae(c(oe), (o, te) => (n(), v("div", {
1359
+ key: te,
1360
+ class: K([
1361
+ "message-wrapper",
1362
+ o.isSelf ? "message-self" : "message-other"
1363
+ ])
1364
+ }, [
1365
+ e("div", Ms, [
1366
+ e("img", {
1367
+ src: o.isSelf ? c(N) : W.value.avatar,
1368
+ class: "message-avatar-img"
1369
+ }, null, 8, Ds)
1370
+ ]),
1371
+ e("div", {
1372
+ class: K([
1373
+ "message-content",
1374
+ o.isSelf ? "message-content-self" : "message-content-other"
1375
+ ])
1376
+ }, [
1377
+ o.isSelf ? U("", !0) : (n(), v("div", Es, _(W.value.name), 1)),
1378
+ e("div", qs, [
1379
+ o.type === "text" ? (n(), v("div", {
1380
+ key: 0,
1381
+ class: K([
1382
+ "message-bubble",
1383
+ o.isSelf ? "message-bubble-self" : "message-bubble-other"
1384
+ ])
1385
+ }, _(o.text), 3)) : o.type === "file" && o.fileType === "image" ? (n(), v("div", {
1386
+ key: 1,
1387
+ class: K([
1388
+ "message-bubble",
1389
+ "message-image-bubble",
1390
+ o.isSelf ? "message-bubble-self" : "message-bubble-other"
1391
+ ]),
1392
+ onClick: (i) => Oe(o.fileUrl)
1393
+ }, [
1394
+ e("img", {
1395
+ src: o.fileUrl,
1396
+ alt: o.fileName,
1397
+ class: "message-image",
1398
+ onError: ot
1399
+ }, null, 40, Bs),
1400
+ o.fileSize ? (n(), v("div", Ks, _(Ne(o.fileSize)), 1)) : U("", !0)
1401
+ ], 10, Ws)) : o.type === "file" ? (n(), v("div", {
1402
+ key: 2,
1403
+ class: K([
1404
+ "message-bubble",
1405
+ "message-file-bubble",
1406
+ o.isSelf ? "message-bubble-self" : "message-bubble-other"
1407
+ ]),
1408
+ onClick: (i) => Oe(o.fileUrl)
1409
+ }, [
1410
+ e("div", Ns, [
1411
+ e("div", Hs, [
1412
+ p(u, { size: 28 }, {
1413
+ default: b(() => [
1414
+ p(c(Vt))
1415
+ ]),
1416
+ _: 1
1417
+ })
1418
+ ]),
1419
+ e("div", Os, [
1420
+ e("div", js, _(o.fileName || o.text), 1),
1421
+ e("div", Xs, [
1422
+ p(u, { size: 12 }, {
1423
+ default: b(() => [
1424
+ p(c(St))
1425
+ ]),
1426
+ _: 1
1427
+ }),
1428
+ r[18] || (r[18] = e("span", null, "点击下载", -1)),
1429
+ o.fileSize ? (n(), v("span", Ys, "· " + _(Ne(o.fileSize)), 1)) : U("", !0)
1430
+ ])
1431
+ ])
1432
+ ])
1433
+ ], 10, Ps)) : U("", !0),
1434
+ e("div", {
1435
+ class: K([
1436
+ "message-time",
1437
+ o.isSelf ? "message-time-right" : "message-time-left"
1438
+ ])
1439
+ }, _(c(Z)(o.time)), 3)
1440
+ ])
1441
+ ], 2)
1442
+ ], 2))), 128))
1443
+ ], 512),
1444
+ e("div", Gs, [
1445
+ E.value.length > 0 ? (n(), v("div", Js, [
1446
+ (n(!0), v(se, null, ae(E.value, (o, te) => (n(), v("div", {
1447
+ key: o.id,
1448
+ class: "pending-file-item"
1449
+ }, [
1450
+ o.isImage ? (n(), v("div", Qs, [
1451
+ e("img", {
1452
+ src: o.previewUrl,
1453
+ alt: o.name,
1454
+ class: "pending-image"
1455
+ }, null, 8, Zs),
1456
+ e("button", {
1457
+ onClick: (i) => Pe(te),
1458
+ class: "pending-file-remove-btn"
1459
+ }, " × ", 8, ea)
1460
+ ])) : (n(), v("div", ta, [
1461
+ p(u, { class: "pending-file-icon" }, {
1462
+ default: b(() => [
1463
+ p(c(Je))
1464
+ ]),
1465
+ _: 1
1466
+ }),
1467
+ e("span", sa, _(o.name), 1),
1468
+ e("button", {
1469
+ onClick: (i) => Pe(te),
1470
+ class: "pending-file-remove-btn"
1471
+ }, " × ", 8, aa)
1472
+ ]))
1473
+ ]))), 128))
1474
+ ])) : U("", !0),
1475
+ w.config.modules.fileUpload ? (n(), v("div", na, [
1476
+ p(u, { class: "input-toolbar-icon" }, {
1477
+ default: b(() => [
1478
+ p(c(Re))
1479
+ ]),
1480
+ _: 1
1481
+ }),
1482
+ p(u, {
1483
+ class: "input-toolbar-icon",
1484
+ onClick: nt
1485
+ }, {
1486
+ default: b(() => [
1487
+ p(c(Je))
1488
+ ]),
1489
+ _: 1
1490
+ }),
1491
+ p(u, { class: "input-toolbar-icon" }, {
1492
+ default: b(() => [
1493
+ p(c(Ft))
1494
+ ]),
1495
+ _: 1
1496
+ })
1497
+ ])) : U("", !0),
1498
+ e("div", la, [
1499
+ bt(e("textarea", {
1500
+ "onUpdate:modelValue": r[4] || (r[4] = (o) => Ce(k) ? k.value = o : null),
1501
+ onKeydown: kt(Ye(He, ["prevent"]), ["enter"]),
1502
+ onPaste: it,
1503
+ placeholder: "输入消息或粘贴文件...",
1504
+ class: "message-input-textarea",
1505
+ rows: "3"
1506
+ }, null, 40, ia), [
1507
+ [wt, c(k)]
1508
+ ])
1509
+ ]),
1510
+ e("div", oa, [
1511
+ p(V, {
1512
+ type: "primary",
1513
+ disabled: !c(k).trim() && E.value.length === 0,
1514
+ onClick: He,
1515
+ class: "send-message-btn"
1516
+ }, {
1517
+ default: b(() => [...r[19] || (r[19] = [
1518
+ J(" 发送 ", -1)
1519
+ ])]),
1520
+ _: 1
1521
+ }, 8, ["disabled"])
1522
+ ]),
1523
+ e("input", {
1524
+ ref_key: "fileInputRef",
1525
+ ref: le,
1526
+ type: "file",
1527
+ multiple: "",
1528
+ class: "hidden-file-input",
1529
+ onChange: lt
1530
+ }, null, 544)
1531
+ ])
1532
+ ])) : F.value ? U("", !0) : (n(), v("div", ra, [
1533
+ p(u, {
1534
+ size: 64,
1535
+ class: "empty-state-icon"
1536
+ }, {
1537
+ default: b(() => [
1538
+ p(c(It))
1539
+ ]),
1540
+ _: 1
1541
+ }),
1542
+ e("div", ca, _(ve.value === "apply" ? "在左侧选择好友申请" : "在左侧选择好友开始聊天"), 1)
1543
+ ]))
1544
+ ]),
1545
+ O.value ? (n(), v("div", da, [
1546
+ r[21] || (r[21] = e("div", { class: "chat-detail-header" }, "聊天详情", -1)),
1547
+ e("div", ua, [
1548
+ e("div", va, [
1549
+ e("img", {
1550
+ src: (ue = W.value) == null ? void 0 : ue.avatar,
1551
+ alt: (ze = W.value) == null ? void 0 : ze.name,
1552
+ class: "chat-detail-avatar"
1553
+ }, null, 8, pa),
1554
+ e("div", ma, _((Se = W.value) == null ? void 0 : Se.name), 1),
1555
+ r[20] || (r[20] = e("div", { class: "chat-detail-actions" }, [
1556
+ e("div", { class: "chat-detail-action-item" }, "查找聊天记录"),
1557
+ e("div", { class: "chat-detail-action-item" }, "清空聊天记录")
1558
+ ], -1))
1559
+ ])
1560
+ ])
1561
+ ])) : U("", !0),
1562
+ p(Y, {
1563
+ modelValue: c(Q),
1564
+ "onUpdate:modelValue": r[6] || (r[6] = (o) => Ce(Q) ? Q.value = o : null),
1565
+ title: "添加好友",
1566
+ width: "500px",
1567
+ "append-to-body": ""
1568
+ }, {
1569
+ default: b(() => [
1570
+ e("div", fa, [
1571
+ p(s, {
1572
+ modelValue: c(ne),
1573
+ "onUpdate:modelValue": r[5] || (r[5] = (o) => Ce(ne) ? ne.value = o : null),
1574
+ placeholder: "搜索用户",
1575
+ "prefix-icon": c(Le),
1576
+ class: "add-friend-search-input"
1577
+ }, null, 8, ["modelValue", "prefix-icon"])
1578
+ ]),
1579
+ e("div", ha, [
1580
+ c($) ? (n(), B(y, {
1581
+ key: 0,
1582
+ description: "加载中..."
1583
+ })) : c(G).length === 0 ? (n(), B(y, {
1584
+ key: 1,
1585
+ description: "暂无用户"
1586
+ })) : (n(!0), v(se, { key: 2 }, ae(c(G), (o) => (n(), v("div", {
1587
+ key: o.username,
1588
+ class: "add-friend-user-item"
1589
+ }, [
1590
+ e("div", ga, [
1591
+ e("img", {
1592
+ src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${o.username}`,
1593
+ alt: o.username,
1594
+ class: "add-friend-user-avatar"
1595
+ }, null, 8, _a),
1596
+ e("div", ya, _(o.username), 1)
1597
+ ]),
1598
+ p(V, {
1599
+ type: "primary",
1600
+ size: "small",
1601
+ onClick: (te) => c(xe)(o)
1602
+ }, {
1603
+ default: b(() => [...r[22] || (r[22] = [
1604
+ J("添加", -1)
1605
+ ])]),
1606
+ _: 1
1607
+ }, 8, ["onClick"])
1608
+ ]))), 128))
1609
+ ])
1610
+ ]),
1611
+ _: 1
1612
+ }, 8, ["modelValue"]),
1613
+ p(Y, {
1614
+ modelValue: ge.value,
1615
+ "onUpdate:modelValue": r[11] || (r[11] = (o) => ge.value = o),
1616
+ title: "个人设置",
1617
+ width: "560px",
1618
+ "close-on-click-modal": !1,
1619
+ "append-to-body": "",
1620
+ class: "chat-settings-dialog"
1621
+ }, {
1622
+ default: b(() => [
1623
+ e("div", ba, [
1624
+ e("div", ka, [
1625
+ e("div", wa, [
1626
+ e("img", {
1627
+ src: c(N),
1628
+ alt: "头像",
1629
+ class: "chat-settings-avatar"
1630
+ }, null, 8, Ca),
1631
+ w.config.modules.avatarCrop ? (n(), v("div", {
1632
+ key: 0,
1633
+ class: "chat-settings-avatar-edit",
1634
+ onClick: at
1635
+ }, [
1636
+ p(u, {
1637
+ size: 18,
1638
+ class: "chat-settings-avatar-icon"
1639
+ }, {
1640
+ default: b(() => [
1641
+ p(c(zt))
1642
+ ]),
1643
+ _: 1
1644
+ })
1645
+ ])) : U("", !0),
1646
+ e("input", {
1647
+ ref_key: "avatarInputRef",
1648
+ ref: g,
1649
+ type: "file",
1650
+ accept: "image/*",
1651
+ class: "hidden-avatar-input",
1652
+ onChange: rt
1653
+ }, null, 544)
1654
+ ]),
1655
+ e("div", Ua, [
1656
+ e("div", $a, _(c(I).nickname || c(C)), 1),
1657
+ e("div", xa, "@" + _(c(C)), 1)
1658
+ ])
1659
+ ]),
1660
+ e("div", Aa, [
1661
+ e("div", Va, [
1662
+ e("div", Sa, [
1663
+ p(u, null, {
1664
+ default: b(() => [
1665
+ p(c(Ge))
1666
+ ]),
1667
+ _: 1
1668
+ }),
1669
+ r[23] || (r[23] = J(" 个人信息 ", -1))
1670
+ ]),
1671
+ j.value ? U("", !0) : (n(), B(V, {
1672
+ key: 0,
1673
+ type: "primary",
1674
+ size: "small",
1675
+ onClick: dt,
1676
+ class: "chat-settings-edit-btn"
1677
+ }, {
1678
+ default: b(() => [...r[24] || (r[24] = [
1679
+ J(" 编辑 ", -1)
1680
+ ])]),
1681
+ _: 1
1682
+ }))
1683
+ ]),
1684
+ e("div", Fa, [
1685
+ e("div", Ia, [
1686
+ r[25] || (r[25] = e("label", { class: "chat-settings-form-label" }, "昵称", -1)),
1687
+ j.value ? (n(), B(s, {
1688
+ key: 0,
1689
+ modelValue: D.value.nickname,
1690
+ "onUpdate:modelValue": r[7] || (r[7] = (o) => D.value.nickname = o),
1691
+ placeholder: "请输入昵称",
1692
+ size: "large"
1693
+ }, null, 8, ["modelValue"])) : (n(), v("div", za, _(c(I).nickname || "未设置"), 1))
1694
+ ]),
1695
+ e("div", Ra, [
1696
+ r[26] || (r[26] = e("label", { class: "chat-settings-form-label" }, "邮箱", -1)),
1697
+ j.value ? (n(), B(s, {
1698
+ key: 0,
1699
+ modelValue: D.value.email,
1700
+ "onUpdate:modelValue": r[8] || (r[8] = (o) => D.value.email = o),
1701
+ placeholder: "请输入邮箱",
1702
+ size: "large"
1703
+ }, null, 8, ["modelValue"])) : (n(), v("div", La, _(c(I).email || "未设置"), 1))
1704
+ ]),
1705
+ e("div", Ta, [
1706
+ r[27] || (r[27] = e("label", { class: "chat-settings-form-label" }, "手机号", -1)),
1707
+ j.value ? (n(), B(s, {
1708
+ key: 0,
1709
+ modelValue: D.value.phone,
1710
+ "onUpdate:modelValue": r[9] || (r[9] = (o) => D.value.phone = o),
1711
+ placeholder: "请输入手机号",
1712
+ size: "large"
1713
+ }, null, 8, ["modelValue"])) : (n(), v("div", Ma, _(c(I).phone || "未设置"), 1))
1714
+ ]),
1715
+ e("div", Da, [
1716
+ r[28] || (r[28] = e("label", { class: "chat-settings-form-label" }, "个人简介", -1)),
1717
+ j.value ? (n(), B(s, {
1718
+ key: 0,
1719
+ modelValue: D.value.bio,
1720
+ "onUpdate:modelValue": r[10] || (r[10] = (o) => D.value.bio = o),
1721
+ type: "textarea",
1722
+ rows: 4,
1723
+ placeholder: "介绍一下自己吧...",
1724
+ size: "large"
1725
+ }, null, 8, ["modelValue"])) : (n(), v("div", Ea, _(c(I).bio || "这个人很懒,什么都没写~"), 1))
1726
+ ]),
1727
+ j.value ? (n(), v("div", qa, [
1728
+ p(V, {
1729
+ size: "default",
1730
+ onClick: ut
1731
+ }, {
1732
+ default: b(() => [...r[29] || (r[29] = [
1733
+ J("取消", -1)
1734
+ ])]),
1735
+ _: 1
1736
+ }),
1737
+ p(V, {
1738
+ type: "primary",
1739
+ size: "default",
1740
+ loading: X.value,
1741
+ onClick: vt
1742
+ }, {
1743
+ default: b(() => [...r[30] || (r[30] = [
1744
+ J("保存更改", -1)
1745
+ ])]),
1746
+ _: 1
1747
+ }, 8, ["loading"])
1748
+ ])) : U("", !0)
1749
+ ])
1750
+ ])
1751
+ ])
1752
+ ]),
1753
+ _: 1
1754
+ }, 8, ["modelValue"]),
1755
+ p(Tt, {
1756
+ modelValue: l.value,
1757
+ "onUpdate:modelValue": r[12] || (r[12] = (o) => l.value = o),
1758
+ src: A.value,
1759
+ onConfirm: ct
1760
+ }, null, 8, ["modelValue", "src"]),
1761
+ q.value.visible ? (n(), v("div", {
1762
+ key: 1,
1763
+ class: "chat-context-menu",
1764
+ style: Ct({ left: q.value.x + "px", top: q.value.y + "px" })
1765
+ }, [
1766
+ e("div", {
1767
+ class: "chat-context-menu-item",
1768
+ onClick: Ze
1769
+ }, "删除聊天")
1770
+ ], 4)) : U("", !0)
1771
+ ]);
1772
+ };
1773
+ }
1774
+ }, Kl = /* @__PURE__ */ ht(Wa, [["__scopeId", "data-v-f5908195"]]), Ba = { class: "chat-container" }, Ka = { class: "sidebar-nav" }, Pa = ["src"], Na = ["onClick"], Ha = {
852
1775
  key: 0,
853
1776
  class: "nav-badge"
854
- }, Qt = { class: "content-panel" }, Zt = { class: "search-bar" }, es = { class: "content-scroll" }, ts = { key: 0 }, ss = ["onClick", "onContextmenu"], as = { class: "friend-avatar-wrapper" }, ns = ["src", "alt"], ls = {
1777
+ }, Oa = { class: "content-panel" }, ja = { class: "search-bar" }, Xa = { class: "content-scroll" }, Ya = { key: 0 }, Ga = ["onClick", "onContextmenu"], Ja = { class: "friend-avatar-wrapper" }, Qa = ["src", "alt"], Za = {
855
1778
  key: 0,
856
1779
  class: "online-indicator"
857
- }, is = { class: "friend-info" }, os = { class: "friend-header" }, rs = { class: "friend-name" }, cs = { class: "last-time" }, ds = { class: "friend-preview" }, us = { class: "last-msg" }, vs = {
1780
+ }, en = { class: "friend-info" }, tn = { class: "friend-header" }, sn = { class: "friend-name" }, an = { class: "last-time" }, nn = { class: "friend-preview" }, ln = { class: "last-msg" }, on = {
858
1781
  key: 0,
859
1782
  class: "unread-badge"
860
- }, ps = { key: 1 }, fs = { class: "add-friend-section" }, ms = { class: "add-friend-icon" }, hs = ["onClick"], gs = { class: "friend-avatar-wrapper" }, ys = ["src", "alt"], _s = { class: "friend-info" }, bs = { class: "friend-name" }, Cs = { key: 2 }, ks = { class: "request-info" }, ws = ["src", "alt"], Us = { class: "request-details" }, xs = { class: "request-username" }, As = { class: "chat-area" }, Ss = {
1783
+ }, rn = { key: 1 }, cn = { class: "add-friend-section" }, dn = { class: "add-friend-icon" }, un = ["onClick"], vn = { class: "friend-avatar-wrapper" }, pn = ["src", "alt"], mn = { class: "friend-info" }, fn = { class: "friend-name" }, hn = { key: 2 }, gn = { class: "request-info" }, _n = ["src", "alt"], yn = { class: "request-details" }, bn = { class: "request-username" }, kn = { class: "chat-area" }, wn = {
861
1784
  key: 0,
862
1785
  class: "friend-profile"
863
- }, Vs = ["src", "alt"], Fs = { class: "profile-name" }, Rs = { class: "profile-status" }, Is = {
1786
+ }, Cn = ["src", "alt"], Un = { class: "profile-name" }, $n = { class: "profile-status" }, xn = {
864
1787
  key: 1,
865
1788
  class: "chat-window"
866
- }, Ls = { class: "chat-header" }, Ts = { class: "chat-title" }, zs = { class: "chat-name" }, Ds = { class: "chat-actions" }, Ms = { class: "message-avatar" }, $s = ["src"], Es = {
1789
+ }, An = { class: "chat-header" }, Vn = { class: "chat-title" }, Sn = { class: "chat-name" }, Fn = { class: "chat-actions" }, In = { class: "message-avatar" }, zn = ["src"], Rn = {
867
1790
  key: 0,
868
1791
  class: "sender-name"
869
- }, Ks = { class: "message-bubble-wrapper" }, Ws = ["onClick"], Bs = ["src", "alt"], Ns = {
1792
+ }, Ln = { class: "message-bubble-wrapper" }, Tn = ["onClick"], Mn = ["src", "alt"], Dn = {
870
1793
  key: 0,
871
1794
  class: "image-size"
872
- }, Hs = ["onClick"], qs = { class: "file-content" }, Ps = { class: "file-icon" }, Os = { class: "file-info" }, js = { class: "file-name" }, Xs = { class: "file-meta" }, Ys = { key: 0 }, Gs = { class: "input-area" }, Js = {
1795
+ }, En = ["onClick"], qn = { class: "file-content" }, Wn = { class: "file-icon" }, Bn = { class: "file-info" }, Kn = { class: "file-name" }, Pn = { class: "file-meta" }, Nn = { key: 0 }, Hn = { class: "input-area" }, On = {
873
1796
  key: 0,
874
1797
  class: "pending-files"
875
- }, Qs = {
1798
+ }, jn = {
876
1799
  key: 0,
877
1800
  class: "pending-image-wrapper"
878
- }, Zs = ["src", "alt"], ea = ["onClick"], ta = {
1801
+ }, Xn = ["src", "alt"], Yn = ["onClick"], Gn = {
879
1802
  key: 1,
880
1803
  class: "pending-file-wrapper"
881
- }, sa = { class: "pending-file-name" }, aa = ["onClick"], na = {
1804
+ }, Jn = { class: "pending-file-name" }, Qn = ["onClick"], Zn = {
882
1805
  key: 1,
883
1806
  class: "input-actions"
884
- }, la = { class: "input-wrapper" }, ia = ["onKeydown"], oa = { class: "send-btn-wrapper" }, ra = {
1807
+ }, el = { class: "input-wrapper" }, tl = ["onKeydown"], sl = { class: "send-btn-wrapper" }, al = {
885
1808
  key: 2,
886
1809
  class: "empty-state"
887
- }, ca = { class: "empty-text" }, da = {
1810
+ }, nl = { class: "empty-text" }, ll = {
888
1811
  key: 0,
889
1812
  class: "detail-panel"
890
- }, ua = { class: "detail-content" }, va = { class: "detail-profile" }, pa = ["src", "alt"], fa = { class: "detail-name" }, ma = { class: "search-users-wrapper" }, ha = { class: "search-users-input" }, ga = { class: "users-list-scroll" }, ya = { class: "available-user-info" }, _a = ["src", "alt"], ba = { class: "available-user-name" }, Ca = { class: "settings-container" }, ka = { class: "settings-avatar-section" }, wa = { class: "settings-avatar-wrapper" }, Ua = ["src"], xa = { class: "settings-user-display" }, Aa = { class: "settings-nickname" }, Sa = { class: "settings-username" }, Va = { class: "settings-form-section" }, Fa = { class: "settings-form-header" }, Ra = { class: "settings-form-title" }, Ia = { class: "settings-form" }, La = { class: "settings-form-item" }, Ta = {
1813
+ }, il = { class: "detail-content" }, ol = { class: "detail-profile" }, rl = ["src", "alt"], cl = { class: "detail-name" }, dl = { class: "search-users-wrapper" }, ul = { class: "search-users-input" }, vl = { class: "users-list-scroll" }, pl = { class: "available-user-info" }, ml = ["src", "alt"], fl = { class: "available-user-name" }, hl = { class: "settings-container" }, gl = { class: "settings-avatar-section" }, _l = { class: "settings-avatar-wrapper" }, yl = ["src"], bl = { class: "settings-user-display" }, kl = { class: "settings-nickname" }, wl = { class: "settings-username" }, Cl = { class: "settings-form-section" }, Ul = { class: "settings-form-header" }, $l = { class: "settings-form-title" }, xl = { class: "settings-form" }, Al = { class: "settings-form-item" }, Vl = {
891
1814
  key: 1,
892
1815
  class: "settings-form-value"
893
- }, za = { class: "settings-form-item" }, Da = {
1816
+ }, Sl = { class: "settings-form-item" }, Fl = {
894
1817
  key: 1,
895
1818
  class: "settings-form-value"
896
- }, Ma = { class: "settings-form-item" }, $a = {
1819
+ }, Il = { class: "settings-form-item" }, zl = {
897
1820
  key: 1,
898
1821
  class: "settings-form-value"
899
- }, Ea = { class: "settings-form-item" }, Ka = {
1822
+ }, Rl = { class: "settings-form-item" }, Ll = {
900
1823
  key: 1,
901
1824
  class: "settings-form-value bio-value"
902
- }, Wa = {
1825
+ }, Tl = {
903
1826
  key: 0,
904
1827
  class: "settings-form-actions"
905
- }, Ba = {
1828
+ }, Ml = {
906
1829
  __name: "ChatWindow",
907
1830
  props: {
908
1831
  modelValue: { type: Boolean, default: !1 },
@@ -910,701 +1833,701 @@ const et = (y, e) => {
910
1833
  width: { type: [String, Number], default: "1100px" }
911
1834
  },
912
1835
  emits: ["update:modelValue", "open", "close", "message", "send", "error"],
913
- setup(y, { emit: e }) {
914
- const s = y, o = e, F = re({
915
- get: () => s.modelValue,
916
- set: (d) => o("update:modelValue", d)
1836
+ setup(w, { emit: t }) {
1837
+ const a = w, m = t, C = ye({
1838
+ get: () => a.modelValue,
1839
+ set: (u) => m("update:modelValue", u)
917
1840
  }), {
918
- myUsername: T,
919
- myAvatar: z,
920
- userInfo: w,
921
- loadingUserInfo: U,
922
- friendList: V,
923
- filteredFriendList: m,
924
- searchText: _,
925
- inputText: C,
926
- messagesContainer: R,
927
- filteredUsers: N,
928
- filteredAvailableUsers: G,
929
- currentUser: J,
1841
+ myUsername: N,
1842
+ myAvatar: I,
1843
+ userInfo: T,
1844
+ loadingUserInfo: L,
1845
+ friendList: H,
1846
+ filteredFriendList: x,
1847
+ searchText: k,
1848
+ inputText: S,
1849
+ messagesContainer: z,
1850
+ filteredUsers: G,
1851
+ filteredAvailableUsers: fe,
1852
+ currentUser: oe,
930
1853
  currentMessages: Q,
931
- addFriendDialogVisible: le,
932
- addFriendSearchText: te,
933
- availableUsers: g,
934
- loadingAvailableUsers: x,
935
- friendApplyList: A,
936
- loadingFriendApply: E,
937
- formatTime: ie,
938
- formatLastTime: P,
939
- scrollToBottom: he,
940
- getFriendList: ge,
941
- getChatHistory: ye,
942
- setFriendToChatStatus: O,
943
- selectUser: K,
944
- sendMessage: oe,
945
- sendFile: He,
946
- sendFilesAndText: xe,
947
- initWebSocket: Ae,
948
- closeWebSocket: _e,
949
- reset: be,
950
- openAddFriendDialog: Ce,
951
- addFriend: Se,
952
- loadFriendApplyList: Ve,
953
- agreeFriend: Fe,
954
- updateMyAvatar: Re,
955
- getUserInfo: Ie,
956
- updateUserInfo: Le
957
- } = Et(s.config), Te = re(() => {
958
- var l;
959
- const d = [{ id: "chat", icon: Ee, badge: 0 }];
960
- return s.config.modules.friends && d.push({ id: "friends", icon: Qe, badge: 0 }), s.config.modules.apply && d.push({ id: "apply", icon: At, badge: ((l = A.value) == null ? void 0 : l.length) || 0 }), d;
961
- }), Z = f("chat"), de = f(null), D = f(null), M = f(null), ue = f(!1), H = f(!1), W = f({ nickname: "", email: "", phone: "", bio: "" }), a = f(!1), i = f(!1), c = f(!1), S = f(!1), se = f(null), ee = f(""), ve = f(null), B = f([]), pe = f({ visible: !1, x: 0, y: 0, chat: null }), ze = () => {
1854
+ addFriendDialogVisible: ne,
1855
+ addFriendSearchText: _e,
1856
+ availableUsers: $,
1857
+ loadingAvailableUsers: R,
1858
+ friendApplyList: M,
1859
+ loadingFriendApply: Z,
1860
+ formatTime: he,
1861
+ formatLastTime: re,
1862
+ scrollToBottom: be,
1863
+ getFriendList: Ue,
1864
+ getChatHistory: $e,
1865
+ setFriendToChatStatus: ke,
1866
+ selectUser: ce,
1867
+ sendMessage: de,
1868
+ sendFile: we,
1869
+ sendFilesAndText: Te,
1870
+ initWebSocket: Me,
1871
+ closeWebSocket: Fe,
1872
+ reset: Ie,
1873
+ openAddFriendDialog: xe,
1874
+ addFriend: De,
1875
+ loadFriendApplyList: Ee,
1876
+ agreeFriend: qe,
1877
+ updateMyAvatar: We,
1878
+ getUserInfo: Be,
1879
+ updateUserInfo: Ke
1880
+ } = Lt(a.config), ve = ye(() => {
1881
+ var s;
1882
+ const u = [{ id: "chat", icon: Re, badge: 0 }];
1883
+ return a.config.modules.friends && u.push({ id: "friends", icon: Ge, badge: 0 }), a.config.modules.apply && u.push({ id: "apply", icon: Ut, badge: ((s = M.value) == null ? void 0 : s.length) || 0 }), u;
1884
+ }), ee = h("chat"), W = h(null), F = h(null), O = h(null), j = h(!1), D = h(!1), X = h({ nickname: "", email: "", phone: "", bio: "" }), ge = h(!1), l = h(!1), d = h(!1), g = h(!1), A = h(null), le = h(""), E = h(null), q = h([]), pe = h({ visible: !1, x: 0, y: 0, chat: null }), Ae = () => {
962
1885
  pe.value.visible = !1;
963
- }, st = async () => {
1886
+ }, Ze = async () => {
964
1887
  if (!pe.value.chat) return;
965
- await O(pe.value.chat.id, 0) && de.value === pe.value.chat.id && (de.value = null, D.value = null), ze();
966
- }, De = (d) => {
967
- de.value = d.id, D.value = d, M.value = null, ue.value = !1, K({
968
- id: d.id,
969
- name: d.name,
970
- avatar: d.avatar,
971
- online: d.online
1888
+ await ke(pe.value.chat.id, 0) && W.value === pe.value.chat.id && (W.value = null, F.value = null), Ae();
1889
+ }, Ve = (u) => {
1890
+ W.value = u.id, F.value = u, O.value = null, j.value = !1, ce({
1891
+ id: u.id,
1892
+ name: u.name,
1893
+ avatar: u.avatar,
1894
+ online: u.online
972
1895
  });
973
- }, at = (d) => {
974
- M.value = d, de.value = null, D.value = null;
975
- }, nt = async () => {
976
- if (!M.value) return;
977
- if (await O(M.value.id)) {
978
- Z.value = "chat", await Ne();
979
- const l = N.value.find((h) => h.id === M.value.id);
980
- l && De(l), M.value = null;
1896
+ }, et = (u) => {
1897
+ O.value = u, W.value = null, F.value = null;
1898
+ }, tt = async () => {
1899
+ if (!O.value) return;
1900
+ if (await ke(O.value.id)) {
1901
+ ee.value = "chat", await Qe();
1902
+ const s = G.value.find((y) => y.id === O.value.id);
1903
+ s && Ve(s), O.value = null;
981
1904
  }
982
- }, lt = () => {
983
- i.value = !0;
984
- }, it = () => {
985
- var d;
986
- (d = se.value) == null || d.click();
987
- }, ot = () => {
988
- var d;
989
- (d = ve.value) == null || d.click();
990
- }, rt = (d) => {
991
- const l = Array.from(d.target.files || []);
992
- if (l.length !== 0) {
993
- for (const h of l) {
994
- if (h.size > 50 * 1024 * 1024) {
995
- Y.warning(`文件 ${h.name} 超过50MB,已跳过`);
1905
+ }, st = () => {
1906
+ l.value = !0;
1907
+ }, at = () => {
1908
+ var u;
1909
+ (u = A.value) == null || u.click();
1910
+ }, nt = () => {
1911
+ var u;
1912
+ (u = E.value) == null || u.click();
1913
+ }, lt = (u) => {
1914
+ const s = Array.from(u.target.files || []);
1915
+ if (s.length !== 0) {
1916
+ for (const y of s) {
1917
+ if (y.size > 50 * 1024 * 1024) {
1918
+ P.warning(`文件 ${y.name} 超过50MB,已跳过`);
996
1919
  continue;
997
1920
  }
998
- const L = URL.createObjectURL(h);
999
- B.value.push({
1921
+ const V = URL.createObjectURL(y);
1922
+ q.value.push({
1000
1923
  id: Date.now() + Math.random(),
1001
- file: h,
1002
- name: h.name,
1003
- size: h.size,
1004
- type: h.type,
1005
- previewUrl: L,
1006
- isImage: h.type.startsWith("image/")
1924
+ file: y,
1925
+ name: y.name,
1926
+ size: y.size,
1927
+ type: y.type,
1928
+ previewUrl: V,
1929
+ isImage: y.type.startsWith("image/")
1007
1930
  });
1008
1931
  }
1009
- ve.value && (ve.value.value = "");
1932
+ E.value && (E.value.value = "");
1010
1933
  }
1011
- }, qe = (d) => {
1012
- const l = B.value[d];
1013
- l.previewUrl && URL.revokeObjectURL(l.previewUrl), B.value.splice(d, 1);
1014
- }, Pe = (d) => {
1015
- if (d === 0) return "0 B";
1016
- const l = 1024, h = ["B", "KB", "MB", "GB"], L = Math.floor(Math.log(d) / Math.log(l));
1017
- return parseFloat((d / Math.pow(l, L)).toFixed(2)) + " " + h[L];
1018
- }, Oe = async () => {
1019
- if (!C.value.trim() && B.value.length === 0) return;
1020
- const d = [...B.value], l = C.value;
1021
- C.value = "", B.value.forEach((h) => {
1022
- h.previewUrl && URL.revokeObjectURL(h.previewUrl);
1023
- }), B.value = [], await xe(d, l), o("send", { text: l, files: d });
1024
- }, ct = (d) => {
1025
- var h;
1026
- const l = (h = d.clipboardData) == null ? void 0 : h.items;
1027
- if (l) {
1028
- for (const L of l)
1029
- if (L.kind === "file") {
1030
- const $ = L.getAsFile();
1031
- if ($) {
1032
- if ($.size > 50 * 1024 * 1024) {
1033
- Y.warning(`文件 ${$.name} 超过50MB,已跳过`);
1934
+ }, Pe = (u) => {
1935
+ const s = q.value[u];
1936
+ s.previewUrl && URL.revokeObjectURL(s.previewUrl), q.value.splice(u, 1);
1937
+ }, Ne = (u) => {
1938
+ if (u === 0) return "0 B";
1939
+ const s = 1024, y = ["B", "KB", "MB", "GB"], V = Math.floor(Math.log(u) / Math.log(s));
1940
+ return parseFloat((u / Math.pow(s, V)).toFixed(2)) + " " + y[V];
1941
+ }, He = async () => {
1942
+ if (!S.value.trim() && q.value.length === 0) return;
1943
+ const u = [...q.value], s = S.value;
1944
+ S.value = "", q.value.forEach((y) => {
1945
+ y.previewUrl && URL.revokeObjectURL(y.previewUrl);
1946
+ }), q.value = [], await Te(u, s), m("send", { text: s, files: u });
1947
+ }, it = (u) => {
1948
+ var y;
1949
+ const s = (y = u.clipboardData) == null ? void 0 : y.items;
1950
+ if (s) {
1951
+ for (const V of s)
1952
+ if (V.kind === "file") {
1953
+ const Y = V.getAsFile();
1954
+ if (Y) {
1955
+ if (Y.size > 50 * 1024 * 1024) {
1956
+ P.warning(`文件 ${Y.name} 超过50MB,已跳过`);
1034
1957
  continue;
1035
1958
  }
1036
- const ae = URL.createObjectURL($);
1037
- B.value.push({
1959
+ const ue = URL.createObjectURL(Y);
1960
+ q.value.push({
1038
1961
  id: Date.now() + Math.random(),
1039
- file: $,
1040
- name: $.name,
1041
- size: $.size,
1042
- type: $.type,
1043
- previewUrl: ae,
1044
- isImage: $.type.startsWith("image/")
1962
+ file: Y,
1963
+ name: Y.name,
1964
+ size: Y.size,
1965
+ type: Y.type,
1966
+ previewUrl: ue,
1967
+ isImage: Y.type.startsWith("image/")
1045
1968
  });
1046
1969
  }
1047
1970
  }
1048
1971
  }
1049
- }, je = (d) => {
1050
- if (!d) {
1051
- Y.warning("文件地址无效");
1972
+ }, Oe = (u) => {
1973
+ if (!u) {
1974
+ P.warning("文件地址无效");
1052
1975
  return;
1053
1976
  }
1054
- window.open(d, "_blank");
1055
- }, dt = (d) => {
1056
- console.warn("图片加载失败", d);
1057
- }, ut = (d) => {
1058
- const l = d.target.files[0];
1059
- if (!l) return;
1060
- if (!l.type.startsWith("image/")) {
1061
- Y.error("只能上传图片文件");
1977
+ window.open(u, "_blank");
1978
+ }, ot = (u) => {
1979
+ console.warn("图片加载失败", u);
1980
+ }, rt = (u) => {
1981
+ const s = u.target.files[0];
1982
+ if (!s) return;
1983
+ if (!s.type.startsWith("image/")) {
1984
+ P.error("只能上传图片文件");
1062
1985
  return;
1063
1986
  }
1064
- if (l.size > 5 * 1024 * 1024) {
1065
- Y.error("图片大小不能超过 5MB");
1987
+ if (s.size > 5 * 1024 * 1024) {
1988
+ P.error("图片大小不能超过 5MB");
1066
1989
  return;
1067
1990
  }
1068
- const h = new FileReader();
1069
- h.onload = (L) => {
1070
- ee.value = L.target.result, c.value = !0;
1071
- }, h.readAsDataURL(l);
1072
- }, vt = async ({ file: d }) => {
1073
- if (d) {
1074
- S.value = !0;
1991
+ const y = new FileReader();
1992
+ y.onload = (V) => {
1993
+ le.value = V.target.result, d.value = !0;
1994
+ }, y.readAsDataURL(s);
1995
+ }, ct = async ({ file: u }) => {
1996
+ if (u) {
1997
+ g.value = !0;
1075
1998
  try {
1076
- const { ChatApi: l } = await Promise.resolve().then(() => $t), L = await new l(s.config).uploadAvatar(d, T);
1077
- L.code === 200 ? (Y.success("头像上传成功"), Re(L.data), Xe()) : Y.error(L.msg || "头像上传失败");
1078
- } catch (l) {
1079
- console.error(l), Y.error("头像上传失败");
1999
+ const { ChatApi: s } = await Promise.resolve().then(() => Rt), V = await new s(a.config).uploadAvatar(u, N);
2000
+ V.code === 200 ? (P.success("头像上传成功"), We(V.data), je()) : P.error(V.msg || "头像上传失败");
2001
+ } catch (s) {
2002
+ console.error(s), P.error("头像上传失败");
1080
2003
  } finally {
1081
- S.value = !1;
2004
+ g.value = !1;
1082
2005
  }
1083
2006
  }
1084
- }, Xe = () => {
1085
- ee.value = "", c.value = !1, se.value && (se.value.value = "");
1086
- }, pt = () => {
1087
- W.value = {
1088
- nickname: w.value.nickname || "",
1089
- email: w.value.email || "",
1090
- phone: w.value.phone || "",
1091
- bio: w.value.bio || ""
1092
- }, H.value = !0;
1093
- }, ft = () => {
1094
- H.value = !1, W.value = { nickname: "", email: "", phone: "", bio: "" };
1095
- }, mt = async () => {
1096
- a.value = !0;
2007
+ }, je = () => {
2008
+ le.value = "", d.value = !1, A.value && (A.value.value = "");
2009
+ }, dt = () => {
2010
+ X.value = {
2011
+ nickname: T.value.nickname || "",
2012
+ email: T.value.email || "",
2013
+ phone: T.value.phone || "",
2014
+ bio: T.value.bio || ""
2015
+ }, D.value = !0;
2016
+ }, ut = () => {
2017
+ D.value = !1, X.value = { nickname: "", email: "", phone: "", bio: "" };
2018
+ }, vt = async () => {
2019
+ ge.value = !0;
1097
2020
  try {
1098
- await Le(W.value) ? (Y.success("保存成功"), H.value = !1) : Y.error("保存失败");
1099
- } catch (d) {
1100
- console.error(d), Y.error("保存失败");
2021
+ await Ke(X.value) ? (P.success("保存成功"), D.value = !1) : P.error("保存失败");
2022
+ } catch (u) {
2023
+ console.error(u), P.error("保存失败");
1101
2024
  } finally {
1102
- a.value = !1;
2025
+ ge.value = !1;
1103
2026
  }
1104
- }, ht = () => {
1105
- be(), _e(), ue.value = !1, i.value = !1, Xe(), H.value = !1, o("close");
1106
- }, gt = async () => {
1107
- await Promise.all([ge(), Ve(), Ie()]), Ae(), N.value.length > 0 && De(N.value[0]), o("open");
2027
+ }, f = () => {
2028
+ Ie(), Fe(), j.value = !1, l.value = !1, je(), D.value = !1, m("close");
2029
+ }, r = async () => {
2030
+ await Promise.all([Ue(), Ee(), Be()]), Me(), G.value.length > 0 && Ve(G.value[0]), m("open");
1108
2031
  };
1109
- return _t(() => {
1110
- document.addEventListener("click", ze);
1111
- }), bt(() => {
1112
- document.removeEventListener("click", ze), _e();
1113
- }), (d, l) => {
1114
- const h = ce("el-icon"), L = ce("el-input"), $ = ce("el-empty"), ae = ce("el-button"), Me = ce("el-dialog");
1115
- return r(), q(Me, {
1116
- modelValue: F.value,
1117
- "onUpdate:modelValue": l[13] || (l[13] = (ke) => F.value = ke),
1118
- width: y.width,
2032
+ return gt(() => {
2033
+ document.addEventListener("click", Ae);
2034
+ }), _t(() => {
2035
+ document.removeEventListener("click", Ae), Fe();
2036
+ }), (u, s) => {
2037
+ const y = ie("el-icon"), V = ie("el-input"), Y = ie("el-empty"), ue = ie("el-button"), ze = ie("el-dialog");
2038
+ return n(), B(ze, {
2039
+ modelValue: C.value,
2040
+ "onUpdate:modelValue": s[13] || (s[13] = (Se) => C.value = Se),
2041
+ width: w.width,
1119
2042
  "close-on-click-modal": !1,
1120
2043
  class: "chat-dialog",
1121
2044
  "append-to-body": "",
1122
- onClosed: ht,
1123
- onOpen: gt
2045
+ onClosed: f,
2046
+ onOpen: r
1124
2047
  }, {
1125
2048
  default: b(() => {
1126
- var ke, Ye, Ge;
2049
+ var Se, o, te;
1127
2050
  return [
1128
- t("div", jt, [
1129
- t("div", Xt, [
1130
- t("div", {
2051
+ e("div", Ba, [
2052
+ e("div", Ka, [
2053
+ e("div", {
1131
2054
  class: "sidebar-avatar",
1132
- onClick: lt
2055
+ onClick: st
1133
2056
  }, [
1134
- t("img", {
1135
- src: u(z),
2057
+ e("img", {
2058
+ src: c(I),
1136
2059
  alt: "头像",
1137
2060
  class: "avatar-img"
1138
- }, null, 8, Yt)
2061
+ }, null, 8, Pa)
1139
2062
  ]),
1140
- (r(!0), v(fe, null, me(Te.value, (n) => (r(), v("div", {
1141
- key: n.id,
1142
- class: X([
2063
+ (n(!0), v(se, null, ae(ve.value, (i) => (n(), v("div", {
2064
+ key: i.id,
2065
+ class: K([
1143
2066
  "nav-item",
1144
- Z.value === n.id ? "nav-item-active" : "nav-item-inactive"
2067
+ ee.value === i.id ? "nav-item-active" : "nav-item-inactive"
1145
2068
  ]),
1146
- onClick: (j) => Z.value = n.id
2069
+ onClick: (me) => ee.value = i.id
1147
2070
  }, [
1148
- p(h, { size: 24 }, {
2071
+ p(y, { size: 24 }, {
1149
2072
  default: b(() => [
1150
- (r(), q(Ct(n.icon)))
2073
+ (n(), B(yt(i.icon)))
1151
2074
  ]),
1152
2075
  _: 2
1153
2076
  }, 1024),
1154
- n.badge ? (r(), v("span", Jt, k(n.badge > 99 ? "99+" : n.badge), 1)) : I("", !0)
1155
- ], 10, Gt))), 128)),
1156
- l[14] || (l[14] = t("div", { class: "nav-spacer" }, null, -1)),
1157
- y.config.modules.settings ? (r(), v("div", {
2077
+ i.badge ? (n(), v("span", Ha, _(i.badge > 99 ? "99+" : i.badge), 1)) : U("", !0)
2078
+ ], 10, Na))), 128)),
2079
+ s[14] || (s[14] = e("div", { class: "nav-spacer" }, null, -1)),
2080
+ w.config.modules.settings ? (n(), v("div", {
1158
2081
  key: 0,
1159
2082
  class: "nav-item nav-item-inactive",
1160
- onClick: l[0] || (l[0] = (n) => i.value = !0),
2083
+ onClick: s[0] || (s[0] = (i) => l.value = !0),
1161
2084
  title: "设置"
1162
2085
  }, [
1163
- p(h, { size: 24 }, {
2086
+ p(y, { size: 24 }, {
1164
2087
  default: b(() => [
1165
- p(u(St))
2088
+ p(c($t))
1166
2089
  ]),
1167
2090
  _: 1
1168
2091
  })
1169
- ])) : I("", !0)
2092
+ ])) : U("", !0)
1170
2093
  ]),
1171
- t("div", Qt, [
1172
- t("div", Zt, [
1173
- p(L, {
1174
- modelValue: u(_),
1175
- "onUpdate:modelValue": l[1] || (l[1] = (n) => we(_) ? _.value = n : null),
2094
+ e("div", Oa, [
2095
+ e("div", ja, [
2096
+ p(V, {
2097
+ modelValue: c(k),
2098
+ "onUpdate:modelValue": s[1] || (s[1] = (i) => Ce(k) ? k.value = i : null),
1176
2099
  placeholder: "搜索",
1177
- "prefix-icon": u(Ke)
2100
+ "prefix-icon": c(Le)
1178
2101
  }, null, 8, ["modelValue", "prefix-icon"])
1179
2102
  ]),
1180
- t("div", es, [
1181
- Z.value === "chat" ? (r(), v("div", ts, [
1182
- (r(!0), v(fe, null, me(u(N), (n) => (r(), v("div", {
1183
- key: n.id,
1184
- class: X([
2103
+ e("div", Xa, [
2104
+ ee.value === "chat" ? (n(), v("div", Ya, [
2105
+ (n(!0), v(se, null, ae(c(G), (i) => (n(), v("div", {
2106
+ key: i.id,
2107
+ class: K([
1185
2108
  "chat-item",
1186
- de.value === n.id ? "chat-item-active" : ""
2109
+ W.value === i.id ? "chat-item-active" : ""
1187
2110
  ]),
1188
- onClick: (j) => De(n),
1189
- onContextmenu: Je((j) => d.showContextMenu(j, n), ["prevent", "stop"])
2111
+ onClick: (me) => Ve(i),
2112
+ onContextmenu: Ye((me) => u.showContextMenu(me, i), ["prevent", "stop"])
1190
2113
  }, [
1191
- t("div", as, [
1192
- t("img", {
1193
- src: n.avatar,
1194
- alt: n.name,
2114
+ e("div", Ja, [
2115
+ e("img", {
2116
+ src: i.avatar,
2117
+ alt: i.name,
1195
2118
  class: "friend-avatar"
1196
- }, null, 8, ns),
1197
- n.online ? (r(), v("span", ls)) : I("", !0)
2119
+ }, null, 8, Qa),
2120
+ i.online ? (n(), v("span", Za)) : U("", !0)
1198
2121
  ]),
1199
- t("div", is, [
1200
- t("div", os, [
1201
- t("span", rs, k(n.name), 1),
1202
- t("span", cs, k(u(P)(n.lastTime)), 1)
2122
+ e("div", en, [
2123
+ e("div", tn, [
2124
+ e("span", sn, _(i.name), 1),
2125
+ e("span", an, _(c(re)(i.lastTime)), 1)
1203
2126
  ]),
1204
- t("div", ds, [
1205
- t("span", us, k(n.lastMsg), 1),
1206
- n.unread > 0 ? (r(), v("span", vs, k(n.unread > 99 ? "99+" : n.unread), 1)) : I("", !0)
2127
+ e("div", nn, [
2128
+ e("span", ln, _(i.lastMsg), 1),
2129
+ i.unread > 0 ? (n(), v("span", on, _(i.unread > 99 ? "99+" : i.unread), 1)) : U("", !0)
1207
2130
  ])
1208
2131
  ])
1209
- ], 42, ss))), 128))
1210
- ])) : I("", !0),
1211
- Z.value === "friends" && y.config.modules.friends ? (r(), v("div", ps, [
1212
- t("div", fs, [
1213
- t("div", {
2132
+ ], 42, Ga))), 128))
2133
+ ])) : U("", !0),
2134
+ ee.value === "friends" && w.config.modules.friends ? (n(), v("div", rn, [
2135
+ e("div", cn, [
2136
+ e("div", {
1214
2137
  class: "add-friend-btn",
1215
- onClick: l[2] || (l[2] = (...n) => u(Ce) && u(Ce)(...n))
2138
+ onClick: s[2] || (s[2] = (...i) => c(xe) && c(xe)(...i))
1216
2139
  }, [
1217
- t("div", ms, [
1218
- p(h, {
2140
+ e("div", dn, [
2141
+ p(y, {
1219
2142
  class: "text-white",
1220
2143
  size: 20
1221
2144
  }, {
1222
2145
  default: b(() => [
1223
- p(u(Vt))
2146
+ p(c(xt))
1224
2147
  ]),
1225
2148
  _: 1
1226
2149
  })
1227
2150
  ]),
1228
- l[15] || (l[15] = t("span", { class: "add-friend-text" }, "添加好友", -1))
2151
+ s[15] || (s[15] = e("span", { class: "add-friend-text" }, "添加好友", -1))
1229
2152
  ])
1230
2153
  ]),
1231
- (r(!0), v(fe, null, me(u(m), (n) => (r(), v("div", {
1232
- key: n.id,
2154
+ (n(!0), v(se, null, ae(c(x), (i) => (n(), v("div", {
2155
+ key: i.id,
1233
2156
  class: "chat-item",
1234
- onClick: (j) => at(n)
2157
+ onClick: (me) => et(i)
1235
2158
  }, [
1236
- t("div", gs, [
1237
- t("img", {
1238
- src: n.avatar,
1239
- alt: n.name,
2159
+ e("div", vn, [
2160
+ e("img", {
2161
+ src: i.avatar,
2162
+ alt: i.name,
1240
2163
  class: "friend-avatar"
1241
- }, null, 8, ys),
1242
- t("span", {
1243
- class: X([
2164
+ }, null, 8, pn),
2165
+ e("span", {
2166
+ class: K([
1244
2167
  "online-indicator",
1245
- n.online ? "online" : "offline"
2168
+ i.online ? "online" : "offline"
1246
2169
  ])
1247
2170
  }, null, 2)
1248
2171
  ]),
1249
- t("div", _s, [
1250
- t("span", bs, k(n.name), 1)
2172
+ e("div", mn, [
2173
+ e("span", fn, _(i.name), 1)
1251
2174
  ])
1252
- ], 8, hs))), 128))
1253
- ])) : I("", !0),
1254
- Z.value === "apply" && y.config.modules.apply ? (r(), v("div", Cs, [
1255
- u(E) ? (r(), q($, {
2175
+ ], 8, un))), 128))
2176
+ ])) : U("", !0),
2177
+ ee.value === "apply" && w.config.modules.apply ? (n(), v("div", hn, [
2178
+ c(Z) ? (n(), B(Y, {
1256
2179
  key: 0,
1257
2180
  description: "加载中..."
1258
- })) : u(A).length === 0 ? (r(), q($, {
2181
+ })) : c(M).length === 0 ? (n(), B(Y, {
1259
2182
  key: 1,
1260
2183
  description: "暂无好友申请"
1261
- })) : (r(!0), v(fe, { key: 2 }, me(u(A), (n) => (r(), v("div", {
1262
- key: n.applyUser || n.id,
2184
+ })) : (n(!0), v(se, { key: 2 }, ae(c(M), (i) => (n(), v("div", {
2185
+ key: i.applyUser || i.id,
1263
2186
  class: "friend-request-item"
1264
2187
  }, [
1265
- t("div", ks, [
1266
- t("img", {
1267
- src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${n.applyUser}`,
1268
- alt: n.applyUser,
2188
+ e("div", gn, [
2189
+ e("img", {
2190
+ src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${i.applyUser}`,
2191
+ alt: i.applyUser,
1269
2192
  class: "request-avatar"
1270
- }, null, 8, ws),
1271
- t("div", Us, [
1272
- t("div", xs, k(n.applyUser), 1),
1273
- l[16] || (l[16] = t("div", { class: "request-desc" }, "请求添加你为好友", -1))
2193
+ }, null, 8, _n),
2194
+ e("div", yn, [
2195
+ e("div", bn, _(i.applyUser), 1),
2196
+ s[16] || (s[16] = e("div", { class: "request-desc" }, "请求添加你为好友", -1))
1274
2197
  ])
1275
2198
  ]),
1276
- p(ae, {
2199
+ p(ue, {
1277
2200
  type: "primary",
1278
2201
  size: "small",
1279
- onClick: (j) => u(Fe)(n.applyUser)
2202
+ onClick: (me) => c(qe)(i.applyUser)
1280
2203
  }, {
1281
- default: b(() => [...l[17] || (l[17] = [
1282
- ne("同意", -1)
2204
+ default: b(() => [...s[17] || (s[17] = [
2205
+ J("同意", -1)
1283
2206
  ])]),
1284
2207
  _: 1
1285
2208
  }, 8, ["onClick"])
1286
2209
  ]))), 128))
1287
- ])) : I("", !0)
2210
+ ])) : U("", !0)
1288
2211
  ])
1289
2212
  ]),
1290
- t("div", As, [
1291
- M.value && !D.value ? (r(), v("div", Ss, [
1292
- t("img", {
1293
- src: M.value.avatar,
1294
- alt: M.value.name,
2213
+ e("div", kn, [
2214
+ O.value && !F.value ? (n(), v("div", wn, [
2215
+ e("img", {
2216
+ src: O.value.avatar,
2217
+ alt: O.value.name,
1295
2218
  class: "profile-avatar"
1296
- }, null, 8, Vs),
1297
- t("div", Fs, k(M.value.name), 1),
1298
- t("div", Rs, [
1299
- t("span", {
1300
- class: X([
2219
+ }, null, 8, Cn),
2220
+ e("div", Un, _(O.value.name), 1),
2221
+ e("div", $n, [
2222
+ e("span", {
2223
+ class: K([
1301
2224
  "status-dot",
1302
- M.value.online ? "status-online" : "status-offline"
2225
+ O.value.online ? "status-online" : "status-offline"
1303
2226
  ])
1304
2227
  }, null, 2),
1305
- t("span", null, k(M.value.online ? "在线" : "离线"), 1)
2228
+ e("span", null, _(O.value.online ? "在线" : "离线"), 1)
1306
2229
  ]),
1307
- p(ae, {
2230
+ p(ue, {
1308
2231
  type: "primary",
1309
2232
  size: "large",
1310
- onClick: nt,
2233
+ onClick: tt,
1311
2234
  class: "start-chat-btn"
1312
2235
  }, {
1313
2236
  default: b(() => [
1314
- p(h, null, {
2237
+ p(y, null, {
1315
2238
  default: b(() => [
1316
- p(u(Ee))
2239
+ p(c(Re))
1317
2240
  ]),
1318
2241
  _: 1
1319
2242
  }),
1320
- l[18] || (l[18] = t("span", null, "发消息", -1))
2243
+ s[18] || (s[18] = e("span", null, "发消息", -1))
1321
2244
  ]),
1322
2245
  _: 1
1323
2246
  })
1324
- ])) : I("", !0),
1325
- D.value ? (r(), v("div", Is, [
1326
- t("div", Ls, [
1327
- t("div", Ts, [
1328
- t("span", zs, k(D.value.name), 1),
1329
- t("span", {
1330
- class: X([
2247
+ ])) : U("", !0),
2248
+ F.value ? (n(), v("div", xn, [
2249
+ e("div", An, [
2250
+ e("div", Vn, [
2251
+ e("span", Sn, _(F.value.name), 1),
2252
+ e("span", {
2253
+ class: K([
1331
2254
  "status-badge",
1332
- D.value.online ? "status-badge-online" : "status-badge-offline"
2255
+ F.value.online ? "status-badge-online" : "status-badge-offline"
1333
2256
  ])
1334
- }, k(D.value.online ? "在线" : "离线"), 3)
2257
+ }, _(F.value.online ? "在线" : "离线"), 3)
1335
2258
  ]),
1336
- t("div", Ds, [
1337
- p(h, { class: "action-icon" }, {
2259
+ e("div", Fn, [
2260
+ p(y, { class: "action-icon" }, {
1338
2261
  default: b(() => [
1339
- p(u(Ke))
2262
+ p(c(Le))
1340
2263
  ]),
1341
2264
  _: 1
1342
2265
  }),
1343
- p(h, {
2266
+ p(y, {
1344
2267
  class: "action-icon",
1345
- onClick: l[3] || (l[3] = (n) => ue.value = !ue.value)
2268
+ onClick: s[3] || (s[3] = (i) => j.value = !j.value)
1346
2269
  }, {
1347
2270
  default: b(() => [
1348
- p(u(Ft))
2271
+ p(c(At))
1349
2272
  ]),
1350
2273
  _: 1
1351
2274
  })
1352
2275
  ])
1353
2276
  ]),
1354
- t("div", {
2277
+ e("div", {
1355
2278
  ref_key: "messagesContainer",
1356
- ref: R,
2279
+ ref: z,
1357
2280
  class: "messages-container"
1358
2281
  }, [
1359
- (r(!0), v(fe, null, me(u(Q), (n, j) => (r(), v("div", {
1360
- key: j,
1361
- class: X([
2282
+ (n(!0), v(se, null, ae(c(Q), (i, me) => (n(), v("div", {
2283
+ key: me,
2284
+ class: K([
1362
2285
  "message-wrapper",
1363
- n.isSelf ? "message-self" : "message-other"
2286
+ i.isSelf ? "message-self" : "message-other"
1364
2287
  ])
1365
2288
  }, [
1366
- t("div", Ms, [
1367
- t("img", {
1368
- src: n.isSelf ? u(z) : D.value.avatar,
2289
+ e("div", In, [
2290
+ e("img", {
2291
+ src: i.isSelf ? c(I) : F.value.avatar,
1369
2292
  class: "avatar-sm"
1370
- }, null, 8, $s)
2293
+ }, null, 8, zn)
1371
2294
  ]),
1372
- t("div", {
1373
- class: X([
2295
+ e("div", {
2296
+ class: K([
1374
2297
  "message-content-wrapper",
1375
- n.isSelf ? "content-self" : "content-other"
2298
+ i.isSelf ? "content-self" : "content-other"
1376
2299
  ])
1377
2300
  }, [
1378
- n.isSelf ? I("", !0) : (r(), v("div", Es, k(D.value.name), 1)),
1379
- t("div", Ks, [
1380
- n.type === "text" ? (r(), v("div", {
2301
+ i.isSelf ? U("", !0) : (n(), v("div", Rn, _(F.value.name), 1)),
2302
+ e("div", Ln, [
2303
+ i.type === "text" ? (n(), v("div", {
1381
2304
  key: 0,
1382
- class: X([
2305
+ class: K([
1383
2306
  "message-bubble",
1384
- n.isSelf ? "bubble-self" : "bubble-other"
2307
+ i.isSelf ? "bubble-self" : "bubble-other"
1385
2308
  ])
1386
- }, k(n.text), 3)) : n.type === "file" && n.fileType === "image" ? (r(), v("div", {
2309
+ }, _(i.text), 3)) : i.type === "file" && i.fileType === "image" ? (n(), v("div", {
1387
2310
  key: 1,
1388
- class: X([
2311
+ class: K([
1389
2312
  "message-bubble",
1390
2313
  "image-bubble",
1391
- n.isSelf ? "bubble-self" : "bubble-other"
2314
+ i.isSelf ? "bubble-self" : "bubble-other"
1392
2315
  ]),
1393
- onClick: ($e) => je(n.fileUrl)
2316
+ onClick: (pt) => Oe(i.fileUrl)
1394
2317
  }, [
1395
- t("img", {
1396
- src: n.fileUrl,
1397
- alt: n.fileName,
2318
+ e("img", {
2319
+ src: i.fileUrl,
2320
+ alt: i.fileName,
1398
2321
  class: "message-image",
1399
- onError: dt
1400
- }, null, 40, Bs),
1401
- n.fileSize ? (r(), v("div", Ns, k(Pe(n.fileSize)), 1)) : I("", !0)
1402
- ], 10, Ws)) : n.type === "file" ? (r(), v("div", {
2322
+ onError: ot
2323
+ }, null, 40, Mn),
2324
+ i.fileSize ? (n(), v("div", Dn, _(Ne(i.fileSize)), 1)) : U("", !0)
2325
+ ], 10, Tn)) : i.type === "file" ? (n(), v("div", {
1403
2326
  key: 2,
1404
- class: X([
2327
+ class: K([
1405
2328
  "message-bubble",
1406
2329
  "file-bubble",
1407
- n.isSelf ? "bubble-self" : "bubble-other"
2330
+ i.isSelf ? "bubble-self" : "bubble-other"
1408
2331
  ]),
1409
- onClick: ($e) => je(n.fileUrl)
2332
+ onClick: (pt) => Oe(i.fileUrl)
1410
2333
  }, [
1411
- t("div", qs, [
1412
- t("div", Ps, [
1413
- p(h, { size: 28 }, {
2334
+ e("div", qn, [
2335
+ e("div", Wn, [
2336
+ p(y, { size: 28 }, {
1414
2337
  default: b(() => [
1415
- p(u(Rt))
2338
+ p(c(Vt))
1416
2339
  ]),
1417
2340
  _: 1
1418
2341
  })
1419
2342
  ]),
1420
- t("div", Os, [
1421
- t("div", js, k(n.fileName || n.text), 1),
1422
- t("div", Xs, [
1423
- p(h, { size: 12 }, {
2343
+ e("div", Bn, [
2344
+ e("div", Kn, _(i.fileName || i.text), 1),
2345
+ e("div", Pn, [
2346
+ p(y, { size: 12 }, {
1424
2347
  default: b(() => [
1425
- p(u(It))
2348
+ p(c(St))
1426
2349
  ]),
1427
2350
  _: 1
1428
2351
  }),
1429
- l[19] || (l[19] = t("span", null, "点击下载", -1)),
1430
- n.fileSize ? (r(), v("span", Ys, "· " + k(Pe(n.fileSize)), 1)) : I("", !0)
2352
+ s[19] || (s[19] = e("span", null, "点击下载", -1)),
2353
+ i.fileSize ? (n(), v("span", Nn, "· " + _(Ne(i.fileSize)), 1)) : U("", !0)
1431
2354
  ])
1432
2355
  ])
1433
2356
  ])
1434
- ], 10, Hs)) : I("", !0),
1435
- t("div", {
1436
- class: X([
2357
+ ], 10, En)) : U("", !0),
2358
+ e("div", {
2359
+ class: K([
1437
2360
  "message-time",
1438
- n.isSelf ? "time-right" : "time-left"
2361
+ i.isSelf ? "time-right" : "time-left"
1439
2362
  ])
1440
- }, k(u(ie)(n.time)), 3)
2363
+ }, _(c(he)(i.time)), 3)
1441
2364
  ])
1442
2365
  ], 2)
1443
2366
  ], 2))), 128))
1444
2367
  ], 512),
1445
- t("div", Gs, [
1446
- B.value.length > 0 ? (r(), v("div", Js, [
1447
- (r(!0), v(fe, null, me(B.value, (n, j) => (r(), v("div", {
1448
- key: n.id,
2368
+ e("div", Hn, [
2369
+ q.value.length > 0 ? (n(), v("div", On, [
2370
+ (n(!0), v(se, null, ae(q.value, (i, me) => (n(), v("div", {
2371
+ key: i.id,
1449
2372
  class: "pending-file"
1450
2373
  }, [
1451
- n.isImage ? (r(), v("div", Qs, [
1452
- t("img", {
1453
- src: n.previewUrl,
1454
- alt: n.name,
2374
+ i.isImage ? (n(), v("div", jn, [
2375
+ e("img", {
2376
+ src: i.previewUrl,
2377
+ alt: i.name,
1455
2378
  class: "pending-image"
1456
- }, null, 8, Zs),
1457
- t("button", {
1458
- onClick: ($e) => qe(j),
2379
+ }, null, 8, Xn),
2380
+ e("button", {
2381
+ onClick: (pt) => Pe(me),
1459
2382
  class: "remove-file-btn"
1460
- }, " × ", 8, ea)
1461
- ])) : (r(), v("div", ta, [
1462
- p(h, { class: "pending-file-icon" }, {
2383
+ }, " × ", 8, Yn)
2384
+ ])) : (n(), v("div", Gn, [
2385
+ p(y, { class: "pending-file-icon" }, {
1463
2386
  default: b(() => [
1464
- p(u(Ze))
2387
+ p(c(Je))
1465
2388
  ]),
1466
2389
  _: 1
1467
2390
  }),
1468
- t("span", sa, k(n.name), 1),
1469
- t("button", {
1470
- onClick: ($e) => qe(j),
2391
+ e("span", Jn, _(i.name), 1),
2392
+ e("button", {
2393
+ onClick: (pt) => Pe(me),
1471
2394
  class: "remove-file-btn"
1472
- }, " × ", 8, aa)
2395
+ }, " × ", 8, Qn)
1473
2396
  ]))
1474
2397
  ]))), 128))
1475
- ])) : I("", !0),
1476
- y.config.modules.fileUpload ? (r(), v("div", na, [
1477
- p(h, { class: "action-icon" }, {
2398
+ ])) : U("", !0),
2399
+ w.config.modules.fileUpload ? (n(), v("div", Zn, [
2400
+ p(y, { class: "action-icon" }, {
1478
2401
  default: b(() => [
1479
- p(u(Ee))
2402
+ p(c(Re))
1480
2403
  ]),
1481
2404
  _: 1
1482
2405
  }),
1483
- p(h, {
2406
+ p(y, {
1484
2407
  class: "action-icon",
1485
- onClick: ot
2408
+ onClick: nt
1486
2409
  }, {
1487
2410
  default: b(() => [
1488
- p(u(Ze))
2411
+ p(c(Je))
1489
2412
  ]),
1490
2413
  _: 1
1491
2414
  }),
1492
- p(h, { class: "action-icon" }, {
2415
+ p(y, { class: "action-icon" }, {
1493
2416
  default: b(() => [
1494
- p(u(Lt))
2417
+ p(c(Ft))
1495
2418
  ]),
1496
2419
  _: 1
1497
2420
  })
1498
- ])) : I("", !0),
1499
- t("div", la, [
1500
- kt(t("textarea", {
1501
- "onUpdate:modelValue": l[4] || (l[4] = (n) => we(C) ? C.value = n : null),
1502
- onKeydown: wt(Je(Oe, ["prevent"]), ["enter"]),
1503
- onPaste: ct,
2421
+ ])) : U("", !0),
2422
+ e("div", el, [
2423
+ bt(e("textarea", {
2424
+ "onUpdate:modelValue": s[4] || (s[4] = (i) => Ce(S) ? S.value = i : null),
2425
+ onKeydown: kt(Ye(He, ["prevent"]), ["enter"]),
2426
+ onPaste: it,
1504
2427
  placeholder: "输入消息或粘贴文件...",
1505
2428
  class: "message-input",
1506
2429
  rows: "3"
1507
- }, null, 40, ia), [
1508
- [Ut, u(C)]
2430
+ }, null, 40, tl), [
2431
+ [wt, c(S)]
1509
2432
  ])
1510
2433
  ]),
1511
- t("div", oa, [
1512
- p(ae, {
2434
+ e("div", sl, [
2435
+ p(ue, {
1513
2436
  type: "primary",
1514
- disabled: !u(C).trim() && B.value.length === 0,
1515
- onClick: Oe,
2437
+ disabled: !c(S).trim() && q.value.length === 0,
2438
+ onClick: He,
1516
2439
  class: "send-btn"
1517
2440
  }, {
1518
- default: b(() => [...l[20] || (l[20] = [
1519
- ne(" 发送 ", -1)
2441
+ default: b(() => [...s[20] || (s[20] = [
2442
+ J(" 发送 ", -1)
1520
2443
  ])]),
1521
2444
  _: 1
1522
2445
  }, 8, ["disabled"])
1523
2446
  ]),
1524
- t("input", {
2447
+ e("input", {
1525
2448
  ref_key: "fileInputRef",
1526
- ref: ve,
2449
+ ref: E,
1527
2450
  type: "file",
1528
2451
  multiple: "",
1529
2452
  class: "hidden-file-input",
1530
- onChange: rt
2453
+ onChange: lt
1531
2454
  }, null, 544)
1532
2455
  ])
1533
- ])) : M.value ? I("", !0) : (r(), v("div", ra, [
1534
- p(h, {
2456
+ ])) : O.value ? U("", !0) : (n(), v("div", al, [
2457
+ p(y, {
1535
2458
  size: 64,
1536
2459
  class: "empty-icon"
1537
2460
  }, {
1538
2461
  default: b(() => [
1539
- p(u(Tt))
2462
+ p(c(It))
1540
2463
  ]),
1541
2464
  _: 1
1542
2465
  }),
1543
- t("div", ca, k(Z.value === "apply" ? "在左侧选择好友申请" : "在左侧选择好友开始聊天"), 1)
2466
+ e("div", nl, _(ee.value === "apply" ? "在左侧选择好友申请" : "在左侧选择好友开始聊天"), 1)
1544
2467
  ]))
1545
2468
  ]),
1546
- ue.value ? (r(), v("div", da, [
1547
- l[22] || (l[22] = t("div", { class: "detail-header" }, "聊天详情", -1)),
1548
- t("div", ua, [
1549
- t("div", va, [
1550
- t("img", {
1551
- src: (ke = D.value) == null ? void 0 : ke.avatar,
1552
- alt: (Ye = D.value) == null ? void 0 : Ye.name,
2469
+ j.value ? (n(), v("div", ll, [
2470
+ s[22] || (s[22] = e("div", { class: "detail-header" }, "聊天详情", -1)),
2471
+ e("div", il, [
2472
+ e("div", ol, [
2473
+ e("img", {
2474
+ src: (Se = F.value) == null ? void 0 : Se.avatar,
2475
+ alt: (o = F.value) == null ? void 0 : o.name,
1553
2476
  class: "detail-avatar"
1554
- }, null, 8, pa),
1555
- t("div", fa, k((Ge = D.value) == null ? void 0 : Ge.name), 1),
1556
- l[21] || (l[21] = t("div", { class: "detail-actions" }, [
1557
- t("div", { class: "detail-action-item" }, "查找聊天记录"),
1558
- t("div", { class: "detail-action-item" }, "清空聊天记录")
2477
+ }, null, 8, rl),
2478
+ e("div", cl, _((te = F.value) == null ? void 0 : te.name), 1),
2479
+ s[21] || (s[21] = e("div", { class: "detail-actions" }, [
2480
+ e("div", { class: "detail-action-item" }, "查找聊天记录"),
2481
+ e("div", { class: "detail-action-item" }, "清空聊天记录")
1559
2482
  ], -1))
1560
2483
  ])
1561
2484
  ])
1562
- ])) : I("", !0)
2485
+ ])) : U("", !0)
1563
2486
  ]),
1564
- p(Me, {
1565
- modelValue: u(le),
1566
- "onUpdate:modelValue": l[6] || (l[6] = (n) => we(le) ? le.value = n : null),
2487
+ p(ze, {
2488
+ modelValue: c(ne),
2489
+ "onUpdate:modelValue": s[6] || (s[6] = (i) => Ce(ne) ? ne.value = i : null),
1567
2490
  title: "添加好友",
1568
2491
  width: "500px",
1569
2492
  "append-to-body": ""
1570
2493
  }, {
1571
2494
  default: b(() => [
1572
- t("div", ma, [
1573
- t("div", ha, [
1574
- p(L, {
1575
- modelValue: u(te),
1576
- "onUpdate:modelValue": l[5] || (l[5] = (n) => we(te) ? te.value = n : null),
2495
+ e("div", dl, [
2496
+ e("div", ul, [
2497
+ p(V, {
2498
+ modelValue: c(_e),
2499
+ "onUpdate:modelValue": s[5] || (s[5] = (i) => Ce(_e) ? _e.value = i : null),
1577
2500
  placeholder: "搜索用户",
1578
- "prefix-icon": u(Ke)
2501
+ "prefix-icon": c(Le)
1579
2502
  }, null, 8, ["modelValue", "prefix-icon"])
1580
2503
  ])
1581
2504
  ]),
1582
- t("div", ga, [
1583
- u(x) ? (r(), q($, {
2505
+ e("div", vl, [
2506
+ c(R) ? (n(), B(Y, {
1584
2507
  key: 0,
1585
2508
  description: "加载中..."
1586
- })) : u(G).length === 0 ? (r(), q($, {
2509
+ })) : c(fe).length === 0 ? (n(), B(Y, {
1587
2510
  key: 1,
1588
2511
  description: "暂无用户"
1589
- })) : (r(!0), v(fe, { key: 2 }, me(u(G), (n) => (r(), v("div", {
1590
- key: n.username,
2512
+ })) : (n(!0), v(se, { key: 2 }, ae(c(fe), (i) => (n(), v("div", {
2513
+ key: i.username,
1591
2514
  class: "available-user-item"
1592
2515
  }, [
1593
- t("div", ya, [
1594
- t("img", {
1595
- src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${n.username}`,
1596
- alt: n.username,
2516
+ e("div", pl, [
2517
+ e("img", {
2518
+ src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${i.username}`,
2519
+ alt: i.username,
1597
2520
  class: "available-user-avatar"
1598
- }, null, 8, _a),
1599
- t("div", ba, k(n.username), 1)
2521
+ }, null, 8, ml),
2522
+ e("div", fl, _(i.username), 1)
1600
2523
  ]),
1601
- p(ae, {
2524
+ p(ue, {
1602
2525
  type: "primary",
1603
2526
  size: "small",
1604
- onClick: (j) => u(Se)(n)
2527
+ onClick: (me) => c(De)(i)
1605
2528
  }, {
1606
- default: b(() => [...l[23] || (l[23] = [
1607
- ne("添加", -1)
2529
+ default: b(() => [...s[23] || (s[23] = [
2530
+ J("添加", -1)
1608
2531
  ])]),
1609
2532
  _: 1
1610
2533
  }, 8, ["onClick"])
@@ -1613,9 +2536,9 @@ const et = (y, e) => {
1613
2536
  ]),
1614
2537
  _: 1
1615
2538
  }, 8, ["modelValue"]),
1616
- p(Me, {
1617
- modelValue: i.value,
1618
- "onUpdate:modelValue": l[11] || (l[11] = (n) => i.value = n),
2539
+ p(ze, {
2540
+ modelValue: l.value,
2541
+ "onUpdate:modelValue": s[11] || (s[11] = (i) => l.value = i),
1619
2542
  title: "个人设置",
1620
2543
  width: "560px",
1621
2544
  "close-on-click-modal": !1,
@@ -1623,161 +2546,161 @@ const et = (y, e) => {
1623
2546
  class: "settings-dialog"
1624
2547
  }, {
1625
2548
  default: b(() => [
1626
- t("div", Ca, [
1627
- t("div", ka, [
1628
- t("div", wa, [
1629
- t("img", {
1630
- src: u(z),
2549
+ e("div", hl, [
2550
+ e("div", gl, [
2551
+ e("div", _l, [
2552
+ e("img", {
2553
+ src: c(I),
1631
2554
  alt: "头像",
1632
2555
  class: "settings-avatar"
1633
- }, null, 8, Ua),
1634
- y.config.modules.avatarCrop ? (r(), v("div", {
2556
+ }, null, 8, yl),
2557
+ w.config.modules.avatarCrop ? (n(), v("div", {
1635
2558
  key: 0,
1636
2559
  class: "settings-avatar-edit",
1637
- onClick: it
2560
+ onClick: at
1638
2561
  }, [
1639
- p(h, {
2562
+ p(y, {
1640
2563
  size: 18,
1641
2564
  class: "settings-avatar-icon"
1642
2565
  }, {
1643
2566
  default: b(() => [
1644
- p(u(zt))
2567
+ p(c(zt))
1645
2568
  ]),
1646
2569
  _: 1
1647
2570
  })
1648
- ])) : I("", !0),
1649
- t("input", {
2571
+ ])) : U("", !0),
2572
+ e("input", {
1650
2573
  ref_key: "avatarInputRef",
1651
- ref: se,
2574
+ ref: A,
1652
2575
  type: "file",
1653
2576
  accept: "image/*",
1654
2577
  class: "hidden-avatar-input",
1655
- onChange: ut
2578
+ onChange: rt
1656
2579
  }, null, 544)
1657
2580
  ]),
1658
- t("div", xa, [
1659
- t("div", Aa, k(u(w).nickname || u(T)), 1),
1660
- t("div", Sa, "@" + k(u(T)), 1)
2581
+ e("div", bl, [
2582
+ e("div", kl, _(c(T).nickname || c(N)), 1),
2583
+ e("div", wl, "@" + _(c(N)), 1)
1661
2584
  ])
1662
2585
  ]),
1663
- t("div", Va, [
1664
- t("div", Fa, [
1665
- t("div", Ra, [
1666
- p(h, null, {
2586
+ e("div", Cl, [
2587
+ e("div", Ul, [
2588
+ e("div", $l, [
2589
+ p(y, null, {
1667
2590
  default: b(() => [
1668
- p(u(Qe))
2591
+ p(c(Ge))
1669
2592
  ]),
1670
2593
  _: 1
1671
2594
  }),
1672
- l[24] || (l[24] = ne(" 个人信息 ", -1))
2595
+ s[24] || (s[24] = J(" 个人信息 ", -1))
1673
2596
  ]),
1674
- H.value ? I("", !0) : (r(), q(ae, {
2597
+ D.value ? U("", !0) : (n(), B(ue, {
1675
2598
  key: 0,
1676
2599
  type: "primary",
1677
2600
  size: "small",
1678
- onClick: pt,
2601
+ onClick: dt,
1679
2602
  class: "settings-edit-btn"
1680
2603
  }, {
1681
- default: b(() => [...l[25] || (l[25] = [
1682
- ne(" 编辑 ", -1)
2604
+ default: b(() => [...s[25] || (s[25] = [
2605
+ J(" 编辑 ", -1)
1683
2606
  ])]),
1684
2607
  _: 1
1685
2608
  }))
1686
2609
  ]),
1687
- t("div", Ia, [
1688
- t("div", La, [
1689
- l[26] || (l[26] = t("label", { class: "settings-form-label" }, "昵称", -1)),
1690
- H.value ? (r(), q(L, {
2610
+ e("div", xl, [
2611
+ e("div", Al, [
2612
+ s[26] || (s[26] = e("label", { class: "settings-form-label" }, "昵称", -1)),
2613
+ D.value ? (n(), B(V, {
1691
2614
  key: 0,
1692
- modelValue: W.value.nickname,
1693
- "onUpdate:modelValue": l[7] || (l[7] = (n) => W.value.nickname = n),
2615
+ modelValue: X.value.nickname,
2616
+ "onUpdate:modelValue": s[7] || (s[7] = (i) => X.value.nickname = i),
1694
2617
  placeholder: "请输入昵称",
1695
2618
  size: "large"
1696
- }, null, 8, ["modelValue"])) : (r(), v("div", Ta, k(u(w).nickname || "未设置"), 1))
2619
+ }, null, 8, ["modelValue"])) : (n(), v("div", Vl, _(c(T).nickname || "未设置"), 1))
1697
2620
  ]),
1698
- t("div", za, [
1699
- l[27] || (l[27] = t("label", { class: "settings-form-label" }, "邮箱", -1)),
1700
- H.value ? (r(), q(L, {
2621
+ e("div", Sl, [
2622
+ s[27] || (s[27] = e("label", { class: "settings-form-label" }, "邮箱", -1)),
2623
+ D.value ? (n(), B(V, {
1701
2624
  key: 0,
1702
- modelValue: W.value.email,
1703
- "onUpdate:modelValue": l[8] || (l[8] = (n) => W.value.email = n),
2625
+ modelValue: X.value.email,
2626
+ "onUpdate:modelValue": s[8] || (s[8] = (i) => X.value.email = i),
1704
2627
  placeholder: "请输入邮箱",
1705
2628
  size: "large"
1706
- }, null, 8, ["modelValue"])) : (r(), v("div", Da, k(u(w).email || "未设置"), 1))
2629
+ }, null, 8, ["modelValue"])) : (n(), v("div", Fl, _(c(T).email || "未设置"), 1))
1707
2630
  ]),
1708
- t("div", Ma, [
1709
- l[28] || (l[28] = t("label", { class: "settings-form-label" }, "手机号", -1)),
1710
- H.value ? (r(), q(L, {
2631
+ e("div", Il, [
2632
+ s[28] || (s[28] = e("label", { class: "settings-form-label" }, "手机号", -1)),
2633
+ D.value ? (n(), B(V, {
1711
2634
  key: 0,
1712
- modelValue: W.value.phone,
1713
- "onUpdate:modelValue": l[9] || (l[9] = (n) => W.value.phone = n),
2635
+ modelValue: X.value.phone,
2636
+ "onUpdate:modelValue": s[9] || (s[9] = (i) => X.value.phone = i),
1714
2637
  placeholder: "请输入手机号",
1715
2638
  size: "large"
1716
- }, null, 8, ["modelValue"])) : (r(), v("div", $a, k(u(w).phone || "未设置"), 1))
2639
+ }, null, 8, ["modelValue"])) : (n(), v("div", zl, _(c(T).phone || "未设置"), 1))
1717
2640
  ]),
1718
- t("div", Ea, [
1719
- l[29] || (l[29] = t("label", { class: "settings-form-label" }, "个人简介", -1)),
1720
- H.value ? (r(), q(L, {
2641
+ e("div", Rl, [
2642
+ s[29] || (s[29] = e("label", { class: "settings-form-label" }, "个人简介", -1)),
2643
+ D.value ? (n(), B(V, {
1721
2644
  key: 0,
1722
- modelValue: W.value.bio,
1723
- "onUpdate:modelValue": l[10] || (l[10] = (n) => W.value.bio = n),
2645
+ modelValue: X.value.bio,
2646
+ "onUpdate:modelValue": s[10] || (s[10] = (i) => X.value.bio = i),
1724
2647
  type: "textarea",
1725
2648
  rows: 4,
1726
2649
  placeholder: "介绍一下自己吧...",
1727
2650
  size: "large"
1728
- }, null, 8, ["modelValue"])) : (r(), v("div", Ka, k(u(w).bio || "这个人很懒,什么都没写~"), 1))
2651
+ }, null, 8, ["modelValue"])) : (n(), v("div", Ll, _(c(T).bio || "这个人很懒,什么都没写~"), 1))
1729
2652
  ]),
1730
- H.value ? (r(), v("div", Wa, [
1731
- p(ae, {
2653
+ D.value ? (n(), v("div", Tl, [
2654
+ p(ue, {
1732
2655
  size: "default",
1733
- onClick: ft
2656
+ onClick: ut
1734
2657
  }, {
1735
- default: b(() => [...l[30] || (l[30] = [
1736
- ne("取消", -1)
2658
+ default: b(() => [...s[30] || (s[30] = [
2659
+ J("取消", -1)
1737
2660
  ])]),
1738
2661
  _: 1
1739
2662
  }),
1740
- p(ae, {
2663
+ p(ue, {
1741
2664
  type: "primary",
1742
2665
  size: "default",
1743
- loading: a.value,
1744
- onClick: mt
2666
+ loading: ge.value,
2667
+ onClick: vt
1745
2668
  }, {
1746
- default: b(() => [...l[31] || (l[31] = [
1747
- ne("保存更改", -1)
2669
+ default: b(() => [...s[31] || (s[31] = [
2670
+ J("保存更改", -1)
1748
2671
  ])]),
1749
2672
  _: 1
1750
2673
  }, 8, ["loading"])
1751
- ])) : I("", !0)
2674
+ ])) : U("", !0)
1752
2675
  ])
1753
2676
  ])
1754
2677
  ])
1755
2678
  ]),
1756
2679
  _: 1
1757
2680
  }, 8, ["modelValue"]),
1758
- p(Ot, {
1759
- modelValue: c.value,
1760
- "onUpdate:modelValue": l[12] || (l[12] = (n) => c.value = n),
1761
- src: ee.value,
1762
- onConfirm: vt
2681
+ p(Tt, {
2682
+ modelValue: d.value,
2683
+ "onUpdate:modelValue": s[12] || (s[12] = (i) => d.value = i),
2684
+ src: le.value,
2685
+ onConfirm: ct
1763
2686
  }, null, 8, ["modelValue", "src"]),
1764
- pe.value.visible ? (r(), v("div", {
2687
+ pe.value.visible ? (n(), v("div", {
1765
2688
  key: 0,
1766
2689
  class: "context-menu",
1767
- style: xt({ left: pe.value.x + "px", top: pe.value.y + "px" })
2690
+ style: Ct({ left: pe.value.x + "px", top: pe.value.y + "px" })
1768
2691
  }, [
1769
- t("div", {
2692
+ e("div", {
1770
2693
  class: "context-menu-item",
1771
- onClick: st
2694
+ onClick: Ze
1772
2695
  }, "删除聊天")
1773
- ], 4)) : I("", !0)
2696
+ ], 4)) : U("", !0)
1774
2697
  ];
1775
2698
  }),
1776
2699
  _: 1
1777
2700
  }, 8, ["modelValue", "width"]);
1778
2701
  };
1779
2702
  }
1780
- }, ja = /* @__PURE__ */ et(Ba, [["__scopeId", "data-v-a76a4ef3"]]), Na = {
2703
+ }, Pl = /* @__PURE__ */ ht(Ml, [["__scopeId", "data-v-a76a4ef3"]]), Dl = {
1781
2704
  // API 配置
1782
2705
  api: {
1783
2706
  baseUrl: "",
@@ -1824,6 +2747,10 @@ const et = (y, e) => {
1824
2747
  },
1825
2748
  // 自定义请求头
1826
2749
  headers: {},
2750
+ // 请求拦截器 (可选)
2751
+ requestInterceptors: [],
2752
+ // 响应拦截器 (可选)
2753
+ responseInterceptors: [],
1827
2754
  // WebSocket 配置
1828
2755
  websocket: {
1829
2756
  maxReconnectAttempts: 5,
@@ -1836,29 +2763,30 @@ const et = (y, e) => {
1836
2763
  allowedTypes: ["*"]
1837
2764
  }
1838
2765
  };
1839
- function Xa(y = {}) {
1840
- const e = tt(Na, y);
1841
- return e.api.baseUrl || console.warn("[VueChatKit] 请配置 api.baseUrl"), e.api.websocketUrl || console.warn("[VueChatKit] 请配置 api.websocketUrl"), e.user.username || console.warn("[VueChatKit] 请配置 user.username"), e;
2766
+ function Nl(w = {}) {
2767
+ const t = Mt(Dl, w);
2768
+ return t.api.baseUrl || console.warn("[VueChatKit] 请配置 api.baseUrl"), t.api.websocketUrl || console.warn("[VueChatKit] 请配置 api.websocketUrl"), t.user.username || console.warn("[VueChatKit] 请配置 user.username"), t;
1842
2769
  }
1843
- function tt(y, e) {
1844
- const s = { ...y };
1845
- for (const o in e)
1846
- e[o] && typeof e[o] == "object" && !Array.isArray(e[o]) ? s[o] = tt(y[o] || {}, e[o]) : s[o] = e[o];
1847
- return s;
2770
+ function Mt(w, t) {
2771
+ const a = { ...w };
2772
+ for (const m in t)
2773
+ t[m] && typeof t[m] == "object" && !Array.isArray(t[m]) ? a[m] = Mt(w[m] || {}, t[m]) : a[m] = t[m];
2774
+ return a;
1848
2775
  }
1849
- const Ya = {
1850
- install(y) {
1851
- y.component("ChatWindow", ChatWindow), y.component("AvatarCrop", AvatarCrop);
2776
+ const Hl = {
2777
+ install(w) {
2778
+ w.component("ChatPanel", ChatPanel), w.component("ChatWindow", ChatWindow), w.component("AvatarCrop", AvatarCrop);
1852
2779
  }
1853
2780
  };
1854
2781
  export {
1855
- Ot as AvatarCrop,
1856
- Be as ChatApi,
1857
- Dt as ChatWebSocket,
1858
- ja as ChatWindow,
1859
- Mt as HttpClient,
1860
- Ya as VueChatKit,
1861
- Xa as createChatConfig,
1862
- Ya as default,
1863
- Et as useChat
2782
+ Tt as AvatarCrop,
2783
+ ft as ChatApi,
2784
+ Kl as ChatPanel,
2785
+ Et as ChatWebSocket,
2786
+ Pl as ChatWindow,
2787
+ qt as HttpClient,
2788
+ Hl as VueChatKit,
2789
+ Nl as createChatConfig,
2790
+ Hl as default,
2791
+ Lt as useChat
1864
2792
  };