https://github.com/basecamp/lexxy
`@rails/activestorage` を devDependencies へ移動したことで発生していたRollupビルドの失敗を修正しました。`output.file` 指定時にチャンク分割が試みられエラーになる問題を、`rollup.config.mjs` に `external` 設定を追加することで解消しています。
LexxyのテストスイートにTrixエディタとの双方向クロスエディタ互換性テストが追加されました。`to_trix_html`を使った正確なコンテンツシリアライズとJavaScript経由のTrix内部API操作を組み合わせ、リッチテキスト・添付ファイル・ギャラリーの6シナリオでエディタ間のAction Text互換性を検証するハーネスが整備されています。
LexxyのブラウザテストをCapybara/SeleniumからPlaywrightへ移行し、ViteをテストホストとしてRails依存を排除しました。テスト実行時間が約20秒超から約6秒に短縮され、Chromium・Firefox・WebKitの3ブラウザでの並列実行が可能になりました。Action TextやActive Storage統合など真にRailsを必要とするテストのみCapybaraシステムテストとして残す関心分離の設計が採用されています。
Lexxyエディタのプロンプト(インライン補完メニュー)について、コードブロック内での誤発火を防ぐガード処理の追加、画面右端でのクリッピング対応、`ul`セレクタの過剰適用によるマージンのずれ修正、削除ボタンの位置ずれ修正という4つの改善がまとめて行われました。
Lexxyのアップロード処理に複数の改善が加わった。アップロード完了時にノードを置換しても選択状態が維持されるようになり、画像を包んでいた不要なコンテナDIVが除去された。CSSも `display: table` から `display: block` へ移行し、DOM・スタイルの両面でシンプルな構造に整理されている。
テーブルセル内で@メンションなどのプロンプトを使用中に矢印キーがテーブルナビゲーションに奪われるバグを修正しました。プロンプトのキーハンドラー優先度を `COMMAND_PRIORITY_HIGH` から `COMMAND_PRIORITY_CRITICAL` に引き上げることで、Lexicalのテーブルプラグインより先にイベントを処理できるようになります。プロンプトが表示中のみ最高優先度を占有し、閉じると同時にハンドラーが解除されるため、通常の編集操作への影響はありません。
lexxy のファイルアップロードに `lexxy:upload-start`・`lexxy:upload-progress`・`lexxy:upload-end` の3つのカスタムイベントが追加されました。これまで開発者が `progress` 要素のDOMクエリで代替していたアップロード状態の検知が、公式イベントAPIで実現できるようになります。イベントは `figure` 要素からバブルアップする設計で、個別ファイルの追跡と一括監視の両方のユースケースに対応しています。
`lexxy_rich_textarea_tag`が`form`属性をHTMLオプションから削除してしまうバグを1行の削除で修正しました。これにより、`<input form="myform">`と同様にフォームの外部からLexxyエディタを関連付ける標準的なHTMLの使い方が可能になります。
LexxyにTrix互換のイメージギャラリー機能が実装されました。新たに追加された `ImageGalleryNode`(ElementNode継承)は `static transform()` で自己整合性を保ち、単一画像ギャラリーの自動unwrapや隣接ギャラリーの統合を実現します。`AttachmentsExtension` への責務集約と `Uploader` のファクトリパターン導入により、添付機能の有無による条件分岐がエディタのコアから分離されています。
Lexxyエディタにマークダウンをペーストした際、HTML挿入前に `lexxy:insert-markdown` カスタムイベントが発火するようになりました。`event.detail.document` に変換後のDOMが公開されており、イベントハンドラから同期的に操作することで画像の除去やブロックスペーシングの追加など、ペースト内容をアプリケーション側で自由に制御できます。設定APIへの依存を排除し、Web標準のイベントモデルに乗ったシンプルな拡張ポイントの追加です。
Lexxyエディタに、添付ファイルや水平線などのノードをマウスで削除できるコントロールが追加されました。新しいカスタム要素「lexxy-node-delete-button」が各ノードのDOM構造に組み込まれ、ノード選択時にデリートボタンが表示されます。
Lexxyのリンク生成ロジックが改善され、複数の単語にまたがる選択範囲へURLを貼り付けた際に単一のLinkNodeが生成されるようになりました。既存リンクをクリアしてから新規リンクを適用する方式に変更され、同じURLを持つ隣接リンクが複数生成される問題が解決されています。
エディタが既にフォーカスされている場合に不要なクリック操作を回避する修正。`document.activeElement`でフォーカス状態を確認し、テーブルセルなどでの選択範囲の意図しない移動を防止します。
LexxyエディタのツールバーアイコンをBasecampスタイルに統一し、関連アクションのグループ化とCSS強化により操作性と保守性を向上。アイコン定義を外部モジュール化し、将来の変更を容易に。
Rails の content_tag が html_safe な値を属性値として扱う際にエスケープを行わないため、HTML エンティティが実際のタグとして解釈される問題を修正。to_str による html_safe 属性の除去により、エディタ内のコードブロックが正しく表示されるようになりました。
Provisional Paragraphs機能の導入により、Safari特有のAttachmentNodeキャプション入力バグへの回避策(57行)が削除されました。DecoratorNodeの前後に選択可能なノードが自動保証されることで、ブラウザ固有の処理が不要になり、キャプションのフォーカス管理もシンプル化されています。
Lexxyのテストから固定時間待機(sleep)を削除し、Lexicalの`onUpdate`コールバックと`requestAnimationFrame`を組み合わせた非同期待機機構を導入。エディタの更新完了を確実に待つことで、テストの信頼性と効率性を向上。
Lexicalエディタの選択範囲APIに`selection.getFormat()`と`selection.nearestNodeOfType()`を追加。Webツールバーとネイティブツールバーが統一された書式判定・ノード検索インターフェースを共有できるようになり、カスタムヘルパー関数をLexical標準ユーティリティに置き換えることでコードの一貫性とメンテナンス性を向上。
LexxyのRich Textエディタで、アップロード中および失敗した添付ファイルがDOM出力から除外されるよう変更。ActionTextAttachmentUploadNodeの`exportDOM()`が`null`を返すことで、未完了のアップロードがフォーム送信時のHTMLに含まれなくなり、データ整合性が向上しました。
Lexxyが、DecoratorNodeの選択処理をカスタムイベントベースからLexical標準の `CLICK_COMMAND` ハンドラベースに移行しました。この変更により、内部イベントシステムが完全に削除され、コードが36行削減されています。