@cometchat/cards-react-native

中文文档
1.0.0发布于 2026/05/27MITTypeScriptCommonJS零依赖近 30 天下载 9134

CometChat Card Schema renderer for React Native — converts Card Schema JSON into native views

原始使用文档
文档目录9 节
  1. What it does
  2. Installation
  3. Usage
  4. Props
  5. Theming
  6. Actions
  7. Container Style
  8. Zero Dependencies
  9. More

@cometchat/cards-react-native

A React Native renderer for the CometChat Card Schema. Pass in card JSON, get back a native view tree. Taps on interactive elements are emitted to your app through a single callback — the package never executes actions itself.

What it does

  • Parses Card Schema JSON into typed models
  • Renders 20 element types (text, image, icon, avatar, badge, divider, spacer, chip, progressBar, codeBlock, markdown, row, column, grid, accordion, tabs, button, iconButton, link, table)
  • Resolves theme-aware colors and image URLs for auto, light, and dark modes, with optional theme overrides
  • Emits taps on buttons, icon buttons, and links to your onAction callback as typed CometChatCardActionEvents

The package is a pure renderer. It doesn't talk to the CometChat SDK, doesn't manage message lifecycle, and doesn't know about your app's navigation. You decide what each action does.

Installation

npm install @cometchat/cards-react-native

Peer dependencies (must be in your project):

{
  "react": ">=18.0.0",
  "react-native": ">=0.76.0"
}

Usage

import { CometChatCardView } from '@cometchat/cards-react-native';

function CardScreen({ cardJson }: { cardJson: string }) {
  return (
    <CometChatCardView
      cardJson={cardJson}
      themeMode="auto"
      onAction={(event) => {
        // Handle the action — navigate, send a message, open a URL, etc.
        console.log(`action: ${event.action.type} from ${event.elementId}`);
      }}
    />
  );
}

Props

PropTypeDefaultDescription
cardJsonstring—Card Schema JSON string (required)
themeMode'auto' | 'light' | 'dark''auto'Theme mode. auto follows the device system theme.
onAction(event: CometChatCardActionEvent) => void—Callback fired when a user taps an interactive element with a valid action
onContainerStyle(style: CometChatCardResolvedContainerStyle) => void—Emits the card's resolved container style (background, borderRadius, padding, etc.) for the consumer to apply to a parent wrapper
themeOverrideCometChatCardThemeOverride—Override default theme tokens (colors, typography)
logLevel'none' | 'error' | 'warning' | 'verbose''warning'Controls internal logging verbosity

Theming

The renderer falls back to a built-in default theme when JSON omits colors. To override defaults, pass a themeOverride:

<CometChatCardView
  cardJson={cardJson}
  themeMode="dark"
  themeOverride={{
    textColor: { light: '#141414', dark: '#F5F5F5' },
    buttonFilledBg: { light: '#1A73E8', dark: '#8AB4F8' },
  }}
/>

Any ColorValue in the schema is resolved to its light or dark variant based on the effective theme mode.

Actions

When a user taps a button, iconButton, or link, the package invokes onAction with a CometChatCardActionEvent containing:

  • action — the full action object (type + all parameters)
  • elementId — id of the tapped element
  • cardJson — the card JSON the action originated from

Supported action types: openUrl, copyToClipboard, downloadFile, apiCall, chatWithUser, chatWithGroup, sendMessage, initiateCall, customCallback.

If you don't pass onAction, taps are ignored.

Container Style

The onContainerStyle callback emits the card's root container style with colors already resolved for the current theme mode:

const [bubbleStyle, setBubbleStyle] = useState({});

<View style={bubbleStyle}>
  <CometChatCardView
    cardJson={cardJson}
    themeMode="auto"
    onContainerStyle={(style) => setBubbleStyle({
      backgroundColor: style.background,   // already resolved hex string
      borderRadius: style.borderRadius,
      borderColor: style.borderColor,
    })}
  />
</View>

This is useful when embedding the card inside a message bubble — the bubble wrapper can match the card's visual settings.

Zero Dependencies

The package has no runtime dependencies beyond React and React Native. Image loading uses RN's built-in <Image>, animations use Animated, markdown is parsed with a custom built-in parser, and shimmer placeholders are rendered with native Views.

More

See the CardRendererDemo/ app for runnable samples and the design documents for the full schema reference.

版本与发布记录

@cometchat/cards-react-native 共发布 1 个版本,首次发布于 2026/05/27;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.0.0latest2026/05/275 个月前

关于 @cometchat/cards-react-native 的常见问题

@cometchat/cards-react-native 是什么?

CometChat Card Schema renderer for React Native — converts Card Schema JSON into native views

如何安装 @cometchat/cards-react-native?

在项目目录运行 npm install @cometchat/cards-react-native,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18.0.0)、react-native(>=0.76.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@cometchat/cards-react-native 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cometchat/cards-react-native 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@cometchat/cards-react-native 可以商用吗?

@cometchat/cards-react-native 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cometchat/cards-react-native 的下载量有多少?

根据 npm 官方下载统计,@cometchat/cards-react-native 在 2026/10/11 – 2026/11/09 这 30 天内被下载 9,134 次,日均约 304 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cometchat/cards-react-native 还在维护吗?

最新版本 1.0.0 发布于 2026/05/27(5 个月前);至今共发布 1 个版本,其中过去 12 个月发布了 1 个;首次发布于 2026/05/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。