Skip to content

Offcanvas

概要

オフキャンバスコンポーネント。命令的 APIOffcanvas.show() / Offcanvas2.show())と宣言的 API(JSX component)の 2 つの使い方をサポートしています。

特徴説明
サイズsm, md, lg, xl, full の 5 段階
配置start, end(デフォルト), top, bottom
アニメーション配置に応じたスライド
キーボードEscape キーで閉じる(デフォルト有効)
外側クリックバックドロップクリックで閉じる(デフォルト有効)

デモ

使い方 — 命令的 API(Offcanvas.show)

Offcanvas.show() は Promise を返す。コンテンツコンポーネントには resolvehide が attrs に注入される。

tsx
import { Offcanvas } from 'mithril-ui-kit';

const result = await Offcanvas.show<boolean>({
  size: "md",
  placement: "end",
  content: {
    view(vnode) {
      return (
        <Offcanvas.Content>
          <Offcanvas.Header>
            <Offcanvas.Title>メニュー</Offcanvas.Title>
            <Offcanvas.CloseTrigger />
          </Offcanvas.Header>
          <Offcanvas.Body>
            <p>Offcanvas の内容</p>
          </Offcanvas.Body>
          <Offcanvas.Footer>
            <button onclick={() => vnode.attrs.hide()}>閉じる</button>
            <button onclick={() => vnode.attrs.resolve(true)}>OK</button>
          </Offcanvas.Footer>
        </Offcanvas.Content>
      );
    }
  }
});

console.log(result); // true or false

使い方 — 宣言的 API(JSX Component)

tsx
import { Offcanvas } from 'mithril-ui-kit';

let open = false;

// view 内で
<Offcanvas.Root
  open={open}
  onOpenChange={(d) => { open = d.open; }}
  size="md"
  placement="end"
>
  <Offcanvas.Trigger asChild>
    <button>開く</button>
  </Offcanvas.Trigger>
  <Offcanvas.Backdrop />
  <Offcanvas.Positioner>
    <Offcanvas.Content>
      <Offcanvas.Header>
        <Offcanvas.Title>メニュー</Offcanvas.Title>
        <Offcanvas.CloseTrigger />
      </Offcanvas.Header>
      <Offcanvas.Body>コンテンツ</Offcanvas.Body>
      <Offcanvas.Footer>
        <button onclick={() => { open = false; }}>閉じる</button>
      </Offcanvas.Footer>
    </Offcanvas.Content>
  </Offcanvas.Positioner>
</Offcanvas.Root>

Props

OffcanvasShowOptions

命令的 API Offcanvas.show(options) に渡すオプション。

Propデフォルト説明
contentm.ComponentTypes必須Offcanvas に表示するコンポーネント
sizeOffcanvasSize"md"Offcanvas のサイズ
placementOffcanvasPlacement"end"表示位置
closeOnEscapebooleantrueEscape キーで閉じるか
closeOnInteractOutsidebooleantrue外側クリックで閉じるか

OffcanvasRootAttrs

宣言的 API <Offcanvas.Root> に渡す Props。

Propデフォルト説明
openboolean必須Offcanvas の開閉状態
onOpenChange(details: OffcanvasOpenChangeDetails) => void開閉状態変更コールバック
sizeOffcanvasSize"md"サイズ
placementOffcanvasPlacement"end"配置
closeOnEscapebooleantrueEscape キーで閉じるか
closeOnInteractOutsidebooleantrue外側クリックで閉じるか

サブコンポーネント

コンポーネント説明
Offcanvas.Root状態管理ルート(宣言的 API)
Offcanvas.Trigger開くトリガーボタン
Offcanvas.Backdrop半透明のバックドロップ
Offcanvas.PositionerContent の配置制御
Offcanvas.ContentOffcanvas のメインコンテナ
Offcanvas.Headerヘッダー
Offcanvas.Titleタイトル
Offcanvas.Bodyボディ(スクロール可能)
Offcanvas.Footerフッター
Offcanvas.CloseTrigger閉じるボタン

サイズ

start/endtop/bottom
sm幅 280px高さ 200px
md幅 380px高さ 300px
lg幅 500px高さ 400px
xl幅 700px高さ 500px
full幅 100%高さ 100%

配置

説明アニメーション
start左から表示スライドイン(左)
end右から表示(デフォルト)スライドイン(右)
top上から表示スライドイン(上)
bottom下から表示スライドイン(下)
center中央に表示スケールイン

Mithril UI Kit Documentation