Skip to content

feat(ui): collapse either sidebar from a header toggle (config.rs, index.html, main.ts, styles.css, docs) - #122

Merged
smileygames merged 1 commit into
mainfrom
issue-118-sidebar-collapse-toggle
Aug 28, 2026
Merged

feat(ui): collapse either sidebar from a header toggle (config.rs, index.html, main.ts, styles.css, docs)#122
smileygames merged 1 commit into
mainfrom
issue-118-sidebar-collapse-toggle

Conversation

@smileygames

Copy link
Copy Markdown
Member

Closes #118

左右のサイドバーをヘッダのボタンからそれぞれ畳めるようにした。左のボタンはアプリ名「Pullcept」が出ていた位置に置き換え、右のボタンは 端末 の並びに置いた。畳んだ面は幅 0 で、状態は config.jsonpanels に残る。Ctrl+B は左の面だけを開閉し、端末に焦点がある間はキーを端末へ譲る。

アイコンは縦線の入った角丸の四角であり、二つのボタンが同じ図形を持ち、鏡像にしているのは CSS の一行である。要求仕様に「サイドバーの開閉」の節と、実機未確認の項目を追加した。

…dex.html, main.ts, styles.css, docs)

部屋を挟む二つの面(左の「トピック」、右の「アカウント」)を、ヘッダのボタンからそれぞれ畳めるようにする。会話面を広く使いたいときに閉じられる。

- 左のボタンはヘッダ左端、アプリ名「Pullcept」が出ていた位置に置く。あの語は押しても何も起きず、その窓を見ている者に対してその窓が何かを言うだけだった。語は残さず置き換える(Master 判断)。右のボタンはヘッダ右端であり、どちらも自分が畳む列の上に立つ。
- アイコンは縦線の入った角丸の四角であり、縦線は自分が畳む面の側に立つ。二つのボタンは同じ図形を持ち、鏡像にしているのは CSS の一行である(決定4)。
- 畳んだ面は幅 0 で、細い帯は残さない(決定2)。開く手はヘッダに常に在るため、道標としての帯は要らない。
- 面は隠すだけであり、描画の元になる出来事(名簿、席、トピックの索引)は届き続ける。右の面を閉じている間にセッションが落ちても、開けばそう出ている(制約)。
- 開閉の状態は `config.json` の `panels` に残す(決定1)。この欄を持たない既存の設定は両方とも開いた状態として読む——それがこの欄より前のすべての画面が出していた割り付けである。押すたびに書くのは、行儀よく閉じなかった一回で割り付けを失わないためである。
- `Ctrl+B` は左の面だけを開閉する(決定3、AI 判断6)。端末に焦点がある間はこのキーを受け取らない(AI 判断5)——`attachCustomKeyEventHandler` は `Ctrl+V` 以外すべてに `true` を返すため、止めなければ面が畳まれると同時にシェルへ `Ctrl+B` が渡る。端末ペインはセッションのものである(#84)。
- ボタンの読み上げ名は状態で変えず、開閉は `aria-expanded` が言う。`#toggle-diagnostics` と同じ形である。
- `save_config` は設定を丸ごと書くため、アカウントと開閉状態を一本の `saveConfig` から書く。片方しか知らない保存が二本あれば、走るたびにもう片方を落とす。

要求仕様に「サイドバーの開閉」の節と、実機未確認の項目を追加した。

Closes #118

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@smileygames smileygames linked an issue Aug 28, 2026 that may be closed by this pull request
@smileygames smileygames self-assigned this Aug 28, 2026

@smileygames smileygames left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI セルフレビュー(execution_mode = auto、#118 に対して)。

受け入れ基準

本文の決定と AI 判断を一つずつ diff で確認した。すべて満たしている。

  • 決定1(config.json に保持)— PanelStateAppConfig#[serde(default)] で追加。既存の config.json は欄を持たないが、両方開いた状態として読まれる。既存設定の読み込みは壊れない。
  • 決定2(幅 0、帯を残さない)— #history[hidden], #participants[hidden] { display: none }。両パネルが持つ display: flex は UA の hidden 規則を上回るため、明示が要るという判断は既存の #diagnostics[hidden] と同じ形で正しい。
  • 決定3 / AI 判断6(Ctrl+B は左のみ)— windowkeydown で左だけを開閉。
  • 決定4(同じ柄の鏡像)— 二つのボタンが同一の SVG を持ち、鏡像は #titlebar #toggle-participants svg { transform: scaleX(-1) } の一行のみ。フォールバック(左右同一アイコン)に落ちていない。
  • AI 判断5(端末に焦点がある間はキーを譲る)— terminalEl.contains(document.activeElement)preventDefault の前に return。term.open(host)host#terminal の子であるため、xterm の textarea に焦点がある状態をこの判定が実際に捕まえる。実装として成立している。
  • 制約(畳んでも失われない)— hidden のみで、購読も描画元のイベントも切っていない。
  • 制約(既存の開閉ボタンの作法)— 両ボタンが aria-expanded / aria-label / title を持ち、aria-controls は実在する id を指す。読み上げ名を状態で変えていない点も #toggle-diagnostics と揃っている。
  • ヘッダ左端の Pullcept は置換済みで、#titlebar .title の CSS 規則も残っていない。

逸脱

なし。変更は 5 ファイル(docs/0-requirements.md / index.html / src-tauri/src/config.rs / src/main.ts / src/styles.css)で、本文の target files の範囲内。ビルド生成物の混入なし。

saveAccountssaveConfig への改名と全 4 呼出箇所の追従は、本文に無いが必要な変更である。save_configAppConfig を丸ごと書くため、片方の欄しか知らない保存が二本あれば互いを落とす。取りこぼしが無いことを grep で確認した。

CI

check / CI ともに success(19cbb0b)。mergeStateStatus = CLEAN。

未確認として残るもの

アイコンの見た目は誰も見ていない。実装者はブラウザ枠が描画を返さなかったため DOM 越しに寸法を測っており(両ボタン 26.4×26.4、端末 と同じ上端、縦線位置は左 0.43 / 右 0.57 で鏡像を確認)、スクリーンショットは取れていない。docs/0-requirements.md の未実装節に実機未確認として記録済み。実機確認はマージの門ではないため、これを理由に止めない。

次: 自己レビュー通過につき、auto モードの直接マージへ進む。

@smileygames
smileygames merged commit 97920a0 into main Aug 28, 2026
2 checks passed
@smileygames
smileygames deleted the issue-118-sidebar-collapse-toggle branch August 28, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui): collapse either sidebar from a header toggle

1 participant