https://github.com/basecamp/lexxy
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行削減されています。
Lexicalのカーソル制御を改善するProvisionalParagraphNodeを導入。DecoratorNodeとエディタ境界の間での選択を自然にし、画像ギャラリーなどの複雑なコンポーネント実装を容易にします。
Lexxyのコアパッケージであるlexicalとextensionを、推移的依存関係から明示的な依存関係に変更。依存関係の宣言を明確化することで、将来的なバージョン競合リスクを軽減し、より安定した管理を実現。
複数の拡張機能実装を統一的な LexxyExtension 基底クラスへ移行。拡張機能が自身の有効化条件を定義することで、エディタ本体の条件分岐を削減し、mergeRegister によるクリーンアップ処理でライフサイクル管理を改善。
LexxyエディタのDOM構造から二重の`<div>`ラッピングを削除し、`editor.update()`内の関数が新しい更新ループを作成しないようリファクタリング。これによりエディタの初期化が簡潔になり、不要な再レンダリングが削減されました。
LexxyのSandboxページがTurbo Frameベースに再実装され、プリセット切り替えがURLルーティングで実現されました。Stimulusの動的ロードを排除し、各プリセットへの直リンクとブラウザ履歴の統合を可能にしています。
Lexxyエディタでスタイル付きテキストをペーストした直後のタイピングで、ペースト元のスタイルが保持される問題を修正。selectionオブジェクトにも正規化されたスタイルとフォーマットを適用することで、ペースト後の入力が一貫した正規化ルールに従うようになりました。
Lexxyでカスタムタグ名を設定した際にHTMLが読み込まれない競合状態を修正。カスタム要素の登録を`setTimeout`で遅延実行することで、`Lexxy.configure`の設定が確実に先行して適用されるようになりました。
Lexicalエディタの添付ファイルノードをリファクタリングし、兄弟ノード間の相互更新による競合状態を解消。カスタムイベントシステムを削除し、ノード自身がエディタ参照を保持してアップロード処理を管理する設計に変更しました。
Lexxyエディタのツールバーダイアログ(ドロップダウン)のクローズ処理を、クリックアウトサイドハンドラーからエディタの選択変更イベントに移行。ツールバーをエディタの一部として扱うよう、フォーカスイベントの定義を見直し、`lexxy:focus`/`lexxy:blur`がエディタ要素全体(ツールバーを含む)を対象とするように変更されました。
Lexxyのプロンプト機能で複数文字列(`by:`、`group:`など)をトリガーとして使用できるようになりました。従来の単一文字検出ロジックを、文字列長を考慮した部分文字列抽出に変更し、後方互換性を保ちながら拡張しています。