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解析為主題背景,正好隱藏了緩衝區掃描可以捕捉到的空洞。 - 保持由幀計數器驅動的動畫(脈衝、閃爍)具有確定性,以產生可重複的截圖。