@composy/chat-core 0.0.1

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 (123) hide show
  1. package/README.md +123 -0
  2. package/dist/index.js +1868 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/index.min.js +1868 -0
  5. package/es/constants/dom.d.ts +41 -0
  6. package/es/constants/dom.d.ts.map +1 -0
  7. package/es/constants/dom.js +30 -0
  8. package/es/constants/dom.js.map +1 -0
  9. package/es/core/chat-manager.d.ts +34 -0
  10. package/es/core/chat-manager.d.ts.map +1 -0
  11. package/es/core/chat-manager.js +93 -0
  12. package/es/core/chat-manager.js.map +1 -0
  13. package/es/core/event-emitter.d.ts +48 -0
  14. package/es/core/event-emitter.d.ts.map +1 -0
  15. package/es/core/event-emitter.js +75 -0
  16. package/es/core/event-emitter.js.map +1 -0
  17. package/es/core/mention-engine.d.ts +41 -0
  18. package/es/core/mention-engine.d.ts.map +1 -0
  19. package/es/core/mention-engine.js +117 -0
  20. package/es/core/mention-engine.js.map +1 -0
  21. package/es/index.d.ts +28 -0
  22. package/es/index.d.ts.map +1 -0
  23. package/es/index.js +140 -0
  24. package/es/index.js.map +1 -0
  25. package/es/renderer/dom-renderer.d.ts +79 -0
  26. package/es/renderer/dom-renderer.d.ts.map +1 -0
  27. package/es/renderer/dom-renderer.js +677 -0
  28. package/es/renderer/dom-renderer.js.map +1 -0
  29. package/es/renderer/style-manager.d.ts +58 -0
  30. package/es/renderer/style-manager.d.ts.map +1 -0
  31. package/es/renderer/style-manager.js +641 -0
  32. package/es/renderer/style-manager.js.map +1 -0
  33. package/es/theme/theme-manager.d.ts +33 -0
  34. package/es/theme/theme-manager.d.ts.map +1 -0
  35. package/es/theme/theme-manager.js +70 -0
  36. package/es/theme/theme-manager.js.map +1 -0
  37. package/es/theme/tokens.d.ts +57 -0
  38. package/es/theme/tokens.d.ts.map +1 -0
  39. package/es/theme/tokens.js +108 -0
  40. package/es/theme/tokens.js.map +1 -0
  41. package/es/types/index.d.ts +204 -0
  42. package/es/types/index.d.ts.map +1 -0
  43. package/es/types/index.js +10 -0
  44. package/esm/constants/dom.d.ts +41 -0
  45. package/esm/constants/dom.d.ts.map +1 -0
  46. package/esm/constants/dom.js +30 -0
  47. package/esm/constants/dom.js.map +1 -0
  48. package/esm/core/chat-manager.d.ts +34 -0
  49. package/esm/core/chat-manager.d.ts.map +1 -0
  50. package/esm/core/chat-manager.js +93 -0
  51. package/esm/core/chat-manager.js.map +1 -0
  52. package/esm/core/event-emitter.d.ts +48 -0
  53. package/esm/core/event-emitter.d.ts.map +1 -0
  54. package/esm/core/event-emitter.js +75 -0
  55. package/esm/core/event-emitter.js.map +1 -0
  56. package/esm/core/mention-engine.d.ts +41 -0
  57. package/esm/core/mention-engine.d.ts.map +1 -0
  58. package/esm/core/mention-engine.js +117 -0
  59. package/esm/core/mention-engine.js.map +1 -0
  60. package/esm/index.d.ts +28 -0
  61. package/esm/index.d.ts.map +1 -0
  62. package/esm/index.js +140 -0
  63. package/esm/index.js.map +1 -0
  64. package/esm/renderer/dom-renderer.d.ts +79 -0
  65. package/esm/renderer/dom-renderer.d.ts.map +1 -0
  66. package/esm/renderer/dom-renderer.js +677 -0
  67. package/esm/renderer/dom-renderer.js.map +1 -0
  68. package/esm/renderer/style-manager.d.ts +58 -0
  69. package/esm/renderer/style-manager.d.ts.map +1 -0
  70. package/esm/renderer/style-manager.js +641 -0
  71. package/esm/renderer/style-manager.js.map +1 -0
  72. package/esm/theme/theme-manager.d.ts +33 -0
  73. package/esm/theme/theme-manager.d.ts.map +1 -0
  74. package/esm/theme/theme-manager.js +70 -0
  75. package/esm/theme/theme-manager.js.map +1 -0
  76. package/esm/theme/tokens.d.ts +57 -0
  77. package/esm/theme/tokens.d.ts.map +1 -0
  78. package/esm/theme/tokens.js +108 -0
  79. package/esm/theme/tokens.js.map +1 -0
  80. package/esm/types/index.d.ts +204 -0
  81. package/esm/types/index.d.ts.map +1 -0
  82. package/esm/types/index.js +10 -0
  83. package/lib/constants/dom.cjs +36 -0
  84. package/lib/constants/dom.cjs.map +1 -0
  85. package/lib/constants/dom.d.ts +41 -0
  86. package/lib/constants/dom.d.ts.map +1 -0
  87. package/lib/core/chat-manager.cjs +94 -0
  88. package/lib/core/chat-manager.cjs.map +1 -0
  89. package/lib/core/chat-manager.d.ts +34 -0
  90. package/lib/core/chat-manager.d.ts.map +1 -0
  91. package/lib/core/event-emitter.cjs +76 -0
  92. package/lib/core/event-emitter.cjs.map +1 -0
  93. package/lib/core/event-emitter.d.ts +48 -0
  94. package/lib/core/event-emitter.d.ts.map +1 -0
  95. package/lib/core/mention-engine.cjs +118 -0
  96. package/lib/core/mention-engine.cjs.map +1 -0
  97. package/lib/core/mention-engine.d.ts +41 -0
  98. package/lib/core/mention-engine.d.ts.map +1 -0
  99. package/lib/index.cjs +160 -0
  100. package/lib/index.cjs.map +1 -0
  101. package/lib/index.d.ts +28 -0
  102. package/lib/index.d.ts.map +1 -0
  103. package/lib/package.json +3 -0
  104. package/lib/renderer/dom-renderer.cjs +678 -0
  105. package/lib/renderer/dom-renderer.cjs.map +1 -0
  106. package/lib/renderer/dom-renderer.d.ts +79 -0
  107. package/lib/renderer/dom-renderer.d.ts.map +1 -0
  108. package/lib/renderer/style-manager.cjs +646 -0
  109. package/lib/renderer/style-manager.cjs.map +1 -0
  110. package/lib/renderer/style-manager.d.ts +58 -0
  111. package/lib/renderer/style-manager.d.ts.map +1 -0
  112. package/lib/theme/theme-manager.cjs +71 -0
  113. package/lib/theme/theme-manager.cjs.map +1 -0
  114. package/lib/theme/theme-manager.d.ts +33 -0
  115. package/lib/theme/theme-manager.d.ts.map +1 -0
  116. package/lib/theme/tokens.cjs +110 -0
  117. package/lib/theme/tokens.cjs.map +1 -0
  118. package/lib/theme/tokens.d.ts +57 -0
  119. package/lib/theme/tokens.d.ts.map +1 -0
  120. package/lib/types/index.cjs +11 -0
  121. package/lib/types/index.d.ts +204 -0
  122. package/lib/types/index.d.ts.map +1 -0
  123. package/package.json +107 -0
