@rencomputer/rencal-sdk

中文文档
0.3.0发布于 2026/11/02MITTypeScriptES Module

为renCal构建视图插件:插件API,设计令牌和零配置构建。

中文使用文档
文档目录7 节
  1. 设置
  2. 声明视图
  3. 编写视图
  4. API
  5. 构建
  6. 发布
  7. 来源

renCal SDK

构建视图插件 renCal. 视图是一个React组件,它与内置的周视图、月视图和年视图一起显示。这个包有插件API、renCal的Tailwind设计令牌和一个不需要配置的构建命令。

设置

pnpm add -D @rencomputer/rencal-sdk @types/react @types/react-dom

将脚本添加到 package.json:

{
  "scripts": {
    "build": "rencal-sdk build",
    "dev": "rencal-sdk dev"
  }
}

扩展共享的 tsconfig.json:

{ "extends": "@rencomputer/rencal-sdk/tsconfig.json" }

声明视图

视图是在插件的 rencal-plugin.toml:

id = "alice.upcoming"
name = "Upcoming"
description = "The next seven days as a list."
min_rencal_version = "0.9.1"

[[contributes.views]]
id = "upcoming"
name = "Upcoming"
script = "dist/upcoming.js"
css = "dist/upcoming.css"

css 是可选的;如果视图没有样式,则将其省略。看到 创建一个插件 其余的舱单。

编写视图

默认情况下,导出组件 src/index.tsx,或from src/<view-id>.tsx 当插件有几个视图时:

import {
  type CalendarEvent,
  useEventProps,
  useEventsInRange,
  useToday,
} from "@rencomputer/rencal-sdk"

export default function UpcomingView() {
  const today = useToday()
  const events = useEventsInRange(today, today.add({ days: 7 }))

  return (
    <ul className="flex flex-col gap-1 p-4">
      {events.map((event) => (
        <EventItem key={event.key} event={event} />
      ))}
    </ul>
  )
}

function EventItem({ event }: { event: CalendarEvent }) {
  return (
    <li {...useEventProps(event)} className="rounded-md px-2 py-1">
      {event.summary}
    </li>
  )
}

顺风类开箱即用并使用renCal的主题,因此视图与用户安装的任何主题匹配。当用户在标题中键入新事件时,renCal将淡入事件和集合 data-dimmed 环视;其他部分也跟着褪色,比如 in-data-dimmed:opacity-50.

API

出口
useEventsInRange(start, end)可见日历中的事件 start 直至,但不包括, end,加上正在创建的事件和拖动事件的预览,标记为 event.transient
useEventProps(event, { drag })使元素表现得像一个renCal事件的道具:日历颜色、选择、RSVP和拖动状态、单击打开、右键单击菜单和with drag,拖动可重新安排
useEventState(event)事件是否被选中、显示其菜单或被拖动
dayProps(date, zone)将元素标记为日:将事件拖放到那里,拖拽、双击或右键单击它将创建一个事件
useDayGrid()正在绘制以创建事件的范围,以及是否正在拖动任何东西
selectionProps()标记一个元素绘制该范围的一部分,因此new-event弹出窗口将在其旁边打开
useToday()今天的日期,保持当前午夜和时区的变化
useViewerTzid()用户的时区,当它改变时保持当前
useNavigation()活动日期,以及转到另一个日期的函数
useOnNavigate(onNavigate)调用 onNavigate 每次经过深思熟虑的导航,甚至到活动日期,把它带入视野
useCalendars()用户的日历
useDisplaySettings()用户的时间格式、一周的第一天以及是否显示周数
useEventAppearance(event)事件的颜色和RSVP,对于非事件元素的标记
Temporal临时API用于日期和时间
eventsByDay(events, start, end)事件分组成一个条目,每天从 start 直至,但不包括, end包括空虚的日子
layoutAllDay(items, start, dayCount), layoutTimed(items), isSpanning(event)renCal的布局是:将活动安排在车道上,并将一天的活动重叠在一起
dateInViewerZone, toViewerZonedDateTime, isAllDay, isSameDay, startOfWeek, isoWeekNumber, epochDay日期助手
formatTime, formatWallclockTime, formatShortDate, formatLongDate, formatWeekday, formatMonth, getRelativeDayLabel遵循renCal的格式
Button, Tooltip, cn, ChevronLeftIcon, ChevronRightIcon, UntitledEventText来自renCal UI的组件和实用程序

React、Temporal和这个包是由renCal在运行时提供的。其他依赖项被捆绑到视图中。

构建

pnpm build 类型检查插件并将每个视图写入 script 和 css 路径在它的manifest中。 pnpm dev 重建每一个变化。

要尝试该插件,请将其目录添加到 ~/.config/rencal/plugins.toml. renCal在每次重建时重新加载它:

plugins = ["~/dev/rencal-upcoming"]

本地插件不需要其他任何东西。保持 dist/ Out of git:它是构建输出。

发布

renCal从最新的GitHub版本安装视图插件,下载每个插件 script 和 css 具有相同文件名的来自发布资产的文件。添加一个构建插件和附加的工作流 dist/* 当您按下一个版本标记时,就会生成一个版本 .github/workflows/release.yml:

name: Release

on:
  push:
    tags:
      - "v*"

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
      attestations: write
    steps:
      - uses: actions/checkout@v7

      - uses: actions/setup-node@v7
        with:
          node-version: 24

      - name: Build
        run: |
          npm ci
          npm run build

      - name: Attest build provenance
        uses: actions/attest@v4
        with:
          subject-path: dist/*

      - name: Create release
        env:
          GH_TOKEN: ${{ github.token }}
        run: gh release create "$GITHUB_REF_NAME" --title "$GITHUB_REF_NAME" --generate-notes dist/*

然后推送一个标签,比如 v0.1.0 发布新闻稿标签是renCal显示的版本。看到 rencal-view-board 对于使用pnpm设置的插件,和 发布插件 在插件目录中列出你的。

来源

SDK是在 renCal库.

版本与发布记录

@rencomputer/rencal-sdk 共发布 4 个版本,首次发布于 2026/10/16;过去 12 个月发布了 4 个版本。

版本发布日期距今
0.3.0latest2026/11/021 天前
0.2.02026/10/1618 天前
0.1.02026/10/1618 天前
0.0.0-stage2026/10/1618 天前

关于 @rencomputer/rencal-sdk 的常见问题

@rencomputer/rencal-sdk 是什么?

为renCal构建视图插件:插件API,设计令牌和零配置构建。

如何安装 @rencomputer/rencal-sdk?

在项目目录运行 npm install @rencomputer/rencal-sdk,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@types/react(^19.2.0)、@types/react-dom(^19.2.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 rencal-sdk,可以用 npx rencal-sdk 直接运行。

@rencomputer/rencal-sdk 支持 TypeScript 吗?

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

@rencomputer/rencal-sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@rencomputer/rencal-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^20.19.0 || >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@rencomputer/rencal-sdk 可以商用吗?

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

@rencomputer/rencal-sdk 还在维护吗?

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