macOS IMKit

macOS 端 IMKit 在 IMLib 之上提供 10 个可组合 UI 组件(会话列表、会话页、气泡、输入区、头像、未读角标、时间分割、发送状态、主题与门面):组件语义跨端一致,只有 UI 框架与挂载方式不同。本端形态:宿主自渲染:SDK 不导出 UI 组件,IMKit 的 props / events / behaviors 是渲染契约,由宿主用 HTML / React / Vue 实现。

平台状态

契约 IDL v1.0.0(frozen,冻结修订 35);组件数 10;绑定状态:ga。IMKit -> IMLib(公开接口)only;IMKit 禁止 import 内部传输层/REST 实现/服务端类型。

macOS 上不导出 UI 组件

SDK(@ni-paas-im/electron)只提供 IMLib、本地 SQLite 与 preload 桥;本页 10 个组件的 props / events / behaviors 是**宿主渲染契约**,不是可 import 的组件类。完整接线见 macOS 快速开始。

IMKit 是什么​

层职责不做什么
IMLib连接、消息、会话、群组、好友、聊天室、上传(62 个语义 op)不提供 UI
IMKit10 个 UI 组件与门面/主题/格式化不直连网络 / 数据库;只调用 IMLib 公开接口
宿主应用页面导航、业务数据装配、权限与通知不需要重复实现气泡/角标/时间分割

IMKit -> IMLib(公开接口)only;IMKit 禁止 import 内部传输层/REST 实现/服务端类型。

跨端验收口径(IDL crossPlatformAcceptance)

每个平台 IMKit 必须覆盖上述组件语义;无 UI 的平台(Native C ABI)以实现 view-model/格式化/角标/状态计算层交付,并提供可运行示例

IMKit 所有对外行为必须能仅通过 IMLib 公开接口复现(契约校验器静态扫描 import 面)

Web 与 Flutter Demo 必须只通过 IMKit/IMLib 公开接口实现页面,不得直接 fetch/WebSocket/数据库

组件总览​

组件职责Props事件数据源文档
ConversationListView会话列表43IMLib.getConversationList / CONVERSATION 事件增量更新会话列表
ChatView会话详情(消息流 + 输入区)812—会话详情(消息流 + 输入区)
MessageBubble消息气泡(按内容类型渲染)98—消息气泡(按内容类型渲染)
MessageInput输入区57—输入区
Avatar头像40—头像
UnreadBadge未读/提及角标30—未读/提及角标
TimeSeparator时间分隔/格式化20—时间分隔/格式化
MessageStatusIndicator发送状态30—发送状态
Theme主题令牌20—主题令牌
IMKitFacade组件门面/挂载入口12—组件门面/挂载入口

包与门面​

项值
包 / 模块src/renderer
模块路径imkit
门面宿主渲染(SDK 不导出组件)
挂载方式宿主按 props / events / behaviors 自渲染
UI 框架React(可换 Vue;组件不直连网络/DB)
导出符号(0)—
约束只依赖 @ni-paas/im-electron 公开 API;禁止 import 传输层/REST/DB;契约校验器静态扫描 import 面

桌面增强交互(bindings.macos.imkit.desktopEnhancedBehaviors)​

  • 会话列表右键菜单:置顶/取消置顶、免打扰、标为已读、删除本地会话、复制会话 ID
  • 消息 hover 工具条:复制、引用、撤回、转发、多选;多选后支持批量删除/转发
  • 输入区:Enter 发送、Shift+Enter 换行、拖拽文件、粘贴图片、@选择器、表情面板
  • 深链定位:ChatView.scrollToMessage({messageId, highlightMs})
  • 托盘/Dock 角标:由主进程 nativeTheme/通知模块提供,组件只读汇总未读

快速链接​

相关文档​