メインコンテンツまでスキップ

「base-ui」タグのついた10記事

全てのタグを見る

Dialog を実装する: 状態も ARIA も書かないモーダル

Base UI の Dialog と Tailwind CSS で、お知らせ用のダイアログを実装します。パーツごとの役割、className へ直接クラスを渡す書き方、data 属性による開閉の遷移、useState と ARIA の属性を書かずに済む理由を順に見ます。

Storybook でテストする: play 関数と Chromatic

テスト 3 層の第 2 層を書きます。story に play 関数を足して開閉の操作を検証し、Vitest アドオンで実ブラウザの上で実行します。a11y の違反をテストの失敗にする設定と、Chromatic で見た目の差分を検知する流れも扱います。

Storybook を導入する: Tailwind CSS と a11y アドオンの設定

Base UI と Tailwind CSS のプロジェクトに Storybook を入れ、ダイアログの閉じた状態と開いた状態を story にします。導入コマンドが足すもの、Tailwind CSS を story に効かせる設定、a11y アドオン、CSF 3 での story の書き方を扱います。

まとめと次の一歩: フォームとデータ取得へ広げる

Base UI、Tailwind CSS、Storybook、テストの 4 つが何を受け持ったかを振り返ります。同じ分け方を、Zod のスキーマで検証するフォームと、TanStack Query で取得したデータを props で渡す構成に広げ、通信を伴う部分をどこで差し替えるかを整理します。

ロジック層とデザイン層: data 属性でつなぐ境界

Base UI が受け持つ振る舞いと、Tailwind CSS が受け持つ見た目の境界を、実際に DOM へ出る属性から確かめます。フォーカスの閉じ込め、開閉の状態を伝える data 属性、その属性を Tailwind CSS の variant で受ける書き方を扱います。

単体テスト: Vitest と React Testing Library

テスト 3 層の第 1 層を書きます。Vitest に jsdom の project を足し、React Testing Library と user-event で、ダイアログが開くこと、フォーカスが中へ移って外へ出ないこと、Esc キーと閉じるボタンで閉じることを確かめます。待ってから確かめる箇所と、jsdom では確かめられないことも整理します。

実ブラウザでテストする: Vitest Browser Mode と Playwright

テスト 3 層の第 3 層を書きます。Vitest Browser Mode で本物のキー入力を送り、フォーカスの閉じ込めと閉じる遷移を確かめます。Playwright でページに組み込んだ状態を通しで確かめ、最後にどの検証をどの層に置くかを表にまとめます。