@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.
Files changed (200) hide show
  1. package/dist/_virtual/_plugin-vue_export-helper.cjs +2 -0
  2. package/dist/_virtual/_plugin-vue_export-helper.cjs.map +1 -0
  3. package/dist/_virtual/_plugin-vue_export-helper.mjs +10 -0
  4. package/dist/_virtual/_plugin-vue_export-helper.mjs.map +1 -0
  5. package/dist/api/auth.cjs +2 -0
  6. package/dist/api/auth.cjs.map +1 -0
  7. package/dist/api/auth.d.ts +48 -0
  8. package/dist/api/auth.mjs +30 -0
  9. package/dist/api/auth.mjs.map +1 -0
  10. package/dist/core/client.cjs +2 -0
  11. package/dist/core/client.cjs.map +1 -0
  12. package/dist/core/client.d.ts +38 -0
  13. package/dist/core/client.mjs +117 -0
  14. package/dist/core/client.mjs.map +1 -0
  15. package/dist/core/createClient.cjs +2 -0
  16. package/dist/core/createClient.cjs.map +1 -0
  17. package/dist/core/createClient.d.ts +6 -0
  18. package/dist/core/createClient.mjs +9 -0
  19. package/dist/core/createClient.mjs.map +1 -0
  20. package/dist/core/events.d.ts +36 -0
  21. package/dist/core/index.d.ts +4 -0
  22. package/dist/core/types.d.ts +127 -0
  23. package/dist/http/createHttp.cjs +2 -0
  24. package/dist/http/createHttp.cjs.map +1 -0
  25. package/dist/http/createHttp.d.ts +5 -0
  26. package/dist/http/createHttp.mjs +29 -0
  27. package/dist/http/createHttp.mjs.map +1 -0
  28. package/dist/http/types.cjs +2 -0
  29. package/dist/http/types.cjs.map +1 -0
  30. package/dist/http/types.d.ts +14 -0
  31. package/dist/http/types.mjs +9 -0
  32. package/dist/http/types.mjs.map +1 -0
  33. package/dist/index.cjs +2 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.mjs +38 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/mock.cjs +2 -0
  39. package/dist/mock.cjs.map +1 -0
  40. package/dist/mock.d.ts +2 -0
  41. package/dist/mock.mjs +7 -0
  42. package/dist/mock.mjs.map +1 -0
  43. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.cjs +2 -0
  44. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.cjs.map +1 -0
  45. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.mjs +20 -0
  46. package/dist/node_modules/.pnpm/mitt@3.0.1/node_modules/mitt/dist/mitt.mjs.map +1 -0
  47. package/dist/protocol/envelope.cjs +2 -0
  48. package/dist/protocol/envelope.cjs.map +1 -0
  49. package/dist/protocol/envelope.d.ts +3 -0
  50. package/dist/protocol/envelope.mjs +19 -0
  51. package/dist/protocol/envelope.mjs.map +1 -0
  52. package/dist/protocol/guards.cjs +2 -0
  53. package/dist/protocol/guards.cjs.map +1 -0
  54. package/dist/protocol/guards.d.ts +2 -0
  55. package/dist/protocol/guards.mjs +7 -0
  56. package/dist/protocol/guards.mjs.map +1 -0
  57. package/dist/protocol/index.d.ts +2 -0
  58. package/dist/shared/index.d.ts +1 -0
  59. package/dist/shared/visibility.cjs +2 -0
  60. package/dist/shared/visibility.cjs.map +1 -0
  61. package/dist/shared/visibility.d.ts +2 -0
  62. package/dist/shared/visibility.mjs +10 -0
  63. package/dist/shared/visibility.mjs.map +1 -0
  64. package/dist/style.cjs +2 -0
  65. package/dist/style.cjs.map +1 -0
  66. package/dist/style.css +12 -0
  67. package/dist/style.d.ts +1 -0
  68. package/dist/style.mjs +2 -0
  69. package/dist/style.mjs.map +1 -0
  70. package/dist/tui/mapper.cjs +2 -0
  71. package/dist/tui/mapper.cjs.map +1 -0
  72. package/dist/tui/mapper.d.ts +3 -0
  73. package/dist/tui/mapper.mjs +25 -0
  74. package/dist/tui/mapper.mjs.map +1 -0
  75. package/dist/tui/store.cjs +2 -0
  76. package/dist/tui/store.cjs.map +1 -0
  77. package/dist/tui/store.d.ts +2 -0
  78. package/dist/tui/store.mjs +19 -0
  79. package/dist/tui/store.mjs.map +1 -0
  80. package/dist/tui/tim.cjs +2 -0
  81. package/dist/tui/tim.cjs.map +1 -0
  82. package/dist/tui/tim.d.ts +2 -0
  83. package/dist/tui/tim.mjs +116 -0
  84. package/dist/tui/tim.mjs.map +1 -0
  85. package/dist/ui/components/FontSizeControl.vue.cjs +2 -0
  86. package/dist/ui/components/FontSizeControl.vue.cjs.map +1 -0
  87. package/dist/ui/components/FontSizeControl.vue.d.ts +13 -0
  88. package/dist/ui/components/FontSizeControl.vue.mjs +8 -0
  89. package/dist/ui/components/FontSizeControl.vue.mjs.map +1 -0
  90. package/dist/ui/components/FontSizeControl.vue2.cjs +2 -0
  91. package/dist/ui/components/FontSizeControl.vue2.cjs.map +1 -0
  92. package/dist/ui/components/FontSizeControl.vue2.mjs +45 -0
  93. package/dist/ui/components/FontSizeControl.vue2.mjs.map +1 -0
  94. package/dist/ui/components/ImChatRoom.vue.cjs +2 -0
  95. package/dist/ui/components/ImChatRoom.vue.cjs.map +1 -0
  96. package/dist/ui/components/ImChatRoom.vue.d.ts +38 -0
  97. package/dist/ui/components/ImChatRoom.vue.mjs +55 -0
  98. package/dist/ui/components/ImChatRoom.vue.mjs.map +1 -0
  99. package/dist/ui/components/ImChatRoom.vue2.cjs +2 -0
  100. package/dist/ui/components/ImChatRoom.vue2.cjs.map +1 -0
  101. package/dist/ui/components/ImChatRoom.vue2.mjs +5 -0
  102. package/dist/ui/components/ImChatRoom.vue2.mjs.map +1 -0
  103. package/dist/ui/components/ImKit.vue.cjs +2 -0
  104. package/dist/ui/components/ImKit.vue.cjs.map +1 -0
  105. package/dist/ui/components/ImKit.vue.d.ts +17 -0
  106. package/dist/ui/components/ImKit.vue.mjs +17 -0
  107. package/dist/ui/components/ImKit.vue.mjs.map +1 -0
  108. package/dist/ui/components/ImKit.vue2.cjs +2 -0
  109. package/dist/ui/components/ImKit.vue2.cjs.map +1 -0
  110. package/dist/ui/components/ImKit.vue2.mjs +5 -0
  111. package/dist/ui/components/ImKit.vue2.mjs.map +1 -0
  112. package/dist/ui/components/ImMessageInput.vue.cjs +2 -0
  113. package/dist/ui/components/ImMessageInput.vue.cjs.map +1 -0
  114. package/dist/ui/components/ImMessageInput.vue.d.ts +22 -0
  115. package/dist/ui/components/ImMessageInput.vue.mjs +5 -0
  116. package/dist/ui/components/ImMessageInput.vue.mjs.map +1 -0
  117. package/dist/ui/components/ImMessageInput.vue2.cjs +2 -0
  118. package/dist/ui/components/ImMessageInput.vue2.cjs.map +1 -0
  119. package/dist/ui/components/ImMessageInput.vue2.mjs +33 -0
  120. package/dist/ui/components/ImMessageInput.vue2.mjs.map +1 -0
  121. package/dist/ui/components/PcConversationListSplit.vue.cjs +2 -0
  122. package/dist/ui/components/PcConversationListSplit.vue.cjs.map +1 -0
  123. package/dist/ui/components/PcConversationListSplit.vue.d.ts +8 -0
  124. package/dist/ui/components/PcConversationListSplit.vue.mjs +8 -0
  125. package/dist/ui/components/PcConversationListSplit.vue.mjs.map +1 -0
  126. package/dist/ui/components/PcConversationListSplit.vue2.cjs +2 -0
  127. package/dist/ui/components/PcConversationListSplit.vue2.cjs.map +1 -0
  128. package/dist/ui/components/PcConversationListSplit.vue2.mjs +90 -0
  129. package/dist/ui/components/PcConversationListSplit.vue2.mjs.map +1 -0
  130. package/dist/ui/components/SysMessage.vue.cjs +2 -0
  131. package/dist/ui/components/SysMessage.vue.cjs.map +1 -0
  132. package/dist/ui/components/SysMessage.vue.d.ts +19 -0
  133. package/dist/ui/components/SysMessage.vue.mjs +8 -0
  134. package/dist/ui/components/SysMessage.vue.mjs.map +1 -0
  135. package/dist/ui/components/SysMessage.vue2.cjs +2 -0
  136. package/dist/ui/components/SysMessage.vue2.cjs.map +1 -0
  137. package/dist/ui/components/SysMessage.vue2.mjs +42 -0
  138. package/dist/ui/components/SysMessage.vue2.mjs.map +1 -0
  139. package/dist/ui/index.d.ts +8 -0
  140. package/dist/ui/layouts/ChatLayoutH5.vue.cjs +2 -0
  141. package/dist/ui/layouts/ChatLayoutH5.vue.cjs.map +1 -0
  142. package/dist/ui/layouts/ChatLayoutH5.vue.d.ts +22 -0
  143. package/dist/ui/layouts/ChatLayoutH5.vue.mjs +8 -0
  144. package/dist/ui/layouts/ChatLayoutH5.vue.mjs.map +1 -0
  145. package/dist/ui/layouts/ChatLayoutH5.vue2.cjs +2 -0
  146. package/dist/ui/layouts/ChatLayoutH5.vue2.cjs.map +1 -0
  147. package/dist/ui/layouts/ChatLayoutH5.vue2.mjs +49 -0
  148. package/dist/ui/layouts/ChatLayoutH5.vue2.mjs.map +1 -0
  149. package/dist/ui/layouts/ChatLayoutPc.vue.cjs +2 -0
  150. package/dist/ui/layouts/ChatLayoutPc.vue.cjs.map +1 -0
  151. package/dist/ui/layouts/ChatLayoutPc.vue.d.ts +39 -0
  152. package/dist/ui/layouts/ChatLayoutPc.vue.mjs +8 -0
  153. package/dist/ui/layouts/ChatLayoutPc.vue.mjs.map +1 -0
  154. package/dist/ui/layouts/ChatLayoutPc.vue2.cjs +2 -0
  155. package/dist/ui/layouts/ChatLayoutPc.vue2.cjs.map +1 -0
  156. package/dist/ui/layouts/ChatLayoutPc.vue2.mjs +66 -0
  157. package/dist/ui/layouts/ChatLayoutPc.vue2.mjs.map +1 -0
  158. package/dist/ui/mock/consultMeta.cjs +2 -0
  159. package/dist/ui/mock/consultMeta.cjs.map +1 -0
  160. package/dist/ui/mock/consultMeta.d.ts +9 -0
  161. package/dist/ui/mock/consultMeta.mjs +29 -0
  162. package/dist/ui/mock/consultMeta.mjs.map +1 -0
  163. package/dist/ui/mock/mock-driver.cjs +2 -0
  164. package/dist/ui/mock/mock-driver.cjs.map +1 -0
  165. package/dist/ui/mock/mock-driver.d.ts +2 -0
  166. package/dist/ui/mock/mock-driver.mjs +51 -0
  167. package/dist/ui/mock/mock-driver.mjs.map +1 -0
  168. package/dist/ui/mock/mock.d.ts +2 -0
  169. package/dist/ui/renderers/MessageProxy.cjs +2 -0
  170. package/dist/ui/renderers/MessageProxy.cjs.map +1 -0
  171. package/dist/ui/renderers/MessageProxy.d.ts +24 -0
  172. package/dist/ui/renderers/MessageProxy.mjs +36 -0
  173. package/dist/ui/renderers/MessageProxy.mjs.map +1 -0
  174. package/dist/ui/renderers/createMessageComponent.cjs +2 -0
  175. package/dist/ui/renderers/createMessageComponent.cjs.map +1 -0
  176. package/dist/ui/renderers/createMessageComponent.d.ts +4 -0
  177. package/dist/ui/renderers/createMessageComponent.mjs +15 -0
  178. package/dist/ui/renderers/createMessageComponent.mjs.map +1 -0
  179. package/dist/ui/renderers/historyFilter.cjs +2 -0
  180. package/dist/ui/renderers/historyFilter.cjs.map +1 -0
  181. package/dist/ui/renderers/historyFilter.d.ts +10 -0
  182. package/dist/ui/renderers/historyFilter.mjs +41 -0
  183. package/dist/ui/renderers/historyFilter.mjs.map +1 -0
  184. package/dist/ui/renderers/registry.cjs +2 -0
  185. package/dist/ui/renderers/registry.cjs.map +1 -0
  186. package/dist/ui/renderers/registry.d.ts +3 -0
  187. package/dist/ui/renderers/registry.mjs +17 -0
  188. package/dist/ui/renderers/registry.mjs.map +1 -0
  189. package/dist/ui/renderers/resolve.cjs +2 -0
  190. package/dist/ui/renderers/resolve.cjs.map +1 -0
  191. package/dist/ui/renderers/resolve.d.ts +2 -0
  192. package/dist/ui/renderers/resolve.mjs +8 -0
  193. package/dist/ui/renderers/resolve.mjs.map +1 -0
  194. package/dist/ui/styles/style.d.ts +0 -0
  195. package/dist/utils/log.cjs +2 -0
  196. package/dist/utils/log.cjs.map +1 -0
  197. package/dist/utils/log.d.ts +1 -0
  198. package/dist/utils/log.mjs +7 -0
  199. package/dist/utils/log.mjs.map +1 -0
  200. package/package.json +65 -0
