Skip to content
fandhe-frontendcore v0.4.3
GitHub

faq-split-static

fandhe-frontend-pre-styled-ui の heading / text / link 部品を合成した、左に見出し + リード文、右に開閉のない Q&A 一覧を並べる 2 カラムの FAQ セクションです。Blocks セクションは新規部品を追加するものではなく、既存の Themes/Primitives 部品を組み合わせた実例集であることに注意してください(参照は対応表 ID R0924 のみ。出典の固有名・ファイル名は記載しません)。

lg(64rem)以上では左 5/12 に見出しとリード文、右 7/12 に質問と回答のペアを縦に並べて常時表示します。lg 未満では見出しの下に一覧が続く 1 列の縦積みになります。faq-accordion-centered と異なり開閉 UI は持たず、すべての質問・回答を常時展開の見出し + 段落として表示します。

本 Demo は静的な表示例であり、<form> 要素は一切持たず、データの取得・送信・状態管理を行いません。リード文中の問い合わせリンクは自プロジェクトの実在リポジトリ URL に固定しており、架空の窓口 URL は使いません。文言はすべて独自に書いた架空のものであり、実企業名・実クレデンシャル・PII を含みません。

Demo

よくある質問

ご不明な点がこちらで解決しない場合は、GitHub のリポジトリからお問い合わせください。

チームメンバーを何人まで招待できますか

招待人数に上限はありません。権限はオーナー・編集者・閲覧者の 3 段階から選べます。

既存のプロジェクトを後から取り込めますか

はい。標準的なエクスポート形式に対応しており、取り込み後も履歴を保ったまま編集を続けられます。

モバイル環境でも利用できますか

ブラウザからそのままご利用いただけます。専用アプリのインストールは不要です。

セキュリティ認証の取得状況を教えてください

第三者機関による定期的な監査を受けています。詳細な資料はご要望に応じてお渡しします。

プラン変更後の請求はどうなりますか

変更内容は次回請求サイクルから反映されます。日割り計算での差額精算にも対応しています。

解約時にデータはどうなりますか

解約後も一定期間はデータを保持し、期間内であればいつでも書き出しが可能です。

使用部品

Rust コード

Rust
use fandhe_frontend_core::{div, text, Node};
use fandhe_frontend_pre_styled_ui::heading::{heading, HeadingLevel, HeadingProps, HeadingSize};
use fandhe_frontend_pre_styled_ui::link::{self, LinkProps, LinkVariant};
use fandhe_frontend_pre_styled_ui::recipe::ColorPalette;
use fandhe_frontend_pre_styled_ui::text::{self as styled_text, TextProps, TextVariant};

/// 自プロジェクトの実在リポジトリ URL(架空の問い合わせ先を捏造しない)。
const REPO: &str = "https://github.com/Fandhe-AI/fandhe-frontend";

/// 架空の Q&A 一覧(実在の企業名・個人情報は含まない)。
const FAQS: [(&str, &str); 6] = [
    (
        "チームメンバーを何人まで招待できますか",
        "招待人数に上限はありません。権限はオーナー・編集者・閲覧者の 3 段階から選べます。",
    ),
    (
        "既存のプロジェクトを後から取り込めますか",
        "はい。標準的なエクスポート形式に対応しており、取り込み後も履歴を保ったまま編集を続けられます。",
    ),
    (
        "モバイル環境でも利用できますか",
        "ブラウザからそのままご利用いただけます。専用アプリのインストールは不要です。",
    ),
    (
        "セキュリティ認証の取得状況を教えてください",
        "第三者機関による定期的な監査を受けています。詳細な資料はご要望に応じてお渡しします。",
    ),
    (
        "プラン変更後の請求はどうなりますか",
        "変更内容は次回請求サイクルから反映されます。日割り計算での差額精算にも対応しています。",
    ),
    (
        "解約時にデータはどうなりますか",
        "解約後も一定期間はデータを保持し、期間内であればいつでも書き出しが可能です。",
    ),
];

/// 左列(見出し + リード文 + 問い合わせリンク)。
fn intro() -> Node {
    div(
        vec![("class", "blocks-faq-split-static-intro")],
        vec![
            heading(
                HeadingLevel::H3,
                &HeadingProps {
                    size: HeadingSize::Xl2,
                    ..HeadingProps::default()
                },
                vec![],
                vec![text("よくある質問")],
            ),
            styled_text::text(
                &TextProps {
                    variant: TextVariant::Muted,
                    ..TextProps::default()
                },
                vec![],
                vec![
                    text("ご不明な点がこちらで解決しない場合は、"),
                    link::root(
                        REPO,
                        &LinkProps {
                            variant: LinkVariant::Underline,
                            palette: ColorPalette::Neutral,
                            ..LinkProps::default()
                        },
                        vec![],
                        vec![text("GitHub のリポジトリ")],
                    ),
                    text("からお問い合わせください。"),
                ],
            ),
        ],
    )
}

/// Q&A 1 件分(質問見出し + 回答段落)。開閉状態を持たない常時展開。
fn faq_item(question: &str, answer: &str) -> Node {
    div(
        vec![("class", "blocks-faq-split-static-item")],
        vec![
            heading(
                HeadingLevel::H4,
                &HeadingProps::default(),
                vec![],
                vec![text(question)],
            ),
            styled_text::text(
                &TextProps {
                    variant: TextVariant::Muted,
                    ..TextProps::default()
                },
                vec![],
                vec![text(answer)],
            ),
        ],
    )
}

/// 右列(Q&A 一覧を縦に並べる)。
fn faq_list() -> Node {
    div(
        vec![("class", "blocks-faq-split-static-list")],
        FAQS.iter()
            .map(|(question, answer)| faq_item(question, answer))
            .collect(),
    )
}

/// `faq-split-static` の Demo 本体。呼び出しごとに同一の `Node` を返す
/// 純関数(モジュール doc「`<form>` を持たない」節)。
pub fn demo() -> Node {
    div(
        vec![("class", "blocks-faq-split-static-layout")],
        vec![intro(), faq_list()],
    )
}

原案差分メモ

  • 対応表 ID R0924 のみを参照し、複数原案の集約は発生していません。
  • 開閉 UI は持たず、質問・回答を常時展開の見出し + 段落として表示します。faq-accordion-centered(開閉可能なアコーディオン)とは構造上明確に別の block とし、disabled 固定等の対処は不要です。
  • 問い合わせリンクの遷移先は自プロジェクトの実在リポジトリ URL に固定し、可視テキストを「GitHub のリポジトリ」として遷移先が分かるようにしました。mailto:・tel:・href="#" は使っていません。
  • 参照元の文言・配色・装飾・アイコンは持ち込まず、Q&A の項目・文言はすべて独自に書いた架空のものにしました。
  • 配色・余白・角丸は既存のテーマトークンに従っています。

関連情報: Heading / Text / Link