English

リストボックス

選択肢のうち 1 つを選ぶ一覧です。選ばれた選択肢はシグナルに入ります。

実行結果

listbox.rs
use hypersig::html::div;
use hypersig::style::Style;
use hypersig::style::value::rem;
use hypersig::{Page, Signals};
use hypersig_ui::Listbox;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone, Copy, PartialEq)]
pub enum Font {
    Sans,
    Serif,
    Mono,
}

#[derive(Signals, Serialize, Deserialize)]
pub struct Editor {
    font: Font,
}

pub fn page() -> Page<Editor> {
    Page::new(
        "エディタ",
        Editor { font: Font::Sans },
    )
    .child(
        div().css(Style::new().max_width(rem(16))).child(
            Listbox::new(
                "フォント",
                Editor::font(),
            )
            .option(
                Font::Sans,
                "サンセリフ",
            )
            .option(
                Font::Serif,
                "セリフ",
            )
            .option(
                Font::Mono,
                "等幅",
            ),
        ),
    )
}

アクセシビリティ

単一選択の WAI-ARIA listbox パターンに従います。一覧は role="listbox" を持ち、各選択肢は role="option" と aria-selected を持ちます。フォーカスは El::roving_focus で選択肢の間を移り、選択肢はフォーカスを受けると同時に選ばれます。id はシグナルのパスと選択肢の位置から作られます。

キー動作
Tab一覧の中の選ばれた選択肢にフォーカスを移します。選ばれた選択肢がなければ、最初の選択肢に移します。
上矢印、下矢印前か次の選択肢に移り、それを選びます。
Home、End最初か最後の選択肢に移り、それを選びます。

API

項目概要
Listbox::new支援技術に向けて label を名前に持つ、空の一覧
optiontitle をラベルに持ち、value を選ぶ選択肢を足します。