ラジオグループ
選んだ選択肢の値をシグナルに入れる、ラジオボタンのグループです。
実行結果
radio_group.rs
use hypersig::html::{div, p};
use hypersig::style::pattern::stack;
use hypersig::style::value::rem;
use hypersig::{Page, Signals, if_else};
use hypersig_ui::radio_group;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq)]
pub enum Plan {
Hobby,
Pro,
Team,
}
#[derive(Signals, Serialize, Deserialize)]
pub struct Billing {
plan: Plan,
}
pub fn page() -> Page<Billing> {
let plan = Billing::plan();
Page::new(
"お支払い",
Billing { plan: Plan::Pro },
)
.child(
div()
.css(stack(rem(1)))
.child(radio_group(
"プラン",
plan,
[
(
Plan::Hobby,
"Hobby",
),
(
Plan::Pro,
"Pro",
),
(
Plan::Team,
"Team",
),
],
))
.child(p().bind_text(if_else(
plan.equals(&Plan::Hobby),
"個人のプロジェクトには無料です。",
"毎月請求されます。",
))),
)
}アクセシビリティ
ラジオボタンはシグナルのパスから作った name を共有するので、ブラウザはグループ全体で Tab の止まる場所を 1 つにし、グループの中のラジオボタンの間を矢印キーで移れるようにします。<fieldset> と <legend> がスクリーンリーダーに向けてグループに名前を付けます。
| キー | 動作 |
|---|---|
| Tab | グループの中のチェックされたラジオボタンにフォーカスを移します。 |
| 矢印キー | 次か前のラジオボタンに移り、それをチェックします。 |
API
| 項目 | 概要 |
|---|---|
radio_group | title を <legend> に表示し、選択肢ごとに 1 つのラジオボタンを並べて、選んだ選択肢の値を selected に入れるグループ |
radio_group_in_form | title を <legend> に表示し、form の field に束縛したラジオボタンのグループ |