Skip to content

feat(theme): 主題改為環境色——只換側欄+頂列外殼,內容區中性(tokens 0.8.0) - #43

Open
kielchang wants to merge 6 commits into
devfrom
feat/environment-palette
Open

kielchang wants to merge 6 commits into
devfrom
feat/environment-palette

Conversation

@kielchang

Copy link
Copy Markdown
Owner

疊在 #42 之上:請先依序合併 #38、#39、#40、#41、#42,合併後這個 PR 只剩自己的一筆改動。

RFC:#36

改了什麼/為什麼

主題(data-color-theme)改為環境色:只換側欄+頂列這個 L 形外殼的大區塊底色,用顏色一眼認出目前在哪個工作環境;內容區(畫布、卡片、浮層、欄位、表格)一律中性。按鈕、提醒、琥珀欄位都在內容區,主題色碰不到它們。

原本的色相主題同時是品牌按鈕、選中淡底與內容區中性色的色相來源,色相預算只容得下 9 組;現有的 violet↔amethyst 只差 ΔE00 5.0,選中淡底也會撞提醒淡底(teal 對 success-subtle ΔE00 7.0)。

token(@dooping/tokens 0.7.0 → 0.8.0):

  • 主題從 6 組變 18 組:8 個色族(華語基本色名)× 深淺 2 階的深色外殼,加中性的 slate;graphite 仍是預設、維持淺色外殼。
  • 環境主題只宣告 --sidebar 家族 9 個鍵;新 token --sidebar-muted-foreground。
  • --brand 在所有主題鏡射 --primary(Button 的 brand variant 淘汰,外觀等同 default)。
  • 新 utility .on-shell;主題島(data-color-theme 放在元素上,只換那塊的外殼鍵)。
  • 生成器重跑兩次輸出相同;預設主題的有效值與改版前 0 差異。

元件(規範併進 0.15.0):

  • AppShell 頂列改用外殼色並套 .on-shell;SidebarHeader/SidebarContent/SidebarFooter 內建 .on-shell。
  • 群組標題改 --sidebar-muted-foreground、側欄項聚焦環改 --sidebar-ring;AppMenubar 所在分區底線跟著文字色。
  • NavLeaf 新增選填的 colorTheme:應用切換清單畫出那個應用的外殼色塊。
  • 外殼上的狀態徽章加 ring-2 ring-sidebar-foreground(紅點直接疊在深色外殼上只有約 1.9:1)。

文件:新頁〈基礎 → 環境色票〉(色票清單+色彩學語意,只給判準);〈色彩語意〉〈深淺主題〉〈色票配色策略〉〈提醒色辭典〉〈後台系統的資訊架構〉、AGENTS.md、CHANGELOG 改寫。

守衛:

  • verify-color:外殼文字/次要文字/選中項/聚焦環/標誌塊、環境主題只能有外殼鍵、brand 鏡射、色票同族 ≥ 8/跨族 ≥ 10、家族色相連續、環境外框 ≥ 10、外殼 chroma 低於 danger、外殼狀態層逐主題驗。移除 brand 對狀態色、色相、停用外觀三條(brand 不再帶色)。
  • 新 tests/environment-theme.test.ts:主題島選擇器、〈環境色票〉表與 tokens 同步。
  • verify-visual:禁用色改看其他主題的外殼色;只數 2×2 實色區塊(Windows 的彩色次像素反鋸齒在深色外殼上會湊出假命中)。
  • story「頁面/多應用外殼/環境色跟著應用」的 play:外殼跟著應用換色、內容區不變、徽章外圈。
  • 文件站 webpack 加 extensionAlias(文件第一次從原始碼引用 @dooping/tokens 的 JS API)。

