English

ラジオグループ

選んだ選択肢の値をシグナルに入れる、ラジオボタンのグループです。

実行結果

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_grouptitle を <legend> に表示し、選択肢ごとに 1 つのラジオボタンを並べて、選んだ選択肢の値を selected に入れるグループ
radio_group_in_formtitle を <legend> に表示し、form の field に束縛したラジオボタンのグループ