Communitygithub.com

w0rxbend/tui-design-systems

Ratatui 終端 UI 的設計系統 — 主題代碼、背景完整性、佈局與點擊測試、字形回退以及確定性截圖閘門。在構建新的 Ratatui 儀表板或重新設計現有 TUI 視覺效果時使用。

tui-design-systems 是什麼?

此技能提供了一套完整的設計系統規則,用於建構或重新設計 Ratatui 終端 UI (TUI) 的視覺層,而不會破壞其互動模型。它專為 Rust 終端儀表板設計,需與儲存庫本地的應用程式說明搭配使用。技能涵蓋了扁平、常數且數量精簡的主題代號架構,確保新主題能即時套用至所有元件,滿足即時主題切換器的需求。此外,它還強調背景完整性與無背景主題的正確實作,包括使用單元格緩衝區測試來驗證每個單元格的背景顏色是否符合主題白名單。在佈局方面,技能要求滑鼠點擊測試必須與繪製的佈局同步變更,並推薦使用渲染驅動的測試方法。對於字型,它規範了子單元格度量精度的字形使用,如第八區塊字元,並要求為 Braille 圖表提供 ASCII 替代方案。最後,技能提供了驗證策略,包括視覺閘門與確定性截圖生成,以確保 CI 流程順暢。此技能支援 Ratatui 平台,並專注於主題管理、背景完整性、佈局測試、字形回退與渲染測試。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/w0rxbend/dot-agents/tree/HEAD/skills/frontend/tui-design-systems

在你喜歡的 AI 中提問

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

說明文件

TUI 設計系統 (Ratatui)

用於新建或改造 Ratatui TUI 視覺效果,同時不破壞互動模型的規則。針對此使用者的 Rust 終端儀表板;需與儲存庫本地的應用程式說明搭配使用。

使用時機

  • 新的 Ratatui 儀表板視覺層(主題、面板、徽章、儀表、分頁)。
  • 重新設計/重新風格現有的 Ratatui TUI,特別是具有多主題、即時主題切換器、滑鼠點擊測試或 CI 中的確定性截圖閘門的情況。

代號架構

  • 保持調色盤扁平、常數、少量:每個主題一個語義角色結構,透過指標切換。從那些角色中,使用一個 RGB blend() 推導出每種分層或混合顏色作為代號:surface 和 surface_hi(面板、疊加層填充)、track(空的進度條末端)、fade(向背景淡化的顏色)、gradient(強調色運行)、on_color(可讀的徽章文字,根據亮度選取)。新調色盤隨後會立即重新風格所有元件,滿足即時主題切換器的需求。
  • 小工具永遠不直接命名 Color,只使用主題代號。
  • 保護 blend() 免受非 RGB 端點的影響:ANSI 顏色沒有通道,因此應快照到較近的端點,不要自行發明。

無背景主題

  • 背景為 Color::Reset 的主題(單色/TTY 調色盤)必須退化所有填充:表面回退為 Reset,徽章變成帶括號的彩色文字,空的進度條末端使用邊框顏色,而非推導出的 track(因為 track 是 Reset,會渲染為終端預設前景色)。測試它只繪製 Reset 和選取反白。

背景完整性

  • 使用單元格緩衝區測試掃描每個檢視×疊加層:每個單元格的背景必須在主題提供的白名單(is_background 代號列表)中,而不是硬編碼的顏色列表。硬編碼列表需要在每次新增代號時編輯,且容易被遺忘。
  • Clear 會重置單元格而不重新繪製;任何在其後繪製的內容都必須重新設定背景。使用提高的表面填充疊加層,使其浮在面板之上。
  • ratatui 的 Chart 透過 Canvas 繪製繪圖區域,其背景預設為 Color::Reset。在有色面板中,將圖表背景設定為面板的填充,而不是頁面的:頁面顏色在表面顏色的卡片內部會產生相同的空洞,只是往上一層。

佈局耦合的點擊測試

  • 如果滑鼠點擊測試反映了繪製的佈局(分頁條、分段條、狀態欄位),則在同一編輯中更改繪圖和鏡像數學運算。偏好使用渲染驅動的測試,根據繪製的欄位定位每個標籤;手動編寫的矩形斷言可能會通過,但實際佈局卻將小工具放在別處。
  • 新增或加寬列表反白符號會使每一行的文字移位。可點擊的行區域必須是全寬的或重新計算以匹配。

字形

  • 子單元格度量精度的儀表使用第八區塊 (U+258F..U+2589),區塊元素:僅限 Unicode 路徑;ASCII 回退填充整個單元格。Braille 圖表和走勢圖也一樣:提供 ASCII 替代方案,不要在 --ascii 模式中洩漏框線繪製字元。
  • 對齊欄位的圖示必須是單寬度 BMP 符號。表情符號是雙寬度,會無聲地將每一行後面的每個欄位移位。

驗證

  • 重新設計:先更改樣式,後更改文字。渲染測試斷言文字內容,因此未修改的字串在樣式變更時仍能保持測試套件通過。
  • 視覺閘門:專案的確定性截圖生成器(固定的幀計數器,無真實時鐘,無 RNG)。文字轉儲模式是最快的佈局審查方式。在原始碼變更時提交重新生成的圖像,以便 CI 的無漂移檢查通過。
  • 在單元格緩衝區上檢查背景,而不是渲染的圖像:圖像編碼器將 Color::Reset 解析為主題背景,正好隱藏了緩衝區掃描可以捕捉到的空洞。
  • 保持由幀計數器驅動的動畫(脈衝、閃爍)具有確定性,以產生可重複的截圖。

相關技能