Community程式設計與開發github.com

parthkapoor15/skill-library

當有人要求繪製一個新的 Hairline 圖形,或執行 /hairline-create 並附上點子時使用。繪製一個等角線條圖形,回應指針,採用 @lucasmarkes/hairline 的風格與引擎,並以單一自包含 HTML 檔案交付。

skill-library 是什麼?

這個技能能根據使用者的文字描述或 SVG 圖片,自動建立一個 Hairline 風格的等角線條圖形。它會產出一個獨立的 HTML 檔案,無需任何安裝或外部依賴。此技能特別適合用於 Cursor 等支援 AI Agent 的開發環境,協助快速生成視覺化原型或互動式圖表。其工作流程包含概念發想、使用內建引擎 (kernel.js) 建構圖形、透過自動化腳本 (look.mjs) 進行驗證,最後交付成品。技能嚴格遵循十項設計規則,確保圖形在視覺上簡潔、互動上直觀,並且不會修改核心引擎或頁面框架,專注於圖形邏輯本身。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/parthkapoor15/skill-library/tree/HEAD/skills/hairline/hairline-create

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Hairline:建立一個圖形

你正在製作一個 Hairline 風格的圖形:一種等角線條繪圖,由單一筆畫的圓角實體構成,並且能回應指針。它會打包成一個 HTML 檔案,無需安裝任何東西。@lucasmarkes/hairline 的六個圖形是範例;examples/terrain.js 和 examples/riffle.js 是其中兩個,它們就是你將要撰寫的格式。

你只需要撰寫一個東西:圖形。引擎 (kernel.js) 和頁面 (bench.html) 是固定的。永遠不要編輯它們,也不要貼上修改過的副本,更不要重寫引擎已經提供的功能。

下面每個命名的檔案都在此技能的資料夾中。圖形和頁面會寫入使用者的工作目錄:從該目錄執行 build.mjs、validate.mjs 和 look.mjs,並透過它們在此資料夾中的路徑來呼叫。

0. 來源

僅當請求附帶一個 .svg 檔案時執行此步驟。執行 node read.mjs <file.svg>:它會將 SVG 作為圖片和一份測量結果卡片寫入工作目錄。然後閱讀 source.md 並回答其問題。物件及其部件現在已固定:步驟 1 中的每一個概念都將保留它們。

1. 概念

閱讀 concepts.md。它包含一個空白狀態的章節,以及一個從標記繪製圖形的章節。然後提供兩到三個概念,每個概念一行:

名稱。 物件。指針對它做什麼。讀數顯示什麼。導覽在哪裡停靠。

等待使用者選擇。僅當使用者已經帶著物件和手勢到達時,才跳過此步驟。如果沒有人可以詢問,則選擇最強靜止姿勢的概念,並說明你選擇了哪一個。

如果有來源(步驟 0),每個概念都保留物件及其部件:它們的區別在於手勢,或者,當手勢伴隨請求而來時,則在於形式和讀數。

一個圖形,一個想法。需要標籤才能被理解的概念,還不算一個概念。

2. 建構

  1. 閱讀 rules.md。這十條規則不是建議:違反其中一條的圖形就不算完成。
  2. 閱讀 kernel.js 頂部的索引:哈希行下方的註解,直到 var HL。它列出了你可以呼叫的所有內容。不要閱讀其下的程式碼。
  3. 閱讀更接近你概念的範例:examples/terrain.js 用於連續場域,examples/riffle.js 用於離散項目。
  4. 在使用者的工作目錄中將圖形寫成 <name>.js,格式與範例相同:從 HL 中取得你需要的東西,定義 mount({ stage, svg, read }, value) 並回傳 { set, destroy },並以 hairline({ name, means, rules, range, tour, mount }) 結束檔案。
    • name:小寫,一個單詞或以連字號連接。
    • means:一句話,最多 140 個字元,說明圖形顯示的內容。它會出現在舞台下方的那一行。
    • rules:此圖形最倚重的規則編號。
    • range:滑桿驅動的唯一數字,在強度為 0、0.5 和 1 時。中間值是預設值,三個值朝同一個方向移動。mount 的 value 參數,以及當滑桿移動時 set(value) 收到的 value,就是這個數字:圖形自己的數值,在 range 上讀取,而不是 0 到 1。
    • tour:當頁面播放時,看不見的指針會造訪的三到六個 viewBox 點,如果省略則為 null;一個陌生人在沒有操作頁面時看到的循環。文字形式的 [x, y] 數字,至少有一個是點。圖形永遠不會自己播放:頁面的播放按鈕和套件負責播放。
  5. 組裝它:執行 node build.mjs <name>.js 會寫入 hairline-<name>.html,並且在步驟 3 中每次執行 look.mjs 也會如此。如果沒有 Node.js,請複製 bench.html,並將 kernel.js 的內容放到 /*KERNEL*/ 所在的位置,將你的圖形放到 /*FIGURE*/ 所在的位置,透過檔案操作,不改變其他任何東西。

