Popupコンポーネントのarrow表示方向を修正

shoelace-style/webawesome

<wa-popup>-start および -end プレースメント指定時に、矢印(arrow)が誤った方向を向いていた問題が修正されました。CSS属性セレクタの演算子を変更することで、プレースメント名のサフィックスに依存しない正確な方向判定が実現されています。

背景

<wa-popup> コンポーネントでは、data-current-placement 属性に基づいて矢印の回転角度を決定しています。この属性には leftrightbottom などの基本方向に加え、left-startright-end のようなサフィックス付きの値も設定されます。

これまでのCSS属性セレクタは ~= 演算子(単語マッチ)を使用していたため、left-start のようなハイフン区切りの値に対して正しくマッチしませんでした。その結果、Discordスレッドで報告されたように、-start-end プレースメントで矢印が意図しない方向を向く不具合が発生していました。

技術的な変更

packages/webawesome/src/components/popup/popup.styles.ts で、属性セレクタの演算子を ~= から |= に変更しました。

変更前:

:host([data-current-placement~='left']) .arrow {
  rotate: -45deg;
}

:host([data-current-placement~='right']) .arrow {
  rotate: 135deg;
}

:host([data-current-placement~='bottom']) .arrow {
  rotate: 225deg;
}

変更後:

:host([data-current-placement|='left']) .arrow {
  rotate: -45deg;
}

:host([data-current-placement|='right']) .arrow {
  rotate: 135deg;
}

:host([data-current-placement|='bottom']) .arrow {
  rotate: 225deg;
}

この変更により、以下のマッチング動作が実現されます:

  • data-current-placement="left" → マッチ(従来通り)
  • data-current-placement="left-start" → マッチ(新たに対応)
  • data-current-placement="left-end" → マッチ(新たに対応)

|= 演算子は、属性値が指定された文字列と完全一致するか、指定された文字列にハイフンが続く場合にマッチするため、ハイフン区切りの値のプレフィックスマッチに適しています。

まとめ

本PRは、CSS属性セレクタの演算子を ~= から |= に変更することで、-start および -end サフィックスを含むすべてのプレースメントパターンに対応しました。この変更はCSSのみで完結しており、実行時のJavaScriptコストを伴いません。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

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

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→背景・技術的な変更(各論)→まとめ(結論)という3部構成が明確に適用されており、模範的な記事構成です。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(```typescript:path/to/file.ts)およびPR番号のリンク記法([#2094](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

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

CSS属性セレクタの挙動という専門的なトピックを扱っており、対象読者であるエンジニアに適した技術レベルと表現で書かれています。

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

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

各セクション、各パラグラフが「総論→各論」の構造で書かれ、トピックセンテンスが明確です。1段落1トピックの原則も守られており、非常に読みやすいです。

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、提供されたDiff情報を正確に反映しています。ファイルパス、変更前後のコード(~= から |= へ)が完全に一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「属性セレクタ」「~= 演算子」「|= 演算子」「プレフィックスマッチ」などの技術用語が、文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

CSS属性セレクタの ~= と |= の挙動の違いに関する説明は技術的に正確であり、なぜこの変更が必要だったのかが論理的に解説されています。

事実の突合 ✓ PASS

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

記事内のすべての主張(不具合の内容、原因、修正方法)は、PRのタイトル、Description、Diff内のchangelogおよびコード変更によって裏付けられており、ハルシネーションは検出されませんでした。

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

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

PR番号(#2094)やコンポーネント名(<wa-popup>)などの固有名詞はすべて正確に記載されています。

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

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

記事のタイトル「Popupコンポーネントのarrow表示方向を修正」は、PRのタイトル「Fix popover arrows」の内容をより具体的に、かつ正確に表現しています。

外部知識の正確性 ✓ PASS

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

PR情報に基づかない外部知識(バージョンサポート状況、リリース日程など)の追加はなく、提供された情報源に忠実です。

時間表現の正確性 ✓ PASS

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

「これまでの」「修正されました」といった時間表現は、完了した変更を報告する文脈として正確です。