3枠を順位付きで選択するモード(RankingMode.threePoint)
1位・2位・3位の3枠を選択して投票するモード。重み付け配分でランキング集計の表現力を上げる。
| 要素 | 種類 | 説明 |
|---|---|---|
| RankingHeaderView(Xスタイル) | VStack |
共通ヘッダ。7段構成。 1段目: 作成者アバター + 表示名 + フォローボタン + 右上ランクバッジ(44px円) 2段目: 投票タイプバッジ(TOP3=淡い緑 GRN002) + クイズ通過バッジ(hasQuiz=true のみ) 3段目: 大タグ 4段目: 小タグ 5段目: 投票期間 + 残り時間 6段目: タイトル(選択肢直前に再表示) 7段目: 説明文(存在時のみ) |
| 3枠スロット | HStack | 1位 / 2位 / 3位の選択枠 |
| 選択肢グリッド | LazyVGrid | 枠タップで Choice を割当 |
| 投票ボタン | Button | 3枠すべて埋まると有効化 |
| 消費ポイント表示 | Text | 「投票には Npt を消費します」 |
| バナー広告 | 共通配置 | MainTabView の safeAreaInset(.bottom) でタブバー直上(プレミアム時は非表示) |
navigationTitle は維持| 状態 | 表示内容 |
|---|---|
| 未完了(isThreePointReady=false) | 投票ボタン無効 |
| 3枠完了(isThreePointReady=true) | 投票ボタン有効 |
| 投票中 | ProgressView |
| 操作 | 遷移先 |
|---|---|
| 3枠選択 + 投票ボタン | 3件のVote INSERT → ResultView |
| 枠の入れ替え | 同画面(並べ替え) |
// 3件の Vote を順位ごとに INSERT(display_order = 1, 2, 3)
[Vote(choiceId: top1, ...), Vote(choiceId: top2, ...), Vote(choiceId: top3, ...)]
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0 | 2026-05-09 | 初版作成 |
| 1.1 | 2026-05-10 | RankingHeaderView を Xスタイル化(7段構成)/ThreePointVoteView の重複タイトル表示を削除/バナー広告を MainTabView 共通配置へ統一 |