@koushuang/im 0.1.1-preview.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_plugin-vue_export-helper.cjs +2 -0
- package/dist/_virtual/_plugin-vue_export-helper.cjs.map +1 -0
- package/dist/_virtual/_plugin-vue_export-helper.mjs +10 -0
- package/dist/_virtual/_plugin-vue_export-helper.mjs.map +1 -0
- package/dist/api/auth.cjs +2 -0
- package/dist/api/auth.cjs.map +1 -0
- package/dist/api/auth.d.ts +48 -0
- package/dist/api/auth.mjs +30 -0
- package/dist/api/auth.mjs.map +1 -0
- package/dist/core/client.cjs +2 -0
- package/dist/core/client.cjs.map +1 -0
- package/dist/core/client.d.ts +38 -0
- package/dist/core/client.mjs +117 -0
- package/dist/core/client.mjs.map +1 -0
- package/dist/core/createClient.cjs +2 -0
- package/dist/core/createClient.cjs.map +1 -0
- package/dist/core/createClient.d.ts +6 -0
- package/dist/core/createClient.mjs +9 -0
- package/dist/core/createClient.mjs.map +1 -0
- package/dist/core/events.d.ts +36 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/types.d.ts +127 -0
- package/dist/http/createHttp.cjs +2 -0
- package/dist/http/createHttp.cjs.map +1 -0
- package/dist/http/createHttp.d.ts +5 -0
- package/dist/http/createHttp.mjs +29 -0
- package/dist/http/createHttp.mjs.map +1 -0
- package/dist/http/types.cjs +2 -0
- package/dist/http/types.cjs.map +1 -0
- package/dist/http/types.d.ts +14 -0
- package/dist/http/types.mjs +9 -0
- package/dist/http/types.mjs.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.mjs +38 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mock.cjs +2 -0
- package/dist/mock.cjs.map +1 -0
- package/dist/mock.d.ts +2 -0
- package/dist/mock.mjs +7 -0
- package/dist/mock.mjs.map +1 -0
- package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.cjs +2 -0
- package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.cjs.map +1 -0
- package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.mjs +20 -0
- package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.mjs.map +1 -0
- package/dist/protocol/envelope.cjs +2 -0
- package/dist/protocol/envelope.cjs.map +1 -0
- package/dist/protocol/envelope.d.ts +3 -0
- package/dist/protocol/envelope.mjs +19 -0
- package/dist/protocol/envelope.mjs.map +1 -0
- package/dist/protocol/guards.cjs +2 -0
- package/dist/protocol/guards.cjs.map +1 -0
- package/dist/protocol/guards.d.ts +2 -0
- package/dist/protocol/guards.mjs +7 -0
- package/dist/protocol/guards.mjs.map +1 -0
- package/dist/protocol/index.d.ts +2 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/visibility.cjs +2 -0
- package/dist/shared/visibility.cjs.map +1 -0
- package/dist/shared/visibility.d.ts +2 -0
- package/dist/shared/visibility.mjs +10 -0
- package/dist/shared/visibility.mjs.map +1 -0
- package/dist/style.cjs +2 -0
- package/dist/style.cjs.map +1 -0
- package/dist/style.css +12 -0
- package/dist/style.d.ts +1 -0
- package/dist/style.mjs +2 -0
- package/dist/style.mjs.map +1 -0
- package/dist/tui/mapper.cjs +2 -0
- package/dist/tui/mapper.cjs.map +1 -0
- package/dist/tui/mapper.d.ts +3 -0
- package/dist/tui/mapper.mjs +25 -0
- package/dist/tui/mapper.mjs.map +1 -0
- package/dist/tui/store.cjs +2 -0
- package/dist/tui/store.cjs.map +1 -0
- package/dist/tui/store.d.ts +2 -0
- package/dist/tui/store.mjs +19 -0
- package/dist/tui/store.mjs.map +1 -0
- package/dist/tui/tim.cjs +2 -0
- package/dist/tui/tim.cjs.map +1 -0
- package/dist/tui/tim.d.ts +2 -0
- package/dist/tui/tim.mjs +116 -0
- package/dist/tui/tim.mjs.map +1 -0
- package/dist/ui/components/FontSizeControl.vue.cjs +2 -0
- package/dist/ui/components/FontSizeControl.vue.cjs.map +1 -0
- package/dist/ui/components/FontSizeControl.vue.d.ts +13 -0
- package/dist/ui/components/FontSizeControl.vue.mjs +8 -0
- package/dist/ui/components/FontSizeControl.vue.mjs.map +1 -0
- package/dist/ui/components/FontSizeControl.vue2.cjs +2 -0
- package/dist/ui/components/FontSizeControl.vue2.cjs.map +1 -0
- package/dist/ui/components/FontSizeControl.vue2.mjs +45 -0
- package/dist/ui/components/FontSizeControl.vue2.mjs.map +1 -0
- package/dist/ui/components/ImChatRoom.vue.cjs +2 -0
- package/dist/ui/components/ImChatRoom.vue.cjs.map +1 -0
- package/dist/ui/components/ImChatRoom.vue.d.ts +38 -0
- package/dist/ui/components/ImChatRoom.vue.mjs +55 -0
- package/dist/ui/components/ImChatRoom.vue.mjs.map +1 -0
- package/dist/ui/components/ImChatRoom.vue2.cjs +2 -0
- package/dist/ui/components/ImChatRoom.vue2.cjs.map +1 -0
- package/dist/ui/components/ImChatRoom.vue2.mjs +5 -0
- package/dist/ui/components/ImChatRoom.vue2.mjs.map +1 -0
- package/dist/ui/components/ImKit.vue.cjs +2 -0
- package/dist/ui/components/ImKit.vue.cjs.map +1 -0
- package/dist/ui/components/ImKit.vue.d.ts +17 -0
- package/dist/ui/components/ImKit.vue.mjs +17 -0
- package/dist/ui/components/ImKit.vue.mjs.map +1 -0
- package/dist/ui/components/ImKit.vue2.cjs +2 -0
- package/dist/ui/components/ImKit.vue2.cjs.map +1 -0
- package/dist/ui/components/ImKit.vue2.mjs +5 -0
- package/dist/ui/components/ImKit.vue2.mjs.map +1 -0
- package/dist/ui/components/ImMessageInput.vue.cjs +2 -0
- package/dist/ui/components/ImMessageInput.vue.cjs.map +1 -0
- package/dist/ui/components/ImMessageInput.vue.d.ts +22 -0
- package/dist/ui/components/ImMessageInput.vue.mjs +5 -0
- package/dist/ui/components/ImMessageInput.vue.mjs.map +1 -0
- package/dist/ui/components/ImMessageInput.vue2.cjs +2 -0
- package/dist/ui/components/ImMessageInput.vue2.cjs.map +1 -0
- package/dist/ui/components/ImMessageInput.vue2.mjs +33 -0
- package/dist/ui/components/ImMessageInput.vue2.mjs.map +1 -0
- package/dist/ui/components/PcConversationListSplit.vue.cjs +2 -0
- package/dist/ui/components/PcConversationListSplit.vue.cjs.map +1 -0
- package/dist/ui/components/PcConversationListSplit.vue.d.ts +8 -0
- package/dist/ui/components/PcConversationListSplit.vue.mjs +8 -0
- package/dist/ui/components/PcConversationListSplit.vue.mjs.map +1 -0
- package/dist/ui/components/PcConversationListSplit.vue2.cjs +2 -0
- package/dist/ui/components/PcConversationListSplit.vue2.cjs.map +1 -0
- package/dist/ui/components/PcConversationListSplit.vue2.mjs +90 -0
- package/dist/ui/components/PcConversationListSplit.vue2.mjs.map +1 -0
- package/dist/ui/components/SysMessage.vue.cjs +2 -0
- package/dist/ui/components/SysMessage.vue.cjs.map +1 -0
- package/dist/ui/components/SysMessage.vue.d.ts +19 -0
- package/dist/ui/components/SysMessage.vue.mjs +8 -0
- package/dist/ui/components/SysMessage.vue.mjs.map +1 -0
- package/dist/ui/components/SysMessage.vue2.cjs +2 -0
- package/dist/ui/components/SysMessage.vue2.cjs.map +1 -0
- package/dist/ui/components/SysMessage.vue2.mjs +42 -0
- package/dist/ui/components/SysMessage.vue2.mjs.map +1 -0
- package/dist/ui/index.d.ts +8 -0
- package/dist/ui/layouts/ChatLayoutH5.vue.cjs +2 -0
- package/dist/ui/layouts/ChatLayoutH5.vue.cjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutH5.vue.d.ts +22 -0
- package/dist/ui/layouts/ChatLayoutH5.vue.mjs +8 -0
- package/dist/ui/layouts/ChatLayoutH5.vue.mjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutH5.vue2.cjs +2 -0
- package/dist/ui/layouts/ChatLayoutH5.vue2.cjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutH5.vue2.mjs +49 -0
- package/dist/ui/layouts/ChatLayoutH5.vue2.mjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutPc.vue.cjs +2 -0
- package/dist/ui/layouts/ChatLayoutPc.vue.cjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutPc.vue.d.ts +39 -0
- package/dist/ui/layouts/ChatLayoutPc.vue.mjs +8 -0
- package/dist/ui/layouts/ChatLayoutPc.vue.mjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutPc.vue2.cjs +2 -0
- package/dist/ui/layouts/ChatLayoutPc.vue2.cjs.map +1 -0
- package/dist/ui/layouts/ChatLayoutPc.vue2.mjs +66 -0
- package/dist/ui/layouts/ChatLayoutPc.vue2.mjs.map +1 -0
- package/dist/ui/mock/consultMeta.cjs +2 -0
- package/dist/ui/mock/consultMeta.cjs.map +1 -0
- package/dist/ui/mock/consultMeta.d.ts +9 -0
- package/dist/ui/mock/consultMeta.mjs +29 -0
- package/dist/ui/mock/consultMeta.mjs.map +1 -0
- package/dist/ui/mock/mock-driver.cjs +2 -0
- package/dist/ui/mock/mock-driver.cjs.map +1 -0
- package/dist/ui/mock/mock-driver.d.ts +2 -0
- package/dist/ui/mock/mock-driver.mjs +51 -0
- package/dist/ui/mock/mock-driver.mjs.map +1 -0
- package/dist/ui/mock/mock.d.ts +2 -0
- package/dist/ui/renderers/MessageProxy.cjs +2 -0
- package/dist/ui/renderers/MessageProxy.cjs.map +1 -0
- package/dist/ui/renderers/MessageProxy.d.ts +24 -0
- package/dist/ui/renderers/MessageProxy.mjs +36 -0
- package/dist/ui/renderers/MessageProxy.mjs.map +1 -0
- package/dist/ui/renderers/createMessageComponent.cjs +2 -0
- package/dist/ui/renderers/createMessageComponent.cjs.map +1 -0
- package/dist/ui/renderers/createMessageComponent.d.ts +4 -0
- package/dist/ui/renderers/createMessageComponent.mjs +15 -0
- package/dist/ui/renderers/createMessageComponent.mjs.map +1 -0
- package/dist/ui/renderers/historyFilter.cjs +2 -0
- package/dist/ui/renderers/historyFilter.cjs.map +1 -0
- package/dist/ui/renderers/historyFilter.d.ts +10 -0
- package/dist/ui/renderers/historyFilter.mjs +41 -0
- package/dist/ui/renderers/historyFilter.mjs.map +1 -0
- package/dist/ui/renderers/registry.cjs +2 -0
- package/dist/ui/renderers/registry.cjs.map +1 -0
- package/dist/ui/renderers/registry.d.ts +3 -0
- package/dist/ui/renderers/registry.mjs +17 -0
- package/dist/ui/renderers/registry.mjs.map +1 -0
- package/dist/ui/renderers/resolve.cjs +2 -0
- package/dist/ui/renderers/resolve.cjs.map +1 -0
- package/dist/ui/renderers/resolve.d.ts +2 -0
- package/dist/ui/renderers/resolve.mjs +8 -0
- package/dist/ui/renderers/resolve.mjs.map +1 -0
- package/dist/ui/styles/style.d.ts +0 -0
- package/dist/utils/log.cjs +2 -0
- package/dist/utils/log.cjs.map +1 -0
- package/dist/utils/log.d.ts +1 -0
- package/dist/utils/log.mjs +7 -0
- package/dist/utils/log.mjs.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","sources":["../../src/http/types.ts"],"sourcesContent":["export interface ApiResp<T = any> {\n code: number\n data: T\n message: string\n}\n\nexport class ApiError extends Error {\n code: number\n detail?: any\n constructor(code: number, message: string, detail?: any) {\n super(message)\n this.code = code\n this.detail = detail\n }\n}\n\nexport interface HttpClient {\n get<T = any>(url: string, config?: any): Promise<T>\n post<T = any>(url: string, data?: any, config?: any): Promise<T>\n}\n"],"names":["ApiError","code","message","detail"],"mappings":"AAMO,MAAMA,UAAiB,MAAM;AAAA,EAGlC,YAAYC,GAAcC,GAAiBC,GAAc;AACvD,UAAMD,CAAO,GACb,KAAK,OAAOD,GACZ,KAAK,SAASE;AAAA,EAChB;AACF;"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./tui/tim.cjs"),o=require("./http/createHttp.cjs"),s=require("./ui/components/ImKit.vue.cjs"),n=require("./ui/components/ImChatRoom.vue.cjs"),c=require("./core/createClient.cjs"),a=require("./core/client.cjs"),l=require("./protocol/guards.cjs"),t=require("./protocol/envelope.cjs"),u=require("./shared/visibility.cjs"),v=require("./ui/components/PcConversationListSplit.vue.cjs"),r=require("./ui/renderers/registry.cjs"),p=require("./ui/renderers/resolve.cjs"),g=require("./ui/renderers/createMessageComponent.cjs"),q=require("./ui/mock/mock-driver.cjs"),e=require("./ui/mock/consultMeta.cjs");exports.createTuiDriver=i.createTuiDriver;exports.createFetchHttp=o.createFetchHttp;exports.ImKit=s;exports.ImChatRoom=n;exports.createClient=c.createClient;exports.IMClient=a.IMClient;exports.isEnvelope=l.isEnvelope;exports.decodeEnvelope=t.decodeEnvelope;exports.encodeEnvelope=t.encodeEnvelope;exports.watchPageVisibility=u.watchPageVisibility;exports.PcConversationListSplit=v;exports.registerRenderer=r.registerRenderer;exports.resolveRenderer=r.resolveRenderer;exports.resolveEnvelopeFromMessage=p.resolveEnvelopeFromMessage;exports.createMessageComponent=g.createMessageComponent;exports.createMockDriver=q.createMockDriver;exports.DEPTS=e.DEPTS;exports.TYPES=e.TYPES;exports.fetchConsultMetaBatch=e.fetchConsultMetaBatch;exports.sleep=e.sleep;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createTuiDriver as o } from "./tui/tim.mjs";
|
|
2
|
+
import { createFetchHttp as p } from "./http/createHttp.mjs";
|
|
3
|
+
import { default as a } from "./ui/components/ImKit.vue.mjs";
|
|
4
|
+
import { default as s } from "./ui/components/ImChatRoom.vue.mjs";
|
|
5
|
+
import { createClient as l } from "./core/createClient.mjs";
|
|
6
|
+
import { IMClient as n } from "./core/client.mjs";
|
|
7
|
+
import { isEnvelope as v } from "./protocol/guards.mjs";
|
|
8
|
+
import { decodeEnvelope as C, encodeEnvelope as E } from "./protocol/envelope.mjs";
|
|
9
|
+
import { watchPageVisibility as u } from "./shared/visibility.mjs";
|
|
10
|
+
import { default as g } from "./ui/components/PcConversationListSplit.vue.mjs";
|
|
11
|
+
import { registerRenderer as D, resolveRenderer as I } from "./ui/renderers/registry.mjs";
|
|
12
|
+
import { resolveEnvelopeFromMessage as S } from "./ui/renderers/resolve.mjs";
|
|
13
|
+
import { createMessageComponent as F } from "./ui/renderers/createMessageComponent.mjs";
|
|
14
|
+
import { createMockDriver as k } from "./ui/mock/mock-driver.mjs";
|
|
15
|
+
import { DEPTS as y, TYPES as B, fetchConsultMetaBatch as H, sleep as K } from "./ui/mock/consultMeta.mjs";
|
|
16
|
+
export {
|
|
17
|
+
y as DEPTS,
|
|
18
|
+
n as IMClient,
|
|
19
|
+
s as ImChatRoom,
|
|
20
|
+
a as ImKit,
|
|
21
|
+
g as PcConversationListSplit,
|
|
22
|
+
B as TYPES,
|
|
23
|
+
l as createClient,
|
|
24
|
+
p as createFetchHttp,
|
|
25
|
+
F as createMessageComponent,
|
|
26
|
+
k as createMockDriver,
|
|
27
|
+
o as createTuiDriver,
|
|
28
|
+
C as decodeEnvelope,
|
|
29
|
+
E as encodeEnvelope,
|
|
30
|
+
H as fetchConsultMetaBatch,
|
|
31
|
+
v as isEnvelope,
|
|
32
|
+
D as registerRenderer,
|
|
33
|
+
S as resolveEnvelopeFromMessage,
|
|
34
|
+
I as resolveRenderer,
|
|
35
|
+
K as sleep,
|
|
36
|
+
u as watchPageVisibility
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
package/dist/mock.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ui/mock/mock-driver.cjs"),t=require("./ui/mock/consultMeta.cjs");exports.createMockDriver=e.createMockDriver;exports.fetchConsultMetaBatch=t.fetchConsultMetaBatch;
|
|
2
|
+
//# sourceMappingURL=mock.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/mock.d.ts
ADDED
package/dist/mock.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function n(t){return{all:t=t||new Map,on:function(e,c){var i=t.get(e);i?i.push(c):t.set(e,[c])},off:function(e,c){var i=t.get(e);i&&(c?i.splice(i.indexOf(c)>>>0,1):t.set(e,[]))},emit:function(e,c){var i=t.get(e);i&&i.slice().map(function(f){f(c)}),(i=t.get("*"))&&i.slice().map(function(f){f(e,c)})}}}module.exports=n;
|
|
2
|
+
//# sourceMappingURL=mitt.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mitt.cjs","sources":["../../../../../../../../../node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.mjs"],"sourcesContent":["export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n"],"names":["mitt","n","t","e"],"mappings":"aAAe,SAAAA,EAASC,EAAE,CAAC,MAAM,CAAC,IAAIA,EAAEA,GAAG,IAAI,IAAI,GAAG,SAASC,EAAEC,EAAE,CAAC,IAAI,EAAEF,EAAE,IAAIC,CAAC,EAAE,EAAE,EAAE,KAAKC,CAAC,EAAEF,EAAE,IAAIC,EAAE,CAACC,CAAC,CAAC,CAAC,EAAE,IAAI,SAASD,EAAEC,EAAE,CAAC,IAAI,EAAEF,EAAE,IAAIC,CAAC,EAAE,IAAIC,EAAE,EAAE,OAAO,EAAE,QAAQA,CAAC,IAAI,EAAE,CAAC,EAAEF,EAAE,IAAIC,EAAE,EAAE,EAAE,EAAE,KAAK,SAASA,EAAEC,EAAE,CAAC,IAAI,EAAEF,EAAE,IAAIC,CAAC,EAAE,GAAG,EAAE,QAAQ,IAAI,SAASD,EAAE,CAACA,EAAEE,CAAC,CAAC,CAAC,GAAG,EAAEF,EAAE,IAAI,GAAG,IAAI,EAAE,MAAK,EAAG,IAAI,SAASA,EAAE,CAACA,EAAEC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
function c(t) {
|
|
2
|
+
return { all: t = t || /* @__PURE__ */ new Map(), on: function(e, f) {
|
|
3
|
+
var i = t.get(e);
|
|
4
|
+
i ? i.push(f) : t.set(e, [f]);
|
|
5
|
+
}, off: function(e, f) {
|
|
6
|
+
var i = t.get(e);
|
|
7
|
+
i && (f ? i.splice(i.indexOf(f) >>> 0, 1) : t.set(e, []));
|
|
8
|
+
}, emit: function(e, f) {
|
|
9
|
+
var i = t.get(e);
|
|
10
|
+
i && i.slice().map(function(a) {
|
|
11
|
+
a(f);
|
|
12
|
+
}), (i = t.get("*")) && i.slice().map(function(a) {
|
|
13
|
+
a(e, f);
|
|
14
|
+
});
|
|
15
|
+
} };
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
c as default
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=mitt.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mitt.mjs","sources":["../../../../../../../../../node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.mjs"],"sourcesContent":["export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n"],"names":["mitt","n","t","e"],"mappings":"AAAe,SAAAA,EAASC,GAAE;AAAC,SAAM,EAAC,KAAIA,IAAEA,KAAG,oBAAI,OAAI,IAAG,SAASC,GAAEC,GAAE;AAAC,QAAI,IAAEF,EAAE,IAAIC,CAAC;AAAE,QAAE,EAAE,KAAKC,CAAC,IAAEF,EAAE,IAAIC,GAAE,CAACC,CAAC,CAAC;AAAA,EAAC,GAAE,KAAI,SAASD,GAAEC,GAAE;AAAC,QAAI,IAAEF,EAAE,IAAIC,CAAC;AAAE,UAAIC,IAAE,EAAE,OAAO,EAAE,QAAQA,CAAC,MAAI,GAAE,CAAC,IAAEF,EAAE,IAAIC,GAAE,EAAE;AAAA,EAAE,GAAE,MAAK,SAASA,GAAEC,GAAE;AAAC,QAAI,IAAEF,EAAE,IAAIC,CAAC;AAAE,SAAG,EAAE,QAAQ,IAAI,SAASD,GAAE;AAAC,MAAAA,EAAEE,CAAC;AAAA,IAAC,CAAC,IAAG,IAAEF,EAAE,IAAI,GAAG,MAAI,EAAE,MAAK,EAAG,IAAI,SAASA,GAAE;AAAC,MAAAA,EAAEC,GAAEC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC,EAAC;AAAC;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function n(e){return JSON.stringify(e)}function o(e){if(!e)return null;if(typeof e=="object"&&e.type&&e.version)return e;if(typeof e!="string")return null;try{const r=JSON.parse(e);return r&&r.type?r:null}catch{return null}}exports.decodeEnvelope=o;exports.encodeEnvelope=n;
|
|
2
|
+
//# sourceMappingURL=envelope.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.cjs","sources":["../../src/protocol/envelope.ts"],"sourcesContent":["// 自定义消息 envelope:统一序列化/反序列化\nimport type { Envelope } from '../core/types'\nimport { logTag } from '../utils/log'\nexport function encodeEnvelope(env: Envelope): string {\n return JSON.stringify(env)\n}\n\nexport function decodeEnvelope(input: any): Envelope | null {\n // logTag('input', input)\n if (!input) return null\n if (typeof input === 'object' && input.type && input.version) return input as Envelope\n if (typeof input !== 'string') return null\n\n try {\n const obj = JSON.parse(input)\n if (obj && obj.type) return obj as Envelope\n return null\n } catch {\n return null\n }\n}\n"],"names":["encodeEnvelope","env","decodeEnvelope","input","obj"],"mappings":"gFAGO,SAASA,EAAeC,EAAuB,CACpD,OAAO,KAAK,UAAUA,CAAG,CAC3B,CAEO,SAASC,EAAeC,EAA6B,CAE1D,GAAI,CAACA,EAAO,OAAO,KACnB,GAAI,OAAOA,GAAU,UAAYA,EAAM,MAAQA,EAAM,QAAS,OAAOA,EACrE,GAAI,OAAOA,GAAU,SAAU,OAAO,KAEtC,GAAI,CACF,MAAMC,EAAM,KAAK,MAAMD,CAAK,EAC5B,OAAIC,GAAOA,EAAI,KAAaA,EACrB,IACT,MAAQ,CACN,OAAO,IACT,CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function n(e) {
|
|
2
|
+
return JSON.stringify(e);
|
|
3
|
+
}
|
|
4
|
+
function t(e) {
|
|
5
|
+
if (!e) return null;
|
|
6
|
+
if (typeof e == "object" && e.type && e.version) return e;
|
|
7
|
+
if (typeof e != "string") return null;
|
|
8
|
+
try {
|
|
9
|
+
const r = JSON.parse(e);
|
|
10
|
+
return r && r.type ? r : null;
|
|
11
|
+
} catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
t as decodeEnvelope,
|
|
17
|
+
n as encodeEnvelope
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=envelope.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.mjs","sources":["../../src/protocol/envelope.ts"],"sourcesContent":["// 自定义消息 envelope:统一序列化/反序列化\nimport type { Envelope } from '../core/types'\nimport { logTag } from '../utils/log'\nexport function encodeEnvelope(env: Envelope): string {\n return JSON.stringify(env)\n}\n\nexport function decodeEnvelope(input: any): Envelope | null {\n // logTag('input', input)\n if (!input) return null\n if (typeof input === 'object' && input.type && input.version) return input as Envelope\n if (typeof input !== 'string') return null\n\n try {\n const obj = JSON.parse(input)\n if (obj && obj.type) return obj as Envelope\n return null\n } catch {\n return null\n }\n}\n"],"names":["encodeEnvelope","env","decodeEnvelope","input","obj"],"mappings":"AAGO,SAASA,EAAeC,GAAuB;AACpD,SAAO,KAAK,UAAUA,CAAG;AAC3B;AAEO,SAASC,EAAeC,GAA6B;AAE1D,MAAI,CAACA,EAAO,QAAO;AACnB,MAAI,OAAOA,KAAU,YAAYA,EAAM,QAAQA,EAAM,QAAS,QAAOA;AACrE,MAAI,OAAOA,KAAU,SAAU,QAAO;AAEtC,MAAI;AACF,UAAMC,IAAM,KAAK,MAAMD,CAAK;AAC5B,WAAIC,KAAOA,EAAI,OAAaA,IACrB;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.cjs","sources":["../../src/protocol/guards.ts"],"sourcesContent":["// packages/im/src/protocol/guards.ts\nimport type { Envelope } from '../core/types'\n\nexport function isEnvelope(v: any): v is Envelope {\n return !!v && typeof v === 'object' && typeof v.type === 'string' && typeof v.version === 'number' && 'payload' in v\n}\n"],"names":["isEnvelope","v"],"mappings":"gFAGO,SAASA,EAAWC,EAAuB,CAChD,MAAO,CAAC,CAACA,GAAK,OAAOA,GAAM,UAAY,OAAOA,EAAE,MAAS,UAAY,OAAOA,EAAE,SAAY,UAAY,YAAaA,CACrH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.mjs","sources":["../../src/protocol/guards.ts"],"sourcesContent":["// packages/im/src/protocol/guards.ts\nimport type { Envelope } from '../core/types'\n\nexport function isEnvelope(v: any): v is Envelope {\n return !!v && typeof v === 'object' && typeof v.type === 'string' && typeof v.version === 'number' && 'payload' in v\n}\n"],"names":["isEnvelope","v"],"mappings":"AAGO,SAASA,EAAWC,GAAuB;AAChD,SAAO,CAAC,CAACA,KAAK,OAAOA,KAAM,YAAY,OAAOA,EAAE,QAAS,YAAY,OAAOA,EAAE,WAAY,YAAY,aAAaA;AACrH;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './visibility';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function t(e){const i=()=>{e(document.visibilityState==="hidden"?"hidden":"visible")};return document.addEventListener("visibilitychange",i),i(),()=>document.removeEventListener("visibilitychange",i)}exports.watchPageVisibility=t;
|
|
2
|
+
//# sourceMappingURL=visibility.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.cjs","sources":["../../src/shared/visibility.ts"],"sourcesContent":["// packages/im/src/shared/visibility.ts\nexport type PageState = 'visible' | 'hidden'\n\nexport function watchPageVisibility(cb: (s: PageState) => void) {\n const handler = () => {\n cb(document.visibilityState === 'hidden' ? 'hidden' : 'visible')\n }\n document.addEventListener('visibilitychange', handler)\n handler()\n return () => document.removeEventListener('visibilitychange', handler)\n}\n"],"names":["watchPageVisibility","cb","handler"],"mappings":"gFAGO,SAASA,EAAoBC,EAA4B,CAC9D,MAAMC,EAAU,IAAM,CACpBD,EAAG,SAAS,kBAAoB,SAAW,SAAW,SAAS,CACjE,EACA,gBAAS,iBAAiB,mBAAoBC,CAAO,EACrDA,EAAA,EACO,IAAM,SAAS,oBAAoB,mBAAoBA,CAAO,CACvE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function t(e) {
|
|
2
|
+
const i = () => {
|
|
3
|
+
e(document.visibilityState === "hidden" ? "hidden" : "visible");
|
|
4
|
+
};
|
|
5
|
+
return document.addEventListener("visibilitychange", i), i(), () => document.removeEventListener("visibilitychange", i);
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
t as watchPageVisibility
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=visibility.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.mjs","sources":["../../src/shared/visibility.ts"],"sourcesContent":["// packages/im/src/shared/visibility.ts\nexport type PageState = 'visible' | 'hidden'\n\nexport function watchPageVisibility(cb: (s: PageState) => void) {\n const handler = () => {\n cb(document.visibilityState === 'hidden' ? 'hidden' : 'visible')\n }\n document.addEventListener('visibilitychange', handler)\n handler()\n return () => document.removeEventListener('visibilitychange', handler)\n}\n"],"names":["watchPageVisibility","cb","handler"],"mappings":"AAGO,SAASA,EAAoBC,GAA4B;AAC9D,QAAMC,IAAU,MAAM;AACpB,IAAAD,EAAG,SAAS,oBAAoB,WAAW,WAAW,SAAS;AAAA,EACjE;AACA,kBAAS,iBAAiB,oBAAoBC,CAAO,GACrDA,EAAA,GACO,MAAM,SAAS,oBAAoB,oBAAoBA,CAAO;AACvE;"}
|
package/dist/style.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
.im-chat-room{width:100%;height:100%;display:flex;flex-direction:column}
|
|
2
|
+
|
|
3
|
+
.hl-im-pc[data-v-8cc13c39]{display:flex;grid-template-columns:320px 1fr;height:100%}.hl-im-pc__left[data-v-8cc13c39]{border-right:1px solid rgba(0,0,0,.08);overflow:auto}.hl-im-pc__right[data-v-8cc13c39],.hl-im-pc__chat[data-v-8cc13c39]{flex:1;display:flex;min-width:0}.hl-im-pc[data-v-8cc13c39] .message-layout__meta span,.hl-im-pc[data-v-8cc13c39] .message-input,.hl-im-pc[data-v-8cc13c39] .message-time-divider,.hl-im-pc[data-v-8cc13c39] .message-layout__nick,.hl-im-pc[data-v-8cc13c39] .text-message{font-size:var(--hl-msg-font)}
|
|
4
|
+
/*$vite$:1*/
|
|
5
|
+
.hl-font-ctrl[data-v-c45b912e]{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:8px;background:#0000000a;margin-left:8px}.hl-font-ctrl__label[data-v-c45b912e]{font-size:12px;color:#666}.hl-font-ctrl__value[data-v-c45b912e]{font-size:12px;color:#333;min-width:44px;text-align:center}.hl-font-ctrl__btn[data-v-c45b912e]{width:20px;height:24px;border:0;border-radius:6px;background:#fff;cursor:pointer;font-size:14px;line-height:24px;padding:0}.hl-font-ctrl__btn[data-v-c45b912e]:disabled{opacity:.5;cursor:not-allowed}
|
|
6
|
+
/*$vite$:1*/
|
|
7
|
+
.hl-sys-msg[data-v-8ec80450]{margin:8px auto;max-width:520px;padding:10px 12px;border-radius:10px;font-size:13px;line-height:1.45;background:#f6f6f6;color:#333}.hl-sys-msg.is-alert[data-v-8ec80450]{background:#fff5f5;color:#8a1f1f}.hl-sys-msg.is-progress[data-v-8ec80450]{background:#f0fff4;color:#1f6f3a}.hl-sys-msg.is-notice[data-v-8ec80450]{background:#f6f6f6;color:#333}.hl-sys-msg__title[data-v-8ec80450]{font-weight:600;margin-bottom:4px}.hl-sys-msg__text[data-v-8ec80450]{white-space:pre-wrap;word-break:break-word}.hl-sys-msg__actions[data-v-8ec80450]{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}.hl-sys-msg__btn[data-v-8ec80450]{border:0;border-radius:8px;padding:6px 10px;cursor:pointer;font-size:12px}.hl-sys-msg__btn.is-default[data-v-8ec80450]{background:#fff;color:#333}.hl-sys-msg__btn.is-primary[data-v-8ec80450]{background:#2f80ed;color:#fff}.hl-sys-msg__btn.is-danger[data-v-8ec80450]{background:#eb5757;color:#fff}
|
|
8
|
+
/*$vite$:1*/
|
|
9
|
+
.hl-im-h5[data-v-3e2db453],.hl-im-h5 .hl-im-h5_chat[data-v-3e2db453]{height:100%}
|
|
10
|
+
/*$vite$:1*/
|
|
11
|
+
@charset "UTF-8";.hl-conv[data-v-f4cd5529]{height:100%;display:flex;flex-direction:column;background:#fff}.hl-conv__tabs[data-v-f4cd5529]{display:flex;gap:8px;padding:10px 12px;align-items:center;position:sticky;top:0;background:#fff;z-index:1;border-bottom:1px solid rgba(0,0,0,.06)}.hl-conv__tabs button[data-v-f4cd5529]{padding:6px 10px;border-radius:999px;border:1px solid rgba(0,0,0,.1);background:#00000005;font-size:13px;line-height:18px}.hl-conv__tabs button.active[data-v-f4cd5529]{font-weight:600;background:#0000000f;border-color:#00000024}.hl-conv__search[data-v-f4cd5529]{margin-left:auto;flex:1;min-width:140px;padding:8px 10px;border-radius:999px;border:1px solid rgba(0,0,0,.1);background:#00000005;font-size:13px;outline:none}.hl-conv__search[data-v-f4cd5529]:focus{background:#fff;border-color:#00000038}.hl-conv__list[data-v-f4cd5529]{padding:6px 8px 10px;overflow:auto;flex:1}.hl-conv__item[data-v-f4cd5529]{padding:10px;border-radius:12px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s ease}.hl-conv__item[data-v-f4cd5529]:hover{background:#00000008}.hl-conv__item.active[data-v-f4cd5529]{background:#0000000f}.hl-conv__item+.hl-conv__item[data-v-f4cd5529]{margin-top:6px}.hl-conv__left[data-v-f4cd5529]{display:flex;gap:10px;align-items:center;min-width:0}.hl-conv__avatar[data-v-f4cd5529]{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;font-weight:700;font-size:14px;background:#0000000f;color:#000000b8;flex:0 0 auto}.hl-conv__main[data-v-f4cd5529]{min-width:0;flex:1}.hl-conv__row1[data-v-f4cd5529]{display:flex;align-items:baseline;gap:8px}.hl-conv__title[data-v-f4cd5529]{font-size:14px;font-weight:600;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}.hl-conv__time[data-v-f4cd5529]{flex:0 0 auto;font-size:12px;line-height:16px;opacity:.55}.hl-conv__row2[data-v-f4cd5529]{margin-top:4px;display:flex;gap:8px;align-items:center;min-width:0}.hl-conv__sub[data-v-f4cd5529]{font-size:12px;line-height:16px;opacity:.65;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}.hl-conv__tag[data-v-f4cd5529]{flex:0 0 auto;font-size:12px;line-height:16px;padding:2px 8px;border-radius:999px;border:1px solid rgba(0,0,0,.1);background:#00000005;opacity:.85}.hl-conv__empty[data-v-f4cd5529]{padding:20px;opacity:.6;text-align:center}.hl-conv__right[data-v-f4cd5529]{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:6px}.badge[data-v-f4cd5529]{display:inline-flex;min-width:18px;height:18px;padding:0 6px;border-radius:999px;align-items:center;justify-content:center;font-size:12px;line-height:18px;border:1px solid rgba(0,0,0,.12);background:#0000000f;font-weight:600}
|
|
12
|
+
/*$vite$:1*/
|
package/dist/style.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|
package/dist/style.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../protocol/envelope.cjs");function p(e){return{id:e?.conversationID??e?.id??"",type:e?.type===1||e?.type==="C2C"?"c2c":e?.type?"group":void 0,title:e?.userProfile?.nick??e?.groupProfile?.name??e?.title??"",avatar:e?.userProfile?.avatar??e?.groupProfile?.avatar??e?.avatar??"",unreadCount:e?.unreadCount??0,lastTime:e?.lastMessage?.lastTime?+e.lastMessage.lastTime:void 0,lastMessage:e?.lastMessage?s(e.lastMessage):void 0,raw:e}}function s(e){const t=e?.type||e?.payload?.type;if(t==="TIMTextElem"||t==="text")return{type:"text",payload:{text:e?.payload?.text??e?.text??""},raw:e};const n=e?.payload?.data??e?.payload?.text??e?.payload?.description,o=a.decodeEnvelope(n);return o?{type:"custom",payload:o,raw:e}:{type:"unknown",payload:e?.payload??e,raw:e}}exports.mapConversation=p;exports.mapMessage=s;
|
|
2
|
+
//# sourceMappingURL=mapper.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.cjs","sources":["../../src/tui/mapper.ts"],"sourcesContent":["// TIM/TUIKit 原始结构 -> 内部模型映射\n// packages/im/src/tui/mapper.ts\nimport type { IMConversation, IMMessage } from '../core/types'\nimport { decodeEnvelope } from '../protocol'\n\nexport function mapConversation(raw: any): IMConversation {\n return {\n id: raw?.conversationID ?? raw?.id ?? '',\n type: raw?.type === 1 || raw?.type === 'C2C' ? 'c2c' : raw?.type ? 'group' : undefined,\n title: raw?.userProfile?.nick ?? raw?.groupProfile?.name ?? raw?.title ?? '',\n avatar: raw?.userProfile?.avatar ?? raw?.groupProfile?.avatar ?? raw?.avatar ?? '',\n unreadCount: raw?.unreadCount ?? 0,\n lastTime: raw?.lastMessage?.lastTime ? +raw.lastMessage.lastTime : undefined,\n lastMessage: raw?.lastMessage ? mapMessage(raw.lastMessage) : undefined,\n raw,\n }\n}\n\nexport function mapMessage(raw: any): IMMessage {\n // 这里做一个尽量“宽松”的识别:不同 SDK/engine 结构可能略有差异\n const type = raw?.type || raw?.payload?.type\n if (type === 'TIMTextElem' || type === 'text') {\n return { type: 'text', payload: { text: raw?.payload?.text ?? raw?.text ?? '' }, raw }\n }\n\n // 自定义:优先尝试 data/text/json\n const customStr = raw?.payload?.data ?? raw?.payload?.text ?? raw?.payload?.description\n const env = decodeEnvelope(customStr)\n if (env) return { type: 'custom', payload: env, raw }\n\n return { type: 'unknown', payload: raw?.payload ?? raw, raw }\n}\n"],"names":["mapConversation","raw","mapMessage","type","customStr","env","decodeEnvelope"],"mappings":"4HAKO,SAASA,EAAgBC,EAA0B,CACxD,MAAO,CACL,GAAIA,GAAK,gBAAkBA,GAAK,IAAM,GACtC,KAAMA,GAAK,OAAS,GAAKA,GAAK,OAAS,MAAQ,MAAQA,GAAK,KAAO,QAAU,OAC7E,MAAOA,GAAK,aAAa,MAAQA,GAAK,cAAc,MAAQA,GAAK,OAAS,GAC1E,OAAQA,GAAK,aAAa,QAAUA,GAAK,cAAc,QAAUA,GAAK,QAAU,GAChF,YAAaA,GAAK,aAAe,EACjC,SAAUA,GAAK,aAAa,SAAW,CAACA,EAAI,YAAY,SAAW,OACnE,YAAaA,GAAK,YAAcC,EAAWD,EAAI,WAAW,EAAI,OAC9D,IAAAA,CAAA,CAEJ,CAEO,SAASC,EAAWD,EAAqB,CAE9C,MAAME,EAAOF,GAAK,MAAQA,GAAK,SAAS,KACxC,GAAIE,IAAS,eAAiBA,IAAS,OACrC,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,KAAMF,GAAK,SAAS,MAAQA,GAAK,MAAQ,EAAA,EAAM,IAAAA,CAAA,EAInF,MAAMG,EAAYH,GAAK,SAAS,MAAQA,GAAK,SAAS,MAAQA,GAAK,SAAS,YACtEI,EAAMC,EAAAA,eAAeF,CAAS,EACpC,OAAIC,EAAY,CAAE,KAAM,SAAU,QAASA,EAAK,IAAAJ,CAAA,EAEzC,CAAE,KAAM,UAAW,QAASA,GAAK,SAAWA,EAAK,IAAAA,CAAA,CAC1D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { decodeEnvelope as p } from "../protocol/envelope.mjs";
|
|
2
|
+
function l(t) {
|
|
3
|
+
return {
|
|
4
|
+
id: t?.conversationID ?? t?.id ?? "",
|
|
5
|
+
type: t?.type === 1 || t?.type === "C2C" ? "c2c" : t?.type ? "group" : void 0,
|
|
6
|
+
title: t?.userProfile?.nick ?? t?.groupProfile?.name ?? t?.title ?? "",
|
|
7
|
+
avatar: t?.userProfile?.avatar ?? t?.groupProfile?.avatar ?? t?.avatar ?? "",
|
|
8
|
+
unreadCount: t?.unreadCount ?? 0,
|
|
9
|
+
lastTime: t?.lastMessage?.lastTime ? +t.lastMessage.lastTime : void 0,
|
|
10
|
+
lastMessage: t?.lastMessage ? n(t.lastMessage) : void 0,
|
|
11
|
+
raw: t
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function n(t) {
|
|
15
|
+
const e = t?.type || t?.payload?.type;
|
|
16
|
+
if (e === "TIMTextElem" || e === "text")
|
|
17
|
+
return { type: "text", payload: { text: t?.payload?.text ?? t?.text ?? "" }, raw: t };
|
|
18
|
+
const s = t?.payload?.data ?? t?.payload?.text ?? t?.payload?.description, o = p(s);
|
|
19
|
+
return o ? { type: "custom", payload: o, raw: t } : { type: "unknown", payload: t?.payload ?? t, raw: t };
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
l as mapConversation,
|
|
23
|
+
n as mapMessage
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=mapper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.mjs","sources":["../../src/tui/mapper.ts"],"sourcesContent":["// TIM/TUIKit 原始结构 -> 内部模型映射\n// packages/im/src/tui/mapper.ts\nimport type { IMConversation, IMMessage } from '../core/types'\nimport { decodeEnvelope } from '../protocol'\n\nexport function mapConversation(raw: any): IMConversation {\n return {\n id: raw?.conversationID ?? raw?.id ?? '',\n type: raw?.type === 1 || raw?.type === 'C2C' ? 'c2c' : raw?.type ? 'group' : undefined,\n title: raw?.userProfile?.nick ?? raw?.groupProfile?.name ?? raw?.title ?? '',\n avatar: raw?.userProfile?.avatar ?? raw?.groupProfile?.avatar ?? raw?.avatar ?? '',\n unreadCount: raw?.unreadCount ?? 0,\n lastTime: raw?.lastMessage?.lastTime ? +raw.lastMessage.lastTime : undefined,\n lastMessage: raw?.lastMessage ? mapMessage(raw.lastMessage) : undefined,\n raw,\n }\n}\n\nexport function mapMessage(raw: any): IMMessage {\n // 这里做一个尽量“宽松”的识别:不同 SDK/engine 结构可能略有差异\n const type = raw?.type || raw?.payload?.type\n if (type === 'TIMTextElem' || type === 'text') {\n return { type: 'text', payload: { text: raw?.payload?.text ?? raw?.text ?? '' }, raw }\n }\n\n // 自定义:优先尝试 data/text/json\n const customStr = raw?.payload?.data ?? raw?.payload?.text ?? raw?.payload?.description\n const env = decodeEnvelope(customStr)\n if (env) return { type: 'custom', payload: env, raw }\n\n return { type: 'unknown', payload: raw?.payload ?? raw, raw }\n}\n"],"names":["mapConversation","raw","mapMessage","type","customStr","env","decodeEnvelope"],"mappings":";AAKO,SAASA,EAAgBC,GAA0B;AACxD,SAAO;AAAA,IACL,IAAIA,GAAK,kBAAkBA,GAAK,MAAM;AAAA,IACtC,MAAMA,GAAK,SAAS,KAAKA,GAAK,SAAS,QAAQ,QAAQA,GAAK,OAAO,UAAU;AAAA,IAC7E,OAAOA,GAAK,aAAa,QAAQA,GAAK,cAAc,QAAQA,GAAK,SAAS;AAAA,IAC1E,QAAQA,GAAK,aAAa,UAAUA,GAAK,cAAc,UAAUA,GAAK,UAAU;AAAA,IAChF,aAAaA,GAAK,eAAe;AAAA,IACjC,UAAUA,GAAK,aAAa,WAAW,CAACA,EAAI,YAAY,WAAW;AAAA,IACnE,aAAaA,GAAK,cAAcC,EAAWD,EAAI,WAAW,IAAI;AAAA,IAC9D,KAAAA;AAAA,EAAA;AAEJ;AAEO,SAASC,EAAWD,GAAqB;AAE9C,QAAME,IAAOF,GAAK,QAAQA,GAAK,SAAS;AACxC,MAAIE,MAAS,iBAAiBA,MAAS;AACrC,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE,MAAMF,GAAK,SAAS,QAAQA,GAAK,QAAQ,GAAA,GAAM,KAAAA,EAAA;AAInF,QAAMG,IAAYH,GAAK,SAAS,QAAQA,GAAK,SAAS,QAAQA,GAAK,SAAS,aACtEI,IAAMC,EAAeF,CAAS;AACpC,SAAIC,IAAY,EAAE,MAAM,UAAU,SAASA,GAAK,KAAAJ,EAAA,IAEzC,EAAE,MAAM,WAAW,SAASA,GAAK,WAAWA,GAAK,KAAAA,EAAA;AAC1D;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./mapper.cjs"),n=require("@tencentcloud/chat-uikit-engine");function c(o,r){const e=n.TUIStore.watch(n.StoreName.CONV,{conversationList:t=>r((t??[]).map(a.mapConversation)),currentConversationID:t=>(console.log("id",t),o(t))});return()=>{try{typeof e=="function"&&e()}catch{}}}exports.watchConversations=c;
|
|
2
|
+
//# sourceMappingURL=store.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.cjs","sources":["../../src/tui/store.ts"],"sourcesContent":["// TUIStore watch、会话/消息订阅桥接 只负责“订阅变化 -> 回调”\nimport { mapConversation, mapMessage } from './mapper'\nimport type { IMConversation, IMMessage } from '../core/types'\n\n// 这些 API 在 engine/quickstart/功能文档里反复出现:TUIStore.watch / StoreName.xxx 的模式:contentReference[oaicite:4]{index=4}\nimport { TUIStore, StoreName } from '@tencentcloud/chat-uikit-engine'\n\nexport function watchConversations(cb: (id: string) => void, convListCb: (conversations: IMConversation[]) => void) {\n const unwatch = TUIStore.watch(StoreName.CONV, {\n conversationList: (list: any[]) => convListCb((list ?? []).map(mapConversation)),\n // conversationListData: (list: any[]) => cb((list ?? []).map(mapConversation)),\n currentConversationID: (id) => {\n console.log('id', id)\n return cb(id)\n },\n })\n return () => {\n // 有的实现 watch 会返回 unwatch,有的没有;这里兜底\n try {\n typeof unwatch === 'function' && unwatch()\n } catch {}\n }\n}\n"],"names":["watchConversations","cb","convListCb","unwatch","TUIStore","StoreName","list","mapConversation","id"],"mappings":"6JAOO,SAASA,EAAmBC,EAA0BC,EAAuD,CAClH,MAAMC,EAAUC,EAAAA,SAAS,MAAMC,EAAAA,UAAU,KAAM,CAC7C,iBAAmBC,GAAgBJ,GAAYI,GAAQ,IAAI,IAAIC,EAAAA,eAAe,CAAC,EAE/E,sBAAwBC,IACtB,QAAQ,IAAI,KAAMA,CAAE,EACbP,EAAGO,CAAE,EACd,CACD,EACD,MAAO,IAAM,CAEX,GAAI,CACF,OAAOL,GAAY,YAAcA,EAAA,CACnC,MAAQ,CAAC,CACX,CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { mapConversation as e } from "./mapper.mjs";
|
|
2
|
+
import { TUIStore as a, StoreName as c } from "@tencentcloud/chat-uikit-engine";
|
|
3
|
+
function m(n, r) {
|
|
4
|
+
const t = a.watch(c.CONV, {
|
|
5
|
+
conversationList: (o) => r((o ?? []).map(e)),
|
|
6
|
+
// conversationListData: (list: any[]) => cb((list ?? []).map(mapConversation)),
|
|
7
|
+
currentConversationID: (o) => (console.log("id", o), n(o))
|
|
8
|
+
});
|
|
9
|
+
return () => {
|
|
10
|
+
try {
|
|
11
|
+
typeof t == "function" && t();
|
|
12
|
+
} catch {
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
m as watchConversations
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=store.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.mjs","sources":["../../src/tui/store.ts"],"sourcesContent":["// TUIStore watch、会话/消息订阅桥接 只负责“订阅变化 -> 回调”\nimport { mapConversation, mapMessage } from './mapper'\nimport type { IMConversation, IMMessage } from '../core/types'\n\n// 这些 API 在 engine/quickstart/功能文档里反复出现:TUIStore.watch / StoreName.xxx 的模式:contentReference[oaicite:4]{index=4}\nimport { TUIStore, StoreName } from '@tencentcloud/chat-uikit-engine'\n\nexport function watchConversations(cb: (id: string) => void, convListCb: (conversations: IMConversation[]) => void) {\n const unwatch = TUIStore.watch(StoreName.CONV, {\n conversationList: (list: any[]) => convListCb((list ?? []).map(mapConversation)),\n // conversationListData: (list: any[]) => cb((list ?? []).map(mapConversation)),\n currentConversationID: (id) => {\n console.log('id', id)\n return cb(id)\n },\n })\n return () => {\n // 有的实现 watch 会返回 unwatch,有的没有;这里兜底\n try {\n typeof unwatch === 'function' && unwatch()\n } catch {}\n }\n}\n"],"names":["watchConversations","cb","convListCb","unwatch","TUIStore","StoreName","list","mapConversation","id"],"mappings":";;AAOO,SAASA,EAAmBC,GAA0BC,GAAuD;AAClH,QAAMC,IAAUC,EAAS,MAAMC,EAAU,MAAM;AAAA,IAC7C,kBAAkB,CAACC,MAAgBJ,GAAYI,KAAQ,IAAI,IAAIC,CAAe,CAAC;AAAA;AAAA,IAE/E,uBAAuB,CAACC,OACtB,QAAQ,IAAI,MAAMA,CAAE,GACbP,EAAGO,CAAE;AAAA,EACd,CACD;AACD,SAAO,MAAM;AAEX,QAAI;AACF,aAAOL,KAAY,cAAcA,EAAA;AAAA,IACnC,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;"}
|
package/dist/tui/tim.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("./store.cjs"),I=require("@tencentcloud/chat"),h=require("@tencentcloud/tui-core"),o=require("@tencentcloud/chat-uikit-engine"),S=require("../utils/log.cjs");function p(){let a=null,c=null,l=null,u=null,d=null,i=null,g=null,v=[],s=null,C=null;function E(){if(s=o.TUIChatEngine.chat,!s)return;C?.(),C=null;const e=t=>{const n=t?.data??[];if(!n.length)return;const r=n[0]?.conversationID||n[0]?.conversationId||"";S.logTag("MESSAGE_RECEIVED",{conversationId:r,size:n.length,event:t}),l?.({conversationId:r,messages:n})};s.on(I.EVENT.MESSAGE_RECEIVED,e),C=()=>{s?.off?.(I.EVENT.MESSAGE_RECEIVED,e)}}return{async init(){a?.({state:"connecting"}),i?.(),i=T.watchConversations(e=>{g=e,u?.({conversationId:g})},e=>{v=e,d?.({conversations:e})})},async login({userID:e,userSig:t,SDKAppID:n}){try{await h.TUILogin.login({SDKAppID:Number(n)??0,userID:e,userSig:t}),E(),a?.({state:"connected"})}catch(r){throw a?.({state:"disconnected",reason:"login_failed"}),c?.({code:"LOGIN_FAILED",message:r?.message??"login failed",detail:r}),r}},async logout(){i?.(),i=null,await h.TUILogin.logout(),a?.({state:"disconnected",reason:"logout"})},async switchConversation(e){await o.TUIConversationService.switchConversation(e)},getActiveConversationId(){return g??""},getConversations(){return v},async sendText({conversationId:e,text:t}){await o.TUIChatService.sendTextMessage({payload:{text:t}})},async sendCustom({envelope:e}){await o.TUIChatService.sendCustomMessage(e)},async updateNick(e){return o.TUIUserService.updateMyProfile({nick:e}).then(n=>(console.log("res",n),n))},async createGroup(e,t){return o.TUIGroupService.createGroup({type:o.TUIChatEngine.TYPES.GRP_WORK,name:e,joinOption:"free",memberList:t})},async updateMyNameCard(e,t){const n=o.TUIChatService.chat;if(!n)throw new Error("chat 实例不存在,请完成初始化");const r=n.getUserID?.();if(!r)throw new Error("userID 不存在,请完成登录");return o.TUIGroupService.setGroupMemberNameCard({groupID:e,userID:r,nameCard:t})},onMessageReceived(e){return l=e,E(),()=>{l=null}},onActiveConversationChanged(e){return u=e,()=>{u=null}},onConversationListChanged(e){return d=e,()=>{d=null}},onConnectionState(e){return a=e,()=>{a=null}},onError(e){return c=e,()=>{c=null}}}}exports.createTuiDriver=p;
|
|
2
|
+
//# sourceMappingURL=tim.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tim.cjs","sources":["../../src/tui/tim.ts"],"sourcesContent":["// TIM 实例创建/初始化封装\nimport type { ConnectionState, IMDriver, IMMessage, IMConversation } from '../core/types'\nimport { watchConversations } from './store'\nimport TencentCloudChat from '@tencentcloud/chat'\n\n// 登录/服务:官方推荐用 TUILogin\nimport { TUILogin } from '@tencentcloud/tui-core'\n\n// engine 的服务层在示例实现里会调用 TUIChatService / TUIConversationService 来发消息/切会话:contentReference[oaicite:6]{index=6}\nimport {\n TUIChatService,\n TUIGroupService,\n TUIChatEngine,\n TUIUserService,\n TUIConversationService,\n} from '@tencentcloud/chat-uikit-engine'\nimport { logTag } from '../utils/log'\n\nexport function createTuiDriver(): IMDriver {\n let connCb: ((p: { state: ConnectionState; reason?: string }) => void) | null = null\n let errCb: ((p: { code: string; message: string; detail?: any }) => void) | null = null\n let msgCb: ((p: { conversationId: string; messages: IMMessage[] }) => void) | null = null\n let convCb: ((p: { conversationId: string }) => void) | null = null\n let convListCb: ((p: { conversations: IMConversation[] }) => void) | null = null\n\n let stopWatchConv: null | (() => void) = null\n\n let activeConversationId: string | null = null\n // let conversations: IMConversation[] = []\n let cachedConvs: IMConversation[] = []\n\n let tim: any = null\n let offMessageReceived: null | (() => void) = null\n\n function bindTimEvents() {\n tim = TUIChatEngine.chat\n if (!tim) return\n\n // 避免重复绑定\n offMessageReceived?.()\n offMessageReceived = null\n\n const handler = (event: any) => {\n const list = (event?.data ?? []) as any[]\n if (!list.length) return\n\n const conversationId = list[0]?.conversationID || list[0]?.conversationId || ''\n logTag('MESSAGE_RECEIVED', { conversationId, size: list.length, event })\n // 直接抛原始 TIM messageList\n msgCb?.({ conversationId, messages: list })\n }\n\n // 正式监听 TIM 的 MESSAGE_RECEIVED\n tim.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, handler)\n\n // 返回解绑\n offMessageReceived = () => {\n tim?.off?.(TencentCloudChat.EVENT.MESSAGE_RECEIVED, handler)\n }\n }\n\n return {\n async init() {\n connCb?.({ state: 'connecting' })\n\n // 订阅会话变化(用于你们自定义会话列表)\n stopWatchConv?.()\n stopWatchConv = watchConversations(\n (id) => {\n activeConversationId = id\n convCb?.({ conversationId: activeConversationId })\n },\n (conversations) => {\n cachedConvs = conversations\n convListCb?.({ conversations })\n }\n )\n },\n\n async login({ userID, userSig, SDKAppID }) {\n try {\n await TUILogin.login({\n SDKAppID: Number(SDKAppID) ?? 0,\n userID,\n userSig,\n // 其他可选:useUploadPlugin / framework / language 等\n } as any)\n bindTimEvents()\n connCb?.({ state: 'connected' })\n } catch (e: any) {\n connCb?.({ state: 'disconnected', reason: 'login_failed' })\n errCb?.({ code: 'LOGIN_FAILED', message: e?.message ?? 'login failed', detail: e })\n throw e\n }\n },\n\n async logout() {\n stopWatchConv?.()\n stopWatchConv = null\n // cachedConvs = []\n await TUILogin.logout()\n connCb?.({ state: 'disconnected', reason: 'logout' })\n },\n\n async switchConversation(conversationId) {\n await TUIConversationService.switchConversation(conversationId)\n },\n\n getActiveConversationId() {\n return activeConversationId ?? ''\n },\n\n getConversations() {\n return cachedConvs\n },\n\n async sendText({ conversationId, text }) {\n await TUIChatService.sendTextMessage({ payload: { text } }) // engine 示例做法:contentReference[oaicite:8]{index=8}\n },\n\n async sendCustom({ envelope }) {\n await TUIChatService.sendCustomMessage(envelope)\n },\n\n async updateNick(nick: string) {\n const promise = TUIUserService.updateMyProfile({ nick })\n return promise.then((res) => {\n console.log('res', res)\n return res\n })\n },\n\n async createGroup(groupName: string, memberList: any[]) {\n return TUIGroupService.createGroup({\n type: TUIChatEngine.TYPES.GRP_WORK,\n name: groupName,\n joinOption: 'free',\n memberList,\n })\n },\n\n async updateMyNameCard(groupID: string, nameCard: string) {\n const chat = TUIChatService.chat\n if (!chat) {\n throw new Error('chat 实例不存在,请完成初始化')\n }\n const userID = chat.getUserID?.()\n if (!userID) {\n throw new Error('userID 不存在,请完成登录')\n }\n return TUIGroupService.setGroupMemberNameCard({\n groupID,\n userID,\n nameCard,\n })\n },\n\n onMessageReceived(cb) {\n msgCb = cb\n bindTimEvents()\n return () => {\n msgCb = null\n }\n },\n\n onActiveConversationChanged(cb) {\n convCb = cb\n return () => {\n convCb = null\n }\n },\n\n onConversationListChanged(cb) {\n convListCb = cb\n return () => {\n convListCb = null\n }\n },\n\n onConnectionState(cb) {\n connCb = cb\n return () => {\n connCb = null\n }\n },\n\n onError(cb) {\n errCb = cb\n return () => {\n errCb = null\n }\n },\n }\n}\n"],"names":["createTuiDriver","connCb","errCb","msgCb","convCb","convListCb","stopWatchConv","activeConversationId","cachedConvs","tim","offMessageReceived","bindTimEvents","TUIChatEngine","handler","event","list","conversationId","logTag","TencentCloudChat","watchConversations","id","conversations","userID","userSig","SDKAppID","TUILogin","e","TUIConversationService","text","TUIChatService","envelope","nick","TUIUserService","res","groupName","memberList","TUIGroupService","groupID","nameCard","chat","cb"],"mappings":"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"}
|
package/dist/tui/tim.mjs
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { watchConversations as f } from "./store.mjs";
|
|
2
|
+
import m from "@tencentcloud/chat";
|
|
3
|
+
import { TUILogin as h } from "@tencentcloud/tui-core";
|
|
4
|
+
import { TUIChatService as g, TUIGroupService as I, TUIChatEngine as p, TUIUserService as T, TUIConversationService as y } from "@tencentcloud/chat-uikit-engine";
|
|
5
|
+
import { logTag as w } from "../utils/log.mjs";
|
|
6
|
+
function U() {
|
|
7
|
+
let r = null, i = null, l = null, c = null, u = null, a = null, d = null, v = [], s = null, C = null;
|
|
8
|
+
function E() {
|
|
9
|
+
if (s = p.chat, !s) return;
|
|
10
|
+
C?.(), C = null;
|
|
11
|
+
const e = (t) => {
|
|
12
|
+
const n = t?.data ?? [];
|
|
13
|
+
if (!n.length) return;
|
|
14
|
+
const o = n[0]?.conversationID || n[0]?.conversationId || "";
|
|
15
|
+
w("MESSAGE_RECEIVED", { conversationId: o, size: n.length, event: t }), l?.({ conversationId: o, messages: n });
|
|
16
|
+
};
|
|
17
|
+
s.on(m.EVENT.MESSAGE_RECEIVED, e), C = () => {
|
|
18
|
+
s?.off?.(m.EVENT.MESSAGE_RECEIVED, e);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
async init() {
|
|
23
|
+
r?.({ state: "connecting" }), a?.(), a = f(
|
|
24
|
+
(e) => {
|
|
25
|
+
d = e, c?.({ conversationId: d });
|
|
26
|
+
},
|
|
27
|
+
(e) => {
|
|
28
|
+
v = e, u?.({ conversations: e });
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
},
|
|
32
|
+
async login({ userID: e, userSig: t, SDKAppID: n }) {
|
|
33
|
+
try {
|
|
34
|
+
await h.login({
|
|
35
|
+
SDKAppID: Number(n) ?? 0,
|
|
36
|
+
userID: e,
|
|
37
|
+
userSig: t
|
|
38
|
+
// 其他可选:useUploadPlugin / framework / language 等
|
|
39
|
+
}), E(), r?.({ state: "connected" });
|
|
40
|
+
} catch (o) {
|
|
41
|
+
throw r?.({ state: "disconnected", reason: "login_failed" }), i?.({ code: "LOGIN_FAILED", message: o?.message ?? "login failed", detail: o }), o;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
async logout() {
|
|
45
|
+
a?.(), a = null, await h.logout(), r?.({ state: "disconnected", reason: "logout" });
|
|
46
|
+
},
|
|
47
|
+
async switchConversation(e) {
|
|
48
|
+
await y.switchConversation(e);
|
|
49
|
+
},
|
|
50
|
+
getActiveConversationId() {
|
|
51
|
+
return d ?? "";
|
|
52
|
+
},
|
|
53
|
+
getConversations() {
|
|
54
|
+
return v;
|
|
55
|
+
},
|
|
56
|
+
async sendText({ conversationId: e, text: t }) {
|
|
57
|
+
await g.sendTextMessage({ payload: { text: t } });
|
|
58
|
+
},
|
|
59
|
+
async sendCustom({ envelope: e }) {
|
|
60
|
+
await g.sendCustomMessage(e);
|
|
61
|
+
},
|
|
62
|
+
async updateNick(e) {
|
|
63
|
+
return T.updateMyProfile({ nick: e }).then((n) => (console.log("res", n), n));
|
|
64
|
+
},
|
|
65
|
+
async createGroup(e, t) {
|
|
66
|
+
return I.createGroup({
|
|
67
|
+
type: p.TYPES.GRP_WORK,
|
|
68
|
+
name: e,
|
|
69
|
+
joinOption: "free",
|
|
70
|
+
memberList: t
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
async updateMyNameCard(e, t) {
|
|
74
|
+
const n = g.chat;
|
|
75
|
+
if (!n)
|
|
76
|
+
throw new Error("chat 实例不存在,请完成初始化");
|
|
77
|
+
const o = n.getUserID?.();
|
|
78
|
+
if (!o)
|
|
79
|
+
throw new Error("userID 不存在,请完成登录");
|
|
80
|
+
return I.setGroupMemberNameCard({
|
|
81
|
+
groupID: e,
|
|
82
|
+
userID: o,
|
|
83
|
+
nameCard: t
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
onMessageReceived(e) {
|
|
87
|
+
return l = e, E(), () => {
|
|
88
|
+
l = null;
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
onActiveConversationChanged(e) {
|
|
92
|
+
return c = e, () => {
|
|
93
|
+
c = null;
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
onConversationListChanged(e) {
|
|
97
|
+
return u = e, () => {
|
|
98
|
+
u = null;
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
onConnectionState(e) {
|
|
102
|
+
return r = e, () => {
|
|
103
|
+
r = null;
|
|
104
|
+
};
|
|
105
|
+
},
|
|
106
|
+
onError(e) {
|
|
107
|
+
return i = e, () => {
|
|
108
|
+
i = null;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export {
|
|
114
|
+
U as createTuiDriver
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=tim.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tim.mjs","sources":["../../src/tui/tim.ts"],"sourcesContent":["// TIM 实例创建/初始化封装\nimport type { ConnectionState, IMDriver, IMMessage, IMConversation } from '../core/types'\nimport { watchConversations } from './store'\nimport TencentCloudChat from '@tencentcloud/chat'\n\n// 登录/服务:官方推荐用 TUILogin\nimport { TUILogin } from '@tencentcloud/tui-core'\n\n// engine 的服务层在示例实现里会调用 TUIChatService / TUIConversationService 来发消息/切会话:contentReference[oaicite:6]{index=6}\nimport {\n TUIChatService,\n TUIGroupService,\n TUIChatEngine,\n TUIUserService,\n TUIConversationService,\n} from '@tencentcloud/chat-uikit-engine'\nimport { logTag } from '../utils/log'\n\nexport function createTuiDriver(): IMDriver {\n let connCb: ((p: { state: ConnectionState; reason?: string }) => void) | null = null\n let errCb: ((p: { code: string; message: string; detail?: any }) => void) | null = null\n let msgCb: ((p: { conversationId: string; messages: IMMessage[] }) => void) | null = null\n let convCb: ((p: { conversationId: string }) => void) | null = null\n let convListCb: ((p: { conversations: IMConversation[] }) => void) | null = null\n\n let stopWatchConv: null | (() => void) = null\n\n let activeConversationId: string | null = null\n // let conversations: IMConversation[] = []\n let cachedConvs: IMConversation[] = []\n\n let tim: any = null\n let offMessageReceived: null | (() => void) = null\n\n function bindTimEvents() {\n tim = TUIChatEngine.chat\n if (!tim) return\n\n // 避免重复绑定\n offMessageReceived?.()\n offMessageReceived = null\n\n const handler = (event: any) => {\n const list = (event?.data ?? []) as any[]\n if (!list.length) return\n\n const conversationId = list[0]?.conversationID || list[0]?.conversationId || ''\n logTag('MESSAGE_RECEIVED', { conversationId, size: list.length, event })\n // 直接抛原始 TIM messageList\n msgCb?.({ conversationId, messages: list })\n }\n\n // 正式监听 TIM 的 MESSAGE_RECEIVED\n tim.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, handler)\n\n // 返回解绑\n offMessageReceived = () => {\n tim?.off?.(TencentCloudChat.EVENT.MESSAGE_RECEIVED, handler)\n }\n }\n\n return {\n async init() {\n connCb?.({ state: 'connecting' })\n\n // 订阅会话变化(用于你们自定义会话列表)\n stopWatchConv?.()\n stopWatchConv = watchConversations(\n (id) => {\n activeConversationId = id\n convCb?.({ conversationId: activeConversationId })\n },\n (conversations) => {\n cachedConvs = conversations\n convListCb?.({ conversations })\n }\n )\n },\n\n async login({ userID, userSig, SDKAppID }) {\n try {\n await TUILogin.login({\n SDKAppID: Number(SDKAppID) ?? 0,\n userID,\n userSig,\n // 其他可选:useUploadPlugin / framework / language 等\n } as any)\n bindTimEvents()\n connCb?.({ state: 'connected' })\n } catch (e: any) {\n connCb?.({ state: 'disconnected', reason: 'login_failed' })\n errCb?.({ code: 'LOGIN_FAILED', message: e?.message ?? 'login failed', detail: e })\n throw e\n }\n },\n\n async logout() {\n stopWatchConv?.()\n stopWatchConv = null\n // cachedConvs = []\n await TUILogin.logout()\n connCb?.({ state: 'disconnected', reason: 'logout' })\n },\n\n async switchConversation(conversationId) {\n await TUIConversationService.switchConversation(conversationId)\n },\n\n getActiveConversationId() {\n return activeConversationId ?? ''\n },\n\n getConversations() {\n return cachedConvs\n },\n\n async sendText({ conversationId, text }) {\n await TUIChatService.sendTextMessage({ payload: { text } }) // engine 示例做法:contentReference[oaicite:8]{index=8}\n },\n\n async sendCustom({ envelope }) {\n await TUIChatService.sendCustomMessage(envelope)\n },\n\n async updateNick(nick: string) {\n const promise = TUIUserService.updateMyProfile({ nick })\n return promise.then((res) => {\n console.log('res', res)\n return res\n })\n },\n\n async createGroup(groupName: string, memberList: any[]) {\n return TUIGroupService.createGroup({\n type: TUIChatEngine.TYPES.GRP_WORK,\n name: groupName,\n joinOption: 'free',\n memberList,\n })\n },\n\n async updateMyNameCard(groupID: string, nameCard: string) {\n const chat = TUIChatService.chat\n if (!chat) {\n throw new Error('chat 实例不存在,请完成初始化')\n }\n const userID = chat.getUserID?.()\n if (!userID) {\n throw new Error('userID 不存在,请完成登录')\n }\n return TUIGroupService.setGroupMemberNameCard({\n groupID,\n userID,\n nameCard,\n })\n },\n\n onMessageReceived(cb) {\n msgCb = cb\n bindTimEvents()\n return () => {\n msgCb = null\n }\n },\n\n onActiveConversationChanged(cb) {\n convCb = cb\n return () => {\n convCb = null\n }\n },\n\n onConversationListChanged(cb) {\n convListCb = cb\n return () => {\n convListCb = null\n }\n },\n\n onConnectionState(cb) {\n connCb = cb\n return () => {\n connCb = null\n }\n },\n\n onError(cb) {\n errCb = cb\n return () => {\n errCb = null\n }\n },\n }\n}\n"],"names":["createTuiDriver","connCb","errCb","msgCb","convCb","convListCb","stopWatchConv","activeConversationId","cachedConvs","tim","offMessageReceived","bindTimEvents","TUIChatEngine","handler","event","list","conversationId","logTag","TencentCloudChat","watchConversations","id","conversations","userID","userSig","SDKAppID","TUILogin","e","TUIConversationService","text","TUIChatService","envelope","nick","TUIUserService","res","groupName","memberList","TUIGroupService","groupID","nameCard","chat","cb"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontSizeControl.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label?: string;
|
|
3
|
+
value: number;
|
|
4
|
+
min?: number;
|
|
5
|
+
max?: number;
|
|
6
|
+
step?: number;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
9
|
+
change: (v: number) => any;
|
|
10
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
11
|
+
onChange?: ((v: number) => any) | undefined;
|
|
12
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import o from "./FontSizeControl.vue2.mjs";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
4
|
+
const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-c45b912e"]]);
|
|
5
|
+
export {
|
|
6
|
+
p as default
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=FontSizeControl.vue.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontSizeControl.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),s=require("../../utils/log.cjs"),m={class:"hl-font-ctrl"},h={class:"hl-font-ctrl__label"},_=["disabled"],b={class:"hl-font-ctrl__value"},g=["disabled"],f=e.defineComponent({__name:"FontSizeControl",props:{label:{},value:{},min:{},max:{},step:{}},emits:["change"],setup(o,{emit:r}){const t=o,a=r,c=t.min??12,i=t.max??20,l=t.step??1;function u(){s.logTag("dec",t.value,c,l);const n=Math.max(c,t.value-l);s.logTag("dec",n),a("change",n)}function d(){const n=Math.min(i,t.value+l);s.logTag("inc",n),a("change",n)}return(n,p)=>(e.openBlock(),e.createElementBlock("div",m,[e.createElementVNode("span",h,e.toDisplayString(o.label),1),e.createElementVNode("button",{class:"hl-font-ctrl__btn",type:"button",disabled:o.value<=e.unref(c),onClick:u},"-",8,_),e.createElementVNode("span",b,e.toDisplayString(o.value)+"px",1),e.createElementVNode("button",{class:"hl-font-ctrl__btn",type:"button",disabled:o.value>=e.unref(i),onClick:d},"+",8,g)]))}});module.exports=f;
|
|
2
|
+
//# sourceMappingURL=FontSizeControl.vue2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontSizeControl.vue2.cjs","sources":["../../../src/ui/components/FontSizeControl.vue"],"sourcesContent":["<template>\n <div class=\"hl-font-ctrl\">\n <span class=\"hl-font-ctrl__label\">{{ label }}</span>\n\n <button class=\"hl-font-ctrl__btn\" type=\"button\" :disabled=\"value <= min\" @click=\"dec\">-</button>\n <span class=\"hl-font-ctrl__value\">{{ value }}px</span>\n <button class=\"hl-font-ctrl__btn\" type=\"button\" :disabled=\"value >= max\" @click=\"inc\">+</button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { logTag } from '../../utils/log'\nconst props = defineProps<{\n label?: string\n value: number\n min?: number\n max?: number\n step?: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'change', v: number): void\n}>()\n\nconst min = props.min ?? 12\nconst max = props.max ?? 20\nconst step = props.step ?? 1\n\nfunction dec() {\n logTag('dec', props.value, min, step)\n const next = Math.max(min, props.value - step)\n logTag('dec', next)\n emit('change', next)\n}\nfunction inc() {\n const next = Math.min(max, props.value + step)\n logTag('inc', next)\n emit('change', next)\n}\n</script>\n\n<style scoped lang=\"scss\">\n.hl-font-ctrl {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.04);\n margin-left: 8px;\n}\n\n.hl-font-ctrl__label {\n font-size: 12px;\n color: #666;\n}\n\n.hl-font-ctrl__value {\n font-size: 12px;\n color: #333;\n min-width: 44px;\n text-align: center;\n}\n\n.hl-font-ctrl__btn {\n width: 20px;\n height: 24px;\n border: 0;\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n font-size: 14px;\n line-height: 24px;\n padding: 0;\n}\n\n.hl-font-ctrl__btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n</style>\n"],"names":["props","__props","emit","__emit","min","max","step","dec","logTag","next","inc","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_unref","_hoisted_3","_hoisted_4","_hoisted_5"],"mappings":"6TAYA,MAAMA,EAAQC,EAQRC,EAAOC,EAIPC,EAAMJ,EAAM,KAAO,GACnBK,EAAML,EAAM,KAAO,GACnBM,EAAON,EAAM,MAAQ,EAE3B,SAASO,GAAM,CACbC,EAAAA,OAAO,MAAOR,EAAM,MAAOI,EAAKE,CAAI,EACpC,MAAMG,EAAO,KAAK,IAAIL,EAAKJ,EAAM,MAAQM,CAAI,EAC7CE,EAAAA,OAAO,MAAOC,CAAI,EAClBP,EAAK,SAAUO,CAAI,CACrB,CACA,SAASC,GAAM,CACb,MAAMD,EAAO,KAAK,IAAIJ,EAAKL,EAAM,MAAQM,CAAI,EAC7CE,EAAAA,OAAO,MAAOC,CAAI,EAClBP,EAAK,SAAUO,CAAI,CACrB,eArCEE,YAAA,EAAAC,qBAMM,MANNC,EAMM,CALJC,EAAAA,mBAAoD,OAApDC,EAAoDC,EAAAA,gBAAff,EAAA,KAAK,EAAA,CAAA,EAE1Ca,EAAAA,mBAAgG,SAAA,CAAxF,MAAM,oBAAoB,KAAK,SAAU,SAAUb,EAAA,OAASgB,EAAAA,MAAAb,CAAA,EAAM,QAAOG,CAAA,EAAK,IAAC,EAAAW,CAAA,EACvFJ,qBAAsD,OAAtDK,EAAsDH,EAAAA,gBAAjBf,EAAA,KAAK,EAAG,KAAE,CAAA,EAC/Ca,EAAAA,mBAAgG,SAAA,CAAxF,MAAM,oBAAoB,KAAK,SAAU,SAAUb,EAAA,OAASgB,EAAAA,MAAAZ,CAAA,EAAM,QAAOK,CAAA,EAAK,IAAC,EAAAU,CAAA,CAAA"}
|