v0.10.0(tokens 配對版 0.6.0)
兩個工作項(圖表配色策略+文件站成為第一個驗收宿主)。
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,隨chartsregistry item 散佈):STATUS_SERIES/STATUS_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+mute(capItems 彙總、
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 元件配色有些不符合」。查出兩個根因,
共同點是文件站沒有把自己當成宿主:
- iframe 是獨立 document:文件站切深色動的是自己的
<html>,
Storybook 嵌入永遠停在預設淺色。respectPrefersColorScheme: true讓
OS 深色的使用者一進站就深色——24/25 兩頁整頁亮色 iframe,
23-charts 同一頁上活範例(跟深色)與嵌入(不跟)並排成兩種配色 - 站台表面不是 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,視覺回歸幾乎無感。