@@ -0,0 +1,45 @@
1
+ import { defineComponent as _, createElementBlock as b, openBlock as f, createElementVNode as o, toDisplayString as d, unref as m } from "vue";
2
+ import { logTag as a } from "../../utils/log.mjs";
3
+ const p = { class: "hl-font-ctrl" }, v = { class: "hl-font-ctrl__label" }, x = ["disabled"], g = { class: "hl-font-ctrl__value" }, k = ["disabled"], E = /* @__PURE__ */ _({
4
+ __name: "FontSizeControl",
5
+ props: {
6
+ label: {},
7
+ value: {},
8
+ min: {},
9
+ max: {},
10
+ step: {}
11
+ },
12
+ emits: ["change"],
13
+ setup(n, { emit: u }) {
14
+ const t = n, s = u, c = t.min ?? 12, i = t.max ?? 20, l = t.step ?? 1;
15
+ function r() {
16
+ a("dec", t.value, c, l);
17
+ const e = Math.max(c, t.value - l);
18
+ a("dec", e), s("change", e);
19
+ }
20
+ function h() {
21
+ const e = Math.min(i, t.value + l);
22
+ a("inc", e), s("change", e);
23
+ }
24
+ return (e, C) => (f(), b("div", p, [
25
+ o("span", v, d(n.label), 1),
26
+ o("button", {
27
+ class: "hl-font-ctrl__btn",
28
+ type: "button",
29
+ disabled: n.value <= m(c),
30
+ onClick: r
31
+ }, "-", 8, x),
32
+ o("span", g, d(n.value) + "px", 1),
33
+ o("button", {
34
+ class: "hl-font-ctrl__btn",
35
+ type: "button",
36
+ disabled: n.value >= m(i),
37
+ onClick: h
38
+ }, "+", 8, k)
39
+ ]));
40
+ }
41
+ });
42
+ export {
43
+ E as default
44
+ };
45
+ //# sourceMappingURL=FontSizeControl.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FontSizeControl.vue2.mjs","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":";;;;;;;;;;;;;AAYA,UAAMA,IAAQC,GAQRC,IAAOC,GAIPC,IAAMJ,EAAM,OAAO,IACnBK,IAAML,EAAM,OAAO,IACnBM,IAAON,EAAM,QAAQ;AAE3B,aAASO,IAAM;AACb,MAAAC,EAAO,OAAOR,EAAM,OAAOI,GAAKE,CAAI;AACpC,YAAMG,IAAO,KAAK,IAAIL,GAAKJ,EAAM,QAAQM,CAAI;AAC7C,MAAAE,EAAO,OAAOC,CAAI,GAClBP,EAAK,UAAUO,CAAI;AAAA,IACrB;AACA,aAASC,IAAM;AACb,YAAMD,IAAO,KAAK,IAAIJ,GAAKL,EAAM,QAAQM,CAAI;AAC7C,MAAAE,EAAO,OAAOC,CAAI,GAClBP,EAAK,UAAUO,CAAI;AAAA,IACrB;sBArCEE,EAAA,GAAAC,EAMM,OANNC,GAMM;AAAA,MALJC,EAAoD,QAApDC,GAAoDC,EAAff,EAAA,KAAK,GAAA,CAAA;AAAA,MAE1Ca,EAAgG,UAAA;AAAA,QAAxF,OAAM;AAAA,QAAoB,MAAK;AAAA,QAAU,UAAUb,EAAA,SAASgB,EAAAb,CAAA;AAAA,QAAM,SAAOG;AAAA,MAAA,GAAK,KAAC,GAAAW,CAAA;AAAA,MACvFJ,EAAsD,QAAtDK,GAAsDH,EAAjBf,EAAA,KAAK,IAAG,MAAE,CAAA;AAAA,MAC/Ca,EAAgG,UAAA;AAAA,QAAxF,OAAM;AAAA,QAAoB,MAAK;AAAA,QAAU,UAAUb,EAAA,SAASgB,EAAAZ,CAAA;AAAA,QAAM,SAAOK;AAAA,MAAA,GAAK,KAAC,GAAAU,CAAA;AAAA,IAAA;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),d=require("../layouts/ChatLayoutPc.vue.cjs"),m=require("../layouts/ChatLayoutH5.vue.cjs"),h=require("../renderers/historyFilter.cjs"),f=e.defineComponent({__name:"ImChatRoom",props:{client:{},mode:{},historyMode:{},sessionStartAt:{},inputActions:{},conversationList:{},messageRenderers:{},clearOnEnter:{type:[Boolean,Function]},conversationClassifier:{type:Function}},emits:["sys:action"],setup(t,{emit:i}){const s=t,r=e.ref(!1);let o=null;const c=e.computed(()=>s.mode==="pc"?!0:s.mode==="h5"?!1:window.matchMedia("(min-width: 768px)").matches),a=i,l=n=>{console.log("7777"),a("sys:action",n)};return e.onMounted(()=>{const n=s.historyMode==="sinceSession"&&!!s.sessionStartAt;o=h.installChatHistoryFilter({enabled:n,sessionStartAt:s.sessionStartAt??0,showHistory:()=>r.value})}),e.onUnmounted(()=>{o?.dispose(),o=null}),(n,v)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value?d:m),{client:t.client,"conversation-list":t.conversationList,"conversation-classifier":t.conversationClassifier,"message-renderers":t.messageRenderers,"input-actions":t.inputActions,"onSys:action":l},{"pc-conversation":e.withCtx(({client:u})=>[e.renderSlot(n.$slots,"pc-conversation",{client:u})]),default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},40,["client","conversation-list","conversation-classifier","message-renderers","input-actions"]))}});module.exports=f;
2
+ //# sourceMappingURL=ImChatRoom.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImChatRoom.vue.cjs","sources":["../../../src/ui/components/ImChatRoom.vue"],"sourcesContent":["<!-- packages/im/src/ui/components/ImChatRoom.vue -->\n<template>\n <component\n :is=\"isPc ? ChatLayoutPc : ChatLayoutH5\"\n :client=\"client\"\n :conversation-list=\"conversationList\"\n :conversation-classifier=\"conversationClassifier\"\n :message-renderers=\"messageRenderers\"\n :input-actions=\"inputActions\"\n @sys:action=\"fn\"\n >\n <!-- 继续透传插槽 -->\n <template #pc-conversation=\"{ client: c }\">\n <slot name=\"pc-conversation\" :client=\"c\" />\n </template>\n\n <template #default>\n <slot />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onUnmounted, computed, type Component, onMounted } from 'vue'\nimport ChatLayoutPc from '../layouts/ChatLayoutPc.vue'\nimport ChatLayoutH5 from '../layouts/ChatLayoutH5.vue'\nimport { installChatHistoryFilter } from '../renderers/historyFilter'\nimport type { IMClient } from '../../core/client'\nimport type { IMConversation, Envelope, SysPayload, ActionItem } from '../../core/types'\n\nconst props = defineProps<{\n client: IMClient\n mode?: 'auto' | 'pc' | 'h5'\n historyMode?: 'all' | 'sinceSession'\n sessionStartAt?: number\n inputActions?: ActionItem[]\n conversationList?: Component | null\n messageRenderers?: Record<string, Component>\n clearOnEnter?: boolean | ((conversationId: string) => boolean) // 进入某个会话时: 否清空当前页面的已渲染消息\n conversationClassifier?: (c: IMConversation) => 'done' | 'todo'\n}>()\n\n// 是否展示历史\nconst showHistory = ref(false)\nlet filterCtl: ReturnType<typeof installChatHistoryFilter> | null = null\n\nconst isPc = computed(() => {\n if (props.mode === 'pc') return true\n if (props.mode === 'h5') return false\n return window.matchMedia('(min-width: 768px)').matches\n})\n\nconst emit = defineEmits<{\n (e: 'sys:action', p: any): void\n}>()\n\nconst fn = (p) => {\n console.log('7777')\n emit('sys:action', p)\n}\n\nonMounted(() => {\n const enabled = props.historyMode === 'sinceSession' && !!props.sessionStartAt\n filterCtl = installChatHistoryFilter({\n enabled: enabled,\n sessionStartAt: props.sessionStartAt ?? 0,\n showHistory: () => showHistory.value,\n })\n})\n\nonUnmounted(() => {\n filterCtl?.dispose()\n filterCtl = null\n})\n\nfunction openHistory() {\n showHistory.value = true\n filterCtl?.restoreFullList()\n}\n</script>\n"],"names":["props","__props","showHistory","ref","filterCtl","isPc","computed","emit","__emit","fn","p","onMounted","enabled","installChatHistoryFilter","onUnmounted","_openBlock","_createBlock","_resolveDynamicComponent","ChatLayoutPc","ChatLayoutH5","_withCtx","c","_renderSlot","_ctx"],"mappings":"2bA8BA,MAAMA,EAAQC,EAaRC,EAAcC,EAAAA,IAAI,EAAK,EAC7B,IAAIC,EAAgE,KAEpE,MAAMC,EAAOC,EAAAA,SAAS,IAChBN,EAAM,OAAS,KAAa,GAC5BA,EAAM,OAAS,KAAa,GACzB,OAAO,WAAW,oBAAoB,EAAE,OAChD,EAEKO,EAAOC,EAIPC,EAAMC,GAAM,CAChB,QAAQ,IAAI,MAAM,EAClBH,EAAK,aAAcG,CAAC,CACtB,EAEAC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAUZ,EAAM,cAAgB,gBAAkB,CAAC,CAACA,EAAM,eAChEI,EAAYS,EAAAA,yBAAyB,CACnC,QAAAD,EACA,eAAgBZ,EAAM,gBAAkB,EACxC,YAAa,IAAME,EAAY,KAAA,CAChC,CACH,CAAC,EAEDY,EAAAA,YAAY,IAAM,CAChBV,GAAW,QAAA,EACXA,EAAY,IACd,CAAC,UAvECW,EAAAA,UAAA,EAAAC,EAAAA,YAiBYC,EAAAA,wBAhBLZ,EAAA,MAAOa,EAAeC,CAAY,EAAA,CACtC,OAAQlB,EAAA,OACR,oBAAmBA,EAAA,iBACnB,0BAAyBA,EAAA,uBACzB,oBAAmBA,EAAA,iBACnB,gBAAeA,EAAA,aACf,eAAYQ,CAAA,GAGF,kBAAeW,EAAAA,QACxB,CAA2C,CAAA,OADPC,KAAC,CACrCC,EAAAA,WAA2CC,EAAA,OAAA,kBAAA,CAAb,OAAQF,EAAC,CAAA,GAG9B,kBACT,IAAQ,CAARC,aAAQC,EAAA,OAAA,SAAA,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { Component } from 'vue';
2
+ import { IMClient } from '../../core/client';
3
+ import { IMConversation, ActionItem } from '../../core/types';
4
+ type __VLS_Props = {
5
+ client: IMClient;
6
+ mode?: 'auto' | 'pc' | 'h5';
7
+ historyMode?: 'all' | 'sinceSession';
8
+ sessionStartAt?: number;
9
+ inputActions?: ActionItem[];
10
+ conversationList?: Component | null;
11
+ messageRenderers?: Record<string, Component>;
12
+ clearOnEnter?: boolean | ((conversationId: string) => boolean);
13
+ conversationClassifier?: (c: IMConversation) => 'done' | 'todo';
14
+ };
15
+ declare function __VLS_template(): {
16
+ attrs: Partial<{}>;
17
+ slots: {
18
+ 'pc-conversation'?(_: {
19
+ client: any;
20
+ }): any;
21
+ default?(_: {}): any;
22
+ };
23
+ refs: {};
24
+ rootEl: HTMLDivElement;
25
+ };
26
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
27
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
28
+ "sys:action": (p: any) => any;
29
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
30
+ "onSys:action"?: ((p: any) => any) | undefined;
31
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
32
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
33
+ export default _default;
34
+ type __VLS_WithTemplateSlots<T, S> = T & {
35
+ new (): {
36
+ $slots: S;
37
+ };
38
+ };
@@ -0,0 +1,55 @@
1
+ import { defineComponent as d, ref as f, computed as p, onMounted as h, onUnmounted as v, createBlock as y, openBlock as C, resolveDynamicComponent as S, withCtx as s, renderSlot as i } from "vue";
2
+ import w from "../layouts/ChatLayoutPc.vue.mjs";
3
+ import A from "../layouts/ChatLayoutH5.vue.mjs";
4
+ import { installChatHistoryFilter as g } from "../renderers/historyFilter.mjs";
5
+ const R = /* @__PURE__ */ d({
6
+ __name: "ImChatRoom",
7
+ props: {
8
+ client: {},
9
+ mode: {},
10
+ historyMode: {},
11
+ sessionStartAt: {},
12
+ inputActions: {},
13
+ conversationList: {},
14
+ messageRenderers: {},
15
+ clearOnEnter: { type: [Boolean, Function] },
16
+ conversationClassifier: { type: Function }
17
+ },
18
+ emits: ["sys:action"],
19
+ setup(t, { emit: r }) {
20
+ const n = t, a = f(!1);
21
+ let o = null;
22
+ const c = p(() => n.mode === "pc" ? !0 : n.mode === "h5" ? !1 : window.matchMedia("(min-width: 768px)").matches), l = r, m = (e) => {
23
+ console.log("7777"), l("sys:action", e);
24
+ };
25
+ return h(() => {
26
+ const e = n.historyMode === "sinceSession" && !!n.sessionStartAt;
27
+ o = g({
28
+ enabled: e,
29
+ sessionStartAt: n.sessionStartAt ?? 0,
30
+ showHistory: () => a.value
31
+ });
32
+ }), v(() => {
33
+ o?.dispose(), o = null;
34
+ }), (e, H) => (C(), y(S(c.value ? w : A), {
35
+ client: t.client,
36
+ "conversation-list": t.conversationList,
37
+ "conversation-classifier": t.conversationClassifier,
38
+ "message-renderers": t.messageRenderers,
39
+ "input-actions": t.inputActions,
40
+ "onSys:action": m
41
+ }, {
42
+ "pc-conversation": s(({ client: u }) => [
43
+ i(e.$slots, "pc-conversation", { client: u })
44
+ ]),
45
+ default: s(() => [
46
+ i(e.$slots, "default")
47
+ ]),
48
+ _: 3
49
+ }, 40, ["client", "conversation-list", "conversation-classifier", "message-renderers", "input-actions"]));
50
+ }
51
+ });
52
+ export {
53
+ R as default
54
+ };
55
+ //# sourceMappingURL=ImChatRoom.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImChatRoom.vue.mjs","sources":["../../../src/ui/components/ImChatRoom.vue"],"sourcesContent":["<!-- packages/im/src/ui/components/ImChatRoom.vue -->\n<template>\n <component\n :is=\"isPc ? ChatLayoutPc : ChatLayoutH5\"\n :client=\"client\"\n :conversation-list=\"conversationList\"\n :conversation-classifier=\"conversationClassifier\"\n :message-renderers=\"messageRenderers\"\n :input-actions=\"inputActions\"\n @sys:action=\"fn\"\n >\n <!-- 继续透传插槽 -->\n <template #pc-conversation=\"{ client: c }\">\n <slot name=\"pc-conversation\" :client=\"c\" />\n </template>\n\n <template #default>\n <slot />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onUnmounted, computed, type Component, onMounted } from 'vue'\nimport ChatLayoutPc from '../layouts/ChatLayoutPc.vue'\nimport ChatLayoutH5 from '../layouts/ChatLayoutH5.vue'\nimport { installChatHistoryFilter } from '../renderers/historyFilter'\nimport type { IMClient } from '../../core/client'\nimport type { IMConversation, Envelope, SysPayload, ActionItem } from '../../core/types'\n\nconst props = defineProps<{\n client: IMClient\n mode?: 'auto' | 'pc' | 'h5'\n historyMode?: 'all' | 'sinceSession'\n sessionStartAt?: number\n inputActions?: ActionItem[]\n conversationList?: Component | null\n messageRenderers?: Record<string, Component>\n clearOnEnter?: boolean | ((conversationId: string) => boolean) // 进入某个会话时: 否清空当前页面的已渲染消息\n conversationClassifier?: (c: IMConversation) => 'done' | 'todo'\n}>()\n\n// 是否展示历史\nconst showHistory = ref(false)\nlet filterCtl: ReturnType<typeof installChatHistoryFilter> | null = null\n\nconst isPc = computed(() => {\n if (props.mode === 'pc') return true\n if (props.mode === 'h5') return false\n return window.matchMedia('(min-width: 768px)').matches\n})\n\nconst emit = defineEmits<{\n (e: 'sys:action', p: any): void\n}>()\n\nconst fn = (p) => {\n console.log('7777')\n emit('sys:action', p)\n}\n\nonMounted(() => {\n const enabled = props.historyMode === 'sinceSession' && !!props.sessionStartAt\n filterCtl = installChatHistoryFilter({\n enabled: enabled,\n sessionStartAt: props.sessionStartAt ?? 0,\n showHistory: () => showHistory.value,\n })\n})\n\nonUnmounted(() => {\n filterCtl?.dispose()\n filterCtl = null\n})\n\nfunction openHistory() {\n showHistory.value = true\n filterCtl?.restoreFullList()\n}\n</script>\n"],"names":["props","__props","showHistory","ref","filterCtl","isPc","computed","emit","__emit","fn","p","onMounted","enabled","installChatHistoryFilter","onUnmounted","_openBlock","_createBlock","_resolveDynamicComponent","ChatLayoutPc","ChatLayoutH5","_withCtx","c","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;AA8BA,UAAMA,IAAQC,GAaRC,IAAcC,EAAI,EAAK;AAC7B,QAAIC,IAAgE;AAEpE,UAAMC,IAAOC,EAAS,MAChBN,EAAM,SAAS,OAAa,KAC5BA,EAAM,SAAS,OAAa,KACzB,OAAO,WAAW,oBAAoB,EAAE,OAChD,GAEKO,IAAOC,GAIPC,IAAK,CAACC,MAAM;AAChB,cAAQ,IAAI,MAAM,GAClBH,EAAK,cAAcG,CAAC;AAAA,IACtB;AAEA,WAAAC,EAAU,MAAM;AACd,YAAMC,IAAUZ,EAAM,gBAAgB,kBAAkB,CAAC,CAACA,EAAM;AAChE,MAAAI,IAAYS,EAAyB;AAAA,QACnC,SAAAD;AAAA,QACA,gBAAgBZ,EAAM,kBAAkB;AAAA,QACxC,aAAa,MAAME,EAAY;AAAA,MAAA,CAChC;AAAA,IACH,CAAC,GAEDY,EAAY,MAAM;AAChB,MAAAV,GAAW,QAAA,GACXA,IAAY;AAAA,IACd,CAAC,cAvECW,EAAA,GAAAC,EAiBYC,EAhBLZ,EAAA,QAAOa,IAAeC,CAAY,GAAA;AAAA,MACtC,QAAQlB,EAAA;AAAA,MACR,qBAAmBA,EAAA;AAAA,MACnB,2BAAyBA,EAAA;AAAA,MACzB,qBAAmBA,EAAA;AAAA,MACnB,iBAAeA,EAAA;AAAA,MACf,gBAAYQ;AAAA,IAAA;MAGF,mBAAeW,EACxB,CAA2C,EAAA,QADPC,QAAC;AAAA,QACrCC,EAA2CC,EAAA,QAAA,mBAAA,EAAb,QAAQF,GAAC;AAAA,MAAA;MAG9B,WACT,MAAQ;AAAA,QAARC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./ImChatRoom.vue.cjs");module.exports=e;
2
+ //# sourceMappingURL=ImChatRoom.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImChatRoom.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import f from "./ImChatRoom.vue.mjs";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=ImChatRoom.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImChatRoom.vue2.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),r=require("@tencentcloud/chat-uikit-vue3"),n=e.defineComponent({__name:"ImKit",setup(o){return(t,u)=>(e.openBlock(),e.createBlock(e.unref(r.UIKitProvider),{language:"zh-CN"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3}))}});module.exports=n;
2
+ //# sourceMappingURL=ImKit.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImKit.vue.cjs","sources":["../../../src/ui/components/ImKit.vue"],"sourcesContent":["<template>\n <UIKitProvider language=\"zh-CN\">\n <slot />\n </UIKitProvider>\n</template>\n\n<script setup lang=\"ts\">\nimport { UIKitProvider } from '@tencentcloud/chat-uikit-vue3'\n\n// import '@tencentcloud/chat-uikit-vue3/dist/style.css'\n</script>\n"],"names":["_createBlock","_unref","UIKitProvider","_renderSlot","_ctx"],"mappings":"wJACEA,EAAAA,YAEgBC,EAAAA,MAAAC,EAAAA,aAAA,EAAA,CAFD,SAAS,SAAO,mBAC7B,IAAQ,CAARC,aAAQC,EAAA,OAAA,SAAA,CAAA"}
@@ -0,0 +1,17 @@
1
+ declare function __VLS_template(): {
2
+ attrs: Partial<{}>;
3
+ slots: {
4
+ default?(_: {}): any;
5
+ };
6
+ refs: {};
7
+ rootEl: any;
8
+ };
9
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
10
+ declare const __VLS_component: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
11
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
12
+ export default _default;
13
+ type __VLS_WithTemplateSlots<T, S> = T & {
14
+ new (): {
15
+ $slots: S;
16
+ };
17
+ };
@@ -0,0 +1,17 @@
1
+ import { defineComponent as t, createBlock as r, openBlock as o, unref as n, withCtx as a, renderSlot as f } from "vue";
2
+ import { UIKitProvider as i } from "@tencentcloud/chat-uikit-vue3";
3
+ const _ = /* @__PURE__ */ t({
4
+ __name: "ImKit",
5
+ setup(l) {
6
+ return (e, m) => (o(), r(n(i), { language: "zh-CN" }, {
7
+ default: a(() => [
8
+ f(e.$slots, "default")
9
+ ]),
10
+ _: 3
11
+ }));
12
+ }
13
+ });
14
+ export {
15
+ _ as default
16
+ };
17
+ //# sourceMappingURL=ImKit.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImKit.vue.mjs","sources":["../../../src/ui/components/ImKit.vue"],"sourcesContent":["<template>\n <UIKitProvider language=\"zh-CN\">\n <slot />\n </UIKitProvider>\n</template>\n\n<script setup lang=\"ts\">\nimport { UIKitProvider } from '@tencentcloud/chat-uikit-vue3'\n\n// import '@tencentcloud/chat-uikit-vue3/dist/style.css'\n</script>\n"],"names":["_createBlock","_unref","UIKitProvider","_renderSlot","_ctx"],"mappings":";;;;;2BACEA,EAEgBC,EAAAC,CAAA,GAAA,EAFD,UAAS,WAAO;AAAA,iBAC7B,MAAQ;AAAA,QAARC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./ImKit.vue.cjs");module.exports=e;
2
+ //# sourceMappingURL=ImKit.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImKit.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import f from "./ImKit.vue.mjs";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=ImKit.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImKit.vue2.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./ImMessageInput.vue2.cjs");module.exports=e;
2
+ //# sourceMappingURL=ImMessageInput.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImMessageInput.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { Component } from 'vue';
2
+ type ActionItem = string | {
3
+ key: string;
4
+ label?: string;
5
+ component: Component;
6
+ };
7
+ type __VLS_Props = {
8
+ msgFont: number;
9
+ inputFont: number;
10
+ /** 业务方可追加 actions */
11
+ actions?: ActionItem[];
12
+ /** 是否保留 TUIKit 默认 actions(Emoji/Image/Attachment...) */
13
+ removeDefaultActions?: boolean;
14
+ };
15
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
16
+ "update:msgFont": (v: number) => any;
17
+ "update:inputFont": (v: number) => any;
18
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
19
+ "onUpdate:msgFont"?: ((v: number) => any) | undefined;
20
+ "onUpdate:inputFont"?: ((v: number) => any) | undefined;
21
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
22
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import f from "./ImMessageInput.vue2.mjs";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=ImMessageInput.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImMessageInput.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ "use strict";const t=require("vue"),m=require("@tencentcloud/chat-uikit-vue3"),p=require("./FontSizeControl.vue.cjs"),l=t.defineComponent({__name:"ImMessageInput",props:{msgFont:{},inputFont:{},actions:{},removeDefaultActions:{type:Boolean}},emits:["update:msgFont","update:inputFont"],setup(o,{emit:s}){const e=o,c=s,i=t.defineComponent({name:"HLChatFontAction",setup(){return()=>t.h(p,{label:"聊天",value:e.msgFont,min:12,max:20,step:1,onChange:n=>c("update:msgFont",n)})}}),a=["EmojiPicker","ImagePicker","AttachmentPicker"],u=[{key:"font_msg",label:"字体大小",component:i}],r=t.computed(()=>[...e.removeDefaultActions??!1?[]:a,...u,...e.actions??[]]);return(n,f)=>(t.openBlock(),t.createBlock(t.unref(m.MessageInput),{actions:r.value},null,8,["actions"]))}});module.exports=l;
2
+ //# sourceMappingURL=ImMessageInput.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImMessageInput.vue2.cjs","sources":["../../../src/ui/components/ImMessageInput.vue"],"sourcesContent":["<template>\n <MessageInput :actions=\"mergedActions\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, defineComponent, h, type Component } from 'vue'\nimport { MessageInput } from '@tencentcloud/chat-uikit-vue3'\nimport FontSizeControl from './FontSizeControl.vue'\nimport { logTag } from '../../utils/log'\n\ntype ActionItem =\n | string\n | {\n key: string\n label?: string\n component: Component\n }\n\nconst props = defineProps<{\n msgFont: number\n inputFont: number\n\n /** 业务方可追加 actions */\n actions?: ActionItem[]\n\n /** 是否保留 TUIKit 默认 actions(Emoji/Image/Attachment...) */\n removeDefaultActions?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:msgFont', v: number): void\n (e: 'update:inputFont', v: number): void\n}>()\n\n/**\n * 关键点:actions 的 component 没法像普通子组件那样轻松传入 props,\n * 最稳的方式就是在这里用闭包把 props/emit “捕获”进去。\n */\n\n/** 聊天字号 action:直接渲染 FontSizeControl */\nconst ChatFontAction = defineComponent({\n name: 'HLChatFontAction',\n setup() {\n return () =>\n h(FontSizeControl as any, {\n label: '聊天',\n value: props.msgFont,\n min: 12,\n max: 20,\n step: 1,\n onChange: (v: number) => emit('update:msgFont', v),\n })\n },\n})\n\n/** 默认 actions(你也可以按你们版本补全更多默认项) */\nconst defaultActions: ActionItem[] = ['EmojiPicker', 'ImagePicker', 'AttachmentPicker']\n\nconst builtinActions: ActionItem[] = [{ key: 'font_msg', label: '字体大小', component: ChatFontAction }]\n\nconst mergedActions = computed(() => {\n const removeDefault = props.removeDefaultActions ?? false\n return [...(!removeDefault ? defaultActions : []), ...builtinActions, ...(props.actions ?? [])]\n})\n</script>\n"],"names":["props","__props","emit","__emit","ChatFontAction","defineComponent","h","FontSizeControl","v","defaultActions","builtinActions","mergedActions","computed","_createBlock","_unref","MessageInput"],"mappings":"gTAkBA,MAAMA,EAAQC,EAWRC,EAAOC,EAWPC,EAAiBC,EAAAA,gBAAgB,CACrC,KAAM,mBACN,OAAQ,CACN,MAAO,IACLC,EAAAA,EAAEC,EAAwB,CACxB,MAAO,KACP,MAAOP,EAAM,QACb,IAAK,GACL,IAAK,GACL,KAAM,EACN,SAAWQ,GAAcN,EAAK,iBAAkBM,CAAC,CAAA,CAClD,CACL,CAAA,CACD,EAGKC,EAA+B,CAAC,cAAe,cAAe,kBAAkB,EAEhFC,EAA+B,CAAC,CAAE,IAAK,WAAY,MAAO,OAAQ,UAAWN,EAAgB,EAE7FO,EAAgBC,EAAAA,SAAS,IAEtB,CAAC,GADcZ,EAAM,sBAAwB,GACN,CAAA,EAAjBS,EAAsB,GAAGC,EAAgB,GAAIV,EAAM,SAAW,EAAG,CAC/F,8BA9DCa,EAAAA,YAAyCC,EAAAA,MAAAC,EAAAA,YAAA,EAAA,CAA1B,QAASJ,EAAA,OAAa,KAAA,EAAA,CAAA,SAAA,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { defineComponent as o, h as u, computed as p, createBlock as l, openBlock as f, unref as g } from "vue";
2
+ import { MessageInput as F } from "@tencentcloud/chat-uikit-vue3";
3
+ import d from "./FontSizeControl.vue.mjs";
4
+ const v = /* @__PURE__ */ o({
5
+ __name: "ImMessageInput",
6
+ props: {
7
+ msgFont: {},
8
+ inputFont: {},
9
+ actions: {},
10
+ removeDefaultActions: { type: Boolean }
11
+ },
12
+ emits: ["update:msgFont", "update:inputFont"],
13
+ setup(n, { emit: s }) {
14
+ const t = n, a = s, c = o({
15
+ name: "HLChatFontAction",
16
+ setup() {
17
+ return () => u(d, {
18
+ label: "聊天",
19
+ value: t.msgFont,
20
+ min: 12,
21
+ max: 20,
22
+ step: 1,
23
+ onChange: (e) => a("update:msgFont", e)
24
+ });
25
+ }
26
+ }), m = ["EmojiPicker", "ImagePicker", "AttachmentPicker"], i = [{ key: "font_msg", label: "字体大小", component: c }], r = p(() => [...t.removeDefaultActions ?? !1 ? [] : m, ...i, ...t.actions ?? []]);
27
+ return (e, A) => (f(), l(g(F), { actions: r.value }, null, 8, ["actions"]));
28
+ }
29
+ });
30
+ export {
31
+ v as default
32
+ };
33
+ //# sourceMappingURL=ImMessageInput.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImMessageInput.vue2.mjs","sources":["../../../src/ui/components/ImMessageInput.vue"],"sourcesContent":["<template>\n <MessageInput :actions=\"mergedActions\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, defineComponent, h, type Component } from 'vue'\nimport { MessageInput } from '@tencentcloud/chat-uikit-vue3'\nimport FontSizeControl from './FontSizeControl.vue'\nimport { logTag } from '../../utils/log'\n\ntype ActionItem =\n | string\n | {\n key: string\n label?: string\n component: Component\n }\n\nconst props = defineProps<{\n msgFont: number\n inputFont: number\n\n /** 业务方可追加 actions */\n actions?: ActionItem[]\n\n /** 是否保留 TUIKit 默认 actions(Emoji/Image/Attachment...) */\n removeDefaultActions?: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:msgFont', v: number): void\n (e: 'update:inputFont', v: number): void\n}>()\n\n/**\n * 关键点:actions 的 component 没法像普通子组件那样轻松传入 props,\n * 最稳的方式就是在这里用闭包把 props/emit “捕获”进去。\n */\n\n/** 聊天字号 action:直接渲染 FontSizeControl */\nconst ChatFontAction = defineComponent({\n name: 'HLChatFontAction',\n setup() {\n return () =>\n h(FontSizeControl as any, {\n label: '聊天',\n value: props.msgFont,\n min: 12,\n max: 20,\n step: 1,\n onChange: (v: number) => emit('update:msgFont', v),\n })\n },\n})\n\n/** 默认 actions(你也可以按你们版本补全更多默认项) */\nconst defaultActions: ActionItem[] = ['EmojiPicker', 'ImagePicker', 'AttachmentPicker']\n\nconst builtinActions: ActionItem[] = [{ key: 'font_msg', label: '字体大小', component: ChatFontAction }]\n\nconst mergedActions = computed(() => {\n const removeDefault = props.removeDefaultActions ?? false\n return [...(!removeDefault ? defaultActions : []), ...builtinActions, ...(props.actions ?? [])]\n})\n</script>\n"],"names":["props","__props","emit","__emit","ChatFontAction","defineComponent","h","FontSizeControl","v","defaultActions","builtinActions","mergedActions","computed","_createBlock","_unref","MessageInput"],"mappings":";;;;;;;;;;;;;AAkBA,UAAMA,IAAQC,GAWRC,IAAOC,GAWPC,IAAiBC,EAAgB;AAAA,MACrC,MAAM;AAAA,MACN,QAAQ;AACN,eAAO,MACLC,EAAEC,GAAwB;AAAA,UACxB,OAAO;AAAA,UACP,OAAOP,EAAM;AAAA,UACb,KAAK;AAAA,UACL,KAAK;AAAA,UACL,MAAM;AAAA,UACN,UAAU,CAACQ,MAAcN,EAAK,kBAAkBM,CAAC;AAAA,QAAA,CAClD;AAAA,MACL;AAAA,IAAA,CACD,GAGKC,IAA+B,CAAC,eAAe,eAAe,kBAAkB,GAEhFC,IAA+B,CAAC,EAAE,KAAK,YAAY,OAAO,QAAQ,WAAWN,GAAgB,GAE7FO,IAAgBC,EAAS,MAEtB,CAAC,GADcZ,EAAM,wBAAwB,KACN,CAAA,IAAjBS,GAAsB,GAAGC,GAAgB,GAAIV,EAAM,WAAW,EAAG,CAC/F;2BA9DCa,EAAyCC,EAAAC,CAAA,GAAA,EAA1B,SAASJ,EAAA,SAAa,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./PcConversationListSplit.vue2.cjs");;/* empty css */const t=require("../../_virtual/_plugin-vue_export-helper.cjs"),r=t(e,[["__scopeId","data-v-f4cd5529"]]);module.exports=r;
2
+ //# sourceMappingURL=PcConversationListSplit.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PcConversationListSplit.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { IMClient } from '../../core/client';
2
+ import { IMConversation } from '../../core/types';
3
+ type __VLS_Props = {
4
+ client: IMClient;
5
+ classifier?: (c: IMConversation) => 'done' | 'todo';
6
+ };
7
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
8
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import o from "./PcConversationListSplit.vue2.mjs";
2
+ /* empty css */
3
+ import t from "../../_virtual/_plugin-vue_export-helper.mjs";
4
+ const s = /* @__PURE__ */ t(o, [["__scopeId", "data-v-f4cd5529"]]);
5
+ export {
6
+ s as default
7
+ };
8
+ //# sourceMappingURL=PcConversationListSplit.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PcConversationListSplit.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),h={class:"hl-conv"},f={class:"hl-conv__tabs"},k={class:"hl-conv__list"},E=["onClick"],C={class:"hl-conv__left"},N={class:"hl-conv__avatar"},V={class:"hl-conv__main"},y={class:"hl-conv__row1"},g={class:"hl-conv__title"},B={key:0,class:"hl-conv__time"},w={key:0,class:"badge"},D={class:"hl-conv__row2"},S={class:"hl-conv__sub"},b={key:0,class:"hl-conv__tag"},M=e.defineComponent({__name:"PcConversationListSplit",props:{client:{},classifier:{type:Function}},setup(_){const n=_,s=e.ref("todo"),i=e.ref(""),r=e.ref([]),c=e.ref("");let v,d;const a=e.ref({});let u;e.onMounted(()=>{u=({ids:o})=>{const l={...a.value};o.forEach(t=>{l[t]=n.client.getConversationMeta(t)}),a.value=l},n.client.on("conversation:meta-updated",u)}),e.onMounted(()=>{c.value=n.client.activeConversationId??"",v=o=>{console.log("conversation:list event received","p:",o,"p.conversations:",o?.conversations),o&&"conversations"in o?(r.value=o.conversations,console.log("conversation:list","11111",r.value)):console.warn("conversation:list event payload format unexpected:",o)},d=o=>{c.value=o.conversationId,console.log("activeId.value",c.value)},n.client.on("conversation:list",v),n.client.on("conversation:active",d)}),e.onUnmounted(()=>{n.client.off("conversation:list",v),n.client.off("conversation:active",d)});const m=e.computed(()=>(n.classifier,s.value,i.value.trim().toLowerCase(),r.value));async function p(o){await n.client.switchConversation(o)}return(o,l)=>(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("div",f,[e.createElementVNode("button",{class:e.normalizeClass({active:s.value==="todo"}),onClick:l[0]||(l[0]=t=>s.value="todo")},"未完成",2),e.createElementVNode("button",{class:e.normalizeClass({active:s.value==="done"}),onClick:l[1]||(l[1]=t=>s.value="done")},"已完成",2),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":l[2]||(l[2]=t=>i.value=t),class:"hl-conv__search",placeholder:"搜索会话"},null,512),[[e.vModelText,i.value]])]),e.createElementVNode("div",k,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,t=>(e.openBlock(),e.createElementBlock("div",{key:t.id,class:e.normalizeClass(["hl-conv__item",{active:t.id===c.value}]),onClick:T=>p(t.id)},[e.createElementVNode("div",C,[e.createElementVNode("div",N,e.toDisplayString((t.title||t.id).slice(0,1)),1),e.createElementVNode("div",V,[e.createElementVNode("div",y,[e.createElementVNode("div",g,e.toDisplayString(t.title||t.id),1),t.lastTime?(e.openBlock(),e.createElementBlock("span",B,e.toDisplayString(new Date(t.lastTime).toLocaleTimeString()),1)):e.createCommentVNode("",!0),e.createElementVNode("span",null,[t.unreadCount?(e.openBlock(),e.createElementBlock("span",w,e.toDisplayString(t.unreadCount),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",D,[e.createElementVNode("span",S,e.toDisplayString(a.value[t.id]?.deptName||""),1),a.value[t.id]?.consultType?(e.openBlock(),e.createElementBlock("span",b,e.toDisplayString(a.value[t.id]?.consultType||""),1)):e.createCommentVNode("",!0)])])])],10,E))),128))])]))}});module.exports=M;
2
+ //# sourceMappingURL=PcConversationListSplit.vue2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PcConversationListSplit.vue2.cjs","sources":["../../../src/ui/components/PcConversationListSplit.vue"],"sourcesContent":["<template>\n <div class=\"hl-conv\">\n <div class=\"hl-conv__tabs\">\n <button :class=\"{ active: tab === 'todo' }\" @click=\"tab = 'todo'\">未完成</button>\n <button :class=\"{ active: tab === 'done' }\" @click=\"tab = 'done'\">已完成</button>\n <input v-model=\"kw\" class=\"hl-conv__search\" placeholder=\"搜索会话\" />\n </div>\n\n <div class=\"hl-conv__list\">\n <div\n v-for=\"c in filtered\"\n :key=\"c.id\"\n class=\"hl-conv__item\"\n :class=\"{ active: c.id === activeId }\"\n @click=\"select(c.id)\"\n >\n <div class=\"hl-conv__left\">\n <div class=\"hl-conv__avatar\">\n {{ (c.title || c.id).slice(0, 1) }}\n </div>\n\n <div class=\"hl-conv__main\">\n <div class=\"hl-conv__row1\">\n <div class=\"hl-conv__title\">{{ c.title || c.id }}</div>\n <span v-if=\"c.lastTime\" class=\"hl-conv__time\">\n {{ new Date(c.lastTime).toLocaleTimeString() }}\n </span>\n <span>\n <span v-if=\"c.unreadCount\" class=\"badge\">{{ c.unreadCount }}</span>\n </span>\n </div>\n\n <div class=\"hl-conv__row2\">\n <span class=\"hl-conv__sub\">\n {{ (metaMap as Record<string, any>)[c.id]?.deptName || '' }}\n </span>\n <span\n v-if=\"(metaMap as Record<string, any>)[c.id]?.consultType\"\n class=\"hl-conv__tag\"\n >\n {{ (metaMap as Record<string, any>)[c.id]?.consultType || '' }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport type { IMClient } from '../../core/client'\nimport type { IMConversation } from '../../core/types'\n\nconst props = defineProps<{\n client: IMClient\n classifier?: (c: IMConversation) => 'done' | 'todo'\n}>()\n\nconst tab = ref<'done' | 'todo'>('todo')\nconst kw = ref('')\nconst list = ref<IMConversation[]>([])\nconst activeId = ref<string>('')\n\nlet off1: any, off2: any\nconst metaMap = ref({})\n\nlet offMeta\nonMounted(() => {\n offMeta = ({ ids }) => {\n // 从 client 拉最新的 meta 回来,写进 ref(响应式)\n const next = { ...metaMap.value }\n ids.forEach((id) => {\n next[id] = props.client.getConversationMeta(id)\n })\n metaMap.value = next\n }\n props.client.on('conversation:meta-updated', offMeta)\n})\n\nonMounted(() => {\n // 注意:client 没有公开的 conversations getter,所以这里可能是 undefined\n // 初始值会在事件触发时设置\n activeId.value = props.client.activeConversationId ?? ''\n\n off1 = (p: any) => {\n console.log('conversation:list event received', 'p:', p, 'p.conversations:', p?.conversations)\n // mitt 会将 emit 的第二个参数直接传递给监听器\n // 所以 p 应该是 { conversations: [...] }\n if (p && 'conversations' in p) {\n list.value = p.conversations\n console.log('conversation:list', '11111', list.value)\n } else {\n console.warn('conversation:list event payload format unexpected:', p)\n }\n }\n off2 = (p: any) => {\n activeId.value = p.conversationId\n console.log('activeId.value', activeId.value)\n }\n\n props.client.on('conversation:list', off1)\n props.client.on('conversation:active', off2)\n})\n\nonUnmounted(() => {\n props.client.off('conversation:list', off1)\n props.client.off('conversation:active', off2)\n})\n\nconst filtered = computed(() => {\n const classify = props.classifier ?? (() => 'todo' as const)\n const t = tab.value\n const k = kw.value.trim().toLowerCase()\n return list.value\n // .filter((c) => classify(c) === t)\n // .filter((c) => {\n // console.log('conversation:666', '333', c)\n // if (!k) return true\n // return (c.title ?? '').toLowerCase().includes(k) || c.id.toLowerCase().includes(k)\n // })\n})\n\nasync function select(id: string) {\n await props.client.switchConversation(id)\n}\n</script>\n\n<style scoped lang=\"scss\">\n.hl-conv {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #fff;\n}\n\n.hl-conv__tabs {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n align-items: center;\n position: sticky;\n top: 0;\n background: #fff;\n z-index: 1;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n\n button {\n padding: 6px 10px;\n border-radius: 999px;\n border: 1px solid rgba(0, 0, 0, 0.10);\n background: rgba(0, 0, 0, 0.02);\n font-size: 13px;\n line-height: 18px;\n\n &.active {\n font-weight: 600;\n background: rgba(0, 0, 0, 0.06);\n border-color: rgba(0, 0, 0, 0.14);\n }\n }\n}\n\n.hl-conv__search {\n margin-left: auto;\n flex: 1;\n min-width: 140px;\n padding: 8px 10px;\n border-radius: 999px;\n border: 1px solid rgba(0, 0, 0, 0.10);\n background: rgba(0, 0, 0, 0.02);\n font-size: 13px;\n outline: none;\n\n &:focus {\n background: #fff;\n border-color: rgba(0, 0, 0, 0.22);\n }\n}\n\n.hl-conv__list {\n padding: 6px 8px 10px;\n overflow: auto;\n flex: 1;\n}\n\n/* item:通讯录风格 */\n.hl-conv__item {\n padding: 10px 10px;\n border-radius: 12px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.03);\n }\n\n &.active {\n background: rgba(0, 0, 0, 0.06);\n }\n\n & + & {\n margin-top: 6px;\n }\n}\n\n.hl-conv__left {\n display: flex;\n gap: 10px;\n align-items: center;\n min-width: 0;\n}\n\n.hl-conv__avatar {\n width: 38px;\n height: 38px;\n border-radius: 12px;\n display: grid;\n place-items: center;\n font-weight: 700;\n font-size: 14px;\n background: rgba(0, 0, 0, 0.06);\n color: rgba(0, 0, 0, 0.72);\n flex: 0 0 auto;\n}\n\n.hl-conv__main {\n min-width: 0;\n flex: 1;\n}\n\n.hl-conv__row1 {\n display: flex;\n align-items: baseline;\n gap: 8px;\n}\n\n.hl-conv__title {\n font-size: 14px;\n font-weight: 600;\n line-height: 18px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex: 1;\n}\n\n.hl-conv__time {\n flex: 0 0 auto;\n font-size: 12px;\n line-height: 16px;\n opacity: 0.55;\n}\n\n.hl-conv__row2 {\n margin-top: 4px;\n display: flex;\n gap: 8px;\n align-items: center;\n min-width: 0;\n}\n\n.hl-conv__sub {\n font-size: 12px;\n line-height: 16px;\n opacity: 0.65;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex: 1;\n}\n\n.hl-conv__tag {\n flex: 0 0 auto;\n font-size: 12px;\n line-height: 16px;\n padding: 2px 8px;\n border-radius: 999px;\n border: 1px solid rgba(0, 0, 0, 0.10);\n background: rgba(0, 0, 0, 0.02);\n opacity: 0.85;\n}\n\n.hl-conv__empty {\n padding: 20px;\n opacity: 0.6;\n text-align: center;\n}\n\n.hl-conv__right {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 6px;\n}\n\n.badge {\n display: inline-flex;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n line-height: 18px;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background: rgba(0, 0, 0, 0.06);\n font-weight: 600;\n}\n\n\n</style>\n"],"names":["props","__props","tab","ref","kw","list","activeId","off1","off2","metaMap","offMeta","onMounted","ids","next","id","p","onUnmounted","filtered","computed","select","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","$event","_hoisted_3","_Fragment","_renderList","c","_hoisted_5","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14"],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { defineComponent as b, ref as d, onMounted as k, onUnmounted as T, computed as x, createElementBlock as l, openBlock as i, createElementVNode as o, withDirectives as M, normalizeClass as p, vModelText as I, Fragment as L, renderList as D, toDisplayString as a, createCommentVNode as f } from "vue";
2
+ const E = { class: "hl-conv" }, N = { class: "hl-conv__tabs" }, S = { class: "hl-conv__list" }, V = ["onClick"], $ = { class: "hl-conv__left" }, B = { class: "hl-conv__avatar" }, F = { class: "hl-conv__main" }, U = { class: "hl-conv__row1" }, z = { class: "hl-conv__title" }, P = {
3
+ key: 0,
4
+ class: "hl-conv__time"
5
+ }, j = {
6
+ key: 0,
7
+ class: "badge"
8
+ }, q = { class: "hl-conv__row2" }, A = { class: "hl-conv__sub" }, G = {
9
+ key: 0,
10
+ class: "hl-conv__tag"
11
+ }, K = /* @__PURE__ */ b({
12
+ __name: "PcConversationListSplit",
13
+ props: {
14
+ client: {},
15
+ classifier: { type: Function }
16
+ },
17
+ setup(y) {
18
+ const n = y, c = d("todo"), _ = d(""), u = d([]), r = d("");
19
+ let h, m;
20
+ const v = d({});
21
+ let C;
22
+ k(() => {
23
+ C = ({ ids: t }) => {
24
+ const s = { ...v.value };
25
+ t.forEach((e) => {
26
+ s[e] = n.client.getConversationMeta(e);
27
+ }), v.value = s;
28
+ }, n.client.on("conversation:meta-updated", C);
29
+ }), k(() => {
30
+ r.value = n.client.activeConversationId ?? "", h = (t) => {
31
+ console.log("conversation:list event received", "p:", t, "p.conversations:", t?.conversations), t && "conversations" in t ? (u.value = t.conversations, console.log("conversation:list", "11111", u.value)) : console.warn("conversation:list event payload format unexpected:", t);
32
+ }, m = (t) => {
33
+ r.value = t.conversationId, console.log("activeId.value", r.value);
34
+ }, n.client.on("conversation:list", h), n.client.on("conversation:active", m);
35
+ }), T(() => {
36
+ n.client.off("conversation:list", h), n.client.off("conversation:active", m);
37
+ });
38
+ const g = x(() => (n.classifier, c.value, _.value.trim().toLowerCase(), u.value));
39
+ async function w(t) {
40
+ await n.client.switchConversation(t);
41
+ }
42
+ return (t, s) => (i(), l("div", E, [
43
+ o("div", N, [
44
+ o("button", {
45
+ class: p({ active: c.value === "todo" }),
46
+ onClick: s[0] || (s[0] = (e) => c.value = "todo")
47
+ }, "未完成", 2),
48
+ o("button", {
49
+ class: p({ active: c.value === "done" }),
50
+ onClick: s[1] || (s[1] = (e) => c.value = "done")
51
+ }, "已完成", 2),
52
+ M(o("input", {
53
+ "onUpdate:modelValue": s[2] || (s[2] = (e) => _.value = e),
54
+ class: "hl-conv__search",
55
+ placeholder: "搜索会话"
56
+ }, null, 512), [
57
+ [I, _.value]
58
+ ])
59
+ ]),
60
+ o("div", S, [
61
+ (i(!0), l(L, null, D(g.value, (e) => (i(), l("div", {
62
+ key: e.id,
63
+ class: p(["hl-conv__item", { active: e.id === r.value }]),
64
+ onClick: (H) => w(e.id)
65
+ }, [
66
+ o("div", $, [
67
+ o("div", B, a((e.title || e.id).slice(0, 1)), 1),
68
+ o("div", F, [
69
+ o("div", U, [
70
+ o("div", z, a(e.title || e.id), 1),
71
+ e.lastTime ? (i(), l("span", P, a(new Date(e.lastTime).toLocaleTimeString()), 1)) : f("", !0),
72
+ o("span", null, [
73
+ e.unreadCount ? (i(), l("span", j, a(e.unreadCount), 1)) : f("", !0)
74
+ ])
75
+ ]),
76
+ o("div", q, [
77
+ o("span", A, a(v.value[e.id]?.deptName || ""), 1),
78
+ v.value[e.id]?.consultType ? (i(), l("span", G, a(v.value[e.id]?.consultType || ""), 1)) : f("", !0)
79
+ ])
80
+ ])
81
+ ])
82
+ ], 10, V))), 128))
83
+ ])
84
+ ]));
85
+ }
86
+ });
87
+ export {
88
+ K as default
89
+ };
90
+ //# sourceMappingURL=PcConversationListSplit.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PcConversationListSplit.vue2.mjs","sources":["../../../src/ui/components/PcConversationListSplit.vue"],"sourcesContent":["<template>\n <div class=\"hl-conv\">\n <div class=\"hl-conv__tabs\">\n <button :class=\"{ active: tab === 'todo' }\" @click=\"tab = 'todo'\">未完成</button>\n <button :class=\"{ active: tab === 'done' }\" @click=\"tab = 'done'\">已完成</button>\n <input v-model=\"kw\" class=\"hl-conv__search\" placeholder=\"搜索会话\" />\n </div>\n\n <div class=\"hl-conv__list\">\n <div\n v-for=\"c in filtered\"\n :key=\"c.id\"\n class=\"hl-conv__item\"\n :class=\"{ active: c.id === activeId }\"\n @click=\"select(c.id)\"\n >\n <div class=\"hl-conv__left\">\n <div class=\"hl-conv__avatar\">\n {{ (c.title || c.id).slice(0, 1) }}\n </div>\n\n <div class=\"hl-conv__main\">\n <div class=\"hl-conv__row1\">\n <div class=\"hl-conv__title\">{{ c.title || c.id }}</div>\n <span v-if=\"c.lastTime\" class=\"hl-conv__time\">\n {{ new Date(c.lastTime).toLocaleTimeString() }}\n </span>\n <span>\n <span v-if=\"c.unreadCount\" class=\"badge\">{{ c.unreadCount }}</span>\n </span>\n </div>\n\n <div class=\"hl-conv__row2\">\n <span class=\"hl-conv__sub\">\n {{ (metaMap as Record<string, any>)[c.id]?.deptName || '' }}\n </span>\n <span\n v-if=\"(metaMap as Record<string, any>)[c.id]?.consultType\"\n class=\"hl-conv__tag\"\n >\n {{ (metaMap as Record<string, any>)[c.id]?.consultType || '' }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport type { IMClient } from '../../core/client'\nimport type { IMConversation } from '../../core/types'\n\nconst props = defineProps<{\n client: IMClient\n classifier?: (c: IMConversation) => 'done' | 'todo'\n}>()\n\nconst tab = ref<'done' | 'todo'>('todo')\nconst kw = ref('')\nconst list = ref<IMConversation[]>([])\nconst activeId = ref<string>('')\n\nlet off1: any, off2: any\nconst metaMap = ref({})\n\nlet offMeta\nonMounted(() => {\n offMeta = ({ ids }) => {\n // 从 client 拉最新的 meta 回来,写进 ref(响应式)\n const next = { ...metaMap.value }\n ids.forEach((id) => {\n next[id] = props.client.getConversationMeta(id)\n })\n metaMap.value = next\n }\n props.client.on('conversation:meta-updated', offMeta)\n})\n\nonMounted(() => {\n // 注意:client 没有公开的 conversations getter,所以这里可能是 undefined\n // 初始值会在事件触发时设置\n activeId.value = props.client.activeConversationId ?? ''\n\n off1 = (p: any) => {\n console.log('conversation:list event received', 'p:', p, 'p.conversations:', p?.conversations)\n // mitt 会将 emit 的第二个参数直接传递给监听器\n // 所以 p 应该是 { conversations: [...] }\n if (p && 'conversations' in p) {\n list.value = p.conversations\n console.log('conversation:list', '11111', list.value)\n } else {\n console.warn('conversation:list event payload format unexpected:', p)\n }\n }\n off2 = (p: any) => {\n activeId.value = p.conversationId\n console.log('activeId.value', activeId.value)\n }\n\n props.client.on('conversation:list', off1)\n props.client.on('conversation:active', off2)\n})\n\nonUnmounted(() => {\n props.client.off('conversation:list', off1)\n props.client.off('conversation:active', off2)\n})\n\nconst filtered = computed(() => {\n const classify = props.classifier ?? (() => 'todo' as const)\n const t = tab.value\n const k = kw.value.trim().toLowerCase()\n return list.value\n // .filter((c) => classify(c) === t)\n // .filter((c) => {\n // console.log('conversation:666', '333', c)\n // if (!k) return true\n // return (c.title ?? '').toLowerCase().includes(k) || c.id.toLowerCase().includes(k)\n // })\n})\n\nasync function select(id: string) {\n await props.client.switchConversation(id)\n}\n</script>\n\n<style scoped lang=\"scss\">\n.hl-conv {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #fff;\n}\n\n.hl-conv__tabs {\n display: flex;\n gap: 8px;\n padding: 10px 12px;\n align-items: center;\n position: sticky;\n top: 0;\n background: #fff;\n z-index: 1;\n border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n\n button {\n padding: 6px 10px;\n border-radius: 999px;\n border: 1px solid rgba(0, 0, 0, 0.10);\n background: rgba(0, 0, 0, 0.02);\n font-size: 13px;\n line-height: 18px;\n\n &.active {\n font-weight: 600;\n background: rgba(0, 0, 0, 0.06);\n border-color: rgba(0, 0, 0, 0.14);\n }\n }\n}\n\n.hl-conv__search {\n margin-left: auto;\n flex: 1;\n min-width: 140px;\n padding: 8px 10px;\n border-radius: 999px;\n border: 1px solid rgba(0, 0, 0, 0.10);\n background: rgba(0, 0, 0, 0.02);\n font-size: 13px;\n outline: none;\n\n &:focus {\n background: #fff;\n border-color: rgba(0, 0, 0, 0.22);\n }\n}\n\n.hl-conv__list {\n padding: 6px 8px 10px;\n overflow: auto;\n flex: 1;\n}\n\n/* item:通讯录风格 */\n.hl-conv__item {\n padding: 10px 10px;\n border-radius: 12px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n\n &:hover {\n background: rgba(0, 0, 0, 0.03);\n }\n\n &.active {\n background: rgba(0, 0, 0, 0.06);\n }\n\n & + & {\n margin-top: 6px;\n }\n}\n\n.hl-conv__left {\n display: flex;\n gap: 10px;\n align-items: center;\n min-width: 0;\n}\n\n.hl-conv__avatar {\n width: 38px;\n height: 38px;\n border-radius: 12px;\n display: grid;\n place-items: center;\n font-weight: 700;\n font-size: 14px;\n background: rgba(0, 0, 0, 0.06);\n color: rgba(0, 0, 0, 0.72);\n flex: 0 0 auto;\n}\n\n.hl-conv__main {\n min-width: 0;\n flex: 1;\n}\n\n.hl-conv__row1 {\n display: flex;\n align-items: baseline;\n gap: 8px;\n}\n\n.hl-conv__title {\n font-size: 14px;\n font-weight: 600;\n line-height: 18px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex: 1;\n}\n\n.hl-conv__time {\n flex: 0 0 auto;\n font-size: 12px;\n line-height: 16px;\n opacity: 0.55;\n}\n\n.hl-conv__row2 {\n margin-top: 4px;\n display: flex;\n gap: 8px;\n align-items: center;\n min-width: 0;\n}\n\n.hl-conv__sub {\n font-size: 12px;\n line-height: 16px;\n opacity: 0.65;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n flex: 1;\n}\n\n.hl-conv__tag {\n flex: 0 0 auto;\n font-size: 12px;\n line-height: 16px;\n padding: 2px 8px;\n border-radius: 999px;\n border: 1px solid rgba(0, 0, 0, 0.10);\n background: rgba(0, 0, 0, 0.02);\n opacity: 0.85;\n}\n\n.hl-conv__empty {\n padding: 20px;\n opacity: 0.6;\n text-align: center;\n}\n\n.hl-conv__right {\n flex: 0 0 auto;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 6px;\n}\n\n.badge {\n display: inline-flex;\n min-width: 18px;\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n line-height: 18px;\n border: 1px solid rgba(0, 0, 0, 0.12);\n background: rgba(0, 0, 0, 0.06);\n font-weight: 600;\n}\n\n\n</style>\n"],"names":["props","__props","tab","ref","kw","list","activeId","off1","off2","metaMap","offMeta","onMounted","ids","next","id","p","onUnmounted","filtered","computed","select","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","$event","_hoisted_3","_Fragment","_renderList","c","_hoisted_5","_hoisted_6","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./SysMessage.vue2.cjs");;/* empty css */const s=require("../../_virtual/_plugin-vue_export-helper.cjs"),r=s(e,[["__scopeId","data-v-8ec80450"]]);module.exports=r;
2
+ //# sourceMappingURL=SysMessage.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SysMessage.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { Envelope } from '../../core/types';
2
+ type __VLS_Props = {
3
+ envelope: Envelope<any>;
4
+ rawMessage?: any;
5
+ };
6
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
7
+ action: (p: {
8
+ action: any["actions"][number];
9
+ envelope: Envelope<SysPayload>;
10
+ rawMessage?: any;
11
+ }) => any;
12
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
13
+ onAction?: ((p: {
14
+ action: any["actions"][number];
15
+ envelope: Envelope<SysPayload>;
16
+ rawMessage?: any;
17
+ }) => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
19
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import o from "./SysMessage.vue2.mjs";
2
+ /* empty css */
3
+ import s from "../../_virtual/_plugin-vue_export-helper.mjs";
4
+ const a = /* @__PURE__ */ s(o, [["__scopeId", "data-v-8ec80450"]]);
5
+ export {
6
+ a as default
7
+ };
8
+ //# sourceMappingURL=SysMessage.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SysMessage.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),u={key:0,class:"hl-sys-msg__title"},m={class:"hl-sys-msg__text"},_={key:1,class:"hl-sys-msg__actions"},y=["onClick"],d=e.defineComponent({__name:"SysMessage",props:{envelope:{},rawMessage:{}},emits:["action"],setup(r,{emit:l}){const t=r,i=l,s=e.computed(()=>t.envelope||{}),c=e.computed(()=>t.envelope.type==="sys.alert"?"is-alert":t.envelope.type==="sys.progress"?"is-progress":"is-notice");function a(n){return n==="primary"?"is-primary":n==="danger"?"is-danger":"is-default"}function p(n){i("action",{action:n,envelope:t.envelope,rawMessage:t.rawMessage})}return(n,v)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["hl-sys-msg",c.value])},[s.value.title?(e.openBlock(),e.createElementBlock("div",u,e.toDisplayString(s.value.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",m,e.toDisplayString(s.value.text),1),s.value.actions?.length?(e.openBlock(),e.createElementBlock("div",_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value.actions,o=>(e.openBlock(),e.createElementBlock("button",{key:o.id,class:e.normalizeClass(["hl-sys-msg__btn",a(o.style)]),type:"button",onClick:g=>p(o)},e.toDisplayString(o.text),11,y))),128))])):e.createCommentVNode("",!0)],2))}});module.exports=d;
2
+ //# sourceMappingURL=SysMessage.vue2.cjs.map