概要
デザイン側でカラートークンのセマンティックレイヤーが刷新されたため、全コンポーネントを新しいセマンティックトークンへ移行する。
未リリースのスタイル更新のため、beta チャネルでリリースする(gh workflow run "Publish to npm" の channel: beta)。
前提として sparkle-design-cli 側のトークン生成対応と beta リリースが先行する。
トラッキング: goodpatch/sparkle-design-internal#247
新しいセマンティックトークン体系
用途カテゴリ × 意味 × 強度 × 状態の 4 軸構成。状態(enabled / hover / active / disabled)がトークン名に内包されるのが最大の変更点。
- surface(背景):
base/0,100,200 / neutral|primary|negative × high|middle|low × enabled|hover|active|disabled / info|success|warning × high|middle|low / accent/1..3 / inverse / overlay
- border(枠線):
neutral × extra-high(enabled/hover/disabled)|high|middle|low / primary × extra-high|high|low / negative × extra-high(enabled/hover/disabled)|high|low / info|success|warning / ring
- object(アイコン等):
neutral × high|middle|low|disabled / primary|negative × enabled|hover|disabled / info|success|warning / inverse
- text:
neutral × high|middle|low|disabled / primary|negative × enabled|hover|disabled / info|success|warning / inverse
CSS 変数名はデザイン側のパス構造をそのまま写す(surface/primary/high/enabled → --color-surface-primary-high-enabled)。
テーマ切り替えとの関係
primary と名の付くトークンが primary 設定に追従する
--color-border-ring は 青系固定で primary には追従しない
info / success / warning はステータス色なので固定色相
主な置換パターン
| 旧 |
新 |
bg-white(背景) |
surface/base/0 |
text-white(文字・アイコン) |
text/inverse / object/inverse |
text-text-{high,middle,low,disabled} |
text/neutral/{high,middle,low,disabled} |
text/placeholder |
text/neutral/low |
ring-normal |
border/ring |
border-divider-{low,middle,high} |
border/neutral/{low,middle,high} |
bg-primary-{500,600,700,200} |
surface/primary/high/{enabled,hover,active,disabled} |
bg-primary-{50,100} |
surface/primary/low/{hover,active} |
border-neutral-{500,600} |
border/neutral/extra-high/{enabled,hover} |
secondary-700(アイコン) |
object/neutral/middle |
skeleton-fill |
surface/base/200 |
black-alpha-300 |
surface/overlay |
neutral-900(背景) |
surface/inverse |
secondary カテゴリは廃止見込み(用途に応じて object/neutral/* / text/neutral/* に分岐)。
対象コンポーネント(24)
Button, Icon Button, Input, Input Password, Checkbox, Radio, Select, Switch, Slider, Textarea, Form,
Badge, Card, Divider, Tag, Inline Message, Skeleton, Spinner, Dialog, Modal, Overlay, Toast, Tooltip,
Tabs, Breadcrumb, Link, Icon
スタイル置換に留まらない構造変更(要注意)
デザイン側の指示には、単なるトークン差し替えでない変更が含まれる:
- 枠線の削除: Button / Icon Button の solid バリアントの 1px 枠線、Switch のトラック枠線(12 件)、Badge の白枠線
- シャドウの差し替え: Card(enable/hover: raise→flat、active: float→raise)、Slider disabled(raise→none)、Button(raise→base)
- 角丸の変更: Card(minimum→container)、Clickable Card の Focus Ring(値は 8px で不変)
- トークン統合: Input 系の
text/disabled + neutral/400 → text/neutral/disabled
角丸のセマンティック名も halfModal → container にリネームされる(--radius-halfModal は beta 期間の後方互換エイリアスとして残る)。
旧トークンは beta 期間併存
--color-{semantic}-{50..900} / --color-text-* / --color-divider-* / --color-skeleton-fill / --color-ring-normal は beta 期間中そのまま利用可能。コンポーネントを順次移行し、beta 終了時に旧トークン削除 PR を別途立てる。
現行コードの旧語彙使用状況(src/components/ui)
41 bg-white 33 text-white 21 border-negative-500 18 bg-neutral-50
17 bg-primary-500 13 text-text-low 13 ring-normal 13 text-neutral-700
11 text-text-high 8 text-text-middle 8 text-text-disabled 8 shadow-raise
7 border-divider-middle
置換対象は広範。ユーティリティクラス名の機械置換だけでは足りず、状態別クラス(hover: / disabled:)の再構成が必要。
#274(React 19 ref-as-prop)との関係
#274 は「他の大規模アップデートと同時にまとめてリリース」する前提で塩漬けされている PR で、今回の beta サイクルがまさにその機会。
ただし現在 CONFLICTING(DIRTY) かつ最終更新が 2026-05-19 で、main が 2.5 ヶ月分進んでいる。本 issue のトークン移行は #274 と同じ 17 ファイルを大幅に書き換えるため、順序で手戻り量が変わる。
方針: #274 を先に main へ追従させ(amend + force-push は規約で禁止のため、コンフリクト解決コミットを積む)、React 19 化を beta の土台にしてからトークン移行を載せる。
概要
デザイン側でカラートークンのセマンティックレイヤーが刷新されたため、全コンポーネントを新しいセマンティックトークンへ移行する。
未リリースのスタイル更新のため、beta チャネルでリリースする(
gh workflow run "Publish to npm"の channel: beta)。前提として
sparkle-design-cli側のトークン生成対応と beta リリースが先行する。トラッキング: goodpatch/sparkle-design-internal#247
新しいセマンティックトークン体系
用途カテゴリ × 意味 × 強度 × 状態の 4 軸構成。状態(enabled / hover / active / disabled)がトークン名に内包されるのが最大の変更点。
base/0,100,200/neutral|primary|negative×high|middle|low×enabled|hover|active|disabled/info|success|warning×high|middle|low/accent/1..3/inverse/overlayneutral×extra-high(enabled/hover/disabled)|high|middle|low/primary×extra-high|high|low/negative×extra-high(enabled/hover/disabled)|high|low/info|success|warning/ringneutral×high|middle|low|disabled/primary|negative×enabled|hover|disabled/info|success|warning/inverseneutral×high|middle|low|disabled/primary|negative×enabled|hover|disabled/info|success|warning/inverseCSS 変数名はデザイン側のパス構造をそのまま写す(
surface/primary/high/enabled→--color-surface-primary-high-enabled)。テーマ切り替えとの関係
primaryと名の付くトークンが primary 設定に追従する--color-border-ringは 青系固定で primary には追従しないinfo/success/warningはステータス色なので固定色相主な置換パターン
bg-white(背景)surface/base/0text-white(文字・アイコン)text/inverse/object/inversetext-text-{high,middle,low,disabled}text/neutral/{high,middle,low,disabled}text/placeholdertext/neutral/lowring-normalborder/ringborder-divider-{low,middle,high}border/neutral/{low,middle,high}bg-primary-{500,600,700,200}surface/primary/high/{enabled,hover,active,disabled}bg-primary-{50,100}surface/primary/low/{hover,active}border-neutral-{500,600}border/neutral/extra-high/{enabled,hover}secondary-700(アイコン)object/neutral/middleskeleton-fillsurface/base/200black-alpha-300surface/overlayneutral-900(背景)surface/inversesecondaryカテゴリは廃止見込み(用途に応じてobject/neutral/*/text/neutral/*に分岐)。対象コンポーネント(24)
Button, Icon Button, Input, Input Password, Checkbox, Radio, Select, Switch, Slider, Textarea, Form,
Badge, Card, Divider, Tag, Inline Message, Skeleton, Spinner, Dialog, Modal, Overlay, Toast, Tooltip,
Tabs, Breadcrumb, Link, Icon
スタイル置換に留まらない構造変更(要注意)
デザイン側の指示には、単なるトークン差し替えでない変更が含まれる:
text/disabled+neutral/400→text/neutral/disabled角丸のセマンティック名も
halfModal→containerにリネームされる(--radius-halfModalは beta 期間の後方互換エイリアスとして残る)。旧トークンは beta 期間併存
--color-{semantic}-{50..900}/--color-text-*/--color-divider-*/--color-skeleton-fill/--color-ring-normalは beta 期間中そのまま利用可能。コンポーネントを順次移行し、beta 終了時に旧トークン削除 PR を別途立てる。現行コードの旧語彙使用状況(
src/components/ui)置換対象は広範。ユーティリティクラス名の機械置換だけでは足りず、状態別クラス(
hover:/disabled:)の再構成が必要。#274(React 19 ref-as-prop)との関係
#274 は「他の大規模アップデートと同時にまとめてリリース」する前提で塩漬けされている PR で、今回の beta サイクルがまさにその機会。
ただし現在 CONFLICTING(DIRTY) かつ最終更新が 2026-05-19 で、main が 2.5 ヶ月分進んでいる。本 issue のトークン移行は #274 と同じ 17 ファイルを大幅に書き換えるため、順序で手戻り量が変わる。
方針: #274 を先に main へ追従させ(amend + force-push は規約で禁止のため、コンフリクト解決コミットを積む)、React 19 化を beta の土台にしてからトークン移行を載せる。