Skip to content

v0.10.0(tokens 配對版 0.6.0)

Choose a tag to compare

@kielchang kielchang released this 06 Aug 03:55
· 41 commits to main since this release
b5daedd

兩個工作項(圖表配色策略+文件站成為第一個驗收宿主)。
tokens 維持 0.6.0——只引用既有 token,不發 npm、不推 tokens tag。

圖表配色策略:資料形態前置分支+三層判斷樹(規範 v0.10.0,tokens 不變)

改了什麼

  • Charts 圖表的〈色票〉重構為〈配色策略〉
    一棵判斷樹成為單一入口——連續數值先分 Sequential(單色相染色量,Heatmap 現況
    命名成規則)/Diverging(danger-subtle ← muted → success-subtle,語意色相淡階、
    中性中點、對稱值域;只寫構造規則不寫 helper,三次法則);離散類別走三層:
    語意 → 身分 → 區辨
  • 新增兩個配色工具charts/base.tsx,隨 charts registry item 散佈):
    • STATUS_SERIESSTATUS_SERIES_STRONG:語意維度的現成色表——狀態組成
      堆疊圖從此有「回家的路」,與 Badge 同一套語意、同一條強度語法
      (預設淡底,實色只給線與點)
    • colorByKey(key, keys):以宿主宣告一次的固定鍵清單決定色索引——
      「顏色跟實體走,不跟排序走」的機制化;超出封頂或找不到的鍵退 muted
  • Storybook 新增「語意維度的堆疊」story(正誤並列):同一份狀態資料,
    STATUS_SERIES 版與徽章同語意,PALETTE 版「已完成」變藍與徽章打架
  • 新增守衛STATUS_SERIES 的鍵必須是提醒色辭典的合法語意、值必須引用
    對應 token——反向驗證過(塞 PALETTE 值會紅並指名語意錯置)
  • 01-color〈分類色票與狀態語意脫鉤〉補上
    雙向敘述(維度是狀態時必須沿用狀態色);
    提醒色辭典連到判斷樹

我需要做什麼

已抄走 charts 的專案想用新工具就重抄一次 base.tsx;不用的話零影響。
畫圖前照判斷樹走一次——特別是狀態組成的堆疊圖:維度是狀態就用
STATUS_SERIES,不要照序取 PALETTE

為什麼改

使用者要求「系統整體用色有一套語意邏輯傳達,讓使用者長期使用可以快速透過顏色
了解系統傳達語意,而不是單純五顏六色」。UX 分析發現生成與守衛層已完備,
缺的是語意記憶的機制——三個洞:「顏色跟實體走」只有文件一句話沒有工具
(最自然的寫法恰好違反它);語意維度的圖表沒有肯定式規則與現成色表
(徽章教的「已完成=綠」會被堆疊圖的隨機分類色拆掉);「這張圖用哪套色」
散在三頁文件五個段落、沒有單一判斷入口。

經色彩顧問方法論會診補上三條紀律:連續數值不套分類色盤(Sequential/Diverging
前置分支);狀態色進圖表用淡底(提醒視窗與圖表重點色共用同一份高飽和
面積預算);超過封頂或要強調走 highlight+mutecapItems 彙總、
selectedIndex 淡化),永不加色相;同類次要用同色相降階。

系統的色彩語法自此閉環:紅=有問題、綠=完成、琥珀=改了未送出、藍=中性訊息、
分類彩色=身分、中性=焦點與動作、主題色相=識別——從徽章、提示框、欄位到圖表,
同一個顏色永遠回答同一個問題。

文件站成為第一個驗收宿主:站台 chrome 橋接 token、嵌入跟主題

改了什麼

  • Infima → token 橋接book/src/css/custom.css):站台的主色六階、頁面底、
    navbar/card/footer、邊框、程式碼底、字體全部改為引用 token
    hsl(var(--x))),原本兩段手寫 hex 副本整組刪除。只寫一次 :root——
    token 自己在 [data-theme="dark"] 下翻值,橋接引用自動跟著翻
  • StoryFrame 把文件站的明暗傳進 iframe&globals=theme:dark
    對建置產物實測過語法);色相主題刻意不傳——兩邊預設都是石墨,本來就一致
  • 修掉 StoryFrame 註解裡「守衛還沒寫」的過期敘述(doc-hooks 已在)

我需要做什麼:不用。純文件站變更,token 與元件零改動。

為什麼改

v0.9.0 合併後使用者回報「文件和 Storybook 元件配色有些不符合」。查出兩個根因,
共同點是文件站沒有把自己當成宿主

  1. iframe 是獨立 document:文件站切深色動的是自己的 <html>
    Storybook 嵌入永遠停在預設淺色。respectPrefersColorScheme: true
    OS 深色的使用者一進站就深色——24/25 兩頁整頁亮色 iframe,
    23-charts 同一頁上活範例(跟深色)與嵌入(不跟)並排成兩種配色
  2. 站台表面不是 token 表面:Storybook canvas 是 bg-background
    (深色 222 22% 8%),文件站是 Infima 的 #1b1b1d——元件裡吃
    --background 的部份(outline 按鈕、Gantt 未完成段遮罩)在深色頁上
    是一塊塊色差補丁。而 custom.css 那兩段 hex 本身就是 token primary 的
    手寫副本——漂移防護第 6 支點名要消滅的東西

定調(使用者):文件庫應該等同於第一個驗收設計版本的宿主
修法因此不是把示範容器補個底色,而是站台 chrome 直接消費 token——
與 GraphCanvas 橋接 --xy-* 同一個手法。hover 色階用 color-mix
primary 衍生而非複寫:primary 換值時它們自動跟上,不產生新副本。

實測數字:深色下頁面 html 底與 iframe 內部底同為 rgb(16, 19, 25)
(token --background 深色值),逐位元同色;淺色連結 #0f172a ≈ 原硬編
#1e293b,視覺回歸幾乎無感。