Communitygithub.com

选择库

从精心策划、状态检查的列表中为前端任务选择正确的库,而不是手动编写或安装废弃包。当用户问“我应该用什么……”、“有没有库可以……”或提到某个包名时,以及当你即将构建 toast、命令菜单、抽屉、日期选择器、表格、虚拟列表、拖拽、图表、OTP 输入、动画数字、主题切换、表单验证等时使用。

选择库 是什么?

这个技能帮助 AI 代理在需要前端库时做出明智决策。它提供了一个结构化流程:首先检查 `package.json` 中的现有依赖,然后评估浏览器/平台原生 API 是否能满足需求,接着查阅一份策划的推荐目录(位于 `references/catalogue.md`),并在推荐之前通过 `npm view` 验证包的维护状态和许可证。该技能优先选择平台原生解决方案以消除 bundle 成本并降低维护负担,在需要库时则从“默认”标记的选项中挑选一个当前维护的库。它包含一个“平台优先”比较表,涵盖模态框、日期选择器、表单验证、动画等常见任务,还提供“无效/有效对”表格,展示常见反模式及其更优替代方案。最终输出是一个简洁的推荐块,包含用途说明、禁用场景、许可证和基于实际 npm 数据的维护状态,确保不会推荐已废弃或未维护的包。此技能适用于任何基于文件的 AI 代理(如 Claude Code、Cursor、Codex),重点强调通过系统化检查而非依赖过时知识来避免引入问题。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nkurunziza-saddy/hmm-interfaces/tree/HEAD/pick-library

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

选择库 是做什么的?

在做任何决定之前,应用 product-ui §1(品味日志和优先级)和 §5(哪个技能负责什么)。一条命名某个库的日志规则优先。

当没有指定任务而调用时,用一行文字询问任务,然后停止。

决策顺序

按顺序执行以下步骤,在第一个完全解决任务的步骤处停止。

  1. 已经安装了哪些? 读取 package.json。如果列表中的库或竞品已经完成了该工作,就使用它。用一行文字指出更好的选择,且未经要求绝不更改依赖项。原因:为同一工作引入第二个库会使 bundle 翻倍并增加约定冲突。
  2. 平台能否完全解决? 检查下表。原因:平台方案无 bundle 成本、无升级路径且无废弃风险。
  3. 目录中是否有条目? 打开 references/catalogue.md,找到对应类别,并选用标记为默认的条目。推荐一个库,而不是一个菜单。
  4. 该条目是否仍被维护? 检查状态列。如果标记为未维护,切勿推荐它;使用条目中指定的替代品。
  5. 没有合适的? 说“此任务不在列表中”,然后根据你自己的知识选择并通过下面的验证步骤检查。原因:未经验证的包通常是废弃代码进入项目的途径。

“完全解决”意味着满足任务中的所有需求,包括键盘、焦点和屏幕阅读器行为。如果有一项需求不满足,转到步骤 3。

优先使用平台方案

任务平台方案何时转向库
模态框<dialog> 配合 showModal()当你需要支持跨浏览器的堆叠对话框(带退出动画),或非模态焦点管理时
弹出框、下拉面板、工具提示类卡片popover 属性,并在支持的地方使用 CSS 锚点定位任何地方都需要碰撞翻转,或需要使用 roving focus 的菜单时
手风琴、折叠面板<details name>你需要受控状态或超出 interpolate-size 能力的动画高度时
暗色模式(无切换按钮)prefers-color-scheme、color-scheme、light-dark()用户手动选择主题且需要持久化时
日期、时间、月份输入<input type="date"> 及其同类你需要范围选择、自定义日历或一致的外观时
数字格式化、相对时间、复数、列表Intl.NumberFormat、RelativeTimeFormat、PluralRules、ListFormat永远不要。始终使用 Intl
一次性验证码、单字段输入<input autocomplete="one-time-code" inputmode="numeric">你需要每个数字一个输入框时
进入、退出和布局动画CSS transitions、@starting-style、WAAPI、View Transitions你需要弹簧动画、手势或可中断的布局动画时
表单验证约束验证(required、pattern、setCustomValidity)你需要跨字段或异步规则,或类型化 schema 时
少数选项的选择框<select>你需要搜索、多选或富样式行时
粘性表头、滚动吸附、延迟列表CSS position: sticky、scroll-snap、content-visibility: auto列表包含 1000+ 行时

