すべてのコンポーネント

MotionSheet

段階付きのボトムシート、トップシート、サイドドロワー。フリックやスクロールへの引き継ぎにも対応。

WebReact Nativeオーバーレイ

試してみる

サンプルを準備中…

いちばん短い使い方

Filters.jsx
<MotionSheet open={open} onOpenChange={setOpen} detents={[0.45, 0.92]}>
  <FilterList />
</MotionSheet>;

代わりに処理してくれること

  • ドラッグに追従し、いちばん大きな段階を越えると抵抗し、離したときの速度で落ち着きます。フリックすると 1 段階移動するか、閉じます。
  • タッチのドラッグはスクロールできる中身に引き継がれます。下に引くと、シートが動く前に中身がいちばん上までスクロールして戻ります。
  • 段階は画面に対する割合、ピクセル、または中身本来のサイズを表す 'content' で指定します。
  • モーダルのシートはフォーカスを内側に閉じ込め、ページを操作不可にし、Escape か背景で閉じます。

こんなときに

  • フィルターパネル。
  • 共有メニュー。
  • side="start" を使ったナビゲーションドロワー。

props

Prop型デフォルト説明
openbooleanfalseシートを表示するかどうか。
onOpenChange(open) => voidシートがドラッグ、タップ、Escape で閉じられたときに false を受け取って実行されます。
detents(number | 'content')[]['content']止まる位置のサイズ: 画面に対する割合、ピクセル、または 'content'。
detentnumber制御する段階のインデックス。
defaultDetentnumber0detent を指定せずに開くときに使う段階のインデックス。
onDetentChange(index) => voidシートが落ち着いた段階のインデックスを受け取って実行されます。
side'bottom' | 'top' | 'start' | 'end''bottom'シートが出てくる辺。
modalbooleantrue背景を追加し、フォーカスを内側に閉じ込め、ページを操作不可にします。
dismissiblebooleantrueいちばん小さな段階を越えるドラッグ、背景、Escape で閉じられます。
backdropClassNamestring背景のクラス。インラインスタイルは backdropStyle で指定します。
transitionTransitionspringタイミングカーブ { duration, easing } かスプリング { tempo: 'spring', spring }。スプリングは中断されても勢いを保ちます。

ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。

Web と React Native

Web では、モーダルのシートはネイティブの dialog です。パネルは flex の縦並びで、className でスタイルを指定します。

React Native では透明な Modal の中に描画され、戻るボタンで閉じます。内側の ScrollView は自分のジェスチャーを保つので、シートはハンドル、ヘッダー、そのほかスクロールしない部分からドラッグします。

使っているサンプル

検索

入力するとドキュメントを検索します。