自查

  • npm run build:tokens → npm run typecheck → npm test 全綠(rebase 到 chore: 外掛釘版、每週漏洞檢查、核准版本、本機腳本路徑防護 #42 之後 32 檔)
  • 改了 packages/react/src → npm run build:registry 並提交 registry/;host:sync 一致
  • 版號:tokens 0.8.0(package.json、tokens.json、@dooping/react 的相依、宿主);規範併進未發佈的 0.15.0
  • CHANGELOG 未發佈節補一項(改了什麼/我需要做什麼),標「行為改變」
  • 措辭過去領域化詞表
  • 反向驗證:新守衛 13 條逐條改壞都會紅在對的地方。另跑過 verify:color、verify:storybook、verify:visual(108 組)、verify:host(180 組)、build:book+verify:book、verify:consumer。

注意:token 有變,staging → main 合併後要推 tokens-v0.8.0。

🤖 Generated with Claude Code

kielchang and others added 6 commits October 10, 2026 12:15
桌面版的收合入口改成側欄右緣、固定在底部的拉環:點一下、左右拖拉或
Enter/空白鍵切換,滑鼠移上去有提示。offcanvas 收合時拉環留在視窗左緣。
SidebarTrigger 只在行動版渲染,負責開抽屜。

- 元件:sidebar、app-shell(註解改寫成規則句)
- stories:圖示欄、完全隱藏改用拉環;新增「拉環拖拉與鍵盤」
- 文件:元件頁〈應用外殼與側欄〉補拉環規則
- 版號 0.15.0、CHANGELOG、registry 與內部試裝宿主重新產生

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
csvEscape 遇到以 = + - @、Tab、CR 開頭的文字,前面補 ',試算表打開時
不會當公式執行。數字型別與只有正負號+數字的文字(-1,200、+5%)不補,
匯出後仍能計算。DataTable 的「匯出 CSV」走的就是它。

- 新守衛 tests/csv.test.ts(反向驗證 6 項)、守衛台帳補一列
- 文件:〈lib〉csvEscape 說明、〈列印與匯出〉匯出規則
- CHANGELOG 併入 0.15.0;registry 與內部試裝宿主重新產生

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DataTable 的 toolbar 可以給函式 ({ rows }) => …,rows 是目前篩選排序後的
全部列(不分頁),跟「匯出 CSV」同一份。直接放元素的寫法照舊。
保留格式的 Excel、報表、圖表圖片由平台自己實作,用它取資料。

- 新 story「平台自訂匯出」(反向驗證:只給當頁、給原始資料都會紅)
- 〈列印與匯出〉新增「平台自己做的匯出:照畫面的呈現方式」:
  表格與圖表對照表,匯出一律用淺色模式的值(白底)
- 〈DataTable〉〈Charts〉指向對照表
- CHANGELOG 併入 0.15.0;registry 與內部試裝宿主重新產生

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
元件(併入 0.15.0):
- safeNavUrl:導覽連結只放行相對路徑、http、https、mailto、tel,
  javascript: 這類換成 #;SidebarNav、AppMenubar、CommandPalette 都經過它
- 側欄收合態往右彈出的外部子連結補 target/rel,與展開態一致
- 表格網址被改壞照常顯示:每頁筆數不在選項裡退回 pageSize、排序鍵
  只認欄位(valueOf 原本會讓表格丟例外)、壞掉的 % 保留原字、
  __proto__ 這類欄名略過
- Tooltip side="right" 泡泡一開始就 fixed,不再撐寬錨點(偏約 76px);
  拉環拿掉繞過用的固定尺寸

dooping-check:
- lock 裡專案外的路徑不讀;非官方來源提醒;本機資料夾不印 shadcn 指令;
  建議指令參數加引號、含特殊字元不印;Actions 輸出跳脫 % 與換行
- 檔頭舊編號改寫成規則句,自 self-contained-refs PENDING 移除 3 檔

守衛:nav/table-url-state/dooping-check 單元測試,story「連結網址白名單」
「網址被改壞」、拉環提示位置;反向驗證 13 項。文件、CHANGELOG、registry
與內部試裝宿主同步。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
自動檢查與發佈:
- workflow 的第三方外掛一律釘 commit SHA(20 處,現行 v4 指向同一版,行為不變)
- Dependabot 每月把外掛新版整理成一個 PR 開到 dev
- audit.yml 每週檢查套件漏洞:只有執行期套件(--omit=dev)高風險以上亮紅燈,
  開發工具與文件站只列在摘要
- 核准清單要填「核准版本」,發版閘比對 PR 目前的 head;核准後再推 commit 就轉紅
- ruleset 的 workflows 規則只有組織帳號能用,維持檢查名+app id 綁定(文件記原因)

repo 與本機腳本:
- .gitignore 補本機設定、環境變數檔、金鑰、.npmrc;@dooping/react 標 private
- scripts/lib/paths.mjs:isInside、safeDecode、outputDirUnder、shellArgs
  - 6 個靜態伺服器:壞跳脫回 400、改用 isInside(前綴相同的兄弟資料夾不再放行)
  - host-sync:item 名稱與 target 跑出宿主目錄就不寫
  - REGISTRY_OUT:空字串、..、絕對路徑、repo 根目錄一律擋(避免 rmSync 刪掉 repo)
  - Windows 經 cmd 的參數加引號

文件:
- AGENTS.md 寫明測過的 shadcn 版本、回饋可加 --web
- ARCHITECTURE「外掛釘版與套件漏洞」「同一個網域:瀏覽器儲存只放介面偏好」

守衛:workflow-contract +3、release-gate、paths、browser-storage、registry-content
(AGENTS.md 的 shadcn 版本=SHADCN);反向驗證 14 項。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 主題(data-color-theme)只換外殼的 --sidebar 家族 9 個鍵;內容面的中性色、
  --brand(鏡射 --primary)、狀態色、圖表色在所有主題同值
- 18 組:8 色族 × 深淺 2 階的深色外殼+slate+graphite(預設淺色外殼);
  色票同族 ΔE00 ≥ 8、跨族 ≥ 10,生成器重跑冪等,預設主題有效值 0 差異
- 新 token --sidebar-muted-foreground、.on-shell、主題島、NavLeaf.colorTheme;
  頂列改用外殼色;外殼上的狀態徽章加外圈;Button 的 brand variant 淘汰
- 守衛:verify-color 外殼與色票門檻、tests/environment-theme.test.ts;
  verify-visual 改看外殼色並只數 2×2 實色區塊
- 文件:新頁〈環境色票〉;〈色彩語意〉〈深淺主題〉〈色票配色策略〉〈提醒色辭典〉改寫

Refs #36

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant