新しい「投稿タイプ」コンポーザーアクションドロップダウンの紹介

enable_new_composer_actions の背後にある Composer のリデザイン

この変更により、リデザインされた Composer のエクスペリエンスが導入され、新しいアルファ版の upcoming-change としてリリースされます。フラグがオフ(デフォルト)の場合、視覚的な変化はありません。管理者は upcoming-changes の管理ページからオプトインできます。

フラグがオンの場合の変化

  • 統合されたアクションドロップダウン。従来の SelectKit composer-actions ドロップダウンが、新しい Glimmer/DMenu コンポーネント(composer-actions-new.gjs)に置き換えられました。これは、より明確なラベルとアイコンで、同じモード切り替え行(トピックへの返信、新規トピックとしての返信、PM の作成など)をすべて表示します。

  • トグルはアクションと共に表示されます。Whisper / no-bump / unlist は、同じドロップダウンの下部にある <DToggleSwitch> アイテムとしてレンダリングされます。これは、別のコンボボタンメニューではありません。トグルの状態はモード切り替え後も維持されます(例:Whisper をオンにする → 返信対象をトピックから投稿に切り替える → それでも Whisper 状態のまま)。

  • Whisper 状態インジケーターのピル。ドロップダウントリガーの右側にある小さなボタンで、現在の Whisper 状態を 2 つの視覚的バリエーションで表示します:--public(セカンダリカラー、目のアイコン、「返信は表示されます」)と --whispering(primary-medium / primary-very-low 背景、目を隠すアイコン、「Whisper 中」)。これをクリックすると Whisper が切り替わります。これはドロップダウン内のトグルと同じコードパスを使用するため、両者は同期します。トリガーアイコン自体も Whisper 中は far-eye-slash に切り替わります。

  • 編集 UX。投稿を編集している場合、ドロップダウンは静的なカーソルなしラベル(鉛筆アイコン+「投稿を編集」)に折りたたまれます。以前は Composer の他の場所にあった「編集理由を追加」ボタンは、この静的トリガーに統合され、「編集内容の説明」ボタンとしてクリック可能になります。これをクリックすると、ラベルが composer.editReason にバインドされたテキスト入力フィールドに切り替わり、フォーカスが当てられます。

    • editing
  • Composer の外観(chrome).action-title テキスト/スパンは削除されました。ドロップダウントリガー自体が現在のモードを表示します。

  • 投稿/トピックリンク は必要に応じてのみ表示されます。トピックから移動するとトピックリンクがレンダリングされ、投稿からスクロール移動または移動すると投稿リンクがレンダリングされます。

プラグイン開発者向けメモ

新しいコンポーネントは SelectKit のサブクラスではないため、従来の拡張 API は適用されません。このアルファフェーズで両方のフラグ状態に対応するため、プラグインは両方の API を登録する必要があります:

旧 API(旧コンポーネントのみで動作) 新 API(新コンポーネントのみで動作)
api.modifySelectKit("composer-actions").appendContent(...) api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; })
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })

行の形状({ name, description, icon, id })は両方で同一です。Behavior transformer は、コンテキスト内で { actionId, options, model } を受け取ります。

:double_exclamation_mark: 旧フックのみを登録しているプラグインは、管理者がフラグを有効にした瞬間に Composer から静かに消えます。新しい transformer のみを登録しているプラグインは、フラグがオフの間(マージ時のデフォルト状態)は表示されません。

参照:

  • discourse-post-voting/extend-composer-actions.js — 二重登録の動作例(コア内)

  • discourse-staff-alias — 別途 PR で二重登録を追加

  • transformers.js — 2 つの新しい transformer 名

ロールアウトに関するメモ

  • フラグの状態は アルファ です。内部テスト用のオプトインです。

  • Composer アクションと連携するプラグインは、これが beta/stable に昇格する前に二重登録を追加してください。

  • テストは両方の状態をカバーしています:既存の受け入れ/システム仕様はフラグオフをカバーし、兄弟の *-new-test.js ファイルはフラグオンをカバーします(さらに、統合ドロップダウン、トグルアイテム、Whisper インジケーター、分割ラベルスパン用の新しいコンポーネント DOM セレクターも含まれます)。

「いいね!」 8