package/es/index.js ADDED
@@ -0,0 +1,140 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/chat-core v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:30:32 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ import { COMPONENT_CSS_VAR_PREFIX, DEFAULT_CLASS_PREFIX, STYLE_ELEMENT_ID, cx, getStyleElementId, normalizeClassPrefix } from "./constants/dom.js";
11
+ import { ChatManager } from "./core/chat-manager.js";
12
+ import { EventEmitter } from "./core/event-emitter.js";
13
+ import { MentionEngine } from "./core/mention-engine.js";
14
+ import { darkTokens, lightTokens } from "./theme/tokens.js";
15
+ import { ThemeManager } from "./theme/theme-manager.js";
16
+ import { DOMRenderer } from "./renderer/dom-renderer.js";
17
+ import { cls, clsx, injectStyles, removeStyles, updateStyles } from "./renderer/style-manager.js";
18
+ //#region src/index.ts
19
+ const version = "0.1.0";
20
+ function createChat(config) {
21
+ const container = typeof config.container === "string" ? document.querySelector(config.container) : config.container;
22
+ if (!container) throw new Error(`[Chat] Container not found: ${config.container}`);
23
+ const prefix = normalizeClassPrefix(config.classPrefix ?? "ldesign-chat");
24
+ const normalizedConfig = {
25
+ ...config,
26
+ classPrefix: prefix
27
+ };
28
+ const emitter = new EventEmitter();
29
+ const chatManager = new ChatManager(emitter, normalizedConfig.messages);
30
+ const mentionEngine = new MentionEngine(emitter, normalizedConfig.mentionMembers);
31
+ const themeManager = new ThemeManager(emitter, normalizedConfig.theme ?? "light");
32
+ const renderer = new DOMRenderer(container, normalizedConfig, emitter, mentionEngine);
33
+ injectStyles(themeManager.getTokens(), prefix);
34
+ renderer.init();
35
+ renderer.renderMessages(chatManager.getMessages());
36
+ requestAnimationFrame(() => {
37
+ renderer.scrollToBottom(false);
38
+ });
39
+ emitter.on("theme-change", (_resolved, tokens) => {
40
+ updateStyles(tokens, prefix);
41
+ });
42
+ emitter.on("message-added", (message) => {
43
+ renderer.appendMessage(message);
44
+ requestAnimationFrame(() => {
45
+ renderer.scrollToBottom(true);
46
+ });
47
+ });
48
+ emitter.on("messages-prepended", (messages) => {
49
+ renderer.prependMessages(messages);
50
+ });
51
+ emitter.on("message-updated", (message) => {
52
+ renderer.updateMessage(message.id, message);
53
+ });
54
+ emitter.on("message-removed", (message) => {
55
+ renderer.removeMessage(message.id);
56
+ });
57
+ emitter.on("message-content-appended", (id, content) => {
58
+ renderer.updateMessageContent(id, content);
59
+ requestAnimationFrame(() => {
60
+ renderer.scrollToBottom(false);
61
+ });
62
+ });
63
+ return {
64
+ addMessage(message) {
65
+ chatManager.addMessage(message);
66
+ },
67
+ prependMessages(messages) {
68
+ chatManager.prependMessages(messages);
69
+ },
70
+ updateMessage(id, updates) {
71
+ chatManager.updateMessage(id, updates);
72
+ },
73
+ removeMessage(id) {
74
+ chatManager.removeMessage(id);
75
+ },
76
+ setMessages(messages) {
77
+ chatManager.setMessages(messages);
78
+ renderer.renderMessages(chatManager.getMessages());
79
+ requestAnimationFrame(() => {
80
+ renderer.scrollToBottom(false);
81
+ });
82
+ },
83
+ clearMessages() {
84
+ chatManager.clearMessages();
85
+ renderer.renderMessages([]);
86
+ },
87
+ scrollToBottom(smooth = true) {
88
+ renderer.scrollToBottom(smooth);
89
+ },
90
+ setTheme(theme) {
91
+ themeManager.setTheme(theme);
92
+ },
93
+ setMentionMembers(members) {
94
+ mentionEngine.setMembers(members);
95
+ },
96
+ setLoadingMore(loading) {
97
+ renderer.setLoadingMore(loading);
98
+ },
99
+ focusInput() {
100
+ renderer.focusInput();
101
+ },
102
+ setInputContent(content) {
103
+ renderer.setInputContent(content);
104
+ },
105
+ getInputContent() {
106
+ return renderer.getInputContent();
107
+ },
108
+ clearInput() {
109
+ renderer.clearInput();
110
+ },
111
+ isAtBottom(threshold) {
112
+ return renderer.isAtBottom(threshold);
113
+ },
114
+ on(event, handler) {
115
+ return emitter.on(event, handler);
116
+ },
117
+ getMessages() {
118
+ return chatManager.getMessages();
119
+ },
120
+ getMessage(id) {
121
+ return chatManager.getMessage(id);
122
+ },
123
+ appendMessageContent(id, chunk) {
124
+ chatManager.appendMessageContent(id, chunk);
125
+ },
126
+ finishStreaming(id) {
127
+ chatManager.finishStreaming(id);
128
+ },
129
+ destroy() {
130
+ themeManager.destroy();
131
+ renderer.destroy();
132
+ emitter.removeAll();
133
+ removeStyles(prefix);
134
+ }
135
+ };
136
+ }
137
+ //#endregion
138
+ export { COMPONENT_CSS_VAR_PREFIX, ChatManager, DEFAULT_CLASS_PREFIX, DOMRenderer, EventEmitter, MentionEngine, STYLE_ELEMENT_ID, ThemeManager, cls, clsx, createChat, cx, darkTokens, getStyleElementId, injectStyles, lightTokens, normalizeClassPrefix, removeStyles, updateStyles, version };
139
+ /*! End of @composy/chat-core | Powered by @composy/builder */
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\n * @composy/chat-core - 即时通讯/IM 组件核心库\n *\n * 提供聊天气泡、消息列表、@提及、多消息类型(文本/图片/文件/系统消息/自定义)、\n * 消息状态管理(发送中/已发送/已送达/已读/失败)、亮暗主题切换等能力。\n * 框架无关的核心实现,配合 Vue/React 适配层使用。\n *\n * @packageDocumentation\n * @module @composy/chat-core\n */\n\nimport type { ChatConfig, ChatInstance, ChatMessage, ThemeMode, MentionItem, ToolbarConfig } from './types';\nimport type { ThemeTokens } from './theme/tokens';\nimport { EventEmitter } from './core/event-emitter';\nimport { ChatManager } from './core/chat-manager';\nimport { MentionEngine } from './core/mention-engine';\nimport { ThemeManager } from './theme/theme-manager';\nimport { DOMRenderer } from './renderer/dom-renderer';\nimport { injectStyles, updateStyles, removeStyles } from './renderer/style-manager';\nimport { DEFAULT_CLASS_PREFIX, normalizeClassPrefix } from './constants/dom';\n\nexport const version = '0.1.0';\n\n// Types\nexport * from './types';\n\n// Core\nexport { EventEmitter } from './core/event-emitter';\nexport { ChatManager } from './core/chat-manager';\nexport { MentionEngine } from './core/mention-engine';\nexport type { MentionState } from './core/mention-engine';\n\n// Theme\nexport { ThemeManager } from './theme/theme-manager';\nexport type { ThemeTokens } from './theme/tokens';\nexport { lightTokens, darkTokens } from './theme/tokens';\n\n// Renderer\nexport { DOMRenderer } from './renderer/dom-renderer';\nexport { injectStyles, updateStyles, removeStyles, cls, clsx } from './renderer/style-manager';\nexport {\n DEFAULT_CLASS_PREFIX,\n COMPONENT_CSS_VAR_PREFIX,\n STYLE_ELEMENT_ID,\n getStyleElementId,\n normalizeClassPrefix,\n cx,\n} from './constants/dom';\n\n/**\n * 创建聊天实例\n */\nexport function createChat(config: ChatConfig): ChatInstance {\n // 解析容器\n const container =\n typeof config.container === 'string'\n ? document.querySelector<HTMLElement>(config.container)\n : config.container;\n\n if (!container) {\n throw new Error(`[Chat] Container not found: ${config.container}`);\n }\n\n const prefix = normalizeClassPrefix(config.classPrefix ?? DEFAULT_CLASS_PREFIX);\n const normalizedConfig = {\n ...config,\n classPrefix: prefix,\n };\n const emitter = new EventEmitter();\n const chatManager = new ChatManager(emitter, normalizedConfig.messages);\n const mentionEngine = new MentionEngine(emitter, normalizedConfig.mentionMembers);\n const themeManager = new ThemeManager(emitter, normalizedConfig.theme ?? 'light');\n const renderer = new DOMRenderer(container, normalizedConfig, emitter, mentionEngine);\n\n // 注入样式\n injectStyles(themeManager.getTokens(), prefix);\n\n // 初始化渲染\n renderer.init();\n renderer.renderMessages(chatManager.getMessages());\n\n // 初始滚动到底部\n requestAnimationFrame(() => {\n renderer.scrollToBottom(false);\n });\n\n // 监听主题变化\n emitter.on('theme-change', (_resolved: string, tokens: ThemeTokens) => {\n updateStyles(tokens, prefix);\n });\n\n // 监听消息变化\n emitter.on('message-added', (message: ChatMessage) => {\n renderer.appendMessage(message);\n requestAnimationFrame(() => {\n renderer.scrollToBottom(true);\n });\n });\n\n emitter.on('messages-prepended', (messages: ChatMessage[]) => {\n renderer.prependMessages(messages);\n });\n\n emitter.on('message-updated', (message: ChatMessage) => {\n renderer.updateMessage(message.id, message);\n });\n\n emitter.on('message-removed', (message: ChatMessage) => {\n renderer.removeMessage(message.id);\n });\n\n // 流式消息内容追加\n emitter.on('message-content-appended', (id: string, content: string) => {\n renderer.updateMessageContent(id, content);\n requestAnimationFrame(() => {\n renderer.scrollToBottom(false);\n });\n });\n\n // 创建实例\n const instance: ChatInstance = {\n addMessage(message: ChatMessage) {\n chatManager.addMessage(message);\n },\n\n prependMessages(messages: ChatMessage[]) {\n chatManager.prependMessages(messages);\n },\n\n updateMessage(id: string, updates: Partial<ChatMessage>) {\n chatManager.updateMessage(id, updates);\n },\n\n removeMessage(id: string) {\n chatManager.removeMessage(id);\n },\n\n setMessages(messages: ChatMessage[]) {\n chatManager.setMessages(messages);\n renderer.renderMessages(chatManager.getMessages());\n requestAnimationFrame(() => {\n renderer.scrollToBottom(false);\n });\n },\n\n clearMessages() {\n chatManager.clearMessages();\n renderer.renderMessages([]);\n },\n\n scrollToBottom(smooth = true) {\n renderer.scrollToBottom(smooth);\n },\n\n setTheme(theme: ThemeMode) {\n themeManager.setTheme(theme);\n },\n\n setMentionMembers(members: MentionItem[]) {\n mentionEngine.setMembers(members);\n },\n\n setLoadingMore(loading: boolean) {\n renderer.setLoadingMore(loading);\n },\n\n focusInput() {\n renderer.focusInput();\n },\n\n setInputContent(content: string) {\n renderer.setInputContent(content);\n },\n\n getInputContent() {\n return renderer.getInputContent();\n },\n\n clearInput() {\n renderer.clearInput();\n },\n\n isAtBottom(threshold?: number) {\n return renderer.isAtBottom(threshold);\n },\n\n on(event: string, handler: (...args: unknown[]) => void) {\n return emitter.on(event, handler);\n },\n\n getMessages() {\n return chatManager.getMessages();\n },\n\n getMessage(id: string) {\n return chatManager.getMessage(id);\n },\n\n appendMessageContent(id: string, chunk: string) {\n chatManager.appendMessageContent(id, chunk);\n },\n\n finishStreaming(id: string) {\n chatManager.finishStreaming(id);\n },\n\n destroy() {\n themeManager.destroy();\n renderer.destroy();\n emitter.removeAll();\n removeStyles(prefix);\n },\n };\n\n return instance;\n}\n"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { ChatConfig, ChatMessage, MentionItem } from '../types';
2
+ import { EventEmitter } from '../core/event-emitter';
3
+ import { MentionEngine } from '../core/mention-engine';
4
+ export declare class DOMRenderer {
5
+ private container;
6
+ private config;
7
+ private emitter;
8
+ private mentionEngine;
9
+ private prefix;
10
+ private root;
11
+ private messageListEl;
12
+ private inputArea;
13
+ private textareaEl;
14
+ private sendBtn;
15
+ private mentionPanel;
16
+ private loadMoreEl;
17
+ private toolbarEl;
18
+ private dropOverlay;
19
+ private voiceBtn;
20
+ private loadingMore;
21
+ private isRecording;
22
+ private recognition;
23
+ private lastVoiceTranscript;
24
+ constructor(container: HTMLElement, config: ChatConfig, emitter: EventEmitter, mentionEngine: MentionEngine);
25
+ init(): void;
26
+ updateMessageContent(id: string, content: string): void;
27
+ renderMessages(messages: ChatMessage[]): void;
28
+ appendMessage(message: ChatMessage): void;
29
+ prependMessages(messages: ChatMessage[]): void;
30
+ updateMessage(id: string, message: ChatMessage): void;
31
+ removeMessage(id: string): void;
32
+ scrollToBottom(smooth?: boolean): void;
33
+ isAtBottom(threshold?: number): boolean;
34
+ setLoadingMore(loading: boolean): void;
35
+ focusInput(): void;
36
+ setInputContent(content: string): void;
37
+ getInputContent(): string;
38
+ clearInput(): void;
39
+ renderMentionPanel(members: MentionItem[], activeIndex: number): void;
40
+ hideMentionPanel(): void;
41
+ destroy(): void;
42
+ private renderInputArea;
43
+ private renderToolbar;
44
+ private createToolbarBtn;
45
+ private openFilePicker;
46
+ private toggleVoice;
47
+ private startVoice;
48
+ private stopVoice;
49
+ private finishVoice;
50
+ private setupEventListeners;
51
+ private setupDropEvents;
52
+ private handleSend;
53
+ private insertMention;
54
+ private insertTextAtCursor;
55
+ private autoResize;
56
+ private updateSendButtonState;
57
+ private renderLoadMoreButton;
58
+ private renderTimeDivider;
59
+ private createTimeDivider;
60
+ private renderMessageRow;
61
+ private createMessageRow;
62
+ private createAvatar;
63
+ private createMessageFooter;
64
+ private createBubble;
65
+ private renderTextContent;
66
+ private renderEmpty;
67
+ private removeEmpty;
68
+ private el;
69
+ private getMessageElements;
70
+ private formatTime;
71
+ private formatShortTime;
72
+ private formatFileSize;
73
+ private limitInput;
74
+ private getCssSizeValue;
75
+ private escapeHtml;
76
+ private escapeAttr;
77
+ private escapeRegex;
78
+ }
79
+ //# sourceMappingURL=dom-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/dom-renderer.ts"],"names":[],"mappings":"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"}