Description
チャットメッセージ内のマークダウンレンダリングに以下の問題・不足がある:
- 箇条書き(リスト)の項目間の余白が広すぎる: サイドバーの限られた幅に対して、情報量あたりの占有面積が大きく、スクロール量が増える
- コードブロックにシンタックスハイライトがない:
marked でパースした結果をそのまま表示しているため、言語に応じた色分けがされない
- コードブロックにコピーボタンがない: コードを手動で選択・コピーする必要がある
- ネストされたコードブロックのレンダリングが崩れる: エージェントがマークダウンのコードブロックを出力する際、内部にコードフェンス(
```)を含むとパーサーが外側のフェンスの終端と誤認し、表示が崩れる
Motivation
- 余白が多いと情報密度が下がり、サイドバーの狭い幅では可読性に影響する
- シンタックスハイライト・コピーボタンはコードブロックの基本的な UX 期待値
- ネストコードブロックはエージェントがマークダウンファイルの内容を出力する際によく発生するパターンであり、正しく表示される必要がある
Proposed Solution
- 箇条書き余白の調整:
MessageItem.module.css 内の .markdown スコープでリストアイテムの余白を見直す
- シンタックスハイライトの導入:
highlight.js や shiki 等を導入し、marked と連携して言語別ハイライトを適用する
- コードブロックのコピーボタン:
marked のカスタムレンダラーでコピーボタンを追加し、イベントデリゲーションで処理する
- ネストコードブロック対策:
marked.parse() に渡す前にテキストを前処理し、コードブロック内にフェンスが含まれる場合、外側のフェンスをより長いバッククォート列に自動置換する
受け入れ条件
Description
チャットメッセージ内のマークダウンレンダリングに以下の問題・不足がある:
markedでパースした結果をそのまま表示しているため、言語に応じた色分けがされない```)を含むとパーサーが外側のフェンスの終端と誤認し、表示が崩れるMotivation
Proposed Solution
MessageItem.module.css内の.markdownスコープでリストアイテムの余白を見直すhighlight.jsやshiki等を導入し、markedと連携して言語別ハイライトを適用するmarkedのカスタムレンダラーでコピーボタンを追加し、イベントデリゲーションで処理するmarked.parse()に渡す前にテキストを前処理し、コードブロック内にフェンスが含まれる場合、外側のフェンスをより長いバッククォート列に自動置換する受け入れ条件