Slack でも利用されている絵文字キーボードの配色をカスタマイズしてみました
動作確認環境
Next.js 14.2.6
かわいい絵文字ピッカーを導入してみました
Slack ではお馴染みですね

導入してみたページです。キーボードアイコンをクリックすると表示されます
私事ですが macOS Sonoma 14.5 あたりから絵文字キーボードの調子が悪くなり恋しくなったので取り付けてみました
React (Next.js) 環境であればインストールは簡単で、以下でインストールできます
yarn add emoji-mart @emoji-mart/data @emoji-mart/reactところで、このコンポーネントは Shadow DOM で構成されています
Shadow DOM とは、コンポーネントに意図しない外部の CSS があたらないようにするための仕組みです
(恥ずかしながら、私も初めて知りました 🙃)
そのため、カスタマイズする場合には単純にセレクタを指定するだけではダメでした
ひとまず devTools で覗くと、ピッカーの DOM は以下のようになっています
<div><em-emoji-picker>#shadow-root (open)...</em-emoji-picker></div>
このピッカーの場合は CSS 変数を用いて一部定義されているので、配色については以下を上書きすることで変更できそうです (他にもあるかもです)
| 変数名 | |
|---|---|
--rgb-color | 通常のアイコンや文字に割り当てる色 |
--rgb-accent | 選択状態のアイコンや文字に割り当てるアクセントカラー |
--rgb-background | ピッカーの背景色 |
--rgb-input | 選択状態の検索ボックスの背景色 |
--color-border | 通常の検索ボックスの背景色や、アイコンを選択した場合の背景色、通常状態のスクロールバーの配色 |
--color-border-border | ホバー状態のスクロールバーの配色 |
Shadow DOM 内部の CSS 変数を上書きするには、トップにあるem-emoji-picker に対して指定します
ここでは変数名が rgb から始まっているものについては RGB の割合をカンマ区切りで指定する仕様のようです
em-emoji-picker {--rgb-accent: 0, 175, 222;}
変数名が color の場合は、通常通りの CSS の色指定方法で指定になります
em-emoji-picker {--color-border: #fff4c9;--color-border-border: #ffd54c;}
これで、自分好みの配色に変更できました 🎉
おわりに
今夜は金曜ロードショーで天空の城ラピュタが放送されるみたいです 🐶
X にみんなで DOS しましょ。バルス! 🤝