アニメーション時間をデザイントークンに統一し、モーションの一貫性を確保

shoelace-style/webawesome

複数コンポーネントに散在していたハードコードされたアニメーション時間値を --wa-transition-* トークンに置き換え、デザインシステム全体でモーションが一貫して管理されるようになりました。

背景

ドキュメントのコード例トグル(#2414)のポリッシュ作業中に、<wa-details>--show-duration / --hide-duration がリテラルの 200ms にハードコードされていることが発覚しました。ライブラリ全体を監査したところ、同じパターンがポップアップ系コンポーネントにも広がっており、50ms100ms200ms といったアドホックな値が --wa-transition-* トークン とは無関係に使われていました。

この状態では、デザインシステム側でトークンの値を調整しても各コンポーネントのアニメーション時間には反映されず、モーションが設計意図から乖離するリスクがありました。今回の変更はその不整合を解消するものです。

技術的な変更

変更は大きく2つのグループに分かれます。それぞれコンポーネントの種別に応じて異なるトークンへ移行しています。

ポップアップ系コンポーネントwa-dropdownwa-popupwa-popoverwa-select)は、50〜100ms の値から --wa-transition-fast(75ms)へ統一されました。

/* 変更前 */
--show-duration: 50ms;
--hide-duration: 50ms;

/* 変更後 */
--show-duration: var(--wa-transition-fast);
--hide-duration: var(--wa-transition-fast);

パネル系コンポーネントwa-detailswa-dialogwa-drawerwa-tree-item)は、200ms の値から --wa-transition-normal(150ms)へ統一されました。

/* 変更前 */
--show-duration: 200ms;
--hide-duration: 200ms;

/* 変更後 */
--show-duration: var(--wa-transition-normal);
--hide-duration: var(--wa-transition-normal);

さらに2つの小さな修正も含まれています。<wa-copy-button> のアイコンスワップアニメーションと <wa-select> のシェブロン回転イージングも、それぞれハードコードの 100ms ease / ease から --wa-transition-fast--wa-transition-easing トークンへ移行しました。

/* 変更前 */
animation: copy-button-icon-show 100ms ease;

/* 変更後 */
animation: copy-button-icon-show var(--wa-transition-fast) var(--wa-transition-easing);
/* 変更前 */
transition: rotate var(--wa-transition-slow) ease;

/* 変更後 */
transition: rotate var(--wa-transition-slow) var(--wa-transition-easing);

CSSカスタムプロパティのデフォルト値を変更しているだけなので、--show-duration / --hide-duration を明示的に上書きしているユーザーには影響がありません。ユーザー向けに見える変化としては、ポップアップ系がわずかに速く、パネル系が約50ms短く動作します。

設計判断

リテラル値を直接トークンで置き換える最小限のアプローチ が採用されました。新たなCSSカスタムプロパティや抽象化レイヤーを導入せず、既存の --show-duration / --hide-duration の初期値をトークン参照に差し替えるだけで、デザインシステムとの接続を確立しています。

また、PR本文によれば「1コンポーネントにつき1コミット」の方針で変更が分割されており、問題が生じた際のバイセクトやリバートを容易にする構成になっています。影響範囲が広い変更であっても、git履歴上での追跡性を意識した運用です。

ドキュメント(.ts ファイルの JSDoc コメント)も同時に更新され、デフォルト値として 200ms ではなく var(--wa-transition-normal) が記載されるようになりました。API仕様とコード実装が一致した状態に保たれています。

まとめ

今回の変更は、散在していたアドホックな時間値を --wa-transition-* トークンへ一元化し、デザインシステムのトークン変更が自動的にすべてのコンポーネントのモーションに伝播する構造を確立しました。既存のカスタマイズを壊さずに、設計意図とコード実装の乖離を解消した変更です。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
83d3278e

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)→セクション群(各論)→まとめ(結論)の3部構成が明確です。必須要素である「背景」「技術的な変更」に加え、任意要素の「設計判断」も含まれており、非常に分かりやすい構成になっています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```css:ファイルパス)、PR番号のリンク記法([#2423](URL))など、すべてのカスタムMarkdown構文が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

デザイントークンやCSSカスタムプロパティといった専門用語を前提としており、対象読者であるエンジニアに適した技術レベルと表現で書かれています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクション内が総論→各論で構成され、各段落はトピックセンテンスで始まっています。1段落1トピックの原則が守られており、段落長も適切で非常に読みやすいです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されているすべてのコードブロックは、提供されたDiffの内容と完全に一致しており、ファイル名も正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`--wa-transition-*` トークンやCSSカスタムプロパティ、コンポーネント名など、技術用語がPR情報に沿って正確かつ適切に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

「ポップアップ系」と「パネル系」コンポーネントへの変更内容の分類や、ユーザーへの影響範囲の説明など、すべての技術的な説明が正確で論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張(発見の経緯、変更理由、設計方針など)は、PRのDescriptionやDiff内容によって裏付けられており、ハルシネーションは一切見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#2423, #2414)やアニメーション時間(50ms, 75ms, 150msなど)を含む、すべての数値と固有名詞が正確に記載されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトルは、PRの主題である「コンポーネントのアニメーション時間とデザイントークンの同期」を的確に表現しており、内容と完全に一致しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

PR情報に含まれない外部知識(バージョン情報、リリース予定など)の追記はなく、提供された情報源に忠実です。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

完了した変更について過去形を用いるなど、時間表現が正確であり、PRの状況を正しく反映しています。