Communitygithub.com

nkurunziza-saddy/pick-library

從經過策劃與狀態檢查的清單中,挑選適合前端任務的函式庫,避免自行撰寫或安裝已棄用的套件。當使用者問「我應該用什麼來……」、「有沒有……的函式庫」,或提到某個套件名稱,以及當你正要建立 Toast、指令選單、抽屜、日期選擇器、表格、虛擬列表、拖放、圖表、OTP 輸入、動態數字、主題切換、表單驗證等功能時使用。

pick-library 是什麼?

這是一個為 AI Agent(例如 Claude Code、Cursor、Codex)設計的技能,旨在自動為前端開發任務挑選最合適的函式庫。其核心價值在於避免開發者自行撰寫功能(如 modal、popover、日期選擇器等)、安裝已棄用或未維護的套件,從而減少套件膨脹與潛在的維護風險。技能會依照嚴格的決策順序進行:首先檢查 `package.json` 中已安裝的套件,其次評估瀏覽器原生 API(如 `<dialog>`、`popover` 屬性)是否能完全滿足需求,接著參考一個策劃好的目錄 (`references/catalogue.md`) 並選取預設函式庫,最後檢查該函式庫的維護狀態。若以上皆不符合,才從自身知識庫中挑選,並透過 `npm view` 指令進行即時驗證。最終只會推薦一個函式庫,並附上其適用場景、不適用場景、授權條款及基於當前日期的維護狀態。該技能適用於所有支援 SKILL.md 且能執行 shell 指令的 AI Agent 平台。

相容平台~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。如果已安裝的函式庫或競爭對手已經能勝任,就直接使用。如果發現更好的選擇,只用一行文字標記,且絕不未經詢問就更換相依套件。原因:為了同一個功能安裝第二個函式庫會使套件體積加倍,並增加慣例衝突。
  2. 平台本身能完全解決嗎? 檢查下表。原因:平台方案沒有套件負擔,沒有升級路徑,也沒有棄用風險。
  3. 清單中有對應項目嗎? 打開 references/catalogue.md,找到分類,選取標記為 Default 的項目。只推薦一個函式庫,不要列出選單。
  4. 該項目還在維護嗎? 檢查狀態欄。如果標示為 Unmaintained,絕不推薦;改用該項目中指定的替代品。
  5. 沒有符合的? 說「這個任務不在清單上」,然後從自身知識中挑選,並對其執行下方的驗證程序。原因:未經檢查的套件通常是棄用程式碼進入專案的主要途徑。

「完全解決」表示任務的所有需求都得到滿足,包括鍵盤操作、焦點管理和螢幕閱讀器行為。如果有一項需求失敗,則跳到步驟 3。

平台優先

任務平台方案何時轉用函式庫
模態框<dialog> 搭配 showModal()需要支援可疊加、在不同瀏覽器上有動畫進出效果的對話框,或需要非模態的焦點管理
彈出視窗、下拉面板、工具提示卡片popover 屬性,以及支援處的 CSS anchor positioning需要在所有地方都能進行碰撞翻轉,或需要 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列表包含 1,000 行以上

常見錯誤配對

錯誤用法正確用法原因
使用 <div> 搭配手寫焦點陷阱的模態框<dialog> 和 showModal()焦點陷阱、Esc 鍵關閉和背景 inert 都是現成的
npm i react-beautiful-dnd@dnd-kit/react前者已棄用且未維護
使用 npm i vaul 實作抽屜Base UI Drawer,或將 <dialog> 樣式設為 sheetvaul 的 README 也說它未維護
從模態框函式庫建立的 ToastBase UI Toast疊加、暫停和滑動關閉都已解決
使用 setInterval 計數數字NumberFlow數字會以正確的佈局和減少動畫效果滾動
一次渲染 5,000 個 <tr>在 TanStack Table 之下使用 TanStack Virtual,或列表使用 Virtuoso渲染成本隨行數增長,而非視口大小
使用貨幣套件取代 new Intl.NumberFormatIntl.NumberFormat語言環境規則內建於瀏覽器中

推薦前請驗證

對任何套件(不論是否在清單上)執行此驗證。目錄中的狀態可能比你的會話時間更舊。

npm view <pkg> time.modified license version
  • 已維護:最近一次發布在 12 個月內,或 6 個月內有儲存庫推送並包含已發布的版本。
  • 慢速:功能完整,12–24 個月內未發布新版本,但儲存庫仍在回覆 issue。可使用。需說明是慢速。
  • 未維護:已封存、README 中標示未維護、或超過 24 個月未發布且有未解決的損壞問題。絕不推薦。
  • 閱讀授權條款。回報任何非 MIT、ISC、BSD 或 Apache-2.0 的授權(MPL-2.0 和 AGPL 需要附註說明)。
  • 檢查同儕依賴是否與專案的 React 版本相符。

回答格式

單一區塊,不提供選單:

Base UI Toast 用於 Toast。它能疊加、懸停時暫停並可滑動關閉。不適用於需要執行動作的情況;這類 Toast 應保留在畫面上。MIT 授權,已維護。npm i @base-ui/react。

一律提供:用途、何時不該使用、授權條款、狀態以及你查詢的日期。

完成前請檢查

  • 已讀取 package.json,所選函式庫不會與已安裝的函式庫重複。
  • 已檢查平台方案,若跳過,原因需在一個子句中說明。
  • 已對所選函式庫執行 npm view,回答中的狀態是今天的日期,而非目錄中的日期。
  • 未推薦任何標記為 Unmaintained 的函式庫。

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…

相關技能