English

トースト

ページの隅に並べて表示する短いお知らせです。ブラウザからもサーバーからも追加できます。

実行結果

toast.rs
use hypersig::html::div;
use hypersig::style::pattern::wrap;
use hypersig::style::value::rem;
use hypersig::{Page, Signals};
use hypersig_ui::{ButtonSize, ButtonVariant, Toast, ToastVariant, Toaster, button};
use serde::{Deserialize, Serialize};

#[derive(Signals, Serialize, Deserialize)]
pub struct App {
    toasts: Vec<Toast>,
}

pub fn page() -> Page<App> {
    let toasts = App::toasts();
    let initial = App { toasts: Vec::new() };
    Page::new(
        "アプリ",
        initial,
    )
    .child(
        div()
            .css(wrap(rem(0.5)))
            .child(
                button(ButtonVariant::Outline, ButtonSize::Default)
                    .on_click(
                        Toast::new("予定を作成しました")
                        .description("12 月 3 日(日)9:00")
                        .push(toasts),
                    )
                    .text("トーストを表示"),
            )
            .child(
                button(ButtonVariant::Outline, ButtonSize::Default)
                    .on_click(
                        Toast::new("アップロードに失敗しました")
                        .description("ファイルが 10 MB を超えています。")
                        .variant(ToastVariant::Destructive)
                        .push(toasts),

                    )
                    .text("エラーを表示"),
            )
            .child(Toaster::new(toasts)),
    )
}

アクセシビリティ

トーストを並べる領域(toaster)は「Notifications」という名前のランドマークで、aria-live="polite" の一覧を持ちます。そのため、トーストが追加されると、スクリーンリーダーは読み上げ中の内容のあとにそのトーストを読み上げます。各トーストには、そのトーストを消すボタンがあります。

トーストは Toaster::dismiss_after で時間を設定しない限り、消されるまで残ります。ゆっくり読む訪問者や拡大鏡を使う訪問者は、自動で消えるお知らせを見逃すことがあるからです(WCAG 2.2.1)。この領域は top layer ではなくページの中にあるので、モーダルダイアログが開いている間は inert になって操作できず、ダイアログが閉じると操作できるようになります。

キー動作
Tab、Enterトーストの Dismiss ボタンに移り、それを押します。

API

項目概要
Toaster::newtoasts を新しいものほど後ろに並べて表示する領域
label「Notifications」の代わりに、支援技術に向けた領域の名前を付けます。
dismiss_after各トーストを表示してから delay が経ったら取り除きます。
Toast::newtitle をタイトルに持ち、プロセスのほかのどのトーストとも違う id を持つトースト
descriptionタイトルの下に 1 行のテキストを足します。
variantトーストの見た目を設定します。
pushブラウザでこのトーストを toasts に追加する文
Toast::push_exprブラウザが評価する toast を toasts に追加する文