リストボックス
選択肢のうち 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 を名前に持つ、空の一覧 |
option | title をラベルに持ち、value を選ぶ選択肢を足します。 |