搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

kevintngo/looseleaf

开发工具

一套手绘纸张风格的 React 组件库,提供 123 个可访问组件并通过 shadcn 注册表分发。

121
8
TypeScript
MIT
创建于 1 天前

项目介绍

Looseleaf 是一个手绘纸张风格的 React 组件库,基于 Tailwind v4 和 Radix 构建。它保留了 shadcn/ui 的组件结构、props 和 data-slot 命名,因此通常可以直接替换现有 JSX 中的组件,而不必调整页面结构。手绘只是视觉装饰,底层语义仍是标准的 Radix。

项目包含 123 个组件、61 个区块(侧边栏、登录、注册、仪表盘、设置、定价、聊天、笔记和落地页)以及 160 个图标、48 个涂鸦、88 个贴纸、徽章和印章,还附带一套名为 Kevin Sans 的手写字体。可访问性方面包括键盘操作、可见焦点、AA 文本、24 px 点击目标、减少动态效果、强制颜色、RTL 和三种密度。

安装与使用

先在 components.json 中注册一次:

{
  "registries": { "@looseleaf": "https://kevintngo.github.io/looseleaf/r/{name}.json" }
}

然后用 shadcn CLI 按需添加:

npx shadcn@latest add @looseleaf/button
npx shadcn@latest add @looseleaf/login-01
npx shadcn@latest add @looseleaf/looseleaf

组件会以源码形式落到 components/ui/*.tsx 和 lib/ink/*,成为项目代码的一部分,而不是运行时依赖。总包 looseleaf 应会带入主题和 Kevin Sans;如果要手动加载字体,可以引入发布好的 CSS:

@import url("https://kevintngo.github.io/looseleaf/fonts/kevin-sans.css");

用 InkProvider 包裹应用后,像普通组件一样使用即可:

import { InkProvider } from "@/lib/ink/react"
import { Button } from "@/components/ui/button"

export function App() {
  return (
    <InkProvider>
      <Button>Save changes</Button>
    </InkProvider>
  )
}

在线文档站是 kevintngo.github.io/looseleaf;注册表格式可参考 shadcn 官方说明。

绘制机制

每个手绘元素都是一个位于真实 DOM 标签之后的 <svg data-ink>。线条由 src/lib/ink/recipes/<component>-ink.ts 中的纯函数配合种子生成,SVG 颜色来自 CSS 变量,因此相同种子在服务端和浏览器中画出同一条线。悬停、按下和焦点状态由 CSS 控制,通过显示预先画好的图层实现,不依赖 React 状态。颜色、笔宽和密度都暴露为 --ll-* token,并映射到 shadcn 的语义变量,这是定制外观的主要入口。

使用约束

  • 面向 React、Tailwind v4 和 shadcn CLI,安装流程默认项目已有 shadcn 风格的 components.json。
  • 组件以源码复制进仓库,需要由使用方自行维护这些生成文件。
  • 代码、美术资源和 Kevin Sans 采用 MIT 许可证;IBM Plex Mono 采用 SIL OFL 1.1。

本地开发

如果要修改组件库或文档站:

npm install
npm run dev              # 文档站
npm run build            # 构建静态站点到 dist/
npm test                 # vitest
npm run registry:build   # 生成 registry.json 和 public/r/*.json

修改组件后需要运行 npm run registry:build,否则注册表仍提供旧源码。推送到 main 会把站点部署到 GitHub Pages。

HotRepo 点评

Looseleaf 在 HotRepo 2026-11-03 的 TypeScript 新项目榜上有记录,当时共 107 星,统计窗口内新增 5 星;2026-11-02 到 2026-11-03 的 UTC 观测中,累计星数从 102 升到 107。序列很短、样本也小,只能说明出现早期关注,不能据此判断长期趋势。它真正的区分点在分发方式:组件以普通源码交给使用方,语义仍是 Radix,因此团队可以先在文档站评估视觉可读性和可访问性,再决定是否采用这套外观。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。