3. 檢查

  1. 執行 node look.mjs <name>.js --answer x,y,z --edge x,y,z,如果有來源檔案則加上 --source <file.svg>,這些點是你的圖形的世界座標,如 look.md 所述。它會建置頁面、驗證它、在一張紙上拍攝八張圖片 hairline-<name>-look.png,並檢查框架、讀數和控制台。修正它印出的每一行失敗訊息,然後再次執行,直到它以狀態碼 0 退出。
  2. 閱讀 look.md,然後閱讀那張圖片,並回答其問題。修正失敗的部分,然後回到步驟 1。

look.mjs 需要一個瀏覽器,並會在此資料夾外安裝一次 playwright-core。如果沒有瀏覽器,請在每次建置後使用 node validate.mjs hairline-<name>.html 進行檢查,並按照 look.md 中「沒有瀏覽器」章節的說明進行檢查。如果沒有 Node.js,請閱讀 validate.mjs 頂部的檢查清單,並根據你的程式碼回答每一項。

不要交付驗證器拒絕的頁面。如果你沒有實際查看,就不要說檢查通過了。

4. 交付

如果可以,請將 hairline-<name>.html 發布為成品。如果不行,請將檔案留在使用者可以開啟的地方,並說明它在哪裡。然後,逐行說明:

  • 隱喻:物件是什麼,以及指針對它做什麼;
  • 它倚重的規則;
  • 導覽:它依序停靠的位置;
  • 任何你無法驗證的事項(沒有 Node.js、沒有瀏覽器),如實說明。

然後請使用者在頁面上按下播放,或使用 ?play=1 開啟頁面,並說明這個循環是否講述了圖形的故事。如果沒有人可以詢問,則說明導覽未經評判。

5. 調整

當使用者要求修改時,只編輯 <name>.js,然後再次執行 look.mjs 並閱讀新的圖片。第十個版本與第一個版本遵循同樣的標準。對循環的更改僅是對 tour 的更改。

出錯時的處理

如果你發現自己正在這麼做請改為這樣做
在繪圖中加入標籤、數字或字母用幾何形狀來表達(規則 10);名稱應放到 read.textContent
使用顏色、填充或發光效果將一個筆畫從 sil 移動到 hi(規則 04)
撰寫計時器、requestAnimationFrame 或 CSS 動畫使用 register(stage, tick),搭配彈簧或補間動畫(規則 07 和 08)
根據當前繪製的內容測試指針根據靜止或目標姿勢來測試它(規則 01)
繪製一個有十二條邊的盒子使用兩個圓角環構成的 prism:一個是輪廓,一個是摺痕(規則 09)
將一個部件繪製成普通的圓角方塊賦予它使其成為自身特徵的元素,也就是你在概念中命名的那些元素(concepts.md)
因為這樣比較容易,就讓靜止狀態變得平坦、空無一物或對稱組合它:靜止狀態就是縮圖(規則 05)
在盒子上蓋個標記來表示它是誰的將標記建構成物件本身,或者省略它(concepts.md,「來自一個標記」)
為了讓某個功能運作而編輯核心或框架圖形是錯的;更改圖形
讓導覽依序造訪每個部件三個停靠點,每個展示一個不同的答案,然後離開:一個循環是一個句子,而不是一個清單
引入第二個想法刪除它:一個圖形,一個想法
從 SVG 追蹤路徑,或複製其座標根據卡片提供的比例,將部件建構成一個實體(source.md)
保留 SVG 中屬於裝飾的部分丟棄它:兩到三個部件就能構成物件

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能