Color Pickerの横方向フリップを修正

shoelace-style/webawesome

Color Pickerコンポーネントから sync="width" 属性を削除することで、ビューポート右端での横方向フリップが機能するようになりました。この変更により、Floating UIの配置計算が正しく動作し、画面端でもColor Pickerが適切に表示されます。

背景

<wa-color-picker> は垂直方向のフリップには対応していましたが、画面右端に配置した場合に横方向へフリップしない問題がありました。#1839 で報告されたこの問題は、開発者ツールで sync="width" を削除すると解消することが確認されていました。

この属性は、ポップアップの幅をアンカー要素(小さなトリガーボタン)に合わせる制約を課していました。Color Pickerのパネルは独自の寸法を持つため、この制約が Floating UI のフリップ計算を妨げていたのです。

技術的な変更

packages/webawesome/src/components/color-picker/color-picker.ts 内の <wa-popup> 要素から、sync="width" 属性が削除されました。

変更前:

<wa-popup
  placement="bottom-start"
  distance="0"
  skidding="0"
  sync="width"
  flip
  flip-fallback-strategy="best-fit"
  shift
>

変更後:

<wa-popup
  placement="bottom-start"
  distance="0"
  skidding="0"
  flip
  flip-fallback-strategy="best-fit"
  shift
>

Color Pickerパネルの寸法は、CSSカスタムプロパティ(--grid-width--grid-height)で定義されており、トリガーボタンの幅とは独立しています。sync 属性を削除することで、Floating UIはこれらの実際の寸法を使用してフリップ計算を行えるようになりました。

設計判断

sync="width" 属性の削除という判断は、コンポーネントの特性に基づいています。

PR内では、この属性がドロップダウンのようなコンポーネントには有用であることが言及されています。ドロップダウンではメニューの幅をトリガーに合わせることが望ましいためです。しかし、Color Pickerの場合、トリガーは小さなカラースウォッチボタンであり、パネルをこの幅に合わせると使用不可能になります。

CSSによるオーバーライドでパネルは正しくレンダリングされていましたが、sync 属性はFloating UIの内部計算には影響を与え続けていました。この属性を完全に削除することで、レイアウトと配置ロジックの両方で一貫性が保たれるようになりました。

まとめ

本PRは、Color Pickerコンポーネントから不要な幅同期制約を削除することで、Floating UIの配置計算を正常化した変更です。1行の削除という最小限の変更で、ビューポート右端での使用性が向上し、コンポーネントの設計意図(独自の寸法を持つパネル)と実装が整合するようになりました。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事は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リンク記法の正確性

ファイル名付きシンタックスハイライト、Issue番号のリンク記法など、カスタムMarkdown構文が正しく使用されています。

対象読者への適合性 ✓ PASS

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

専門用語を適切に用い、冗長な説明を省くことで、専門知識を持つエンジニアという対象読者に適合した内容になっています。

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

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

各セクション、各パラグラフが「総論→各論」の構成になっており、トピックセンテンスが先頭に置かれているため、非常に構造的で読みやすい記事です。1段落1トピックの原則も守られています。

Diff内容との照合 ✓ PASS

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

提供されたDiff情報と記事内のコードブロック(変更前・変更後)が完全に一致しており、ファイルパスも正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Floating UI」「sync="width"」などの技術用語が、PR情報と一致しており、文脈上も正しく使用されています。

説明の技術的正確性 ✓ PASS

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

「sync="width"がフリップ計算を妨げていた」という変更の核心的な理由が、PR Descriptionに基づいて正確に説明されています。

事実の突合 ⚠ WARNING

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

記事の主張のほとんどはPR情報で裏付けられていますが、「開発者ツールで sync="width" を削除すると解消することが確認されていました」という記述は、提供されたPR情報(Title, Description, Diff)には含まれていません。これは関連Issueに記載されている可能性が高いですが、記事は提供されたPR情報に厳密に基づいているべきです。

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

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

PR番号(#2024)、Issue番号(#1839)などの数値や固有名詞は、PR情報と正確に一致しています。

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

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

記事のタイトル「Color Pickerの横方向フリップを修正」は、PRのタイトル「removed sync」よりも具体的で、変更の目的と結果を的確に表現しており、PR内容と完全に一致しています。

外部知識の正確性 ⚠ WARNING

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

「開発者ツールで...確認されていた」というデバッグの経緯は、PR情報にはなく、関連Issueからの情報と推測されます。PR情報に含まれない外部知識を補足しているため、警告とします。

時間表現の正確性 ✓ PASS

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

「〜していました」「〜するようになりました」といった時間表現は、過去の問題と今回の変更による結果を正確に区別しており、PRの文脈と一致しています。