无效/有效对

错误用法正确用法原因
使用手写焦点陷阱的 <div> 模态框<dialog> 和 showModal()焦点陷阱、Esc 键关闭及 inert 背景自动生效
npm i react-beautiful-dnd@dnd-kit/react前者已废弃且未维护
npm i vaul 做抽屉Base UI Drawer 或样式化为片状的 <dialog>vaul 的 README 自身表明已废弃
使用模态框库构建的 toastBase UI Toast堆叠、悬停暂停和滑动关闭已内置
使用 setInterval 计数数字NumberFlow数字以正确布局和减少动画效果滚动
一次性渲染 5000 个 <tr>在 TanStack Table 下使用 TanStack Virtual,或用于列表的 Virtuoso渲染成本随行数增加,而非视口大小
使用货币包替换 new Intl.NumberFormatIntl.NumberFormat浏览器内置区域规则

推荐前验证

对任何包(无论是在目录中还是不在)运行此检查。目录状态可能已经过时。

npm view <pkg> time.modified license version
  • 已维护:最后一次发布在 12 个月内,或仓库在 6 个月内有推送并发布了版本。
  • 缓慢:功能完整,12–24 个月内无发布,仓库仍在回复问题。可用。注明其更新缓慢。
  • 未维护:已归档、README 明确声明未维护,或 24 个月以上无发布且存在未修复的严重问题。切勿推荐。
  • 检查许可证。报告任何非 MIT、ISC、BSD 或 Apache-2.0 的许可证(MPL-2.0 和 AGPL 需要加注说明)。
  • 检查同行依赖项与项目的 React 版本兼容性。

回答格式

单一块,无菜单:

Base UI Toast 用于 toast 消息。它支持堆叠、悬停时暂停和滑动关闭。不适合需要操作按钮的场合(操作按钮应保留在屏幕上)。MIT 许可证,已维护。npm i @base-ui/react。

始终给出:用途说明,何时不应使用,许可证,以及你实际看到的状态和日期。

完成前检查

  • package.json 已读取,所选库不与已安装的库冲突。
  • 已检查平台方案,如果跳过了,原因仅是一句理由。
  • 已对所选库执行 npm view,答案中的状态是今天的状态,而非目录中的。
  • 没有推荐任何标记为“未维护”的包。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

nkurunziza-saddy/break

Stress-tests a piece of UI with worst-case data and every reachable state, then reports what broke with a numbered fix for each. Use it when the user types /break, or asks to "break this", "stress-test", "try the worst case", "what happens with long names", "check the empty and error states" or "find the edge cases" on a component or screen.

nkurunziza-saddy/layout

Structure and space in product UI on the web. It sets the spacing scale, grouping, alignment, density (compact or comfortable), hit areas, app shells (sidebar, toolbar, content, inspector), max widths, container-query responsiveness, dropdown and popover sizing, room for long and translated text, layout stability (no shift on load) and sticky elements that must not cover focus.

nkurunziza-saddy/motion

Builds motion for product UI on the web. It decides whether something should move at all, then why, which tool (CSS transition, WAAPI, Motion, spring), which properties, curve, duration, interruption, exit and reduced-motion path, and it writes the code. Also covers stagger and choreography, gestures (drag, flick, sheets), motion tokens and animation performance.

nkurunziza-saddy/surfaces

What product UI is made of on the web. It sets elevation levels with exact shadow recipes for light and dark mode, when to use a shadow and when a border, the transparent border for forced-colours mode, a small radius scale with concentric nesting, image outlines, every interactive state as a surface change (hover, pressed, selected, disabled, focus-visible), icons (one set, currentColor, outline and fill, stroke tha…

相关技能